From 5fc327fd579a8698eb1a37fcf8f7d8a1a0928c69 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Wed, 9 Feb 2011 13:31:31 +0000 Subject: [PATCH 001/287] - Add GetTransform declaration. (until we have undocgdi.h). svn path=/trunk/; revision=50633 --- reactos/include/psdk/wingdi.h | 1 + 1 file changed, 1 insertion(+) diff --git a/reactos/include/psdk/wingdi.h b/reactos/include/psdk/wingdi.h index 052b04be334..c9e0b9e610e 100644 --- a/reactos/include/psdk/wingdi.h +++ b/reactos/include/psdk/wingdi.h @@ -3110,6 +3110,7 @@ int WINAPI GetTextFaceA(HDC,int,LPSTR); int WINAPI GetTextFaceW(HDC,int,LPWSTR); BOOL WINAPI GetTextMetricsA(HDC,LPTEXTMETRICA); BOOL WINAPI GetTextMetricsW(HDC,LPTEXTMETRICW); +BOOL WINAPI GetTransform(HDC,DWORD,XFORM*); BOOL WINAPI GetViewportExtEx(HDC,LPSIZE); BOOL WINAPI GetViewportOrgEx(HDC,LPPOINT); BOOL WINAPI GetWindowExtEx(HDC,LPSIZE); From 50df1352e94bf085d3abdfdb1f76f2a221de1ca2 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Wed, 9 Feb 2011 14:07:10 +0000 Subject: [PATCH 002/287] - Enable simple FontSmoothing by default. It matters for arwinss, trunk just ignores this value and always smoothes the fonts. svn path=/trunk/; revision=50634 --- reactos/boot/bootdata/hivedef_amd64.inf | 2 +- reactos/boot/bootdata/hivedef_arm.inf | 2 +- reactos/boot/bootdata/hivedef_i386.inf | Bin 314522 -> 314522 bytes 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/boot/bootdata/hivedef_amd64.inf b/reactos/boot/bootdata/hivedef_amd64.inf index f26f7024ece..fbf8909fd72 100644 --- a/reactos/boot/bootdata/hivedef_amd64.inf +++ b/reactos/boot/bootdata/hivedef_amd64.inf @@ -97,7 +97,7 @@ HKCU,"Control Panel\Desktop","ScreenSaverIsSecure",2,"1" HKCU,"Control Panel\Desktop","ScreenSaveTimeOut",0,"600" HKCU,"Control Panel\Desktop","WaitToKillAppTimeout",2,"20000" HKCU,"Control Panel\Desktop","Wallpaper",0x00000000,"" -HKCU,"Control Panel\Desktop","FontSmoothing",0,"0" +HKCU,"Control Panel\Desktop","FontSmoothing",0,"1" HKCU,"Control Panel\Desktop","FontSmoothingOrientation",0x00010003,0x00000001 HKCU,"Control Panel\Desktop","FontSmoothingType",0x00010003,0x00000001 HKCU,"Control Panel\Desktop","ForegroundFlashCount",0x00010003,0x00000003 diff --git a/reactos/boot/bootdata/hivedef_arm.inf b/reactos/boot/bootdata/hivedef_arm.inf index 27dcf75b2e3..7ff0764f519 100644 --- a/reactos/boot/bootdata/hivedef_arm.inf +++ b/reactos/boot/bootdata/hivedef_arm.inf @@ -28,7 +28,7 @@ HKCU,"Control Panel\Desktop","HungAppTimeout",0x00000002,"5000" HKCU,"Control Panel\Desktop","SCRNSAVE.EXE",0x00000000,"" HKCU,"Control Panel\Desktop","WaitToKillAppTimeout",0x00000002,"20000" HKCU,"Control Panel\Desktop","Wallpaper",0x00000000,"" -HKCU,"Control Panel\Desktop","FontSmoothing",0,"0" +HKCU,"Control Panel\Desktop","FontSmoothing",0,"1" HKCU,"Control Panel\Desktop","SmoothScroll",3,00,00,00,00 HKCU,"Control Panel\Desktop","UserPreferencesMask",3,10,00,00,80 HKCU,"Control Panel\Desktop","LowPowerActive",,"0" diff --git a/reactos/boot/bootdata/hivedef_i386.inf b/reactos/boot/bootdata/hivedef_i386.inf index aeb59c43efb7b9302f506a42bc37ebc6e1f11235..b49f1ba038d9ced2bd1fbfdd8335e70005457774 100644 GIT binary patch delta 38 rcmbO=Q+U=);SEL_lfS6COy<*&YM!9cK0$*Kh?#(xdHVzn7Oo`#8+8qd delta 37 qcmbO=Q+U=);SEL_lPlT`CTZ$5Pta(epuq^lOhC-MeS!uH*Af5_lnr12 From 05de74702aa511e67c0a8066522f04b566ae4844 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Wed, 9 Feb 2011 20:42:44 +0000 Subject: [PATCH 003/287] - Robert Horvath: LocalUnlock has to be different from GlobalUnlock. The subtle difference between LocalUnlock and GlobalUnlock, is, that the former will return FALSE and set ERROR_NOT_LOCKED on LMEM_FIXED allocations. Fixes 1 kernel32:heap failure. See issue #5869 for more details. svn path=/trunk/; revision=50637 --- reactos/dll/win32/kernel32/mem/local.c | 58 +++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/reactos/dll/win32/kernel32/mem/local.c b/reactos/dll/win32/kernel32/mem/local.c index 68d9de20699..875ae4bce8a 100644 --- a/reactos/dll/win32/kernel32/mem/local.c +++ b/reactos/dll/win32/kernel32/mem/local.c @@ -441,8 +441,62 @@ BOOL NTAPI LocalUnlock(HLOCAL hMem) { - /* This is the same as a Global Unlock */ - return GlobalUnlock(hMem); + PBASE_HEAP_HANDLE_ENTRY HandleEntry; + BOOL RetVal = TRUE; + + /* Check if this was a simple allocated heap entry */ + if (!((ULONG_PTR)hMem & BASE_HEAP_IS_HANDLE_ENTRY)) + { + /* Fail, because LocalUnlock is not supported on LMEM_FIXED allocations */ + SetLastError(ERROR_NOT_LOCKED); + return FALSE; + } + + /* Otherwise, lock the heap */ + RtlLockHeap(hProcessHeap); + + /* Get the handle entry */ + HandleEntry = BaseHeapGetEntry(hMem); + BASE_TRACE_HANDLE(HandleEntry, hMem); + + _SEH2_TRY + { + /* Make sure it's valid */ + if (!BaseHeapValidateEntry(HandleEntry)) + { + /* It's not, fail */ + BASE_TRACE_FAILURE(); + SetLastError(ERROR_INVALID_HANDLE); + RetVal = FALSE; + } + else + { + /* Otherwise, decrement lock count, unless we're already at 0*/ + if (!HandleEntry->LockCount--) + { + /* In which case we simply lock it back and fail */ + HandleEntry->LockCount++; + SetLastError(ERROR_NOT_LOCKED); + RetVal = FALSE; + } + else if (!HandleEntry->LockCount) + { + /* Nothing to unlock */ + SetLastError(NO_ERROR); + RetVal = FALSE; + } + } + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + SetLastError(ERROR_INVALID_PARAMETER); + RetVal = FALSE; + } + _SEH2_END + + /* All done. Unlock the heap and return the pointer */ + RtlUnlockHeap(hProcessHeap); + return RetVal; } /* EOF */ From c7208c0053b6e2ffa4b6a76a4168cfe02827ada5 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Wed, 9 Feb 2011 20:50:28 +0000 Subject: [PATCH 004/287] - Robert Horvath: Add GlobalFlag entry in hivesys_{arch}.inf with the default value 0x0. See issue #5870 for more details. svn path=/trunk/; revision=50638 --- reactos/boot/bootdata/hivesys_amd64.inf | 1 + reactos/boot/bootdata/hivesys_arm.inf | 1 + reactos/boot/bootdata/hivesys_i386.inf | 1 + 3 files changed, 3 insertions(+) diff --git a/reactos/boot/bootdata/hivesys_amd64.inf b/reactos/boot/bootdata/hivesys_amd64.inf index 517dfa1a53b..af890ec1b55 100644 --- a/reactos/boot/bootdata/hivesys_amd64.inf +++ b/reactos/boot/bootdata/hivesys_amd64.inf @@ -886,6 +886,7 @@ HKLM,"SYSTEM\CurrentControlSet\Control\GroupOrderList","SCSI Miniport", 0x000000 ; Session Manager stuff HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager","BootExecute", 0x00010000, \ "autocheck autochk *" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager","GlobalFlag", 0x00010003, 0x00000000 HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager","ObjectDirectories",0x00010000, \ "\Windows", \ "\RPC Control" diff --git a/reactos/boot/bootdata/hivesys_arm.inf b/reactos/boot/bootdata/hivesys_arm.inf index abf8d68c100..e766a5aaad5 100644 --- a/reactos/boot/bootdata/hivesys_arm.inf +++ b/reactos/boot/bootdata/hivesys_arm.inf @@ -740,6 +740,7 @@ HKLM,"SYSTEM\CurrentControlSet\Control\GroupOrderList","SCSI Miniport", 0x000000 ; Session Manager stuff HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager","BootExecute", 0x00010000, \ "autocheck autochk *" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager","GlobalFlag", 0x00010003, 0x00000000 HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager","ObjectDirectories",0x00010000, \ "\Windows", \ "\RPC Control" diff --git a/reactos/boot/bootdata/hivesys_i386.inf b/reactos/boot/bootdata/hivesys_i386.inf index c7447cda8dc..a5d1e4264cc 100644 --- a/reactos/boot/bootdata/hivesys_i386.inf +++ b/reactos/boot/bootdata/hivesys_i386.inf @@ -979,6 +979,7 @@ HKLM,"SYSTEM\CurrentControlSet\Control\GroupOrderList","SCSI Miniport", 0x000000 ; Session Manager stuff HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager","BootExecute", 0x00010000, \ "autocheck autochk *" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager","GlobalFlag", 0x00010003, 0x00000000 HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager","ObjectDirectories",0x00010000, \ "\Windows", \ "\RPC Control" From 7c7511301aa21611c3dd40fe6d11284e252e97a6 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Wed, 9 Feb 2011 21:22:47 +0000 Subject: [PATCH 005/287] - Add a missing ORing of the registry-loaded GlobalFlags value in ExpInitializeExecutive. Thanks to Robert Horvath for spotting the issue. See issue #5870 for more details. svn path=/trunk/; revision=50639 --- reactos/ntoskrnl/ex/init.c | 3 +++ reactos/ntoskrnl/include/internal/cm.h | 1 + 2 files changed, 4 insertions(+) diff --git a/reactos/ntoskrnl/ex/init.c b/reactos/ntoskrnl/ex/init.c index b3039cb2593..3e2066dc482 100644 --- a/reactos/ntoskrnl/ex/init.c +++ b/reactos/ntoskrnl/ex/init.c @@ -1061,6 +1061,9 @@ ExpInitializeExecutive(IN ULONG Cpu, if (CmNtCSDReleaseType == 1) CmNtSpBuildNumber |= 1830 << 16; } + /* Add loaded CmNtGlobalFlag value */ + NtGlobalFlag |= CmNtGlobalFlag; + /* Initialize the executive at phase 0 */ if (!ExInitSystem()) KeBugCheck(PHASE0_INITIALIZATION_FAILED); diff --git a/reactos/ntoskrnl/include/internal/cm.h b/reactos/ntoskrnl/include/internal/cm.h index 30fa3669f4a..9a0dd907585 100644 --- a/reactos/ntoskrnl/include/internal/cm.h +++ b/reactos/ntoskrnl/include/internal/cm.h @@ -1585,6 +1585,7 @@ extern ULONG CmDefaultLanguageIdType; extern WCHAR CmInstallUILanguageId[]; extern ULONG CmInstallUILanguageIdLength; extern ULONG CmInstallUILanguageIdType; +extern ULONG CmNtGlobalFlag; extern LANGID PsInstallUILanguageId; extern LANGID PsDefaultUILanguageId; extern CM_SYSTEM_CONTROL_VECTOR CmControlVector[]; From fee844b6ffcaf491beb3a7ec5d38e6c466fd0693 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 10 Feb 2011 10:30:43 +0000 Subject: [PATCH 006/287] Merge all amd64 related changes from cmake branch svn path=/trunk/; revision=50640 --- reactos/include/ndk/amd64/ketypes.h | 95 ++++++++++++++++++ reactos/include/xdk/amd64/ke.h | 2 +- reactos/lib/sdk/crt/except/amd64/chkstk_asm.s | 12 ++- reactos/lib/sdk/crt/except/amd64/seh.s | 49 +++++----- reactos/lib/sdk/crt/math/amd64/alldiv.S | 15 +-- reactos/lib/sdk/crt/math/amd64/atan.S | 5 +- reactos/lib/sdk/crt/math/amd64/atan2.S | 5 +- reactos/lib/sdk/crt/math/amd64/ceil.S | 4 +- reactos/lib/sdk/crt/math/amd64/ceilf.S | 5 +- reactos/lib/sdk/crt/math/amd64/exp.S | 3 +- reactos/lib/sdk/crt/math/amd64/fabs.S | 8 +- reactos/lib/sdk/crt/math/amd64/floor.S | 3 +- reactos/lib/sdk/crt/math/amd64/floorf.S | 3 +- reactos/lib/sdk/crt/math/amd64/fmod.S | 7 +- reactos/lib/sdk/crt/math/amd64/fmodf.S | 3 +- reactos/lib/sdk/crt/math/amd64/ldexp.S | 3 +- reactos/lib/sdk/crt/math/amd64/log.S | 5 +- reactos/lib/sdk/crt/math/amd64/log10.S | 4 +- reactos/lib/sdk/crt/math/amd64/pow.S | 4 +- reactos/lib/sdk/crt/math/amd64/sqrt.S | 3 +- reactos/lib/sdk/crt/math/amd64/sqrtf.S | 3 +- reactos/lib/sdk/crt/math/amd64/tan.S | 3 +- reactos/lib/sdk/crt/setjmp/amd64/setjmp.s | 97 ++++++++++--------- reactos/ntoskrnl/include/internal/amd64/mm.h | 14 ++- reactos/ntoskrnl/ke/amd64/thrdini.c | 37 +++---- reactos/ntoskrnl/ke/amd64/trap.S | 20 ++-- reactos/ntoskrnl/mm/amd64/init.c | 32 +++--- reactos/tools/rsym/rsym64.h | 1 + 28 files changed, 283 insertions(+), 162 deletions(-) diff --git a/reactos/include/ndk/amd64/ketypes.h b/reactos/include/ndk/amd64/ketypes.h index 9e9042fa19a..9a9ee6f39cc 100644 --- a/reactos/include/ndk/amd64/ketypes.h +++ b/reactos/include/ndk/amd64/ketypes.h @@ -81,6 +81,7 @@ Author: #define CR4_PGE 0x80 #define CR4_FXSR 0x200 #define CR4_XMMEXCPT 0x400 +#define CR4_CHANNELS 0x800 // // EFlags @@ -98,6 +99,39 @@ Author: #define EFLAGS_USER_SANITIZE 0x3F4DD7 #define EFLAG_SIGN 0x8000 #define EFLAG_ZERO 0x4000 +#define EFLAGS_TF_MASK 0x0100 +#define EFLAGS_TF_SHIFT 0x0008 +#define EFLAGS_ID_MASK 0x200000 +#define EFLAGS_IF_MASK 0x0200 +#define EFLAGS_IF_SHIFT 0x0009 + +// +// Machine Specific Registers +// +#define MSR_EFER 0xC0000080 +#define MSR_STAR 0xC0000081 +#define MSR_LSTAR 0xC0000082 +#define MSR_CSTAR 0xC0000083 +#define MSR_SYSCALL_MASK 0xC0000084 +#define MSR_FS_BASE 0xC0000100 +#define MSR_GS_BASE 0xC0000101 +#define MSR_GS_SWAP 0xC0000102 +#define MSR_MCG_STATUS 0x017A +#define MSR_AMD_ACCESS 0x9C5A203A + +// +// Flags in MSR_EFER +// +#define MSR_LMA 0x0400 +#define MSR_LME 0x0100 +#define MSR_SCE 0x0001 +#define MSR_NXE 0x0800 +#define MSR_PAT 0x0277 +#define MSR_DEGUG_CTL 0x01D9 +#define MSR_LAST_BRANCH_FROM 0x01DB +#define MSR_LAST_BRANCH_TO 0x01DC +#define MSR_LAST_EXCEPTION_FROM 0x01DD +#define MSR_LAST_EXCEPTION_TO 0x01DE // // IPI Types @@ -115,6 +149,15 @@ Author: #define PRCB_BUILD_DEBUG 1 #define PRCB_BUILD_UNIPROCESSOR 2 +// +// Service Table +// +#define NUMBER_SERVICE_TABLES 2 +#define SERVICE_NUMBER_MASK 0xFFF +#define SERVICE_TABLE_SHIFT 7 +#define SERVICE_TABLE_MASK 0x20 +#define SERVICE_TABLE_TEST 0x20 + // // HAL Variables // @@ -144,6 +187,8 @@ Author: #define SYNCH_LEVEL (IPI_LEVEL - 2) #endif +#define NMI_STACK_SIZE 0x2000 + // // Trap Frame Definition // @@ -863,6 +908,56 @@ typedef struct _KEXCEPTION_FRAME UINT64 Return; } KEXCEPTION_FRAME, *PKEXCEPTION_FRAME; +typedef struct _DISPATCHER_CONTEXT +{ + ULONG64 ControlPc; + PVOID ImageBase; + PVOID FunctionEntry; + PVOID EstablisherFrame; + ULONG64 TargetIp; + PVOID ContextRecord; + PVOID LanguageHandler; + PVOID HandlerData; + PVOID HistoryTable; + ULONG ScopeIndex; +} DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT; + + +typedef struct _KSTART_FRAME +{ + ULONG64 P1Home; + ULONG64 P2Home; + ULONG64 P3Home; + ULONG64 P4Home; + ULONG64 P5Home; + ULONG64 Return; +} KSTART_FRAME, *PKSTART_FRAME; + +typedef struct _KSWITCH_FRAME +{ + ULONG64 P1Home; + ULONG64 P2Home; + ULONG64 P3Home; + ULONG64 P4Home; + ULONG64 P5Home; + ULONG64 ApcBypass; + ULONG64 Rbp; + ULONG64 Return; +} KSWITCH_FRAME, *PKSWITCH_FRAME; + +typedef struct _KTIMER_TABLE_ENTRY +{ + ULONG_PTR Lock; + LIST_ENTRY Entry; + ULARGE_INTEGER Time; +} KTIMER_TABLE_ENTRY, *PKTIMER_TABLE_ENTRY; + +typedef struct _KTIMER_TABLE +{ + KTIMER* TimerExpiry[64]; + KTIMER_TABLE_ENTRY TimerEntries[256]; +} KTIMER_TABLE, *PKTIMER_TABLE; + // // Inline function to get current KPRCB // diff --git a/reactos/include/xdk/amd64/ke.h b/reactos/include/xdk/amd64/ke.h index 833aca8bee0..f63add4d7b6 100644 --- a/reactos/include/xdk/amd64/ke.h +++ b/reactos/include/xdk/amd64/ke.h @@ -67,7 +67,7 @@ KfRaiseIrql(IN KIRQL NewIrql) { KIRQL OldIrql; - OldIrql = __readcr8(); + OldIrql = (KIRQL)__readcr8(); //ASSERT(OldIrql <= NewIrql); __writecr8(NewIrql); return OldIrql; diff --git a/reactos/lib/sdk/crt/except/amd64/chkstk_asm.s b/reactos/lib/sdk/crt/except/amd64/chkstk_asm.s index b1486dea898..113b45bc100 100644 --- a/reactos/lib/sdk/crt/except/amd64/chkstk_asm.s +++ b/reactos/lib/sdk/crt/except/amd64/chkstk_asm.s @@ -10,21 +10,25 @@ #include +/* CODE **********************************************************************/ +.code64 PUBLIC MsgUnimplemented MsgUnimplemented: .asciz "WARNING: %s at %s:%d is UNIMPLEMENTED!\n" -.proc _chkstk +FUNC _chkstk + .endprolog UNIMPLEMENTED chkstk ret -.endp +ENDFUNC _chkstk -.proc _alloca_probe +FUNC _alloca_probe + .endprolog UNIMPLEMENTED alloca_probe ret -.endp +ENDFUNC _alloca_probe END /* EOF */ diff --git a/reactos/lib/sdk/crt/except/amd64/seh.s b/reactos/lib/sdk/crt/except/amd64/seh.s index 9d44d3ffd4d..b714dda8ef9 100644 --- a/reactos/lib/sdk/crt/except/amd64/seh.s +++ b/reactos/lib/sdk/crt/except/amd64/seh.s @@ -17,42 +17,43 @@ /* GLOBALS *******************************************************************/ -.globl _global_unwind2 -.globl _local_unwind2 -.globl _abnormal_termination -.globl _except_handler2 -.globl _except_handler3 +PUBLIC _global_unwind2 +PUBLIC _local_unwind2 +PUBLIC _abnormal_termination +PUBLIC _except_handler2 +PUBLIC _except_handler3 -/* FUNCTIONS *****************************************************************/ +/* CODE **********************************************************************/ +.code64 -.func _unwind_handler -_unwind_handler: +FUNC _unwind_handler + .endprolog ret -.endfunc +ENDFUNC _unwind_handler -.func _global_unwind2 -_global_unwind2: +FUNC _global_unwind2 + .endprolog ret -.endfunc +ENDFUNC _global_unwind2 -.func _abnormal_termination -_abnormal_termination: +FUNC _abnormal_termination + .endprolog ret -.endfunc +ENDFUNC _abnormal_termination -.func _local_unwind2 -_local_unwind2: +FUNC _local_unwind2 + .endprolog ret -.endfunc +ENDFUNC _local_unwind2 -.func _except_handler2 -_except_handler2: +FUNC _except_handler2 + .endprolog ret -.endfunc +ENDFUNC _except_handler2 -.func _except_handler3 -_except_handler3: +FUNC _except_handler3 + .endprolog ret -.endfunc +ENDFUNC _except_handler3 END diff --git a/reactos/lib/sdk/crt/math/amd64/alldiv.S b/reactos/lib/sdk/crt/math/amd64/alldiv.S index b4018cc4739..f4608b2102a 100644 --- a/reactos/lib/sdk/crt/math/amd64/alldiv.S +++ b/reactos/lib/sdk/crt/math/amd64/alldiv.S @@ -10,18 +10,21 @@ #include -/* DATA *********************************************************************/ +/* DATA **********************************************************************/ +.code64 PUBLIC _fltused _fltused: - .long 0x9875 - -/* FUNCTIONS ****************************************************************/ + .long HEX(9875) +/* CODE **********************************************************************/ .code64 -.proc alldiv +FUNC alldiv + .endprolog UNIMPLEMENTED alldiv ret -.endp alldiv +ENDFUNC alldiv + +END diff --git a/reactos/lib/sdk/crt/math/amd64/atan.S b/reactos/lib/sdk/crt/math/amd64/atan.S index 889f10e2825..b649ec0398a 100644 --- a/reactos/lib/sdk/crt/math/amd64/atan.S +++ b/reactos/lib/sdk/crt/math/amd64/atan.S @@ -11,11 +11,12 @@ #include #include -/* FUNCTIONS ****************************************************************/ - +/* CODE **********************************************************************/ .code64 PUBLIC atan atan: UNIMPLEMENTED atan ret + +END diff --git a/reactos/lib/sdk/crt/math/amd64/atan2.S b/reactos/lib/sdk/crt/math/amd64/atan2.S index fd611101f0a..bccaeaf9a3d 100644 --- a/reactos/lib/sdk/crt/math/amd64/atan2.S +++ b/reactos/lib/sdk/crt/math/amd64/atan2.S @@ -11,11 +11,12 @@ #include #include -/* FUNCTIONS ****************************************************************/ - +/* CODE **********************************************************************/ .code64 PUBLIC atan2 atan2: UNIMPLEMENTED atan2 ret + +END diff --git a/reactos/lib/sdk/crt/math/amd64/ceil.S b/reactos/lib/sdk/crt/math/amd64/ceil.S index 17ae0150717..c5b7d6dfc63 100644 --- a/reactos/lib/sdk/crt/math/amd64/ceil.S +++ b/reactos/lib/sdk/crt/math/amd64/ceil.S @@ -11,8 +11,7 @@ #include #include -/* FUNCTIONS ****************************************************************/ - +/* CODE **********************************************************************/ .code64 PUBLIC ceil @@ -20,3 +19,4 @@ ceil: UNIMPLEMENTED ceil ret +END diff --git a/reactos/lib/sdk/crt/math/amd64/ceilf.S b/reactos/lib/sdk/crt/math/amd64/ceilf.S index 2b2d14b03f0..fd04e4da046 100644 --- a/reactos/lib/sdk/crt/math/amd64/ceilf.S +++ b/reactos/lib/sdk/crt/math/amd64/ceilf.S @@ -11,8 +11,7 @@ #include #include -/* FUNCTIONS ****************************************************************/ - +/* CODE **********************************************************************/ .code64 PUBLIC ceilf @@ -39,7 +38,7 @@ ceilf: fstp dword ptr [rsp] movss xmm0, [rsp] - + add rsp, 16 ret diff --git a/reactos/lib/sdk/crt/math/amd64/exp.S b/reactos/lib/sdk/crt/math/amd64/exp.S index 44b324e4267..8fda82ba07b 100644 --- a/reactos/lib/sdk/crt/math/amd64/exp.S +++ b/reactos/lib/sdk/crt/math/amd64/exp.S @@ -11,8 +11,7 @@ #include #include -/* FUNCTIONS ****************************************************************/ - +/* CODE **********************************************************************/ .code64 PUBLIC exp diff --git a/reactos/lib/sdk/crt/math/amd64/fabs.S b/reactos/lib/sdk/crt/math/amd64/fabs.S index 3c1e8f2dcf1..84452dc1942 100644 --- a/reactos/lib/sdk/crt/math/amd64/fabs.S +++ b/reactos/lib/sdk/crt/math/amd64/fabs.S @@ -10,12 +10,12 @@ #include -/* FUNCTIONS ****************************************************************/ - +/* CODE **********************************************************************/ .code64 -PUBLIC fabs -fabs: +PUBLIC _fabs +_fabs: UNIMPLEMENTED fabs ret +END diff --git a/reactos/lib/sdk/crt/math/amd64/floor.S b/reactos/lib/sdk/crt/math/amd64/floor.S index c0fba3dd066..ee39d77955f 100644 --- a/reactos/lib/sdk/crt/math/amd64/floor.S +++ b/reactos/lib/sdk/crt/math/amd64/floor.S @@ -11,8 +11,7 @@ #include #include -/* FUNCTIONS ****************************************************************/ - +/* CODE **********************************************************************/ .code64 PUBLIC floor diff --git a/reactos/lib/sdk/crt/math/amd64/floorf.S b/reactos/lib/sdk/crt/math/amd64/floorf.S index 0ac9098b9a3..bfb35816f47 100644 --- a/reactos/lib/sdk/crt/math/amd64/floorf.S +++ b/reactos/lib/sdk/crt/math/amd64/floorf.S @@ -11,8 +11,7 @@ #include #include -/* FUNCTIONS ****************************************************************/ - +/* CODE **********************************************************************/ .code64 PUBLIC floorf diff --git a/reactos/lib/sdk/crt/math/amd64/fmod.S b/reactos/lib/sdk/crt/math/amd64/fmod.S index 697257ab368..5117d8bc358 100644 --- a/reactos/lib/sdk/crt/math/amd64/fmod.S +++ b/reactos/lib/sdk/crt/math/amd64/fmod.S @@ -10,10 +10,11 @@ #include -/* DATA *********************************************************************/ +/* CODE **********************************************************************/ +.code64 -PUBLIC fmod -fmod: +PUBLIC _fmod +_fmod: UNIMPLEMENTED fmod ret diff --git a/reactos/lib/sdk/crt/math/amd64/fmodf.S b/reactos/lib/sdk/crt/math/amd64/fmodf.S index d0e24ef9529..711ef59f6ad 100644 --- a/reactos/lib/sdk/crt/math/amd64/fmodf.S +++ b/reactos/lib/sdk/crt/math/amd64/fmodf.S @@ -10,7 +10,8 @@ #include -/* DATA *********************************************************************/ +/* CODE **********************************************************************/ +.code64 PUBLIC fmodf fmodf: diff --git a/reactos/lib/sdk/crt/math/amd64/ldexp.S b/reactos/lib/sdk/crt/math/amd64/ldexp.S index a83660ae7a3..4635d754e27 100644 --- a/reactos/lib/sdk/crt/math/amd64/ldexp.S +++ b/reactos/lib/sdk/crt/math/amd64/ldexp.S @@ -10,7 +10,8 @@ #include -/* DATA *********************************************************************/ +/* CODE **********************************************************************/ +.code64 PUBLIC ldexp ldexp: diff --git a/reactos/lib/sdk/crt/math/amd64/log.S b/reactos/lib/sdk/crt/math/amd64/log.S index 1289a745cba..f7ffc57f612 100644 --- a/reactos/lib/sdk/crt/math/amd64/log.S +++ b/reactos/lib/sdk/crt/math/amd64/log.S @@ -10,9 +10,12 @@ #include -/* DATA *********************************************************************/ +/* CODE **********************************************************************/ +.code64 PUBLIC log log: UNIMPLEMENTED log ret + +END diff --git a/reactos/lib/sdk/crt/math/amd64/log10.S b/reactos/lib/sdk/crt/math/amd64/log10.S index f8014aa5bc6..5038d178530 100644 --- a/reactos/lib/sdk/crt/math/amd64/log10.S +++ b/reactos/lib/sdk/crt/math/amd64/log10.S @@ -10,10 +10,12 @@ #include -/* DATA *********************************************************************/ +/* CODE **********************************************************************/ +.code64 PUBLIC log10 log10: UNIMPLEMENTED log10 ret +END diff --git a/reactos/lib/sdk/crt/math/amd64/pow.S b/reactos/lib/sdk/crt/math/amd64/pow.S index 48adf3961f3..fd8d104ee4e 100644 --- a/reactos/lib/sdk/crt/math/amd64/pow.S +++ b/reactos/lib/sdk/crt/math/amd64/pow.S @@ -11,10 +11,12 @@ #include #include -/* DATA *********************************************************************/ +/* CODE **********************************************************************/ +.code64 PUBLIC pow pow: UNIMPLEMENTED pow ret +END diff --git a/reactos/lib/sdk/crt/math/amd64/sqrt.S b/reactos/lib/sdk/crt/math/amd64/sqrt.S index 282419e78a5..4c234eb0739 100644 --- a/reactos/lib/sdk/crt/math/amd64/sqrt.S +++ b/reactos/lib/sdk/crt/math/amd64/sqrt.S @@ -11,7 +11,8 @@ #include #include -/* DATA *********************************************************************/ +/* CODE **********************************************************************/ +.code64 PUBLIC sqrt sqrt: diff --git a/reactos/lib/sdk/crt/math/amd64/sqrtf.S b/reactos/lib/sdk/crt/math/amd64/sqrtf.S index da75fcf42f5..e4d35085d8f 100644 --- a/reactos/lib/sdk/crt/math/amd64/sqrtf.S +++ b/reactos/lib/sdk/crt/math/amd64/sqrtf.S @@ -11,7 +11,8 @@ #include #include -/* DATA *********************************************************************/ +/* CODE **********************************************************************/ +.code64 PUBLIC sqrtf sqrtf: diff --git a/reactos/lib/sdk/crt/math/amd64/tan.S b/reactos/lib/sdk/crt/math/amd64/tan.S index 93e5d01d762..53d82877e86 100644 --- a/reactos/lib/sdk/crt/math/amd64/tan.S +++ b/reactos/lib/sdk/crt/math/amd64/tan.S @@ -11,7 +11,8 @@ #include #include -/* DATA *********************************************************************/ +/* CODE **********************************************************************/ +.code64 PUBLIC tan tan: diff --git a/reactos/lib/sdk/crt/setjmp/amd64/setjmp.s b/reactos/lib/sdk/crt/setjmp/amd64/setjmp.s index a969bc43db5..3c4b449c621 100644 --- a/reactos/lib/sdk/crt/setjmp/amd64/setjmp.s +++ b/reactos/lib/sdk/crt/setjmp/amd64/setjmp.s @@ -11,41 +11,45 @@ #include #include -#define JUMP_BUFFER_Frame 0x00 -#define JUMP_BUFFER_Rbx 0x08 -#define JUMP_BUFFER_Rsp 0x10 -#define JUMP_BUFFER_Rbp 0x18 -#define JUMP_BUFFER_Rsi 0x20 -#define JUMP_BUFFER_Rdi 0x28 -#define JUMP_BUFFER_R12 0x30 -#define JUMP_BUFFER_R13 0x38 -#define JUMP_BUFFER_R14 0x40 -#define JUMP_BUFFER_R15 0x48 -#define JUMP_BUFFER_Rip 0x50 -#define JUMP_BUFFER_Spare 0x58 -#define JUMP_BUFFER_Xmm6 0x60 -#define JUMP_BUFFER_Xmm7 0x70 -#define JUMP_BUFFER_Xmm8 0x80 -#define JUMP_BUFFER_Xmm9 0x90 -#define JUMP_BUFFER_Xmm10 0xa0 -#define JUMP_BUFFER_Xmm11 0xb0 -#define JUMP_BUFFER_Xmm12 0xc0 -#define JUMP_BUFFER_Xmm13 0xd0 -#define JUMP_BUFFER_Xmm14 0xe0 -#define JUMP_BUFFER_Xmm15 0xf0 +#define JUMP_BUFFER_Frame 0 /* 0x00 */ +#define JUMP_BUFFER_Rbx 8 /* 0x08 */ +#define JUMP_BUFFER_Rsp 16 /* 0x10 */ +#define JUMP_BUFFER_Rbp 24 /* 0x18 */ +#define JUMP_BUFFER_Rsi 32 /* 0x20 */ +#define JUMP_BUFFER_Rdi 40 /* 0x28 */ +#define JUMP_BUFFER_R12 48 /* 0x30 */ +#define JUMP_BUFFER_R13 56 /* 0x38 */ +#define JUMP_BUFFER_R14 64 /* 0x40 */ +#define JUMP_BUFFER_R15 72 /* 0x48 */ +#define JUMP_BUFFER_Rip 80 /* 0x50 */ +#define JUMP_BUFFER_Spare 88 /* 0x58 */ +#define JUMP_BUFFER_Xmm6 96 /* 0x60 */ +#define JUMP_BUFFER_Xmm7 112 /* 0x70 */ +#define JUMP_BUFFER_Xmm8 128 /* 0x80 */ +#define JUMP_BUFFER_Xmm9 144 /* 0x90 */ +#define JUMP_BUFFER_Xmm10 160 /* 0xa0 */ +#define JUMP_BUFFER_Xmm11 176 /* 0xb0 */ +#define JUMP_BUFFER_Xmm12 192 /* 0xc0 */ +#define JUMP_BUFFER_Xmm13 208 /* 0xd0 */ +#define JUMP_BUFFER_Xmm14 224 /* 0xe0 */ +#define JUMP_BUFFER_Xmm15 240 /* 0xf0 */ /* FUNCTIONS ******************************************************************/ +.code64 -/* +/*! * int _setjmp(jmp_buf env); * - * Parameters: - jmp_buf env - * Returns: 0 - * Notes: Sets up the jmp_buf + * \param - jmp_buf env + * \return 0 + * \note Sets up the jmp_buf */ PUBLIC _setjmp -.proc _setjmp +FUNC _setjmp + + .endprolog + /* Load rsp as it was before the call into rax */ lea rax, [rsp + 8] /* Load return address into r8 */ @@ -73,18 +77,21 @@ PUBLIC _setjmp movdqa [rcx + JUMP_BUFFER_Xmm15], xmm15 xor rax, rax ret -.endp setjmp +ENDFUNC _setjmp -/* +/*! * int _setjmpex(jmp_buf _Buf,void *_Ctx); * - * Parameters: - jmp_buf env - * - frame - * Returns: 0 - * Notes: Sets up the jmp_buf + * \param - jmp_buf env + * \param - frame + * \return 0 + * \note Sets up the jmp_buf */ PUBLIC _setjmpex -.proc _setjmpex +FUNC _setjmpex + + .endprolog + /* Load rsp as it was before the call into rax */ lea rax, [rsp + 8] /* Load return address into r8 */ @@ -112,19 +119,21 @@ PUBLIC _setjmpex movdqa [rcx + JUMP_BUFFER_Xmm15], xmm15 xor rax, rax ret -.endp setjmpex +ENDFUNC _setjmpex -/* +/*! * void longjmp(jmp_buf env, int value); * - * Parameters: - jmp_buf setup by _setjmp - * - int value to return - * Returns: Doesn't return - * Notes: Non-local goto + * \param - jmp_buf setup by _setjmp + * \param - int value to return + * \return Doesn't return + * \note Non-local goto */ PUBLIC longjmp -.proc longjmp +FUNC longjmp + + .endprolog // FIXME: handle frame @@ -152,9 +161,9 @@ PUBLIC longjmp /* return param2 or 1 if it was 0 */ mov rax, rdx test rax, rax - jnz 2f + jnz l2 inc rax -2: jmp r8 -.endp longjmp +l2: jmp r8 +ENDFUNC longjmp END diff --git a/reactos/ntoskrnl/include/internal/amd64/mm.h b/reactos/ntoskrnl/include/internal/amd64/mm.h index d6343ed2d2c..38380cfd90e 100644 --- a/reactos/ntoskrnl/include/internal/amd64/mm.h +++ b/reactos/ntoskrnl/include/internal/amd64/mm.h @@ -131,6 +131,7 @@ MiPteToAddress(PMMPTE Pte) Temp >>= 16; return (PVOID)Temp; } +#define MiPdeToAddress MiPteToAddress BOOLEAN FORCEINLINE @@ -157,8 +158,6 @@ VOID MI_MAKE_PROTOTYPE_PTE(IN PMMPTE NewPte, IN PMMPTE PointerPte) { - ULONG_PTR Offset; - /* Store the Address */ NewPte->u.Long = (ULONG64)PointerPte; @@ -197,9 +196,11 @@ MmInitGlobalKernelPageDirectory(VOID) // FIXME, only copied from x86 #define MI_MAKE_LOCAL_PAGE(x) ((x)->u.Hard.Global = 0) #define MI_MAKE_DIRTY_PAGE(x) ((x)->u.Hard.Dirty = 1) +#define MI_MAKE_ACCESSED_PAGE(x) ((x)->u.Hard.Accessed = 1) #define MI_PAGE_DISABLE_CACHE(x) ((x)->u.Hard.CacheDisable = 1) #define MI_PAGE_WRITE_THROUGH(x) ((x)->u.Hard.WriteThrough = 1) #define MI_PAGE_WRITE_COMBINED(x) ((x)->u.Hard.WriteThrough = 0) +#define MI_IS_PAGE_LARGE(x) ((x)->u.Hard.LargePage == 1) #if !defined(CONFIG_SMP) #define MI_IS_PAGE_WRITEABLE(x) ((x)->u.Hard.Write == 1) #else @@ -231,8 +232,13 @@ MmInitGlobalKernelPageDirectory(VOID) #define MI_MAPPING_RANGE_START (ULONG)HYPER_SPACE #define MI_MAPPING_RANGE_END (MI_MAPPING_RANGE_START + \ MI_HYPERSPACE_PTES * PAGE_SIZE) -#define MI_ZERO_PTE (PMMPTE)(MI_MAPPING_RANGE_END + \ - PAGE_SIZE) +#define MI_DUMMY_PTE (PMMPTE)(MI_MAPPING_RANGE_END + \ + PAGE_SIZE) +#define MI_VAD_BITMAP (PMMPTE)(MI_DUMMY_PTE + \ + PAGE_SIZE) +#define MI_WORKING_SET_LIST (PMMPTE)(MI_VAD_BITMAP + \ + PAGE_SIZE) + /* On x86, these two are the same */ #define MMPDE MMPTE diff --git a/reactos/ntoskrnl/ke/amd64/thrdini.c b/reactos/ntoskrnl/ke/amd64/thrdini.c index 616cd303264..ce81b1398d6 100644 --- a/reactos/ntoskrnl/ke/amd64/thrdini.c +++ b/reactos/ntoskrnl/ke/amd64/thrdini.c @@ -12,24 +12,9 @@ #define NDEBUG #include -typedef struct _KSWITCHFRAME -{ - PVOID ExceptionList; - BOOLEAN ApcBypassDisable; - PVOID RetAddr; -} KSWITCHFRAME, *PKSWITCHFRAME; - -typedef struct _KSTART_FRAME -{ - PKSYSTEM_ROUTINE SystemRoutine; - PKSTART_ROUTINE StartRoutine; - PVOID StartContext; - BOOLEAN UserThread; -} KSTART_FRAME, *PKSTART_FRAME; - typedef struct _KUINIT_FRAME { - KSWITCHFRAME CtxSwitchFrame; + KSWITCH_FRAME CtxSwitchFrame; KSTART_FRAME StartFrame; KTRAP_FRAME TrapFrame; //FX_SAVE_AREA FxSaveArea; @@ -37,7 +22,7 @@ typedef struct _KUINIT_FRAME typedef struct _KKINIT_FRAME { - KSWITCHFRAME CtxSwitchFrame; + KSWITCH_FRAME CtxSwitchFrame; KSTART_FRAME StartFrame; //FX_SAVE_AREA FxSaveArea; } KKINIT_FRAME, *PKKINIT_FRAME; @@ -55,7 +40,7 @@ KiInitializeContextThread(IN PKTHREAD Thread, //PFX_SAVE_AREA FxSaveArea; //PFXSAVE_FORMAT FxSaveFormat; PKSTART_FRAME StartFrame; - PKSWITCHFRAME CtxSwitchFrame; + PKSWITCH_FRAME CtxSwitchFrame; PKTRAP_FRAME TrapFrame; CONTEXT LocalContext; PCONTEXT Context = NULL; @@ -140,7 +125,7 @@ KiInitializeContextThread(IN PKTHREAD Thread, Thread->PreviousMode = UserMode; /* Tell KiThreadStartup of that too */ - StartFrame->UserThread = TRUE; +// StartFrame->UserThread = TRUE; } else { @@ -170,18 +155,18 @@ KiInitializeContextThread(IN PKTHREAD Thread, Thread->PreviousMode = KernelMode; /* Tell KiThreadStartup of that too */ - StartFrame->UserThread = FALSE; +// StartFrame->UserThread = FALSE; } /* Now setup the remaining data for KiThreadStartup */ - StartFrame->StartContext = StartContext; - StartFrame->StartRoutine = StartRoutine; - StartFrame->SystemRoutine = SystemRoutine; +// StartFrame->StartContext = StartContext; +// StartFrame->StartRoutine = StartRoutine; +// StartFrame->SystemRoutine = SystemRoutine; /* And set up the Context Switch Frame */ - CtxSwitchFrame->RetAddr = KiThreadStartup; - CtxSwitchFrame->ApcBypassDisable = TRUE; - CtxSwitchFrame->ExceptionList = EXCEPTION_CHAIN_END;; +// CtxSwitchFrame->RetAddr = KiThreadStartup; +// CtxSwitchFrame->ApcBypassDisable = TRUE; +// CtxSwitchFrame->ExceptionList = EXCEPTION_CHAIN_END;; /* Save back the new value of the kernel stack. */ Thread->KernelStack = (PVOID)CtxSwitchFrame; diff --git a/reactos/ntoskrnl/ke/amd64/trap.S b/reactos/ntoskrnl/ke/amd64/trap.S index 2b95b42894d..e0831d24f1e 100644 --- a/reactos/ntoskrnl/ke/amd64/trap.S +++ b/reactos/ntoskrnl/ke/amd64/trap.S @@ -76,7 +76,7 @@ ENDM #define TRAPFLAG_SYSTEMSERVICE (TRAPFLAG_VOLATILES|TRAPFLAG_DEBUG) #define TRAPFLAG_ALL HEX(ff) -/* +/* * Stack Layout: * |-------------------| * | KTRAP_FRAME | @@ -89,7 +89,7 @@ ENDM */ /* - * ENTER_TRAP_FRAME - Allocate SIZE_KTRAP_FRAME and save registers to it + * ENTER_TRAP_FRAME - Allocate KTRAP_FRAME_LENGTH and save registers to it */ MACRO(ENTER_TRAP_FRAME, Flags) LOCAL dont_swap @@ -107,8 +107,8 @@ else endif /* Make room for a KTRAP_FRAME */ - sub rsp, (SIZE_KTRAP_FRAME - SIZE_INITIAL_FRAME) - .allocstack (SIZE_KTRAP_FRAME - SIZE_INITIAL_FRAME) + sub rsp, (KTRAP_FRAME_LENGTH - SIZE_INITIAL_FRAME) + .allocstack (KTRAP_FRAME_LENGTH - SIZE_INITIAL_FRAME) .endprolog /* Save rbp */ @@ -278,12 +278,12 @@ ENDR .PROC InternalDispatchException /* Allocate stack space for EXCEPTION_RECORD and KEXCEPTION_FRAME */ - sub rsp, SIZE_EXCEPTION_RECORD + SIZE_KEXCEPTION_FRAME - .allocstack (SIZE_EXCEPTION_RECORD + SIZE_KEXCEPTION_FRAME) + sub rsp, EXCEPTION_RECORD_LENGTH + KEXCEPTION_FRAME_LENGTH + .allocstack (EXCEPTION_RECORD_LENGTH + KEXCEPTION_FRAME_LENGTH) .endprolog /* Set up EXCEPTION_RECORD */ - lea rcx, [rsp + SIZE_KEXCEPTION_FRAME] + lea rcx, [rsp + KEXCEPTION_FRAME_LENGTH] mov [rcx + EXCEPTION_RECORD_ExceptionCode], eax xor rax, rax mov [rcx + EXCEPTION_RECORD_ExceptionFlags], eax @@ -341,7 +341,7 @@ ENDR movdqa xmm14, [rsp + KEXCEPTION_FRAME_Xmm14] movdqa xmm15, [rsp + KEXCEPTION_FRAME_Xmm15] - add rsp, SIZE_EXCEPTION_RECORD + SIZE_KEXCEPTION_FRAME + add rsp, EXCEPTION_RECORD_LENGTH + KEXCEPTION_FRAME_LENGTH ret .ENDP InternalDispatchException @@ -516,7 +516,7 @@ PUBLIC KiInvalidOpcodeFault KiInvalidOpcodeKernel: /* Kernel mode fault */ - + /* Dispatch the exception */ mov eax, STATUS_ILLEGAL_INSTRUCTION mov edx, 3 @@ -837,7 +837,7 @@ PUBLIC KiRaiseAssertion mov r10, 0 mov r11, 0 call InternalDispatchException - + LEAVE_TRAP_FRAME iretq .ENDP KiRaiseAssertion diff --git a/reactos/ntoskrnl/mm/amd64/init.c b/reactos/ntoskrnl/mm/amd64/init.c index 3211b99440d..bf2dad4a894 100644 --- a/reactos/ntoskrnl/mm/amd64/init.c +++ b/reactos/ntoskrnl/mm/amd64/init.c @@ -27,10 +27,16 @@ HalInitializeBios(ULONG Unknown, PLOADER_PARAMETER_BLOCK LoaderBlock); /* GLOBALS *****************************************************************/ /* Template PTE and PDE for a kernel page */ -MMPTE ValidKernelPde = {.u.Hard.Valid = 1, .u.Hard.Write = 1, .u.Hard.Dirty = 1, .u.Hard.Accessed = 1}; -MMPTE ValidKernelPte = {.u.Hard.Valid = 1, .u.Hard.Write = 1, .u.Hard.Dirty = 1, .u.Hard.Accessed = 1}; -MMPDE DemandZeroPde = {.u.Long = (MM_READWRITE << MM_PTE_SOFTWARE_PROTECTION_BITS)}; -MMPTE PrototypePte = {.u.Long = (MM_READWRITE << MM_PTE_SOFTWARE_PROTECTION_BITS) | PTE_PROTOTYPE | 0xFFFFF000}; +MMPTE ValidKernelPde = {{PTE_VALID|PTE_READWRITE|PTE_DIRTY|PTE_ACCESSED}}; +MMPTE ValidKernelPte = {{PTE_VALID|PTE_READWRITE|PTE_DIRTY|PTE_ACCESSED}}; + +/* Template PDE for a demand-zero page */ +MMPDE DemandZeroPde = {{MM_READWRITE << MM_PTE_SOFTWARE_PROTECTION_BITS}}; +MMPTE DemandZeroPte = {{MM_READWRITE << MM_PTE_SOFTWARE_PROTECTION_BITS}}; + +/* Template PTE for prototype page */ +MMPTE PrototypePte = {{(MM_READWRITE << MM_PTE_SOFTWARE_PROTECTION_BITS) | + PTE_PROTOTYPE | (MI_PTE_LOOKUP_NEEDED << PAGE_SHIFT)}}; /* Sizes */ ///SIZE_T MmSessionSize = MI_SESSION_SIZE; @@ -413,7 +419,7 @@ MiInitializePageTable() TmplPte.u.Flush.Write = 1; HyperTemplatePte = TmplPte; - /* Create PDPTs (72 KB) for shared system address space, + /* Create PDPTs (72 KB) for shared system address space, * skip page tables and hyperspace */ /* Loop the PXEs */ @@ -492,7 +498,7 @@ MiBuildNonPagedPool(VOID) /* Page-align the nonpaged pool size */ MmSizeOfNonPagedPoolInBytes &= ~(PAGE_SIZE - 1); - + /* Now, check if there was a registry size for the maximum size */ if (!MmMaximumNonPagedPoolInBytes) { @@ -501,7 +507,7 @@ MiBuildNonPagedPool(VOID) MmMaximumNonPagedPoolInBytes += (MmNumberOfPhysicalPages - 1024) / 256 * MmMaxAdditionNonPagedPoolPerMb; } - + /* Don't let the maximum go too high */ if (MmMaximumNonPagedPoolInBytes > MI_MAX_NONPAGED_POOL_SIZE) { @@ -517,7 +523,7 @@ MiBuildNonPagedPool(VOID) { /* Put non paged pool after the PFN database */ MmNonPagedPoolStart = (PCHAR)MmPfnDatabase + MxPfnSizeInBytes; - MmMaximumNonPagedPoolInBytes = (ULONG64)MmNonPagedPoolEnd - + MmMaximumNonPagedPoolInBytes = (ULONG64)MmNonPagedPoolEnd - (ULONG64)MmNonPagedPoolStart; } @@ -688,7 +694,7 @@ MiBuildPagedPool_x(VOID) PMMPTE Pte; MMPTE TmplPte; ULONG Size, BitMapSize; - + /* Default size for paged pool is 4 times non paged pool */ MmSizeOfPagedPoolInBytes = 4 * MmMaximumNonPagedPoolInBytes; @@ -767,7 +773,7 @@ MiBuildPagedPool_x(VOID) // Allocate the allocation bitmap, which tells us which regions have not yet // been mapped into memory - MmPagedPoolInfo.PagedPoolAllocationMap = + MmPagedPoolInfo.PagedPoolAllocationMap = ExAllocatePoolWithTag(NonPagedPool, Size, ' mM'); ASSERT(MmPagedPoolInfo.PagedPoolAllocationMap); @@ -783,7 +789,7 @@ MiBuildPagedPool_x(VOID) // Given the allocation bitmap and a base address, we can therefore figure // out which page is the last page of that allocation, and thus how big the // entire allocation is. - MmPagedPoolInfo.EndOfPagedPoolBitmap = + MmPagedPoolInfo.EndOfPagedPoolBitmap = ExAllocatePoolWithTag(NonPagedPool, Size, ' mM'); ASSERT(MmPagedPoolInfo.EndOfPagedPoolBitmap); @@ -859,7 +865,7 @@ MmArmInitSystem_x(IN ULONG Phase, //MmPagedPoolSize = MM_PAGED_POOL_SIZE; //ASSERT((PCHAR)MmPagedPoolBase + MmPagedPoolSize < (PCHAR)MmNonPagedSystemStart); - + HalInitializeBios(0, LoaderBlock); } @@ -871,7 +877,7 @@ FASTCALL MiSyncARM3WithROS(IN PVOID AddressStart, IN PVOID AddressEnd) { - + } NTSTATUS diff --git a/reactos/tools/rsym/rsym64.h b/reactos/tools/rsym/rsym64.h index cae44f545b4..0249ebc7945 100644 --- a/reactos/tools/rsym/rsym64.h +++ b/reactos/tools/rsym/rsym64.h @@ -10,6 +10,7 @@ typedef uint64_t ULONG64; #endif +#define IMAGE_FILE_MACHINE_I386 0x14c #define IMAGE_FILE_MACHINE_AMD64 0x8664 #define IMAGE_DIRECTORY_ENTRY_IMPORT 1 #define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3 From 7f8eeb432155061deb56ef1adb8353f70d80600f Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 10 Feb 2011 10:39:34 +0000 Subject: [PATCH 007/287] Merge resource file related changes from cmake branch part 1 svn path=/trunk/; revision=50641 --- reactos/base/applications/calc/lang/uk-UA.rc | 4 +- .../applications/cmdutils/find/lang/bg-BG.rc | 16 +- .../applications/cmdutils/find/lang/ca-ES.rc | 2 +- .../applications/cmdutils/find/lang/cs-CZ.rc | 2 +- .../applications/cmdutils/find/lang/de-DE.rc | 2 +- .../applications/cmdutils/find/lang/el-GR.rc | 2 +- .../applications/cmdutils/find/lang/en-US.rc | 2 +- .../applications/cmdutils/find/lang/es-ES.rc | 2 +- .../applications/cmdutils/find/lang/fr-FR.rc | 2 +- .../applications/cmdutils/find/lang/it-IT.rc | 2 +- .../applications/cmdutils/find/lang/lt-LT.rc | 2 +- .../applications/cmdutils/find/lang/no-NO.rc | 2 +- .../applications/cmdutils/find/lang/pl-PL.rc | 2 +- .../applications/cmdutils/find/lang/pt-BR.rc | 2 +- .../applications/cmdutils/find/lang/ru-RU.rc | 2 +- .../applications/cmdutils/find/lang/sk-SK.rc | 2 +- .../applications/cmdutils/find/lang/sv-SE.rc | 2 +- .../applications/cmdutils/find/lang/uk-UA.rc | 2 +- .../base/applications/cmdutils/xcopy/Sv.rc | 4 +- .../base/applications/findstr/lang/bg-BG.rc | 2 +- .../base/applications/findstr/lang/ca-ES.rc | 2 +- .../base/applications/findstr/lang/cs-CZ.rc | 2 +- .../base/applications/findstr/lang/de-DE.rc | 2 +- .../base/applications/findstr/lang/el-GR.rc | 2 +- .../base/applications/findstr/lang/en-US.rc | 2 +- .../base/applications/findstr/lang/es-ES.rc | 2 +- .../base/applications/findstr/lang/fr-FR.rc | 2 +- .../base/applications/findstr/lang/it-IT.rc | 2 +- .../base/applications/findstr/lang/lt-LT.rc | 2 +- .../base/applications/findstr/lang/no-NO.rc | 2 +- .../base/applications/findstr/lang/pl-PL.rc | 2 +- .../base/applications/findstr/lang/pt-BR.rc | 2 +- .../base/applications/findstr/lang/ru-RU.rc | 2 +- .../base/applications/findstr/lang/sk-SK.rc | 2 +- .../base/applications/findstr/lang/sv-SE.rc | 2 +- .../base/applications/findstr/lang/uk-UA.rc | 2 +- .../applications/games/winmine/lang/da-DK.rc | 2 +- .../applications/network/ping/lang/de-DE.rc | 14 +- .../applications/network/ping/lang/en-US.rc | 16 +- .../applications/network/ping/lang/fr-FR.rc | 16 +- .../applications/network/ping/lang/it-IT.rc | 16 +- .../applications/network/ping/lang/pl-PL.rc | 16 +- .../base/applications/notepad/lang/bg-BG.rc | 2 +- .../base/applications/notepad/lang/cs-CZ.rc | 2 +- .../base/applications/notepad/lang/da-DK.rc | 2 +- .../base/applications/notepad/lang/de-DE.rc | 2 +- .../base/applications/notepad/lang/el-GR.rc | 2 +- .../base/applications/notepad/lang/es-ES.rc | 2 +- .../base/applications/notepad/lang/eu-ES.rc | 2 +- .../base/applications/notepad/lang/fi-FI.rc | 2 +- .../base/applications/notepad/lang/fr-FR.rc | 2 +- .../base/applications/notepad/lang/hu-HU.rc | 2 +- .../base/applications/notepad/lang/hy-AM.rc | 2 +- .../base/applications/notepad/lang/id-ID.rc | 2 +- .../base/applications/notepad/lang/it-IT.rc | 2 +- .../base/applications/notepad/lang/nl-NL.rc | 2 +- .../base/applications/notepad/lang/no-NO.rc | 2 +- .../base/applications/notepad/lang/pl-PL.rc | 2 +- .../base/applications/notepad/lang/pt-PT.rc | 2 +- .../base/applications/notepad/lang/ro-RO.rc | 2 +- .../base/applications/notepad/lang/ru-RU.rc | 2 +- .../base/applications/notepad/lang/sk-SK.rc | 2 +- .../base/applications/notepad/lang/sl-SI.rc | 2 +- .../base/applications/notepad/lang/sv-SE.rc | 2 +- .../base/applications/notepad/lang/th-TH.rc | 2 +- .../base/applications/notepad/lang/uk-UA.rc | 2 +- .../base/applications/notepad/lang/zh-CN.rc | 2 +- reactos/base/applications/notepad/rsrc.rc | 2 +- .../base/applications/taskmgr/lang/ja-JP.rc | 456 +++++++++--------- .../base/applications/taskmgr/lang/ko-KR.rc | 2 +- .../base/applications/taskmgr/lang/ro-RO.rc | 1 + reactos/base/applications/taskmgr/rsrc.rc | 2 - reactos/base/applications/wordpad/Da.rc | 56 ++- reactos/base/applications/wordpad/De.rc | 56 ++- reactos/base/applications/wordpad/En.rc | 50 +- reactos/base/applications/wordpad/Fr.rc | 56 ++- reactos/base/applications/wordpad/Hu.rc | 12 +- reactos/base/applications/wordpad/It.rc | 56 ++- reactos/base/applications/wordpad/Ja.rc | 50 +- reactos/base/applications/wordpad/Ko.rc | 56 ++- reactos/base/applications/wordpad/Lt.rc | 56 ++- reactos/base/applications/wordpad/Nl.rc | 56 ++- reactos/base/applications/wordpad/No.rc | 62 ++- reactos/base/applications/wordpad/Pl.rc | 56 ++- reactos/base/applications/wordpad/Pt.rc | 72 ++- reactos/base/applications/wordpad/Ro.rc | 46 +- reactos/base/applications/wordpad/Ru.rc | 56 ++- reactos/base/applications/wordpad/Si.rc | 57 ++- reactos/base/applications/wordpad/Sv.rc | 56 ++- reactos/base/applications/wordpad/Tr.rc | 42 +- reactos/base/applications/wordpad/Uk.rc | 56 ++- reactos/base/applications/wordpad/Zh.rc | 52 +- reactos/base/applications/wordpad/rsrc.rc | 26 +- reactos/base/setup/reactos/lang/it-IT.rc | 7 +- 94 files changed, 866 insertions(+), 909 deletions(-) diff --git a/reactos/base/applications/calc/lang/uk-UA.rc b/reactos/base/applications/calc/lang/uk-UA.rc index 9d73142142a..1a1b615aa89 100644 --- a/reactos/base/applications/calc/lang/uk-UA.rc +++ b/reactos/base/applications/calc/lang/uk-UA.rc @@ -245,10 +245,10 @@ BEGIN LTEXT ":",IDC_STATIC,4,20,56,8 COMBOBOX IDC_COMBO_FROM,4,60,140,168,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | CBS_SORT - LTEXT " (\"\"):",IDC_STATIC,4,49,56,8 + LTEXT " :",IDC_STATIC,4,49,56,8 COMBOBOX IDC_COMBO_TO,4,87,140,168,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | CBS_SORT - LTEXT "ʳ (\"\"):",IDC_STATIC,4,76,56,8 + LTEXT "ʳ :",IDC_STATIC,4,76,56,8 CONTROL "C",IDC_BUTTON_CANC,"Button",BS_OWNERDRAW | BS_CENTER | BS_VCENTER | BS_NOTIFY | WS_TABSTOP,276,24,40,17 CONTROL "CE",IDC_BUTTON_CE,"Button",BS_OWNERDRAW | BS_CENTER | diff --git a/reactos/base/applications/cmdutils/find/lang/bg-BG.rc b/reactos/base/applications/cmdutils/find/lang/bg-BG.rc index 3f7cd7fde86..deebfe5bd82 100644 --- a/reactos/base/applications/cmdutils/find/lang/bg-BG.rc +++ b/reactos/base/applications/cmdutils/find/lang/bg-BG.rc @@ -3,15 +3,15 @@ LANGUAGE LANG_BULGARIAN, SUBLANG_DEFAULT STRINGTABLE DISCARDABLE BEGIN -IDS_USAGE, "FIND: , ..\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"\" [ ... ]\n\ - /C \n\ - /I \n\ - /N , 1\n\ - /V , ." +IDS_USAGE, "FIND: Èçâåæäà âñè÷êè ðåäîâå âúâ ôàéëà, êîèòî ñúäúðæàò óêàçàíèÿ íèç..\n\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""íèç"" [ ôàéë... ]\n\ + /C Áðîè êîëêî ðåäà ñúäúðæàò íèçà\n\ + /I Ïðåíåáðåãâà ÃëÀâÍÎñÒòà\n\ + /N Áðîé ïîêàçàíè ðåäîâå, êàòî ñå çàïî÷âà îò 1\n\ + /V Èçâåæäàíå íà ðåäîâåòå, ÍÅñúäúðæàùè íèçà." -IDS_NO_SUCH_FILE, "FIND: %s: \n" +IDS_NO_SUCH_FILE, "FIND: %s: Íÿìà òàêúâ ôàéë\n" -IDS_CANNOT_OPEN, "FIND: %s: \n" +IDS_CANNOT_OPEN, "FIND: %s: Îòâàðÿíåòî íà ôàéëà å íåâúçìîæíî\n" END diff --git a/reactos/base/applications/cmdutils/find/lang/ca-ES.rc b/reactos/base/applications/cmdutils/find/lang/ca-ES.rc index 932d4bc06bc..21d8c77c31b 100644 --- a/reactos/base/applications/cmdutils/find/lang/ca-ES.rc +++ b/reactos/base/applications/cmdutils/find/lang/ca-ES.rc @@ -4,7 +4,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: Mostra totes les linies que continguin una determinada cadena de carcters.\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"Cadena de carcters\" [ file... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""Cadena de carcters"" [ file... ]\n\ /C Conta el numero de linies que contenen la cadena de carcters\n\ /I Ignora majscules i minscules\n\ /N Numero de linies mostrades, comenant per la primera\n\ diff --git a/reactos/base/applications/cmdutils/find/lang/cs-CZ.rc b/reactos/base/applications/cmdutils/find/lang/cs-CZ.rc index 8a41024c73b..f3e60447448 100644 --- a/reactos/base/applications/cmdutils/find/lang/cs-CZ.rc +++ b/reactos/base/applications/cmdutils/find/lang/cs-CZ.rc @@ -10,7 +10,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: Zobraz vechny dky souboru obsahujc hledan etzec.\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"etzec\" [ soubor... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""etzec"" [ soubor... ]\n\ /C Zobraz poet dk obsahujc etzec.\n\ /I Ignoruje velikost psmen.\n\ /N sluje zobrazen dky, zan od 1.\n\ diff --git a/reactos/base/applications/cmdutils/find/lang/de-DE.rc b/reactos/base/applications/cmdutils/find/lang/de-DE.rc index 1663cc7aff7..1d7ab58269e 100644 --- a/reactos/base/applications/cmdutils/find/lang/de-DE.rc +++ b/reactos/base/applications/cmdutils/find/lang/de-DE.rc @@ -4,7 +4,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "Sucht in einer Datei nach einer Zeichenfolge.\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"string\" [ file... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""string"" [ file... ]\n\ /C Zeigt nur die Anzahl der die Zeichenfolge enthaltenen Zeilen an.\n\ /I Ignoriert Gro-/Kleinbuchstaben bei der Suche.\n\ /N Zeigt die Zeilen mit ihren Zeilennummern an.\n\ diff --git a/reactos/base/applications/cmdutils/find/lang/el-GR.rc b/reactos/base/applications/cmdutils/find/lang/el-GR.rc index 19e993dda46..1c5ef707a8e 100644 --- a/reactos/base/applications/cmdutils/find/lang/el-GR.rc +++ b/reactos/base/applications/cmdutils/find/lang/el-GR.rc @@ -4,7 +4,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: .\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"\" [ ... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] """" [ ... ]\n\ /C \n\ /I \n\ /N , 1\n\ diff --git a/reactos/base/applications/cmdutils/find/lang/en-US.rc b/reactos/base/applications/cmdutils/find/lang/en-US.rc index 78999e2599f..f7352819ec3 100644 --- a/reactos/base/applications/cmdutils/find/lang/en-US.rc +++ b/reactos/base/applications/cmdutils/find/lang/en-US.rc @@ -4,7 +4,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: Prints all lines of a file that contain a string.\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"string\" [ file... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""string"" [ file... ]\n\ /C Count the number of lines that contain string\n\ /I Ignore case\n\ /N Number the displayed lines, starting at 1\n\ diff --git a/reactos/base/applications/cmdutils/find/lang/es-ES.rc b/reactos/base/applications/cmdutils/find/lang/es-ES.rc index f2fee3f0a4b..150e537242f 100644 --- a/reactos/base/applications/cmdutils/find/lang/es-ES.rc +++ b/reactos/base/applications/cmdutils/find/lang/es-ES.rc @@ -4,7 +4,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: Imprime todas las lneas de un fichero que contiene una cadena.\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"cadena\" [ fichero... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""cadena"" [ fichero... ]\n\ /C Cuenta el nmero de lneas que contienen la cadena de caracteres\n\ /I Ignora maysculas y minsculas\n\ /N Numero de lneas a mostrar en pantalla, a partir de la primera\n\ diff --git a/reactos/base/applications/cmdutils/find/lang/fr-FR.rc b/reactos/base/applications/cmdutils/find/lang/fr-FR.rc index 076f0930177..04a0af2d658 100644 --- a/reactos/base/applications/cmdutils/find/lang/fr-FR.rc +++ b/reactos/base/applications/cmdutils/find/lang/fr-FR.rc @@ -4,7 +4,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: Affiche toutes les lignes d'un fichier qui contiennent un morceau de texte.\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"texte\" [ fichier... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""texte"" [ fichier... ]\n\ /C Compte le nombre de lignes qui contiennent le texte\n\ /I Insensible la casse\n\ /N Numrote les lignes affiches en commenant 1\n\ diff --git a/reactos/base/applications/cmdutils/find/lang/it-IT.rc b/reactos/base/applications/cmdutils/find/lang/it-IT.rc index d0dabd405f2..5889db5f2fd 100644 --- a/reactos/base/applications/cmdutils/find/lang/it-IT.rc +++ b/reactos/base/applications/cmdutils/find/lang/it-IT.rc @@ -4,7 +4,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: Visualizza le linee di un file che contengono un stringa.\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"stringa\" [ file... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""stringa"" [ file... ]\n\ /C Conta il numero di linee che contengono la stringa\n\ /I Ignora maiuscole/minuscole\n\ /N Numera le linee visualizzate a partire da 1\n\ diff --git a/reactos/base/applications/cmdutils/find/lang/lt-LT.rc b/reactos/base/applications/cmdutils/find/lang/lt-LT.rc index ce5b86af08a..cfebc611d8b 100644 --- a/reactos/base/applications/cmdutils/find/lang/lt-LT.rc +++ b/reactos/base/applications/cmdutils/find/lang/lt-LT.rc @@ -13,7 +13,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: Spausdina visas bylos eilutes, kuriose yra iekomas tekstas.\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"tekstas\" [ byla... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""tekstas"" [ byla... ]\n\ /C Skaiiuoti eilutes, kuriose yra iekomas tekstas\n\ /I Ignoruoti raidi dyd\n\ /N Numeruoti vaizduojamas eilutes, pradedant nuo 1\n\ diff --git a/reactos/base/applications/cmdutils/find/lang/no-NO.rc b/reactos/base/applications/cmdutils/find/lang/no-NO.rc index d564684f86f..f31025d3c58 100644 --- a/reactos/base/applications/cmdutils/find/lang/no-NO.rc +++ b/reactos/base/applications/cmdutils/find/lang/no-NO.rc @@ -4,7 +4,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FINN: Skriv alle linjene for filen som inneholder en streng.\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"streng\" [ fil... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""streng"" [ fil... ]\n\ /C Teller nummer av linjer som inneholder strenger\n\ /I Ignorere sak\n\ /N Nummer viste linjer, start med 1\n\ diff --git a/reactos/base/applications/cmdutils/find/lang/pl-PL.rc b/reactos/base/applications/cmdutils/find/lang/pl-PL.rc index 744623e2aa4..d32c94bc63b 100644 --- a/reactos/base/applications/cmdutils/find/lang/pl-PL.rc +++ b/reactos/base/applications/cmdutils/find/lang/pl-PL.rc @@ -11,7 +11,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: Wywietla wszystkie linie danego pliku, zawierajce szukany cig znakw.\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"cig znakw\" [ plik... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""cig znakw"" [ plik... ]\n\ /C Oblicza w ilu liniach pojawi si szukany cig znakw\n\ /I Ignoruje wielko liter\n\ /N Numeruje wywietlane linie, zaczynajc od 1\n\ diff --git a/reactos/base/applications/cmdutils/find/lang/pt-BR.rc b/reactos/base/applications/cmdutils/find/lang/pt-BR.rc index de6342b71b3..38443437f4b 100644 --- a/reactos/base/applications/cmdutils/find/lang/pt-BR.rc +++ b/reactos/base/applications/cmdutils/find/lang/pt-BR.rc @@ -4,7 +4,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: Localiza uma seqncia de texto em um ou mais arquivos.\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"seqncia\" [ arquivo... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""seqncia"" [ arquivo... ]\n\ /C Exibe apenas o nmero de linhas que contm a seqncia.\n\ /I Ignora maisculas/minsculas ao localizar uma seqncia.\n\ /N Exibe o nmero de cada linha, iniciando no 1.\n\ diff --git a/reactos/base/applications/cmdutils/find/lang/ru-RU.rc b/reactos/base/applications/cmdutils/find/lang/ru-RU.rc index 94594f56770..726ebec18e4 100644 --- a/reactos/base/applications/cmdutils/find/lang/ru-RU.rc +++ b/reactos/base/applications/cmdutils/find/lang/ru-RU.rc @@ -4,7 +4,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: .\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"\" [ ... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] """" [ ... ]\n\ /C , .\n\ /I .\n\ /N ( 1).\n\ diff --git a/reactos/base/applications/cmdutils/find/lang/sk-SK.rc b/reactos/base/applications/cmdutils/find/lang/sk-SK.rc index 93037288a93..32c28af715c 100644 --- a/reactos/base/applications/cmdutils/find/lang/sk-SK.rc +++ b/reactos/base/applications/cmdutils/find/lang/sk-SK.rc @@ -8,7 +8,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: Zobraz vetky riadky sboru obsahujce hadan reazec.\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"reazec\" [ sbor... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""reazec"" [ sbor... ]\n\ /C Zobraz poet riadkov, ktor obsahuj reazec.\n\ /I Ignoruje vekos psmen.\n\ /N sluje zobrazen riadky, zana od 1.\n\ diff --git a/reactos/base/applications/cmdutils/find/lang/sv-SE.rc b/reactos/base/applications/cmdutils/find/lang/sv-SE.rc index e8d0d6eefdc..12b9fa58391 100644 --- a/reactos/base/applications/cmdutils/find/lang/sv-SE.rc +++ b/reactos/base/applications/cmdutils/find/lang/sv-SE.rc @@ -4,7 +4,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: Skriver ut alla rader i en fil som innehller en strng.\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"strng\" [ fil... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""strng"" [ fil... ]\n\ /C Rkna nummren av linjer som innehller en strngen\n\ /I Ignorera skiftlge\n\ /N Antal visade rader, brjar p 1\n\ diff --git a/reactos/base/applications/cmdutils/find/lang/uk-UA.rc b/reactos/base/applications/cmdutils/find/lang/uk-UA.rc index b7df8b4e635..43b241f33fd 100644 --- a/reactos/base/applications/cmdutils/find/lang/uk-UA.rc +++ b/reactos/base/applications/cmdutils/find/lang/uk-UA.rc @@ -12,7 +12,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: , .\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"\" [ ... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] """" [ ... ]\n\ /C , \n\ /I \n\ /N , ( 1)\n\ diff --git a/reactos/base/applications/cmdutils/xcopy/Sv.rc b/reactos/base/applications/cmdutils/xcopy/Sv.rc index dae6ce04cec..973768f1a38 100644 --- a/reactos/base/applications/cmdutils/xcopy/Sv.rc +++ b/reactos/base/applications/cmdutils/xcopy/Sv.rc @@ -32,9 +32,7 @@ STRINGTABLE STRING_PAUSE, "Tryck för att börja kopiera\n" STRING_SIMCOPY, "%d fil(er) skulle kopieras\n" STRING_COPY, "%d fil(er) kopierade\n" - STRING_QISDIR, "Är '%s' ett filnamn eller en katalog\n" \ - "på målet?\n" \ - "(F - Fil, K - Katalog)\n" + STRING_QISDIR, "Är '%s' ett filnamn eller en katalog\npå målet?\n(F - Fil, K - Katalog)\n" STRING_SRCPROMPT,"%s? (Ja|Nej)\n" STRING_OVERWRITE,"Skriv över %s? (Ja|Nej|Alla)\n" STRING_COPYFAIL, "Kunde inte kopiera '%s' till '%s'; misslyckades med r/c %d\n" diff --git a/reactos/base/applications/findstr/lang/bg-BG.rc b/reactos/base/applications/findstr/lang/bg-BG.rc index 3f7cd7fde86..f0cb8568e0e 100644 --- a/reactos/base/applications/findstr/lang/bg-BG.rc +++ b/reactos/base/applications/findstr/lang/bg-BG.rc @@ -4,7 +4,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: , ..\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"\" [ ... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] """" [ ... ]\n\ /C \n\ /I \n\ /N , 1\n\ diff --git a/reactos/base/applications/findstr/lang/ca-ES.rc b/reactos/base/applications/findstr/lang/ca-ES.rc index 932d4bc06bc..21d8c77c31b 100644 --- a/reactos/base/applications/findstr/lang/ca-ES.rc +++ b/reactos/base/applications/findstr/lang/ca-ES.rc @@ -4,7 +4,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: Mostra totes les linies que continguin una determinada cadena de carcters.\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"Cadena de carcters\" [ file... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""Cadena de carcters"" [ file... ]\n\ /C Conta el numero de linies que contenen la cadena de carcters\n\ /I Ignora majscules i minscules\n\ /N Numero de linies mostrades, comenant per la primera\n\ diff --git a/reactos/base/applications/findstr/lang/cs-CZ.rc b/reactos/base/applications/findstr/lang/cs-CZ.rc index 8a41024c73b..f3e60447448 100644 --- a/reactos/base/applications/findstr/lang/cs-CZ.rc +++ b/reactos/base/applications/findstr/lang/cs-CZ.rc @@ -10,7 +10,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: Zobraz vechny dky souboru obsahujc hledan etzec.\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"etzec\" [ soubor... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""etzec"" [ soubor... ]\n\ /C Zobraz poet dk obsahujc etzec.\n\ /I Ignoruje velikost psmen.\n\ /N sluje zobrazen dky, zan od 1.\n\ diff --git a/reactos/base/applications/findstr/lang/de-DE.rc b/reactos/base/applications/findstr/lang/de-DE.rc index 1663cc7aff7..1d7ab58269e 100644 --- a/reactos/base/applications/findstr/lang/de-DE.rc +++ b/reactos/base/applications/findstr/lang/de-DE.rc @@ -4,7 +4,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "Sucht in einer Datei nach einer Zeichenfolge.\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"string\" [ file... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""string"" [ file... ]\n\ /C Zeigt nur die Anzahl der die Zeichenfolge enthaltenen Zeilen an.\n\ /I Ignoriert Gro-/Kleinbuchstaben bei der Suche.\n\ /N Zeigt die Zeilen mit ihren Zeilennummern an.\n\ diff --git a/reactos/base/applications/findstr/lang/el-GR.rc b/reactos/base/applications/findstr/lang/el-GR.rc index 19e993dda46..1c5ef707a8e 100644 --- a/reactos/base/applications/findstr/lang/el-GR.rc +++ b/reactos/base/applications/findstr/lang/el-GR.rc @@ -4,7 +4,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: .\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"\" [ ... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] """" [ ... ]\n\ /C \n\ /I \n\ /N , 1\n\ diff --git a/reactos/base/applications/findstr/lang/en-US.rc b/reactos/base/applications/findstr/lang/en-US.rc index d4ebfe38d53..bff4bc76236 100644 --- a/reactos/base/applications/findstr/lang/en-US.rc +++ b/reactos/base/applications/findstr/lang/en-US.rc @@ -4,7 +4,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FINDSTR: Prints all lines of a file that contain a string.\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"string\" [ file... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""string"" [ file... ]\n\ /C Count the number of lines that contain string\n\ /I Ignore case\n\ /N Number the displayed lines, starting at 1\n\ diff --git a/reactos/base/applications/findstr/lang/es-ES.rc b/reactos/base/applications/findstr/lang/es-ES.rc index f2fee3f0a4b..150e537242f 100644 --- a/reactos/base/applications/findstr/lang/es-ES.rc +++ b/reactos/base/applications/findstr/lang/es-ES.rc @@ -4,7 +4,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: Imprime todas las lneas de un fichero que contiene una cadena.\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"cadena\" [ fichero... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""cadena"" [ fichero... ]\n\ /C Cuenta el nmero de lneas que contienen la cadena de caracteres\n\ /I Ignora maysculas y minsculas\n\ /N Numero de lneas a mostrar en pantalla, a partir de la primera\n\ diff --git a/reactos/base/applications/findstr/lang/fr-FR.rc b/reactos/base/applications/findstr/lang/fr-FR.rc index 076f0930177..04a0af2d658 100644 --- a/reactos/base/applications/findstr/lang/fr-FR.rc +++ b/reactos/base/applications/findstr/lang/fr-FR.rc @@ -4,7 +4,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: Affiche toutes les lignes d'un fichier qui contiennent un morceau de texte.\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"texte\" [ fichier... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""texte"" [ fichier... ]\n\ /C Compte le nombre de lignes qui contiennent le texte\n\ /I Insensible la casse\n\ /N Numrote les lignes affiches en commenant 1\n\ diff --git a/reactos/base/applications/findstr/lang/it-IT.rc b/reactos/base/applications/findstr/lang/it-IT.rc index d0dabd405f2..5889db5f2fd 100644 --- a/reactos/base/applications/findstr/lang/it-IT.rc +++ b/reactos/base/applications/findstr/lang/it-IT.rc @@ -4,7 +4,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: Visualizza le linee di un file che contengono un stringa.\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"stringa\" [ file... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""stringa"" [ file... ]\n\ /C Conta il numero di linee che contengono la stringa\n\ /I Ignora maiuscole/minuscole\n\ /N Numera le linee visualizzate a partire da 1\n\ diff --git a/reactos/base/applications/findstr/lang/lt-LT.rc b/reactos/base/applications/findstr/lang/lt-LT.rc index ce5b86af08a..cfebc611d8b 100644 --- a/reactos/base/applications/findstr/lang/lt-LT.rc +++ b/reactos/base/applications/findstr/lang/lt-LT.rc @@ -13,7 +13,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: Spausdina visas bylos eilutes, kuriose yra iekomas tekstas.\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"tekstas\" [ byla... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""tekstas"" [ byla... ]\n\ /C Skaiiuoti eilutes, kuriose yra iekomas tekstas\n\ /I Ignoruoti raidi dyd\n\ /N Numeruoti vaizduojamas eilutes, pradedant nuo 1\n\ diff --git a/reactos/base/applications/findstr/lang/no-NO.rc b/reactos/base/applications/findstr/lang/no-NO.rc index d564684f86f..f31025d3c58 100644 --- a/reactos/base/applications/findstr/lang/no-NO.rc +++ b/reactos/base/applications/findstr/lang/no-NO.rc @@ -4,7 +4,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FINN: Skriv alle linjene for filen som inneholder en streng.\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"streng\" [ fil... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""streng"" [ fil... ]\n\ /C Teller nummer av linjer som inneholder strenger\n\ /I Ignorere sak\n\ /N Nummer viste linjer, start med 1\n\ diff --git a/reactos/base/applications/findstr/lang/pl-PL.rc b/reactos/base/applications/findstr/lang/pl-PL.rc index 744623e2aa4..d32c94bc63b 100644 --- a/reactos/base/applications/findstr/lang/pl-PL.rc +++ b/reactos/base/applications/findstr/lang/pl-PL.rc @@ -11,7 +11,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: Wywietla wszystkie linie danego pliku, zawierajce szukany cig znakw.\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"cig znakw\" [ plik... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""cig znakw"" [ plik... ]\n\ /C Oblicza w ilu liniach pojawi si szukany cig znakw\n\ /I Ignoruje wielko liter\n\ /N Numeruje wywietlane linie, zaczynajc od 1\n\ diff --git a/reactos/base/applications/findstr/lang/pt-BR.rc b/reactos/base/applications/findstr/lang/pt-BR.rc index de6342b71b3..38443437f4b 100644 --- a/reactos/base/applications/findstr/lang/pt-BR.rc +++ b/reactos/base/applications/findstr/lang/pt-BR.rc @@ -4,7 +4,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: Localiza uma seqncia de texto em um ou mais arquivos.\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"seqncia\" [ arquivo... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""seqncia"" [ arquivo... ]\n\ /C Exibe apenas o nmero de linhas que contm a seqncia.\n\ /I Ignora maisculas/minsculas ao localizar uma seqncia.\n\ /N Exibe o nmero de cada linha, iniciando no 1.\n\ diff --git a/reactos/base/applications/findstr/lang/ru-RU.rc b/reactos/base/applications/findstr/lang/ru-RU.rc index 94594f56770..726ebec18e4 100644 --- a/reactos/base/applications/findstr/lang/ru-RU.rc +++ b/reactos/base/applications/findstr/lang/ru-RU.rc @@ -4,7 +4,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: .\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"\" [ ... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] """" [ ... ]\n\ /C , .\n\ /I .\n\ /N ( 1).\n\ diff --git a/reactos/base/applications/findstr/lang/sk-SK.rc b/reactos/base/applications/findstr/lang/sk-SK.rc index 93037288a93..32c28af715c 100644 --- a/reactos/base/applications/findstr/lang/sk-SK.rc +++ b/reactos/base/applications/findstr/lang/sk-SK.rc @@ -8,7 +8,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: Zobraz vetky riadky sboru obsahujce hadan reazec.\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"reazec\" [ sbor... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""reazec"" [ sbor... ]\n\ /C Zobraz poet riadkov, ktor obsahuj reazec.\n\ /I Ignoruje vekos psmen.\n\ /N sluje zobrazen riadky, zana od 1.\n\ diff --git a/reactos/base/applications/findstr/lang/sv-SE.rc b/reactos/base/applications/findstr/lang/sv-SE.rc index e8d0d6eefdc..12b9fa58391 100644 --- a/reactos/base/applications/findstr/lang/sv-SE.rc +++ b/reactos/base/applications/findstr/lang/sv-SE.rc @@ -4,7 +4,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: Skriver ut alla rader i en fil som innehller en strng.\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"strng\" [ fil... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] ""strng"" [ fil... ]\n\ /C Rkna nummren av linjer som innehller en strngen\n\ /I Ignorera skiftlge\n\ /N Antal visade rader, brjar p 1\n\ diff --git a/reactos/base/applications/findstr/lang/uk-UA.rc b/reactos/base/applications/findstr/lang/uk-UA.rc index b7df8b4e635..43b241f33fd 100644 --- a/reactos/base/applications/findstr/lang/uk-UA.rc +++ b/reactos/base/applications/findstr/lang/uk-UA.rc @@ -12,7 +12,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_USAGE, "FIND: , .\n\n\ - FIND [ /C ] [ /I ] [ /N ] [ /V ] \"\" [ ... ]\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] """" [ ... ]\n\ /C , \n\ /I \n\ /N , ( 1)\n\ diff --git a/reactos/base/applications/games/winmine/lang/da-DK.rc b/reactos/base/applications/games/winmine/lang/da-DK.rc index 2173a705029..d3430f9b345 100644 --- a/reactos/base/applications/games/winmine/lang/da-DK.rc +++ b/reactos/base/applications/games/winmine/lang/da-DK.rc @@ -39,7 +39,7 @@ BEGIN MENUITEM "Ny&begynder", IDM_BEGINNER MENUITEM "&Avanceret", IDM_ADVANCED MENUITEM "&Ekspert", IDM_EXPERT - MENUITEM "B&rugerdefineret" IDM_CUSTOM + MENUITEM "B&rugerdefineret", IDM_CUSTOM MENUITEM SEPARATOR MENUITEM "Afslut&t\tAlt+X", IDM_EXIT END diff --git a/reactos/base/applications/network/ping/lang/de-DE.rc b/reactos/base/applications/network/ping/lang/de-DE.rc index 676ca86d40e..053be4e5153 100644 --- a/reactos/base/applications/network/ping/lang/de-DE.rc +++ b/reactos/base/applications/network/ping/lang/de-DE.rc @@ -2,13 +2,13 @@ LANGUAGE LANG_GERMAN, SUBLANG_GERMAN STRINGTABLE DISCARDABLE BEGIN - IDS_USAGE "\nSyntax: ping [-t] [-n Anzahl] [-l Gre] [-w Zeitlimit] Zielhost\n\n" \ - "Optionen:\n" \ - " -t Sendet fortlaufend Pings an den angegebenen Host.\n" \ - " Drcken Sie STRG-C, um den Vorgang abzubrechen.\n" \ - " -n Anzahl Anzahl der Echoanforderungen, die gesendet werden.\n" \ - " -l Gre Gre des Sendepuffers.\n" \ - " -w Zeitlimit Zeitlimit in Millisekunden fr eine Antwort.\n\n\0" + IDS_USAGE "\nSyntax: ping [-t] [-n Anzahl] [-l Gre] [-w Zeitlimit] Zielhost\n\n\ +Optionen:\n\ + -t Sendet fortlaufend Pings an den angegebenen Host.\n\ + Drcken Sie STRG-C, um den Vorgang abzubrechen.\n\ + -n Anzahl Anzahl der Echoanforderungen, die gesendet werden.\n\ + -l Gre Gre des Sendepuffers.\n\ + -w Zeitlimit Zeitlimit in Millisekunden fr eine Antwort.\n\n\0" IDS_PING_WITH_BYTES "\nPinging %1 [%2] with %3!d! bytes Data:\n\n\0" IDS_PING_STATISTICS "\nPing Statistik fr %1:\n\0" diff --git a/reactos/base/applications/network/ping/lang/en-US.rc b/reactos/base/applications/network/ping/lang/en-US.rc index c9f9445b4cb..b4cd6eccf9a 100644 --- a/reactos/base/applications/network/ping/lang/en-US.rc +++ b/reactos/base/applications/network/ping/lang/en-US.rc @@ -2,14 +2,14 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US STRINGTABLE DISCARDABLE BEGIN - IDS_USAGE "\nUsage: ping [-t] [-n count] [-l size] [-w timeout] destination-host\n\n" \ - "Options:\n" \ - " -t Ping the specified host until stopped.\n" \ - " To stop - type Control-C.\n" \ - " -n count Number of echo requests to send.\n" \ - " -l size Send buffer size.\n" \ - " -w timeout Timeout in milliseconds to wait for each reply.\n\n\0" - + IDS_USAGE "\nUsage: ping [-t] [-n count] [-l size] [-w timeout] destination-host\n\n\ +Options:\n\ + -t Ping the specified host until stopped.\n\ + To stop - type Control-C.\n\ + -n count Number of echo requests to send.\n\ + -l size Send buffer size.\n\ + -w timeout Timeout in milliseconds to wait for each reply.\n\n\0" + IDS_PING_WITH_BYTES "\nPinging %1 [%2] with %3!d! bytes of data:\n\n\0" IDS_PING_STATISTICS "\nPing statistics for %1:\n\0" IDS_PACKETS_SENT_RECEIVED_LOST " Packets: Sent = %1!d!, Received = %2!d!, Lost = %3!d! (%4!d!%% loss),\n\0" diff --git a/reactos/base/applications/network/ping/lang/fr-FR.rc b/reactos/base/applications/network/ping/lang/fr-FR.rc index 4794c7637c8..5add4a46e14 100644 --- a/reactos/base/applications/network/ping/lang/fr-FR.rc +++ b/reactos/base/applications/network/ping/lang/fr-FR.rc @@ -2,14 +2,14 @@ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL STRINGTABLE DISCARDABLE BEGIN - IDS_USAGE "\nUtilisation : ping [-t] [-n nombre] [-l taille] [-w délai] hôte-destination\n\n" \ - "Options :\n" \ - " -t Ping l'hôte spécifié jusqu'à l'arrêt.\n" \ - " Pour l'arrêter, tapez Ctrl+c.\n" \ - " -n nombre Nombre de requêtes echo à envoyer.\n" \ - " -l taille Taille du tampon d'envoi.\n" \ - " -w délai Délai d'attente en millisecondes pour chaque réponse.\n\n\0" - + IDS_USAGE "\nUtilisation : ping [-t] [-n nombre] [-l taille] [-w délai] hôte-destination\n\n\ +Options :\n\ + -t Ping l'hôte spécifié jusqu'à l'arrêt.\n\ + Pour l'arrêter, tapez Ctrl+c.\n\ + -n nombre Nombre de requêtes echo à envoyer.\n\ + -l taille Taille du tampon d'envoi.\n\ + -w délai Délai d'attente en millisecondes pour chaque réponse.\n\n\0" + IDS_PING_WITH_BYTES "\nPing de %1 [%2] avec %3!d! octets de données :\n\n\0" IDS_PING_STATISTICS "\nStatistiques du ping de %1 :\n\0" IDS_PACKETS_SENT_RECEIVED_LOST " Paquets : Envoyés = %1!d!, Reçus = %2!d!, Perdus = %3!d! (%4!d!%% de perte),\n\0" diff --git a/reactos/base/applications/network/ping/lang/it-IT.rc b/reactos/base/applications/network/ping/lang/it-IT.rc index 18806e6e012..211918a158b 100644 --- a/reactos/base/applications/network/ping/lang/it-IT.rc +++ b/reactos/base/applications/network/ping/lang/it-IT.rc @@ -2,14 +2,14 @@ LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL STRINGTABLE DISCARDABLE BEGIN - IDS_USAGE "\nUso: ping [-t] [-n conteggio] [-l dimensione] [-w timeout] host-destinazione\n\n" \ - "Opzioni:\n" \ - " -t Esegue il ping dell'host specificato finch non termina.\n" \ - " Per fermare - digitare Control-C.\n" \ - " -n conteggio Numero di richieste echo da inviare.\n" \ - " -l dimensione Dimensione del buffer di invio.\n" \ - " -w timeout Timeout in millisecondi per l'attesa di ogni risposta.\n\n\0" - + IDS_USAGE "\nUso: ping [-t] [-n conteggio] [-l dimensione] [-w timeout] host-destinazione\n\n\ +Opzioni:\n\ + -t Esegue il ping dell'host specificato finch non termina.\n\ + Per fermare - digitare Control-C.\n\ + -n conteggio Numero di richieste echo da inviare.\n\ + -l dimensione Dimensione del buffer di invio.\n\ + -w timeout Timeout in millisecondi per l'attesa di ogni risposta.\n\n\0" + IDS_PING_WITH_BYTES "\nPing in corso %1 [%2] con %3!d! bytes di dati:\n\n\0" IDS_PING_STATISTICS "\nStatistiche di Ping per %1:\n\0" IDS_PACKETS_SENT_RECEIVED_LOST " Pacchetti: Inviati = %1!d!, Ricevuti = %2!d!, Persi = %3!d! (%4!d!%% perdita),\n\0" diff --git a/reactos/base/applications/network/ping/lang/pl-PL.rc b/reactos/base/applications/network/ping/lang/pl-PL.rc index 9fa3f839b75..4879773db83 100644 --- a/reactos/base/applications/network/ping/lang/pl-PL.rc +++ b/reactos/base/applications/network/ping/lang/pl-PL.rc @@ -9,14 +9,14 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT STRINGTABLE DISCARDABLE BEGIN - IDS_USAGE "\nSposb uycia: ping [-t] [-n ilo] [-l bajtw] [-w czas] host-docelowy\n\n" \ - "Opcje:\n" \ - " -t Pinguj wskazanego hosta w sposb cigy.\n" \ - " Aby przerwa - wcinij Control C.\n" \ - " -n ilo Ilo prb pingowania.\n" \ - " -l bajtw Rozmiar pakietu echo w bajtach .\n" \ - " -w czas Opnienie oczekiwanej odpowiedzi, w milisekundach.\n\n\0" - + IDS_USAGE "\nSposb uycia: ping [-t] [-n ilo] [-l bajtw] [-w czas] host-docelowy\n\n\ +Opcje:\n\ + -t Pinguj wskazanego hosta w sposb cigy.\n\ + Aby przerwa - wcinij Control C.\n\ + -n ilo Ilo prb pingowania.\n\ + -l bajtw Rozmiar pakietu echo w bajtach .\n\ + -w czas Opnienie oczekiwanej odpowiedzi, w milisekundach.\n\n\0" + IDS_PING_WITH_BYTES "\nPingowanie %1 [%2] przy uyciu %3!d! bajtw danych:\n\n\0" IDS_PING_STATISTICS "\nStatystyka wynikw badania hosta %1:\n\0" IDS_PACKETS_SENT_RECEIVED_LOST " Pakiety: Wysane = %1!d!, Odebrane = %2!d!, Utracone = %3!d! (%4!d!%% strat),\n\0" diff --git a/reactos/base/applications/notepad/lang/bg-BG.rc b/reactos/base/applications/notepad/lang/bg-BG.rc index 22ca5e772d9..c0f399c9201 100644 --- a/reactos/base/applications/notepad/lang/bg-BG.rc +++ b/reactos/base/applications/notepad/lang/bg-BG.rc @@ -87,7 +87,7 @@ BEGIN MENUITEM "&...", CMD_HELP_SEARCH MENUITEM "& ", CMD_HELP_ON_HELP MENUITEM SEPARATOR - MENUITEM "&" CMD_ABOUT + MENUITEM "&", CMD_ABOUT MENUITEM "&", CMD_ABOUT_WINE END END diff --git a/reactos/base/applications/notepad/lang/cs-CZ.rc b/reactos/base/applications/notepad/lang/cs-CZ.rc index d6dfcd25859..3cd027f1af6 100644 --- a/reactos/base/applications/notepad/lang/cs-CZ.rc +++ b/reactos/base/applications/notepad/lang/cs-CZ.rc @@ -89,7 +89,7 @@ BEGIN MENUITEM "&Najt...", CMD_HELP_SEARCH MENUITEM "Pomoc k n&povd", CMD_HELP_ON_HELP MENUITEM SEPARATOR - MENUITEM "&O programu..." CMD_ABOUT + MENUITEM "&O programu...", CMD_ABOUT MENUITEM "In&fo...", CMD_ABOUT_WINE END END diff --git a/reactos/base/applications/notepad/lang/da-DK.rc b/reactos/base/applications/notepad/lang/da-DK.rc index 2028ac69731..d3a26ceb7e9 100644 --- a/reactos/base/applications/notepad/lang/da-DK.rc +++ b/reactos/base/applications/notepad/lang/da-DK.rc @@ -86,7 +86,7 @@ BEGIN MENUITEM "&Sg efter hjlp om...", CMD_HELP_SEARCH MENUITEM "&Brug af Hjlp", CMD_HELP_ON_HELP MENUITEM SEPARATOR - MENUITEM "&About" CMD_ABOUT + MENUITEM "&About", CMD_ABOUT MENUITEM "&Om Notesblok", CMD_ABOUT_WINE END END diff --git a/reactos/base/applications/notepad/lang/de-DE.rc b/reactos/base/applications/notepad/lang/de-DE.rc index eeb89058298..772b82a35aa 100644 --- a/reactos/base/applications/notepad/lang/de-DE.rc +++ b/reactos/base/applications/notepad/lang/de-DE.rc @@ -87,7 +87,7 @@ BEGIN MENUITEM "&Suchen...", CMD_HELP_SEARCH MENUITEM "&Hilfe benutzen", CMD_HELP_ON_HELP MENUITEM SEPARATOR - MENUITEM "&ber" CMD_ABOUT + MENUITEM "&ber", CMD_ABOUT MENUITEM "Inf&o", CMD_ABOUT_WINE END END diff --git a/reactos/base/applications/notepad/lang/el-GR.rc b/reactos/base/applications/notepad/lang/el-GR.rc index 1b7ee8eaae2..8f2a0f066f4 100644 --- a/reactos/base/applications/notepad/lang/el-GR.rc +++ b/reactos/base/applications/notepad/lang/el-GR.rc @@ -85,7 +85,7 @@ BEGIN MENUITEM "&...", CMD_HELP_SEARCH MENUITEM "& ", CMD_HELP_ON_HELP MENUITEM SEPARATOR - MENUITEM "&About" CMD_ABOUT + MENUITEM "&About", CMD_ABOUT MENUITEM "&", CMD_ABOUT_WINE END END diff --git a/reactos/base/applications/notepad/lang/es-ES.rc b/reactos/base/applications/notepad/lang/es-ES.rc index 4d71548ca50..117d9de0b55 100644 --- a/reactos/base/applications/notepad/lang/es-ES.rc +++ b/reactos/base/applications/notepad/lang/es-ES.rc @@ -89,7 +89,7 @@ BEGIN MENUITEM "&Buscar...", CMD_HELP_SEARCH MENUITEM "A&yuda sobre la ayuda", CMD_HELP_ON_HELP MENUITEM SEPARATOR - MENUITEM "&Acerca de" CMD_ABOUT + MENUITEM "&Acerca de", CMD_ABOUT MENUITEM "&Informacin...", CMD_ABOUT_WINE END END diff --git a/reactos/base/applications/notepad/lang/eu-ES.rc b/reactos/base/applications/notepad/lang/eu-ES.rc index c240ce8a10c..af3b97e69dc 100644 --- a/reactos/base/applications/notepad/lang/eu-ES.rc +++ b/reactos/base/applications/notepad/lang/eu-ES.rc @@ -65,7 +65,7 @@ BEGIN MENUITEM "&Bilatu...", CMD_HELP_SEARCH MENUITEM "Laguntzari buruz laguntza", CMD_HELP_ON_HELP MENUITEM SEPARATOR - MENUITEM "&Ohar-blokari buruz" CMD_ABOUT + MENUITEM "&Ohar-blokari buruz", CMD_ABOUT MENUITEM "&Informazioa...", CMD_ABOUT_WINE END END diff --git a/reactos/base/applications/notepad/lang/fi-FI.rc b/reactos/base/applications/notepad/lang/fi-FI.rc index 9d586dc9c6d..97799bb3ecb 100644 --- a/reactos/base/applications/notepad/lang/fi-FI.rc +++ b/reactos/base/applications/notepad/lang/fi-FI.rc @@ -86,7 +86,7 @@ BEGIN MENUITEM "&Etsi...", CMD_HELP_SEARCH MENUITEM "Apua &Opastuksesta", CMD_HELP_ON_HELP MENUITEM SEPARATOR - MENUITEM "&About" CMD_ABOUT + MENUITEM "&About", CMD_ABOUT MENUITEM "Inf&o...", CMD_ABOUT_WINE END END diff --git a/reactos/base/applications/notepad/lang/fr-FR.rc b/reactos/base/applications/notepad/lang/fr-FR.rc index c7257473558..7945a9eb259 100644 --- a/reactos/base/applications/notepad/lang/fr-FR.rc +++ b/reactos/base/applications/notepad/lang/fr-FR.rc @@ -87,7 +87,7 @@ BEGIN MENUITEM "&Rechercher...", CMD_HELP_SEARCH MENUITEM "&Utiliser l'aide", CMD_HELP_ON_HELP MENUITEM SEPARATOR - MENUITEM "& propos" CMD_ABOUT + MENUITEM "& propos", CMD_ABOUT MENUITEM "Inf&o...", CMD_ABOUT_WINE END END diff --git a/reactos/base/applications/notepad/lang/hu-HU.rc b/reactos/base/applications/notepad/lang/hu-HU.rc index b2e75692c31..6bc473a6a6c 100644 --- a/reactos/base/applications/notepad/lang/hu-HU.rc +++ b/reactos/base/applications/notepad/lang/hu-HU.rc @@ -88,7 +88,7 @@ BEGIN MENUITEM "&Keress...", CMD_HELP_SEARCH MENUITEM "&Hasznlat", CMD_HELP_ON_HELP MENUITEM SEPARATOR - MENUITEM "&About" CMD_ABOUT + MENUITEM "&About", CMD_ABOUT MENUITEM "Inf&ormci...", CMD_ABOUT_WINE END END diff --git a/reactos/base/applications/notepad/lang/hy-AM.rc b/reactos/base/applications/notepad/lang/hy-AM.rc index 5f369b3001c..baea41a27e6 100644 --- a/reactos/base/applications/notepad/lang/hy-AM.rc +++ b/reactos/base/applications/notepad/lang/hy-AM.rc @@ -71,7 +71,7 @@ BEGIN MENUITEM "&Փնտրել...", CMD_HELP_SEARCH MENUITEM "&Օգնությոն օգտագործում", CMD_HELP_ON_HELP MENUITEM SEPARATOR - MENUITEM "&Ծրագրի մասին" CMD_ABOUT + MENUITEM "&Ծրագրի մասին", CMD_ABOUT MENUITEM "&Տեղեկություն...", CMD_ABOUT_WINE END END diff --git a/reactos/base/applications/notepad/lang/id-ID.rc b/reactos/base/applications/notepad/lang/id-ID.rc index 672811c7eed..6bede265eab 100644 --- a/reactos/base/applications/notepad/lang/id-ID.rc +++ b/reactos/base/applications/notepad/lang/id-ID.rc @@ -88,7 +88,7 @@ BEGIN MENUITEM "&Cari...", CMD_HELP_SEARCH MENUITEM "&Bantuan pada bantuan", CMD_HELP_ON_HELP MENUITEM SEPARATOR - MENUITEM "&Tentang" CMD_ABOUT + MENUITEM "&Tentang", CMD_ABOUT MENUITEM "Inf&o", CMD_ABOUT_WINE END END diff --git a/reactos/base/applications/notepad/lang/it-IT.rc b/reactos/base/applications/notepad/lang/it-IT.rc index 169d6de57be..a6b90f7b6ed 100644 --- a/reactos/base/applications/notepad/lang/it-IT.rc +++ b/reactos/base/applications/notepad/lang/it-IT.rc @@ -90,7 +90,7 @@ BEGIN MENUITEM "&Trova...", CMD_HELP_SEARCH MENUITEM "&Aiuto sulla Guida", CMD_HELP_ON_HELP MENUITEM SEPARATOR - MENUITEM "Informazioni &su blocco note" CMD_ABOUT + MENUITEM "Informazioni &su blocco note",CMD_ABOUT MENUITEM "Inf&o...", CMD_ABOUT_WINE END END diff --git a/reactos/base/applications/notepad/lang/nl-NL.rc b/reactos/base/applications/notepad/lang/nl-NL.rc index f6d87fa14a8..fe118002c94 100644 --- a/reactos/base/applications/notepad/lang/nl-NL.rc +++ b/reactos/base/applications/notepad/lang/nl-NL.rc @@ -85,7 +85,7 @@ BEGIN MENUITEM "&Zoeken...", CMD_HELP_SEARCH MENUITEM "&Hulp bij Help", CMD_HELP_ON_HELP MENUITEM SEPARATOR - MENUITEM "&About" CMD_ABOUT + MENUITEM "&About", CMD_ABOUT MENUITEM "Inf&o...", CMD_ABOUT_WINE END END diff --git a/reactos/base/applications/notepad/lang/no-NO.rc b/reactos/base/applications/notepad/lang/no-NO.rc index 7b4e318f4aa..ab8f4ae9f0b 100644 --- a/reactos/base/applications/notepad/lang/no-NO.rc +++ b/reactos/base/applications/notepad/lang/no-NO.rc @@ -87,7 +87,7 @@ BEGIN MENUITEM "&Sk", CMD_HELP_SEARCH MENUITEM "&Hjelp om hjelp", CMD_HELP_ON_HELP MENUITEM SEPARATOR - MENUITEM "&Om" CMD_ABOUT + MENUITEM "&Om", CMD_ABOUT MENUITEM "&Infomasjon", CMD_ABOUT_WINE END END diff --git a/reactos/base/applications/notepad/lang/pl-PL.rc b/reactos/base/applications/notepad/lang/pl-PL.rc index b3e3519e5e3..bab9bcabdb1 100644 --- a/reactos/base/applications/notepad/lang/pl-PL.rc +++ b/reactos/base/applications/notepad/lang/pl-PL.rc @@ -94,7 +94,7 @@ BEGIN MENUITEM "&Szukaj...", CMD_HELP_SEARCH MENUITEM "Pomo&c", CMD_HELP_ON_HELP MENUITEM SEPARATOR - MENUITEM "&Notatnik - informacje" CMD_ABOUT + MENUITEM "&Notatnik - informacje",CMD_ABOUT MENUITEM "&ReactOS - informacje", CMD_ABOUT_WINE END END diff --git a/reactos/base/applications/notepad/lang/pt-PT.rc b/reactos/base/applications/notepad/lang/pt-PT.rc index 5e95cd955ed..c4c81ed46ee 100644 --- a/reactos/base/applications/notepad/lang/pt-PT.rc +++ b/reactos/base/applications/notepad/lang/pt-PT.rc @@ -88,7 +88,7 @@ BEGIN MENUITEM "&Procurar...", CMD_HELP_SEARCH MENUITEM "&Ajuda na ajuda", CMD_HELP_ON_HELP MENUITEM SEPARATOR - MENUITEM "&About" CMD_ABOUT + MENUITEM "&About", CMD_ABOUT MENUITEM "&Informaes...", CMD_ABOUT_WINE END END diff --git a/reactos/base/applications/notepad/lang/ro-RO.rc b/reactos/base/applications/notepad/lang/ro-RO.rc index c9ee70ed13e..d48e9c43cd8 100644 --- a/reactos/base/applications/notepad/lang/ro-RO.rc +++ b/reactos/base/applications/notepad/lang/ro-RO.rc @@ -87,7 +87,7 @@ BEGIN MENUITEM "&Căutare...", CMD_HELP_SEARCH MENUITEM "&Ajutor despre ajutor", CMD_HELP_ON_HELP MENUITEM SEPARATOR - MENUITEM "&Despre" CMD_ABOUT + MENUITEM "&Despre", CMD_ABOUT MENUITEM "Inf&o", CMD_ABOUT_WINE END END diff --git a/reactos/base/applications/notepad/lang/ru-RU.rc b/reactos/base/applications/notepad/lang/ru-RU.rc index a47d534fc8d..c5b3b0becfe 100644 --- a/reactos/base/applications/notepad/lang/ru-RU.rc +++ b/reactos/base/applications/notepad/lang/ru-RU.rc @@ -85,7 +85,7 @@ BEGIN MENUITEM "&...", CMD_HELP_SEARCH MENUITEM "& ", CMD_HELP_ON_HELP MENUITEM SEPARATOR - MENUITEM "& " CMD_ABOUT + MENUITEM "& ", CMD_ABOUT MENUITEM "&...", CMD_ABOUT_WINE END END diff --git a/reactos/base/applications/notepad/lang/sk-SK.rc b/reactos/base/applications/notepad/lang/sk-SK.rc index a461f0a83a2..28b8e2f8e3b 100644 --- a/reactos/base/applications/notepad/lang/sk-SK.rc +++ b/reactos/base/applications/notepad/lang/sk-SK.rc @@ -73,7 +73,7 @@ BEGIN MENUITEM "&Hada...", CMD_HELP_SEARCH MENUITEM "&Pomoc", CMD_HELP_ON_HELP MENUITEM SEPARATOR - MENUITEM "&o je Poznmkov blok" CMD_ABOUT + MENUITEM "&o je Poznmkov blok",CMD_ABOUT MENUITEM "o je &Vno (Wine)", CMD_ABOUT_WINE END END diff --git a/reactos/base/applications/notepad/lang/sl-SI.rc b/reactos/base/applications/notepad/lang/sl-SI.rc index 94e774472c1..73d8f84939b 100644 --- a/reactos/base/applications/notepad/lang/sl-SI.rc +++ b/reactos/base/applications/notepad/lang/sl-SI.rc @@ -85,7 +85,7 @@ BEGIN MENUITEM "&Najdi ...", CMD_HELP_SEARCH MENUITEM "&O pomoi", CMD_HELP_ON_HELP MENUITEM SEPARATOR - MENUITEM "&About" CMD_ABOUT + MENUITEM "&About", CMD_ABOUT MENUITEM "Inf&ormacije ...", CMD_ABOUT_WINE END END diff --git a/reactos/base/applications/notepad/lang/sv-SE.rc b/reactos/base/applications/notepad/lang/sv-SE.rc index 6ced659b586..ffaed196900 100644 --- a/reactos/base/applications/notepad/lang/sv-SE.rc +++ b/reactos/base/applications/notepad/lang/sv-SE.rc @@ -88,7 +88,7 @@ BEGIN MENUITEM "&Sk...", CMD_HELP_SEARCH MENUITEM "Anvisningar fr hjlpen", CMD_HELP_ON_HELP MENUITEM SEPARATOR - MENUITEM "&About" CMD_ABOUT + MENUITEM "&About", CMD_ABOUT MENUITEM "Inf&ormation...", CMD_ABOUT_WINE END END diff --git a/reactos/base/applications/notepad/lang/th-TH.rc b/reactos/base/applications/notepad/lang/th-TH.rc index ab30aaee0c3..5d0669cc907 100644 --- a/reactos/base/applications/notepad/lang/th-TH.rc +++ b/reactos/base/applications/notepad/lang/th-TH.rc @@ -85,7 +85,7 @@ BEGIN MENUITEM "...", CMD_HELP_SEARCH MENUITEM "ǡѺ", CMD_HELP_ON_HELP MENUITEM SEPARATOR - MENUITEM "&About" CMD_ABOUT + MENUITEM "&About", CMD_ABOUT MENUITEM "´...", CMD_ABOUT_WINE END END diff --git a/reactos/base/applications/notepad/lang/uk-UA.rc b/reactos/base/applications/notepad/lang/uk-UA.rc index dde1c7aa346..923063731c2 100644 --- a/reactos/base/applications/notepad/lang/uk-UA.rc +++ b/reactos/base/applications/notepad/lang/uk-UA.rc @@ -86,7 +86,7 @@ BEGIN MENUITEM "&...", CMD_HELP_SEARCH MENUITEM "& ", CMD_HELP_ON_HELP MENUITEM SEPARATOR - MENUITEM "&" CMD_ABOUT + MENUITEM "&", CMD_ABOUT MENUITEM " &", CMD_ABOUT_WINE END END diff --git a/reactos/base/applications/notepad/lang/zh-CN.rc b/reactos/base/applications/notepad/lang/zh-CN.rc index 50985d4ab61..0bb6174ab23 100644 --- a/reactos/base/applications/notepad/lang/zh-CN.rc +++ b/reactos/base/applications/notepad/lang/zh-CN.rc @@ -86,7 +86,7 @@ BEGIN MENUITEM "(&S)...", CMD_HELP_SEARCH MENUITEM "ʹð(&H)", CMD_HELP_ON_HELP MENUITEM SEPARATOR - MENUITEM "(&A)" CMD_ABOUT + MENUITEM "(&A)", CMD_ABOUT MENUITEM "Ϣ(&O)...", CMD_ABOUT_WINE END END diff --git a/reactos/base/applications/notepad/rsrc.rc b/reactos/base/applications/notepad/rsrc.rc index d33e548317b..535a52c8404 100644 --- a/reactos/base/applications/notepad/rsrc.rc +++ b/reactos/base/applications/notepad/rsrc.rc @@ -48,7 +48,7 @@ IDI_NPICON ICON "res/notepad.ico" #include "lang/hy-AM.rc" #include "lang/id-ID.rc" #include "lang/it-IT.rc" -#include "lang/ja-JP.rc" +//#include "lang/ja-JP.rc" FIXME: iconv issue #include "lang/lt-LT.rc" #include "lang/nl-NL.rc" #include "lang/no-NO.rc" diff --git a/reactos/base/applications/taskmgr/lang/ja-JP.rc b/reactos/base/applications/taskmgr/lang/ja-JP.rc index 9904af5415a..815c8a088a0 100644 --- a/reactos/base/applications/taskmgr/lang/ja-JP.rc +++ b/reactos/base/applications/taskmgr/lang/ja-JP.rc @@ -14,85 +14,85 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT IDR_TASKMANAGER MENU DISCARDABLE BEGIN - POPUP "t@C(&F)" + POPUP "ƒtƒ@ƒCƒ‹(&F)" BEGIN - MENUITEM "V^XN̎s(&N)", ID_FILE_NEW + MENUITEM "V‚µ‚¢ƒ^ƒXƒN‚ÌŽÀs(&N)", ID_FILE_NEW MENUITEM SEPARATOR - MENUITEM "^XN }l[W̏I(&X)", ID_FILE_EXIT + MENUITEM "ƒ^ƒXƒN ƒ}ƒl[ƒWƒƒ‚̏I—¹(&X)", ID_FILE_EXIT END - POPUP "IvV(&O)" + POPUP "ƒIƒvƒVƒ‡ƒ“(&O)" BEGIN - MENUITEM "ɎOɕ\\(&A)", ID_OPTIONS_ALWAYSONTOP + MENUITEM "í‚ÉŽè‘O‚É•\\ަ(&A)", ID_OPTIONS_ALWAYSONTOP , CHECKED - MENUITEM "gpɍŏ(&M)", ID_OPTIONS_MINIMIZEONUSE + MENUITEM "–¢Žg—pŽž‚ɍŏ¬‰»(&M)", ID_OPTIONS_MINIMIZEONUSE , CHECKED - MENUITEM "ŏɉB(&H)", ID_OPTIONS_HIDEWHENMINIMIZED + MENUITEM "Å¬‰»Žž‚ɉB‚·(&H)", ID_OPTIONS_HIDEWHENMINIMIZED , CHECKED - MENUITEM "16 rbg ^XN̕\\(&S)", ID_OPTIONS_SHOW16BITTASKS + MENUITEM "16 ƒrƒbƒg ƒ^ƒXƒN‚Ì•\\ަ(&S)", ID_OPTIONS_SHOW16BITTASKS , CHECKED END - POPUP "\\(&V)" + POPUP "•\\ަ(&V)" BEGIN - MENUITEM "ŐV̏ԂɍXV(&R)", ID_VIEW_REFRESH - POPUP "XV̕px(&U)" + MENUITEM "ÅV‚̏ó‘ԂɍXV(&R)", ID_VIEW_REFRESH + POPUP "XV‚Ì•p“x(&U)" BEGIN - MENUITEM "(&H)", ID_VIEW_UPDATESPEED_HIGH - MENUITEM "ʏ(&N)", ID_VIEW_UPDATESPEED_NORMAL + MENUITEM "‚(&H)", ID_VIEW_UPDATESPEED_HIGH + MENUITEM "’ʏí(&N)", ID_VIEW_UPDATESPEED_NORMAL , CHECKED - MENUITEM "(&L)", ID_VIEW_UPDATESPEED_LOW - MENUITEM "ꎞ~(&P)", ID_VIEW_UPDATESPEED_PAUSED + MENUITEM "’á(&L)", ID_VIEW_UPDATESPEED_LOW + MENUITEM "ˆêŽž’âŽ~(&P)", ID_VIEW_UPDATESPEED_PAUSED END MENUITEM SEPARATOR - MENUITEM "傫ACR(&G)", ID_VIEW_LARGE - MENUITEM "ACR(&M)", ID_VIEW_SMALL - MENUITEM "ڍ(&D)", ID_VIEW_DETAILS, CHECKED - MENUITEM "̑I(&S)...", ID_VIEW_SELECTCOLUMNS - POPUP "CPU ̗(&C)" + MENUITEM "‘å‚«‚¢ƒAƒCƒRƒ“(&G)", ID_VIEW_LARGE + MENUITEM "¬‚³‚¢ƒAƒCƒRƒ“(&M)", ID_VIEW_SMALL + MENUITEM "Ú×(&D)", ID_VIEW_DETAILS, CHECKED + MENUITEM "—ñ‚Ì‘I‘ð(&S)...", ID_VIEW_SELECTCOLUMNS + POPUP "CPU ‚Ì—š—ð(&C)" BEGIN - MENUITEM "ׂĂ CPU 1 Ot(&O)",ID_VIEW_CPUHISTORY_ONEGRAPHALL + MENUITEM "‚·‚×‚Ä‚Ì CPU ‚Å 1 ƒOƒ‰ƒt(&O)",ID_VIEW_CPUHISTORY_ONEGRAPHALL - MENUITEM "CPU Ƃ 1 Ot(&P)", ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU + MENUITEM "CPU ‚²‚Æ‚É 1 ƒOƒ‰ƒt(&P)", ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU , CHECKED END - MENUITEM "J[lԂ\\(&S)", ID_VIEW_SHOWKERNELTIMES + MENUITEM "ƒJ[ƒlƒ‹ŽžŠÔ‚ð•\\ަ‚·‚é(&S)", ID_VIEW_SHOWKERNELTIMES END - POPUP "EBhE(&W)" + POPUP "ƒEƒBƒ“ƒhƒE(&W)" BEGIN - MENUITEM "㉺ɕׂĕ\\(&H)", ID_WINDOWS_TILEHORIZONTALLY - MENUITEM "Eɕׂĕ\\(&V)", ID_WINDOWS_TILEVERTICALLY - MENUITEM "ŏ(&M)", ID_WINDOWS_MINIMIZE - MENUITEM "ő剻(&X)", ID_WINDOWS_MAXIMIZE - MENUITEM "d˂ĕ\\(&C)", ID_WINDOWS_CASCADE - MENUITEM "Oɕ\\(&B)", ID_WINDOWS_BRINGTOFRONT + MENUITEM "ã‰º‚É•À‚ׂĕ\\ަ(&H)", ID_WINDOWS_TILEHORIZONTALLY + MENUITEM "¶‰E‚É•À‚ׂĕ\\ަ(&V)", ID_WINDOWS_TILEVERTICALLY + MENUITEM "Å¬‰»(&M)", ID_WINDOWS_MINIMIZE + MENUITEM "Å‘剻(&X)", ID_WINDOWS_MAXIMIZE + MENUITEM "d‚˂ĕ\\ަ(&C)", ID_WINDOWS_CASCADE + MENUITEM "Žè‘O‚É•\\ަ(&B)", ID_WINDOWS_BRINGTOFRONT END - POPUP "wv(&H)" + POPUP "ƒwƒ‹ƒv(&H)" BEGIN - MENUITEM "gsbŇ(&H)", ID_HELP_TOPICS + MENUITEM "ƒgƒsƒbƒN‚ÌŒŸõ(&H)", ID_HELP_TOPICS MENUITEM SEPARATOR - MENUITEM "o[W(&A)", ID_HELP_ABOUT + MENUITEM "ƒo[ƒWƒ‡ƒ“î•ñ(&A)", ID_HELP_ABOUT END END IDR_WINDOWSMENU MENU DISCARDABLE BEGIN - MENUITEM "㉺ɕׂĕ\\(&H)", ID_WINDOWS_TILEHORIZONTALLY - MENUITEM "Eɕׂĕ\\(&V)", ID_WINDOWS_TILEVERTICALLY - MENUITEM "ŏ(&M)", ID_WINDOWS_MINIMIZE - MENUITEM "ő剻(&X)", ID_WINDOWS_MAXIMIZE - MENUITEM "d˂ĕ\\(&C)", ID_WINDOWS_CASCADE - MENUITEM "Oɕ\\(&B)", ID_WINDOWS_BRINGTOFRONT + MENUITEM "ã‰º‚É•À‚ׂĕ\\ަ(&H)", ID_WINDOWS_TILEHORIZONTALLY + MENUITEM "¶‰E‚É•À‚ׂĕ\\ަ(&V)", ID_WINDOWS_TILEVERTICALLY + MENUITEM "Å¬‰»(&M)", ID_WINDOWS_MINIMIZE + MENUITEM "Å‘剻(&X)", ID_WINDOWS_MAXIMIZE + MENUITEM "d‚˂ĕ\\ަ(&C)", ID_WINDOWS_CASCADE + MENUITEM "Žè‘O‚É•\\ަ(&B)", ID_WINDOWS_BRINGTOFRONT END IDR_APPLICATION_PAGE_CONTEXT1 MENU DISCARDABLE BEGIN POPUP "DUMMY" BEGIN - MENUITEM "V^XN̎s(&N)", ID_FILE_NEW + MENUITEM "V‚µ‚¢ƒ^ƒXƒN‚ÌŽÀs(&N)", ID_FILE_NEW MENUITEM SEPARATOR - MENUITEM "傫ACR(&G)", ID_VIEW_LARGE - MENUITEM "ACR(&M)", ID_VIEW_SMALL - MENUITEM "ڍ(&D)", ID_VIEW_DETAILS, CHECKED + MENUITEM "‘å‚«‚¢ƒAƒCƒRƒ“(&G)", ID_VIEW_LARGE + MENUITEM "¬‚³‚¢ƒAƒCƒRƒ“(&M)", ID_VIEW_SMALL + MENUITEM "Ú×(&D)", ID_VIEW_DETAILS, CHECKED END END @@ -100,17 +100,17 @@ IDR_APPLICATION_PAGE_CONTEXT2 MENU DISCARDABLE BEGIN POPUP "DUMMY" BEGIN - MENUITEM "؂ւ(&S)", ID_APPLICATION_PAGE_SWITCHTO - MENUITEM "Oɕ\\(&B)", ID_WINDOWS_BRINGTOFRONT + MENUITEM "Ø‚è‘Ö‚¦(&S)", ID_APPLICATION_PAGE_SWITCHTO + MENUITEM "Žè‘O‚É•\\ަ(&B)", ID_WINDOWS_BRINGTOFRONT MENUITEM SEPARATOR - MENUITEM "㉺ɕׂĕ\\(&H)", ID_WINDOWS_TILEHORIZONTALLY - MENUITEM "Eɕׂĕ\\(&V)", ID_WINDOWS_TILEVERTICALLY - MENUITEM "ŏ(&M)", ID_WINDOWS_MINIMIZE - MENUITEM "ő剻(&X)", ID_WINDOWS_MAXIMIZE - MENUITEM "d˂ĕ\\(&C)", ID_WINDOWS_CASCADE + MENUITEM "ã‰º‚É•À‚ׂĕ\\ަ(&H)", ID_WINDOWS_TILEHORIZONTALLY + MENUITEM "¶‰E‚É•À‚ׂĕ\\ަ(&V)", ID_WINDOWS_TILEVERTICALLY + MENUITEM "Å¬‰»(&M)", ID_WINDOWS_MINIMIZE + MENUITEM "Å‘剻(&X)", ID_WINDOWS_MAXIMIZE + MENUITEM "d‚˂ĕ\\ަ(&C)", ID_WINDOWS_CASCADE MENUITEM SEPARATOR - MENUITEM "^XN̏I(&E)", ID_APPLICATION_PAGE_ENDTASK - MENUITEM "vZX̕\\(&G)", ID_APPLICATION_PAGE_GOTOPROCESS + MENUITEM "ƒ^ƒXƒN‚̏I—¹(&E)", ID_APPLICATION_PAGE_ENDTASK + MENUITEM "ƒvƒƒZƒX‚Ì•\\ަ(&G)", ID_APPLICATION_PAGE_GOTOPROCESS END END @@ -119,10 +119,10 @@ IDR_TRAY_POPUP MENU DISCARDABLE BEGIN POPUP "DUMMY" BEGIN - MENUITEM "̃TCYɖ߂(&R)", ID_RESTORE - MENUITEM "‚(&C)", ID_FILE_EXIT + MENUITEM "Œ³‚̃TƒCƒY‚É–ß‚·(&R)", ID_RESTORE + MENUITEM "•‚¶‚é(&C)", ID_FILE_EXIT MENUITEM SEPARATOR - MENUITEM "ɎOɕ\\(&A)", ID_OPTIONS_ALWAYSONTOP + MENUITEM "í‚ÉŽè‘O‚É•\\ަ(&A)", ID_OPTIONS_ALWAYSONTOP END END @@ -130,28 +130,28 @@ IDR_PROCESS_PAGE_CONTEXT MENU DISCARDABLE BEGIN POPUP "DUMMY" BEGIN - MENUITEM "vZX̏I(&E)", ID_PROCESS_PAGE_ENDPROCESS - MENUITEM "vZX c[̏I(&T)", ID_PROCESS_PAGE_ENDPROCESSTREE + MENUITEM "ƒvƒƒZƒX‚̏I—¹(&E)", ID_PROCESS_PAGE_ENDPROCESS + MENUITEM "ƒvƒƒZƒX ƒcƒŠ[‚̏I—¹(&T)", ID_PROCESS_PAGE_ENDPROCESSTREE - MENUITEM "fobO(&D)", ID_PROCESS_PAGE_DEBUG + MENUITEM "ƒfƒoƒbƒO(&D)", ID_PROCESS_PAGE_DEBUG MENUITEM SEPARATOR - POPUP "Dx̐ݒ(&P)" + POPUP "—Dæ“x‚̐ݒè(&P)" BEGIN - MENUITEM "A^C(&R)", ID_PROCESS_PAGE_SETPRIORITY_REALTIME + MENUITEM "ƒŠƒAƒ‹ƒ^ƒCƒ€(&R)", ID_PROCESS_PAGE_SETPRIORITY_REALTIME - MENUITEM "(&H)", ID_PROCESS_PAGE_SETPRIORITY_HIGH + MENUITEM "‚(&H)", ID_PROCESS_PAGE_SETPRIORITY_HIGH - MENUITEM "ʏȏ(&A)", ID_PROCESS_PAGE_SETPRIORITY_ABOVENORMAL + MENUITEM "’ʏíˆÈã(&A)", ID_PROCESS_PAGE_SETPRIORITY_ABOVENORMAL - MENUITEM "ʏ(&N)", ID_PROCESS_PAGE_SETPRIORITY_NORMAL + MENUITEM "’ʏí(&N)", ID_PROCESS_PAGE_SETPRIORITY_NORMAL - MENUITEM "ʏȉ(&B)", ID_PROCESS_PAGE_SETPRIORITY_BELOWNORMAL + MENUITEM "’ʏíˆÈ‰º(&B)", ID_PROCESS_PAGE_SETPRIORITY_BELOWNORMAL - MENUITEM "(&L)", ID_PROCESS_PAGE_SETPRIORITY_LOW + MENUITEM "’á(&L)", ID_PROCESS_PAGE_SETPRIORITY_LOW END - MENUITEM "֌W̐ݒ(&A)...", ID_PROCESS_PAGE_SETAFFINITY - MENUITEM "fobO `l̕ύX(&C)...", ID_PROCESS_PAGE_DEBUGCHANNELS + MENUITEM "ŠÖŒW‚̐ݒè(&A)...", ID_PROCESS_PAGE_SETAFFINITY + MENUITEM "ƒfƒoƒbƒO ƒ`ƒƒƒ“ƒlƒ‹‚̕ύX(&C)...", ID_PROCESS_PAGE_DEBUGCHANNELS END END @@ -166,7 +166,7 @@ IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246 STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME -CAPTION "^XN }l[W" +CAPTION "Task Manager" MENU IDR_TASKMANAGER FONT 9, "MS UI Gothic" BEGIN @@ -179,9 +179,9 @@ FONT 9, "MS UI Gothic" BEGIN CONTROL "List2",IDC_APPLIST,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,7,7,233,177 - PUSHBUTTON "V^XN(&N)...",IDC_NEWTASK,187,189,53,14 - PUSHBUTTON "؂ւ(&S)",IDC_SWITCHTO,131,189,53,14,WS_DISABLED - PUSHBUTTON "^XN̏I(&E)",IDC_ENDTASK,75,189,53,14,WS_DISABLED + PUSHBUTTON "V‚µ‚¢ƒ^ƒXƒN(&N)...",IDC_NEWTASK,187,189,53,14 + PUSHBUTTON "Ø‚è‘Ö‚¦(&S)",IDC_SWITCHTO,131,189,53,14,WS_DISABLED + PUSHBUTTON "ƒ^ƒXƒN‚̏I—¹(&E)",IDC_ENDTASK,75,189,53,14,WS_DISABLED END IDD_PROCESS_PAGE DIALOGEX DISCARDABLE 0, 0, 247, 210 @@ -191,8 +191,8 @@ BEGIN CONTROL "List2",IDC_PROCESSLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,7,7,233,177 - PUSHBUTTON "vZX̏I(&E)",IDC_ENDPROCESS,171,189,69,14 - CONTROL "S[U[̃vZX\\(&S)",IDC_SHOWALLPROCESSES, + PUSHBUTTON "ƒvƒƒZƒX‚̏I—¹(&E)",IDC_ENDPROCESS,171,189,69,14 + CONTROL "‘Sƒ†[ƒU[‚̃vƒƒZƒX‚ð•\\ަ‚·‚é(&S)",IDC_SHOWALLPROCESSES, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,191,111,10 END @@ -201,77 +201,77 @@ IDD_PERFORMANCE_PAGE DIALOGEX DISCARDABLE 0, 0, 247, 210 STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN FONT 9, "MS UI Gothic" BEGIN - GROUPBOX "CPU gp",IDC_CPU_USAGE_FRAME,5,5,60,54,0,WS_EX_TRANSPARENT - GROUPBOX "gp",IDC_MEM_USAGE_FRAME,5,63,60,54,BS_LEFTTEXT,WS_EX_TRANSPARENT - GROUPBOX "v",IDC_TOTALS_FRAME,5,122,111,39,0,WS_EX_TRANSPARENT - GROUPBOX "R~bg `[W (KB)",IDC_COMMIT_CHARGE_FRAME,5,166,111,39,0,WS_EX_TRANSPARENT - GROUPBOX " (KB)",IDC_PHYSICAL_MEMORY_FRAME,131,122,111,39,0,WS_EX_TRANSPARENT - GROUPBOX "J[l (KB)",IDC_KERNEL_MEMORY_FRAME,131,166,111,39,0,WS_EX_TRANSPARENT - LTEXT "nh",IDS_TOTALS_HANDLE_COUNT,12,131,27,8 - LTEXT "Xbh",IDS_TOTALS_THREAD_COUNT,12,140,27,8 - LTEXT "vZX",IDS_TOTALS_PROCESS_COUNT,12,149,34,8 + GROUPBOX "CPU Žg—p—¦",IDC_CPU_USAGE_FRAME,5,5,60,54,0,WS_EX_TRANSPARENT + GROUPBOX "MEM Usage",IDC_MEM_USAGE_FRAME,5,63,60,54,BS_LEFTTEXT,WS_EX_TRANSPARENT + GROUPBOX "‡Œv",IDC_TOTALS_FRAME,5,122,111,39,0,WS_EX_TRANSPARENT + GROUPBOX "ƒRƒ~ƒbƒg ƒ`ƒƒ[ƒW (KB)",IDC_COMMIT_CHARGE_FRAME,5,166,111,39,0,WS_EX_TRANSPARENT + GROUPBOX "•¨—ƒƒ‚ƒŠ (KB)",IDC_PHYSICAL_MEMORY_FRAME,131,122,111,39,0,WS_EX_TRANSPARENT + GROUPBOX "ƒJ[ƒlƒ‹ ƒƒ‚ƒŠ (KB)",IDC_KERNEL_MEMORY_FRAME,131,166,111,39,0,WS_EX_TRANSPARENT + LTEXT "ƒnƒ“ƒhƒ‹",IDS_TOTALS_HANDLE_COUNT,12,131,27,8 + LTEXT "ƒXƒŒƒbƒh",IDS_TOTALS_THREAD_COUNT,12,140,27,8 + LTEXT "ƒvƒƒZƒX",IDS_TOTALS_PROCESS_COUNT,12,149,34,8 EDITTEXT IDC_TOTALS_HANDLE_COUNT,65,131,45,8,ES_RIGHT | ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT IDC_TOTALS_THREAD_COUNT,65,140,45,8,ES_RIGHT | ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT IDC_TOTALS_PROCESS_COUNT,65,149,45,8,ES_RIGHT | ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP - LTEXT "v",IDS_COMMIT_CHARGE_TOTAL,12,175,27,8 - LTEXT "l",IDS_COMMIT_CHARGE_LIMIT,12,184,15,8,NOT WS_BORDER - LTEXT "ől",IDS_COMMIT_CHARGE_PEAK,12,193,34,8 + LTEXT "‡Œv",IDS_COMMIT_CHARGE_TOTAL,12,175,27,8 + LTEXT "§ŒÀ’l",IDS_COMMIT_CHARGE_LIMIT,12,184,15,8,NOT WS_BORDER + LTEXT "Å‘å’l",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 | NOT WS_TABSTOP EDITTEXT IDC_COMMIT_CHARGE_LIMIT,65,184,45,8,ES_RIGHT | ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT IDC_COMMIT_CHARGE_PEAK,65,193,45,8,ES_RIGHT | ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP - LTEXT "v",IDS_PHYSICAL_MEMORY_TOTAL,137,131,27,8 - LTEXT "p”\\",IDS_PHYSICAL_MEMORY_AVAILABLE,137,140,30,8 - LTEXT "VXe LbV",IDS_PHYSICAL_MEMORY_SYSTEM_CACHE,137,149,46,8 + LTEXT "‡Œv",IDS_PHYSICAL_MEMORY_TOTAL,137,131,27,8 + LTEXT "Available",IDS_PHYSICAL_MEMORY_AVAILABLE,137,140,30,8 + LTEXT "ƒVƒXƒeƒ€ ƒLƒƒƒbƒVƒ…",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 | NOT WS_TABSTOP EDITTEXT IDC_PHYSICAL_MEMORY_AVAILABLE,185,140,48,8,ES_RIGHT | ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT IDC_PHYSICAL_MEMORY_SYSTEM_CACHE,185,149,48,8,ES_RIGHT | ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP - LTEXT "v",IDS_KERNEL_MEMORY_TOTAL,137,174,27,8 - LTEXT "y[W",IDS_KERNEL_MEMORY_PAGED,137,184,21,8 - LTEXT "y[W",IDS_KERNEL_MEMORY_NONPAGED,137,193,34,8 + LTEXT "‡Œv",IDS_KERNEL_MEMORY_TOTAL,137,174,27,8 + LTEXT "ƒy[ƒW",IDS_KERNEL_MEMORY_PAGED,137,184,21,8 + LTEXT "”ñƒy[ƒW",IDS_KERNEL_MEMORY_NONPAGED,137,193,34,8 EDITTEXT IDC_KERNEL_MEMORY_TOTAL,185,174,48,8,ES_RIGHT | ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT IDC_KERNEL_MEMORY_PAGED,185,184,48,8,ES_RIGHT | ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT IDC_KERNEL_MEMORY_NONPAGED,185,193,48,8,ES_RIGHT | ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP - GROUPBOX "CPU gp̗",IDC_CPU_USAGE_HISTORY_FRAME,74,5,168,54,0,WS_EX_TRANSPARENT - GROUPBOX "gpʂ̗",IDC_MEMORY_USAGE_HISTORY_FRAME,74,63,168,54,0,WS_EX_TRANSPARENT - PUSHBUTTON "CPU gp̕\\",IDC_CPU_USAGE_GRAPH,12,17,47,37,NOT WS_TABSTOP,WS_EX_CLIENTEDGE - PUSHBUTTON "gpʂ̕\\",IDC_MEM_USAGE_GRAPH,12,75,47,37,NOT WS_TABSTOP,WS_EX_CLIENTEDGE - PUSHBUTTON "CPU gp̗",IDC_CPU_USAGE_HISTORY_GRAPH,81,17, + GROUPBOX "CPU Žg—p—¦‚Ì—š—ð",IDC_CPU_USAGE_HISTORY_FRAME,74,5,168,54,0,WS_EX_TRANSPARENT + GROUPBOX "ƒƒ‚ƒŠŽg—p—ʂ̗š—ð",IDC_MEMORY_USAGE_HISTORY_FRAME,74,63,168,54,0,WS_EX_TRANSPARENT + PUSHBUTTON "CPU Žg—p—¦‚Ì•\\ަ",IDC_CPU_USAGE_GRAPH,12,17,47,37,NOT WS_TABSTOP,WS_EX_CLIENTEDGE + PUSHBUTTON "ƒƒ‚ƒŠŽg—p—ʂ̕\\ަ",IDC_MEM_USAGE_GRAPH,12,75,47,37,NOT WS_TABSTOP,WS_EX_CLIENTEDGE + PUSHBUTTON "CPU Žg—p—¦‚Ì—š—ð",IDC_CPU_USAGE_HISTORY_GRAPH,81,17, 153,37,NOT WS_TABSTOP,WS_EX_CLIENTEDGE - PUSHBUTTON "gpʂ̗",IDC_MEM_USAGE_HISTORY_GRAPH,81,75, + PUSHBUTTON "ƒƒ‚ƒŠŽg—p—ʂ̗š—ð",IDC_MEM_USAGE_HISTORY_GRAPH,81,75, 153,37,NOT WS_TABSTOP,WS_EX_CLIENTEDGE END IDD_DEBUG_CHANNELS_DIALOG DIALOGEX DISCARDABLE 0, 0, 247, 210 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "fobO `l" +CAPTION "ƒfƒoƒbƒO ƒ`ƒƒƒ“ƒlƒ‹" FONT 9, "MS UI Gothic" 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 + PUSHBUTTON "•‚¶‚é",IDOK,171,189,69,14 END IDD_AFFINITY_DIALOG DIALOGEX DISCARDABLE 0, 0, 231, 154 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "vZbT̊֌W" +CAPTION "ƒvƒƒZƒbƒT‚ÌŠÖŒW" FONT 9, "MS UI Gothic" BEGIN DEFPUSHBUTTON "OK",IDOK,120,133,50,14 - PUSHBUTTON "LZ",IDCANCEL,174,133,50,14 - LTEXT "vZbT̊֌W̐ݒ́Aǂ CPU ŃvZXs邩𐧌䂵܂B", + PUSHBUTTON "ƒLƒƒƒ“ƒZƒ‹",IDCANCEL,174,133,50,14 + LTEXT "ƒvƒƒZƒbƒT‚ÌŠÖŒW‚̐ݒè‚́A‚Ç‚Ì CPU ‚ŃvƒƒZƒX‚ðŽÀs‚·‚é‚©‚𐧌䂵‚Ü‚·B", IDC_STATIC,5,5,220,16 CONTROL "CPU 0",IDC_CPU0,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, 11,28,37,10 @@ -341,62 +341,62 @@ END IDD_COLUMNS_DIALOG DIALOGEX DISCARDABLE 0, 0, 195, 199 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "̑I" +CAPTION "—ñ‚Ì‘I‘ð" FONT 9, "MS UI Gothic" BEGIN DEFPUSHBUTTON "OK",IDOK,84,178,50,14 - PUSHBUTTON "LZ",IDCANCEL,138,178,50,14 - LTEXT "^XN }l[W [vZX] y[Wɕ\\I܂B", + PUSHBUTTON "ƒLƒƒƒ“ƒZƒ‹",IDCANCEL,138,178,50,14 + LTEXT "ƒ^ƒXƒN ƒ}ƒl[ƒWƒƒ‚Ì [ƒvƒƒZƒX] ƒy[ƒW‚É•\\ަ‚·‚é—ñ‚ð‘I‘ð‚µ‚Ü‚·B", IDC_STATIC,7,7,181,17 - CONTROL "C[W(&I)",IDC_IMAGENAME,"Button",BS_AUTOCHECKBOX | + CONTROL "ƒCƒ[ƒW–¼(&I)",IDC_IMAGENAME,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,7,28,56,10 - CONTROL "PID (vZX ID)(&P)",IDC_PID,"Button", + CONTROL "PID (ƒvƒƒZƒX ID)(&P)",IDC_PID,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,7,39,88,10 - CONTROL "CPU gp(&C)",IDC_CPUUSAGE,"Button",BS_AUTOCHECKBOX | + CONTROL "CPU Žg—p—¦(&C)",IDC_CPUUSAGE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,50,53,10 - CONTROL "CPU (&E)",IDC_CPUTIME,"Button",BS_AUTOCHECKBOX | + CONTROL "CPU ŽžŠÔ(&E)",IDC_CPUTIME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,61,48,10 - CONTROL "gp(&M)",IDC_MEMORYUSAGE,"Button",BS_AUTOCHECKBOX | + CONTROL "ƒƒ‚ƒŠŽg—p—Ê(&M)",IDC_MEMORYUSAGE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,72,63,10 - CONTROL "gpʃf^(&D)",IDC_MEMORYUSAGEDELTA,"Button", + CONTROL "ƒƒ‚ƒŠŽg—p—ʃfƒ‹ƒ^(&D)",IDC_MEMORYUSAGEDELTA,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,7,83,82,10 - CONTROL "ő僁gp(&K)",IDC_PEAKMEMORYUSAGE,"Button", + CONTROL "Å‘僁ƒ‚ƒŠŽg—p—Ê(&K)",IDC_PEAKMEMORYUSAGE,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,7,94,82,10 - CONTROL "y[W tHg(&F)",IDC_PAGEFAULTS,"Button",BS_AUTOCHECKBOX | + CONTROL "ƒy[ƒW ƒtƒHƒ‹ƒg(&F)",IDC_PAGEFAULTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,105,53,10 - CONTROL "USER IuWFNg(&U)",IDC_USEROBJECTS,"Button",BS_AUTOCHECKBOX | + CONTROL "USER ƒIƒuƒWƒFƒNƒg(&U)",IDC_USEROBJECTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,116,62,10 - CONTROL "I/O ǂݎ",IDC_IOREADS,"Button",BS_AUTOCHECKBOX | + CONTROL "I/O “ǂݎæ‚è",IDC_IOREADS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,127,49,10 - CONTROL "I/O ǂݎoCg",IDC_IOREADBYTES,"Button", + CONTROL "I/O Read Bytes",IDC_IOREADBYTES,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,7,138,65,10 - CONTROL "ZbV ID(&S)",IDC_SESSIONID,"Button",BS_AUTOCHECKBOX | + CONTROL "ƒZƒbƒVƒ‡ƒ“ ID(&S)",IDC_SESSIONID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,149,50,10 - CONTROL "[U[(&N)",IDC_USERNAME,"Button",BS_AUTOCHECKBOX | + CONTROL "ƒ†[ƒU[–¼(&N)",IDC_USERNAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,160,51,10 - CONTROL "y[W tHg f^(&A)",IDC_PAGEFAULTSDELTA,"Button", + CONTROL "ƒy[ƒW ƒtƒHƒ‹ƒg ƒfƒ‹ƒ^(&A)",IDC_PAGEFAULTSDELTA,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,107,28,72,10 - CONTROL "z TCY(&V)",IDC_VIRTUALMEMORYSIZE,"Button", + CONTROL "‰¼‘zƒƒ‚ƒŠ ƒTƒCƒY(&V)",IDC_VIRTUALMEMORYSIZE,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,107,39,77,10 - CONTROL "y[W v[(&G)",IDC_PAGEDPOOL,"Button",BS_AUTOCHECKBOX | + CONTROL "ƒy[ƒW ƒv[ƒ‹(&G)",IDC_PAGEDPOOL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,107,50,53,10 - CONTROL "y[W v[(&O)",IDC_NONPAGEDPOOL,"Button", + CONTROL "”ñƒy[ƒW ƒv[ƒ‹(&O)",IDC_NONPAGEDPOOL,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,107,61,67,10 - CONTROL "{Dx(&R)",IDC_BASEPRIORITY,"Button", + CONTROL "Šî–{—Dæ“x(&R)",IDC_BASEPRIORITY,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,107,72,55,10 - CONTROL "nh̐(&H)",IDC_HANDLECOUNT,"Button",BS_AUTOCHECKBOX | + CONTROL "ƒnƒ“ƒhƒ‹‚̐”(&H)",IDC_HANDLECOUNT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,107,83,59,10 - CONTROL "Xbh̐(&T)",IDC_THREADCOUNT,"Button",BS_AUTOCHECKBOX | + CONTROL "ƒXƒŒƒbƒh‚̐”(&T)",IDC_THREADCOUNT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,107,94,59,10 - CONTROL "GDI IuWFNg",IDC_GDIOBJECTS,"Button",BS_AUTOCHECKBOX | + CONTROL "GDI ƒIƒuƒWƒFƒNƒg",IDC_GDIOBJECTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,107,105,55,10 - CONTROL "I/O ",IDC_IOWRITES,"Button",BS_AUTOCHECKBOX | + CONTROL "I/O Writes",IDC_IOWRITES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,107,116,49,10 - CONTROL "I/O ݃oCg",IDC_IOWRITEBYTES,"Button", + CONTROL "I/O Write Bytes",IDC_IOWRITEBYTES,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,107,127,65,10 - CONTROL "I/O ̑",IDC_IOOTHER,"Button",BS_AUTOCHECKBOX | + CONTROL "I/O ‚»‚Ì‘¼",IDC_IOOTHER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,107,138,46,10 - CONTROL "I/O ̑̃oCg",IDC_IOOTHERBYTES,"Button", + CONTROL "I/O Other Bytes",IDC_IOOTHERBYTES,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,107,149,65,10 END @@ -521,135 +521,135 @@ END STRINGTABLE DISCARDABLE BEGIN - IDS_APP_TITLE "^XN }l[W" - IDC_TASKMGR "^XN }l[W" + IDS_APP_TITLE "Task Manager" + IDC_TASKMGR "Task Manager" IDS_IDLE_PROCESS "System Idle Process" END STRINGTABLE DISCARDABLE BEGIN - ID_FILE_NEW "VvOs܂" - ID_OPTIONS_ALWAYSONTOP "ŏȂAɃ^XN }l[Wقׂ̂ẴEBhEOɕ\\܂" + ID_FILE_NEW "V‚µ‚¢ƒvƒƒOƒ‰ƒ€‚ðŽÀs‚µ‚Ü‚·" + ID_OPTIONS_ALWAYSONTOP "Å¬‰»‚³‚ê‚È‚¢ŒÀ‚èAí‚Ƀ^ƒXƒN ƒ}ƒl[ƒWƒƒ‚ª‚Ù‚©‚Ì‚·‚ׂẴEƒBƒ“ƒhƒE‚æ‚è‚àŽè‘O‚É•\\ަ‚³‚ê‚Ü‚·" ID_OPTIONS_MINIMIZEONUSE - "[؂ւ] sƁA^XN }l[Wŏ܂" - ID_OPTIONS_HIDEWHENMINIMIZED "ŏꂽƂɁA^XN }l[WB܂" - ID_VIEW_REFRESH "[XV̕px] ̐ݒɂ炸A^XN }l[WXV܂" - ID_VIEW_LARGE "傫ACRgă^XN\\܂" - ID_VIEW_SMALL "ACRgă^XN\\܂" - ID_VIEW_DETAILS "e^XN̏\\܂" - ID_VIEW_UPDATESPEED_HIGH "b 2 \\XV܂" - ID_VIEW_UPDATESPEED_NORMAL "2 b 1 \\XV܂" - ID_VIEW_UPDATESPEED_LOW "4 b 1 \\XV܂" + "[Ø‚è‘Ö‚¦] ‘€ì‚ðŽÀs‚·‚邯Aƒ^ƒXƒN ƒ}ƒl[ƒWƒƒ‚ªÅ¬‰»‚³‚ê‚Ü‚·" + ID_OPTIONS_HIDEWHENMINIMIZED "Å¬‰»‚³‚ꂽ‚Æ‚«‚ɁAƒ^ƒXƒN ƒ}ƒl[ƒWƒƒ‚ð‰B‚µ‚Ü‚·" + ID_VIEW_REFRESH "[XV‚Ì•p“x] ‚̐ݒè‚É‚©‚©‚í‚炸A¡‚·‚®ƒ^ƒXƒN ƒ}ƒl[ƒWƒƒ‚ðXV‚µ‚Ü‚·" + ID_VIEW_LARGE "‘å‚«‚¢ƒAƒCƒRƒ“‚ðŽg‚Á‚ă^ƒXƒN‚ð•\\ަ‚µ‚Ü‚·" + ID_VIEW_SMALL "¬‚³‚¢ƒAƒCƒRƒ“‚ðŽg‚Á‚ă^ƒXƒN‚ð•\\ަ‚µ‚Ü‚·" + ID_VIEW_DETAILS "Šeƒ^ƒXƒN‚̏î•ñ‚ð•\\ަ‚µ‚Ü‚·" + ID_VIEW_UPDATESPEED_HIGH "–ˆ•b 2 ‰ñ•\\ަ‚ðXV‚µ‚Ü‚·" + ID_VIEW_UPDATESPEED_NORMAL "2 •b‚É 1 ‰ñ•\\ަ‚ðXV‚µ‚Ü‚·" + ID_VIEW_UPDATESPEED_LOW "4 •b‚É 1 ‰ñ•\\ަ‚ðXV‚µ‚Ü‚·" END STRINGTABLE DISCARDABLE BEGIN - ID_VIEW_UPDATESPEED_PAUSED "\\IɍXV܂" + ID_VIEW_UPDATESPEED_PAUSED "•\\ަ‚ðŽ©“®“I‚ɍXV‚µ‚Ü‚¹‚ñ" ID_WINDOWS_TILEHORIZONTALLY - "fXNgbvŃEBhEdȂȂ悤ɏ㉺ɕׂĕ\\܂" - ID_WINDOWS_TILEVERTICALLY "fXNgbvŃEBhEdȂȂ悤ɍEɕׂĕ\\܂" - ID_WINDOWS_MINIMIZE "EBhEŏ܂" - ID_WINDOWS_MAXIMIZE "EBhEő剻܂" - ID_WINDOWS_CASCADE "fXNgbvŃEBhEd˂ĕ\\܂" - ID_WINDOWS_BRINGTOFRONT "EBhEOɕ\\܂A؂ւ܂B" - ID_HELP_TOPICS "^XN }l[W̃wv gsbN\\܂" - ID_HELP_ABOUT "vOAo[WԍA쌠\\܂" - ID_FILE_EXIT "^XN }l[W AvP[VI܂" + "ƒfƒXƒNƒgƒbƒvã‚ŃEƒBƒ“ƒhƒE‚ðd‚È‚ç‚È‚¢‚悤‚ɏ㉺‚É•À‚ׂĕ\\ަ‚µ‚Ü‚·" + ID_WINDOWS_TILEVERTICALLY "ƒfƒXƒNƒgƒbƒvã‚ŃEƒBƒ“ƒhƒE‚ðd‚È‚ç‚È‚¢‚悤‚ɍ¶‰E‚É•À‚ׂĕ\\ަ‚µ‚Ü‚·" + ID_WINDOWS_MINIMIZE "ƒEƒBƒ“ƒhƒE‚ðÅ¬‰»‚µ‚Ü‚·" + ID_WINDOWS_MAXIMIZE "ƒEƒBƒ“ƒhƒE‚ðÅ‘剻‚µ‚Ü‚·" + ID_WINDOWS_CASCADE "ƒfƒXƒNƒgƒbƒvã‚ŃEƒBƒ“ƒhƒE‚ðd‚˂ĕ\\ަ‚µ‚Ü‚·" + ID_WINDOWS_BRINGTOFRONT "ƒEƒBƒ“ƒhƒE‚ðŽè‘O‚É•\\ަ‚µ‚Ü‚·‚ªAØ‚è‘Ö‚¦‚Ü‚¹‚ñB" + ID_HELP_TOPICS "ƒ^ƒXƒN ƒ}ƒl[ƒWƒƒ‚̃wƒ‹ƒv ƒgƒsƒbƒN‚ð•\\ަ‚µ‚Ü‚·" + ID_HELP_ABOUT "ƒvƒƒOƒ‰ƒ€î•ñAƒo[ƒWƒ‡ƒ“”ԍ†A’˜ìŒ ‚ð•\\ަ‚µ‚Ü‚·" + ID_FILE_EXIT "ƒ^ƒXƒN ƒ}ƒl[ƒWƒƒ ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ðI—¹‚µ‚Ü‚·" ID_OPTIONS_SHOW16BITTASKS - "16 rbg ^XNA֘Atꂽ ntvdm.exe ̉ɕ\\܂" - ID_VIEW_SELECTCOLUMNS "[vZX] y[Wɕ\\I܂" - ID_VIEW_SHOWKERNELTIMES "J[lԂptH[}X Otɕ\\܂" + "16 ƒrƒbƒg ƒ^ƒXƒN‚ðAŠÖ˜A•t‚¯‚ç‚ꂽ ntvdm.exe ‚̉º‚É•\\ަ‚µ‚Ü‚·" + ID_VIEW_SELECTCOLUMNS "[ƒvƒƒZƒX] ƒy[ƒW‚É•\\ަ‚·‚é—ñ‚ð‘I‘ð‚µ‚Ü‚·" + ID_VIEW_SHOWKERNELTIMES "ƒJ[ƒlƒ‹ŽžŠÔ‚ðƒpƒtƒH[ƒ}ƒ“ƒX ƒOƒ‰ƒtã‚É•\\ަ‚µ‚Ü‚·" ID_VIEW_CPUHISTORY_ONEGRAPHALL - "1 ‚̗Ot CPU gp̍v\\܂" - ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU "CPU gp̗ CPU ƂɃOtŕ\\܂" + "1 ‚‚̗š—ðƒOƒ‰ƒt‚Å CPU Žg—p—¦‚̍‡Œv‚ð•\\ަ‚µ‚Ü‚·" + ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU "CPU Žg—p—¦‚Ì—š—ð‚ð CPU ‚²‚ƂɃOƒ‰ƒt‚Å•\\ަ‚µ‚Ü‚·" ID_APPLICATION_PAGE_SWITCHTO - "^XNOɕ\\AtH[JX؂ւ܂" + "ƒ^ƒXƒN‚ðŽè‘O‚É•\\ަ‚µAƒtƒH[ƒJƒX‚ðØ‚è‘Ö‚¦‚Ü‚·" END STRINGTABLE DISCARDABLE BEGIN - ID_ENDTASK "IĂ^XNɏI悤w܂" - ID_GOTOPROCESS "IĂ^XÑvZXɃtH[JX؂ւ܂" - ID_RESTORE "BĂ^XN }l[Wɖ߂܂" - ID_PROCESS_PAGE_ENDPROCESS "VXevZX폜܂" + ID_ENDTASK "‘I‘ð‚³‚ê‚Ä‚¢‚éƒ^ƒXƒN‚ɏI—¹‚·‚邿‚¤Žwަ‚µ‚Ü‚·" + ID_GOTOPROCESS "‘I‘ð‚³‚ê‚Ä‚¢‚éƒ^ƒXƒN‚̃vƒƒZƒX‚ɃtƒH[ƒJƒX‚ðØ‚è‘Ö‚¦‚Ü‚·" + ID_RESTORE "‰B‚ê‚Ä‚¢‚½ƒ^ƒXƒN ƒ}ƒl[ƒWƒƒ‚ðŒ³‚É–ß‚µ‚Ü‚·" + ID_PROCESS_PAGE_ENDPROCESS "ƒVƒXƒeƒ€‚©‚çƒvƒƒZƒX‚ðíœ‚µ‚Ü‚·" ID_PROCESS_PAGE_ENDPROCESSTREE - "̃vZXƎqvZXׂč폜܂" - ID_PROCESS_PAGE_DEBUG "̃vZXɃfobKYt܂" + "‚±‚̃vƒƒZƒX‚ÆŽqƒvƒƒZƒX‚ð‚·‚×‚Äíœ‚µ‚Ü‚·" + ID_PROCESS_PAGE_DEBUG "‚±‚̃vƒƒZƒX‚ɃfƒoƒbƒK‚ð“Y•t‚µ‚Ü‚·" ID_PROCESS_PAGE_SETAFFINITY - "ǂ̃vZbTŃvZXs邩𐧌䂵܂" + "‚ǂ̃vƒƒZƒbƒT‚ŃvƒƒZƒX‚ðŽÀs‚·‚é‚©‚𐧌䂵‚Ü‚·" ID_PROCESS_PAGE_SETPRIORITY_REALTIME - "vZXA^CDxNXɐݒ肵܂" - ID_PROCESS_PAGE_SETPRIORITY_HIGH "vZXDxNXɐݒ肵܂" + "ƒvƒƒZƒX‚ðƒŠƒAƒ‹ƒ^ƒCƒ€—Dæ“xƒNƒ‰ƒX‚ɐݒ肵‚Ü‚·" + ID_PROCESS_PAGE_SETPRIORITY_HIGH "ƒvƒƒZƒX‚ð‚—Dæ“xƒNƒ‰ƒX‚ɐݒ肵‚Ü‚·" ID_PROCESS_PAGE_SETPRIORITY_ABOVENORMAL - "vZXʏȏ̗DxNXɐݒ肵܂" + "ƒvƒƒZƒX‚ð’ʏíˆÈã‚Ì—Dæ“xƒNƒ‰ƒX‚ɐݒ肵‚Ü‚·" ID_PROCESS_PAGE_SETPRIORITY_NORMAL - "vZXʏDxNXɐݒ肵܂" + "ƒvƒƒZƒX‚ð’ʏí—Dæ“xƒNƒ‰ƒX‚ɐݒ肵‚Ü‚·" ID_PROCESS_PAGE_SETPRIORITY_BELOWNORMAL - "vZXʏȉ̗DxNXɐݒ肵܂" - ID_PROCESS_PAGE_SETPRIORITY_LOW "vZXDxNXɐݒ肵܂" + "ƒvƒƒZƒX‚ð’ʏíˆÈ‰º‚Ì—Dæ“xƒNƒ‰ƒX‚ɐݒ肵‚Ü‚·" + ID_PROCESS_PAGE_SETPRIORITY_LOW "ƒvƒƒZƒX‚ð’á—Dæ“xƒNƒ‰ƒX‚ɐݒ肵‚Ü‚·" END STRINGTABLE DISCARDABLE BEGIN - IDS_TAB_APPS "AvP[V" - IDS_TAB_PROCESSES "vZX" - IDS_TAB_PERFORMANCE "ptH[}X" - IDS_TAB_TASK "^XN" - IDS_TAB_STATUS "" - IDS_TAB_IMAGENAME "C[W" + IDS_TAB_APPS "Applications" + IDS_TAB_PROCESSES "ƒvƒƒZƒX" + IDS_TAB_PERFORMANCE "ƒpƒtƒH[ƒ}ƒ“ƒX" + IDS_TAB_TASK "ƒ^ƒXƒN" + IDS_TAB_STATUS "Status" + IDS_TAB_IMAGENAME "ƒCƒ[ƒW–¼" IDS_TAB_PID "PID" - IDS_TAB_USERNAME "[U[" - IDS_TAB_SESSIONID "ZbV ID" + IDS_TAB_USERNAME "ƒ†[ƒU[–¼" + IDS_TAB_SESSIONID "ƒZƒbƒVƒ‡ƒ“ ID" IDS_TAB_CPU "CPU" - IDS_TAB_CPUTIME "CPU " - IDS_TAB_MEMUSAGE "gp" - IDS_TAB_PEAKMEMUSAGE "ő僁gp" - IDS_TAB_MEMDELTA " f^" - IDS_TAB_PAGEFAULT "y[W tHg" - IDS_TAB_PFDELTA "y[W tHg f^" - IDS_TAB_VMSIZE "z TCY" - IDS_TAB_PAGEDPOOL "y[W v[" - IDS_TAB_NPPOOL "y[W v[" - IDS_TAB_BASEPRI "{Dx" - IDS_TAB_HANDLES "nh" - IDS_TAB_THREADS "Xbh" - IDS_TAB_USERPBJECTS "USER IuWFNg" - IDS_TAB_GDIOBJECTS "GDI IuWFNg" - IDS_TAB_IOREADS "I/O ǂݎ" - IDS_TAB_IOWRITES "I/O " - IDS_TAB_IOOTHER "I/O ̑" - IDS_TAB_IOREADBYTES "I/O ǂݎoCg" - IDS_TAB_IOWRITESBYTES "I/O ݃oCg" - IDS_TAB_IOOTHERBYTES "I/O ̑̃oCg" - IDS_MENU_SELECTCOLUMNS "̑I(&S)..." - IDS_MENU_16BITTASK "16 rbg ^XN̕\\(&S)" - IDS_MENU_WINDOWS "EBhE(&W)" - IDS_MENU_LARGEICONS "傫ACR(&G)" - IDS_MENU_SMALLICONS "ACR(&M)" - IDS_MENU_DETAILS "ڍ(&D)" - IDS_MENU_ONEGRAPHALLCPUS "ׂĂ CPU 1 Ot(&O)" - IDS_MENU_ONEGRAPHPERCPU "CPU Ƃ 1 Ot(&P)" - IDS_MENU_CPUHISTORY "CPU (&C)" - IDS_MENU_SHOWKERNELTIMES "J[lԂ\\(&S)" - IDS_CREATENEWTASK "V^XN̍쐬" - IDS_CREATENEWTASK_DESC "svOA܂͊JtH_hLgAC^[lbg \\[X͂ĂB" - IDS_MSG_ACCESSPROCESSAFF "vZX̊֌Wւ̃ANZX܂͐ݒ肪ł܂" - IDS_MSG_PROCESSONEPRO "vZX́AȂƂ 1 ‚̃vZbTƊ֌WȂ΂Ȃ܂B" - IDS_MSG_INVALIDOPTION "ȃIvV" - IDS_MSG_UNABLEDEBUGPROCESS "fobKYtł܂" - IDS_MSG_WARNINGDEBUG "x: ̃vZXfobOƁAf[^”\\܂B\nfobKYt܂?" - IDS_MSG_TASKMGRWARNING "^XN }l[W̌x" - IDS_MSG_WARNINGTERMINATING "x: vZXIƁAf[^ꂽAVXe\nsɂȂ肷Ȃǂ́A\\ȂʂɂȂ邱Ƃ܂B\nvZXIOɁAԂ܂̓f[^ۑ邩ǂ\nmFbZ[W͕\\܂BvZXI܂?" - IDS_MSG_UNABLETERMINATEPRO "vZXIł܂" - IDS_MSG_UNABLECHANGEPRIORITY "DxύXł܂" - IDS_MSG_WARNINGCHANGEPRIORITY "x: ̃vZX̗DxNXύXƁAVXes\nȂȂǁA\\ȂʂɂȂ邱Ƃ܂B\nDxNXύX܂?" - IDS_MSG_TRAYICONCPUUSAGE "CPU gp: %d%%" - IDS_STATUS_MEMUSAGE "gp: %dKB / %dKB" - IDS_STATUS_CPUUSAGE "CPU gp: %3d%%" - IDS_STATUS_PROCESSES "vZX: %d" - IDS_Not_Responding "Ȃ" - IDS_Running "s" + IDS_TAB_CPUTIME "CPU Time" + IDS_TAB_MEMUSAGE "Mem Usage" + IDS_TAB_PEAKMEMUSAGE "Peak Mem Usage" + IDS_TAB_MEMDELTA "ƒƒ‚ƒŠ ƒfƒ‹ƒ^" + IDS_TAB_PAGEFAULT "ƒy[ƒW ƒtƒHƒ‹ƒg" + IDS_TAB_PFDELTA "ƒy[ƒW ƒtƒHƒ‹ƒg ƒfƒ‹ƒ^" + IDS_TAB_VMSIZE "‰¼‘zƒƒ‚ƒŠ ƒTƒCƒY" + IDS_TAB_PAGEDPOOL "ƒy[ƒW ƒv[ƒ‹" + IDS_TAB_NPPOOL "”ñƒy[ƒW ƒv[ƒ‹" + IDS_TAB_BASEPRI "Šî–{—Dæ“x" + IDS_TAB_HANDLES "ƒnƒ“ƒhƒ‹" + IDS_TAB_THREADS "ƒXƒŒƒbƒh" + IDS_TAB_USERPBJECTS "USER ƒIƒuƒWƒFƒNƒg" + IDS_TAB_GDIOBJECTS "GDI ƒIƒuƒWƒFƒNƒg" + IDS_TAB_IOREADS "I/O “ǂݎæ‚è" + IDS_TAB_IOWRITES "I/O Writes" + IDS_TAB_IOOTHER "I/O ‚»‚Ì‘¼" + IDS_TAB_IOREADBYTES "I/O Read Bytes" + IDS_TAB_IOWRITESBYTES "I/O Write Bytes" + IDS_TAB_IOOTHERBYTES "I/O Other Bytes" + IDS_MENU_SELECTCOLUMNS "—ñ‚Ì‘I‘ð(&S)..." + IDS_MENU_16BITTASK "16 ƒrƒbƒg ƒ^ƒXƒN‚Ì•\\ަ(&S)" + IDS_MENU_WINDOWS "ƒEƒBƒ“ƒhƒE(&W)" + IDS_MENU_LARGEICONS "‘å‚«‚¢ƒAƒCƒRƒ“(&G)" + IDS_MENU_SMALLICONS "¬‚³‚¢ƒAƒCƒRƒ“(&M)" + IDS_MENU_DETAILS "Ú×(&D)" + IDS_MENU_ONEGRAPHALLCPUS "‚·‚×‚Ä‚Ì CPU ‚Å 1 ƒOƒ‰ƒt(&O)" + IDS_MENU_ONEGRAPHPERCPU "CPU ‚²‚Æ‚É 1 ƒOƒ‰ƒt(&P)" + IDS_MENU_CPUHISTORY "CPU —š—ð(&C)" + IDS_MENU_SHOWKERNELTIMES "ƒJ[ƒlƒ‹ŽžŠÔ‚ð•\\ަ‚·‚é(&S)" + IDS_CREATENEWTASK "V‚µ‚¢ƒ^ƒXƒN‚̍쐬" + IDS_CREATENEWTASK_DESC "ŽÀs‚·‚éƒvƒƒOƒ‰ƒ€–¼A‚Ü‚½‚ÍŠJ‚­ƒtƒHƒ‹ƒ_‚âƒhƒLƒ…ƒƒ“ƒg–¼AƒCƒ“ƒ^[ƒlƒbƒg ƒŠƒ\\[ƒX–¼‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢B" + IDS_MSG_ACCESSPROCESSAFF "ƒvƒƒZƒX‚ÌŠÖŒW‚ւ̃AƒNƒZƒX‚Ü‚½‚͐ݒ肪‚Å‚«‚Ü‚¹‚ñ" + IDS_MSG_PROCESSONEPRO "ƒvƒƒZƒX‚́A­‚È‚­‚Æ‚à 1 ‚‚̃vƒƒZƒbƒT‚ÆŠÖŒW‚ðŽ‚½‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB" + IDS_MSG_INVALIDOPTION "Invalid Option" + IDS_MSG_UNABLEDEBUGPROCESS "ƒfƒoƒbƒK‚ð“Y•t‚Å‚«‚Ü‚¹‚ñ" + IDS_MSG_WARNINGDEBUG "Œx: ‚±‚̃vƒƒZƒX‚ðƒfƒoƒbƒO‚·‚邯Aƒf[ƒ^‚ªŽ¸‚í‚ê‚é‰Â”\\«‚ª‚ ‚è‚Ü‚·B\nƒfƒoƒbƒK‚ð“Y•t‚µ‚Ü‚·‚©?" + IDS_MSG_TASKMGRWARNING "Task Manager Warning" + IDS_MSG_WARNINGTERMINATING "Œx: ƒvƒƒZƒX‚ðI—¹‚·‚邯Aƒf[ƒ^‚ªŽ¸‚í‚ꂽ‚èAƒVƒXƒeƒ€‚ª\n•sˆÀ’è‚ɂȂÁ‚½‚è‚·‚é‚Ȃǂ́A—\\Šú‚µ‚È‚¢Œ‹‰Ê‚ɂȂ邱‚Æ‚ª‚ ‚è‚Ü‚·B\nƒvƒƒZƒX‚ðI—¹‚·‚é‘O‚ɁAó‘Ô‚Ü‚½‚̓f[ƒ^‚ð•Û‘¶‚·‚é‚©‚Ç‚¤‚©‚Ì\nŠm”FƒƒbƒZ[ƒW‚Í•\\ަ‚³‚ê‚Ü‚¹‚ñBƒvƒƒZƒX‚ðI—¹‚µ‚Ü‚·‚©?" + IDS_MSG_UNABLETERMINATEPRO "ƒvƒƒZƒX‚ðI—¹‚Å‚«‚Ü‚¹‚ñ" + IDS_MSG_UNABLECHANGEPRIORITY "—Dæ“x‚ð•ύX‚Å‚«‚Ü‚¹‚ñ" + IDS_MSG_WARNINGCHANGEPRIORITY "Œx: ‚±‚̃vƒƒZƒX‚Ì—Dæ“xƒNƒ‰ƒX‚ð•ύX‚·‚邯AƒVƒXƒeƒ€‚ª•sˆÀ’è‚É\n‚È‚é‚ȂǁA—\\Šú‚µ‚È‚¢Œ‹‰Ê‚ɂȂ邱‚Æ‚ª‚ ‚è‚Ü‚·B\n—Dæ“xƒNƒ‰ƒX‚ð•ύX‚µ‚Ü‚·‚©?" + IDS_MSG_TRAYICONCPUUSAGE "CPU Žg—p—¦: %d%%" + IDS_STATUS_MEMUSAGE "ƒƒ‚ƒŠŽg—p—Ê: %dKB / %dKB" + IDS_STATUS_CPUUSAGE "CPU Žg—p—¦: %3d%%" + IDS_STATUS_PROCESSES "ƒvƒƒZƒX: %d" + IDS_Not_Responding "‰ž“š‚È‚µ" + IDS_Running "ŽÀs’†" END diff --git a/reactos/base/applications/taskmgr/lang/ko-KR.rc b/reactos/base/applications/taskmgr/lang/ko-KR.rc index ca133bbde90..420c375a3fc 100644 --- a/reactos/base/applications/taskmgr/lang/ko-KR.rc +++ b/reactos/base/applications/taskmgr/lang/ko-KR.rc @@ -655,7 +655,7 @@ BEGIN IDS_Running " " END - +#pragma code_page(1252) #endif // Korean resources ///////////////////////////////////////////////////////////////////////////// diff --git a/reactos/base/applications/taskmgr/lang/ro-RO.rc b/reactos/base/applications/taskmgr/lang/ro-RO.rc index 6ec5bbc6994..3983c3b5cba 100644 --- a/reactos/base/applications/taskmgr/lang/ro-RO.rc +++ b/reactos/base/applications/taskmgr/lang/ro-RO.rc @@ -653,6 +653,7 @@ BEGIN END +#pragma code_page(1252) #endif // Romanian resources ///////////////////////////////////////////////////////////////////////////// diff --git a/reactos/base/applications/taskmgr/rsrc.rc b/reactos/base/applications/taskmgr/rsrc.rc index 924c9a106c2..caffbba101f 100644 --- a/reactos/base/applications/taskmgr/rsrc.rc +++ b/reactos/base/applications/taskmgr/rsrc.rc @@ -1,5 +1,3 @@ -#include -#include "resource.h" #include "lang/bg-BG.rc" #include "lang/cs-CZ.rc" diff --git a/reactos/base/applications/wordpad/Da.rc b/reactos/base/applications/wordpad/Da.rc index 64b49ef9230..02760c53140 100644 --- a/reactos/base/applications/wordpad/Da.rc +++ b/reactos/base/applications/wordpad/Da.rc @@ -81,9 +81,9 @@ BEGIN POPUP "F&ormat" BEGIN MENUITEM "&Skrifttype...", ID_FONTSETTINGS - MENUITEM "&Bullets" ID_BULLET - MENUITEM "&Afsnit..." ID_PARAFORMAT - MENUITEM "&Tabulatorer..." ID_TABSTOPS + MENUITEM "&Bullets", ID_BULLET + MENUITEM "&Afsnit...", ID_PARAFORMAT + MENUITEM "&Tabulatorer...", ID_TABSTOPS POPUP "&Baggrund" BEGIN MENUITEM "&System\tCtrl+1", ID_BACK_1 @@ -92,7 +92,7 @@ BEGIN END POPUP "&Hjælp" BEGIN - MENUITEM "&Om Wine Wordpad" ID_ABOUT + MENUITEM "&Om Wine Wordpad", ID_ABOUT END END @@ -100,12 +100,12 @@ IDM_POPUP MENU BEGIN POPUP "" BEGIN - MENUITEM "&Klip" ID_EDIT_CUT - MENUITEM "K&opier" ID_EDIT_COPY - MENUITEM "&Indsæt" ID_EDIT_PASTE + MENUITEM "&Klip", ID_EDIT_CUT + MENUITEM "K&opier", ID_EDIT_COPY + MENUITEM "&Indsæt", ID_EDIT_PASTE MENUITEM SEPARATOR - MENUITEM "&Bullets" ID_BULLET - MENUITEM "&Afsnit..." ID_PARAFORMAT + MENUITEM "&Bullets", ID_BULLET + MENUITEM "&Afsnit...", ID_PARAFORMAT END END @@ -116,20 +116,20 @@ BEGIN MENUITEM "Sort", ID_COLOR_BLACK MENUITEM "Mørkerød", ID_COLOR_MAROON MENUITEM "Grøn", ID_COLOR_GREEN - MENUITEM "Oliven" ID_COLOR_OLIVE - MENUITEM "Navy" ID_COLOR_NAVY - MENUITEM "Lilla" ID_COLOR_PURPLE - MENUITEM "Teal" ID_COLOR_TEAL - MENUITEM "Grå" ID_COLOR_GRAY - MENUITEM "Sølv" ID_COLOR_SILVER - MENUITEM "Rød" ID_COLOR_RED - MENUITEM "Lime" ID_COLOR_LIME - MENUITEM "Gul" ID_COLOR_YELLOW - MENUITEM "Blå" ID_COLOR_BLUE - MENUITEM "Violet" ID_COLOR_FUCHSIA - MENUITEM "Cyan" ID_COLOR_AQUA - MENUITEM "Hvid" ID_COLOR_WHITE - MENUITEM "Automatic" ID_COLOR_AUTOMATIC + MENUITEM "Oliven", ID_COLOR_OLIVE + MENUITEM "Navy", ID_COLOR_NAVY + MENUITEM "Lilla", ID_COLOR_PURPLE + MENUITEM "Teal", ID_COLOR_TEAL + MENUITEM "Grå", ID_COLOR_GRAY + MENUITEM "Sølv", ID_COLOR_SILVER + MENUITEM "Rød", ID_COLOR_RED + MENUITEM "Lime", ID_COLOR_LIME + MENUITEM "Gul", ID_COLOR_YELLOW + MENUITEM "Blå", ID_COLOR_BLUE + MENUITEM "Violet", ID_COLOR_FUCHSIA + MENUITEM "Cyan", ID_COLOR_AQUA + MENUITEM "Hvid", ID_COLOR_WHITE + MENUITEM "Automatic", ID_COLOR_AUTOMATIC END END @@ -157,7 +157,7 @@ END IDD_PARAFORMAT DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Formater afsnit" +CAPTION "Formater afsnit" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Indryk", -1, 10, 10, 120, 68 @@ -175,7 +175,7 @@ END IDD_TABSTOPS DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Tabulatorer" +CAPTION "Tabulatorer" FONT 8, "MS SHell DLg" BEGIN GROUPBOX "Tabulatorstop", -1, 10, 10, 120, 90 @@ -189,7 +189,7 @@ END IDD_FORMATOPTS DIALOG 0, 0, 280, 110 STYLE DS_SYSMODAL -Caption "" +CAPTION "" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Liniebrydning", -1, 10, 10, 130, 85 @@ -262,9 +262,7 @@ BEGIN STRING_PROMPT_SAVE_CHANGES, "Gemme ændringer i «%s»?" STRING_SEARCH_FINISHED, "Færdig med at søge i dokumentet." STRING_LOAD_RICHED_FAILED, "Kunne ikke indlæse RichEdit-biblioteket." - STRING_SAVE_LOSEFORMATTING, "Du har valgt at gemme i rent tekstformat, noget som " \ - "vil medføre at al formatering går tabt. Er du " \ - "sikker på at du vil fortsætte?" + STRING_SAVE_LOSEFORMATTING, "Du har valgt at gemme i rent tekstformat, noget som vil medføre at al formatering går tabt. Er du sikker på at du vil fortsætte?" STRING_INVALID_NUMBER, "Ugyldigt talformat" STRING_OLE_STORAGE_NOT_SUPPORTED, "OLE storage dokumenter er ikke understøttet" STRING_WRITE_FAILED, "Kunne ikke gemme filen." diff --git a/reactos/base/applications/wordpad/De.rc b/reactos/base/applications/wordpad/De.rc index a369f38a593..53e1ba13b02 100644 --- a/reactos/base/applications/wordpad/De.rc +++ b/reactos/base/applications/wordpad/De.rc @@ -80,9 +80,9 @@ BEGIN POPUP "Forma&t" BEGIN MENUITEM "Sch&riftart...", ID_FONTSETTINGS - MENUITEM "Auf&zählungszeichen" ID_BULLET - MENUITEM "&Absatz..." ID_PARAFORMAT - MENUITEM "&Tabstopps..." ID_TABSTOPS + MENUITEM "Auf&zählungszeichen", ID_BULLET + MENUITEM "&Absatz...", ID_PARAFORMAT + MENUITEM "&Tabstopps...", ID_TABSTOPS POPUP "&Hintergrund" BEGIN MENUITEM "&System\tStrg+1", ID_BACK_1 @@ -91,7 +91,7 @@ BEGIN END POPUP "&?" BEGIN - MENUITEM "Ü&ber Wine Wordpad" ID_ABOUT + MENUITEM "Ü&ber Wine Wordpad", ID_ABOUT END END @@ -103,8 +103,8 @@ BEGIN MENUITEM "&Kopieren", ID_EDIT_COPY MENUITEM "&Einfügen", ID_EDIT_PASTE MENUITEM SEPARATOR - MENUITEM "Auf&zählungszeichen" ID_BULLET - MENUITEM "&Absatz..." ID_PARAFORMAT + MENUITEM "Auf&zählungszeichen", ID_BULLET + MENUITEM "&Absatz...", ID_PARAFORMAT END END @@ -112,23 +112,23 @@ IDM_COLOR_POPUP MENU BEGIN POPUP "" BEGIN - MENUITEM "Schwarz" ID_COLOR_BLACK - MENUITEM "Kastanienbraun" ID_COLOR_MAROON - MENUITEM "Grün" ID_COLOR_GREEN - MENUITEM "Olivgrün" ID_COLOR_OLIVE - MENUITEM "Dunkelblau" ID_COLOR_NAVY - MENUITEM "Lila" ID_COLOR_PURPLE - MENUITEM "Blaugrün" ID_COLOR_TEAL - MENUITEM "Grau" ID_COLOR_GRAY - MENUITEM "Silber" ID_COLOR_SILVER - MENUITEM "Rot" ID_COLOR_RED - MENUITEM "Hellgrün" ID_COLOR_LIME - MENUITEM "Gelb" ID_COLOR_YELLOW - MENUITEM "Blau" ID_COLOR_BLUE - MENUITEM "Pink" ID_COLOR_FUCHSIA - MENUITEM "Aquamarin" ID_COLOR_AQUA - MENUITEM "Weiß" ID_COLOR_WHITE - MENUITEM "Automatic" ID_COLOR_AUTOMATIC + MENUITEM "Schwarz", ID_COLOR_BLACK + MENUITEM "Kastanienbraun",ID_COLOR_MAROON + MENUITEM "Grün", ID_COLOR_GREEN + MENUITEM "Olivgrün", ID_COLOR_OLIVE + MENUITEM "Dunkelblau", ID_COLOR_NAVY + MENUITEM "Lila", ID_COLOR_PURPLE + MENUITEM "Blaugrün", ID_COLOR_TEAL + MENUITEM "Grau", ID_COLOR_GRAY + MENUITEM "Silber", ID_COLOR_SILVER + MENUITEM "Rot", ID_COLOR_RED + MENUITEM "Hellgrün", ID_COLOR_LIME + MENUITEM "Gelb", ID_COLOR_YELLOW + MENUITEM "Blau", ID_COLOR_BLUE + MENUITEM "Pink", ID_COLOR_FUCHSIA + MENUITEM "Aquamarin", ID_COLOR_AQUA + MENUITEM "Weiß", ID_COLOR_WHITE + MENUITEM "Automatic", ID_COLOR_AUTOMATIC END END @@ -156,7 +156,7 @@ END IDD_PARAFORMAT DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Absatz" +CAPTION "Absatz" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Einzug", -1, 10, 10, 120, 68 @@ -174,7 +174,7 @@ END IDD_TABSTOPS DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Tabstopps" +CAPTION "Tabstopps" FONT 8, "MS SHell DLg" BEGIN GROUPBOX "Tabstoppposition", -1, 10, 10, 120, 90 @@ -188,7 +188,7 @@ END IDD_FORMATOPTS DIALOG 0, 0, 280, 110 STYLE DS_SYSMODAL -Caption "" +CAPTION "" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Zeilenumbruch", -1, 10, 10, 130, 85 @@ -261,9 +261,7 @@ BEGIN STRING_PROMPT_SAVE_CHANGES, "Änderungen an '%s' speichern?" STRING_SEARCH_FINISHED, "Wordpad hat das Durchsuchen des Dokuments beendet." STRING_LOAD_RICHED_FAILED, "Die RichEdit-Bibliothek konnte nicht geladen werden." - STRING_SAVE_LOSEFORMATTING, "Sie sind dabei, die Datei als Textdatei zu speichern. " \ - "Dadurch geht die Formatierung verloren. " \ - "Möchten Sie den Vorgang trotzdem fortsetzen?" + STRING_SAVE_LOSEFORMATTING, "Sie sind dabei, die Datei als Textdatei zu speichern. Dadurch geht die Formatierung verloren. Möchten Sie den Vorgang trotzdem fortsetzen?" STRING_INVALID_NUMBER, "Diese Maßeinheit ist nicht zulässig." STRING_OLE_STORAGE_NOT_SUPPORTED, "OLE-Dokumentenspeicherung wird nicht unterstützt." STRING_WRITE_FAILED, "Die Datei konnte nicht gespeichert werden." diff --git a/reactos/base/applications/wordpad/En.rc b/reactos/base/applications/wordpad/En.rc index 9ee5521bd1e..4e05b677ff6 100644 --- a/reactos/base/applications/wordpad/En.rc +++ b/reactos/base/applications/wordpad/En.rc @@ -78,9 +78,9 @@ BEGIN POPUP "F&ormat" BEGIN MENUITEM "&Font...", ID_FONTSETTINGS - MENUITEM "&Bullet points" ID_BULLET - MENUITEM "&Paragraph..." ID_PARAFORMAT - MENUITEM "&Tabs..." ID_TABSTOPS + MENUITEM "&Bullet points", ID_BULLET + MENUITEM "&Paragraph...", ID_PARAFORMAT + MENUITEM "&Tabs...", ID_TABSTOPS POPUP "Backgroun&d" BEGIN MENUITEM "&System\tCtrl+1", ID_BACK_1 @@ -89,7 +89,7 @@ BEGIN END POPUP "&Help" BEGIN - MENUITEM "&About Wine Wordpad" ID_ABOUT + MENUITEM "&About Wine Wordpad", ID_ABOUT END END @@ -101,8 +101,8 @@ BEGIN MENUITEM "&Copy", ID_EDIT_COPY MENUITEM "&Paste", ID_EDIT_PASTE MENUITEM SEPARATOR - MENUITEM "&Bullet points" ID_BULLET - MENUITEM "&Paragraph..." ID_PARAFORMAT + MENUITEM "&Bullet points", ID_BULLET + MENUITEM "&Paragraph...", ID_PARAFORMAT END END @@ -113,20 +113,20 @@ BEGIN MENUITEM "Black", ID_COLOR_BLACK MENUITEM "Maroon", ID_COLOR_MAROON MENUITEM "Green", ID_COLOR_GREEN - MENUITEM "Olive" ID_COLOR_OLIVE - MENUITEM "Navy" ID_COLOR_NAVY - MENUITEM "Purple" ID_COLOR_PURPLE - MENUITEM "Teal" ID_COLOR_TEAL - MENUITEM "Gray" ID_COLOR_GRAY - MENUITEM "Silver" ID_COLOR_SILVER - MENUITEM "Red" ID_COLOR_RED - MENUITEM "Lime" ID_COLOR_LIME - MENUITEM "Yellow" ID_COLOR_YELLOW - MENUITEM "Blue" ID_COLOR_BLUE - MENUITEM "Fuchsia" ID_COLOR_FUCHSIA - MENUITEM "Aqua" ID_COLOR_AQUA - MENUITEM "White" ID_COLOR_WHITE - MENUITEM "Automatic" ID_COLOR_AUTOMATIC + MENUITEM "Olive", ID_COLOR_OLIVE + MENUITEM "Navy", ID_COLOR_NAVY + MENUITEM "Purple", ID_COLOR_PURPLE + MENUITEM "Teal", ID_COLOR_TEAL + MENUITEM "Gray", ID_COLOR_GRAY + MENUITEM "Silver", ID_COLOR_SILVER + MENUITEM "Red", ID_COLOR_RED + MENUITEM "Lime", ID_COLOR_LIME + MENUITEM "Yellow", ID_COLOR_YELLOW + MENUITEM "Blue", ID_COLOR_BLUE + MENUITEM "Fuchsia", ID_COLOR_FUCHSIA + MENUITEM "Aqua", ID_COLOR_AQUA + MENUITEM "White", ID_COLOR_WHITE + MENUITEM "Automatic", ID_COLOR_AUTOMATIC END END @@ -154,7 +154,7 @@ END IDD_PARAFORMAT DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Paragraph format" +CAPTION "Paragraph format" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Indentation", -1, 10, 10, 120, 68 @@ -172,7 +172,7 @@ END IDD_TABSTOPS DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Tabs" +CAPTION "Tabs" FONT 8, "MS SHell DLg" BEGIN GROUPBOX "Tab stops", -1, 10, 10, 120, 90 @@ -186,7 +186,7 @@ END IDD_FORMATOPTS DIALOG 0, 0, 280, 110 STYLE DS_SYSMODAL -Caption "" +CAPTION "" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Line wrapping", -1, 10, 10, 130, 85 @@ -251,9 +251,7 @@ BEGIN STRING_PROMPT_SAVE_CHANGES, "Save changes to '%s'?" STRING_SEARCH_FINISHED, "Finished searching the document." STRING_LOAD_RICHED_FAILED, "Failed to load the RichEdit library." - STRING_SAVE_LOSEFORMATTING, "You have chosen to save in plain text format, " \ - "which will cause all formatting to be lost. " \ - "Are you sure that you wish to do this?" + STRING_SAVE_LOSEFORMATTING, "You have chosen to save in plain text format, which will cause all formatting to be lost. Are you sure that you wish to do this?" STRING_INVALID_NUMBER, "Invalid number format" STRING_OLE_STORAGE_NOT_SUPPORTED, "OLE storage documents are not supported" STRING_WRITE_FAILED, "Could not save the file." diff --git a/reactos/base/applications/wordpad/Fr.rc b/reactos/base/applications/wordpad/Fr.rc index b315bfbd27e..9f202d39370 100644 --- a/reactos/base/applications/wordpad/Fr.rc +++ b/reactos/base/applications/wordpad/Fr.rc @@ -82,9 +82,9 @@ BEGIN POPUP "Forma&t" BEGIN MENUITEM "&Police...", ID_FONTSETTINGS - MENUITEM "Pu&ces" ID_BULLET - MENUITEM "Para&graphe..." ID_PARAFORMAT - MENUITEM "&Tabulations..." ID_TABSTOPS + MENUITEM "Pu&ces", ID_BULLET + MENUITEM "Para&graphe...", ID_PARAFORMAT + MENUITEM "&Tabulations...", ID_TABSTOPS POPUP "&Arrière-plan" BEGIN MENUITEM "&Système\tCtrl+1", ID_BACK_1 @@ -93,7 +93,7 @@ BEGIN END POPUP "Aid&e" BEGIN - MENUITEM "À &propos du Wordpad de Wine" ID_ABOUT + MENUITEM "À &propos du Wordpad de Wine", ID_ABOUT END END @@ -105,8 +105,8 @@ BEGIN MENUITEM "Co&pier", ID_EDIT_COPY MENUITEM "C&oller", ID_EDIT_PASTE MENUITEM SEPARATOR - MENUITEM "P&uces" ID_BULLET - MENUITEM "Para&graphe" ID_PARAFORMAT + MENUITEM "P&uces", ID_BULLET + MENUITEM "Para&graphe", ID_PARAFORMAT END END @@ -114,23 +114,23 @@ IDM_COLOR_POPUP MENU BEGIN POPUP "" BEGIN - MENUITEM "Noir" ID_COLOR_BLACK - MENUITEM "Marron" ID_COLOR_MAROON - MENUITEM "Vert" ID_COLOR_GREEN - MENUITEM "Olive" ID_COLOR_OLIVE - MENUITEM "Bleu marine" ID_COLOR_NAVY - MENUITEM "Pourpre" ID_COLOR_PURPLE - MENUITEM "Sarcelle" ID_COLOR_TEAL - MENUITEM "Gris" ID_COLOR_GRAY - MENUITEM "Argent" ID_COLOR_SILVER - MENUITEM "Rouge" ID_COLOR_RED - MENUITEM "Citron vert" ID_COLOR_LIME - MENUITEM "Jaune" ID_COLOR_YELLOW - MENUITEM "Bleu" ID_COLOR_BLUE - MENUITEM "Fuchsia" ID_COLOR_FUCHSIA - MENUITEM "Eau" ID_COLOR_AQUA - MENUITEM "Blanc" ID_COLOR_WHITE - MENUITEM "Automatique" ID_COLOR_AUTOMATIC + MENUITEM "Noir", ID_COLOR_BLACK + MENUITEM "Marron", ID_COLOR_MAROON + MENUITEM "Vert", ID_COLOR_GREEN + MENUITEM "Olive", ID_COLOR_OLIVE + MENUITEM "Bleu marine",ID_COLOR_NAVY + MENUITEM "Pourpre", ID_COLOR_PURPLE + MENUITEM "Sarcelle", ID_COLOR_TEAL + MENUITEM "Gris", ID_COLOR_GRAY + MENUITEM "Argent", ID_COLOR_SILVER + MENUITEM "Rouge", ID_COLOR_RED + MENUITEM "Citron vert",ID_COLOR_LIME + MENUITEM "Jaune", ID_COLOR_YELLOW + MENUITEM "Bleu", ID_COLOR_BLUE + MENUITEM "Fuchsia", ID_COLOR_FUCHSIA + MENUITEM "Eau", ID_COLOR_AQUA + MENUITEM "Blanc", ID_COLOR_WHITE + MENUITEM "Automatique",ID_COLOR_AUTOMATIC END END @@ -158,7 +158,7 @@ END IDD_PARAFORMAT DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Format de paragraphe" +CAPTION "Format de paragraphe" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Indentation", -1, 10, 10, 120, 68 @@ -176,7 +176,7 @@ END IDD_TABSTOPS DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Tabulations" +CAPTION "Tabulations" FONT 8, "MS SHell DLg" BEGIN GROUPBOX "Taquets de tabulation", -1, 10, 10, 120, 90 @@ -190,7 +190,7 @@ END IDD_FORMATOPTS DIALOG 0, 0, 280, 110 STYLE DS_SYSMODAL -Caption "" +CAPTION "" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Passage à la ligne automatique", -1, 10, 10, 140, 85 @@ -263,9 +263,7 @@ BEGIN STRING_PROMPT_SAVE_CHANGES, "Enregistrer les modifications de « %s » ?" STRING_SEARCH_FINISHED, "Recherche terminée dans le document." STRING_LOAD_RICHED_FAILED, "Impossible de charger la bibliothèque RichEdit." - STRING_SAVE_LOSEFORMATTING, "Vous avez choisi d'enregistrer en texte simple, " \ - "ce qui causera la perte de tout formattage. " \ - "Voulez-vous vraiment continuer ?" + STRING_SAVE_LOSEFORMATTING, "Vous avez choisi d'enregistrer en texte simple, ce qui causera la perte de tout formattage. Voulez-vous vraiment continuer ?" STRING_INVALID_NUMBER, "Format de nombre invalide" STRING_OLE_STORAGE_NOT_SUPPORTED, "Les documents conteneur OLE ne sont pas supportés" STRING_WRITE_FAILED, "Impossible d'enregistrer le fichier." diff --git a/reactos/base/applications/wordpad/Hu.rc b/reactos/base/applications/wordpad/Hu.rc index da13a26ab8f..c73f16d7b3e 100644 --- a/reactos/base/applications/wordpad/Hu.rc +++ b/reactos/base/applications/wordpad/Hu.rc @@ -78,9 +78,9 @@ BEGIN POPUP "F&ormtum" BEGIN MENUITEM "&Font...", ID_FONTSETTINGS - MENUITEM "&Bullet points" ID_BULLET - MENUITEM "&Paragraph..." ID_PARAFORMAT - MENUITEM "&Tabs..." ID_TABSTOPS + MENUITEM "&Bullet points", ID_BULLET + MENUITEM "&Paragraph...", ID_PARAFORMAT + MENUITEM "&Tabs...", ID_TABSTOPS POPUP "&Httr" BEGIN MENUITEM "&Rendszer\tCtrl+1", ID_BACK_1 @@ -89,7 +89,7 @@ BEGIN END POPUP "&Help" BEGIN - MENUITEM "&About Wine Wordpad" ID_ABOUT + MENUITEM "&About Wine Wordpad", ID_ABOUT END END @@ -101,7 +101,7 @@ BEGIN MENUITEM "M&sols\tCtrl+C", ID_EDIT_COPY MENUITEM "&Beilleszts\tCtrl+V", ID_EDIT_PASTE MENUITEM SEPARATOR - MENUITEM "&Bullet points" ID_BULLET - MENUITEM "&Paragraph..." ID_PARAFORMAT + MENUITEM "&Bullet points", ID_BULLET + MENUITEM "&Paragraph...", ID_PARAFORMAT END END diff --git a/reactos/base/applications/wordpad/It.rc b/reactos/base/applications/wordpad/It.rc index 79278d5d5c4..9881509d815 100644 --- a/reactos/base/applications/wordpad/It.rc +++ b/reactos/base/applications/wordpad/It.rc @@ -82,9 +82,9 @@ BEGIN POPUP "F&ormato" BEGIN MENUITEM "&Carattere...", ID_FONTSETTINGS - MENUITEM "&Elenco" ID_BULLET - MENUITEM "&Paragrafo..." ID_PARAFORMAT - MENUITEM "&Tabulazioni..." ID_TABSTOPS + MENUITEM "&Elenco", ID_BULLET + MENUITEM "&Paragrafo...", ID_PARAFORMAT + MENUITEM "&Tabulazioni...", ID_TABSTOPS POPUP "Sfon&do" BEGIN MENUITEM "Di &sistema\tCtrl+1", ID_BACK_1 @@ -93,7 +93,7 @@ BEGIN END POPUP "&Aiuto" BEGIN - MENUITEM "&Riguardo a Wine Wordpad" ID_ABOUT + MENUITEM "&Riguardo a Wine Wordpad", ID_ABOUT END END @@ -105,8 +105,8 @@ BEGIN MENUITEM "&Copia", ID_EDIT_COPY MENUITEM "&Incolla", ID_EDIT_PASTE MENUITEM SEPARATOR - MENUITEM "&Elenco" ID_BULLET - MENUITEM "&Paragrafo..." ID_PARAFORMAT + MENUITEM "&Elenco", ID_BULLET + MENUITEM "&Paragrafo...", ID_PARAFORMAT END END @@ -114,23 +114,23 @@ IDM_COLOR_POPUP MENU BEGIN POPUP "" BEGIN - MENUITEM "Nero" ID_COLOR_BLACK - MENUITEM "Marrone rossiccio" ID_COLOR_MAROON - MENUITEM "Verde" ID_COLOR_GREEN - MENUITEM "Verde oliva" ID_COLOR_OLIVE - MENUITEM "Blu oltremare" ID_COLOR_NAVY - MENUITEM "Porpora" ID_COLOR_PURPLE - MENUITEM "Foglia di Tè" ID_COLOR_TEAL - MENUITEM "Grigio" ID_COLOR_GRAY - MENUITEM "Argento" ID_COLOR_SILVER - MENUITEM "Rosso" ID_COLOR_RED - MENUITEM "Verde cedro" ID_COLOR_LIME - MENUITEM "Giallo" ID_COLOR_YELLOW - MENUITEM "Blu" ID_COLOR_BLUE - MENUITEM "Fucsia" ID_COLOR_FUCHSIA - MENUITEM "Acqua" ID_COLOR_AQUA - MENUITEM "Bianco" ID_COLOR_WHITE - MENUITEM "Automatico" ID_COLOR_AUTOMATIC + MENUITEM "Nero", ID_COLOR_BLACK + MENUITEM "Marrone rossiccio",ID_COLOR_MAROON + MENUITEM "Verde", ID_COLOR_GREEN + MENUITEM "Verde oliva", ID_COLOR_OLIVE + MENUITEM "Blu oltremare", ID_COLOR_NAVY + MENUITEM "Porpora", ID_COLOR_PURPLE + MENUITEM "Foglia di Tè", ID_COLOR_TEAL + MENUITEM "Grigio", ID_COLOR_GRAY + MENUITEM "Argento", ID_COLOR_SILVER + MENUITEM "Rosso", ID_COLOR_RED + MENUITEM "Verde cedro", ID_COLOR_LIME + MENUITEM "Giallo", ID_COLOR_YELLOW + MENUITEM "Blu", ID_COLOR_BLUE + MENUITEM "Fucsia", ID_COLOR_FUCHSIA + MENUITEM "Acqua", ID_COLOR_AQUA + MENUITEM "Bianco", ID_COLOR_WHITE + MENUITEM "Automatico", ID_COLOR_AUTOMATIC END END @@ -158,7 +158,7 @@ END IDD_PARAFORMAT DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Formato del paragrafo" +CAPTION "Formato del paragrafo" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Rientro", -1, 10, 10, 120, 68 @@ -176,7 +176,7 @@ END IDD_TABSTOPS DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Tabulazioni" +CAPTION "Tabulazioni" FONT 8, "MS SHell DLg" BEGIN GROUPBOX "Punti di fermata delle tabulazioni", -1, 10, 10, 120, 90 @@ -190,7 +190,7 @@ END IDD_FORMATOPTS DIALOG 0, 0, 310, 110 STYLE DS_SYSMODAL -Caption "" +CAPTION "" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Linea di margine", -1, 10, 10, 150, 85 @@ -255,9 +255,7 @@ BEGIN STRING_PROMPT_SAVE_CHANGES, "Salva i cambiamenti su '%s'?" STRING_SEARCH_FINISHED, "Finita la ricerca sul documento." STRING_LOAD_RICHED_FAILED, "Impossibile caricare la libreria RichEdit." - STRING_SAVE_LOSEFORMATTING, "Hai scelto di salvare nel formato Testo semplice, " \ - "che causerà la perdita di tutta la formattazione. " \ - "Sei sicuro?" + STRING_SAVE_LOSEFORMATTING, "Hai scelto di salvare nel formato Testo semplice, che causerà la perdita di tutta la formattazione. Sei sicuro?" STRING_INVALID_NUMBER, "Numero di formato non valido" STRING_OLE_STORAGE_NOT_SUPPORTED, "I documenti di storage OLE non sono supportati" STRING_WRITE_FAILED, "Impossibile salvare il file." diff --git a/reactos/base/applications/wordpad/Ja.rc b/reactos/base/applications/wordpad/Ja.rc index a7d59f6b6cd..6aa518712a6 100644 --- a/reactos/base/applications/wordpad/Ja.rc +++ b/reactos/base/applications/wordpad/Ja.rc @@ -81,9 +81,9 @@ BEGIN POPUP "書式(&O)" BEGIN MENUITEM "フォント(&F)...", ID_FONTSETTINGS - MENUITEM "箇条書き(&B)" ID_BULLET - MENUITEM "段落(&P)..." ID_PARAFORMAT - MENUITEM "タブ(&T)..." ID_TABSTOPS + MENUITEM "箇条書き(&B)", ID_BULLET + MENUITEM "段落(&P)...", ID_PARAFORMAT + MENUITEM "タブ(&T)...", ID_TABSTOPS POPUP "背景(&D)" BEGIN MENUITEM "システム(&S)\tCtrl+1", ID_BACK_1 @@ -92,7 +92,7 @@ BEGIN END POPUP "ヘルプ(&H)" BEGIN - MENUITEM "Wine Wordpadについて(&A)" ID_ABOUT + MENUITEM "Wine Wordpadについて(&A)", ID_ABOUT END END @@ -104,8 +104,8 @@ BEGIN MENUITEM "コピー(&C)", ID_EDIT_COPY MENUITEM "貼り付け(&P)", ID_EDIT_PASTE MENUITEM SEPARATOR - MENUITEM "箇条書き(&B)" ID_BULLET - MENUITEM "段落(&P)..." ID_PARAFORMAT + MENUITEM "箇条書き(&B)", ID_BULLET + MENUITEM "段落(&P)...", ID_PARAFORMAT END END @@ -113,23 +113,23 @@ IDM_COLOR_POPUP MENU BEGIN POPUP "" BEGIN - MENUITEM "黒" ID_COLOR_BLACK - MENUITEM "茶色" ID_COLOR_MAROON - MENUITEM "緑" ID_COLOR_GREEN - MENUITEM "オリーブ" ID_COLOR_OLIVE - MENUITEM "紺" ID_COLOR_NAVY - MENUITEM "紫" ID_COLOR_PURPLE - MENUITEM "青緑" ID_COLOR_TEAL - MENUITEM "灰色" ID_COLOR_GRAY - MENUITEM "銀色" ID_COLOR_SILVER - MENUITEM "赤" ID_COLOR_RED - MENUITEM "黄緑" ID_COLOR_LIME - MENUITEM "黄" ID_COLOR_YELLOW - MENUITEM "青" ID_COLOR_BLUE - MENUITEM "赤紫" ID_COLOR_FUCHSIA - MENUITEM "水色" ID_COLOR_AQUA - MENUITEM "白" ID_COLOR_WHITE - MENUITEM "自動" ID_COLOR_AUTOMATIC + MENUITEM "黒", ID_COLOR_BLACK + MENUITEM "茶色", ID_COLOR_MAROON + MENUITEM "緑", ID_COLOR_GREEN + MENUITEM "オリーブ",ID_COLOR_OLIVE + MENUITEM "紺", ID_COLOR_NAVY + MENUITEM "紫", ID_COLOR_PURPLE + MENUITEM "青緑", ID_COLOR_TEAL + MENUITEM "灰色", ID_COLOR_GRAY + MENUITEM "銀色", ID_COLOR_SILVER + MENUITEM "赤", ID_COLOR_RED + MENUITEM "黄緑", ID_COLOR_LIME + MENUITEM "黄", ID_COLOR_YELLOW + MENUITEM "青", ID_COLOR_BLUE + MENUITEM "赤紫", ID_COLOR_FUCHSIA + MENUITEM "水色", ID_COLOR_AQUA + MENUITEM "白", ID_COLOR_WHITE + MENUITEM "自動", ID_COLOR_AUTOMATIC END END @@ -254,9 +254,7 @@ BEGIN STRING_PROMPT_SAVE_CHANGES, "'%s'への変更を保存しますか?" STRING_SEARCH_FINISHED, "文書の検索を完了。" STRING_LOAD_RICHED_FAILED, "RichEditライブラリの読み込みに失敗。" - STRING_SAVE_LOSEFORMATTING, "プレーンテキスト形式で保存すると、" \ - "すべての書式が失われます。" \ - "それでもよいですか?" + STRING_SAVE_LOSEFORMATTING, "プレーンテキスト形式で保存すると、すべての書式が失われます。それでもよいですか?" STRING_INVALID_NUMBER, "数の書式が不正" STRING_OLE_STORAGE_NOT_SUPPORTED, "OLEストレージ文書はサポートされていません。" STRING_WRITE_FAILED, "ファイルを保存できません。" diff --git a/reactos/base/applications/wordpad/Ko.rc b/reactos/base/applications/wordpad/Ko.rc index 0df74686300..4daaa6275e6 100644 --- a/reactos/base/applications/wordpad/Ko.rc +++ b/reactos/base/applications/wordpad/Ko.rc @@ -79,9 +79,9 @@ BEGIN POPUP "(&O)" BEGIN MENUITEM "۲(&F)...", ID_FONTSETTINGS - MENUITEM " (&U)" ID_BULLET - MENUITEM "ܶ(&P)..." ID_PARAFORMAT - MENUITEM "(&T)..." ID_TABSTOPS + MENUITEM " (&U)", ID_BULLET + MENUITEM "ܶ(&P)...", ID_PARAFORMAT + MENUITEM "(&T)...", ID_TABSTOPS POPUP "(&B)" BEGIN MENUITEM "ý(&S)\tCtrl+1", ID_BACK_1 @@ -90,7 +90,7 @@ BEGIN END POPUP "(&H)" BEGIN - MENUITEM "Wine е (&A)" ID_ABOUT + MENUITEM "Wine е (&A)", ID_ABOUT END END @@ -102,8 +102,8 @@ BEGIN MENUITEM "(&C)", ID_EDIT_COPY MENUITEM "ٿֱ(&P)", ID_EDIT_PASTE MENUITEM SEPARATOR - MENUITEM "(&B)" ID_BULLET - MENUITEM "ܶ(&P)..." ID_PARAFORMAT + MENUITEM "(&B)", ID_BULLET + MENUITEM "ܶ(&P)...", ID_PARAFORMAT END END @@ -111,23 +111,23 @@ IDM_COLOR_POPUP MENU BEGIN POPUP "" BEGIN - MENUITEM "" ID_COLOR_BLACK - MENUITEM "" ID_COLOR_MAROON - MENUITEM "" ID_COLOR_GREEN - MENUITEM "ø" ID_COLOR_OLIVE - MENUITEM "£ " ID_COLOR_NAVY - MENUITEM "ȫ" ID_COLOR_PURPLE - MENUITEM " " ID_COLOR_TEAL - MENUITEM "ȸ" ID_COLOR_GRAY - MENUITEM "" ID_COLOR_SILVER - MENUITEM "" ID_COLOR_RED - MENUITEM "ӻ" ID_COLOR_LIME - MENUITEM "" ID_COLOR_YELLOW - MENUITEM "Ķ" ID_COLOR_BLUE - MENUITEM "ȫ" ID_COLOR_FUCHSIA - MENUITEM "" ID_COLOR_AQUA - MENUITEM "Ͼ" ID_COLOR_WHITE - MENUITEM "ڵ" ID_COLOR_AUTOMATIC + MENUITEM "", ID_COLOR_BLACK + MENUITEM "", ID_COLOR_MAROON + MENUITEM "", ID_COLOR_GREEN + MENUITEM "ø", ID_COLOR_OLIVE + MENUITEM "£ ", ID_COLOR_NAVY + MENUITEM "ȫ", ID_COLOR_PURPLE + MENUITEM " ",ID_COLOR_TEAL + MENUITEM "ȸ", ID_COLOR_GRAY + MENUITEM "", ID_COLOR_SILVER + MENUITEM "", ID_COLOR_RED + MENUITEM "ӻ", ID_COLOR_LIME + MENUITEM "", ID_COLOR_YELLOW + MENUITEM "Ķ", ID_COLOR_BLUE + MENUITEM "ȫ", ID_COLOR_FUCHSIA + MENUITEM "", ID_COLOR_AQUA + MENUITEM "Ͼ", ID_COLOR_WHITE + MENUITEM "ڵ", ID_COLOR_AUTOMATIC END END @@ -155,7 +155,7 @@ END IDD_PARAFORMAT DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "ܶ " +CAPTION "ܶ " FONT 9, "MS Shell Dlg" BEGIN GROUPBOX "鿩", -1, 10, 10, 120, 68 @@ -173,7 +173,7 @@ END IDD_TABSTOPS DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "" +CAPTION "" FONT 9, "MS Shell Dlg" BEGIN GROUPBOX " ", -1, 10, 10, 120, 90 @@ -187,7 +187,7 @@ END IDD_FORMATOPTS DIALOG 0, 0, 280, 110 STYLE DS_SYSMODAL -Caption "" +CAPTION "" FONT 9, "MS Shell Dlg" BEGIN GROUPBOX " ѱ", -1, 10, 10, 130, 85 @@ -253,9 +253,7 @@ BEGIN STRING_PROMPT_SAVE_CHANGES, "'%s' ٲ ϰڽϱ?" STRING_SEARCH_FINISHED, " ã ." STRING_LOAD_RICHED_FAILED, "ġؽƮ ̺귯 ҷ ." - STRING_SAVE_LOSEFORMATTING, " ؽƮ ϱ⸦ ߽ϴ, " \ - "̰ Դϴ. " \ - " ϱ⸦ մϱ?" + STRING_SAVE_LOSEFORMATTING, " ؽƮ ϱ⸦ ߽ϴ, ̰ Դϴ. ϱ⸦ մϱ?" STRING_INVALID_NUMBER, "ùٸ " STRING_OLE_STORAGE_NOT_SUPPORTED, "OLE ʽϴ" STRING_WRITE_FAILED, " ϴ." diff --git a/reactos/base/applications/wordpad/Lt.rc b/reactos/base/applications/wordpad/Lt.rc index 82df7c893c1..5a7e3d829b0 100644 --- a/reactos/base/applications/wordpad/Lt.rc +++ b/reactos/base/applications/wordpad/Lt.rc @@ -81,9 +81,9 @@ BEGIN POPUP "F&ormatas" BEGIN MENUITEM "&Šriftas...", ID_FONTSETTINGS - MENUITEM "&Ženkleliai" ID_BULLET - MENUITEM "&Pastraipa..." ID_PARAFORMAT - MENUITEM "&Tabuliavimo žymės..." ID_TABSTOPS + MENUITEM "&Ženkleliai", ID_BULLET + MENUITEM "&Pastraipa...", ID_PARAFORMAT + MENUITEM "&Tabuliavimo žymės...", ID_TABSTOPS POPUP "&Fonas" BEGIN MENUITEM "&Sistemos\tCtrl+1", ID_BACK_1 @@ -92,7 +92,7 @@ BEGIN END POPUP "&Žinynas" BEGIN - MENUITEM "&Apie Wine Wordpad" ID_ABOUT + MENUITEM "&Apie Wine Wordpad", ID_ABOUT END END @@ -104,8 +104,8 @@ BEGIN MENUITEM "&Kopijuoti", ID_EDIT_COPY MENUITEM "Į&dėti", ID_EDIT_PASTE MENUITEM SEPARATOR - MENUITEM "&Ženkleliai" ID_BULLET - MENUITEM "&Pastraipa..." ID_PARAFORMAT + MENUITEM "&Ženkleliai", ID_BULLET + MENUITEM "&Pastraipa...",ID_PARAFORMAT END END @@ -113,23 +113,23 @@ IDM_COLOR_POPUP MENU BEGIN POPUP "" BEGIN - MENUITEM "Juoda" ID_COLOR_BLACK - MENUITEM "Kaštoninė" ID_COLOR_MAROON - MENUITEM "Žalia" ID_COLOR_GREEN - MENUITEM "Alyvinė" ID_COLOR_OLIVE - MENUITEM "Ultramarinas" ID_COLOR_NAVY - MENUITEM "Purpurinė" ID_COLOR_PURPLE - MENUITEM "Neutrali ciano" ID_COLOR_TEAL - MENUITEM "Pilka" ID_COLOR_GRAY - MENUITEM "Sidabrinė" ID_COLOR_SILVER - MENUITEM "Raudona" ID_COLOR_RED - MENUITEM "Gelsvai žalsva" ID_COLOR_LIME - MENUITEM "Geltona" ID_COLOR_YELLOW - MENUITEM "Mėlyna" ID_COLOR_BLUE - MENUITEM "Fuksija" ID_COLOR_FUCHSIA - MENUITEM "Žydra" ID_COLOR_AQUA - MENUITEM "Balta" ID_COLOR_WHITE - MENUITEM "Automatic" ID_COLOR_AUTOMATIC + MENUITEM "Juoda", ID_COLOR_BLACK + MENUITEM "Kaštoninė", ID_COLOR_MAROON + MENUITEM "Žalia", ID_COLOR_GREEN + MENUITEM "Alyvinė", ID_COLOR_OLIVE + MENUITEM "Ultramarinas", ID_COLOR_NAVY + MENUITEM "Purpurinė", ID_COLOR_PURPLE + MENUITEM "Neutrali ciano",ID_COLOR_TEAL + MENUITEM "Pilka", ID_COLOR_GRAY + MENUITEM "Sidabrinė", ID_COLOR_SILVER + MENUITEM "Raudona", ID_COLOR_RED + MENUITEM "Gelsvai žalsva",ID_COLOR_LIME + MENUITEM "Geltona", ID_COLOR_YELLOW + MENUITEM "Mėlyna", ID_COLOR_BLUE + MENUITEM "Fuksija", ID_COLOR_FUCHSIA + MENUITEM "Žydra", ID_COLOR_AQUA + MENUITEM "Balta", ID_COLOR_WHITE + MENUITEM "Automatic", ID_COLOR_AUTOMATIC END END @@ -157,7 +157,7 @@ END IDD_PARAFORMAT DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Pastraipos formatas" +CAPTION "Pastraipos formatas" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Įtrauka", -1, 10, 10, 120, 68 @@ -175,7 +175,7 @@ END IDD_TABSTOPS DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Tabuliavimo žymės" +CAPTION "Tabuliavimo žymės" FONT 8, "MS SHell DLg" BEGIN GROUPBOX "Tabuliavimo pozicija", -1, 10, 10, 120, 90 @@ -189,7 +189,7 @@ END IDD_FORMATOPTS DIALOG 0, 0, 280, 110 STYLE DS_SYSMODAL -Caption "" +CAPTION "" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Eilutės skaidymas", -1, 10, 10, 130, 85 @@ -262,9 +262,7 @@ BEGIN STRING_PROMPT_SAVE_CHANGES, "Išsaugoti „%s“ pakeitimus?" STRING_SEARCH_FINISHED, "Paieška dokumente baigta." STRING_LOAD_RICHED_FAILED, "Nepavyko įkelti RichEdit bibliotekos." - STRING_SAVE_LOSEFORMATTING, "Jūs pasirinkote išsaugoti paprasto teksto formatu, " \ - "todėl bus prarastas visas formatavimas. " \ - "Ar tikrai norite tai padaryti?" + STRING_SAVE_LOSEFORMATTING, "Jūs pasirinkote išsaugoti paprasto teksto formatu, todėl bus prarastas visas formatavimas. Ar tikrai norite tai padaryti?" STRING_INVALID_NUMBER, "Neteisingas skaičiaus formatas" STRING_OLE_STORAGE_NOT_SUPPORTED, "OLE saugyklos dokumentai yra nepalaikomi" STRING_WRITE_FAILED, "Nepavyko išsaugoti failo." diff --git a/reactos/base/applications/wordpad/Nl.rc b/reactos/base/applications/wordpad/Nl.rc index 17b30368e8f..a7e87005d0c 100644 --- a/reactos/base/applications/wordpad/Nl.rc +++ b/reactos/base/applications/wordpad/Nl.rc @@ -27,7 +27,7 @@ IDM_MAINMENU MENU BEGIN POPUP "&Bestand" BEGIN - MENUITEM "&Nieuw...\tCtrl+N" ID_FILE_NEW + MENUITEM "&Nieuw...\tCtrl+N", ID_FILE_NEW MENUITEM "&Openen...\tCtrl+O", ID_FILE_OPEN MENUITEM "Op&slaan\tCtrl+S", ID_FILE_SAVE MENUITEM "Ops&laan als...", ID_FILE_SAVEAS @@ -81,9 +81,9 @@ BEGIN POPUP "&Opmaak" BEGIN MENUITEM "&Lettertype...", ID_FONTSETTINGS - MENUITEM "&Bullet points" ID_BULLET - MENUITEM "&Paragraaf..." ID_PARAFORMAT - MENUITEM "&Tabs..." ID_TABSTOPS + MENUITEM "&Bullet points", ID_BULLET + MENUITEM "&Paragraaf...", ID_PARAFORMAT + MENUITEM "&Tabs...", ID_TABSTOPS POPUP "&Achtergrond" BEGIN MENUITEM "&Systeem\tCtrl+1", ID_BACK_1 @@ -92,7 +92,7 @@ BEGIN END POPUP "&Help" BEGIN - MENUITEM "&Over Wine Wordpad" ID_ABOUT + MENUITEM "&Over Wine Wordpad", ID_ABOUT END END @@ -104,7 +104,7 @@ BEGIN MENUITEM "&Kopiëren", ID_EDIT_COPY MENUITEM "&Plakken", ID_EDIT_PASTE MENUITEM SEPARATOR - MENUITEM "&Bullet points" ID_BULLET + MENUITEM "&Bullet points", ID_BULLET MENUITEM "&Paragraaf...", ID_PARAFORMAT END END @@ -113,23 +113,23 @@ IDM_COLOR_POPUP MENU BEGIN POPUP "" BEGIN - MENUITEM "Zwart" ID_COLOR_BLACK - MENUITEM "Kastanjebruin" ID_COLOR_MAROON - MENUITEM "Groen" ID_COLOR_GREEN - MENUITEM "Olijfgroen" ID_COLOR_OLIVE - MENUITEM "Marineblauw" ID_COLOR_NAVY - MENUITEM "Paars" ID_COLOR_PURPLE - MENUITEM "Groenblauw" ID_COLOR_TEAL - MENUITEM "Grijs" ID_COLOR_GRAY - MENUITEM "Zilver" ID_COLOR_SILVER - MENUITEM "Rood" ID_COLOR_RED - MENUITEM "Lichtgroen" ID_COLOR_LIME - MENUITEM "Geel" ID_COLOR_YELLOW - MENUITEM "Blauw" ID_COLOR_BLUE - MENUITEM "Fuchsiapaars" ID_COLOR_FUCHSIA - MENUITEM "Zeeblauw" ID_COLOR_AQUA - MENUITEM "Wit" ID_COLOR_WHITE - MENUITEM "Automatisch" ID_COLOR_AUTOMATIC + MENUITEM "Zwart", ID_COLOR_BLACK + MENUITEM "Kastanjebruin",ID_COLOR_MAROON + MENUITEM "Groen", ID_COLOR_GREEN + MENUITEM "Olijfgroen", ID_COLOR_OLIVE + MENUITEM "Marineblauw", ID_COLOR_NAVY + MENUITEM "Paars", ID_COLOR_PURPLE + MENUITEM "Groenblauw", ID_COLOR_TEAL + MENUITEM "Grijs", ID_COLOR_GRAY + MENUITEM "Zilver", ID_COLOR_SILVER + MENUITEM "Rood", ID_COLOR_RED + MENUITEM "Lichtgroen", ID_COLOR_LIME + MENUITEM "Geel", ID_COLOR_YELLOW + MENUITEM "Blauw", ID_COLOR_BLUE + MENUITEM "Fuchsiapaars", ID_COLOR_FUCHSIA + MENUITEM "Zeeblauw", ID_COLOR_AQUA + MENUITEM "Wit", ID_COLOR_WHITE + MENUITEM "Automatisch", ID_COLOR_AUTOMATIC END END @@ -157,7 +157,7 @@ END IDD_PARAFORMAT DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Paragraaf formaat" +CAPTION "Paragraaf formaat" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Inspringing", -1, 10, 10, 120, 68 @@ -175,7 +175,7 @@ END IDD_TABSTOPS DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Tabs" +CAPTION "Tabs" FONT 8, "MS SHell DLg" BEGIN GROUPBOX "Tab-einden", -1, 10, 10, 120, 90 @@ -189,7 +189,7 @@ END IDD_FORMATOPTS DIALOG 0, 0, 280, 110 STYLE DS_SYSMODAL -Caption "" +CAPTION "" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Regel afbreken", -1, 10, 10, 130, 85 @@ -254,9 +254,7 @@ BEGIN STRING_PROMPT_SAVE_CHANGES, "Wijzigingen opslaan naar '%s'?" STRING_SEARCH_FINISHED, "Doorzoeken van document voltooid." STRING_LOAD_RICHED_FAILED, "Laden van de RichEdit library is mislukt." - STRING_SAVE_LOSEFORMATTING, "U koos voor opslaan in gewoon tekst formaat, " \ - "waardoor alle formattering verloren zal gaan. " \ - "Weet u zeker dat u dit wilt?" + STRING_SAVE_LOSEFORMATTING, "U koos voor opslaan in gewoon tekst formaat, waardoor alle formattering verloren zal gaan. Weet u zeker dat u dit wilt?" STRING_INVALID_NUMBER, "Foutief nummerformaat" STRING_OLE_STORAGE_NOT_SUPPORTED, "OLE storage documenten worden niet ondersteund" STRING_WRITE_FAILED, "Bestand kon niet worden opgeslagen." diff --git a/reactos/base/applications/wordpad/No.rc b/reactos/base/applications/wordpad/No.rc index dca3f95db31..97f07403e97 100644 --- a/reactos/base/applications/wordpad/No.rc +++ b/reactos/base/applications/wordpad/No.rc @@ -80,9 +80,9 @@ BEGIN POPUP "F&ormat" BEGIN MENUITEM "&Skrift...", ID_FONTSETTINGS - MENUITEM "&Punktmerking" ID_BULLET - MENUITEM "&Avsnitt..." ID_PARAFORMAT - MENUITEM "&Tabulatorer..." ID_TABSTOPS + MENUITEM "&Punktmerking", ID_BULLET + MENUITEM "&Avsnitt...", ID_PARAFORMAT + MENUITEM "&Tabulatorer...", ID_TABSTOPS POPUP "&Bakgrunn" BEGIN MENUITEM "&System\tCtrl+1", ID_BACK_1 @@ -91,7 +91,7 @@ BEGIN END POPUP "&Hjelp" BEGIN - MENUITEM "&Om Wine Wordpad" ID_ABOUT + MENUITEM "&Om Wine Wordpad", ID_ABOUT END END @@ -99,12 +99,12 @@ IDM_POPUP MENU BEGIN POPUP "" BEGIN - MENUITEM "Klipp u&t" ID_EDIT_CUT - MENUITEM "&Kopier" ID_EDIT_COPY - MENUITEM "&Lim inn" ID_EDIT_PASTE + MENUITEM "Klipp u&t", ID_EDIT_CUT + MENUITEM "&Kopier", ID_EDIT_COPY + MENUITEM "&Lim inn", ID_EDIT_PASTE MENUITEM SEPARATOR - MENUITEM "&Punktmerking" ID_BULLET - MENUITEM "&Avsnitt..." ID_PARAFORMAT + MENUITEM "&Punktmerking", ID_BULLET + MENUITEM "&Avsnitt...", ID_PARAFORMAT END END @@ -112,23 +112,23 @@ IDM_COLOR_POPUP MENU BEGIN POPUP "" BEGIN - MENUITEM "Svart" ID_COLOR_BLACK - MENUITEM "Rødbrun" ID_COLOR_MAROON - MENUITEM "Grønn" ID_COLOR_GREEN - MENUITEM "Oliven" ID_COLOR_OLIVE - MENUITEM "Marineblå" ID_COLOR_NAVY - MENUITEM "Purpur" ID_COLOR_PURPLE - MENUITEM "Blågrønn" ID_COLOR_TEAL - MENUITEM "Grå" ID_COLOR_GRAY - MENUITEM "Sølv" ID_COLOR_SILVER - MENUITEM "Rød" ID_COLOR_RED - MENUITEM "Lime-grønn" ID_COLOR_LIME - MENUITEM "Gul" ID_COLOR_YELLOW - MENUITEM "Blå" ID_COLOR_BLUE - MENUITEM "Fuchsia" ID_COLOR_FUCHSIA - MENUITEM "Turkis" ID_COLOR_AQUA - MENUITEM "Hvit" ID_COLOR_WHITE - MENUITEM "Automatisk" ID_COLOR_AUTOMATIC + MENUITEM "Svart", ID_COLOR_BLACK + MENUITEM "Rødbrun", ID_COLOR_MAROON + MENUITEM "Grønn", ID_COLOR_GREEN + MENUITEM "Oliven", ID_COLOR_OLIVE + MENUITEM "Marineblå", ID_COLOR_NAVY + MENUITEM "Purpur", ID_COLOR_PURPLE + MENUITEM "Blågrønn", ID_COLOR_TEAL + MENUITEM "Grå", ID_COLOR_GRAY + MENUITEM "Sølv", ID_COLOR_SILVER + MENUITEM "Rød", ID_COLOR_RED + MENUITEM "Lime-grønn",ID_COLOR_LIME + MENUITEM "Gul", ID_COLOR_YELLOW + MENUITEM "Blå", ID_COLOR_BLUE + MENUITEM "Fuchsia", ID_COLOR_FUCHSIA + MENUITEM "Turkis", ID_COLOR_AQUA + MENUITEM "Hvit", ID_COLOR_WHITE + MENUITEM "Automatisk",ID_COLOR_AUTOMATIC END END @@ -156,7 +156,7 @@ END IDD_PARAFORMAT DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Formater avsnitt" +CAPTION "Formater avsnitt" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Innrykk", -1, 10, 10, 120, 68 @@ -174,7 +174,7 @@ END IDD_TABSTOPS DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Tabulatorer" +CAPTION "Tabulatorer" FONT 8, "MS SHell DLg" BEGIN GROUPBOX "Tabulatorstopp", -1, 10, 10, 120, 90 @@ -188,7 +188,7 @@ END IDD_FORMATOPTS DIALOG 0, 0, 280, 110 STYLE DS_SYSMODAL -Caption "" +CAPTION "" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Linjebryting", -1, 10, 10, 130, 85 @@ -261,9 +261,7 @@ BEGIN STRING_PROMPT_SAVE_CHANGES, "Lagre endringer i «%s»?" STRING_SEARCH_FINISHED, "Ferdig med å søke i dokumentet." STRING_LOAD_RICHED_FAILED, "Klarte ikke laste RichEdit-biblioteket." - STRING_SAVE_LOSEFORMATTING, "Du har valgt å lagre i rent tekstformat, noe som " \ - "vil føre til at all formatering går tapt. Er du " \ - "sikker på at du vil fortsette?" + STRING_SAVE_LOSEFORMATTING, "Du har valgt å lagre i rent tekstformat, noe som vil føre til at all formatering går tapt. Er du sikker på at du vil fortsette?" STRING_INVALID_NUMBER, "Ugyldig tallformat" STRING_OLE_STORAGE_NOT_SUPPORTED, "OLE storage-dokumenter støttes ikke" STRING_WRITE_FAILED, "Klarte ikke lagre filen." diff --git a/reactos/base/applications/wordpad/Pl.rc b/reactos/base/applications/wordpad/Pl.rc index c2a4214f971..2cb0700176c 100644 --- a/reactos/base/applications/wordpad/Pl.rc +++ b/reactos/base/applications/wordpad/Pl.rc @@ -80,9 +80,9 @@ BEGIN POPUP "For&mat" BEGIN MENUITEM "&Czcionka...", ID_FONTSETTINGS - MENUITEM "&Wypunktowanie" ID_BULLET - MENUITEM "&Akapit..." ID_PARAFORMAT - MENUITEM "&Tabulatory..." ID_TABSTOPS + MENUITEM "&Wypunktowanie", ID_BULLET + MENUITEM "&Akapit...", ID_PARAFORMAT + MENUITEM "&Tabulatory...", ID_TABSTOPS POPUP "T&o" BEGIN MENUITEM "&System\tCtrl+1", ID_BACK_1 @@ -91,7 +91,7 @@ BEGIN END POPUP "Pomo&c" BEGIN - MENUITEM "Wine Wordpad - &informacje" ID_ABOUT + MENUITEM "Wine Wordpad - &informacje", ID_ABOUT END END @@ -103,8 +103,8 @@ BEGIN MENUITEM "&Kopiuj", ID_EDIT_COPY MENUITEM "Wkl&ej", ID_EDIT_PASTE MENUITEM SEPARATOR - MENUITEM "&Wypunktowanie" ID_BULLET - MENUITEM "&Akapit..." ID_PARAFORMAT + MENUITEM "&Wypunktowanie", ID_BULLET + MENUITEM "&Akapit...", ID_PARAFORMAT END END @@ -112,23 +112,23 @@ IDM_COLOR_POPUP MENU BEGIN POPUP "" BEGIN - MENUITEM "Czarny" ID_COLOR_BLACK - MENUITEM "Kasztanowy" ID_COLOR_MAROON - MENUITEM "Zielony" ID_COLOR_GREEN - MENUITEM "Oliwkowy" ID_COLOR_OLIVE - MENUITEM "Granatowy" ID_COLOR_NAVY - MENUITEM "Purpurowy" ID_COLOR_PURPLE - MENUITEM "Zielonomodry" ID_COLOR_TEAL - MENUITEM "Szary" ID_COLOR_GRAY - MENUITEM "Srebrny" ID_COLOR_SILVER - MENUITEM "Czerwony" ID_COLOR_RED - MENUITEM "Limonowy" ID_COLOR_LIME - MENUITEM "ty" ID_COLOR_YELLOW - MENUITEM "Niebieski" ID_COLOR_BLUE - MENUITEM "Fuksja" ID_COLOR_FUCHSIA - MENUITEM "Akwamaryna" ID_COLOR_AQUA - MENUITEM "Biay" ID_COLOR_WHITE - MENUITEM "Automatycznie" ID_COLOR_AUTOMATIC + MENUITEM "Czarny", ID_COLOR_BLACK + MENUITEM "Kasztanowy", ID_COLOR_MAROON + MENUITEM "Zielony", ID_COLOR_GREEN + MENUITEM "Oliwkowy", ID_COLOR_OLIVE + MENUITEM "Granatowy", ID_COLOR_NAVY + MENUITEM "Purpurowy", ID_COLOR_PURPLE + MENUITEM "Zielonomodry",ID_COLOR_TEAL + MENUITEM "Szary", ID_COLOR_GRAY + MENUITEM "Srebrny", ID_COLOR_SILVER + MENUITEM "Czerwony", ID_COLOR_RED + MENUITEM "Limonowy", ID_COLOR_LIME + MENUITEM "ty", ID_COLOR_YELLOW + MENUITEM "Niebieski", ID_COLOR_BLUE + MENUITEM "Fuksja", ID_COLOR_FUCHSIA + MENUITEM "Akwamaryna", ID_COLOR_AQUA + MENUITEM "Biay", ID_COLOR_WHITE + MENUITEM "Automatycznie", ID_COLOR_AUTOMATIC END END @@ -156,7 +156,7 @@ END IDD_PARAFORMAT DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Format akapitu" +CAPTION "Format akapitu" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Wcicia", -1, 10, 10, 120, 68 @@ -174,7 +174,7 @@ END IDD_TABSTOPS DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Tabulatory" +CAPTION "Tabulatory" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Pozycje tabulatorw", -1, 10, 10, 120, 90 @@ -188,7 +188,7 @@ END IDD_FORMATOPTS DIALOG 0, 0, 280, 110 STYLE DS_SYSMODAL -Caption "" +CAPTION "" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Zawijanie wierszy", -1, 10, 10, 130, 85 @@ -261,9 +261,7 @@ BEGIN STRING_PROMPT_SAVE_CHANGES, "Zapisa zmiany w pliku '%s'?" STRING_SEARCH_FINISHED, "Zakoczono przeszukiwanie dokumentu." STRING_LOAD_RICHED_FAILED, "Nie udao si zaadowa biblioteki systemowej RichEdit." - STRING_SAVE_LOSEFORMATTING, "Wybrano zapisanie dokumentu jako zwyky tekst, " \ - "w wyniku czego formatowanie zostanie utracone. " \ - "Czy na pewno chcesz to zrobi?" + STRING_SAVE_LOSEFORMATTING, "Wybrano zapisanie dokumentu jako zwyky tekst, w wyniku czego formatowanie zostanie utracone. Czy na pewno chcesz to zrobi?" STRING_INVALID_NUMBER, "Zy format liczby" STRING_OLE_STORAGE_NOT_SUPPORTED, "Dokumenty typu OLE storage nie s obsugiwane" STRING_WRITE_FAILED, "Nie mona byo zapisa pliku." diff --git a/reactos/base/applications/wordpad/Pt.rc b/reactos/base/applications/wordpad/Pt.rc index ffb5c567a74..73dc6ba97ac 100644 --- a/reactos/base/applications/wordpad/Pt.rc +++ b/reactos/base/applications/wordpad/Pt.rc @@ -83,9 +83,9 @@ BEGIN POPUP "F&ormatar" BEGIN MENUITEM "&Fonte...", ID_FONTSETTINGS - MENUITEM "&Marcadores" ID_BULLET - MENUITEM "&Parágrafo..." ID_PARAFORMAT - MENUITEM "T&abulação..." ID_TABSTOPS + MENUITEM "&Marcadores", ID_BULLET + MENUITEM "&Parágrafo...", ID_PARAFORMAT + MENUITEM "T&abulação...", ID_TABSTOPS POPUP "&Fundo" BEGIN MENUITEM "&Sistema\tCtrl+1", ID_BACK_1 @@ -94,7 +94,7 @@ BEGIN END POPUP "&Ajuda" BEGIN - MENUITEM "&Sobre Wine Wordpad" ID_ABOUT + MENUITEM "&Sobre Wine Wordpad", ID_ABOUT END END @@ -158,9 +158,9 @@ BEGIN POPUP "F&ormato" BEGIN MENUITEM "&Tipo de Letra...", ID_FONTSETTINGS - MENUITEM "&Lista de marcas" ID_BULLET - MENUITEM "&Parágrafo..." ID_PARAFORMAT - MENUITEM "T&abulações..." ID_TABSTOPS + MENUITEM "&Lista de marcas", ID_BULLET + MENUITEM "&Parágrafo...", ID_PARAFORMAT + MENUITEM "T&abulações...", ID_TABSTOPS POPUP "&Fundo" BEGIN MENUITEM "&Sistema\tCtrl+1", ID_BACK_1 @@ -169,7 +169,7 @@ BEGIN END POPUP "&Ajuda" BEGIN - MENUITEM "&Sobre Wine Wordpad" ID_ABOUT + MENUITEM "&Sobre Wine Wordpad", ID_ABOUT END END @@ -184,8 +184,8 @@ BEGIN MENUITEM "C&opiar", ID_EDIT_COPY MENUITEM "Co&lar", ID_EDIT_PASTE MENUITEM SEPARATOR - MENUITEM "&Marcadores" ID_BULLET - MENUITEM "&Parágrafo..." ID_PARAFORMAT + MENUITEM "&Marcadores", ID_BULLET + MENUITEM "&Parágrafo...", ID_PARAFORMAT END END @@ -199,8 +199,8 @@ BEGIN MENUITEM "C&opiar", ID_EDIT_COPY MENUITEM "Co&lar", ID_EDIT_PASTE MENUITEM SEPARATOR - MENUITEM "&Lista de marcas" ID_BULLET - MENUITEM "&Parágrafo..." ID_PARAFORMAT + MENUITEM "&Lista de marcas", ID_BULLET + MENUITEM "&Parágrafo...", ID_PARAFORMAT END END @@ -211,23 +211,23 @@ IDM_COLOR_POPUP MENU BEGIN POPUP "" BEGIN - MENUITEM "Preto" ID_COLOR_BLACK - MENUITEM "Castanho" ID_COLOR_MAROON - MENUITEM "Verde" ID_COLOR_GREEN - MENUITEM "Verde-oliva" ID_COLOR_OLIVE - MENUITEM "Azul-marinho" ID_COLOR_NAVY - MENUITEM "Roxo" ID_COLOR_PURPLE - MENUITEM "Azul-petróleo" ID_COLOR_TEAL - MENUITEM "Cinza" ID_COLOR_GRAY - MENUITEM "Prateado" ID_COLOR_SILVER - MENUITEM "Vermelho" ID_COLOR_RED - MENUITEM "Verde-limão" ID_COLOR_LIME - MENUITEM "Amarelo" ID_COLOR_YELLOW - MENUITEM "Azul" ID_COLOR_BLUE - MENUITEM "Fúcsia" ID_COLOR_FUCHSIA - MENUITEM "Azul-piscina" ID_COLOR_AQUA - MENUITEM "Branco" ID_COLOR_WHITE - MENUITEM "Automático" ID_COLOR_AUTOMATIC + MENUITEM "Preto", ID_COLOR_BLACK + MENUITEM "Castanho", ID_COLOR_MAROON + MENUITEM "Verde", ID_COLOR_GREEN + MENUITEM "Verde-oliva", ID_COLOR_OLIVE + MENUITEM "Azul-marinho", ID_COLOR_NAVY + MENUITEM "Roxo", ID_COLOR_PURPLE + MENUITEM "Azul-petróleo",ID_COLOR_TEAL + MENUITEM "Cinza", ID_COLOR_GRAY + MENUITEM "Prateado", ID_COLOR_SILVER + MENUITEM "Vermelho", ID_COLOR_RED + MENUITEM "Verde-limão", ID_COLOR_LIME + MENUITEM "Amarelo", ID_COLOR_YELLOW + MENUITEM "Azul", ID_COLOR_BLUE + MENUITEM "Fúcsia", ID_COLOR_FUCHSIA + MENUITEM "Azul-piscina", ID_COLOR_AQUA + MENUITEM "Branco", ID_COLOR_WHITE + MENUITEM "Automático", ID_COLOR_AUTOMATIC END END @@ -255,7 +255,7 @@ END IDD_PARAFORMAT DIALOG 30, 20, 220, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Parágrafo" +CAPTION "Parágrafo" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Identação", -1, 10, 10, 140, 68 @@ -273,7 +273,7 @@ END IDD_TABSTOPS DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Tabulações" +CAPTION "Tabulações" FONT 8, "MS SHell DLg" BEGIN GROUPBOX "Marca de tabulação", -1, 10, 10, 120, 90 @@ -287,7 +287,7 @@ END IDD_FORMATOPTS DIALOG 0, 0, 280, 110 STYLE DS_SYSMODAL -Caption "" +CAPTION "" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Moldar o texto", -1, 10, 10, 130, 85 @@ -375,9 +375,7 @@ BEGIN STRING_PROMPT_SAVE_CHANGES, "Salvar as alterações de '%s'?" STRING_SEARCH_FINISHED, "Acabou a pesquisa do documento." STRING_LOAD_RICHED_FAILED, "Falha ao carregar a biblioteca RichEdit." - STRING_SAVE_LOSEFORMATTING, "Foi escolhido salvar em formato de texto simples, " \ - "o que vai anular todas as formatações. " \ - "Tem a certeza que deseja fazer isto?" + STRING_SAVE_LOSEFORMATTING, "Foi escolhido salvar em formato de texto simples, o que vai anular todas as formatações. Tem a certeza que deseja fazer isto?" STRING_INVALID_NUMBER, "Formato de número inválido" STRING_OLE_STORAGE_NOT_SUPPORTED, "Documentos OLE não são suportados" STRING_WRITE_FAILED, "Não foi possível salvar o arquivo." @@ -396,9 +394,7 @@ BEGIN STRING_PROMPT_SAVE_CHANGES, "Guardar alterações a '%s'?" STRING_SEARCH_FINISHED, "Acabou a pesquisa do documento." STRING_LOAD_RICHED_FAILED, "Falhou o carregamento da biblioteca RichEdit." - STRING_SAVE_LOSEFORMATTING, "Escolheu guardar em formato de texto simples, " \ - "o que vai anular todas as formatações. " \ - "Tem a certeza que quer fazer isto?" + STRING_SAVE_LOSEFORMATTING, "Escolheu guardar em formato de texto simples, o que vai anular todas as formatações. Tem a certeza que quer fazer isto?" STRING_INVALID_NUMBER, "Formato de número inválido" STRING_OLE_STORAGE_NOT_SUPPORTED, "Documentos OLE não são suportados" STRING_WRITE_FAILED, "Não foi possível guardar o ficheiro." diff --git a/reactos/base/applications/wordpad/Ro.rc b/reactos/base/applications/wordpad/Ro.rc index 4db8a95e9a1..8f310b928b8 100644 --- a/reactos/base/applications/wordpad/Ro.rc +++ b/reactos/base/applications/wordpad/Ro.rc @@ -82,9 +82,9 @@ BEGIN POPUP "F&ormat" BEGIN MENUITEM "&Font...", ID_FONTSETTINGS - MENUITEM "Punct &bulină" ID_BULLET - MENUITEM "&Paragraf..." ID_PARAFORMAT - MENUITEM "&Taburi..." ID_TABSTOPS + MENUITEM "Punct &bulină", ID_BULLET + MENUITEM "&Paragraf...", ID_PARAFORMAT + MENUITEM "&Taburi...", ID_TABSTOPS POPUP "Fun&dal" BEGIN MENUITEM "&Sistem\tCtrl+1", ID_BACK_1 @@ -93,7 +93,7 @@ BEGIN END POPUP "&Ajutor" BEGIN - MENUITEM "&Despre Wine Wordpad" ID_ABOUT + MENUITEM "&Despre Wine Wordpad", ID_ABOUT END END @@ -105,8 +105,8 @@ BEGIN MENUITEM "&Copiază", ID_EDIT_COPY MENUITEM "&Lipește", ID_EDIT_PASTE MENUITEM SEPARATOR - MENUITEM "Punct &bulină" ID_BULLET - MENUITEM "&Paragraf..." ID_PARAFORMAT + MENUITEM "Punct &bulină", ID_BULLET + MENUITEM "&Paragraf...", ID_PARAFORMAT END END @@ -117,20 +117,20 @@ BEGIN MENUITEM "Negru", ID_COLOR_BLACK MENUITEM "Maro", ID_COLOR_MAROON MENUITEM "Verde", ID_COLOR_GREEN - MENUITEM "Oliv" ID_COLOR_OLIVE - MENUITEM "Bleumarin" ID_COLOR_NAVY - MENUITEM "Violet" ID_COLOR_PURPLE - MENUITEM "Verde-albăstrui" ID_COLOR_TEAL - MENUITEM "Gri" ID_COLOR_GRAY - MENUITEM "Argintiu" ID_COLOR_SILVER - MENUITEM "Roșu" ID_COLOR_RED - MENUITEM "Lămâie verde" ID_COLOR_LIME - MENUITEM "Galben" ID_COLOR_YELLOW - MENUITEM "Albastru" ID_COLOR_BLUE - MENUITEM "Fuchsia" ID_COLOR_FUCHSIA - MENUITEM "Culoarea apei" ID_COLOR_AQUA - MENUITEM "Alb" ID_COLOR_WHITE - MENUITEM "Automatic" ID_COLOR_AUTOMATIC + MENUITEM "Oliv", ID_COLOR_OLIVE + MENUITEM "Bleumarin", ID_COLOR_NAVY + MENUITEM "Violet", ID_COLOR_PURPLE + MENUITEM "Verde-albăstrui", ID_COLOR_TEAL + MENUITEM "Gri", ID_COLOR_GRAY + MENUITEM "Argintiu", ID_COLOR_SILVER + MENUITEM "Roșu", ID_COLOR_RED + MENUITEM "Lămâie verde", ID_COLOR_LIME + MENUITEM "Galben", ID_COLOR_YELLOW + MENUITEM "Albastru", ID_COLOR_BLUE + MENUITEM "Fuchsia", ID_COLOR_FUCHSIA + MENUITEM "Culoarea apei", ID_COLOR_AQUA + MENUITEM "Alb", ID_COLOR_WHITE + MENUITEM "Automatic", ID_COLOR_AUTOMATIC END END @@ -158,7 +158,7 @@ END IDD_PARAFORMAT DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Format paragraf" +CAPTION "Format paragraf" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Indentare", -1, 10, 10, 120, 68 @@ -176,7 +176,7 @@ END IDD_TABSTOPS DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Taburi" +CAPTION "Taburi" FONT 8, "MS SHell DLg" BEGIN GROUPBOX "Spațiere tab", -1, 10, 10, 120, 90 @@ -190,7 +190,7 @@ END IDD_FORMATOPTS DIALOG 0, 0, 280, 110 STYLE DS_SYSMODAL -Caption "" +CAPTION "" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Despărțire rânduri", -1, 10, 10, 130, 85 diff --git a/reactos/base/applications/wordpad/Ru.rc b/reactos/base/applications/wordpad/Ru.rc index 4eb0819cee1..e31d714e4f3 100644 --- a/reactos/base/applications/wordpad/Ru.rc +++ b/reactos/base/applications/wordpad/Ru.rc @@ -81,9 +81,9 @@ BEGIN POPUP "Фор&мат" BEGIN MENUITEM "&Шрифт...", ID_FONTSETTINGS - MENUITEM "&Маркер" ID_BULLET - MENUITEM "&Абзац..." ID_PARAFORMAT - MENUITEM "&Табуляция..." ID_TABSTOPS + MENUITEM "&Маркер", ID_BULLET + MENUITEM "&Абзац...", ID_PARAFORMAT + MENUITEM "&Табуляция...", ID_TABSTOPS POPUP "&Фон" BEGIN MENUITEM "&Системный\tCtrl+1", ID_BACK_1 @@ -92,7 +92,7 @@ BEGIN END POPUP "&Справка" BEGIN - MENUITEM "&О Wine Wordpad" ID_ABOUT + MENUITEM "&О Wine Wordpad", ID_ABOUT END END @@ -104,8 +104,8 @@ BEGIN MENUITEM "&Копировать\tCtrl+C", ID_EDIT_COPY MENUITEM "Вст&авить", ID_EDIT_PASTE MENUITEM SEPARATOR - MENUITEM "&Маркер" ID_BULLET - MENUITEM "&Абзац..." ID_PARAFORMAT + MENUITEM "&Маркер", ID_BULLET + MENUITEM "&Абзац...", ID_PARAFORMAT END END @@ -113,23 +113,23 @@ IDM_COLOR_POPUP MENU BEGIN POPUP "" BEGIN - MENUITEM "Чёрный" ID_COLOR_BLACK - MENUITEM "Тёмно-бордовый" ID_COLOR_MAROON - MENUITEM "Зелёный" ID_COLOR_GREEN - MENUITEM "Оливковый" ID_COLOR_OLIVE - MENUITEM "Тёмно-синий" ID_COLOR_NAVY - MENUITEM "Пурпурный" ID_COLOR_PURPLE - MENUITEM "Морской волны" ID_COLOR_TEAL - MENUITEM "Серый" ID_COLOR_GRAY - MENUITEM "Серебряный" ID_COLOR_SILVER - MENUITEM "Красный" ID_COLOR_RED - MENUITEM "Лимонный" ID_COLOR_LIME - MENUITEM "Жёлтый" ID_COLOR_YELLOW - MENUITEM "Синий" ID_COLOR_BLUE - MENUITEM "Ярко-розовый" ID_COLOR_FUCHSIA - MENUITEM "Голубой" ID_COLOR_AQUA - MENUITEM "Белый" ID_COLOR_WHITE - MENUITEM "Автоматически" ID_COLOR_AUTOMATIC + MENUITEM "Чёрный", ID_COLOR_BLACK + MENUITEM "Тёмно-бордовый",ID_COLOR_MAROON + MENUITEM "Зелёный", ID_COLOR_GREEN + MENUITEM "Оливковый", ID_COLOR_OLIVE + MENUITEM "Тёмно-синий", ID_COLOR_NAVY + MENUITEM "Пурпурный", ID_COLOR_PURPLE + MENUITEM "Морской волны", ID_COLOR_TEAL + MENUITEM "Серый", ID_COLOR_GRAY + MENUITEM "Серебряный", ID_COLOR_SILVER + MENUITEM "Красный", ID_COLOR_RED + MENUITEM "Лимонный", ID_COLOR_LIME + MENUITEM "Жёлтый", ID_COLOR_YELLOW + MENUITEM "Синий", ID_COLOR_BLUE + MENUITEM "Ярко-розовый", ID_COLOR_FUCHSIA + MENUITEM "Голубой", ID_COLOR_AQUA + MENUITEM "Белый", ID_COLOR_WHITE + MENUITEM "Автоматически", ID_COLOR_AUTOMATIC END END @@ -157,7 +157,7 @@ END IDD_PARAFORMAT DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Абзац" +CAPTION "Абзац" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Отступ", -1, 10, 10, 120, 68 @@ -175,7 +175,7 @@ END IDD_TABSTOPS DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Табуляция" +CAPTION "Табуляция" FONT 8, "MS SHell DLg" BEGIN GROUPBOX "Позиции табуляции", -1, 10, 10, 120, 90 @@ -189,7 +189,7 @@ END IDD_FORMATOPTS DIALOG 0, 0, 280, 110 STYLE DS_SYSMODAL -Caption "" +CAPTION "" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Перенос по словам", -1, 10, 10, 130, 85 @@ -262,9 +262,7 @@ BEGIN STRING_PROMPT_SAVE_CHANGES, "Сохранить изменения в '%s'?" STRING_SEARCH_FINISHED, "Поиск в документе завершен." STRING_LOAD_RICHED_FAILED, "Ошибка загрузки библиотеки RichEdit." - STRING_SAVE_LOSEFORMATTING, "Сохранение документа в виде неформатированного текста " \ - "приведёт к потере форматирования. Подтверждаете выполнение" \ - "этой операции?" + STRING_SAVE_LOSEFORMATTING, "Сохранение документа в виде неформатированного текста приведёт к потере форматирования. Подтверждаете выполнение этой операции?" STRING_INVALID_NUMBER, "Неправильный числовой формат." STRING_OLE_STORAGE_NOT_SUPPORTED, "OLE storage документы не поддерживаются." STRING_WRITE_FAILED, "Невозможно сохранить файл." diff --git a/reactos/base/applications/wordpad/Si.rc b/reactos/base/applications/wordpad/Si.rc index 11caf33986c..db9d84cee1f 100644 --- a/reactos/base/applications/wordpad/Si.rc +++ b/reactos/base/applications/wordpad/Si.rc @@ -80,9 +80,9 @@ BEGIN POPUP "O&blika" BEGIN MENUITEM "&Pisava ...", ID_FONTSETTINGS - MENUITEM "&Vrstične oznake" ID_BULLET - MENUITEM "O&dstavek ..." ID_PARAFORMAT - MENUITEM "&Tabulator ..." ID_TABSTOPS + MENUITEM "&Vrstične oznake", ID_BULLET + MENUITEM "O&dstavek ...", ID_PARAFORMAT + MENUITEM "&Tabulator ...", ID_TABSTOPS POPUP "Ozad&je" BEGIN MENUITEM "&Sistemsko\tCtrl+1", ID_BACK_1 @@ -91,7 +91,7 @@ BEGIN END POPUP "&Pomoč" BEGIN - MENUITEM "&O Wine Wordpadu" ID_ABOUT + MENUITEM "&O Wine Wordpadu", ID_ABOUT END END @@ -103,8 +103,8 @@ BEGIN MENUITEM "&Kopiraj", ID_EDIT_COPY MENUITEM "&Prilepi", ID_EDIT_PASTE MENUITEM SEPARATOR - MENUITEM "&Vrstične oznake" ID_BULLET - MENUITEM "O&dstavek ..." ID_PARAFORMAT + MENUITEM "&Vrstične oznake", ID_BULLET + MENUITEM "O&dstavek ...", ID_PARAFORMAT END END @@ -112,23 +112,23 @@ IDM_COLOR_POPUP MENU BEGIN POPUP "" BEGIN - MENUITEM "Črna" ID_COLOR_BLACK - MENUITEM "Kostanjeva" ID_COLOR_MAROON - MENUITEM "Zelena" ID_COLOR_GREEN - MENUITEM "Olivna" ID_COLOR_OLIVE - MENUITEM "Mornariška" ID_COLOR_NAVY - MENUITEM "Vijolična" ID_COLOR_PURPLE - MENUITEM "Zelenomodra" ID_COLOR_TEAL - MENUITEM "Siva" ID_COLOR_GRAY - MENUITEM "Srebrna" ID_COLOR_SILVER - MENUITEM "Rdeča" ID_COLOR_RED - MENUITEM "Citronska" ID_COLOR_LIME - MENUITEM "Rumena" ID_COLOR_YELLOW - MENUITEM "Modra" ID_COLOR_BLUE - MENUITEM "Roza" ID_COLOR_FUCHSIA - MENUITEM "Akvamarin" ID_COLOR_AQUA - MENUITEM "Bela" ID_COLOR_WHITE - MENUITEM "Automatic" ID_COLOR_AUTOMATIC + MENUITEM "Črna", ID_COLOR_BLACK + MENUITEM "Kostanjeva", ID_COLOR_MAROON + MENUITEM "Zelena", ID_COLOR_GREEN + MENUITEM "Olivna", ID_COLOR_OLIVE + MENUITEM "Mornariška", ID_COLOR_NAVY + MENUITEM "Vijolična", ID_COLOR_PURPLE + MENUITEM "Zelenomodra",ID_COLOR_TEAL + MENUITEM "Siva", ID_COLOR_GRAY + MENUITEM "Srebrna", ID_COLOR_SILVER + MENUITEM "Rdeča", ID_COLOR_RED + MENUITEM "Citronska", ID_COLOR_LIME + MENUITEM "Rumena", ID_COLOR_YELLOW + MENUITEM "Modra", ID_COLOR_BLUE + MENUITEM "Roza", ID_COLOR_FUCHSIA + MENUITEM "Akvamarin", ID_COLOR_AQUA + MENUITEM "Bela", ID_COLOR_WHITE + MENUITEM "Automatic", ID_COLOR_AUTOMATIC END END @@ -156,7 +156,7 @@ END IDD_PARAFORMAT DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Oblika odstavka" +CAPTION "Oblika odstavka" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Zamiki", -1, 10, 10, 120, 68 @@ -174,7 +174,7 @@ END IDD_TABSTOPS DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Tabulatorji" +CAPTION "Tabulatorji" FONT 8, "MS SHell DLg" BEGIN GROUPBOX "Položaji tabulatorja", -1, 10, 10, 120, 90 @@ -188,7 +188,7 @@ END IDD_FORMATOPTS DIALOG 0, 0, 280, 110 STYLE DS_SYSMODAL -Caption "" +CAPTION "" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Prelom vrstic", -1, 10, 10, 130, 85 @@ -261,10 +261,7 @@ BEGIN STRING_PROMPT_SAVE_CHANGES, "Ali naj shranim spremembe v '%s'?" STRING_SEARCH_FINISHED, "Konec iskanja po dokumentu." STRING_LOAD_RICHED_FAILED, "Napaka pri nalaganju RichEdit knjižnice." - STRING_SAVE_LOSEFORMATTING, "Izbrali ste shranjevanje v čisti besedilni " \ - "obliki, kar bo povzročilo izgubo oblikovanja. " \ - "Ali ste prepričani, da želite shraniti " \ - "dokument v tej obliki?" + STRING_SAVE_LOSEFORMATTING, "Izbrali ste shranjevanje v čisti besedilni obliki, kar bo povzročilo izgubo oblikovanja. Ali ste prepričani, da želite shraniti dokument v tej obliki?" STRING_INVALID_NUMBER, "Neveljavna oblika števila" STRING_OLE_STORAGE_NOT_SUPPORTED, "Dokumenti z OLE predmeti niso podprti" STRING_WRITE_FAILED, "Napaka pri shranjevanju datoteke." diff --git a/reactos/base/applications/wordpad/Sv.rc b/reactos/base/applications/wordpad/Sv.rc index acf4f94eeb9..e9d967677d8 100644 --- a/reactos/base/applications/wordpad/Sv.rc +++ b/reactos/base/applications/wordpad/Sv.rc @@ -80,9 +80,9 @@ BEGIN POPUP "F&ormat" BEGIN MENUITEM "T&ecken...", ID_FONTSETTINGS - MENUITEM "&Punktuppställning" ID_BULLET - MENUITEM "&Stycke..." ID_PARAFORMAT - MENUITEM "&Tabulatorer..." ID_TABSTOPS + MENUITEM "&Punktuppställning", ID_BULLET + MENUITEM "&Stycke...", ID_PARAFORMAT + MENUITEM "&Tabulatorer...", ID_TABSTOPS POPUP "&Bakgrund" BEGIN MENUITEM "&System\tCtrl+1", ID_BACK_1 @@ -91,7 +91,7 @@ BEGIN END POPUP "&Hjälp" BEGIN - MENUITEM "&Om Wine Wordpad" ID_ABOUT + MENUITEM "&Om Wine Wordpad", ID_ABOUT END END @@ -103,8 +103,8 @@ BEGIN MENUITEM "&Kopiera", ID_EDIT_COPY MENUITEM "Klistra &in", ID_EDIT_PASTE MENUITEM SEPARATOR - MENUITEM "&Punktuppställning" ID_BULLET - MENUITEM "&Stycke..." ID_PARAFORMAT + MENUITEM "&Punktuppställning", ID_BULLET + MENUITEM "&Stycke...", ID_PARAFORMAT END END @@ -112,23 +112,23 @@ IDM_COLOR_POPUP MENU BEGIN POPUP "" BEGIN - MENUITEM "Svart" ID_COLOR_BLACK - MENUITEM "Rödbrun" ID_COLOR_MAROON - MENUITEM "Grön" ID_COLOR_GREEN - MENUITEM "Oliv" ID_COLOR_OLIVE - MENUITEM "Navy" ID_COLOR_NAVY - MENUITEM "Lila" ID_COLOR_PURPLE - MENUITEM "Teal" ID_COLOR_TEAL - MENUITEM "Grå" ID_COLOR_GRAY - MENUITEM "Silver" ID_COLOR_SILVER - MENUITEM "Röd" ID_COLOR_RED - MENUITEM "Lime" ID_COLOR_LIME - MENUITEM "Gul" ID_COLOR_YELLOW - MENUITEM "Blå" ID_COLOR_BLUE - MENUITEM "Fuchsia" ID_COLOR_FUCHSIA - MENUITEM "Aqua" ID_COLOR_AQUA - MENUITEM "Vit" ID_COLOR_WHITE - MENUITEM "Automatic" ID_COLOR_AUTOMATIC + MENUITEM "Svart", ID_COLOR_BLACK + MENUITEM "Rödbrun", ID_COLOR_MAROON + MENUITEM "Grön", ID_COLOR_GREEN + MENUITEM "Oliv", ID_COLOR_OLIVE + MENUITEM "Navy", ID_COLOR_NAVY + MENUITEM "Lila", ID_COLOR_PURPLE + MENUITEM "Teal", ID_COLOR_TEAL + MENUITEM "Grå", ID_COLOR_GRAY + MENUITEM "Silver", ID_COLOR_SILVER + MENUITEM "Röd", ID_COLOR_RED + MENUITEM "Lime", ID_COLOR_LIME + MENUITEM "Gul", ID_COLOR_YELLOW + MENUITEM "Blå", ID_COLOR_BLUE + MENUITEM "Fuchsia", ID_COLOR_FUCHSIA + MENUITEM "Aqua", ID_COLOR_AQUA + MENUITEM "Vit", ID_COLOR_WHITE + MENUITEM "Automatic",ID_COLOR_AUTOMATIC END END @@ -156,7 +156,7 @@ END IDD_PARAFORMAT DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Formatera stycke" +CAPTION "Formatera stycke" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Indrag", -1, 10, 10, 120, 68 @@ -174,7 +174,7 @@ END IDD_TABSTOPS DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Tabulatorer" +CAPTION "Tabulatorer" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Tabbstopp", -1, 10, 10, 120, 90 @@ -188,7 +188,7 @@ END IDD_FORMATOPTS DIALOG 0, 0, 280, 110 STYLE DS_SYSMODAL -Caption "" +CAPTION "" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Radbrytning", -1, 10, 10, 130, 85 @@ -265,9 +265,7 @@ BEGIN STRING_PROMPT_SAVE_CHANGES, "Spara ändringar i '%s'?" STRING_SEARCH_FINISHED, "Sökningen i dokumentet har slutförts." STRING_LOAD_RICHED_FAILED, "Misslyckades att ladda RichEdit-biblioteket." - STRING_SAVE_LOSEFORMATTING, "Du har valt att spara i rent textformat, " \ - "vilket kommer leda till att all formatering förloras. " \ - "Är du säker att du vill göra detta?" + STRING_SAVE_LOSEFORMATTING, "Du har valt att spara i rent textformat, vilket kommer leda till att all formatering förloras. Är du säker att du vill göra detta?" STRING_INVALID_NUMBER, "Ogiltigt talformat" STRING_OLE_STORAGE_NOT_SUPPORTED, "OLE storage documents are not supported" STRING_WRITE_FAILED, "Kunde inte spara filen." diff --git a/reactos/base/applications/wordpad/Tr.rc b/reactos/base/applications/wordpad/Tr.rc index 93875cb0dbe..6831ae3b2a4 100644 --- a/reactos/base/applications/wordpad/Tr.rc +++ b/reactos/base/applications/wordpad/Tr.rc @@ -80,9 +80,9 @@ BEGIN POPUP "&Biim" BEGIN MENUITEM "&Font...", ID_FONTSETTINGS - MENUITEM "&Bullet points" ID_BULLET - MENUITEM "&Paragraph..." ID_PARAFORMAT - MENUITEM "&Tabs..." ID_TABSTOPS + MENUITEM "&Bullet points", ID_BULLET + MENUITEM "&Paragraph...", ID_PARAFORMAT + MENUITEM "&Tabs...", ID_TABSTOPS POPUP "&Arkaplan" BEGIN MENUITEM "S&istem\tCtrl+1", ID_BACK_1 @@ -91,7 +91,7 @@ BEGIN END POPUP "&Help" BEGIN - MENUITEM "&About Wine Wordpad" ID_ABOUT + MENUITEM "&About Wine Wordpad", ID_ABOUT END END @@ -112,22 +112,22 @@ IDM_COLOR_POPUP MENU BEGIN POPUP "" BEGIN - MENUITEM "Siyah" ID_COLOR_BLACK - MENUITEM "Koyu Krmz" ID_COLOR_MAROON - MENUITEM "Yeil" ID_COLOR_GREEN - MENUITEM "Koyu Sar" ID_COLOR_OLIVE - MENUITEM "Koyu Mavi" ID_COLOR_NAVY - MENUITEM "Mor" ID_COLOR_PURPLE - MENUITEM "Deniz Mavisi" ID_COLOR_TEAL - MENUITEM "Gri" ID_COLOR_GRAY - MENUITEM "Gm" ID_COLOR_SILVER - MENUITEM "Krmz" ID_COLOR_RED - MENUITEM "Parlak Yeil" ID_COLOR_LIME - MENUITEM "Sar" ID_COLOR_YELLOW - MENUITEM "Mavi" ID_COLOR_BLUE - MENUITEM "Pembe" ID_COLOR_FUCHSIA - MENUITEM "Turkuaz" ID_COLOR_AQUA - MENUITEM "Beyaz" ID_COLOR_WHITE - MENUITEM "Automatic" ID_COLOR_AUTOMATIC + MENUITEM "Siyah", ID_COLOR_BLACK + MENUITEM "Koyu Krmz",ID_COLOR_MAROON + MENUITEM "Yeil", ID_COLOR_GREEN + MENUITEM "Koyu Sar", ID_COLOR_OLIVE + MENUITEM "Koyu Mavi", ID_COLOR_NAVY + MENUITEM "Mor", ID_COLOR_PURPLE + MENUITEM "Deniz Mavisi",ID_COLOR_TEAL + MENUITEM "Gri", ID_COLOR_GRAY + MENUITEM "Gm", ID_COLOR_SILVER + MENUITEM "Krmz", ID_COLOR_RED + MENUITEM "Parlak Yeil",ID_COLOR_LIME + MENUITEM "Sar", ID_COLOR_YELLOW + MENUITEM "Mavi", ID_COLOR_BLUE + MENUITEM "Pembe", ID_COLOR_FUCHSIA + MENUITEM "Turkuaz", ID_COLOR_AQUA + MENUITEM "Beyaz", ID_COLOR_WHITE + MENUITEM "Automatic", ID_COLOR_AUTOMATIC END END diff --git a/reactos/base/applications/wordpad/Uk.rc b/reactos/base/applications/wordpad/Uk.rc index 8a86989cebb..09e5bfd4709 100644 --- a/reactos/base/applications/wordpad/Uk.rc +++ b/reactos/base/applications/wordpad/Uk.rc @@ -85,9 +85,9 @@ BEGIN POPUP "Ф&ормат" BEGIN MENUITEM "&Шрифт...", ID_FONTSETTINGS - MENUITEM "&Маркери" ID_BULLET - MENUITEM "&Абзац..." ID_PARAFORMAT - MENUITEM "&Табуляція..." ID_TABSTOPS + MENUITEM "&Маркери", ID_BULLET + MENUITEM "&Абзац...", ID_PARAFORMAT + MENUITEM "&Табуляція...", ID_TABSTOPS POPUP "&Фон" BEGIN MENUITEM "&Системний\tCtrl+1", ID_BACK_1 @@ -96,7 +96,7 @@ BEGIN END POPUP "&Довідка" BEGIN - MENUITEM "&Про Wine Wordpad" ID_ABOUT + MENUITEM "&Про Wine Wordpad", ID_ABOUT END END @@ -108,8 +108,8 @@ BEGIN MENUITEM "&Копіювати", ID_EDIT_COPY MENUITEM "&Вставити", ID_EDIT_PASTE MENUITEM SEPARATOR - MENUITEM "&Маркери" ID_BULLET - MENUITEM "&Абзац..." ID_PARAFORMAT + MENUITEM "&Маркери", ID_BULLET + MENUITEM "&Абзац...", ID_PARAFORMAT END END @@ -117,23 +117,23 @@ IDM_COLOR_POPUP MENU BEGIN POPUP "" BEGIN - MENUITEM "Чорний" ID_COLOR_BLACK - MENUITEM "Коричневий" ID_COLOR_MAROON - MENUITEM "Зелений" ID_COLOR_GREEN - MENUITEM "Оливковий" ID_COLOR_OLIVE - MENUITEM "Темно-синій" ID_COLOR_NAVY - MENUITEM "Пурпуровий" ID_COLOR_PURPLE - MENUITEM "Синьо-зелений" ID_COLOR_TEAL - MENUITEM "Сірий" ID_COLOR_GRAY - MENUITEM "Сріблястий" ID_COLOR_SILVER - MENUITEM "Червоний" ID_COLOR_RED - MENUITEM "Салатовий" ID_COLOR_LIME - MENUITEM "Жовтий" ID_COLOR_YELLOW - MENUITEM "Синій" ID_COLOR_BLUE - MENUITEM "Малиновий" ID_COLOR_FUCHSIA - MENUITEM "Блакитний" ID_COLOR_AQUA - MENUITEM "Білий" ID_COLOR_WHITE - MENUITEM "Автоматично" ID_COLOR_AUTOMATIC + MENUITEM "Чорний", ID_COLOR_BLACK + MENUITEM "Коричневий", ID_COLOR_MAROON + MENUITEM "Зелений", ID_COLOR_GREEN + MENUITEM "Оливковий", ID_COLOR_OLIVE + MENUITEM "Темно-синій", ID_COLOR_NAVY + MENUITEM "Пурпуровий", ID_COLOR_PURPLE + MENUITEM "Синьо-зелений", ID_COLOR_TEAL + MENUITEM "Сірий", ID_COLOR_GRAY + MENUITEM "Сріблястий", ID_COLOR_SILVER + MENUITEM "Червоний", ID_COLOR_RED + MENUITEM "Салатовий", ID_COLOR_LIME + MENUITEM "Жовтий", ID_COLOR_YELLOW + MENUITEM "Синій", ID_COLOR_BLUE + MENUITEM "Малиновий", ID_COLOR_FUCHSIA + MENUITEM "Блакитний", ID_COLOR_AQUA + MENUITEM "Білий", ID_COLOR_WHITE + MENUITEM "Автоматично", ID_COLOR_AUTOMATIC END END @@ -161,7 +161,7 @@ END IDD_PARAFORMAT DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Абзац" +CAPTION "Абзац" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Відступ", -1, 10, 10, 120, 68 @@ -179,7 +179,7 @@ END IDD_TABSTOPS DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Табуляція" +CAPTION "Табуляція" FONT 8, "MS SHell DLg" BEGIN GROUPBOX "Позиції табуляції", -1, 10, 10, 120, 90 @@ -193,7 +193,7 @@ END IDD_FORMATOPTS DIALOG 0, 0, 280, 110 STYLE DS_SYSMODAL -Caption "" +CAPTION "" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Перенос рядка", -1, 10, 10, 130, 85 @@ -258,9 +258,7 @@ BEGIN STRING_PROMPT_SAVE_CHANGES, "Зберегти зміни в '%s'?" STRING_SEARCH_FINISHED, "Покуш документу завершено." STRING_LOAD_RICHED_FAILED, "Не вдалось завантажити бібліотеку RichEdit." - STRING_SAVE_LOSEFORMATTING, "Ви вибрали збереження в форматі простого тексту, " \ - "що призведе до втрати форматування. " \ - "Ви справді цього хочете?" + STRING_SAVE_LOSEFORMATTING, "Ви вибрали збереження в форматі простого тексту, що призведе до втрати форматування. Ви справді цього хочете?" STRING_INVALID_NUMBER, "Невірний числовий формат" STRING_OLE_STORAGE_NOT_SUPPORTED, "OLE storage документи не підтримуються" STRING_WRITE_FAILED, "Неможливо зберегти файл." diff --git a/reactos/base/applications/wordpad/Zh.rc b/reactos/base/applications/wordpad/Zh.rc index b2689fa72a2..d3e4b1726dc 100644 --- a/reactos/base/applications/wordpad/Zh.rc +++ b/reactos/base/applications/wordpad/Zh.rc @@ -107,8 +107,8 @@ BEGIN MENUITEM "复制(&C)", ID_EDIT_COPY MENUITEM "粘贴(&P)", ID_EDIT_PASTE MENUITEM SEPARATOR - MENUITEM "项目符号(&B)" ID_BULLET - MENUITEM "段落(&P)..." ID_PARAFORMAT + MENUITEM "项目符号(&B)", ID_BULLET + MENUITEM "段落(&P)...", ID_PARAFORMAT END END @@ -119,20 +119,20 @@ BEGIN MENUITEM "黑色", ID_COLOR_BLACK /* 未找到“标准译名表” */ MENUITEM "栗色", ID_COLOR_MAROON MENUITEM "绿色", ID_COLOR_GREEN - MENUITEM "橄榄色" ID_COLOR_OLIVE - MENUITEM "藏青" ID_COLOR_NAVY - MENUITEM "紫色" ID_COLOR_PURPLE - MENUITEM "鸭翅绿" ID_COLOR_TEAL - MENUITEM "灰色" ID_COLOR_GRAY - MENUITEM "银色" ID_COLOR_SILVER - MENUITEM "红色" ID_COLOR_RED - MENUITEM "青柠色" ID_COLOR_LIME - MENUITEM "黄色" ID_COLOR_YELLOW - MENUITEM "蓝色" ID_COLOR_BLUE - MENUITEM "洋红" ID_COLOR_FUCHSIA /* =magenta? */ - MENUITEM "水绿" ID_COLOR_AQUA - MENUITEM "白色" ID_COLOR_WHITE - MENUITEM "自动" ID_COLOR_AUTOMATIC + MENUITEM "橄榄色", ID_COLOR_OLIVE + MENUITEM "藏青", ID_COLOR_NAVY + MENUITEM "紫色", ID_COLOR_PURPLE + MENUITEM "鸭翅绿", ID_COLOR_TEAL + MENUITEM "灰色", ID_COLOR_GRAY + MENUITEM "银色", ID_COLOR_SILVER + MENUITEM "红色", ID_COLOR_RED + MENUITEM "青柠色", ID_COLOR_LIME + MENUITEM "黄色", ID_COLOR_YELLOW + MENUITEM "蓝色", ID_COLOR_BLUE + MENUITEM "洋红", ID_COLOR_FUCHSIA /* =magenta? */ + MENUITEM "水绿", ID_COLOR_AQUA + MENUITEM "白色", ID_COLOR_WHITE + MENUITEM "自动", ID_COLOR_AUTOMATIC END END @@ -160,7 +160,7 @@ END IDD_PARAFORMAT DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "段落格式" +CAPTION "段落格式" FONT 9, "MS Shell Dlg" BEGIN GROUPBOX "缩进", -1, 10, 10, 120, 68 @@ -178,7 +178,7 @@ END IDD_TABSTOPS DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "制表位" +CAPTION "制表位" FONT 9, "MS Shell Dlg" BEGIN GROUPBOX "制表位宽度", -1, 10, 10, 120, 90 @@ -192,7 +192,7 @@ END IDD_FORMATOPTS DIALOG 0, 0, 280, 110 STYLE DS_SYSMODAL -Caption "" +CAPTION "" FONT 9, "MS Shell Dlg" BEGIN GROUPBOX "自动换行", -1, 10, 10, 130, 85 @@ -359,8 +359,8 @@ BEGIN MENUITEM "複製(&C)", ID_EDIT_COPY MENUITEM "貼上(&P)", ID_EDIT_PASTE MENUITEM SEPARATOR - MENUITEM "子彈點(&B)" ID_BULLET - MENUITEM "段落(&P)..." ID_PARAFORMAT + MENUITEM "子彈點(&B)", ID_BULLET + MENUITEM "段落(&P)...", ID_PARAFORMAT END END @@ -388,7 +388,7 @@ END IDD_PARAFORMAT DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "段落格式" +CAPTION "段落格式" FONT 9, "MS Shell Dlg" BEGIN GROUPBOX "縮進", -1, 10, 10, 120, 68 @@ -406,7 +406,7 @@ END IDD_TABSTOPS DIALOG 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "標籤" +CAPTION "標籤" FONT 9, "MS Shell Dlg" BEGIN GROUPBOX "標籤停點", -1, 10, 10, 120, 90 @@ -420,7 +420,7 @@ END IDD_FORMATOPTS DIALOG 0, 0, 280, 110 STYLE DS_SYSMODAL -Caption "" +CAPTION "" FONT 9, "MS Shell Dlg" BEGIN GROUPBOX "自動換行", -1, 10, 10, 130, 85 @@ -487,9 +487,7 @@ BEGIN STRING_PROMPT_SAVE_CHANGES, "儲存改動到 '%s'?" STRING_SEARCH_FINISHED, "檔案查找結束." STRING_LOAD_RICHED_FAILED, "RichEdit 裝載失敗." - STRING_SAVE_LOSEFORMATTING, "你已經選擇儲存為文本檔案, " \ - "這可能導致格式丟失. " \ - "你確定要這麼做嗎?" + STRING_SAVE_LOSEFORMATTING, "你已經選擇儲存為文本檔案, 這可能導致格式丟失. 你確定要這麼做嗎?" STRING_INVALID_NUMBER, "數字格式無效" STRING_OLE_STORAGE_NOT_SUPPORTED, "不支援OLE 儲存檔案" STRING_WRITE_FAILED, "不能儲存檔案." diff --git a/reactos/base/applications/wordpad/rsrc.rc b/reactos/base/applications/wordpad/rsrc.rc index 658505a59ed..cc5c61403a9 100644 --- a/reactos/base/applications/wordpad/rsrc.rc +++ b/reactos/base/applications/wordpad/rsrc.rc @@ -23,23 +23,23 @@ MAINACCELTABLE ACCELERATORS BEGIN "1", ID_BACK_1, VIRTKEY, CONTROL "2", ID_BACK_2, VIRTKEY, CONTROL - "L", ID_ALIGN_LEFT, VIRTKEY, CONTROL - "E", ID_ALIGN_CENTER, VIRTKEY, CONTROL - "R", ID_ALIGN_RIGHT, VIRTKEY, CONTROL + "L", ID_ALIGN_LEFT, VIRTKEY, CONTROL + "E", ID_ALIGN_CENTER, VIRTKEY, CONTROL + "R", ID_ALIGN_RIGHT, VIRTKEY, CONTROL "F", ID_FIND, VIRTKEY, CONTROL VK_F3, ID_FIND_NEXT, VIRTKEY "H", ID_REPLACE, VIRTKEY, CONTROL - "A", ID_EDIT_SELECTALL, VIRTKEY, CONTROL - "X", ID_EDIT_CUT, VIRTKEY, CONTROL - "C", ID_EDIT_COPY, VIRTKEY, CONTROL - "Z", ID_EDIT_UNDO, VIRTKEY, CONTROL - "Y", ID_EDIT_REDO, VIRTKEY, CONTROL - "B", ID_FORMAT_BOLD, VIRTKEY, CONTROL - "I", ID_FORMAT_ITALIC, VIRTKEY, CONTROL + "A", ID_EDIT_SELECTALL, VIRTKEY, CONTROL + "X", ID_EDIT_CUT, VIRTKEY, CONTROL + "C", ID_EDIT_COPY, VIRTKEY, CONTROL + "Z", ID_EDIT_UNDO, VIRTKEY, CONTROL + "Y", ID_EDIT_REDO, VIRTKEY, CONTROL + "B", ID_FORMAT_BOLD, VIRTKEY, CONTROL + "I", ID_FORMAT_ITALIC, VIRTKEY, CONTROL "U", ID_FORMAT_UNDERLINE,VIRTKEY, CONTROL - "N", ID_FILE_NEW, VIRTKEY, CONTROL - "O", ID_FILE_OPEN, VIRTKEY, CONTROL - "S", ID_FILE_SAVE, VIRTKEY, CONTROL + "N", ID_FILE_NEW, VIRTKEY, CONTROL + "O", ID_FILE_OPEN, VIRTKEY, CONTROL + "S", ID_FILE_SAVE, VIRTKEY, CONTROL "P", ID_PRINT, VIRTKEY, CONTROL END diff --git a/reactos/base/setup/reactos/lang/it-IT.rc b/reactos/base/setup/reactos/lang/it-IT.rc index b74afa12d16..6337058194e 100644 --- a/reactos/base/setup/reactos/lang/it-IT.rc +++ b/reactos/base/setup/reactos/lang/it-IT.rc @@ -6,9 +6,7 @@ CAPTION "Installazione di ReactOS" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Benvenuto al wizard di installazione di ReactOS.", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT "Non ancora possibile installare ReactOS direttamente da questo CD! "\ - "E' necessario riavviare il computer da questo CD per procedere "\ - "alla installazione di ReactOS.", IDC_STATIC, 115, 40, 195, 100 + LTEXT "Non ancora possibile installare ReactOS direttamente da questo CD! E' necessario riavviare il computer da questo CD per procedere alla installazione di ReactOS.", IDC_STATIC, 115, 40, 195, 100 LTEXT "Cliccare Fine per uscire.", IDC_STATIC, 115, 169, 195, 17 END @@ -128,8 +126,7 @@ BEGIN LTEXT "Quando verr premuto fine il computer si riavvier.", IDC_STATIC, 20, 80, 277, 10 CONTROL "", IDC_RESTART_PROGRESS, "msctls_progress32", PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 20, 120, 277, 8 - LTEXT "Se presente rimuovere il CD dal lettore e cliccare Fine "\ - "per riavviare il computer.", IDC_STATIC, 10, 180, 297, 20 + LTEXT "Se presente rimuovere il CD dal lettore e cliccare Fine per riavviare il computer.", IDC_STATIC, 10, 180, 297, 20 END STRINGTABLE From fcfdd9aa80962a3965742cf1dcf0c9ad513a3579 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 10 Feb 2011 10:45:45 +0000 Subject: [PATCH 008/287] Merge resource file related changes from cmake branch part 2 svn path=/trunk/; revision=50643 --- reactos/dll/win32/browseui/browseui.rc | 22 +++---- reactos/dll/win32/comdlg32/cdlg_Da.rc | 2 +- reactos/dll/win32/comdlg32/cdlg_No.rc | 2 +- reactos/dll/win32/cryptui/cryptui_Fr.rc | 2 +- reactos/dll/win32/kernel32/nls/azl.nls | 14 ++-- reactos/dll/win32/kernel32/nls/csy.nls | 40 +++++------ reactos/dll/win32/kernel32/nls/far.nls | 88 ++++++++++++------------- reactos/dll/win32/kernel32/nls/fos.nls | 24 +++---- reactos/dll/win32/kernel32/nls/hrv.nls | 12 ++-- reactos/dll/win32/kernel32/nls/mon.nls | 62 ++++++++--------- reactos/dll/win32/mpr/mpr_Bg.rc | 4 +- reactos/dll/win32/mpr/mpr_Cs.rc | 4 +- reactos/dll/win32/mpr/mpr_Da.rc | 4 +- reactos/dll/win32/mpr/mpr_De.rc | 4 +- reactos/dll/win32/mpr/mpr_En.rc | 4 +- reactos/dll/win32/mpr/mpr_Es.rc | 4 +- reactos/dll/win32/mpr/mpr_Fr.rc | 4 +- reactos/dll/win32/mpr/mpr_Hu.rc | 4 +- reactos/dll/win32/mpr/mpr_It.rc | 4 +- reactos/dll/win32/mpr/mpr_Ja.rc | 4 +- reactos/dll/win32/mpr/mpr_Ko.rc | 4 +- reactos/dll/win32/mpr/mpr_Lt.rc | 4 +- reactos/dll/win32/mpr/mpr_Nl.rc | 4 +- reactos/dll/win32/mpr/mpr_No.rc | 4 +- reactos/dll/win32/mpr/mpr_Pl.rc | 4 +- reactos/dll/win32/mpr/mpr_Pt.rc | 8 +-- reactos/dll/win32/mpr/mpr_Ro.rc | 4 +- reactos/dll/win32/mpr/mpr_Ru.rc | 4 +- reactos/dll/win32/mpr/mpr_Si.rc | 4 +- reactos/dll/win32/mpr/mpr_Sv.rc | 4 +- reactos/dll/win32/mpr/mpr_Tr.rc | 4 +- reactos/dll/win32/mpr/mpr_Uk.rc | 4 +- reactos/dll/win32/mpr/mpr_Zh.rc | 8 +-- reactos/dll/win32/shdoclc/Es.rc | 8 +-- reactos/dll/win32/shdocvw/De.rc | 8 +-- reactos/dll/win32/shdocvw/En.rc | 8 +-- reactos/dll/win32/shdocvw/Es.rc | 8 +-- reactos/dll/win32/shdocvw/Fr.rc | 8 +-- reactos/dll/win32/shdocvw/He.rc | 8 +-- reactos/dll/win32/shdocvw/It.rc | 8 +-- reactos/dll/win32/shdocvw/Ko.rc | 8 +-- reactos/dll/win32/shdocvw/Lt.rc | 8 +-- reactos/dll/win32/shdocvw/Nl.rc | 8 +-- reactos/dll/win32/shdocvw/Pt.rc | 8 +-- reactos/dll/win32/shdocvw/Ro.rc | 2 +- reactos/dll/win32/shdocvw/Si.rc | 10 +-- reactos/dll/win32/shdocvw/Sr.rc | 16 ++--- reactos/dll/win32/shdocvw/Sv.rc | 8 +-- reactos/dll/win32/shdocvw/Uk.rc | 8 +-- reactos/dll/win32/shlwapi/shlwapi_Da.rc | 8 +-- reactos/dll/win32/shlwapi/shlwapi_De.rc | 8 +-- reactos/dll/win32/shlwapi/shlwapi_En.rc | 8 +-- reactos/dll/win32/shlwapi/shlwapi_Es.rc | 8 +-- reactos/dll/win32/shlwapi/shlwapi_Fi.rc | 8 +-- reactos/dll/win32/shlwapi/shlwapi_Fr.rc | 8 +-- reactos/dll/win32/shlwapi/shlwapi_Hu.rc | 14 ++-- reactos/dll/win32/shlwapi/shlwapi_It.rc | 8 +-- reactos/dll/win32/shlwapi/shlwapi_Ja.rc | 8 +-- reactos/dll/win32/shlwapi/shlwapi_Ko.rc | 8 +-- reactos/dll/win32/shlwapi/shlwapi_Lt.rc | 8 +-- reactos/dll/win32/shlwapi/shlwapi_Nl.rc | 8 +-- reactos/dll/win32/shlwapi/shlwapi_No.rc | 8 +-- reactos/dll/win32/shlwapi/shlwapi_Pl.rc | 8 +-- reactos/dll/win32/shlwapi/shlwapi_Pt.rc | 14 ++-- reactos/dll/win32/shlwapi/shlwapi_Ro.rc | 8 +-- reactos/dll/win32/shlwapi/shlwapi_Ru.rc | 8 +-- reactos/dll/win32/shlwapi/shlwapi_Si.rc | 8 +-- reactos/dll/win32/shlwapi/shlwapi_Sk.rc | 8 +-- reactos/dll/win32/shlwapi/shlwapi_Sv.rc | 8 +-- reactos/dll/win32/shlwapi/shlwapi_Tr.rc | 8 +-- reactos/dll/win32/shlwapi/shlwapi_Uk.rc | 8 +-- reactos/dll/win32/shlwapi/shlwapi_Zh.rc | 16 ++--- reactos/dll/win32/wininet/wininet_Bg.rc | 4 +- reactos/dll/win32/wininet/wininet_Cs.rc | 4 +- reactos/dll/win32/wininet/wininet_Da.rc | 4 +- reactos/dll/win32/wininet/wininet_De.rc | 8 +-- reactos/dll/win32/wininet/wininet_En.rc | 8 +-- reactos/dll/win32/wininet/wininet_Es.rc | 4 +- reactos/dll/win32/wininet/wininet_Fi.rc | 4 +- reactos/dll/win32/wininet/wininet_Fr.rc | 8 +-- reactos/dll/win32/wininet/wininet_Hu.rc | 4 +- reactos/dll/win32/wininet/wininet_It.rc | 8 +-- reactos/dll/win32/wininet/wininet_Ja.rc | 4 +- reactos/dll/win32/wininet/wininet_Ko.rc | 4 +- reactos/dll/win32/wininet/wininet_Lt.rc | 8 +-- reactos/dll/win32/wininet/wininet_Nl.rc | 8 +-- reactos/dll/win32/wininet/wininet_No.rc | 8 +-- reactos/dll/win32/wininet/wininet_Pl.rc | 4 +- reactos/dll/win32/wininet/wininet_Pt.rc | 12 ++-- reactos/dll/win32/wininet/wininet_Ro.rc | 8 +-- reactos/dll/win32/wininet/wininet_Ru.rc | 8 +-- reactos/dll/win32/wininet/wininet_Si.rc | 8 +-- reactos/dll/win32/wininet/wininet_Sv.rc | 4 +- reactos/dll/win32/wininet/wininet_Tr.rc | 4 +- reactos/dll/win32/wininet/wininet_Uk.rc | 4 +- reactos/dll/win32/wininet/wininet_Zh.rc | 8 +-- 96 files changed, 426 insertions(+), 426 deletions(-) diff --git a/reactos/dll/win32/browseui/browseui.rc b/reactos/dll/win32/browseui/browseui.rc index afb9a0c1d8a..1dfde6d4c0d 100644 --- a/reactos/dll/win32/browseui/browseui.rc +++ b/reactos/dll/win32/browseui/browseui.rc @@ -30,17 +30,17 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL // // REGISTRY // -IDR_ADDRESSBAND REGISTRY "res\\addressband.rgs" -IDR_ADDRESSEDITBOX REGISTRY "res\\addresseditbox.rgs" -IDR_ACLMULTI REGISTRY "res\\autocompletecontainer.rgs" -IDR_BANDPROXY REGISTRY "res\\bandproxy.rgs" -IDR_BANDSITE REGISTRY "res\\rebarbandsite.rgs" -IDR_BANDSITEMENU REGISTRY "res\\bandsitemenu.rgs" -IDR_BRANDBAND REGISTRY "res\\brandband.rgs" -IDR_COMMONBROWSER REGISTRY "res\\commonbrowser.rgs" -IDR_GLOBALFOLDERSETTINGS REGISTRY "res\\globalfoldersettings.rgs" -IDR_INTERNETTOOLBAR REGISTRY "res\\internettoolbar.rgs" -IDR_REGTREEOPTIONS REGISTRY "res\\regtreeoptions.rgs" +IDR_ADDRESSBAND REGISTRY "res/addressband.rgs" +IDR_ADDRESSEDITBOX REGISTRY "res/addresseditbox.rgs" +IDR_ACLMULTI REGISTRY "res/autocompletecontainer.rgs" +IDR_BANDPROXY REGISTRY "res/bandproxy.rgs" +IDR_BANDSITE REGISTRY "res/rebarbandsite.rgs" +IDR_BANDSITEMENU REGISTRY "res/bandsitemenu.rgs" +IDR_BRANDBAND REGISTRY "res/brandband.rgs" +IDR_COMMONBROWSER REGISTRY "res/commonbrowser.rgs" +IDR_GLOBALFOLDERSETTINGS REGISTRY "res/globalfoldersettings.rgs" +IDR_INTERNETTOOLBAR REGISTRY "res/internettoolbar.rgs" +IDR_REGTREEOPTIONS REGISTRY "res/regtreeoptions.rgs" /* diff --git a/reactos/dll/win32/comdlg32/cdlg_Da.rc b/reactos/dll/win32/comdlg32/cdlg_Da.rc index 2d92bef30bd..509cc7b0aa7 100644 --- a/reactos/dll/win32/comdlg32/cdlg_Da.rc +++ b/reactos/dll/win32/comdlg32/cdlg_Da.rc @@ -258,7 +258,7 @@ FONT 8, "MS Shell Dlg" EDITTEXT edt3, 237,106, 35,12, WS_GROUP | ES_NUMBER GROUPBOX "Udskriv område", grp1, 8,92, 144,64, WS_GROUP - CONTROL "&Alle" rad1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,16,106,64,12 + CONTROL "&Alle", rad1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,16,106,64,12 CONTROL "Si&der", rad3,"Button",BS_AUTORADIOBUTTON,16,122,36,12 CONTROL "&Markeret", rad2,"Button",BS_AUTORADIOBUTTON,16,138,64,12 EDITTEXT edt1, 74,122, 26,12, WS_GROUP | ES_NUMBER diff --git a/reactos/dll/win32/comdlg32/cdlg_No.rc b/reactos/dll/win32/comdlg32/cdlg_No.rc index d18a2a73e7b..5e0f94f4e16 100644 --- a/reactos/dll/win32/comdlg32/cdlg_No.rc +++ b/reactos/dll/win32/comdlg32/cdlg_No.rc @@ -405,7 +405,7 @@ Oppgi en verdi mellom %d og %d." PD32_GENERIC_ERROR "En feil har oppsttt." PD32_DRIVER_UNKNOWN "Ukjent skriverdriver." PD32_NO_DEVICES "Du m installere en skriver fr du \ - kan gjre skriver-relaterte oppgaver som endre \ sideoppsettet og skrive ut et dokument. \ + kan gjre skriver-relaterte oppgaver som endre sideoppsettet og skrive ut et dokument. \ Installer en og prv p nytt." PD32_DEFAULT_PRINTER "Standardskriver; " diff --git a/reactos/dll/win32/cryptui/cryptui_Fr.rc b/reactos/dll/win32/cryptui/cryptui_Fr.rc index 93601266646..50b2b073f27 100644 --- a/reactos/dll/win32/cryptui/cryptui_Fr.rc +++ b/reactos/dll/win32/cryptui/cryptui_Fr.rc @@ -428,7 +428,7 @@ BEGIN IDC_EXPORT_FORMAT_BASE64, 31,30,200,12, BS_AUTORADIOBUTTON AUTORADIOBUTTON "Standard de syntaxe de message cryptographique - Messages PKCS #7 (.p7b)", IDC_EXPORT_FORMAT_CMS, 31,42,200,12, BS_AUTORADIOBUTTON - CHECKBOX "&Inclure tous les certificats dans le chemin de certification si possible" + CHECKBOX "&Inclure tous les certificats dans le chemin de certification si possible", IDC_EXPORT_CMS_INCLUDE_CHAIN, 44,57,230,8, BS_AUTOCHECKBOX|WS_TABSTOP|WS_DISABLED AUTORADIOBUTTON "Échange d'informations &Personnelles - PKCS #12 (.pfx)", IDC_EXPORT_FORMAT_PFX, 31,72,200,12, BS_AUTORADIOBUTTON|WS_DISABLED diff --git a/reactos/dll/win32/kernel32/nls/azl.nls b/reactos/dll/win32/kernel32/nls/azl.nls index 6242addb581..7c2f3df56a0 100644 --- a/reactos/dll/win32/kernel32/nls/azl.nls +++ b/reactos/dll/win32/kernel32/nls/azl.nls @@ -64,11 +64,11 @@ STRINGTABLE LANGUAGE LANG_AZERI, SUBLANG_AZERI_LATIN LOCALE_S2359 "" LOCALE_SABBREVCTRYNAME "AZE" LOCALE_SABBREVDAYNAME1 "Be" - LOCALE_SABBREVDAYNAME2 "a" - LOCALE_SABBREVDAYNAME3 "" + LOCALE_SABBREVDAYNAME2 "\x00c7a" + LOCALE_SABBREVDAYNAME3 "\x00c7" LOCALE_SABBREVDAYNAME4 "Ca" LOCALE_SABBREVDAYNAME5 "C" - LOCALE_SABBREVDAYNAME6 "" + LOCALE_SABBREVDAYNAME6 "\x00de" LOCALE_SABBREVDAYNAME7 "B" LOCALE_SABBREVLANGNAME "AZE" LOCALE_SABBREVMONTHNAME1 "Yan" @@ -76,8 +76,8 @@ STRINGTABLE LANGUAGE LANG_AZERI, SUBLANG_AZERI_LATIN LOCALE_SABBREVMONTHNAME3 "Mar" LOCALE_SABBREVMONTHNAME4 "Apr" LOCALE_SABBREVMONTHNAME5 "May" - LOCALE_SABBREVMONTHNAME6 "yun" - LOCALE_SABBREVMONTHNAME7 "yul" + LOCALE_SABBREVMONTHNAME6 "\x00DDyun" + LOCALE_SABBREVMONTHNAME7 "\x00DDyul" LOCALE_SABBREVMONTHNAME8 "Avg" LOCALE_SABBREVMONTHNAME9 "Sen" LOCALE_SABBREVMONTHNAME10 "Okt" @@ -112,8 +112,8 @@ STRINGTABLE LANGUAGE LANG_AZERI, SUBLANG_AZERI_LATIN LOCALE_SMONTHNAME3 "Mart" LOCALE_SMONTHNAME4 "Aprel" LOCALE_SMONTHNAME5 "May" - LOCALE_SMONTHNAME6 "yun" - LOCALE_SMONTHNAME7 "yul" + LOCALE_SMONTHNAME6 "\x00ddyun" + LOCALE_SMONTHNAME7 "\x00ddyul" LOCALE_SMONTHNAME8 "Avgust" LOCALE_SMONTHNAME9 "Sentyabr" LOCALE_SMONTHNAME10 "Oktyabr" diff --git a/reactos/dll/win32/kernel32/nls/csy.nls b/reactos/dll/win32/kernel32/nls/csy.nls index 4b99d9f6cac..95e3783b331 100644 --- a/reactos/dll/win32/kernel32/nls/csy.nls +++ b/reactos/dll/win32/kernel32/nls/csy.nls @@ -64,10 +64,10 @@ STRINGTABLE LANGUAGE LANG_CZECH, SUBLANG_DEFAULT LOCALE_S2359 "odp." LOCALE_SABBREVCTRYNAME "CZE" LOCALE_SABBREVDAYNAME1 "po" - LOCALE_SABBREVDAYNAME2 "t" + LOCALE_SABBREVDAYNAME2 "\x00FAt" LOCALE_SABBREVDAYNAME3 "st" - LOCALE_SABBREVDAYNAME4 "t" - LOCALE_SABBREVDAYNAME5 "p" + LOCALE_SABBREVDAYNAME4 "\x00E8t" + LOCALE_SABBREVDAYNAME5 "p\x00E1" LOCALE_SABBREVDAYNAME6 "so" LOCALE_SABBREVDAYNAME7 "ne" LOCALE_SABBREVLANGNAME "CSY" @@ -85,13 +85,13 @@ STRINGTABLE LANGUAGE LANG_CZECH, SUBLANG_DEFAULT LOCALE_SABBREVMONTHNAME12 "XII" LOCALE_SABBREVMONTHNAME13 "" LOCALE_SCOUNTRY "Czech Republic" - LOCALE_SCURRENCY "K" + LOCALE_SCURRENCY "K\x00E8" LOCALE_SDATE "." - LOCALE_SDAYNAME1 "pondl" - LOCALE_SDAYNAME2 "ter" - LOCALE_SDAYNAME3 "steda" - LOCALE_SDAYNAME4 "tvrtek" - LOCALE_SDAYNAME5 "ptek" + LOCALE_SDAYNAME1 "pond\x00ECl\x00EC" + LOCALE_SDAYNAME2 "\x00FAter\x00FD" + LOCALE_SDAYNAME3 "st\x00F8eda" + LOCALE_SDAYNAME4 "\x00E8tvrtek" + LOCALE_SDAYNAME5 "p\x00E1tek" LOCALE_SDAYNAME6 "sobota" LOCALE_SDAYNAME7 "nedle" LOCALE_SDECIMAL "," @@ -108,30 +108,30 @@ STRINGTABLE LANGUAGE LANG_CZECH, SUBLANG_DEFAULT LOCALE_SMONDECIMALSEP "," LOCALE_SMONGROUPING "3;0" LOCALE_SMONTHNAME1 "leden" - LOCALE_SMONTHNAME2 "nor" - LOCALE_SMONTHNAME3 "bezen" + LOCALE_SMONTHNAME2 "\x00FAnor" + LOCALE_SMONTHNAME3 "b\x00F8ezen" LOCALE_SMONTHNAME4 "duben" LOCALE_SMONTHNAME5 "kvten" - LOCALE_SMONTHNAME6 "erven" - LOCALE_SMONTHNAME7 "ervenec" + LOCALE_SMONTHNAME6 "\x00E8erven" + LOCALE_SMONTHNAME7 "\x00E8ervenec" LOCALE_SMONTHNAME8 "srpen" - LOCALE_SMONTHNAME9 "z" - LOCALE_SMONTHNAME10 "jen" + LOCALE_SMONTHNAME9 "z\x00E1\x00F8\x00ED" + LOCALE_SMONTHNAME10 "\x00F8\x00EDjen" LOCALE_SMONTHNAME11 "listopad" LOCALE_SMONTHNAME12 "prosinec" LOCALE_SMONTHNAME13 "" - LOCALE_SMONTHOUSANDSEP "" + LOCALE_SMONTHOUSANDSEP " " LOCALE_SNAME "cs-CZ" - LOCALE_SNATIVECTRYNAME "eskrepublika" - LOCALE_SNATIVECURRNAME "Koruna esk" + LOCALE_SNATIVECTRYNAME "\x00C8esk\x00E1republika" + LOCALE_SNATIVECURRNAME "Koruna \x00C8esk\x00E1" LOCALE_SNATIVEDIGITS "0123456789" - LOCALE_SNATIVELANGNAME "etina" + LOCALE_SNATIVELANGNAME "\x00E8e\x009Atina" LOCALE_SNEGATIVESIGN "-" LOCALE_SPOSITIVESIGN "" LOCALE_SSCRIPTS "Latn;" LOCALE_SSHORTDATE "d.M.yyyy" LOCALE_SSORTNAME "Default" - LOCALE_STHOUSAND "" + LOCALE_STHOUSAND " " LOCALE_STIME ":" LOCALE_STIMEFORMAT "H:mm:ss" LOCALE_SYEARMONTH "MMMM yyyy" diff --git a/reactos/dll/win32/kernel32/nls/far.nls b/reactos/dll/win32/kernel32/nls/far.nls index 85c1974a9d4..a158e4de3d2 100644 --- a/reactos/dll/win32/kernel32/nls/far.nls +++ b/reactos/dll/win32/kernel32/nls/far.nls @@ -60,40 +60,40 @@ STRINGTABLE LANGUAGE LANG_FARSI, SUBLANG_DEFAULT LOCALE_ITIME "0" LOCALE_ITIMEMARKPOSN "0" LOCALE_ITLZERO "1" - LOCALE_S1159 "." - LOCALE_S2359 "." + LOCALE_S1159 "\x00DE.\x00D9" + LOCALE_S2359 "\x00C8.\x00D9" LOCALE_SABBREVCTRYNAME "IRN" - LOCALE_SABBREVDAYNAME1 "" - LOCALE_SABBREVDAYNAME2 "" - LOCALE_SABBREVDAYNAME3 "" - LOCALE_SABBREVDAYNAME4 "" - LOCALE_SABBREVDAYNAME5 "" - LOCALE_SABBREVDAYNAME6 "" - LOCALE_SABBREVDAYNAME7 "" + LOCALE_SABBREVDAYNAME1 "\x00CF\x00E6\x00D4\x00E4\x00C8\x00E5" + LOCALE_SABBREVDAYNAME2 "\x00D3\x00E5\x00A0\x00D4\x00E4\x00C8\x00E5" + LOCALE_SABBREVDAYNAME3 "\x008D\x00E5\x00C7\x00D1\x00D4\x00E4\x00C8\x00E5" + LOCALE_SABBREVDAYNAME4 "\x0081\x00E4\x00CC\x00D4\x00E4\x00C8\x00E5" + LOCALE_SABBREVDAYNAME5 "\x00CC\x00E3\x00DA\x00E5" + LOCALE_SABBREVDAYNAME6 "\x00D4\x00E4\x00C8\x00E5" + LOCALE_SABBREVDAYNAME7 "\x00ED\x00DF\x00D4\x00E4\x00C8\x00E5" LOCALE_SABBREVLANGNAME "FAR" - LOCALE_SABBREVMONTHNAME1 "" - LOCALE_SABBREVMONTHNAME2 "" - LOCALE_SABBREVMONTHNAME3 "" - LOCALE_SABBREVMONTHNAME4 "" - LOCALE_SABBREVMONTHNAME5 "" - LOCALE_SABBREVMONTHNAME6 "" - LOCALE_SABBREVMONTHNAME7 "" - LOCALE_SABBREVMONTHNAME8 "" - LOCALE_SABBREVMONTHNAME9 "Ӂ" - LOCALE_SABBREVMONTHNAME10 "" - LOCALE_SABBREVMONTHNAME11 "" - LOCALE_SABBREVMONTHNAME12 "" + LOCALE_SABBREVMONTHNAME1 "\x017D\x00C7\x00E4\x00E6\x00ED\x00E5" + LOCALE_SABBREVMONTHNAME2 "\x00DD\x00E6\x00D1\x00ED\x00E5" + LOCALE_SABBREVMONTHNAME3 "\x00E3\x00C7\x00D1\x00D3" + LOCALE_SABBREVMONTHNAME4 "\x00C2\x00E6\x00D1\x00ED\x00E1" + LOCALE_SABBREVMONTHNAME5 "\x00E3\x00EC" + LOCALE_SABBREVMONTHNAME6 "\x017D\x00E6\x00C6\x00E4" + LOCALE_SABBREVMONTHNAME7 "\x017D\x00E6\x00C6\x00ED\x00E5" + LOCALE_SABBREVMONTHNAME8 "\x00C7\x00E6\x00CA" + LOCALE_SABBREVMONTHNAME9 "\x00D3\x0081\x00CA\x00C7\x00E3\x00C8\x00D1" + LOCALE_SABBREVMONTHNAME10 "\x00C7\x00F5\x00DF\x00CA\x00C8\x00D1" + LOCALE_SABBREVMONTHNAME11 "\x00E4\x00E6\x00C7\x00E3\x00C8\x00D1" + LOCALE_SABBREVMONTHNAME12 "\x00CF\x00D3\x00C7\x00E3\x00C8\x00D1" LOCALE_SABBREVMONTHNAME13 "" LOCALE_SCOUNTRY "Iran" - LOCALE_SCURRENCY "" + LOCALE_SCURRENCY "\x00D1\x00ED 00C7\x00E1" LOCALE_SDATE "/" - LOCALE_SDAYNAME1 "" - LOCALE_SDAYNAME2 "" - LOCALE_SDAYNAME3 "" - LOCALE_SDAYNAME4 "" - LOCALE_SDAYNAME5 "" - LOCALE_SDAYNAME6 "" - LOCALE_SDAYNAME7 "" + LOCALE_SDAYNAME1 "\x00CF\x00E6\x00D4\x00E4\x00C8\x00E5" + LOCALE_SDAYNAME2 "\x00D3\x00E5\x00A0\x00D4\x00E4\x00C8\x00E5" + LOCALE_SDAYNAME3 "\x008D\x00E5\x00C7\x00D1\x00D4\x00E4\x00C8\x00E5" + LOCALE_SDAYNAME4 "\x0081\x00E4\x00CC\x00D4\x00E4\x00C8\x00E5" + LOCALE_SDAYNAME5 "\x00CC\x00E3\x00DA\x00E5" + LOCALE_SDAYNAME6 "\x00D4\x00E4\x00C8\x00E5" + LOCALE_SDAYNAME7 "\x00ED\x00DF\x00D4\x00E4\x00C8\x00E5" LOCALE_SDECIMAL "." LOCALE_SENGCOUNTRY "Iran" LOCALE_SENGCURRNAME "Iranian Rial" @@ -107,25 +107,25 @@ STRINGTABLE LANGUAGE LANG_FARSI, SUBLANG_DEFAULT LOCALE_SLONGDATE "yyyy/MM/dd" LOCALE_SMONDECIMALSEP "/" LOCALE_SMONGROUPING "3;0" - LOCALE_SMONTHNAME1 "" - LOCALE_SMONTHNAME2 "" - LOCALE_SMONTHNAME3 "" - LOCALE_SMONTHNAME4 "" - LOCALE_SMONTHNAME5 "" - LOCALE_SMONTHNAME6 "" - LOCALE_SMONTHNAME7 "" - LOCALE_SMONTHNAME8 "" - LOCALE_SMONTHNAME9 "Ӂ" - LOCALE_SMONTHNAME10 "" - LOCALE_SMONTHNAME11 "" - LOCALE_SMONTHNAME12 "" + LOCALE_SMONTHNAME1 "\x017D\x00C7\x00E4\x00E6\x00ED\x00E5" + LOCALE_SMONTHNAME2 "\x00DD\x00E6\x00D1\x00ED\x00E5" + LOCALE_SMONTHNAME3 "\x00E3\x00C7\x00D1\x00D3" + LOCALE_SMONTHNAME4 "\x00C2\x00E6\x00D1\x00ED\x00E1" + LOCALE_SMONTHNAME5 "\x00E3\x00EC" + LOCALE_SMONTHNAME6 "\x017D\x00E6\x00C6\x00E4" + LOCALE_SMONTHNAME7 "\x017D\x00E6\x00C6\x00ED\x00E5" + LOCALE_SMONTHNAME8 "\x00C7\x00E6\x00CA" + LOCALE_SMONTHNAME9 "\x00D3\x0081\x00CA\x00C7\x00E3\x00C8\x00D1" + LOCALE_SMONTHNAME10 "\x00C7\x00F5\x00DF\x00CA\x00C8\x00D1" + LOCALE_SMONTHNAME11 "\x00E4\x00E6\x00C7\x00E3\x00C8\x00D1" + LOCALE_SMONTHNAME12 "\x00CF\x00D3\x00C7\x00E3\x00C8\x00D1" LOCALE_SMONTHNAME13 "" LOCALE_SMONTHOUSANDSEP "," LOCALE_SNAME "fa-IR" - LOCALE_SNATIVECTRYNAME "" - LOCALE_SNATIVECURRNAME "" + LOCALE_SNATIVECTRYNAME "\x00C7\x00ED\x00D1\x00C7\x00E4" + LOCALE_SNATIVECURRNAME "\x00D1\x00EC\x00C7\x00E1" LOCALE_SNATIVEDIGITS L"\x06f0\x06f1\x06f2\x06f3\x06f4\x06f5\x06f6\x06f7\x06f8\x06f9" - LOCALE_SNATIVELANGNAME "" + LOCALE_SNATIVELANGNAME "\x00DD\x00C7\x00D1\x00D3\x00EC" LOCALE_SNEGATIVESIGN "-" LOCALE_SPOSITIVESIGN "" LOCALE_SSCRIPTS "Arab;" diff --git a/reactos/dll/win32/kernel32/nls/fos.nls b/reactos/dll/win32/kernel32/nls/fos.nls index b4974b4a4e6..10eea99edf8 100644 --- a/reactos/dll/win32/kernel32/nls/fos.nls +++ b/reactos/dll/win32/kernel32/nls/fos.nls @@ -63,11 +63,11 @@ STRINGTABLE LANGUAGE LANG_FAEROESE, SUBLANG_DEFAULT LOCALE_S1159 "" LOCALE_S2359 "" LOCALE_SABBREVCTRYNAME "FRO" - LOCALE_SABBREVDAYNAME1 "mn" - LOCALE_SABBREVDAYNAME2 "ts" + LOCALE_SABBREVDAYNAME1 "m\x00E1n" + LOCALE_SABBREVDAYNAME2 "t\x00FDs" LOCALE_SABBREVDAYNAME3 "mik" - LOCALE_SABBREVDAYNAME4 "hs" - LOCALE_SABBREVDAYNAME5 "fr" + LOCALE_SABBREVDAYNAME4 "h\x00F3s" + LOCALE_SABBREVDAYNAME5 "fr\x00ED" LOCALE_SABBREVDAYNAME6 "leyg" LOCALE_SABBREVDAYNAME7 "sun" LOCALE_SABBREVLANGNAME "FOS" @@ -87,11 +87,11 @@ STRINGTABLE LANGUAGE LANG_FAEROESE, SUBLANG_DEFAULT LOCALE_SCOUNTRY "Faeroe Islands" LOCALE_SCURRENCY "kr" LOCALE_SDATE "-" - LOCALE_SDAYNAME1 "mnadagur" - LOCALE_SDAYNAME2 "tsdagur" + LOCALE_SDAYNAME1 "m\x00E1nadagur" + LOCALE_SDAYNAME2 "t\x00FDsdagur" LOCALE_SDAYNAME3 "mikudagur" - LOCALE_SDAYNAME4 "hsdagur" - LOCALE_SDAYNAME5 "frggjadagur" + LOCALE_SDAYNAME4 "h\x00F3sdagur" + LOCALE_SDAYNAME5 "fr\x00EDggjadagur" LOCALE_SDAYNAME6 "leygardagur" LOCALE_SDAYNAME7 "sunnudagur" LOCALE_SDECIMAL "," @@ -110,7 +110,7 @@ STRINGTABLE LANGUAGE LANG_FAEROESE, SUBLANG_DEFAULT LOCALE_SMONTHNAME1 "januar" LOCALE_SMONTHNAME2 "februar" LOCALE_SMONTHNAME3 "mars" - LOCALE_SMONTHNAME4 "aprl" + LOCALE_SMONTHNAME4 "apr\x00EDl" LOCALE_SMONTHNAME5 "mai" LOCALE_SMONTHNAME6 "juni" LOCALE_SMONTHNAME7 "juli" @@ -122,10 +122,10 @@ STRINGTABLE LANGUAGE LANG_FAEROESE, SUBLANG_DEFAULT LOCALE_SMONTHNAME13 "" LOCALE_SMONTHOUSANDSEP "." LOCALE_SNAME "fo-FO" - LOCALE_SNATIVECTRYNAME "Froyar" + LOCALE_SNATIVECTRYNAME "F\x00F8royar" LOCALE_SNATIVECURRNAME "Dansk krone" LOCALE_SNATIVEDIGITS "0123456789" - LOCALE_SNATIVELANGNAME "froyskt" + LOCALE_SNATIVELANGNAME "f\x00F8royskt" LOCALE_SNEGATIVESIGN "-" LOCALE_SPOSITIVESIGN "" LOCALE_SSCRIPTS "Latn;" @@ -148,7 +148,7 @@ STRINGTABLE LANGUAGE LANG_FAEROESE, SUBLANG_DEFAULT LGRPID_SIMPLIFIED_CHINESE+LGRPID_RES_BASE "Simplified Chinese" LGRPID_THAI+LGRPID_RES_BASE "Thai" LGRPID_HEBREW+LGRPID_RES_BASE "Hebrew" - LGRPID_ARABIC+LGRPID_RES_BASE "Arabic" + LGRPID_ARABIC+LGRPID_RES_BASE "Arabic" LGRPID_VIETNAMESE+LGRPID_RES_BASE "Vietnamese" LGRPID_INDIC+LGRPID_RES_BASE "Indic" LGRPID_GEORGIAN+LGRPID_RES_BASE "Georgian" diff --git a/reactos/dll/win32/kernel32/nls/hrv.nls b/reactos/dll/win32/kernel32/nls/hrv.nls index 78a83663e77..38d827bfb48 100644 --- a/reactos/dll/win32/kernel32/nls/hrv.nls +++ b/reactos/dll/win32/kernel32/nls/hrv.nls @@ -66,14 +66,14 @@ STRINGTABLE LANGUAGE LANG_SERBIAN, SUBLANG_DEFAULT LOCALE_SABBREVDAYNAME1 "pon" LOCALE_SABBREVDAYNAME2 "uto" LOCALE_SABBREVDAYNAME3 "sri" - LOCALE_SABBREVDAYNAME4 "et" + LOCALE_SABBREVDAYNAME4 "\x00E8et" LOCALE_SABBREVDAYNAME5 "pet" LOCALE_SABBREVDAYNAME6 "sub" LOCALE_SABBREVDAYNAME7 "ned" LOCALE_SABBREVLANGNAME "HRV" LOCALE_SABBREVMONTHNAME1 "sij" LOCALE_SABBREVMONTHNAME2 "vlj" - LOCALE_SABBREVMONTHNAME3 "ou" + LOCALE_SABBREVMONTHNAME3 "o\x017Eu" LOCALE_SABBREVMONTHNAME4 "tra" LOCALE_SABBREVMONTHNAME5 "svi" LOCALE_SABBREVMONTHNAME6 "lip" @@ -90,7 +90,7 @@ STRINGTABLE LANGUAGE LANG_SERBIAN, SUBLANG_DEFAULT LOCALE_SDAYNAME1 "ponedjeljak" LOCALE_SDAYNAME2 "utorak" LOCALE_SDAYNAME3 "srijeda" - LOCALE_SDAYNAME4 "etvrtak" + LOCALE_SDAYNAME4 "\x00E8etvrtak" LOCALE_SDAYNAME5 "petak" LOCALE_SDAYNAME6 "subota" LOCALE_SDAYNAME7 "nedjelja" @@ -107,9 +107,9 @@ STRINGTABLE LANGUAGE LANG_SERBIAN, SUBLANG_DEFAULT LOCALE_SLONGDATE "d. MMMM yyyy" LOCALE_SMONDECIMALSEP "," LOCALE_SMONGROUPING "3;0" - LOCALE_SMONTHNAME1 "sijeanj" - LOCALE_SMONTHNAME2 "veljaa" - LOCALE_SMONTHNAME3 "oujak" + LOCALE_SMONTHNAME1 "sije\x00E8anj" + LOCALE_SMONTHNAME2 "velja\x00E8a" + LOCALE_SMONTHNAME3 "o\x017Eujak" LOCALE_SMONTHNAME4 "travanj" LOCALE_SMONTHNAME5 "svibanj" LOCALE_SMONTHNAME6 "lipanj" diff --git a/reactos/dll/win32/kernel32/nls/mon.nls b/reactos/dll/win32/kernel32/nls/mon.nls index 72d7e3f1ef7..0dc4dea725d 100644 --- a/reactos/dll/win32/kernel32/nls/mon.nls +++ b/reactos/dll/win32/kernel32/nls/mon.nls @@ -63,13 +63,13 @@ STRINGTABLE LANGUAGE LANG_MONGOLIAN, SUBLANG_DEFAULT LOCALE_S1159 "" LOCALE_S2359 "" LOCALE_SABBREVCTRYNAME "MNG" - LOCALE_SABBREVDAYNAME1 "" - LOCALE_SABBREVDAYNAME2 "" - LOCALE_SABBREVDAYNAME3 "" - LOCALE_SABBREVDAYNAME4 L"\x041f\x04af" - LOCALE_SABBREVDAYNAME5 "" - LOCALE_SABBREVDAYNAME6 "" - LOCALE_SABBREVDAYNAME7 "" + LOCALE_SABBREVDAYNAME1 "\x041f\x04af" + LOCALE_SABBREVDAYNAME2 "\x041f\x04af" + LOCALE_SABBREVDAYNAME3 "\x041f\x04af" + LOCALE_SABBREVDAYNAME4 "\x041f\x04af" + LOCALE_SABBREVDAYNAME5 "\x041f\x04af" + LOCALE_SABBREVDAYNAME6 "\x041f\x04af" + LOCALE_SABBREVDAYNAME7 "\x041f\x04af" LOCALE_SABBREVLANGNAME "MON" LOCALE_SABBREVMONTHNAME1 "I" LOCALE_SABBREVMONTHNAME2 "II" @@ -78,7 +78,7 @@ STRINGTABLE LANGUAGE LANG_MONGOLIAN, SUBLANG_DEFAULT LOCALE_SABBREVMONTHNAME5 "V" LOCALE_SABBREVMONTHNAME6 "VI" LOCALE_SABBREVMONTHNAME7 "VII" - LOCALE_SABBREVMONTHNAME8 "V" + LOCALE_SABBREVMONTHNAME8 "V\x0000" LOCALE_SABBREVMONTHNAME9 "IX" LOCALE_SABBREVMONTHNAME10 "X" LOCALE_SABBREVMONTHNAME11 "XI" @@ -87,13 +87,13 @@ STRINGTABLE LANGUAGE LANG_MONGOLIAN, SUBLANG_DEFAULT LOCALE_SCOUNTRY "Mongolia" LOCALE_SCURRENCY L"\x20ae" LOCALE_SDATE "." - LOCALE_SDAYNAME1 "" - LOCALE_SDAYNAME2 "" - LOCALE_SDAYNAME3 "" + LOCALE_SDAYNAME1 "\x0000\x0000\x0000\x0000\x0000" + LOCALE_SDAYNAME2 "\x0000\x0000\x0000\x0000\x0000\x0000" + LOCALE_SDAYNAME3 "\x0000\x0000\x0000\x0000\x0000\x0000" LOCALE_SDAYNAME4 L"\x041f\x04af\x0440\x044d\x0432" - LOCALE_SDAYNAME5 "" - LOCALE_SDAYNAME6 "" - LOCALE_SDAYNAME7 "" + LOCALE_SDAYNAME5 "\x0000\x0000\x0000\x0000\x0000\x0000" + LOCALE_SDAYNAME6 "\x0000\x0000\x0000\x0000\x0000" + LOCALE_SDAYNAME7 "\x0000\x0000\x0000" LOCALE_SDECIMAL "," LOCALE_SENGCOUNTRY "Mongolia" LOCALE_SENGCURRNAME "Tugrik" @@ -104,37 +104,37 @@ STRINGTABLE LANGUAGE LANG_MONGOLIAN, SUBLANG_DEFAULT LOCALE_SISO639LANGNAME "mn" LOCALE_SLANGUAGE "Mongolian (Cyrillic)" LOCALE_SLIST ";" - LOCALE_SLONGDATE "yyyy '' MMMM d" + LOCALE_SLONGDATE "yyyy '\x0000\x0000\x0000' MMMM d" LOCALE_SMONDECIMALSEP "," LOCALE_SMONGROUPING "3;0" LOCALE_SMONTHNAME1 L"1\x00a0\x0434\x04af\x0433\x044d\x044d\x0440\x00a0\x0441\x0430\x0440" - LOCALE_SMONTHNAME2 "2" - LOCALE_SMONTHNAME3 "3" - LOCALE_SMONTHNAME4 L"4\x00a0\x0434\x04af\x0433\x044d\x044d\x0440\x00a0\x0441\x0430\x0440" - LOCALE_SMONTHNAME5 "5" - LOCALE_SMONTHNAME6 "6" - LOCALE_SMONTHNAME7 "7" - LOCALE_SMONTHNAME8 "8" - LOCALE_SMONTHNAME9 L"9\x00a0\x0434\x04af\x0433\x044d\x044d\x0440\x00a0\x0441\x0430\x0440" - LOCALE_SMONTHNAME10 "10" - LOCALE_SMONTHNAME11 L"11\x00a0\x0434\x04af\x0433\x044d\x044d\x0440\x00a0\x0441\x0430\x0440" - LOCALE_SMONTHNAME12 "12" + LOCALE_SMONTHNAME2 "2\x00a0\x0434\x04af\x0433\x044d\x044d\x0440\x00a0\x0441\x0430\x0440" + LOCALE_SMONTHNAME3 "3\x00a0\x0434\x04af\x0433\x044d\x044d\x0440\x00a0\x0441\x0430\x0440" + LOCALE_SMONTHNAME4 "4\x00a0\x0434\x04af\x0433\x044d\x044d\x0440\x00a0\x0441\x0430\x0440" + LOCALE_SMONTHNAME5 "5\x00a0\x0434\x04af\x0433\x044d\x044d\x0440\x00a0\x0441\x0430\x0440" + LOCALE_SMONTHNAME6 "6\x00a0\x0434\x04af\x0433\x044d\x044d\x0440\x00a0\x0441\x0430\x0440" + LOCALE_SMONTHNAME7 "7\x00a0\x0434\x04af\x0433\x044d\x044d\x0440\x00a0\x0441\x0430\x0440" + LOCALE_SMONTHNAME8 "8\x00a0\x0434\x04af\x0433\x044d\x044d\x0440\x00a0\x0441\x0430\x0440" + LOCALE_SMONTHNAME9 "9\x00a0\x0434\x04af\x0433\x044d\x044d\x0440\x00a0\x0441\x0430\x0440" + LOCALE_SMONTHNAME10 "10\x00a0\x0434\x04af\x0433\x044d\x044d\x0440\x00a0\x0441\x0430\x0440" + LOCALE_SMONTHNAME11 "11\x00a0\x0434\x04af\x0433\x044d\x044d\x0440\x00a0\x0441\x0430\x0440" + LOCALE_SMONTHNAME12 "12\x00a0\x0434\x04af\x0433\x044d\x044d\x0440\x00a0\x0441\x0430\x0440" LOCALE_SMONTHNAME13 "" - LOCALE_SMONTHOUSANDSEP "" + LOCALE_SMONTHOUSANDSEP "." LOCALE_SNAME "mn-MN" - LOCALE_SNATIVECTRYNAME "" + LOCALE_SNATIVECTRYNAME "\x0000\x0000\x0000í\x0000ã\x0000\x0000 \x0000ó\x0000\x0441" LOCALE_SNATIVECURRNAME L"\x0422\x04e9\x0433\x0440\x04e9\x0433" LOCALE_SNATIVEDIGITS "0123456789" - LOCALE_SNATIVELANGNAME "" + LOCALE_SNATIVELANGNAME "\x0000\x0000\x0000\x0000\x0000\x0000 \x0000\x0000\x0000" LOCALE_SNEGATIVESIGN "-" LOCALE_SPOSITIVESIGN "" LOCALE_SSCRIPTS "Cyrl;" LOCALE_SSHORTDATE "yy.MM.dd" LOCALE_SSORTNAME "Default" - LOCALE_STHOUSAND "" + LOCALE_STHOUSAND " " LOCALE_STIME ":" LOCALE_STIMEFORMAT "H:mm:ss" - LOCALE_SYEARMONTH "yyyy '' MMMM" + LOCALE_SYEARMONTH "yyyy '\x0000\x0000' MMMM" LGRPID_WESTERN_EUROPE+LGRPID_RES_BASE "Western Europe and United States" LGRPID_CENTRAL_EUROPE+LGRPID_RES_BASE "Central Europe" diff --git a/reactos/dll/win32/mpr/mpr_Bg.rc b/reactos/dll/win32/mpr/mpr_Bg.rc index 7b0597a1695..a3f15a6c87c 100644 --- a/reactos/dll/win32/mpr/mpr_Bg.rc +++ b/reactos/dll/win32/mpr/mpr_Bg.rc @@ -37,8 +37,8 @@ FONT 8, "MS Shell Dlg" /* LTEXT "Realm", -1, 40, 46, 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 + 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 "&Save this password (Insecure)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/mpr/mpr_Cs.rc b/reactos/dll/win32/mpr/mpr_Cs.rc index aa86f93b71a..2bbdf3b1804 100644 --- a/reactos/dll/win32/mpr/mpr_Cs.rc +++ b/reactos/dll/win32/mpr/mpr_Cs.rc @@ -40,8 +40,8 @@ FONT 8, "MS Shell Dlg" /* LTEXT "Realm", -1, 40, 46, 50, 10 */ LTEXT "Uivatel", -1, 40, 66, 50, 10 LTEXT "Heslo", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Uloit toto heslo (Nen bezpen) ?", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/mpr/mpr_Da.rc b/reactos/dll/win32/mpr/mpr_Da.rc index 8a8ea2cc5a1..ae03903a2f4 100644 --- a/reactos/dll/win32/mpr/mpr_Da.rc +++ b/reactos/dll/win32/mpr/mpr_Da.rc @@ -37,8 +37,8 @@ FONT 8, "MS Shell Dlg" /* LTEXT "Realm", -1, 40, 46, 50, 10 */ LTEXT "Brugernavn", -1, 40, 66, 50, 10 LTEXT "Kodeord", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "Gem dette ko&deord (usikkert)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/mpr/mpr_De.rc b/reactos/dll/win32/mpr/mpr_De.rc index 483d6890b37..566529f89fb 100644 --- a/reactos/dll/win32/mpr/mpr_De.rc +++ b/reactos/dll/win32/mpr/mpr_De.rc @@ -39,8 +39,8 @@ FONT 8, "MS Shell Dlg" /* LTEXT "Bereich", -1, 40, 46, 50, 10 */ LTEXT "Benutzername", -1, 40, 66, 50, 10 LTEXT "Kennwort", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "Dieses Kennwort speichern (unsicher)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/mpr/mpr_En.rc b/reactos/dll/win32/mpr/mpr_En.rc index 8853e0c0960..cf369c60f9e 100644 --- a/reactos/dll/win32/mpr/mpr_En.rc +++ b/reactos/dll/win32/mpr/mpr_En.rc @@ -37,8 +37,8 @@ FONT 8, "MS Shell Dlg" /* LTEXT "Realm", -1, 40, 46, 50, 10 */ LTEXT "User", -1, 40, 66, 50, 10 LTEXT "Password", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Save this password (Insecure)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/mpr/mpr_Es.rc b/reactos/dll/win32/mpr/mpr_Es.rc index 5506621093b..72951354830 100644 --- a/reactos/dll/win32/mpr/mpr_Es.rc +++ b/reactos/dll/win32/mpr/mpr_Es.rc @@ -37,8 +37,8 @@ FONT 8, "MS Shell Dlg" /* LTEXT "Realm", -1, 40, 46, 50, 10 */ LTEXT "Usuario", -1, 40, 66, 50, 10 LTEXT "Contrasea", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Guardar esta contrasea (Inseguro)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/mpr/mpr_Fr.rc b/reactos/dll/win32/mpr/mpr_Fr.rc index be77a2e6b6b..700afc10c04 100644 --- a/reactos/dll/win32/mpr/mpr_Fr.rc +++ b/reactos/dll/win32/mpr/mpr_Fr.rc @@ -41,8 +41,8 @@ FONT 8, "MS Shell Dlg" /* LTEXT "Realm", -1, 40, 46, 50, 10 */ LTEXT "Utilisateur", -1, 10, 68, 45, 10 LTEXT "Mot de passe", -1, 10, 88, 45, 10 - LTEXT "" IDC_PROXY, 56, 32, 144, 14, 0 - LTEXT "" IDC_REALM, 56, 46, 144, 14, 0 + LTEXT "", IDC_PROXY, 56, 32, 144, 14, 0 + LTEXT "", IDC_REALM, 56, 46, 144, 14, 0 EDITTEXT IDC_USERNAME, 56, 66, 144, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP EDITTEXT IDC_PASSWORD, 56, 86, 144, 14, ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP | ES_PASSWORD CHECKBOX "&Enregistrer ce mot de passe (risqué)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/mpr/mpr_Hu.rc b/reactos/dll/win32/mpr/mpr_Hu.rc index a6a4cc4aecf..9870a6dd0d2 100644 --- a/reactos/dll/win32/mpr/mpr_Hu.rc +++ b/reactos/dll/win32/mpr/mpr_Hu.rc @@ -37,8 +37,8 @@ FONT 8, "MS Shell Dlg" /* LTEXT "Realm", -1, 40, 46, 50, 10 */ LTEXT "Felhasznlnv", -1, 40, 66, 50, 10 LTEXT "Jelsz", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Jelsz mentse (nem biztonsgos)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/mpr/mpr_It.rc b/reactos/dll/win32/mpr/mpr_It.rc index a174b84d4b2..3a6a2f86661 100644 --- a/reactos/dll/win32/mpr/mpr_It.rc +++ b/reactos/dll/win32/mpr/mpr_It.rc @@ -38,8 +38,8 @@ LTEXT "Proxy", -1, 40, 26, 50, 10 /* LTEXT "Realm", -1, 40, 46, 50, 10 */ LTEXT "Utente", -1, 40, 66, 50, 10 LTEXT "Password", -1, 40, 86, 50, 10 -LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 -LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 +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 "&Memorizza la password ( RISCHIOSO! )", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/mpr/mpr_Ja.rc b/reactos/dll/win32/mpr/mpr_Ja.rc index f806a2fa42b..0bd8ac57537 100644 --- a/reactos/dll/win32/mpr/mpr_Ja.rc +++ b/reactos/dll/win32/mpr/mpr_Ja.rc @@ -40,8 +40,8 @@ FONT 8, "MS Shell Dlg" /* LTEXT "Realm", -1, 40, 46, 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 + 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 "パスワードを保存する(&S)(セキュアではありません)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/mpr/mpr_Ko.rc b/reactos/dll/win32/mpr/mpr_Ko.rc index d708fbf5978..13bc0b8c82a 100644 --- a/reactos/dll/win32/mpr/mpr_Ko.rc +++ b/reactos/dll/win32/mpr/mpr_Ko.rc @@ -38,8 +38,8 @@ FONT 9, "MS Shell Dlg" /* LTEXT "Realm", -1, 40, 46, 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 + 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 "ȣ (&S) (ȿ )", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/mpr/mpr_Lt.rc b/reactos/dll/win32/mpr/mpr_Lt.rc index 5164d261d17..b72fe1d432a 100644 --- a/reactos/dll/win32/mpr/mpr_Lt.rc +++ b/reactos/dll/win32/mpr/mpr_Lt.rc @@ -40,8 +40,8 @@ FONT 8, "MS Shell Dlg" /* LTEXT "Sritis", -1, 40, 46, 50, 10 */ LTEXT "Naudotojas", -1, 40, 66, 50, 10 LTEXT "Slaptažodis", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "Į&rašyti šį slaptažodį (nesaugu)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/mpr/mpr_Nl.rc b/reactos/dll/win32/mpr/mpr_Nl.rc index f28107a3587..611539fbf49 100644 --- a/reactos/dll/win32/mpr/mpr_Nl.rc +++ b/reactos/dll/win32/mpr/mpr_Nl.rc @@ -38,8 +38,8 @@ FONT 8, "MS Shell Dlg" /* LTEXT "Realm", -1, 40, 46, 50, 10 */ LTEXT "Gebruiker", -1, 40, 66, 50, 10 LTEXT "Wachtwoord", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Sla dit wachtwoord op (Onveilig)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/mpr/mpr_No.rc b/reactos/dll/win32/mpr/mpr_No.rc index 181c8589166..3035508bf40 100644 --- a/reactos/dll/win32/mpr/mpr_No.rc +++ b/reactos/dll/win32/mpr/mpr_No.rc @@ -37,8 +37,8 @@ FONT 8, "MS Shell Dlg" /* LTEXT "Omrde", -1, 40, 46, 50, 10 */ LTEXT "Bruker", -1, 40, 66, 50, 10 LTEXT "Passord", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "Lagre dette pa&ssordet (usikkert)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/mpr/mpr_Pl.rc b/reactos/dll/win32/mpr/mpr_Pl.rc index c47ef92fbe2..90a5fa1ee5e 100644 --- a/reactos/dll/win32/mpr/mpr_Pl.rc +++ b/reactos/dll/win32/mpr/mpr_Pl.rc @@ -38,8 +38,8 @@ FONT 8, "MS Shell Dlg" /* LTEXT "Obszar", -1, 40, 46, 50, 10 */ LTEXT "Uytkownik", -1, 40, 66, 50, 10 LTEXT "Haso", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Zapisz to haso (niebezpieczne)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/mpr/mpr_Pt.rc b/reactos/dll/win32/mpr/mpr_Pt.rc index 08509687231..27527a06985 100644 --- a/reactos/dll/win32/mpr/mpr_Pt.rc +++ b/reactos/dll/win32/mpr/mpr_Pt.rc @@ -43,8 +43,8 @@ FONT 8, "MS Shell Dlg" /* LTEXT "Realm", -1, 40, 46, 50, 10 */ LTEXT "Usuário", -1, 40, 66, 50, 10 LTEXT "Senha", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Salvar esta senha (Inseguro)", IDC_SAVEPASSWORD, @@ -65,8 +65,8 @@ FONT 8, "MS Shell Dlg" /* LTEXT "Realm", -1, 40, 46, 50, 10 */ LTEXT "Utilizador", -1, 40, 66, 50, 10 LTEXT "Senha", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Gravar esta senha (Inseguro)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/mpr/mpr_Ro.rc b/reactos/dll/win32/mpr/mpr_Ro.rc index 6a97a965e45..ead1d420933 100644 --- a/reactos/dll/win32/mpr/mpr_Ro.rc +++ b/reactos/dll/win32/mpr/mpr_Ro.rc @@ -37,8 +37,8 @@ FONT 8, "MS Shell Dlg" LTEXT "Proxy", -1, 40, 26, 50, 10 LTEXT "Utilizator", -1, 40, 66, 50, 10 LTEXT "Parolă", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Salvează această parolă (nesigur)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/mpr/mpr_Ru.rc b/reactos/dll/win32/mpr/mpr_Ru.rc index 2949120f29a..1e1ffe76581 100644 --- a/reactos/dll/win32/mpr/mpr_Ru.rc +++ b/reactos/dll/win32/mpr/mpr_Ru.rc @@ -40,8 +40,8 @@ FONT 8, "MS Shell Dlg" /* LTEXT "Realm", -1, 40, 46, 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 + 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, diff --git a/reactos/dll/win32/mpr/mpr_Si.rc b/reactos/dll/win32/mpr/mpr_Si.rc index bec79d3fa69..c9098f2abd5 100644 --- a/reactos/dll/win32/mpr/mpr_Si.rc +++ b/reactos/dll/win32/mpr/mpr_Si.rc @@ -39,8 +39,8 @@ FONT 8, "MS Shell Dlg" /* LTEXT "Kraljestvo", -1, 40, 46, 50, 10 */ LTEXT "Uporabniško ime", -1, 40, 66, 50, 10 LTEXT "Geslo", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Shrani geslo (nezaščiteno)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/mpr/mpr_Sv.rc b/reactos/dll/win32/mpr/mpr_Sv.rc index e069a19401d..c1da38ca846 100644 --- a/reactos/dll/win32/mpr/mpr_Sv.rc +++ b/reactos/dll/win32/mpr/mpr_Sv.rc @@ -37,8 +37,8 @@ FONT 8, "MS Shell Dlg" /* LTEXT "Realm", -1, 40, 46, 50, 10 */ LTEXT "Anvndare", -1, 40, 66, 50, 10 LTEXT "Lsenord", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Spara detta lsenord (oskert)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/mpr/mpr_Tr.rc b/reactos/dll/win32/mpr/mpr_Tr.rc index 6cb99c2d86d..5890e7bd5fb 100644 --- a/reactos/dll/win32/mpr/mpr_Tr.rc +++ b/reactos/dll/win32/mpr/mpr_Tr.rc @@ -37,8 +37,8 @@ FONT 8, "MS Shell Dlg" /* LTEXT "Realm", -1, 40, 46, 50, 10 */ LTEXT "Kullanc", -1, 40, 66, 50, 10 LTEXT "Parola", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "Bu parolay &sakla (Gvensiz)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/mpr/mpr_Uk.rc b/reactos/dll/win32/mpr/mpr_Uk.rc index e4ffc2e8fde..35ddf3c48e0 100644 --- a/reactos/dll/win32/mpr/mpr_Uk.rc +++ b/reactos/dll/win32/mpr/mpr_Uk.rc @@ -41,8 +41,8 @@ FONT 8, "MS Shell Dlg" /* LTEXT "Realm", -1, 40, 46, 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 + 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, diff --git a/reactos/dll/win32/mpr/mpr_Zh.rc b/reactos/dll/win32/mpr/mpr_Zh.rc index 0f11e7727d1..bd82626cd9a 100644 --- a/reactos/dll/win32/mpr/mpr_Zh.rc +++ b/reactos/dll/win32/mpr/mpr_Zh.rc @@ -40,8 +40,8 @@ FONT 9, "MS Shell Dlg" /* LTEXT "Realm", -1, 40, 46, 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 + 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 "保存密码(不安全)(&S)", IDC_SAVEPASSWORD, @@ -67,8 +67,8 @@ FONT 9, "MS Shell Dlg" /* LTEXT "Realm", -1, 40, 46, 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 + 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 "儲存密碼(不安全)(&S)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/shdoclc/Es.rc b/reactos/dll/win32/shdoclc/Es.rc index e7700f0bf5b..52d6a23d283 100644 --- a/reactos/dll/win32/shdoclc/Es.rc +++ b/reactos/dll/win32/shdoclc/Es.rc @@ -68,7 +68,7 @@ IDR_BROWSE_CONTEXT_MENU MENU MENUITEM "Guardar en&lace como...", IDM_SAVETARGET MENUITEM "&Imprimir enlace", IDM_PRINTTARGET MENUITEM SEPARATOR - MENUITEM "M&ostrar imagen" IDM_SHOWPICTURE + MENUITEM "M&ostrar imagen", IDM_SHOWPICTURE MENUITEM "G&uardar imagen como...", IDM_SAVEPICTURE MENUITEM "&Enviar por correo...", IDM_MP_EMAILPICTURE MENUITEM "I&mprimir imagen...", IDM_MP_PRINTPICTURE @@ -132,7 +132,7 @@ IDR_BROWSE_CONTEXT_MENU MENU MENUITEM "&Guardar enlace como...", IDM_SAVETARGET MENUITEM "&Imprimir enlace", IDM_PRINTTARGET MENUITEM SEPARATOR - MENUITEM "Cor&tar" IDM_CUT + MENUITEM "Cor&tar", IDM_CUT MENUITEM "&Copiar", IDM_COPY MENUITEM "C&opiar acceso directo", IDM_COPYSHORTCUT MENUITEM "&Pegar", IDM_PASTE @@ -160,7 +160,7 @@ IDR_BROWSE_CONTEXT_MENU MENU MENUITEM "Pon&er como fondo", IDM_SETWALLPAPER MENUITEM "Aa&dir al escritorio...", IDM_SETDESKTOPITEM MENUITEM SEPARATOR - MENUITEM "Cor&tar" IDM_CUT + MENUITEM "Cor&tar", IDM_CUT MENUITEM "&Copiar", IDM_COPY MENUITEM "C&opiar acceso directo", IDM_COPYSHORTCUT MENUITEM "Pe&gar", IDM_PASTE @@ -224,7 +224,7 @@ IDR_BROWSE_CONTEXT_MENU MENU { MENUITEM "Desplazar &aqu", IDM_SCROLL_HERE MENUITEM SEPARATOR - MENUITEM "&Principio" IDM_SCROLL_TOP + MENUITEM "&Principio", IDM_SCROLL_TOP MENUITEM "&Final", IDM_SCROLL_BOTTOM MENUITEM SEPARATOR MENUITEM "Pgina a&rriba", IDM_SCROLL_PAGEUP diff --git a/reactos/dll/win32/shdocvw/De.rc b/reactos/dll/win32/shdocvw/De.rc index 560d93deb1f..9e5a50b30b9 100644 --- a/reactos/dll/win32/shdocvw/De.rc +++ b/reactos/dll/win32/shdocvw/De.rc @@ -40,7 +40,7 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&Neu" { - MENUITEM "&Fenster" ID_BROWSE_NEW_WINDOW + MENUITEM "&Fenster", ID_BROWSE_NEW_WINDOW } MENUITEM "Ö&ffnen...", ID_BROWSE_OPEN MENUITEM "&Speichern", ID_BROWSE_SAVE @@ -57,13 +57,13 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&Symbolleisten" { - MENUITEM "&Standard" ID_BROWSE_BAR_STD - MENUITEM "&Adressleiste" ID_BROWSE_BAR_ADDR + MENUITEM "&Standard", ID_BROWSE_BAR_STD + MENUITEM "&Adressleiste", ID_BROWSE_BAR_ADDR } } POPUP "&Favoriten" { - MENUITEM "&Zu den Favoriten hinzufügen..." ID_BROWSE_ADDFAV + MENUITEM "&Zu den Favoriten hinzufügen...", ID_BROWSE_ADDFAV MENUITEM SEPARATOR } POPUP "&Hilfe" diff --git a/reactos/dll/win32/shdocvw/En.rc b/reactos/dll/win32/shdocvw/En.rc index 7a4fe78bf61..9e0bd2beadc 100644 --- a/reactos/dll/win32/shdocvw/En.rc +++ b/reactos/dll/win32/shdocvw/En.rc @@ -38,7 +38,7 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&New" { - MENUITEM "&Window" ID_BROWSE_NEW_WINDOW + MENUITEM "&Window", ID_BROWSE_NEW_WINDOW } MENUITEM "&Open...", ID_BROWSE_OPEN MENUITEM "&Save", ID_BROWSE_SAVE @@ -55,13 +55,13 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&Toolbars" { - MENUITEM "&Standard bar" ID_BROWSE_BAR_STD - MENUITEM "&Address bar" ID_BROWSE_BAR_ADDR + MENUITEM "&Standard bar", ID_BROWSE_BAR_STD + MENUITEM "&Address bar", ID_BROWSE_BAR_ADDR } } POPUP "&Favorites" { - MENUITEM "&Add to Favorites..." ID_BROWSE_ADDFAV + MENUITEM "&Add to Favorites...", ID_BROWSE_ADDFAV MENUITEM SEPARATOR } POPUP "&Help" diff --git a/reactos/dll/win32/shdocvw/Es.rc b/reactos/dll/win32/shdocvw/Es.rc index 39715440998..680f5426baa 100644 --- a/reactos/dll/win32/shdocvw/Es.rc +++ b/reactos/dll/win32/shdocvw/Es.rc @@ -42,7 +42,7 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&Nuevo" { - MENUITEM "&Ventana" ID_BROWSE_NEW_WINDOW + MENUITEM "&Ventana", ID_BROWSE_NEW_WINDOW } MENUITEM "&Abrir...", ID_BROWSE_OPEN MENUITEM "&Guardar", ID_BROWSE_SAVE @@ -58,13 +58,13 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&Barra de herramientas" { - MENUITEM "Barra &estándar" ID_BROWSE_BAR_STD - MENUITEM "Barra de &direcciones" ID_BROWSE_BAR_ADDR + MENUITEM "Barra &estándar", ID_BROWSE_BAR_STD + MENUITEM "Barra de &direcciones", ID_BROWSE_BAR_ADDR } } POPUP "&Favoritos" { - MENUITEM "&Añadir a Favoritos..." ID_BROWSE_ADDFAV + MENUITEM "&Añadir a Favoritos...", ID_BROWSE_ADDFAV MENUITEM SEPARATOR } POPUP "A&yuda" diff --git a/reactos/dll/win32/shdocvw/Fr.rc b/reactos/dll/win32/shdocvw/Fr.rc index 1e17409b7f9..bbc7eae32b3 100644 --- a/reactos/dll/win32/shdocvw/Fr.rc +++ b/reactos/dll/win32/shdocvw/Fr.rc @@ -43,7 +43,7 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&Nouvelle" { - MENUITEM "&Fenêtre" ID_BROWSE_NEW_WINDOW + MENUITEM "&Fenêtre", ID_BROWSE_NEW_WINDOW } MENUITEM "&Ouvrir...", ID_BROWSE_OPEN MENUITEM "&Enregistrer", ID_BROWSE_SAVE @@ -60,13 +60,13 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&Barres d'outils" { - MENUITEM "Barre &standard" ID_BROWSE_BAR_STD - MENUITEM "Barre d'&adresse" ID_BROWSE_BAR_ADDR + MENUITEM "Barre &standard", ID_BROWSE_BAR_STD + MENUITEM "Barre d'&adresse", ID_BROWSE_BAR_ADDR } } POPUP "&Favoris" { - MENUITEM "&Ajouter aux favoris..." ID_BROWSE_ADDFAV + MENUITEM "&Ajouter aux favoris...", ID_BROWSE_ADDFAV MENUITEM SEPARATOR } POPUP "A&ide" diff --git a/reactos/dll/win32/shdocvw/He.rc b/reactos/dll/win32/shdocvw/He.rc index a2789dfa90a..2b5f4e5593f 100644 --- a/reactos/dll/win32/shdocvw/He.rc +++ b/reactos/dll/win32/shdocvw/He.rc @@ -42,7 +42,7 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&חדש" { - MENUITEM "&חלון" ID_BROWSE_NEW_WINDOW + MENUITEM "&חלון", ID_BROWSE_NEW_WINDOW } MENUITEM "&פתיחה...", ID_BROWSE_OPEN MENUITEM "&שמירה", ID_BROWSE_SAVE @@ -59,13 +59,13 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&סרגלי כלים" { - MENUITEM "סרגל הכלים ה&רגיל" ID_BROWSE_BAR_STD - MENUITEM "סרגל ה&כתובות" ID_BROWSE_BAR_ADDR + MENUITEM "סרגל הכלים ה&רגיל", ID_BROWSE_BAR_STD + MENUITEM "סרגל ה&כתובות", ID_BROWSE_BAR_ADDR } } POPUP "&מועדפים" { - MENUITEM "הו&ספה למועדפים..." ID_BROWSE_ADDFAV + MENUITEM "הו&ספה למועדפים...", ID_BROWSE_ADDFAV MENUITEM SEPARATOR } POPUP "ע&זרה" diff --git a/reactos/dll/win32/shdocvw/It.rc b/reactos/dll/win32/shdocvw/It.rc index 7f39c2b08a2..c86c456d1af 100644 --- a/reactos/dll/win32/shdocvw/It.rc +++ b/reactos/dll/win32/shdocvw/It.rc @@ -42,7 +42,7 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&Nuova" { - MENUITEM "Fin&estra" ID_BROWSE_NEW_WINDOW + MENUITEM "Fin&estra", ID_BROWSE_NEW_WINDOW } MENUITEM "&Apri...", ID_BROWSE_OPEN MENUITEM "&Salva", ID_BROWSE_SAVE @@ -59,13 +59,13 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&Barre degli strumenti" { - MENUITEM "Barra &predefinita" ID_BROWSE_BAR_STD - MENUITEM "Barra dell'&indirizzo" ID_BROWSE_BAR_ADDR + MENUITEM "Barra &predefinita", ID_BROWSE_BAR_STD + MENUITEM "Barra dell'&indirizzo", ID_BROWSE_BAR_ADDR } } POPUP "&Preferiti" { - MENUITEM "&Aggiungi ai Preferiti..." ID_BROWSE_ADDFAV + MENUITEM "&Aggiungi ai Preferiti...", ID_BROWSE_ADDFAV MENUITEM SEPARATOR } POPUP "&Aiuto" diff --git a/reactos/dll/win32/shdocvw/Ko.rc b/reactos/dll/win32/shdocvw/Ko.rc index 613288d945b..7bcfdf3f824 100644 --- a/reactos/dll/win32/shdocvw/Ko.rc +++ b/reactos/dll/win32/shdocvw/Ko.rc @@ -41,7 +41,7 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "새 작업(&N)" { - MENUITEM "창(&W)" ID_BROWSE_NEW_WINDOW + MENUITEM "창(&W)", ID_BROWSE_NEW_WINDOW } MENUITEM "열기(&O)...", ID_BROWSE_OPEN MENUITEM "저장(&S)", ID_BROWSE_SAVE @@ -57,13 +57,13 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "도구바(&T)" { - MENUITEM "표준 바(&S)" ID_BROWSE_BAR_STD - MENUITEM "주소 바(&A)" ID_BROWSE_BAR_ADDR + MENUITEM "표준 바(&S)", ID_BROWSE_BAR_STD + MENUITEM "주소 바(&A)", ID_BROWSE_BAR_ADDR } } POPUP "즐겨찾기(&F)" { - MENUITEM "즐겨찾기 추가(&A)..." ID_BROWSE_ADDFAV + MENUITEM "즐겨찾기 추가(&A)...", ID_BROWSE_ADDFAV MENUITEM SEPARATOR } POPUP "도움말(&H)" diff --git a/reactos/dll/win32/shdocvw/Lt.rc b/reactos/dll/win32/shdocvw/Lt.rc index b9c0b04b2e3..267426770f1 100644 --- a/reactos/dll/win32/shdocvw/Lt.rc +++ b/reactos/dll/win32/shdocvw/Lt.rc @@ -41,7 +41,7 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&Naujas" { - MENUITEM "&Langas" ID_BROWSE_NEW_WINDOW + MENUITEM "&Langas", ID_BROWSE_NEW_WINDOW } MENUITEM "&Atverti...", ID_BROWSE_OPEN MENUITEM "&Išsaugoti", ID_BROWSE_SAVE @@ -58,13 +58,13 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&Įrankių juosta" { - MENUITEM "Į&prastinė juosta" ID_BROWSE_BAR_STD - MENUITEM "&Adreso juosta" ID_BROWSE_BAR_ADDR + MENUITEM "Į&prastinė juosta", ID_BROWSE_BAR_STD + MENUITEM "&Adreso juosta", ID_BROWSE_BAR_ADDR } } POPUP "&Adresynas" { - MENUITEM "Į&rašyti į adresyną..." ID_BROWSE_ADDFAV + MENUITEM "Į&rašyti į adresyną...", ID_BROWSE_ADDFAV MENUITEM SEPARATOR } POPUP "&Žinynas" diff --git a/reactos/dll/win32/shdocvw/Nl.rc b/reactos/dll/win32/shdocvw/Nl.rc index fc5a1f397c0..f7e515d88ba 100644 --- a/reactos/dll/win32/shdocvw/Nl.rc +++ b/reactos/dll/win32/shdocvw/Nl.rc @@ -38,7 +38,7 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&Nieuw" { - MENUITEM "&Venster" ID_BROWSE_NEW_WINDOW + MENUITEM "&Venster", ID_BROWSE_NEW_WINDOW } MENUITEM "&Openen...", ID_BROWSE_OPEN MENUITEM "Op&slaan", ID_BROWSE_SAVE @@ -55,13 +55,13 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&Werkbalken" { - MENUITEM "&Standaardbalk" ID_BROWSE_BAR_STD - MENUITEM "&Adresbalk" ID_BROWSE_BAR_ADDR + MENUITEM "&Standaardbalk", ID_BROWSE_BAR_STD + MENUITEM "&Adresbalk", ID_BROWSE_BAR_ADDR } } POPUP "&Favorieten" { - MENUITEM "&Toevoegen aan Favorieten..." ID_BROWSE_ADDFAV + MENUITEM "&Toevoegen aan Favorieten...", ID_BROWSE_ADDFAV MENUITEM SEPARATOR } POPUP "&Help" diff --git a/reactos/dll/win32/shdocvw/Pt.rc b/reactos/dll/win32/shdocvw/Pt.rc index 9dff39c58c8..c65b89062cd 100644 --- a/reactos/dll/win32/shdocvw/Pt.rc +++ b/reactos/dll/win32/shdocvw/Pt.rc @@ -42,7 +42,7 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&Novo" { - MENUITEM "&Janela" ID_BROWSE_NEW_WINDOW + MENUITEM "&Janela", ID_BROWSE_NEW_WINDOW } MENUITEM "&Abrir...", ID_BROWSE_OPEN MENUITEM "&Salvar", ID_BROWSE_SAVE @@ -59,13 +59,13 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&Ferramentas" { - MENUITEM "Barra &padrão" ID_BROWSE_BAR_STD - MENUITEM "Barra de &endereço" ID_BROWSE_BAR_ADDR + MENUITEM "Barra &padrão", ID_BROWSE_BAR_STD + MENUITEM "Barra de &endereço", ID_BROWSE_BAR_ADDR } } POPUP "&Favoritos" { - MENUITEM "&Adicionar aos Favoritos..." ID_BROWSE_ADDFAV + MENUITEM "&Adicionar aos Favoritos...", ID_BROWSE_ADDFAV MENUITEM SEPARATOR } POPUP "A&juda" diff --git a/reactos/dll/win32/shdocvw/Ro.rc b/reactos/dll/win32/shdocvw/Ro.rc index 38c51caab8d..d417552278a 100644 --- a/reactos/dll/win32/shdocvw/Ro.rc +++ b/reactos/dll/win32/shdocvw/Ro.rc @@ -41,7 +41,7 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&Nou" { - MENUITEM "&Fereastră" ID_BROWSE_NEW_WINDOW + MENUITEM "&Fereastră", ID_BROWSE_NEW_WINDOW } MENUITEM "&Deschidere...", ID_BROWSE_OPEN MENUITEM "&Salvează", ID_BROWSE_SAVE diff --git a/reactos/dll/win32/shdocvw/Si.rc b/reactos/dll/win32/shdocvw/Si.rc index 35d501444c5..8a81a3e36c0 100644 --- a/reactos/dll/win32/shdocvw/Si.rc +++ b/reactos/dll/win32/shdocvw/Si.rc @@ -40,7 +40,7 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&Nov" { - MENUITEM "&Okno" ID_BROWSE_NEW_WINDOW + MENUITEM "&Okno", ID_BROWSE_NEW_WINDOW } MENUITEM "&Odpri ...", ID_BROWSE_OPEN MENUITEM "&Shrani", ID_BROWSE_SAVE @@ -57,18 +57,18 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "Oro&dne vrstice" { - MENUITEM "&Statusna vrstica" ID_BROWSE_BAR_STD - MENUITEM "&Naslovna vrstica" ID_BROWSE_BAR_ADDR + MENUITEM "&Statusna vrstica", ID_BROWSE_BAR_STD + MENUITEM "&Naslovna vrstica", ID_BROWSE_BAR_ADDR } } POPUP "&Priljubljene" { - MENUITEM "&Dodaj med priljubljene ..." ID_BROWSE_ADDFAV + MENUITEM "&Dodaj med priljubljene ...", ID_BROWSE_ADDFAV MENUITEM SEPARATOR } POPUP "&Pomoč" { - MENUITEM "O programu Internet Explorer ...",ID_BROWSE_ABOUT + MENUITEM "O programu Internet Explorer ...", ID_BROWSE_ABOUT } } diff --git a/reactos/dll/win32/shdocvw/Sr.rc b/reactos/dll/win32/shdocvw/Sr.rc index 5fd9e72b9b2..cf32fb06474 100644 --- a/reactos/dll/win32/shdocvw/Sr.rc +++ b/reactos/dll/win32/shdocvw/Sr.rc @@ -41,7 +41,7 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&Ново" { - MENUITEM "&Прозор" ID_BROWSE_NEW_WINDOW + MENUITEM "&Прозор", ID_BROWSE_NEW_WINDOW } MENUITEM "&Отвори...", ID_BROWSE_OPEN MENUITEM "&Сачувај", ID_BROWSE_SAVE @@ -58,13 +58,13 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&Алатнице" { - MENUITEM "&Стандардна трака" ID_BROWSE_BAR_STD - MENUITEM "&Трака за навигацију" ID_BROWSE_BAR_ADDR + MENUITEM "&Стандардна трака", ID_BROWSE_BAR_STD + MENUITEM "&Трака за навигацију", ID_BROWSE_BAR_ADDR } } POPUP "&Омиљено" { - MENUITEM "&Додај у омиљене..." ID_BROWSE_ADDFAV + MENUITEM "&Додај у омиљене...", ID_BROWSE_ADDFAV MENUITEM SEPARATOR } POPUP "&Помоћ" @@ -108,7 +108,7 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&Novo" { - MENUITEM "&Prozor" ID_BROWSE_NEW_WINDOW + MENUITEM "&Prozor", ID_BROWSE_NEW_WINDOW } MENUITEM "&Otvori...", ID_BROWSE_OPEN MENUITEM "&Sačuvaj", ID_BROWSE_SAVE @@ -125,13 +125,13 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&Alatnice" { - MENUITEM "&Standardna traka" ID_BROWSE_BAR_STD - MENUITEM "&Traka za navigaciju" ID_BROWSE_BAR_ADDR + MENUITEM "&Standardna traka", ID_BROWSE_BAR_STD + MENUITEM "&Traka za navigaciju", ID_BROWSE_BAR_ADDR } } POPUP "&Omiljeno" { - MENUITEM "&Dodaj u omiljene..." ID_BROWSE_ADDFAV + MENUITEM "&Dodaj u omiljene...", ID_BROWSE_ADDFAV MENUITEM SEPARATOR } POPUP "&Pomoć" diff --git a/reactos/dll/win32/shdocvw/Sv.rc b/reactos/dll/win32/shdocvw/Sv.rc index f71d4edf311..d79e2c49e48 100644 --- a/reactos/dll/win32/shdocvw/Sv.rc +++ b/reactos/dll/win32/shdocvw/Sv.rc @@ -40,7 +40,7 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&Nytt" { - MENUITEM "&Fönster" ID_BROWSE_NEW_WINDOW + MENUITEM "&Fönster", ID_BROWSE_NEW_WINDOW } MENUITEM "&Öppna...", ID_BROWSE_OPEN MENUITEM "&Spara", ID_BROWSE_SAVE @@ -57,13 +57,13 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "Verktygs&fält" { - MENUITEM "&Standardfält" ID_BROWSE_BAR_STD - MENUITEM "&Adressfält" ID_BROWSE_BAR_ADDR + MENUITEM "&Standardfält", ID_BROWSE_BAR_STD + MENUITEM "&Adressfält", ID_BROWSE_BAR_ADDR } } POPUP "&Favoriter" { - MENUITEM "&Lägg till favoriter..." ID_BROWSE_ADDFAV + MENUITEM "&Lägg till favoriter...", ID_BROWSE_ADDFAV MENUITEM SEPARATOR } POPUP "&Hjälp" diff --git a/reactos/dll/win32/shdocvw/Uk.rc b/reactos/dll/win32/shdocvw/Uk.rc index 95e14849644..13178c1defb 100644 --- a/reactos/dll/win32/shdocvw/Uk.rc +++ b/reactos/dll/win32/shdocvw/Uk.rc @@ -42,7 +42,7 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&Створити" { - MENUITEM "&Вікно" ID_BROWSE_NEW_WINDOW + MENUITEM "&Вікно", ID_BROWSE_NEW_WINDOW } MENUITEM "&Відкрити...", ID_BROWSE_OPEN MENUITEM "&Зберегти", ID_BROWSE_SAVE @@ -59,13 +59,13 @@ IDR_BROWSE_MAIN_MENU MENU { POPUP "&Панелі інструментів" { - MENUITEM "&Стандартна панель" ID_BROWSE_BAR_STD - MENUITEM "Рядок &адреси" ID_BROWSE_BAR_ADDR + MENUITEM "&Стандартна панель", ID_BROWSE_BAR_STD + MENUITEM "Рядок &адреси", ID_BROWSE_BAR_ADDR } } POPUP "&Обране" { - MENUITEM "&Додати до Обраного..." ID_BROWSE_ADDFAV + MENUITEM "&Додати до Обраного...", ID_BROWSE_ADDFAV MENUITEM SEPARATOR } POPUP "&Довідка" diff --git a/reactos/dll/win32/shlwapi/shlwapi_Da.rc b/reactos/dll/win32/shlwapi/shlwapi_Da.rc index 57859b2a157..bfbe9a20d80 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_Da.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_Da.rc @@ -30,10 +30,10 @@ FONT 8, "MS Shell Dlg" LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 CHECKBOX "Vis ikke denne besked igen", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&OK" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Annuller" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Ja" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Nej" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&OK", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Annuller", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Ja", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Nej", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } STRINGTABLE diff --git a/reactos/dll/win32/shlwapi/shlwapi_De.rc b/reactos/dll/win32/shlwapi/shlwapi_De.rc index 1f5063da872..c473e00fbb7 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_De.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_De.rc @@ -32,10 +32,10 @@ FONT 8, "MS Shell Dlg" LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 CHECKBOX "&Diesen Dialog nicht mehr anzeigen", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&OK" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Abbrechen" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Ja" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Nein" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&OK", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Abbrechen", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Ja", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Nein", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } STRINGTABLE diff --git a/reactos/dll/win32/shlwapi/shlwapi_En.rc b/reactos/dll/win32/shlwapi/shlwapi_En.rc index 6aa91e5e056..8418f0eff7a 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_En.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_En.rc @@ -30,10 +30,10 @@ FONT 8, "MS Shell Dlg" LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 CHECKBOX "Don't show me th&is message again", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&OK" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Cancel" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Yes" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&No" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&OK", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Cancel", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Yes", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&No", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } STRINGTABLE diff --git a/reactos/dll/win32/shlwapi/shlwapi_Es.rc b/reactos/dll/win32/shlwapi/shlwapi_Es.rc index b4e0c084757..4de3cb22d21 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_Es.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_Es.rc @@ -30,10 +30,10 @@ FONT 8, "MS Shell Dlg" LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 CHECKBOX "No volver a mostrar este &mensaje", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Aceptar" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Cancelar" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&S" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&No" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Aceptar", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Cancelar", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&S", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&No", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } STRINGTABLE diff --git a/reactos/dll/win32/shlwapi/shlwapi_Fi.rc b/reactos/dll/win32/shlwapi/shlwapi_Fi.rc index f58e218212d..13dff2ca647 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_Fi.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_Fi.rc @@ -30,10 +30,10 @@ FONT 8, "MS Shell Dlg" LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 CHECKBOX "l nyt tt viesti en", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&OK" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Peruuta" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Kyll" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Ei" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&OK", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Peruuta", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Kyll", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Ei", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } STRINGTABLE diff --git a/reactos/dll/win32/shlwapi/shlwapi_Fr.rc b/reactos/dll/win32/shlwapi/shlwapi_Fr.rc index fe850b5146e..6623a359743 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_Fr.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_Fr.rc @@ -33,10 +33,10 @@ FONT 8, "MS Shell Dlg" LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 CHECKBOX "Ne plus me montrer ce message", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&OK" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Annuler" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Oui" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Non" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&OK", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Annuler", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Oui", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Non", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } STRINGTABLE diff --git a/reactos/dll/win32/shlwapi/shlwapi_Hu.rc b/reactos/dll/win32/shlwapi/shlwapi_Hu.rc index 676b1d4c87d..c8ffa5aa296 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_Hu.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_Hu.rc @@ -32,17 +32,17 @@ FONT 8, "MS Shell Dlg" { LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 - CHECKBOX "Ne jelení&tse meg ezt az üzenetet mégegyszer", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&OK" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Mégse" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Igen" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Nem" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + CHECKBOX "Ne jelen&tse meg ezt az zenetet mgegyszer", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&OK", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Mgse", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Igen", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Nem", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } STRINGTABLE { - IDS_BYTES_FORMAT "%ld bájt" - IDS_TIME_INTERVAL_HOURS " óra" + IDS_BYTES_FORMAT "%ld bjt" + IDS_TIME_INTERVAL_HOURS " ra" IDS_TIME_INTERVAL_MINUTES " perc" IDS_TIME_INTERVAL_SECONDS " mp" } diff --git a/reactos/dll/win32/shlwapi/shlwapi_It.rc b/reactos/dll/win32/shlwapi/shlwapi_It.rc index c02f2922e06..ea1851308e3 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_It.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_It.rc @@ -30,10 +30,10 @@ FONT 8, "MS Shell Dlg" LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 CHECKBOX "Non mostrare nuovamente &questo messaggio", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&OK" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Annulla" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Si" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&No" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&OK", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Annulla", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Si", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&No", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } STRINGTABLE diff --git a/reactos/dll/win32/shlwapi/shlwapi_Ja.rc b/reactos/dll/win32/shlwapi/shlwapi_Ja.rc index c7554a9d89e..32eabd6b5a8 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_Ja.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_Ja.rc @@ -33,10 +33,10 @@ FONT 9, "MS Shell Dlg" LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 CHECKBOX "今後はこのメッセージを表示しない(&i)", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&OK" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"キャンセル(&C)" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"はい(&Y)" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"いいえ(&N)" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&OK", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"キャンセル(&C)", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"はい(&Y)", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"いいえ(&N)", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } STRINGTABLE diff --git a/reactos/dll/win32/shlwapi/shlwapi_Ko.rc b/reactos/dll/win32/shlwapi/shlwapi_Ko.rc index 3f6b7c2fb1f..b209496dd92 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_Ko.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_Ko.rc @@ -30,10 +30,10 @@ FONT 9, "MS Shell Dlg" LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 CHECKBOX " ޼ ٽô ÿ(&I)", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Ȯ(&O)" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "(&C)" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "(&Y)" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON "ƴϿ(&N)" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Ȯ(&O)", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "(&C)", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "(&Y)", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "ƴϿ(&N)", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } diff --git a/reactos/dll/win32/shlwapi/shlwapi_Lt.rc b/reactos/dll/win32/shlwapi/shlwapi_Lt.rc index 2ccd5c8cd9c..7ddbbeae96f 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_Lt.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_Lt.rc @@ -33,10 +33,10 @@ FONT 8, "MS Shell Dlg" LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 CHECKBOX "Daugiau ne&rodyti šio pranešimo", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Gerai" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Atsisakyti" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Taip" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Ne" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Gerai", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Atsisakyti", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Taip", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Ne", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } STRINGTABLE diff --git a/reactos/dll/win32/shlwapi/shlwapi_Nl.rc b/reactos/dll/win32/shlwapi/shlwapi_Nl.rc index e6bb91fa10f..82ef57da192 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_Nl.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_Nl.rc @@ -30,10 +30,10 @@ FONT 8, "MS Shell Dlg" LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 CHECKBOX "Deze boodschap &niet opnieuw tonen", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&OK" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Annuleren" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Ja" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Nee" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&OK", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Annuleren", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Ja", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Nee", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } STRINGTABLE diff --git a/reactos/dll/win32/shlwapi/shlwapi_No.rc b/reactos/dll/win32/shlwapi/shlwapi_No.rc index 3f7a99812a6..7f7d321af5a 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_No.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_No.rc @@ -30,10 +30,10 @@ FONT 8, "MS Shell Dlg" LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 CHECKBOX "&Ikke vis denne meldingen igjen", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&OK" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Avbryt" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Ja" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Nei" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&OK", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Avbryt", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Ja", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Nei", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } STRINGTABLE diff --git a/reactos/dll/win32/shlwapi/shlwapi_Pl.rc b/reactos/dll/win32/shlwapi/shlwapi_Pl.rc index 9f429d1cef6..9e72ee0f7e3 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_Pl.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_Pl.rc @@ -31,10 +31,10 @@ FONT 8, "MS Shell Dlg" LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 CHECKBOX "Nie pokazuj w&icej tego komunikatu", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&OK" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Anuluj" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Tak" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Nie" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&OK", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Anuluj", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Tak", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Nie", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } STRINGTABLE diff --git a/reactos/dll/win32/shlwapi/shlwapi_Pt.rc b/reactos/dll/win32/shlwapi/shlwapi_Pt.rc index 2080fc5bcdc..6014fcc6e2c 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_Pt.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_Pt.rc @@ -2,8 +2,8 @@ * Portuguese resources for shlwapi * * Copyright 2004 Marcelo Duarte - * Copyright 2006 Américo José Melo - * Copyright 2010 Gustavo Henrique Milaré + * Copyright 2006 Amrico Jos Melo + * Copyright 2010 Gustavo Henrique Milar * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -33,11 +33,11 @@ FONT 8, "MS Shell Dlg" { LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 - CHECKBOX "Não &mostrar esta mensagem novamente", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&OK" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Cancelar" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Sim" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Não" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + CHECKBOX "No &mostrar esta mensagem novamente", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&OK", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Cancelar", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Sim", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&No", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } STRINGTABLE diff --git a/reactos/dll/win32/shlwapi/shlwapi_Ro.rc b/reactos/dll/win32/shlwapi/shlwapi_Ro.rc index 85c6a7d5f6f..21b3bf04f78 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_Ro.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_Ro.rc @@ -31,10 +31,10 @@ FONT 8, "MS Shell Dlg" LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 CHECKBOX "Nu &afișa din nou acest mesaj", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&OK" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Renunță" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Da" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Nu" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&OK", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Renunță", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Da", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Nu", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } STRINGTABLE diff --git a/reactos/dll/win32/shlwapi/shlwapi_Ru.rc b/reactos/dll/win32/shlwapi/shlwapi_Ru.rc index e6cce3ffb3a..e8d36aaab3b 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_Ru.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_Ru.rc @@ -33,10 +33,10 @@ FONT 8, "MS Shell Dlg" LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 CHECKBOX "Больше не &показывать это сообщение", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&OK" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"О&тменить" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Да" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Нет" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&OK", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"О&тменить", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Да", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Нет", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } STRINGTABLE diff --git a/reactos/dll/win32/shlwapi/shlwapi_Si.rc b/reactos/dll/win32/shlwapi/shlwapi_Si.rc index 5e6bb347483..eaa047c2af2 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_Si.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_Si.rc @@ -32,10 +32,10 @@ FONT 8, "MS Shell Dlg" LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 CHECKBOX "Tega sporočila ne &kaži več", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&V redu" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Prekliči" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Da" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Ne" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&V redu", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Prekliči", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Da", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Ne", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } STRINGTABLE diff --git a/reactos/dll/win32/shlwapi/shlwapi_Sk.rc b/reactos/dll/win32/shlwapi/shlwapi_Sk.rc index da5d215847a..52ccf349cca 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_Sk.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_Sk.rc @@ -30,10 +30,10 @@ FONT 8, "MS Shell Dlg" LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 CHECKBOX "Nabudce toto dialgov okno nezo&brazova", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&OK" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Zrui" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"n&o" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Nie" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&OK", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Zrui", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"n&o", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Nie", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } STRINGTABLE diff --git a/reactos/dll/win32/shlwapi/shlwapi_Sv.rc b/reactos/dll/win32/shlwapi/shlwapi_Sv.rc index 29711e4c3c2..6d6994fad38 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_Sv.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_Sv.rc @@ -30,10 +30,10 @@ FONT 8, "MS Shell Dlg" LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 CHECKBOX "Visa inte &det hr meddelandet igen", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&OK" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Avbryt" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Ja" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Nej" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&OK", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Avbryt", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Ja", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Nej", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } STRINGTABLE diff --git a/reactos/dll/win32/shlwapi/shlwapi_Tr.rc b/reactos/dll/win32/shlwapi/shlwapi_Tr.rc index 2492e276fc9..4a41c615469 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_Tr.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_Tr.rc @@ -30,10 +30,10 @@ FONT 8, "MS Shell Dlg" LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 CHECKBOX "Bu iletiyi bir daha &gsterme", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Tamam" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&ptal" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Evet" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Hayr" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Tamam", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&ptal", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Evet", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Hayr", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } STRINGTABLE diff --git a/reactos/dll/win32/shlwapi/shlwapi_Uk.rc b/reactos/dll/win32/shlwapi/shlwapi_Uk.rc index a3c42b496d1..e468c4ac451 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_Uk.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_Uk.rc @@ -30,10 +30,10 @@ FONT 8, "MS Shell Dlg" LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 CHECKBOX "& ", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&OK" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&ͳ" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&OK", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&ͳ", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } STRINGTABLE diff --git a/reactos/dll/win32/shlwapi/shlwapi_Zh.rc b/reactos/dll/win32/shlwapi/shlwapi_Zh.rc index 302a7adfadc..33961fb10a9 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_Zh.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_Zh.rc @@ -33,10 +33,10 @@ FONT 9, "MS Shell Dlg" LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 CHECKBOX "不要再显示这个讯息", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON L"确定(&O)" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"取消(&C)" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"是(&Y)" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"否(&N)" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"确定(&O)", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"取消(&C)", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"是(&Y)", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"否(&N)", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } STRINGTABLE @@ -57,10 +57,10 @@ FONT 9, "MS Shell Dlg" LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 CHECKBOX "不要再顯示這個訊息", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON L"確定(&O)" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"取消(&C)" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"是(&Y)" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"否(&N)" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"確定(&O)", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"取消(&C)", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"是(&Y)", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"否(&N)", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } STRINGTABLE diff --git a/reactos/dll/win32/wininet/wininet_Bg.rc b/reactos/dll/win32/wininet/wininet_Bg.rc index b25356e074e..c2cd5550d5b 100644 --- a/reactos/dll/win32/wininet/wininet_Bg.rc +++ b/reactos/dll/win32/wininet/wininet_Bg.rc @@ -30,8 +30,8 @@ FONT 8, "MS Shell Dlg" LTEXT "", -1, 40, 46, 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 + 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, diff --git a/reactos/dll/win32/wininet/wininet_Cs.rc b/reactos/dll/win32/wininet/wininet_Cs.rc index 443c0175190..7e0b214b75f 100644 --- a/reactos/dll/win32/wininet/wininet_Cs.rc +++ b/reactos/dll/win32/wininet/wininet_Cs.rc @@ -35,8 +35,8 @@ FONT 8, "MS Shell Dlg" LTEXT "Pln jmno", -1, 40, 46, 50, 10 LTEXT "Uivatel", -1, 40, 66, 50, 10 LTEXT "Heslo", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Uloit toto heslo (nebezpen) ?", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/wininet/wininet_Da.rc b/reactos/dll/win32/wininet/wininet_Da.rc index 6b37857ed54..6bde57d6851 100644 --- a/reactos/dll/win32/wininet/wininet_Da.rc +++ b/reactos/dll/win32/wininet/wininet_Da.rc @@ -30,8 +30,8 @@ FONT 8, "MS Shell Dlg" LTEXT "Realm", -1, 40, 46, 50, 10 LTEXT "Brugernavn", -1, 40, 66, 50, 10 LTEXT "Kodeord", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Gem dette kodeord (usikkert)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/wininet/wininet_De.rc b/reactos/dll/win32/wininet/wininet_De.rc index f602a97a97d..21dd6e4b5ec 100644 --- a/reactos/dll/win32/wininet/wininet_De.rc +++ b/reactos/dll/win32/wininet/wininet_De.rc @@ -33,8 +33,8 @@ FONT 8, "MS Shell Dlg" 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 + 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 "Dieses &Kennwort speichern (unsicher)", IDC_SAVEPASSWORD, @@ -53,8 +53,8 @@ FONT 8, "MS Shell Dlg" 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 + 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, diff --git a/reactos/dll/win32/wininet/wininet_En.rc b/reactos/dll/win32/wininet/wininet_En.rc index d22d249f1cd..92590c16548 100644 --- a/reactos/dll/win32/wininet/wininet_En.rc +++ b/reactos/dll/win32/wininet/wininet_En.rc @@ -30,8 +30,8 @@ FONT 8, "MS Shell Dlg" LTEXT "Realm", -1, 40, 46, 50, 10 LTEXT "User", -1, 40, 66, 50, 10 LTEXT "Password", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Save this password (insecure)", IDC_SAVEPASSWORD, @@ -50,8 +50,8 @@ FONT 8, "MS Shell Dlg" 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 + 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, diff --git a/reactos/dll/win32/wininet/wininet_Es.rc b/reactos/dll/win32/wininet/wininet_Es.rc index c9ce2cebbe2..01b8b730ecd 100644 --- a/reactos/dll/win32/wininet/wininet_Es.rc +++ b/reactos/dll/win32/wininet/wininet_Es.rc @@ -30,8 +30,8 @@ FONT 8, "MS Shell Dlg" LTEXT "Dominio", -1, 40, 46, 50, 10 LTEXT "Usuario", -1, 40, 66, 50, 10 LTEXT "Contrasea", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Guardar esta contrasea (inseguro)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/wininet/wininet_Fi.rc b/reactos/dll/win32/wininet/wininet_Fi.rc index df5ca723044..6ab43d49945 100644 --- a/reactos/dll/win32/wininet/wininet_Fi.rc +++ b/reactos/dll/win32/wininet/wininet_Fi.rc @@ -30,8 +30,8 @@ FONT 8, "MS Shell Dlg" LTEXT "Alue", -1, 40, 46, 50, 10 LTEXT "Kyttj", -1, 40, 66, 50, 10 LTEXT "Salasana", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Tallenna tm salasana (epturvallinen)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/wininet/wininet_Fr.rc b/reactos/dll/win32/wininet/wininet_Fr.rc index 74ee208a7ee..d78e4de8769 100644 --- a/reactos/dll/win32/wininet/wininet_Fr.rc +++ b/reactos/dll/win32/wininet/wininet_Fr.rc @@ -39,8 +39,8 @@ FONT 8, "MS Shell Dlg" 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_PROXY, 58, 28, 150, 14, 0 - LTEXT "" IDC_REALM, 58, 48, 150, 14, 0 + LTEXT "", IDC_PROXY, 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, @@ -59,8 +59,8 @@ FONT 8, "MS Shell Dlg" 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 + 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, diff --git a/reactos/dll/win32/wininet/wininet_Hu.rc b/reactos/dll/win32/wininet/wininet_Hu.rc index b19e03dc007..4ceb3771593 100644 --- a/reactos/dll/win32/wininet/wininet_Hu.rc +++ b/reactos/dll/win32/wininet/wininet_Hu.rc @@ -30,8 +30,8 @@ FONT 8, "MS Shell Dlg" LTEXT "Csoport", -1, 40, 46, 50, 10 LTEXT "Felhasznl", -1, 40, 66, 50, 10 LTEXT "Jelsz", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Jelsz mentse (nem biztonsgos)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/wininet/wininet_It.rc b/reactos/dll/win32/wininet/wininet_It.rc index 04f71c5f177..0ea577abeb8 100644 --- a/reactos/dll/win32/wininet/wininet_It.rc +++ b/reactos/dll/win32/wininet/wininet_It.rc @@ -32,8 +32,8 @@ FONT 8, "MS Shell Dlg" LTEXT "Realm", -1, 40, 46, 50, 10 LTEXT "Utente", -1, 40, 66, 50, 10 LTEXT "Password", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Memorizza la password ( RISCHIOSO )", IDC_SAVEPASSWORD, @@ -52,8 +52,8 @@ FONT 8, "MS Shell Dlg" LTEXT "Realm", -1, 40, 46, 50, 10 LTEXT "Utente", -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 + 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 "&Memorizza la password (RISCHIOSO)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/wininet/wininet_Ja.rc b/reactos/dll/win32/wininet/wininet_Ja.rc index e179b849254..94e3e25c960 100644 --- a/reactos/dll/win32/wininet/wininet_Ja.rc +++ b/reactos/dll/win32/wininet/wininet_Ja.rc @@ -33,8 +33,8 @@ FONT 9, "MS Shell Dlg" LTEXT "地域", -1, 40, 46, 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 + 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 "パスワードを保存する(&S)(セキュアではありません)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/wininet/wininet_Ko.rc b/reactos/dll/win32/wininet/wininet_Ko.rc index 5c2595a9b37..7e8fcaed3f7 100644 --- a/reactos/dll/win32/wininet/wininet_Ko.rc +++ b/reactos/dll/win32/wininet/wininet_Ko.rc @@ -30,8 +30,8 @@ FONT 9, "MS Shell Dlg" LTEXT "Realm", -1, 40, 46, 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 + 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 "ȣ Է(&S)(Ͻÿ)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/wininet/wininet_Lt.rc b/reactos/dll/win32/wininet/wininet_Lt.rc index cd4bf482e35..4fcb8cfc8ad 100644 --- a/reactos/dll/win32/wininet/wininet_Lt.rc +++ b/reactos/dll/win32/wininet/wininet_Lt.rc @@ -33,8 +33,8 @@ FONT 8, "MS Shell Dlg" LTEXT "Sritis", -1, 40, 46, 50, 10 LTEXT "Naudotojas", -1, 40, 66, 50, 10 LTEXT "Slaptažodis", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "Į&rašyti šį slaptažodį (nesaugu)", IDC_SAVEPASSWORD, @@ -53,8 +53,8 @@ FONT 8, "MS Shell Dlg" 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 + 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, diff --git a/reactos/dll/win32/wininet/wininet_Nl.rc b/reactos/dll/win32/wininet/wininet_Nl.rc index f0e891c7e19..2849d9c630b 100644 --- a/reactos/dll/win32/wininet/wininet_Nl.rc +++ b/reactos/dll/win32/wininet/wininet_Nl.rc @@ -32,8 +32,8 @@ FONT 8, "MS Shell Dlg" LTEXT "Realm", -1, 40, 46, 50, 10 LTEXT "Gebruikersnaam", -1, 40, 66, 50, 10 LTEXT "Wachtwoord", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Wachtwoord opslaan (onveilig)", IDC_SAVEPASSWORD, @@ -52,8 +52,8 @@ FONT 8, "MS Shell Dlg" 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 + 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, diff --git a/reactos/dll/win32/wininet/wininet_No.rc b/reactos/dll/win32/wininet/wininet_No.rc index 1dfa544e4aa..b3fd6adc121 100644 --- a/reactos/dll/win32/wininet/wininet_No.rc +++ b/reactos/dll/win32/wininet/wininet_No.rc @@ -32,8 +32,8 @@ FONT 8, "MS Shell Dlg" LTEXT "Område", -1, 40, 46, 50, 10 LTEXT "Bruker", -1, 40, 66, 50, 10 LTEXT "Passord", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "Lagre dette pa&ssordet (usikkert)", IDC_SAVEPASSWORD, @@ -52,8 +52,8 @@ FONT 8, "MS Shell Dlg" LTEXT "Område", -1, 40, 46, 50, 10 LTEXT "Bruker", -1, 40, 66, 50, 10 LTEXT "Passord", -1, 40, 86, 50, 10 - LTEXT "" IDC_SERVER, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "Lagre pa&ssordet (sikkerhetsrisiko)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/wininet/wininet_Pl.rc b/reactos/dll/win32/wininet/wininet_Pl.rc index 0c76d5335aa..610b5a275a1 100644 --- a/reactos/dll/win32/wininet/wininet_Pl.rc +++ b/reactos/dll/win32/wininet/wininet_Pl.rc @@ -31,8 +31,8 @@ FONT 8, "MS Shell Dlg" LTEXT "Obszar", -1, 40, 46, 50, 10 LTEXT "Uytkonik", -1, 40, 66, 50, 10 LTEXT "Haso", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Zapamitaj to haso (nie bezpieczne)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/wininet/wininet_Pt.rc b/reactos/dll/win32/wininet/wininet_Pt.rc index 95e06e6d6e8..92a6c9ad83b 100644 --- a/reactos/dll/win32/wininet/wininet_Pt.rc +++ b/reactos/dll/win32/wininet/wininet_Pt.rc @@ -34,8 +34,8 @@ FONT 8, "MS Shell Dlg" LTEXT "Realm", -1, 40, 46, 50, 10 LTEXT "Usuário", -1, 40, 66, 50, 10 LTEXT "Senha", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Salvar esta senha (inseguro)", IDC_SAVEPASSWORD, @@ -56,8 +56,8 @@ FONT 8, "MS Shell Dlg" LTEXT "Realm", -1, 40, 46, 50, 10 LTEXT "Utilizador", -1, 40, 66, 50, 10 LTEXT "Senha", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Gravar esta senha (inseguro)", IDC_SAVEPASSWORD, @@ -76,8 +76,8 @@ FONT 8, "MS Shell Dlg" LTEXT "Reino", -1, 40, 46, 50, 10 LTEXT "Utilizador", -1, 40, 66, 50, 10 LTEXT "Palavra-passe", -1, 40, 86, 50, 10 - LTEXT "" IDC_SERVER, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Guardar esta palavra-passe (inseguro)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/wininet/wininet_Ro.rc b/reactos/dll/win32/wininet/wininet_Ro.rc index 13403eec1a6..6ee9cddc517 100644 --- a/reactos/dll/win32/wininet/wininet_Ro.rc +++ b/reactos/dll/win32/wininet/wininet_Ro.rc @@ -33,8 +33,8 @@ FONT 8, "MS Shell Dlg" LTEXT "Domeniu", -1, 40, 46, 50, 10 LTEXT "Utilizator", -1, 40, 66, 50, 10 LTEXT "Parolă", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Salvează această parolă (nesigur)", IDC_SAVEPASSWORD, @@ -53,8 +53,8 @@ FONT 8, "MS Shell Dlg" LTEXT "Domeniu", -1, 40, 46, 50, 10 LTEXT "Utilizator", -1, 40, 66, 50, 10 LTEXT "Parolă", -1, 40, 86, 50, 10 - LTEXT "" IDC_SERVER, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Salvează această parolă (nesigur)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/wininet/wininet_Ru.rc b/reactos/dll/win32/wininet/wininet_Ru.rc index 8d35fe40aab..ba8d0258912 100644 --- a/reactos/dll/win32/wininet/wininet_Ru.rc +++ b/reactos/dll/win32/wininet/wininet_Ru.rc @@ -35,8 +35,8 @@ FONT 8, "MS Shell Dlg" LTEXT "Домен", -1, 40, 46, 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 + 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, @@ -55,8 +55,8 @@ FONT 8, "MS Shell Dlg" LTEXT "Домен", -1, 40, 46, 50, 10 LTEXT "Пользователь", -1, 40, 66, 50, 10 LTEXT "Пароль", -1, 40, 86, 50, 10 - LTEXT "" IDC_SERVER, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Сохранить этот пароль (небезопасно)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/wininet/wininet_Si.rc b/reactos/dll/win32/wininet/wininet_Si.rc index 488104ec9dc..fb677ff6d32 100644 --- a/reactos/dll/win32/wininet/wininet_Si.rc +++ b/reactos/dll/win32/wininet/wininet_Si.rc @@ -32,8 +32,8 @@ FONT 8, "MS Shell Dlg" LTEXT "Področje", -1, 20, 46, 50, 10 LTEXT "Uporabniško ime", -1, 20, 66, 55, 10 LTEXT "Geslo", -1, 20, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Shrani geslo (nezaščiteno)", IDC_SAVEPASSWORD, @@ -52,8 +52,8 @@ FONT 8, "MS Shell Dlg" LTEXT "Področje", -1, 20, 46, 50, 10 LTEXT "Uporabniško ime", -1, 20, 66, 55, 10 LTEXT "Geslo", -1, 20, 86, 50, 10 - LTEXT "" IDC_SERVER, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Shrani geslo (nezaščiteno)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/wininet/wininet_Sv.rc b/reactos/dll/win32/wininet/wininet_Sv.rc index 8d3291ec750..65252f400e2 100644 --- a/reactos/dll/win32/wininet/wininet_Sv.rc +++ b/reactos/dll/win32/wininet/wininet_Sv.rc @@ -30,8 +30,8 @@ FONT 8, "MS Shell Dlg" LTEXT "Domn", -1, 40, 46, 50, 10 LTEXT "Anvndarnamn", -1, 40, 66, 50, 10 LTEXT "Lsenord", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "&Spara detta lsenord (oskert)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/wininet/wininet_Tr.rc b/reactos/dll/win32/wininet/wininet_Tr.rc index 8d26cf21694..bfd675e52a4 100644 --- a/reactos/dll/win32/wininet/wininet_Tr.rc +++ b/reactos/dll/win32/wininet/wininet_Tr.rc @@ -32,8 +32,8 @@ FONT 8, "MS Shell Dlg" LTEXT "Realm", -1, 40, 46, 50, 10 LTEXT "Kullanc", -1, 40, 66, 50, 10 LTEXT "Parola", -1, 40, 86, 50, 10 - LTEXT "" IDC_PROXY, 80, 26, 150, 14, 0 - LTEXT "" IDC_REALM, 80, 46, 150, 14, 0 + 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 "Bu parolay &sakla (gvensiz)", IDC_SAVEPASSWORD, diff --git a/reactos/dll/win32/wininet/wininet_Uk.rc b/reactos/dll/win32/wininet/wininet_Uk.rc index 94a9611888b..6a61a4c22c8 100644 --- a/reactos/dll/win32/wininet/wininet_Uk.rc +++ b/reactos/dll/win32/wininet/wininet_Uk.rc @@ -32,8 +32,8 @@ FONT 8, "MS Shell Dlg" LTEXT "", -1, 40, 46, 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 + 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, diff --git a/reactos/dll/win32/wininet/wininet_Zh.rc b/reactos/dll/win32/wininet/wininet_Zh.rc index e2e36ded277..4d5a5502ece 100644 --- a/reactos/dll/win32/wininet/wininet_Zh.rc +++ b/reactos/dll/win32/wininet/wininet_Zh.rc @@ -35,8 +35,8 @@ FONT 9, "MS Shell Dlg" LTEXT "Realm", -1, 40, 46, 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 + 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 "保存密码(不安全)(&S)", IDC_SAVEPASSWORD, @@ -62,8 +62,8 @@ FONT 9, "MS Shell Dlg" LTEXT "Realm", -1, 40, 46, 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 + 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 "儲存密碼(不安全)(&S)", IDC_SAVEPASSWORD, From 3c08a32f631340bb6bda9e7490bcda48e7f3b57c Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 10 Feb 2011 10:51:26 +0000 Subject: [PATCH 009/287] fix taskmgr build svn path=/trunk/; revision=50644 --- .../base/applications/taskmgr/lang/ja-JP.rc | 456 +++++++++--------- 1 file changed, 228 insertions(+), 228 deletions(-) diff --git a/reactos/base/applications/taskmgr/lang/ja-JP.rc b/reactos/base/applications/taskmgr/lang/ja-JP.rc index 815c8a088a0..9904af5415a 100644 --- a/reactos/base/applications/taskmgr/lang/ja-JP.rc +++ b/reactos/base/applications/taskmgr/lang/ja-JP.rc @@ -14,85 +14,85 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT IDR_TASKMANAGER MENU DISCARDABLE BEGIN - POPUP "ƒtƒ@ƒCƒ‹(&F)" + POPUP "t@C(&F)" BEGIN - MENUITEM "V‚µ‚¢ƒ^ƒXƒN‚ÌŽÀs(&N)", ID_FILE_NEW + MENUITEM "V^XN̎s(&N)", ID_FILE_NEW MENUITEM SEPARATOR - MENUITEM "ƒ^ƒXƒN ƒ}ƒl[ƒWƒƒ‚̏I—¹(&X)", ID_FILE_EXIT + MENUITEM "^XN }l[W̏I(&X)", ID_FILE_EXIT END - POPUP "ƒIƒvƒVƒ‡ƒ“(&O)" + POPUP "IvV(&O)" BEGIN - MENUITEM "í‚ÉŽè‘O‚É•\\ަ(&A)", ID_OPTIONS_ALWAYSONTOP + MENUITEM "ɎOɕ\\(&A)", ID_OPTIONS_ALWAYSONTOP , CHECKED - MENUITEM "–¢Žg—pŽž‚ɍŏ¬‰»(&M)", ID_OPTIONS_MINIMIZEONUSE + MENUITEM "gpɍŏ(&M)", ID_OPTIONS_MINIMIZEONUSE , CHECKED - MENUITEM "Å¬‰»Žž‚ɉB‚·(&H)", ID_OPTIONS_HIDEWHENMINIMIZED + MENUITEM "ŏɉB(&H)", ID_OPTIONS_HIDEWHENMINIMIZED , CHECKED - MENUITEM "16 ƒrƒbƒg ƒ^ƒXƒN‚Ì•\\ަ(&S)", ID_OPTIONS_SHOW16BITTASKS + MENUITEM "16 rbg ^XN̕\\(&S)", ID_OPTIONS_SHOW16BITTASKS , CHECKED END - POPUP "•\\ަ(&V)" + POPUP "\\(&V)" BEGIN - MENUITEM "ÅV‚̏ó‘ԂɍXV(&R)", ID_VIEW_REFRESH - POPUP "XV‚Ì•p“x(&U)" + MENUITEM "ŐV̏ԂɍXV(&R)", ID_VIEW_REFRESH + POPUP "XV̕px(&U)" BEGIN - MENUITEM "‚(&H)", ID_VIEW_UPDATESPEED_HIGH - MENUITEM "’ʏí(&N)", ID_VIEW_UPDATESPEED_NORMAL + MENUITEM "(&H)", ID_VIEW_UPDATESPEED_HIGH + MENUITEM "ʏ(&N)", ID_VIEW_UPDATESPEED_NORMAL , CHECKED - MENUITEM "’á(&L)", ID_VIEW_UPDATESPEED_LOW - MENUITEM "ˆêŽž’âŽ~(&P)", ID_VIEW_UPDATESPEED_PAUSED + MENUITEM "(&L)", ID_VIEW_UPDATESPEED_LOW + MENUITEM "ꎞ~(&P)", ID_VIEW_UPDATESPEED_PAUSED END MENUITEM SEPARATOR - MENUITEM "‘å‚«‚¢ƒAƒCƒRƒ“(&G)", ID_VIEW_LARGE - MENUITEM "¬‚³‚¢ƒAƒCƒRƒ“(&M)", ID_VIEW_SMALL - MENUITEM "Ú×(&D)", ID_VIEW_DETAILS, CHECKED - MENUITEM "—ñ‚Ì‘I‘ð(&S)...", ID_VIEW_SELECTCOLUMNS - POPUP "CPU ‚Ì—š—ð(&C)" + MENUITEM "傫ACR(&G)", ID_VIEW_LARGE + MENUITEM "ACR(&M)", ID_VIEW_SMALL + MENUITEM "ڍ(&D)", ID_VIEW_DETAILS, CHECKED + MENUITEM "̑I(&S)...", ID_VIEW_SELECTCOLUMNS + POPUP "CPU ̗(&C)" BEGIN - MENUITEM "‚·‚×‚Ä‚Ì CPU ‚Å 1 ƒOƒ‰ƒt(&O)",ID_VIEW_CPUHISTORY_ONEGRAPHALL + MENUITEM "ׂĂ CPU 1 Ot(&O)",ID_VIEW_CPUHISTORY_ONEGRAPHALL - MENUITEM "CPU ‚²‚Æ‚É 1 ƒOƒ‰ƒt(&P)", ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU + MENUITEM "CPU Ƃ 1 Ot(&P)", ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU , CHECKED END - MENUITEM "ƒJ[ƒlƒ‹ŽžŠÔ‚ð•\\ަ‚·‚é(&S)", ID_VIEW_SHOWKERNELTIMES + MENUITEM "J[lԂ\\(&S)", ID_VIEW_SHOWKERNELTIMES END - POPUP "ƒEƒBƒ“ƒhƒE(&W)" + POPUP "EBhE(&W)" BEGIN - MENUITEM "ã‰º‚É•À‚ׂĕ\\ަ(&H)", ID_WINDOWS_TILEHORIZONTALLY - MENUITEM "¶‰E‚É•À‚ׂĕ\\ަ(&V)", ID_WINDOWS_TILEVERTICALLY - MENUITEM "Å¬‰»(&M)", ID_WINDOWS_MINIMIZE - MENUITEM "Å‘剻(&X)", ID_WINDOWS_MAXIMIZE - MENUITEM "d‚˂ĕ\\ަ(&C)", ID_WINDOWS_CASCADE - MENUITEM "Žè‘O‚É•\\ަ(&B)", ID_WINDOWS_BRINGTOFRONT + MENUITEM "㉺ɕׂĕ\\(&H)", ID_WINDOWS_TILEHORIZONTALLY + MENUITEM "Eɕׂĕ\\(&V)", ID_WINDOWS_TILEVERTICALLY + MENUITEM "ŏ(&M)", ID_WINDOWS_MINIMIZE + MENUITEM "ő剻(&X)", ID_WINDOWS_MAXIMIZE + MENUITEM "d˂ĕ\\(&C)", ID_WINDOWS_CASCADE + MENUITEM "Oɕ\\(&B)", ID_WINDOWS_BRINGTOFRONT END - POPUP "ƒwƒ‹ƒv(&H)" + POPUP "wv(&H)" BEGIN - MENUITEM "ƒgƒsƒbƒN‚ÌŒŸõ(&H)", ID_HELP_TOPICS + MENUITEM "gsbŇ(&H)", ID_HELP_TOPICS MENUITEM SEPARATOR - MENUITEM "ƒo[ƒWƒ‡ƒ“î•ñ(&A)", ID_HELP_ABOUT + MENUITEM "o[W(&A)", ID_HELP_ABOUT END END IDR_WINDOWSMENU MENU DISCARDABLE BEGIN - MENUITEM "ã‰º‚É•À‚ׂĕ\\ަ(&H)", ID_WINDOWS_TILEHORIZONTALLY - MENUITEM "¶‰E‚É•À‚ׂĕ\\ަ(&V)", ID_WINDOWS_TILEVERTICALLY - MENUITEM "Å¬‰»(&M)", ID_WINDOWS_MINIMIZE - MENUITEM "Å‘剻(&X)", ID_WINDOWS_MAXIMIZE - MENUITEM "d‚˂ĕ\\ަ(&C)", ID_WINDOWS_CASCADE - MENUITEM "Žè‘O‚É•\\ަ(&B)", ID_WINDOWS_BRINGTOFRONT + MENUITEM "㉺ɕׂĕ\\(&H)", ID_WINDOWS_TILEHORIZONTALLY + MENUITEM "Eɕׂĕ\\(&V)", ID_WINDOWS_TILEVERTICALLY + MENUITEM "ŏ(&M)", ID_WINDOWS_MINIMIZE + MENUITEM "ő剻(&X)", ID_WINDOWS_MAXIMIZE + MENUITEM "d˂ĕ\\(&C)", ID_WINDOWS_CASCADE + MENUITEM "Oɕ\\(&B)", ID_WINDOWS_BRINGTOFRONT END IDR_APPLICATION_PAGE_CONTEXT1 MENU DISCARDABLE BEGIN POPUP "DUMMY" BEGIN - MENUITEM "V‚µ‚¢ƒ^ƒXƒN‚ÌŽÀs(&N)", ID_FILE_NEW + MENUITEM "V^XN̎s(&N)", ID_FILE_NEW MENUITEM SEPARATOR - MENUITEM "‘å‚«‚¢ƒAƒCƒRƒ“(&G)", ID_VIEW_LARGE - MENUITEM "¬‚³‚¢ƒAƒCƒRƒ“(&M)", ID_VIEW_SMALL - MENUITEM "Ú×(&D)", ID_VIEW_DETAILS, CHECKED + MENUITEM "傫ACR(&G)", ID_VIEW_LARGE + MENUITEM "ACR(&M)", ID_VIEW_SMALL + MENUITEM "ڍ(&D)", ID_VIEW_DETAILS, CHECKED END END @@ -100,17 +100,17 @@ IDR_APPLICATION_PAGE_CONTEXT2 MENU DISCARDABLE BEGIN POPUP "DUMMY" BEGIN - MENUITEM "Ø‚è‘Ö‚¦(&S)", ID_APPLICATION_PAGE_SWITCHTO - MENUITEM "Žè‘O‚É•\\ަ(&B)", ID_WINDOWS_BRINGTOFRONT + MENUITEM "؂ւ(&S)", ID_APPLICATION_PAGE_SWITCHTO + MENUITEM "Oɕ\\(&B)", ID_WINDOWS_BRINGTOFRONT MENUITEM SEPARATOR - MENUITEM "ã‰º‚É•À‚ׂĕ\\ަ(&H)", ID_WINDOWS_TILEHORIZONTALLY - MENUITEM "¶‰E‚É•À‚ׂĕ\\ަ(&V)", ID_WINDOWS_TILEVERTICALLY - MENUITEM "Å¬‰»(&M)", ID_WINDOWS_MINIMIZE - MENUITEM "Å‘剻(&X)", ID_WINDOWS_MAXIMIZE - MENUITEM "d‚˂ĕ\\ަ(&C)", ID_WINDOWS_CASCADE + MENUITEM "㉺ɕׂĕ\\(&H)", ID_WINDOWS_TILEHORIZONTALLY + MENUITEM "Eɕׂĕ\\(&V)", ID_WINDOWS_TILEVERTICALLY + MENUITEM "ŏ(&M)", ID_WINDOWS_MINIMIZE + MENUITEM "ő剻(&X)", ID_WINDOWS_MAXIMIZE + MENUITEM "d˂ĕ\\(&C)", ID_WINDOWS_CASCADE MENUITEM SEPARATOR - MENUITEM "ƒ^ƒXƒN‚̏I—¹(&E)", ID_APPLICATION_PAGE_ENDTASK - MENUITEM "ƒvƒƒZƒX‚Ì•\\ަ(&G)", ID_APPLICATION_PAGE_GOTOPROCESS + MENUITEM "^XN̏I(&E)", ID_APPLICATION_PAGE_ENDTASK + MENUITEM "vZX̕\\(&G)", ID_APPLICATION_PAGE_GOTOPROCESS END END @@ -119,10 +119,10 @@ IDR_TRAY_POPUP MENU DISCARDABLE BEGIN POPUP "DUMMY" BEGIN - MENUITEM "Œ³‚̃TƒCƒY‚É–ß‚·(&R)", ID_RESTORE - MENUITEM "•‚¶‚é(&C)", ID_FILE_EXIT + MENUITEM "̃TCYɖ߂(&R)", ID_RESTORE + MENUITEM "‚(&C)", ID_FILE_EXIT MENUITEM SEPARATOR - MENUITEM "í‚ÉŽè‘O‚É•\\ަ(&A)", ID_OPTIONS_ALWAYSONTOP + MENUITEM "ɎOɕ\\(&A)", ID_OPTIONS_ALWAYSONTOP END END @@ -130,28 +130,28 @@ IDR_PROCESS_PAGE_CONTEXT MENU DISCARDABLE BEGIN POPUP "DUMMY" BEGIN - MENUITEM "ƒvƒƒZƒX‚̏I—¹(&E)", ID_PROCESS_PAGE_ENDPROCESS - MENUITEM "ƒvƒƒZƒX ƒcƒŠ[‚̏I—¹(&T)", ID_PROCESS_PAGE_ENDPROCESSTREE + MENUITEM "vZX̏I(&E)", ID_PROCESS_PAGE_ENDPROCESS + MENUITEM "vZX c[̏I(&T)", ID_PROCESS_PAGE_ENDPROCESSTREE - MENUITEM "ƒfƒoƒbƒO(&D)", ID_PROCESS_PAGE_DEBUG + MENUITEM "fobO(&D)", ID_PROCESS_PAGE_DEBUG MENUITEM SEPARATOR - POPUP "—Dæ“x‚̐ݒè(&P)" + POPUP "Dx̐ݒ(&P)" BEGIN - MENUITEM "ƒŠƒAƒ‹ƒ^ƒCƒ€(&R)", ID_PROCESS_PAGE_SETPRIORITY_REALTIME + MENUITEM "A^C(&R)", ID_PROCESS_PAGE_SETPRIORITY_REALTIME - MENUITEM "‚(&H)", ID_PROCESS_PAGE_SETPRIORITY_HIGH + MENUITEM "(&H)", ID_PROCESS_PAGE_SETPRIORITY_HIGH - MENUITEM "’ʏíˆÈã(&A)", ID_PROCESS_PAGE_SETPRIORITY_ABOVENORMAL + MENUITEM "ʏȏ(&A)", ID_PROCESS_PAGE_SETPRIORITY_ABOVENORMAL - MENUITEM "’ʏí(&N)", ID_PROCESS_PAGE_SETPRIORITY_NORMAL + MENUITEM "ʏ(&N)", ID_PROCESS_PAGE_SETPRIORITY_NORMAL - MENUITEM "’ʏíˆÈ‰º(&B)", ID_PROCESS_PAGE_SETPRIORITY_BELOWNORMAL + MENUITEM "ʏȉ(&B)", ID_PROCESS_PAGE_SETPRIORITY_BELOWNORMAL - MENUITEM "’á(&L)", ID_PROCESS_PAGE_SETPRIORITY_LOW + MENUITEM "(&L)", ID_PROCESS_PAGE_SETPRIORITY_LOW END - MENUITEM "ŠÖŒW‚̐ݒè(&A)...", ID_PROCESS_PAGE_SETAFFINITY - MENUITEM "ƒfƒoƒbƒO ƒ`ƒƒƒ“ƒlƒ‹‚̕ύX(&C)...", ID_PROCESS_PAGE_DEBUGCHANNELS + MENUITEM "֌W̐ݒ(&A)...", ID_PROCESS_PAGE_SETAFFINITY + MENUITEM "fobO `l̕ύX(&C)...", ID_PROCESS_PAGE_DEBUGCHANNELS END END @@ -166,7 +166,7 @@ IDD_TASKMGR_DIALOG DIALOGEX DISCARDABLE 0, 0, 264, 246 STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME -CAPTION "Task Manager" +CAPTION "^XN }l[W" MENU IDR_TASKMANAGER FONT 9, "MS UI Gothic" BEGIN @@ -179,9 +179,9 @@ FONT 9, "MS UI Gothic" BEGIN CONTROL "List2",IDC_APPLIST,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,7,7,233,177 - PUSHBUTTON "V‚µ‚¢ƒ^ƒXƒN(&N)...",IDC_NEWTASK,187,189,53,14 - PUSHBUTTON "Ø‚è‘Ö‚¦(&S)",IDC_SWITCHTO,131,189,53,14,WS_DISABLED - PUSHBUTTON "ƒ^ƒXƒN‚̏I—¹(&E)",IDC_ENDTASK,75,189,53,14,WS_DISABLED + PUSHBUTTON "V^XN(&N)...",IDC_NEWTASK,187,189,53,14 + PUSHBUTTON "؂ւ(&S)",IDC_SWITCHTO,131,189,53,14,WS_DISABLED + PUSHBUTTON "^XN̏I(&E)",IDC_ENDTASK,75,189,53,14,WS_DISABLED END IDD_PROCESS_PAGE DIALOGEX DISCARDABLE 0, 0, 247, 210 @@ -191,8 +191,8 @@ BEGIN CONTROL "List2",IDC_PROCESSLIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,7,7,233,177 - PUSHBUTTON "ƒvƒƒZƒX‚̏I—¹(&E)",IDC_ENDPROCESS,171,189,69,14 - CONTROL "‘Sƒ†[ƒU[‚̃vƒƒZƒX‚ð•\\ަ‚·‚é(&S)",IDC_SHOWALLPROCESSES, + PUSHBUTTON "vZX̏I(&E)",IDC_ENDPROCESS,171,189,69,14 + CONTROL "S[U[̃vZX\\(&S)",IDC_SHOWALLPROCESSES, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,191,111,10 END @@ -201,77 +201,77 @@ IDD_PERFORMANCE_PAGE DIALOGEX DISCARDABLE 0, 0, 247, 210 STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN FONT 9, "MS UI Gothic" BEGIN - GROUPBOX "CPU Žg—p—¦",IDC_CPU_USAGE_FRAME,5,5,60,54,0,WS_EX_TRANSPARENT - GROUPBOX "MEM Usage",IDC_MEM_USAGE_FRAME,5,63,60,54,BS_LEFTTEXT,WS_EX_TRANSPARENT - GROUPBOX "‡Œv",IDC_TOTALS_FRAME,5,122,111,39,0,WS_EX_TRANSPARENT - GROUPBOX "ƒRƒ~ƒbƒg ƒ`ƒƒ[ƒW (KB)",IDC_COMMIT_CHARGE_FRAME,5,166,111,39,0,WS_EX_TRANSPARENT - GROUPBOX "•¨—ƒƒ‚ƒŠ (KB)",IDC_PHYSICAL_MEMORY_FRAME,131,122,111,39,0,WS_EX_TRANSPARENT - GROUPBOX "ƒJ[ƒlƒ‹ ƒƒ‚ƒŠ (KB)",IDC_KERNEL_MEMORY_FRAME,131,166,111,39,0,WS_EX_TRANSPARENT - LTEXT "ƒnƒ“ƒhƒ‹",IDS_TOTALS_HANDLE_COUNT,12,131,27,8 - LTEXT "ƒXƒŒƒbƒh",IDS_TOTALS_THREAD_COUNT,12,140,27,8 - LTEXT "ƒvƒƒZƒX",IDS_TOTALS_PROCESS_COUNT,12,149,34,8 + GROUPBOX "CPU gp",IDC_CPU_USAGE_FRAME,5,5,60,54,0,WS_EX_TRANSPARENT + GROUPBOX "gp",IDC_MEM_USAGE_FRAME,5,63,60,54,BS_LEFTTEXT,WS_EX_TRANSPARENT + GROUPBOX "v",IDC_TOTALS_FRAME,5,122,111,39,0,WS_EX_TRANSPARENT + GROUPBOX "R~bg `[W (KB)",IDC_COMMIT_CHARGE_FRAME,5,166,111,39,0,WS_EX_TRANSPARENT + GROUPBOX " (KB)",IDC_PHYSICAL_MEMORY_FRAME,131,122,111,39,0,WS_EX_TRANSPARENT + GROUPBOX "J[l (KB)",IDC_KERNEL_MEMORY_FRAME,131,166,111,39,0,WS_EX_TRANSPARENT + LTEXT "nh",IDS_TOTALS_HANDLE_COUNT,12,131,27,8 + LTEXT "Xbh",IDS_TOTALS_THREAD_COUNT,12,140,27,8 + LTEXT "vZX",IDS_TOTALS_PROCESS_COUNT,12,149,34,8 EDITTEXT IDC_TOTALS_HANDLE_COUNT,65,131,45,8,ES_RIGHT | ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT IDC_TOTALS_THREAD_COUNT,65,140,45,8,ES_RIGHT | ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT IDC_TOTALS_PROCESS_COUNT,65,149,45,8,ES_RIGHT | ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP - LTEXT "‡Œv",IDS_COMMIT_CHARGE_TOTAL,12,175,27,8 - LTEXT "§ŒÀ’l",IDS_COMMIT_CHARGE_LIMIT,12,184,15,8,NOT WS_BORDER - LTEXT "Å‘å’l",IDS_COMMIT_CHARGE_PEAK,12,193,34,8 + LTEXT "v",IDS_COMMIT_CHARGE_TOTAL,12,175,27,8 + LTEXT "l",IDS_COMMIT_CHARGE_LIMIT,12,184,15,8,NOT WS_BORDER + LTEXT "ől",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 | NOT WS_TABSTOP EDITTEXT IDC_COMMIT_CHARGE_LIMIT,65,184,45,8,ES_RIGHT | ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT IDC_COMMIT_CHARGE_PEAK,65,193,45,8,ES_RIGHT | ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP - LTEXT "‡Œv",IDS_PHYSICAL_MEMORY_TOTAL,137,131,27,8 - LTEXT "Available",IDS_PHYSICAL_MEMORY_AVAILABLE,137,140,30,8 - LTEXT "ƒVƒXƒeƒ€ ƒLƒƒƒbƒVƒ…",IDS_PHYSICAL_MEMORY_SYSTEM_CACHE,137,149,46,8 + LTEXT "v",IDS_PHYSICAL_MEMORY_TOTAL,137,131,27,8 + LTEXT "p”\\",IDS_PHYSICAL_MEMORY_AVAILABLE,137,140,30,8 + LTEXT "VXe LbV",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 | NOT WS_TABSTOP EDITTEXT IDC_PHYSICAL_MEMORY_AVAILABLE,185,140,48,8,ES_RIGHT | ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT IDC_PHYSICAL_MEMORY_SYSTEM_CACHE,185,149,48,8,ES_RIGHT | ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP - LTEXT "‡Œv",IDS_KERNEL_MEMORY_TOTAL,137,174,27,8 - LTEXT "ƒy[ƒW",IDS_KERNEL_MEMORY_PAGED,137,184,21,8 - LTEXT "”ñƒy[ƒW",IDS_KERNEL_MEMORY_NONPAGED,137,193,34,8 + LTEXT "v",IDS_KERNEL_MEMORY_TOTAL,137,174,27,8 + LTEXT "y[W",IDS_KERNEL_MEMORY_PAGED,137,184,21,8 + LTEXT "y[W",IDS_KERNEL_MEMORY_NONPAGED,137,193,34,8 EDITTEXT IDC_KERNEL_MEMORY_TOTAL,185,174,48,8,ES_RIGHT | ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT IDC_KERNEL_MEMORY_PAGED,185,184,48,8,ES_RIGHT | ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP EDITTEXT IDC_KERNEL_MEMORY_NONPAGED,185,193,48,8,ES_RIGHT | ES_READONLY | ES_NUMBER | NOT WS_BORDER | NOT WS_TABSTOP - GROUPBOX "CPU Žg—p—¦‚Ì—š—ð",IDC_CPU_USAGE_HISTORY_FRAME,74,5,168,54,0,WS_EX_TRANSPARENT - GROUPBOX "ƒƒ‚ƒŠŽg—p—ʂ̗š—ð",IDC_MEMORY_USAGE_HISTORY_FRAME,74,63,168,54,0,WS_EX_TRANSPARENT - PUSHBUTTON "CPU Žg—p—¦‚Ì•\\ަ",IDC_CPU_USAGE_GRAPH,12,17,47,37,NOT WS_TABSTOP,WS_EX_CLIENTEDGE - PUSHBUTTON "ƒƒ‚ƒŠŽg—p—ʂ̕\\ަ",IDC_MEM_USAGE_GRAPH,12,75,47,37,NOT WS_TABSTOP,WS_EX_CLIENTEDGE - PUSHBUTTON "CPU Žg—p—¦‚Ì—š—ð",IDC_CPU_USAGE_HISTORY_GRAPH,81,17, + GROUPBOX "CPU gp̗",IDC_CPU_USAGE_HISTORY_FRAME,74,5,168,54,0,WS_EX_TRANSPARENT + GROUPBOX "gpʂ̗",IDC_MEMORY_USAGE_HISTORY_FRAME,74,63,168,54,0,WS_EX_TRANSPARENT + PUSHBUTTON "CPU gp̕\\",IDC_CPU_USAGE_GRAPH,12,17,47,37,NOT WS_TABSTOP,WS_EX_CLIENTEDGE + PUSHBUTTON "gpʂ̕\\",IDC_MEM_USAGE_GRAPH,12,75,47,37,NOT WS_TABSTOP,WS_EX_CLIENTEDGE + PUSHBUTTON "CPU gp̗",IDC_CPU_USAGE_HISTORY_GRAPH,81,17, 153,37,NOT WS_TABSTOP,WS_EX_CLIENTEDGE - PUSHBUTTON "ƒƒ‚ƒŠŽg—p—ʂ̗š—ð",IDC_MEM_USAGE_HISTORY_GRAPH,81,75, + PUSHBUTTON "gpʂ̗",IDC_MEM_USAGE_HISTORY_GRAPH,81,75, 153,37,NOT WS_TABSTOP,WS_EX_CLIENTEDGE END IDD_DEBUG_CHANNELS_DIALOG DIALOGEX DISCARDABLE 0, 0, 247, 210 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "ƒfƒoƒbƒO ƒ`ƒƒƒ“ƒlƒ‹" +CAPTION "fobO `l" FONT 9, "MS UI Gothic" 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 + PUSHBUTTON "‚",IDOK,171,189,69,14 END IDD_AFFINITY_DIALOG DIALOGEX DISCARDABLE 0, 0, 231, 154 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "ƒvƒƒZƒbƒT‚ÌŠÖŒW" +CAPTION "vZbT̊֌W" FONT 9, "MS UI Gothic" BEGIN DEFPUSHBUTTON "OK",IDOK,120,133,50,14 - PUSHBUTTON "ƒLƒƒƒ“ƒZƒ‹",IDCANCEL,174,133,50,14 - LTEXT "ƒvƒƒZƒbƒT‚ÌŠÖŒW‚̐ݒè‚́A‚Ç‚Ì CPU ‚ŃvƒƒZƒX‚ðŽÀs‚·‚é‚©‚𐧌䂵‚Ü‚·B", + PUSHBUTTON "LZ",IDCANCEL,174,133,50,14 + LTEXT "vZbT̊֌W̐ݒ́Aǂ CPU ŃvZXs邩𐧌䂵܂B", IDC_STATIC,5,5,220,16 CONTROL "CPU 0",IDC_CPU0,"Button",BS_AUTOCHECKBOX | WS_TABSTOP, 11,28,37,10 @@ -341,62 +341,62 @@ END IDD_COLUMNS_DIALOG DIALOGEX DISCARDABLE 0, 0, 195, 199 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "—ñ‚Ì‘I‘ð" +CAPTION "̑I" FONT 9, "MS UI Gothic" BEGIN DEFPUSHBUTTON "OK",IDOK,84,178,50,14 - PUSHBUTTON "ƒLƒƒƒ“ƒZƒ‹",IDCANCEL,138,178,50,14 - LTEXT "ƒ^ƒXƒN ƒ}ƒl[ƒWƒƒ‚Ì [ƒvƒƒZƒX] ƒy[ƒW‚É•\\ަ‚·‚é—ñ‚ð‘I‘ð‚µ‚Ü‚·B", + PUSHBUTTON "LZ",IDCANCEL,138,178,50,14 + LTEXT "^XN }l[W [vZX] y[Wɕ\\I܂B", IDC_STATIC,7,7,181,17 - CONTROL "ƒCƒ[ƒW–¼(&I)",IDC_IMAGENAME,"Button",BS_AUTOCHECKBOX | + CONTROL "C[W(&I)",IDC_IMAGENAME,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,7,28,56,10 - CONTROL "PID (ƒvƒƒZƒX ID)(&P)",IDC_PID,"Button", + CONTROL "PID (vZX ID)(&P)",IDC_PID,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,7,39,88,10 - CONTROL "CPU Žg—p—¦(&C)",IDC_CPUUSAGE,"Button",BS_AUTOCHECKBOX | + CONTROL "CPU gp(&C)",IDC_CPUUSAGE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,50,53,10 - CONTROL "CPU ŽžŠÔ(&E)",IDC_CPUTIME,"Button",BS_AUTOCHECKBOX | + CONTROL "CPU (&E)",IDC_CPUTIME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,61,48,10 - CONTROL "ƒƒ‚ƒŠŽg—p—Ê(&M)",IDC_MEMORYUSAGE,"Button",BS_AUTOCHECKBOX | + CONTROL "gp(&M)",IDC_MEMORYUSAGE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,72,63,10 - CONTROL "ƒƒ‚ƒŠŽg—p—ʃfƒ‹ƒ^(&D)",IDC_MEMORYUSAGEDELTA,"Button", + CONTROL "gpʃf^(&D)",IDC_MEMORYUSAGEDELTA,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,7,83,82,10 - CONTROL "Å‘僁ƒ‚ƒŠŽg—p—Ê(&K)",IDC_PEAKMEMORYUSAGE,"Button", + CONTROL "ő僁gp(&K)",IDC_PEAKMEMORYUSAGE,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,7,94,82,10 - CONTROL "ƒy[ƒW ƒtƒHƒ‹ƒg(&F)",IDC_PAGEFAULTS,"Button",BS_AUTOCHECKBOX | + CONTROL "y[W tHg(&F)",IDC_PAGEFAULTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,105,53,10 - CONTROL "USER ƒIƒuƒWƒFƒNƒg(&U)",IDC_USEROBJECTS,"Button",BS_AUTOCHECKBOX | + CONTROL "USER IuWFNg(&U)",IDC_USEROBJECTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,116,62,10 - CONTROL "I/O “ǂݎæ‚è",IDC_IOREADS,"Button",BS_AUTOCHECKBOX | + CONTROL "I/O ǂݎ",IDC_IOREADS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,127,49,10 - CONTROL "I/O Read Bytes",IDC_IOREADBYTES,"Button", + CONTROL "I/O ǂݎoCg",IDC_IOREADBYTES,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,7,138,65,10 - CONTROL "ƒZƒbƒVƒ‡ƒ“ ID(&S)",IDC_SESSIONID,"Button",BS_AUTOCHECKBOX | + CONTROL "ZbV ID(&S)",IDC_SESSIONID,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,149,50,10 - CONTROL "ƒ†[ƒU[–¼(&N)",IDC_USERNAME,"Button",BS_AUTOCHECKBOX | + CONTROL "[U[(&N)",IDC_USERNAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,160,51,10 - CONTROL "ƒy[ƒW ƒtƒHƒ‹ƒg ƒfƒ‹ƒ^(&A)",IDC_PAGEFAULTSDELTA,"Button", + CONTROL "y[W tHg f^(&A)",IDC_PAGEFAULTSDELTA,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,107,28,72,10 - CONTROL "‰¼‘zƒƒ‚ƒŠ ƒTƒCƒY(&V)",IDC_VIRTUALMEMORYSIZE,"Button", + CONTROL "z TCY(&V)",IDC_VIRTUALMEMORYSIZE,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,107,39,77,10 - CONTROL "ƒy[ƒW ƒv[ƒ‹(&G)",IDC_PAGEDPOOL,"Button",BS_AUTOCHECKBOX | + CONTROL "y[W v[(&G)",IDC_PAGEDPOOL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,107,50,53,10 - CONTROL "”ñƒy[ƒW ƒv[ƒ‹(&O)",IDC_NONPAGEDPOOL,"Button", + CONTROL "y[W v[(&O)",IDC_NONPAGEDPOOL,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,107,61,67,10 - CONTROL "Šî–{—Dæ“x(&R)",IDC_BASEPRIORITY,"Button", + CONTROL "{Dx(&R)",IDC_BASEPRIORITY,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,107,72,55,10 - CONTROL "ƒnƒ“ƒhƒ‹‚̐”(&H)",IDC_HANDLECOUNT,"Button",BS_AUTOCHECKBOX | + CONTROL "nh̐(&H)",IDC_HANDLECOUNT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,107,83,59,10 - CONTROL "ƒXƒŒƒbƒh‚̐”(&T)",IDC_THREADCOUNT,"Button",BS_AUTOCHECKBOX | + CONTROL "Xbh̐(&T)",IDC_THREADCOUNT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,107,94,59,10 - CONTROL "GDI ƒIƒuƒWƒFƒNƒg",IDC_GDIOBJECTS,"Button",BS_AUTOCHECKBOX | + CONTROL "GDI IuWFNg",IDC_GDIOBJECTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,107,105,55,10 - CONTROL "I/O Writes",IDC_IOWRITES,"Button",BS_AUTOCHECKBOX | + CONTROL "I/O ",IDC_IOWRITES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,107,116,49,10 - CONTROL "I/O Write Bytes",IDC_IOWRITEBYTES,"Button", + CONTROL "I/O ݃oCg",IDC_IOWRITEBYTES,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,107,127,65,10 - CONTROL "I/O ‚»‚Ì‘¼",IDC_IOOTHER,"Button",BS_AUTOCHECKBOX | + CONTROL "I/O ̑",IDC_IOOTHER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,107,138,46,10 - CONTROL "I/O Other Bytes",IDC_IOOTHERBYTES,"Button", + CONTROL "I/O ̑̃oCg",IDC_IOOTHERBYTES,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,107,149,65,10 END @@ -521,135 +521,135 @@ END STRINGTABLE DISCARDABLE BEGIN - IDS_APP_TITLE "Task Manager" - IDC_TASKMGR "Task Manager" + IDS_APP_TITLE "^XN }l[W" + IDC_TASKMGR "^XN }l[W" IDS_IDLE_PROCESS "System Idle Process" END STRINGTABLE DISCARDABLE BEGIN - ID_FILE_NEW "V‚µ‚¢ƒvƒƒOƒ‰ƒ€‚ðŽÀs‚µ‚Ü‚·" - ID_OPTIONS_ALWAYSONTOP "Å¬‰»‚³‚ê‚È‚¢ŒÀ‚èAí‚Ƀ^ƒXƒN ƒ}ƒl[ƒWƒƒ‚ª‚Ù‚©‚Ì‚·‚ׂẴEƒBƒ“ƒhƒE‚æ‚è‚àŽè‘O‚É•\\ަ‚³‚ê‚Ü‚·" + ID_FILE_NEW "VvOs܂" + ID_OPTIONS_ALWAYSONTOP "ŏȂAɃ^XN }l[Wقׂ̂ẴEBhEOɕ\\܂" ID_OPTIONS_MINIMIZEONUSE - "[Ø‚è‘Ö‚¦] ‘€ì‚ðŽÀs‚·‚邯Aƒ^ƒXƒN ƒ}ƒl[ƒWƒƒ‚ªÅ¬‰»‚³‚ê‚Ü‚·" - ID_OPTIONS_HIDEWHENMINIMIZED "Å¬‰»‚³‚ꂽ‚Æ‚«‚ɁAƒ^ƒXƒN ƒ}ƒl[ƒWƒƒ‚ð‰B‚µ‚Ü‚·" - ID_VIEW_REFRESH "[XV‚Ì•p“x] ‚̐ݒè‚É‚©‚©‚í‚炸A¡‚·‚®ƒ^ƒXƒN ƒ}ƒl[ƒWƒƒ‚ðXV‚µ‚Ü‚·" - ID_VIEW_LARGE "‘å‚«‚¢ƒAƒCƒRƒ“‚ðŽg‚Á‚ă^ƒXƒN‚ð•\\ަ‚µ‚Ü‚·" - ID_VIEW_SMALL "¬‚³‚¢ƒAƒCƒRƒ“‚ðŽg‚Á‚ă^ƒXƒN‚ð•\\ަ‚µ‚Ü‚·" - ID_VIEW_DETAILS "Šeƒ^ƒXƒN‚̏î•ñ‚ð•\\ަ‚µ‚Ü‚·" - ID_VIEW_UPDATESPEED_HIGH "–ˆ•b 2 ‰ñ•\\ަ‚ðXV‚µ‚Ü‚·" - ID_VIEW_UPDATESPEED_NORMAL "2 •b‚É 1 ‰ñ•\\ަ‚ðXV‚µ‚Ü‚·" - ID_VIEW_UPDATESPEED_LOW "4 •b‚É 1 ‰ñ•\\ަ‚ðXV‚µ‚Ü‚·" + "[؂ւ] sƁA^XN }l[Wŏ܂" + ID_OPTIONS_HIDEWHENMINIMIZED "ŏꂽƂɁA^XN }l[WB܂" + ID_VIEW_REFRESH "[XV̕px] ̐ݒɂ炸A^XN }l[WXV܂" + ID_VIEW_LARGE "傫ACRgă^XN\\܂" + ID_VIEW_SMALL "ACRgă^XN\\܂" + ID_VIEW_DETAILS "e^XN̏\\܂" + ID_VIEW_UPDATESPEED_HIGH "b 2 \\XV܂" + ID_VIEW_UPDATESPEED_NORMAL "2 b 1 \\XV܂" + ID_VIEW_UPDATESPEED_LOW "4 b 1 \\XV܂" END STRINGTABLE DISCARDABLE BEGIN - ID_VIEW_UPDATESPEED_PAUSED "•\\ަ‚ðŽ©“®“I‚ɍXV‚µ‚Ü‚¹‚ñ" + ID_VIEW_UPDATESPEED_PAUSED "\\IɍXV܂" ID_WINDOWS_TILEHORIZONTALLY - "ƒfƒXƒNƒgƒbƒvã‚ŃEƒBƒ“ƒhƒE‚ðd‚È‚ç‚È‚¢‚悤‚ɏ㉺‚É•À‚ׂĕ\\ަ‚µ‚Ü‚·" - ID_WINDOWS_TILEVERTICALLY "ƒfƒXƒNƒgƒbƒvã‚ŃEƒBƒ“ƒhƒE‚ðd‚È‚ç‚È‚¢‚悤‚ɍ¶‰E‚É•À‚ׂĕ\\ަ‚µ‚Ü‚·" - ID_WINDOWS_MINIMIZE "ƒEƒBƒ“ƒhƒE‚ðÅ¬‰»‚µ‚Ü‚·" - ID_WINDOWS_MAXIMIZE "ƒEƒBƒ“ƒhƒE‚ðÅ‘剻‚µ‚Ü‚·" - ID_WINDOWS_CASCADE "ƒfƒXƒNƒgƒbƒvã‚ŃEƒBƒ“ƒhƒE‚ðd‚˂ĕ\\ަ‚µ‚Ü‚·" - ID_WINDOWS_BRINGTOFRONT "ƒEƒBƒ“ƒhƒE‚ðŽè‘O‚É•\\ަ‚µ‚Ü‚·‚ªAØ‚è‘Ö‚¦‚Ü‚¹‚ñB" - ID_HELP_TOPICS "ƒ^ƒXƒN ƒ}ƒl[ƒWƒƒ‚̃wƒ‹ƒv ƒgƒsƒbƒN‚ð•\\ަ‚µ‚Ü‚·" - ID_HELP_ABOUT "ƒvƒƒOƒ‰ƒ€î•ñAƒo[ƒWƒ‡ƒ“”ԍ†A’˜ìŒ ‚ð•\\ަ‚µ‚Ü‚·" - ID_FILE_EXIT "ƒ^ƒXƒN ƒ}ƒl[ƒWƒƒ ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚ðI—¹‚µ‚Ü‚·" + "fXNgbvŃEBhEdȂȂ悤ɏ㉺ɕׂĕ\\܂" + ID_WINDOWS_TILEVERTICALLY "fXNgbvŃEBhEdȂȂ悤ɍEɕׂĕ\\܂" + ID_WINDOWS_MINIMIZE "EBhEŏ܂" + ID_WINDOWS_MAXIMIZE "EBhEő剻܂" + ID_WINDOWS_CASCADE "fXNgbvŃEBhEd˂ĕ\\܂" + ID_WINDOWS_BRINGTOFRONT "EBhEOɕ\\܂A؂ւ܂B" + ID_HELP_TOPICS "^XN }l[W̃wv gsbN\\܂" + ID_HELP_ABOUT "vOAo[WԍA쌠\\܂" + ID_FILE_EXIT "^XN }l[W AvP[VI܂" ID_OPTIONS_SHOW16BITTASKS - "16 ƒrƒbƒg ƒ^ƒXƒN‚ðAŠÖ˜A•t‚¯‚ç‚ꂽ ntvdm.exe ‚̉º‚É•\\ަ‚µ‚Ü‚·" - ID_VIEW_SELECTCOLUMNS "[ƒvƒƒZƒX] ƒy[ƒW‚É•\\ަ‚·‚é—ñ‚ð‘I‘ð‚µ‚Ü‚·" - ID_VIEW_SHOWKERNELTIMES "ƒJ[ƒlƒ‹ŽžŠÔ‚ðƒpƒtƒH[ƒ}ƒ“ƒX ƒOƒ‰ƒtã‚É•\\ަ‚µ‚Ü‚·" + "16 rbg ^XNA֘Atꂽ ntvdm.exe ̉ɕ\\܂" + ID_VIEW_SELECTCOLUMNS "[vZX] y[Wɕ\\I܂" + ID_VIEW_SHOWKERNELTIMES "J[lԂptH[}X Otɕ\\܂" ID_VIEW_CPUHISTORY_ONEGRAPHALL - "1 ‚‚̗š—ðƒOƒ‰ƒt‚Å CPU Žg—p—¦‚̍‡Œv‚ð•\\ަ‚µ‚Ü‚·" - ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU "CPU Žg—p—¦‚Ì—š—ð‚ð CPU ‚²‚ƂɃOƒ‰ƒt‚Å•\\ަ‚µ‚Ü‚·" + "1 ‚̗Ot CPU gp̍v\\܂" + ID_VIEW_CPUHISTORY_ONEGRAPHPERCPU "CPU gp̗ CPU ƂɃOtŕ\\܂" ID_APPLICATION_PAGE_SWITCHTO - "ƒ^ƒXƒN‚ðŽè‘O‚É•\\ަ‚µAƒtƒH[ƒJƒX‚ðØ‚è‘Ö‚¦‚Ü‚·" + "^XNOɕ\\AtH[JX؂ւ܂" END STRINGTABLE DISCARDABLE BEGIN - ID_ENDTASK "‘I‘ð‚³‚ê‚Ä‚¢‚éƒ^ƒXƒN‚ɏI—¹‚·‚邿‚¤Žwަ‚µ‚Ü‚·" - ID_GOTOPROCESS "‘I‘ð‚³‚ê‚Ä‚¢‚éƒ^ƒXƒN‚̃vƒƒZƒX‚ɃtƒH[ƒJƒX‚ðØ‚è‘Ö‚¦‚Ü‚·" - ID_RESTORE "‰B‚ê‚Ä‚¢‚½ƒ^ƒXƒN ƒ}ƒl[ƒWƒƒ‚ðŒ³‚É–ß‚µ‚Ü‚·" - ID_PROCESS_PAGE_ENDPROCESS "ƒVƒXƒeƒ€‚©‚çƒvƒƒZƒX‚ðíœ‚µ‚Ü‚·" + ID_ENDTASK "IĂ^XNɏI悤w܂" + ID_GOTOPROCESS "IĂ^XÑvZXɃtH[JX؂ւ܂" + ID_RESTORE "BĂ^XN }l[Wɖ߂܂" + ID_PROCESS_PAGE_ENDPROCESS "VXevZX폜܂" ID_PROCESS_PAGE_ENDPROCESSTREE - "‚±‚̃vƒƒZƒX‚ÆŽqƒvƒƒZƒX‚ð‚·‚×‚Äíœ‚µ‚Ü‚·" - ID_PROCESS_PAGE_DEBUG "‚±‚̃vƒƒZƒX‚ɃfƒoƒbƒK‚ð“Y•t‚µ‚Ü‚·" + "̃vZXƎqvZXׂč폜܂" + ID_PROCESS_PAGE_DEBUG "̃vZXɃfobKYt܂" ID_PROCESS_PAGE_SETAFFINITY - "‚ǂ̃vƒƒZƒbƒT‚ŃvƒƒZƒX‚ðŽÀs‚·‚é‚©‚𐧌䂵‚Ü‚·" + "ǂ̃vZbTŃvZXs邩𐧌䂵܂" ID_PROCESS_PAGE_SETPRIORITY_REALTIME - "ƒvƒƒZƒX‚ðƒŠƒAƒ‹ƒ^ƒCƒ€—Dæ“xƒNƒ‰ƒX‚ɐݒ肵‚Ü‚·" - ID_PROCESS_PAGE_SETPRIORITY_HIGH "ƒvƒƒZƒX‚ð‚—Dæ“xƒNƒ‰ƒX‚ɐݒ肵‚Ü‚·" + "vZXA^CDxNXɐݒ肵܂" + ID_PROCESS_PAGE_SETPRIORITY_HIGH "vZXDxNXɐݒ肵܂" ID_PROCESS_PAGE_SETPRIORITY_ABOVENORMAL - "ƒvƒƒZƒX‚ð’ʏíˆÈã‚Ì—Dæ“xƒNƒ‰ƒX‚ɐݒ肵‚Ü‚·" + "vZXʏȏ̗DxNXɐݒ肵܂" ID_PROCESS_PAGE_SETPRIORITY_NORMAL - "ƒvƒƒZƒX‚ð’ʏí—Dæ“xƒNƒ‰ƒX‚ɐݒ肵‚Ü‚·" + "vZXʏDxNXɐݒ肵܂" ID_PROCESS_PAGE_SETPRIORITY_BELOWNORMAL - "ƒvƒƒZƒX‚ð’ʏíˆÈ‰º‚Ì—Dæ“xƒNƒ‰ƒX‚ɐݒ肵‚Ü‚·" - ID_PROCESS_PAGE_SETPRIORITY_LOW "ƒvƒƒZƒX‚ð’á—Dæ“xƒNƒ‰ƒX‚ɐݒ肵‚Ü‚·" + "vZXʏȉ̗DxNXɐݒ肵܂" + ID_PROCESS_PAGE_SETPRIORITY_LOW "vZXDxNXɐݒ肵܂" END STRINGTABLE DISCARDABLE BEGIN - IDS_TAB_APPS "Applications" - IDS_TAB_PROCESSES "ƒvƒƒZƒX" - IDS_TAB_PERFORMANCE "ƒpƒtƒH[ƒ}ƒ“ƒX" - IDS_TAB_TASK "ƒ^ƒXƒN" - IDS_TAB_STATUS "Status" - IDS_TAB_IMAGENAME "ƒCƒ[ƒW–¼" + IDS_TAB_APPS "AvP[V" + IDS_TAB_PROCESSES "vZX" + IDS_TAB_PERFORMANCE "ptH[}X" + IDS_TAB_TASK "^XN" + IDS_TAB_STATUS "" + IDS_TAB_IMAGENAME "C[W" IDS_TAB_PID "PID" - IDS_TAB_USERNAME "ƒ†[ƒU[–¼" - IDS_TAB_SESSIONID "ƒZƒbƒVƒ‡ƒ“ ID" + IDS_TAB_USERNAME "[U[" + IDS_TAB_SESSIONID "ZbV ID" IDS_TAB_CPU "CPU" - IDS_TAB_CPUTIME "CPU Time" - IDS_TAB_MEMUSAGE "Mem Usage" - IDS_TAB_PEAKMEMUSAGE "Peak Mem Usage" - IDS_TAB_MEMDELTA "ƒƒ‚ƒŠ ƒfƒ‹ƒ^" - IDS_TAB_PAGEFAULT "ƒy[ƒW ƒtƒHƒ‹ƒg" - IDS_TAB_PFDELTA "ƒy[ƒW ƒtƒHƒ‹ƒg ƒfƒ‹ƒ^" - IDS_TAB_VMSIZE "‰¼‘zƒƒ‚ƒŠ ƒTƒCƒY" - IDS_TAB_PAGEDPOOL "ƒy[ƒW ƒv[ƒ‹" - IDS_TAB_NPPOOL "”ñƒy[ƒW ƒv[ƒ‹" - IDS_TAB_BASEPRI "Šî–{—Dæ“x" - IDS_TAB_HANDLES "ƒnƒ“ƒhƒ‹" - IDS_TAB_THREADS "ƒXƒŒƒbƒh" - IDS_TAB_USERPBJECTS "USER ƒIƒuƒWƒFƒNƒg" - IDS_TAB_GDIOBJECTS "GDI ƒIƒuƒWƒFƒNƒg" - IDS_TAB_IOREADS "I/O “ǂݎæ‚è" - IDS_TAB_IOWRITES "I/O Writes" - IDS_TAB_IOOTHER "I/O ‚»‚Ì‘¼" - IDS_TAB_IOREADBYTES "I/O Read Bytes" - IDS_TAB_IOWRITESBYTES "I/O Write Bytes" - IDS_TAB_IOOTHERBYTES "I/O Other Bytes" - IDS_MENU_SELECTCOLUMNS "—ñ‚Ì‘I‘ð(&S)..." - IDS_MENU_16BITTASK "16 ƒrƒbƒg ƒ^ƒXƒN‚Ì•\\ަ(&S)" - IDS_MENU_WINDOWS "ƒEƒBƒ“ƒhƒE(&W)" - IDS_MENU_LARGEICONS "‘å‚«‚¢ƒAƒCƒRƒ“(&G)" - IDS_MENU_SMALLICONS "¬‚³‚¢ƒAƒCƒRƒ“(&M)" - IDS_MENU_DETAILS "Ú×(&D)" - IDS_MENU_ONEGRAPHALLCPUS "‚·‚×‚Ä‚Ì CPU ‚Å 1 ƒOƒ‰ƒt(&O)" - IDS_MENU_ONEGRAPHPERCPU "CPU ‚²‚Æ‚É 1 ƒOƒ‰ƒt(&P)" - IDS_MENU_CPUHISTORY "CPU —š—ð(&C)" - IDS_MENU_SHOWKERNELTIMES "ƒJ[ƒlƒ‹ŽžŠÔ‚ð•\\ަ‚·‚é(&S)" - IDS_CREATENEWTASK "V‚µ‚¢ƒ^ƒXƒN‚̍쐬" - IDS_CREATENEWTASK_DESC "ŽÀs‚·‚éƒvƒƒOƒ‰ƒ€–¼A‚Ü‚½‚ÍŠJ‚­ƒtƒHƒ‹ƒ_‚âƒhƒLƒ…ƒƒ“ƒg–¼AƒCƒ“ƒ^[ƒlƒbƒg ƒŠƒ\\[ƒX–¼‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢B" - IDS_MSG_ACCESSPROCESSAFF "ƒvƒƒZƒX‚ÌŠÖŒW‚ւ̃AƒNƒZƒX‚Ü‚½‚͐ݒ肪‚Å‚«‚Ü‚¹‚ñ" - IDS_MSG_PROCESSONEPRO "ƒvƒƒZƒX‚́A­‚È‚­‚Æ‚à 1 ‚‚̃vƒƒZƒbƒT‚ÆŠÖŒW‚ðŽ‚½‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB" - IDS_MSG_INVALIDOPTION "Invalid Option" - IDS_MSG_UNABLEDEBUGPROCESS "ƒfƒoƒbƒK‚ð“Y•t‚Å‚«‚Ü‚¹‚ñ" - IDS_MSG_WARNINGDEBUG "Œx: ‚±‚̃vƒƒZƒX‚ðƒfƒoƒbƒO‚·‚邯Aƒf[ƒ^‚ªŽ¸‚í‚ê‚é‰Â”\\«‚ª‚ ‚è‚Ü‚·B\nƒfƒoƒbƒK‚ð“Y•t‚µ‚Ü‚·‚©?" - IDS_MSG_TASKMGRWARNING "Task Manager Warning" - IDS_MSG_WARNINGTERMINATING "Œx: ƒvƒƒZƒX‚ðI—¹‚·‚邯Aƒf[ƒ^‚ªŽ¸‚í‚ꂽ‚èAƒVƒXƒeƒ€‚ª\n•sˆÀ’è‚ɂȂÁ‚½‚è‚·‚é‚Ȃǂ́A—\\Šú‚µ‚È‚¢Œ‹‰Ê‚ɂȂ邱‚Æ‚ª‚ ‚è‚Ü‚·B\nƒvƒƒZƒX‚ðI—¹‚·‚é‘O‚ɁAó‘Ô‚Ü‚½‚̓f[ƒ^‚ð•Û‘¶‚·‚é‚©‚Ç‚¤‚©‚Ì\nŠm”FƒƒbƒZ[ƒW‚Í•\\ަ‚³‚ê‚Ü‚¹‚ñBƒvƒƒZƒX‚ðI—¹‚µ‚Ü‚·‚©?" - IDS_MSG_UNABLETERMINATEPRO "ƒvƒƒZƒX‚ðI—¹‚Å‚«‚Ü‚¹‚ñ" - IDS_MSG_UNABLECHANGEPRIORITY "—Dæ“x‚ð•ύX‚Å‚«‚Ü‚¹‚ñ" - IDS_MSG_WARNINGCHANGEPRIORITY "Œx: ‚±‚̃vƒƒZƒX‚Ì—Dæ“xƒNƒ‰ƒX‚ð•ύX‚·‚邯AƒVƒXƒeƒ€‚ª•sˆÀ’è‚É\n‚È‚é‚ȂǁA—\\Šú‚µ‚È‚¢Œ‹‰Ê‚ɂȂ邱‚Æ‚ª‚ ‚è‚Ü‚·B\n—Dæ“xƒNƒ‰ƒX‚ð•ύX‚µ‚Ü‚·‚©?" - IDS_MSG_TRAYICONCPUUSAGE "CPU Žg—p—¦: %d%%" - IDS_STATUS_MEMUSAGE "ƒƒ‚ƒŠŽg—p—Ê: %dKB / %dKB" - IDS_STATUS_CPUUSAGE "CPU Žg—p—¦: %3d%%" - IDS_STATUS_PROCESSES "ƒvƒƒZƒX: %d" - IDS_Not_Responding "‰ž“š‚È‚µ" - IDS_Running "ŽÀs’†" + IDS_TAB_CPUTIME "CPU " + IDS_TAB_MEMUSAGE "gp" + IDS_TAB_PEAKMEMUSAGE "ő僁gp" + IDS_TAB_MEMDELTA " f^" + IDS_TAB_PAGEFAULT "y[W tHg" + IDS_TAB_PFDELTA "y[W tHg f^" + IDS_TAB_VMSIZE "z TCY" + IDS_TAB_PAGEDPOOL "y[W v[" + IDS_TAB_NPPOOL "y[W v[" + IDS_TAB_BASEPRI "{Dx" + IDS_TAB_HANDLES "nh" + IDS_TAB_THREADS "Xbh" + IDS_TAB_USERPBJECTS "USER IuWFNg" + IDS_TAB_GDIOBJECTS "GDI IuWFNg" + IDS_TAB_IOREADS "I/O ǂݎ" + IDS_TAB_IOWRITES "I/O " + IDS_TAB_IOOTHER "I/O ̑" + IDS_TAB_IOREADBYTES "I/O ǂݎoCg" + IDS_TAB_IOWRITESBYTES "I/O ݃oCg" + IDS_TAB_IOOTHERBYTES "I/O ̑̃oCg" + IDS_MENU_SELECTCOLUMNS "̑I(&S)..." + IDS_MENU_16BITTASK "16 rbg ^XN̕\\(&S)" + IDS_MENU_WINDOWS "EBhE(&W)" + IDS_MENU_LARGEICONS "傫ACR(&G)" + IDS_MENU_SMALLICONS "ACR(&M)" + IDS_MENU_DETAILS "ڍ(&D)" + IDS_MENU_ONEGRAPHALLCPUS "ׂĂ CPU 1 Ot(&O)" + IDS_MENU_ONEGRAPHPERCPU "CPU Ƃ 1 Ot(&P)" + IDS_MENU_CPUHISTORY "CPU (&C)" + IDS_MENU_SHOWKERNELTIMES "J[lԂ\\(&S)" + IDS_CREATENEWTASK "V^XN̍쐬" + IDS_CREATENEWTASK_DESC "svOA܂͊JtH_hLgAC^[lbg \\[X͂ĂB" + IDS_MSG_ACCESSPROCESSAFF "vZX̊֌Wւ̃ANZX܂͐ݒ肪ł܂" + IDS_MSG_PROCESSONEPRO "vZX́AȂƂ 1 ‚̃vZbTƊ֌WȂ΂Ȃ܂B" + IDS_MSG_INVALIDOPTION "ȃIvV" + IDS_MSG_UNABLEDEBUGPROCESS "fobKYtł܂" + IDS_MSG_WARNINGDEBUG "x: ̃vZXfobOƁAf[^”\\܂B\nfobKYt܂?" + IDS_MSG_TASKMGRWARNING "^XN }l[W̌x" + IDS_MSG_WARNINGTERMINATING "x: vZXIƁAf[^ꂽAVXe\nsɂȂ肷Ȃǂ́A\\ȂʂɂȂ邱Ƃ܂B\nvZXIOɁAԂ܂̓f[^ۑ邩ǂ\nmFbZ[W͕\\܂BvZXI܂?" + IDS_MSG_UNABLETERMINATEPRO "vZXIł܂" + IDS_MSG_UNABLECHANGEPRIORITY "DxύXł܂" + IDS_MSG_WARNINGCHANGEPRIORITY "x: ̃vZX̗DxNXύXƁAVXes\nȂȂǁA\\ȂʂɂȂ邱Ƃ܂B\nDxNXύX܂?" + IDS_MSG_TRAYICONCPUUSAGE "CPU gp: %d%%" + IDS_STATUS_MEMUSAGE "gp: %dKB / %dKB" + IDS_STATUS_CPUUSAGE "CPU gp: %3d%%" + IDS_STATUS_PROCESSES "vZX: %d" + IDS_Not_Responding "Ȃ" + IDS_Running "s" END From 9468f98ffd08e4f941e30fcadc73b2e6e9449213 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 10 Feb 2011 11:03:43 +0000 Subject: [PATCH 010/287] Fix build of shlwapi svn path=/trunk/; revision=50645 --- reactos/dll/win32/shlwapi/shlwapi_Hu.rc | 14 +++++++------- reactos/dll/win32/shlwapi/shlwapi_Pt.rc | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/reactos/dll/win32/shlwapi/shlwapi_Hu.rc b/reactos/dll/win32/shlwapi/shlwapi_Hu.rc index c8ffa5aa296..676b1d4c87d 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_Hu.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_Hu.rc @@ -32,17 +32,17 @@ FONT 8, "MS Shell Dlg" { LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 - CHECKBOX "Ne jelen&tse meg ezt az zenetet mgegyszer", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&OK", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Mgse", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Igen", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Nem", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + CHECKBOX "Ne jelení&tse meg ezt az üzenetet mégegyszer", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&OK" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Mégse" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Igen" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Nem" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } STRINGTABLE { - IDS_BYTES_FORMAT "%ld bjt" - IDS_TIME_INTERVAL_HOURS " ra" + IDS_BYTES_FORMAT "%ld bájt" + IDS_TIME_INTERVAL_HOURS " óra" IDS_TIME_INTERVAL_MINUTES " perc" IDS_TIME_INTERVAL_SECONDS " mp" } diff --git a/reactos/dll/win32/shlwapi/shlwapi_Pt.rc b/reactos/dll/win32/shlwapi/shlwapi_Pt.rc index 6014fcc6e2c..2080fc5bcdc 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_Pt.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_Pt.rc @@ -2,8 +2,8 @@ * Portuguese resources for shlwapi * * Copyright 2004 Marcelo Duarte - * Copyright 2006 Amrico Jos Melo - * Copyright 2010 Gustavo Henrique Milar + * Copyright 2006 Américo José Melo + * Copyright 2010 Gustavo Henrique Milaré * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -33,11 +33,11 @@ FONT 8, "MS Shell Dlg" { LTEXT "", IDS_ERR_USER_MSG2, 15, 5, 28, 20 LTEXT "", IDS_ERR_USER_MSG, 15, 5, 210, 8 - CHECKBOX "No &mostrar esta mensagem novamente", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&OK", IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Cancelar", IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&Sim", IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP - PUSHBUTTON L"&No", IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + CHECKBOX "Não &mostrar esta mensagem novamente", IDC_ERR_DONT_SHOW, 5, 20, 210, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&OK" IDOK, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Cancelar" IDCANCEL, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Sim" IDYES, 105, 40, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON L"&Não" IDNO, 160, 40, 50, 14, WS_GROUP | WS_TABSTOP } STRINGTABLE From 5c40e3e852e47857e697e4bcc6c5a3beb336f38a Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Thu, 10 Feb 2011 11:18:00 +0000 Subject: [PATCH 011/287] - Edijs: Properly load window size and position. See issue #5872 for more details. svn path=/trunk/; revision=50646 --- reactos/base/applications/notepad/settings.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/reactos/base/applications/notepad/settings.c b/reactos/base/applications/notepad/settings.c index 9a68c8b43db..c0a12491694 100644 --- a/reactos/base/applications/notepad/settings.c +++ b/reactos/base/applications/notepad/settings.c @@ -134,10 +134,10 @@ void LoadSettings(void) QueryBool(hKey, _T("fWrap"), &Globals.bWrapLongLines); QueryBool(hKey, _T("fStatusBar"), &Globals.bShowStatusBar); - QueryByte(hKey, _T("iWindowPosX"), (LPBYTE)&Globals.main_rect.left); - QueryByte(hKey, _T("iWindowPosX"), (LPBYTE)&Globals.main_rect.top); - QueryByte(hKey, _T("iWindowPosDX"), (LPBYTE)&dx); - QueryByte(hKey, _T("iWindowPosDY"), (LPBYTE)&dy); + QueryDword(hKey, _T("iWindowPosX"), (DWORD*)&Globals.main_rect.left); + QueryDword(hKey, _T("iWindowPosY"), (DWORD*)&Globals.main_rect.top); + QueryDword(hKey, _T("iWindowPosDX"), (DWORD*)&dx); + QueryDword(hKey, _T("iWindowPosDY"), (DWORD*)&dy); Globals.main_rect.right = Globals.main_rect.left + dx; Globals.main_rect.bottom = Globals.main_rect.top + dy; From f24d76dc846b66fd6c5ea439b32d30c76f2adc56 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 10 Feb 2011 11:35:05 +0000 Subject: [PATCH 012/287] Merge CRT changes from cmake branch (mainly MSVC compilation fixes) svn path=/trunk/; revision=50647 --- reactos/lib/sdk/crt/except/cpp.c | 17 +++++++ reactos/lib/sdk/crt/except/cppexcept.c | 26 ++++++++++- reactos/lib/sdk/crt/except/except.c | 51 +++++++++++++++++++++ reactos/lib/sdk/crt/include/internal/file.h | 2 - reactos/lib/sdk/crt/include/internal/time.h | 4 +- reactos/lib/sdk/crt/math/abs.c | 5 ++ reactos/lib/sdk/crt/math/acos.c | 3 ++ reactos/lib/sdk/crt/math/asin.c | 3 ++ reactos/lib/sdk/crt/math/cosf.c | 2 + reactos/lib/sdk/crt/math/cosh.c | 3 ++ reactos/lib/sdk/crt/math/labs.c | 5 ++ reactos/lib/sdk/crt/math/logf.c | 2 + reactos/lib/sdk/crt/math/modf.c | 3 +- reactos/lib/sdk/crt/math/powf.c | 3 +- reactos/lib/sdk/crt/math/sinf.c | 2 + reactos/lib/sdk/crt/math/sinh.c | 4 ++ reactos/lib/sdk/crt/math/tanh.c | 4 ++ reactos/lib/sdk/crt/mem/memcmp.c | 5 ++ reactos/lib/sdk/crt/misc/assert.c | 2 +- reactos/lib/sdk/crt/stdlib/rot.c | 4 ++ reactos/lib/sdk/crt/string/scanf.h | 2 +- reactos/lib/sdk/crt/string/strset.c | 4 ++ reactos/lib/sdk/crt/string/wcs.c | 4 ++ reactos/lib/sdk/crt/time/ctime.c | 1 + reactos/lib/sdk/crt/time/futime.c | 1 + reactos/lib/sdk/crt/time/utime.c | 1 + 26 files changed, 154 insertions(+), 9 deletions(-) diff --git a/reactos/lib/sdk/crt/except/cpp.c b/reactos/lib/sdk/crt/except/cpp.c index 445ce084691..158a277c9ec 100644 --- a/reactos/lib/sdk/crt/except/cpp.c +++ b/reactos/lib/sdk/crt/except/cpp.c @@ -63,6 +63,10 @@ typedef struct _rtti_object_locator #define THISCALL(func) __thiscall_ ## func #define THISCALL_NAME(func) __ASM_NAME("__thiscall_" #func) + +#ifdef _MSC_VER +#include +#else #define DEFINE_THISCALL_WRAPPER(func,args) \ extern void THISCALL(func)(void); \ __ASM_GLOBAL_FUNC(__thiscall_ ## func, \ @@ -70,6 +74,8 @@ typedef struct _rtti_object_locator "pushl %ecx\n\t" \ "pushl %eax\n\t" \ "jmp " __ASM_NAME(#func) __ASM_STDCALL(args) ) +#endif /* _MSC_VER */ + #else /* __i386__ */ #define THISCALL(func) func @@ -658,6 +664,7 @@ void * __stdcall MSVCRT_type_info_vector_dtor(type_info * _this, unsigned int fl /* vtables */ +#ifdef __GNUC__ #ifdef _WIN64 #define __ASM_VTABLE(name,funcs) \ @@ -701,6 +708,16 @@ __ASM_EXCEPTION_VTABLE(__non_rtti_object) #ifndef __GNUC__ } #endif +#endif + +#ifdef _MSC_VER +#pragma message ("HAXX!") +const vtable_ptr MSVCRT_exception_vtable; +const vtable_ptr MSVCRT_bad_typeid_vtable; +const vtable_ptr MSVCRT_bad_cast_vtable; +const vtable_ptr MSVCRT___non_rtti_object_vtable; +const vtable_ptr MSVCRT_type_info_vtable; +#endif /* Static RTTI for exported objects */ diff --git a/reactos/lib/sdk/crt/except/cppexcept.c b/reactos/lib/sdk/crt/except/cppexcept.c index 02a74a952e9..5ff9e2b0f39 100644 --- a/reactos/lib/sdk/crt/except/cppexcept.c +++ b/reactos/lib/sdk/crt/except/cppexcept.c @@ -45,6 +45,9 @@ static inline void *call_ebp_func( void *func, void *ebp ) { void *ret; int dummy; +#ifdef _MSC_VER +#pragma message ("call_ebp_func is unimplemented for MSC") +#else __asm__ __volatile__ ("pushl %%ebx\n\t" "pushl %%ebp\n\t" "movl %4,%%ebp\n\t" @@ -53,6 +56,7 @@ static inline void *call_ebp_func( void *func, void *ebp ) "popl %%ebx" : "=a" (ret), "=S" (dummy), "=D" (dummy) : "0" (func), "1" (ebp) : "ecx", "edx", "memory" ); +#endif return ret; } @@ -60,6 +64,9 @@ static inline void *call_ebp_func( void *func, void *ebp ) static inline void call_copy_ctor( void *func, void *this, void *src, int has_vbase ) { TRACE( "calling copy ctor %p object %p src %p\n", func, this, src ); +#ifdef _MSC_VER +#pragma message ("call_copy_ctor is unimplemented for MSC") +#else if (has_vbase) /* in that case copy ctor takes an extra bool indicating whether to copy the base class */ __asm__ __volatile__("pushl $1; pushl %2; call *%0" @@ -67,19 +74,28 @@ static inline void call_copy_ctor( void *func, void *this, void *src, int has_vb else __asm__ __volatile__("pushl %2; call *%0" : : "r" (func), "c" (this), "r" (src) : "eax", "edx", "memory" ); +#endif } /* call the destructor of the exception object */ static inline void call_dtor( void *func, void *object ) { +#ifdef _MSC_VER +#pragma message ("call_dtor is unimplemented for MSC") +#else __asm__ __volatile__("call *%0" : : "r" (func), "c" (object) : "eax", "edx", "memory" ); +#endif } /* continue execution to the specified address after exception is caught */ static inline void DECLSPEC_NORETURN continue_after_catch( cxx_exception_frame* frame, void *addr ) { +#ifdef _MSC_VER +#pragma message ("continue_after_catch is unimplemented for MSC") +#else __asm__ __volatile__("movl -4(%0),%%esp; leal 12(%0),%%ebp; jmp *%1" : : "r" (frame), "a" (addr) ); +#endif for (;;) ; /* unreached */ } @@ -415,6 +431,14 @@ DWORD CDECL cxx_frame_handler( PEXCEPTION_RECORD rec, cxx_exception_frame* frame */ extern DWORD CDECL __CxxFrameHandler( PEXCEPTION_RECORD rec, EXCEPTION_REGISTRATION_RECORD* frame, PCONTEXT context, EXCEPTION_REGISTRATION_RECORD** dispatch ); +#ifdef _MSC_VER +#pragma message ("__CxxFrameHandler is unimplemented for MSC") +DWORD CDECL __CxxFrameHandler( PEXCEPTION_RECORD rec, EXCEPTION_REGISTRATION_RECORD* frame, + PCONTEXT context, EXCEPTION_REGISTRATION_RECORD** dispatch ) +{ + return 0; +} +#else __ASM_GLOBAL_FUNC( __CxxFrameHandler, "pushl $0\n\t" /* nested_trylevel */ __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") @@ -434,7 +458,7 @@ __ASM_GLOBAL_FUNC( __CxxFrameHandler, "add $28,%esp\n\t" __ASM_CFI(".cfi_adjust_cfa_offset -28\n\t") "ret" ) - +#endif /********************************************************************* * __CxxLongjmpUnwind (MSVCRT.@) diff --git a/reactos/lib/sdk/crt/except/except.c b/reactos/lib/sdk/crt/except/except.c index 663677776fd..af143593527 100644 --- a/reactos/lib/sdk/crt/except/except.c +++ b/reactos/lib/sdk/crt/except/except.c @@ -96,6 +96,57 @@ static inline int call_unwind_func( int (*func)(void), void *ebp ) : "ecx", "edx", "memory" ); return ret; } +#elif defined(_MSC_VER) +#pragma warning(push) +#pragma warning(disable:4731) // Don't complain about changing ebp +void __inline call_finally_block( void *code_block, void *base_ptr ) +{ + __asm + { + mov eax, code_block + mov ebp, base_ptr + call [eax] + } +} + +int __inline call_filter( int (*func)(PEXCEPTION_POINTERS), void *arg, void *_ebp ) +{ + int _ret; + __asm + { + push ebp + mov eax, arg + push eax + mov ebp, _ebp + mov eax, func + call [eax] + mov _ret, eax + pop ebp + pop ebp + } + return _ret; +} +int __inline call_unwind_func( int (*func)(void), void *_ebp ) +{ + int _ret; + + __asm + { + push ebp + push ebx + push esi + push edi + mov ebp, _ebp + call dword ptr [func] + mov _ret, eax + pop edi + pop esi + pop ebx + pop ebp + } + return _ret; +} +#pragma warning(pop) #endif static DWORD MSVCRT_nested_handler(PEXCEPTION_RECORD rec, diff --git a/reactos/lib/sdk/crt/include/internal/file.h b/reactos/lib/sdk/crt/include/internal/file.h index bb175fe42ea..247aa48bec9 100644 --- a/reactos/lib/sdk/crt/include/internal/file.h +++ b/reactos/lib/sdk/crt/include/internal/file.h @@ -127,8 +127,6 @@ int access_dirW(const wchar_t *_path); int _isnanl(long double x); int _isinfl(long double x); -int _isnan(double x); -int _isinf(double x); /* Flags for the iobuf structure (for reference) */ #if 0 diff --git a/reactos/lib/sdk/crt/include/internal/time.h b/reactos/lib/sdk/crt/include/internal/time.h index ad7227981fd..852bdabec4f 100644 --- a/reactos/lib/sdk/crt/include/internal/time.h +++ b/reactos/lib/sdk/crt/include/internal/time.h @@ -20,9 +20,9 @@ FileTimeToUnixTime(const FILETIME *FileTime, USHORT *millitm) ULargeInt.HighPart = FileTime->dwHighDateTime; ULargeInt.QuadPart -= DIFFTIME; - time = ULargeInt.QuadPart / 10000000; + time = (time_t)(ULargeInt.QuadPart / 10000000); if (millitm) - *millitm = (ULargeInt.QuadPart % 10000000) / 10000; + *millitm = (USHORT)((ULargeInt.QuadPart % 10000000) / 10000); return time; } diff --git a/reactos/lib/sdk/crt/math/abs.c b/reactos/lib/sdk/crt/math/abs.c index a18f19b2666..7563c362b6c 100644 --- a/reactos/lib/sdk/crt/math/abs.c +++ b/reactos/lib/sdk/crt/math/abs.c @@ -1,5 +1,10 @@ /* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */ +#ifdef _MSC_VER +#pragma warning(disable: 4164) +#pragma function(abs) +#endif + /* * @implemented */ diff --git a/reactos/lib/sdk/crt/math/acos.c b/reactos/lib/sdk/crt/math/acos.c index ac348f87228..4f7a65069eb 100644 --- a/reactos/lib/sdk/crt/math/acos.c +++ b/reactos/lib/sdk/crt/math/acos.c @@ -21,6 +21,9 @@ #include +#ifdef _MSC_VER +#pragma function(acos) +#endif double acos(double __x) { diff --git a/reactos/lib/sdk/crt/math/asin.c b/reactos/lib/sdk/crt/math/asin.c index 5be040d1154..9a7ececcc6a 100644 --- a/reactos/lib/sdk/crt/math/asin.c +++ b/reactos/lib/sdk/crt/math/asin.c @@ -21,6 +21,9 @@ #include +#ifdef _MSC_VER +#pragma function(asin) +#endif double asin(double __x) { diff --git a/reactos/lib/sdk/crt/math/cosf.c b/reactos/lib/sdk/crt/math/cosf.c index d2329c7f254..0605582efd4 100644 --- a/reactos/lib/sdk/crt/math/cosf.c +++ b/reactos/lib/sdk/crt/math/cosf.c @@ -3,7 +3,9 @@ * This file is part of the w64 mingw-runtime package. * No warranty is given; refer to the file DISCLAIMER.PD within this package. */ +#define cosf _dummy_cosf #include +#undef cosf float cosf(float _X) { diff --git a/reactos/lib/sdk/crt/math/cosh.c b/reactos/lib/sdk/crt/math/cosh.c index e81fde563f8..e97651f549c 100644 --- a/reactos/lib/sdk/crt/math/cosh.c +++ b/reactos/lib/sdk/crt/math/cosh.c @@ -1,6 +1,9 @@ /* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */ #include +#ifdef _MSC_VER +#pragma function(cosh) +#endif /* * @implemented diff --git a/reactos/lib/sdk/crt/math/labs.c b/reactos/lib/sdk/crt/math/labs.c index b4fc33ec0a0..51a1d80f8f9 100644 --- a/reactos/lib/sdk/crt/math/labs.c +++ b/reactos/lib/sdk/crt/math/labs.c @@ -1,5 +1,10 @@ /* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */ +#ifdef _MSC_VER +#pragma warning(disable: 4164) +#pragma function(labs) +#endif + /* * @implemented */ diff --git a/reactos/lib/sdk/crt/math/logf.c b/reactos/lib/sdk/crt/math/logf.c index 0da1dae909f..417250f46a8 100644 --- a/reactos/lib/sdk/crt/math/logf.c +++ b/reactos/lib/sdk/crt/math/logf.c @@ -3,7 +3,9 @@ * This file is part of the w64 mingw-runtime package. * No warranty is given; refer to the file DISCLAIMER.PD within this package. */ +#define logf _dummy_logf #include +#undef logf float logf(float _X) { diff --git a/reactos/lib/sdk/crt/math/modf.c b/reactos/lib/sdk/crt/math/modf.c index 8212070e2c8..c6d959293ff 100644 --- a/reactos/lib/sdk/crt/math/modf.c +++ b/reactos/lib/sdk/crt/math/modf.c @@ -9,8 +9,9 @@ * is preserved. * ==================================================== */ - +#define modfl _dummy_modfl #include +#undef modfl //static const double one = 1.0; diff --git a/reactos/lib/sdk/crt/math/powf.c b/reactos/lib/sdk/crt/math/powf.c index 55eb92a2e3f..e9cc35ad642 100644 --- a/reactos/lib/sdk/crt/math/powf.c +++ b/reactos/lib/sdk/crt/math/powf.c @@ -3,7 +3,8 @@ * This file is part of the w64 mingw-runtime package. * No warranty is given; refer to the file DISCLAIMER.PD within this package. */ -#include + +double __cdecl pow(double x, double y); float powf(float x, float y) { diff --git a/reactos/lib/sdk/crt/math/sinf.c b/reactos/lib/sdk/crt/math/sinf.c index 1069dcf18b7..92ffc9900d4 100644 --- a/reactos/lib/sdk/crt/math/sinf.c +++ b/reactos/lib/sdk/crt/math/sinf.c @@ -3,7 +3,9 @@ * This file is part of the w64 mingw-runtime package. * No warranty is given; refer to the file DISCLAIMER.PD within this package. */ +#define sinf _dummy_sinf #include +#undef sinf float sinf(float _X) { diff --git a/reactos/lib/sdk/crt/math/sinh.c b/reactos/lib/sdk/crt/math/sinh.c index fa9e5f7586d..7de7744348c 100644 --- a/reactos/lib/sdk/crt/math/sinh.c +++ b/reactos/lib/sdk/crt/math/sinh.c @@ -1,6 +1,10 @@ /* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */ #include +#ifdef _MSC_VER +#pragma function(sinh) +#endif + /* * @implemented */ diff --git a/reactos/lib/sdk/crt/math/tanh.c b/reactos/lib/sdk/crt/math/tanh.c index 8c231c12c3a..43262f3b4ee 100644 --- a/reactos/lib/sdk/crt/math/tanh.c +++ b/reactos/lib/sdk/crt/math/tanh.c @@ -2,6 +2,10 @@ #include +#ifdef _MSC_VER +#pragma function(tanh) +#endif + /* * @implemented */ diff --git a/reactos/lib/sdk/crt/mem/memcmp.c b/reactos/lib/sdk/crt/mem/memcmp.c index 078238ebd20..b9b4334260f 100644 --- a/reactos/lib/sdk/crt/mem/memcmp.c +++ b/reactos/lib/sdk/crt/mem/memcmp.c @@ -4,6 +4,11 @@ #include +#ifdef _MSC_VER +#pragma warning(disable: 4164) +#pragma function(memcmp) +#endif + int memcmp(const void *s1, const void *s2, size_t n) { if (n != 0) { diff --git a/reactos/lib/sdk/crt/misc/assert.c b/reactos/lib/sdk/crt/misc/assert.c index bc196fd8417..693e42d1056 100644 --- a/reactos/lib/sdk/crt/misc/assert.c +++ b/reactos/lib/sdk/crt/misc/assert.c @@ -32,7 +32,7 @@ void _assert(const char *exp, const char *file, unsigned line) /* Get MessageBoxA function pointer */ hmodUser32 = LoadLibrary("user32.dll"); - pMessageBoxA = GetProcAddress(hmodUser32, "MessageBoxA"); + pMessageBoxA = (PVOID)GetProcAddress(hmodUser32, "MessageBoxA"); if (!pMessageBoxA) { abort(); diff --git a/reactos/lib/sdk/crt/stdlib/rot.c b/reactos/lib/sdk/crt/stdlib/rot.c index 7502fb74fe2..d9655a263c6 100644 --- a/reactos/lib/sdk/crt/stdlib/rot.c +++ b/reactos/lib/sdk/crt/stdlib/rot.c @@ -10,6 +10,10 @@ #include +#ifdef _MSC_VER +#pragma function(_rotr, _rotl, _rotr, _lrotl, _lrotr) +#endif + unsigned int _rotr( unsigned int value, int shift ); /* * @implemented diff --git a/reactos/lib/sdk/crt/string/scanf.h b/reactos/lib/sdk/crt/string/scanf.h index 25c6336e1a1..4be9d8d4343 100644 --- a/reactos/lib/sdk/crt/string/scanf.h +++ b/reactos/lib/sdk/crt/string/scanf.h @@ -460,7 +460,7 @@ _FUNCTION_ { if ((*(format - 1)) < *(format + 1)) RtlSetBits(&bitMask, *(format - 1) +1 , *(format + 1) - *(format - 1)); else - RtlSetBits(&bitMask, *(format + 1) , *(format - 1) - *(format + 1)); + RtlSetBits(&bitMask, *(format + 1) , *(format - 1) - *(format + 1)); format++; } else RtlSetBits(&bitMask, *format, 1); diff --git a/reactos/lib/sdk/crt/string/strset.c b/reactos/lib/sdk/crt/string/strset.c index 29a72121197..5f5e641ba02 100644 --- a/reactos/lib/sdk/crt/string/strset.c +++ b/reactos/lib/sdk/crt/string/strset.c @@ -10,6 +10,9 @@ #if defined(__GNUC__) && !defined(__clang__) #define __int64 long long +#elif defined(_MSC_VER) +#pragma warning(disable: 4164) +#pragma function(_strset) #endif #ifdef _WIN64 @@ -49,3 +52,4 @@ char* _strset(char* szToFill, int szFill) } return t; } + diff --git a/reactos/lib/sdk/crt/string/wcs.c b/reactos/lib/sdk/crt/string/wcs.c index 8c4fff9e411..dcef8c4cca5 100644 --- a/reactos/lib/sdk/crt/string/wcs.c +++ b/reactos/lib/sdk/crt/string/wcs.c @@ -47,6 +47,10 @@ #undef vprintf #undef vwprintf +#ifdef _MSC_VER +#pragma function(_wcsset) +#endif + #ifndef _LIBCNT_ /********************************************************************* * _wcsdup (MSVCRT.@) diff --git a/reactos/lib/sdk/crt/time/ctime.c b/reactos/lib/sdk/crt/time/ctime.c index b6d1bfb6cd1..3b93ba1ec4f 100644 --- a/reactos/lib/sdk/crt/time/ctime.c +++ b/reactos/lib/sdk/crt/time/ctime.c @@ -7,6 +7,7 @@ */ #define MINGW_HAS_SECURE_API 1 +#define RC_INVOKED 1 // to prevent inline functions #include #include #include "bitsfixup.h" diff --git a/reactos/lib/sdk/crt/time/futime.c b/reactos/lib/sdk/crt/time/futime.c index 99010f09f57..8e3ae8625be 100644 --- a/reactos/lib/sdk/crt/time/futime.c +++ b/reactos/lib/sdk/crt/time/futime.c @@ -6,6 +6,7 @@ * PROGRAMERS: Timo Kreuzer */ #include +#define RC_INVOKED 1 // to prevent inline functions #include #include #include "bitsfixup.h" diff --git a/reactos/lib/sdk/crt/time/utime.c b/reactos/lib/sdk/crt/time/utime.c index 130e5a400ba..d879d49d115 100644 --- a/reactos/lib/sdk/crt/time/utime.c +++ b/reactos/lib/sdk/crt/time/utime.c @@ -7,6 +7,7 @@ */ #include #include +#define RC_INVOKED 1 // to prevent inline functions #include #include "bitsfixup.h" From 0d149baf296a709ebd4d88a99eebda2d878ce5f9 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 10 Feb 2011 11:47:17 +0000 Subject: [PATCH 013/287] [RTL] Merge changes to rtl from cmake branch. Mostly use portable interlocked functions svn path=/trunk/; revision=50648 --- reactos/lib/rtl/actctx.c | 4 ++-- reactos/lib/rtl/critical.c | 18 +++++++------- reactos/lib/rtl/largeint.c | 34 ++++++++++++++++++++++++++ reactos/lib/rtl/rtl.h | 11 +++++++++ reactos/lib/rtl/srw.c | 46 ++++++++++++++++++------------------ reactos/lib/rtl/timerqueue.c | 2 +- reactos/lib/rtl/vectoreh.c | 25 +++++++++++++++++--- reactos/lib/rtl/wait.c | 8 +++---- reactos/lib/rtl/workitem.c | 46 ++++++++++++++++++------------------ 9 files changed, 129 insertions(+), 65 deletions(-) diff --git a/reactos/lib/rtl/actctx.c b/reactos/lib/rtl/actctx.c index eb07758c8cf..a91e1e8a7b1 100644 --- a/reactos/lib/rtl/actctx.c +++ b/reactos/lib/rtl/actctx.c @@ -575,12 +575,12 @@ static ACTIVATION_CONTEXT *check_actctx( HANDLE h ) static inline void actctx_addref( ACTIVATION_CONTEXT *actctx ) { - _InterlockedExchangeAdd( &actctx->ref_count, 1 ); + InterlockedExchangeAdd( &actctx->ref_count, 1 ); } static void actctx_release( ACTIVATION_CONTEXT *actctx ) { - if (_InterlockedExchangeAdd( &actctx->ref_count, -1 ) == 1) + if (InterlockedExchangeAdd( &actctx->ref_count, -1 ) == 1) { unsigned int i, j; diff --git a/reactos/lib/rtl/critical.c b/reactos/lib/rtl/critical.c index 2045c0e748c..03bffca4289 100644 --- a/reactos/lib/rtl/critical.c +++ b/reactos/lib/rtl/critical.c @@ -59,15 +59,15 @@ RtlpCreateCriticalSectionSem(PRTL_CRITICAL_SECTION CriticalSection) /* We failed, this is bad... */ DPRINT1("Failed to Create Event!\n"); - _InterlockedDecrement(&CriticalSection->LockCount); + InterlockedDecrement(&CriticalSection->LockCount); RtlRaiseStatus(Status); return; } DPRINT("Created Event: %p \n", hNewEvent); - if (_InterlockedCompareExchangePointer((PVOID*)&CriticalSection->LockSemaphore, - (PVOID)hNewEvent, - 0)) { + if (InterlockedCompareExchangePointer((PVOID*)&CriticalSection->LockSemaphore, + (PVOID)hNewEvent, + 0)) { /* Some just created an event */ DPRINT("Closing already created event: %p\n", hNewEvent); @@ -437,7 +437,7 @@ RtlEnterCriticalSection(PRTL_CRITICAL_SECTION CriticalSection) HANDLE Thread = (HANDLE)NtCurrentTeb()->ClientId.UniqueThread; /* Try to Lock it */ - if (_InterlockedIncrement(&CriticalSection->LockCount) != 0) { + if (InterlockedIncrement(&CriticalSection->LockCount) != 0) { /* * We've failed to lock it! Does this thread @@ -621,7 +621,7 @@ RtlLeaveCriticalSection(PRTL_CRITICAL_SECTION CriticalSection) if (--CriticalSection->RecursionCount) { /* Someone still owns us, but we are free. This needs to be done atomically. */ - _InterlockedDecrement(&CriticalSection->LockCount); + InterlockedDecrement(&CriticalSection->LockCount); } else { @@ -630,7 +630,7 @@ RtlLeaveCriticalSection(PRTL_CRITICAL_SECTION CriticalSection) CriticalSection->OwningThread = 0; /* Was someone wanting us? This needs to be done atomically. */ - if (-1 != _InterlockedDecrement(&CriticalSection->LockCount)) { + if (-1 != InterlockedDecrement(&CriticalSection->LockCount)) { /* Let him have us */ RtlpUnWaitCriticalSection(CriticalSection); @@ -662,7 +662,7 @@ NTAPI RtlTryEnterCriticalSection(PRTL_CRITICAL_SECTION CriticalSection) { /* Try to take control */ - if (_InterlockedCompareExchange(&CriticalSection->LockCount, + if (InterlockedCompareExchange(&CriticalSection->LockCount, 0, -1) == -1) { @@ -674,7 +674,7 @@ RtlTryEnterCriticalSection(PRTL_CRITICAL_SECTION CriticalSection) } else if (CriticalSection->OwningThread == NtCurrentTeb()->ClientId.UniqueThread) { /* It's already ours */ - _InterlockedIncrement(&CriticalSection->LockCount); + InterlockedIncrement(&CriticalSection->LockCount); CriticalSection->RecursionCount++; return TRUE; } diff --git a/reactos/lib/rtl/largeint.c b/reactos/lib/rtl/largeint.c index cc7475241ac..5934f8c8449 100644 --- a/reactos/lib/rtl/largeint.c +++ b/reactos/lib/rtl/largeint.c @@ -14,6 +14,40 @@ /* FUNCTIONS *****************************************************************/ +#undef RtlUlonglongByteSwap +#undef RtlUlongByteSwap +#undef RtlUshortByteSwap + +/* + * @implemented + */ +USHORT +FASTCALL +RtlUshortByteSwap(IN USHORT Source) +{ + return _byteswap_ushort(Source); +} + +/* + * @implemented + */ +ULONG +FASTCALL +RtlUlongByteSwap(IN ULONG Source) +{ + return _byteswap_ulong(Source); +} + +/* + * @implemented + */ +ULONGLONG +FASTCALL +RtlUlonglongByteSwap(IN ULONGLONG Source) +{ + return _byteswap_uint64(Source); +} + /* * @implemented */ diff --git a/reactos/lib/rtl/rtl.h b/reactos/lib/rtl/rtl.h index 3d10deb9338..848ab3d0b04 100644 --- a/reactos/lib/rtl/rtl.h +++ b/reactos/lib/rtl/rtl.h @@ -32,6 +32,17 @@ #include +/* Use intrinsics for x86 and x64 */ +#if defined(_M_IX86) || defined(_M_AMD64) +#define InterlockedCompareExchange _InterlockedCompareExchange +#define InterlockedIncrement _InterlockedIncrement +#define InterlockedDecrement _InterlockedDecrement +#define InterlockedExchangeAdd _InterlockedExchangeAdd +#define InterlockedExchange _InterlockedExchange +#define InterlockedBitTestAndSet _interlockedbittestandset +#define InterlockedBitTestAndSet64 _interlockedbittestandset64 +#endif + #endif /* RTL_H */ /* EOF */ diff --git a/reactos/lib/rtl/srw.c b/reactos/lib/rtl/srw.c index ff7b755a548..affd558d04c 100644 --- a/reactos/lib/rtl/srw.c +++ b/reactos/lib/rtl/srw.c @@ -131,7 +131,7 @@ RtlpReleaseWaitBlockLockExclusive(IN OUT PRTL_SRWLOCK SRWLock, } } - (void)_InterlockedExchangePointer(&SRWLock->Ptr, (PVOID)NewValue); + (void)InterlockedExchangePointer(&SRWLock->Ptr, (PVOID)NewValue); if (FirstWaitBlock->Exclusive) { @@ -186,7 +186,7 @@ RtlpReleaseWaitBlockLockLastShared(IN OUT PRTL_SRWLOCK SRWLock, NewValue = RTL_SRWLOCK_OWNED; } - (void)_InterlockedExchangePointer(&SRWLock->Ptr, (PVOID)NewValue); + (void)InterlockedExchangePointer(&SRWLock->Ptr, (PVOID)NewValue); (void)InterlockedOr(&FirstWaitBlock->Wake, TRUE); @@ -420,9 +420,9 @@ RtlAcquireSRWLockShared(IN OUT PRTL_SRWLOCK SRWLock) NewValue = (CurrentValue >> RTL_SRWLOCK_BITS) + 1; NewValue = (NewValue << RTL_SRWLOCK_BITS) | (CurrentValue & RTL_SRWLOCK_MASK); - if ((LONG_PTR)_InterlockedCompareExchangePointer(&SRWLock->Ptr, - (PVOID)NewValue, - (PVOID)CurrentValue) == CurrentValue) + if ((LONG_PTR)InterlockedCompareExchangePointer(&SRWLock->Ptr, + (PVOID)NewValue, + (PVOID)CurrentValue) == CurrentValue) { /* Successfully incremented the shared count, we acquired the lock */ break; @@ -499,9 +499,9 @@ RtlAcquireSRWLockShared(IN OUT PRTL_SRWLOCK SRWLock) ASSERT_SRW_WAITBLOCK(&StackWaitBlock); NewValue = (ULONG_PTR)&StackWaitBlock | RTL_SRWLOCK_OWNED | RTL_SRWLOCK_CONTENDED; - if ((LONG_PTR)_InterlockedCompareExchangePointer(&SRWLock->Ptr, - (PVOID)NewValue, - (PVOID)CurrentValue) == CurrentValue) + if ((LONG_PTR)InterlockedCompareExchangePointer(&SRWLock->Ptr, + (PVOID)NewValue, + (PVOID)CurrentValue) == CurrentValue) { RtlpAcquireSRWLockSharedWait(SRWLock, &StackWaitBlock, @@ -521,9 +521,9 @@ RtlAcquireSRWLockShared(IN OUT PRTL_SRWLOCK SRWLock) RTL_SRWLOCK_SHARED nor the RTL_SRWLOCK_OWNED bit is set */ ASSERT(!(CurrentValue & RTL_SRWLOCK_CONTENDED)); - if ((LONG_PTR)_InterlockedCompareExchangePointer(&SRWLock->Ptr, - (PVOID)NewValue, - (PVOID)CurrentValue) == CurrentValue) + if ((LONG_PTR)InterlockedCompareExchangePointer(&SRWLock->Ptr, + (PVOID)NewValue, + (PVOID)CurrentValue) == CurrentValue) { /* Successfully set the shared count, we acquired the lock */ break; @@ -580,9 +580,9 @@ RtlReleaseSRWLockShared(IN OUT PRTL_SRWLOCK SRWLock) NewValue = (NewValue << RTL_SRWLOCK_BITS) | RTL_SRWLOCK_SHARED | RTL_SRWLOCK_OWNED; } - if ((LONG_PTR)_InterlockedCompareExchangePointer(&SRWLock->Ptr, - (PVOID)NewValue, - (PVOID)CurrentValue) == CurrentValue) + if ((LONG_PTR)InterlockedCompareExchangePointer(&SRWLock->Ptr, + (PVOID)NewValue, + (PVOID)CurrentValue) == CurrentValue) { /* Successfully released the lock */ break; @@ -639,9 +639,9 @@ RtlAcquireSRWLockExclusive(IN OUT PRTL_SRWLOCK SRWLock) NewValue = (ULONG_PTR)&StackWaitBlock | RTL_SRWLOCK_SHARED | RTL_SRWLOCK_CONTENDED | RTL_SRWLOCK_OWNED; - if ((LONG_PTR)_InterlockedCompareExchangePointer(&SRWLock->Ptr, - (PVOID)NewValue, - (PVOID)CurrentValue) == CurrentValue) + if ((LONG_PTR)InterlockedCompareExchangePointer(&SRWLock->Ptr, + (PVOID)NewValue, + (PVOID)CurrentValue) == CurrentValue) { RtlpAcquireSRWLockExclusiveWait(SRWLock, &StackWaitBlock); @@ -697,9 +697,9 @@ AddWaitBlock: ASSERT_SRW_WAITBLOCK(&StackWaitBlock); NewValue = (ULONG_PTR)&StackWaitBlock | RTL_SRWLOCK_OWNED | RTL_SRWLOCK_CONTENDED; - if ((LONG_PTR)_InterlockedCompareExchangePointer(&SRWLock->Ptr, - (PVOID)NewValue, - (PVOID)CurrentValue) == CurrentValue) + if ((LONG_PTR)InterlockedCompareExchangePointer(&SRWLock->Ptr, + (PVOID)NewValue, + (PVOID)CurrentValue) == CurrentValue) { RtlpAcquireSRWLockExclusiveWait(SRWLock, &StackWaitBlock); @@ -767,9 +767,9 @@ RtlReleaseSRWLockExclusive(IN OUT PRTL_SRWLOCK SRWLock) ASSERT(!(CurrentValue & ~RTL_SRWLOCK_OWNED)); NewValue = 0; - if ((LONG_PTR)_InterlockedCompareExchangePointer(&SRWLock->Ptr, - (PVOID)NewValue, - (PVOID)CurrentValue) == CurrentValue) + if ((LONG_PTR)InterlockedCompareExchangePointer(&SRWLock->Ptr, + (PVOID)NewValue, + (PVOID)CurrentValue) == CurrentValue) { /* We released the lock */ break; diff --git a/reactos/lib/rtl/timerqueue.c b/reactos/lib/rtl/timerqueue.c index 1cad82fe337..f3e3fcceb73 100644 --- a/reactos/lib/rtl/timerqueue.c +++ b/reactos/lib/rtl/timerqueue.c @@ -372,7 +372,7 @@ static struct timer_queue *get_timer_queue(HANDLE TimerQueue) NTSTATUS status = RtlCreateTimerQueue(&q); if (status == STATUS_SUCCESS) { - PVOID p = _InterlockedCompareExchangePointer( + PVOID p = InterlockedCompareExchangePointer( (void **) &default_timer_queue, q, NULL); if (p) /* Got beat to the punch. */ diff --git a/reactos/lib/rtl/vectoreh.c b/reactos/lib/rtl/vectoreh.c index ad10aa5d66e..7bcec181ee7 100644 --- a/reactos/lib/rtl/vectoreh.c +++ b/reactos/lib/rtl/vectoreh.c @@ -61,7 +61,7 @@ RtlCallVectoredExceptionHandlers(IN PEXCEPTION_RECORD ExceptionRecord, if (--veh->Refs == 0) { RemoveEntryList (&veh->ListEntry); - _InterlockedDecrement (&RtlpVectoredExceptionsInstalled); + InterlockedDecrement (&RtlpVectoredExceptionsInstalled); Remove = TRUE; } Ret = TRUE; @@ -74,7 +74,7 @@ RtlCallVectoredExceptionHandlers(IN PEXCEPTION_RECORD ExceptionRecord, { CurrentEntry = veh->ListEntry.Flink; RemoveEntryList (&veh->ListEntry); - _InterlockedDecrement (&RtlpVectoredExceptionsInstalled); + InterlockedDecrement (&RtlpVectoredExceptionsInstalled); RtlLeaveCriticalSection(&RtlpVectoredExceptionLock); RtlFreeHeap(RtlGetProcessHeap(), @@ -136,7 +136,7 @@ RtlAddVectoredExceptionHandler(IN ULONG FirstHandler, InsertTailList(&RtlpVectoredExceptionHead, &veh->ListEntry); } - _InterlockedIncrement (&RtlpVectoredExceptionsInstalled); + InterlockedIncrement (&RtlpVectoredExceptionsInstalled); RtlLeaveCriticalSection(&RtlpVectoredExceptionLock); } @@ -190,4 +190,23 @@ RtlRemoveVectoredExceptionHandler(IN PVOID VectoredHandlerHandle) return Ret; } +PVOID +NTAPI +RtlAddVectoredContinueHandler( + IN ULONG FirstHandler, + IN PVECTORED_EXCEPTION_HANDLER VectoredHandler) +{ + UNIMPLEMENTED; + return NULL; +} + +ULONG +NTAPI +RtlRemoveVectoredContinueHandler( + IN PVOID VectoredHandlerHandle) +{ + UNIMPLEMENTED; + return FALSE; +} + /* EOF */ diff --git a/reactos/lib/rtl/wait.c b/reactos/lib/rtl/wait.c index 543d5a44769..f8254217c8a 100644 --- a/reactos/lib/rtl/wait.c +++ b/reactos/lib/rtl/wait.c @@ -91,7 +91,7 @@ Wait_thread_proc(LPVOID Arg) completion_event = Wait->CompletionEvent; if (completion_event) NtSetEvent( completion_event, NULL ); - if (_InterlockedIncrement( &Wait->DeleteCount ) == 2 ) + if (InterlockedIncrement( &Wait->DeleteCount ) == 2 ) { NtClose( Wait->CancelEvent ); RtlFreeHeap( RtlGetProcessHeap(), 0, Wait ); @@ -220,7 +220,7 @@ RtlDeregisterWaitEx(HANDLE WaitHandle, if (Status != STATUS_SUCCESS) return Status; - (void)_InterlockedExchangePointer( &Wait->CompletionEvent, CompletionEvent ); + (void)InterlockedExchangePointer( &Wait->CompletionEvent, CompletionEvent ); if (Wait->CallbackInProgress) NtWaitForSingleObject( CompletionEvent, FALSE, NULL ); @@ -229,7 +229,7 @@ RtlDeregisterWaitEx(HANDLE WaitHandle, } else { - (void)_InterlockedExchangePointer( &Wait->CompletionEvent, CompletionEvent ); + (void)InterlockedExchangePointer( &Wait->CompletionEvent, CompletionEvent ); if (Wait->CallbackInProgress) Status = STATUS_PENDING; @@ -239,7 +239,7 @@ RtlDeregisterWaitEx(HANDLE WaitHandle, Status = STATUS_PENDING; } - if (_InterlockedIncrement( &Wait->DeleteCount ) == 2 ) + if (InterlockedIncrement( &Wait->DeleteCount ) == 2 ) { Status = STATUS_SUCCESS; NtClose( Wait->CancelEvent ); diff --git a/reactos/lib/rtl/workitem.c b/reactos/lib/rtl/workitem.c index 60f313ce56f..c74aea8b48d 100644 --- a/reactos/lib/rtl/workitem.c +++ b/reactos/lib/rtl/workitem.c @@ -55,7 +55,7 @@ RtlpInitializeThreadPool(VOID) do { - InitStatus = _InterlockedCompareExchange(&ThreadPoolInitialized, + InitStatus = InterlockedCompareExchange(&ThreadPoolInitialized, 2, 0); if (InitStatus == 0) @@ -91,7 +91,7 @@ RtlpInitializeThreadPool(VOID) Finish: /* Initialization done */ - _InterlockedExchange(&ThreadPoolInitialized, + InterlockedExchange(&ThreadPoolInitialized, 1); break; } @@ -223,11 +223,11 @@ RtlpExecuteWorkItem(IN OUT PVOID NormalContext, } /* update the requests counter */ - _InterlockedDecrement(&ThreadPoolWorkerThreadsRequests); + InterlockedDecrement(&ThreadPoolWorkerThreadsRequests); if (WorkItem.Flags & WT_EXECUTELONGFUNCTION) { - _InterlockedDecrement(&ThreadPoolWorkerThreadsLongRequests); + InterlockedDecrement(&ThreadPoolWorkerThreadsLongRequests); } } @@ -237,11 +237,11 @@ RtlpQueueWorkerThread(IN OUT PRTLP_WORKITEM WorkItem) { NTSTATUS Status = STATUS_SUCCESS; - _InterlockedIncrement(&ThreadPoolWorkerThreadsRequests); + InterlockedIncrement(&ThreadPoolWorkerThreadsRequests); if (WorkItem->Flags & WT_EXECUTELONGFUNCTION) { - _InterlockedIncrement(&ThreadPoolWorkerThreadsLongRequests); + InterlockedIncrement(&ThreadPoolWorkerThreadsLongRequests); } if (WorkItem->Flags & WT_EXECUTEINPERSISTENTTHREAD) @@ -270,11 +270,11 @@ RtlpQueueWorkerThread(IN OUT PRTLP_WORKITEM WorkItem) if (!NT_SUCCESS(Status)) { - _InterlockedDecrement(&ThreadPoolWorkerThreadsRequests); + InterlockedDecrement(&ThreadPoolWorkerThreadsRequests); if (WorkItem->Flags & WT_EXECUTELONGFUNCTION) { - _InterlockedDecrement(&ThreadPoolWorkerThreadsLongRequests); + InterlockedDecrement(&ThreadPoolWorkerThreadsLongRequests); } } @@ -351,11 +351,11 @@ RtlpExecuteIoWorkItem(IN OUT PVOID NormalContext, } /* update the requests counter */ - _InterlockedDecrement(&ThreadPoolIOWorkerThreadsRequests); + InterlockedDecrement(&ThreadPoolIOWorkerThreadsRequests); if (WorkItem.Flags & WT_EXECUTELONGFUNCTION) { - _InterlockedDecrement(&ThreadPoolIOWorkerThreadsLongRequests); + InterlockedDecrement(&ThreadPoolIOWorkerThreadsLongRequests); } } @@ -461,14 +461,14 @@ RtlpQueueIoWorkerThread(IN OUT PRTLP_WORKITEM WorkItem) ASSERT(IoThread != NULL); - _InterlockedIncrement(&ThreadPoolIOWorkerThreadsRequests); + InterlockedIncrement(&ThreadPoolIOWorkerThreadsRequests); if (WorkItem->Flags & WT_EXECUTELONGFUNCTION) { /* We're about to queue a long function, mark the thread */ IoThread->Flags |= WT_EXECUTELONGFUNCTION; - _InterlockedIncrement(&ThreadPoolIOWorkerThreadsLongRequests); + InterlockedIncrement(&ThreadPoolIOWorkerThreadsLongRequests); } /* It's time to queue the work item */ @@ -480,11 +480,11 @@ RtlpQueueIoWorkerThread(IN OUT PRTLP_WORKITEM WorkItem) if (!NT_SUCCESS(Status)) { DPRINT1("Failed to queue APC for work item 0x%p\n", WorkItem->Function); - _InterlockedDecrement(&ThreadPoolIOWorkerThreadsRequests); + InterlockedDecrement(&ThreadPoolIOWorkerThreadsRequests); if (WorkItem->Flags & WT_EXECUTELONGFUNCTION) { - _InterlockedDecrement(&ThreadPoolIOWorkerThreadsLongRequests); + InterlockedDecrement(&ThreadPoolIOWorkerThreadsLongRequests); } } @@ -543,7 +543,7 @@ RtlpIoWorkerThreadProc(IN PVOID Parameter) BOOLEAN Terminate; NTSTATUS Status = STATUS_SUCCESS; - if (_InterlockedIncrement(&ThreadPoolIOWorkerThreads) > MAX_WORKERTHREADS) + if (InterlockedIncrement(&ThreadPoolIOWorkerThreads) > MAX_WORKERTHREADS) { /* Oops, too many worker threads... */ goto InitFailed; @@ -562,10 +562,10 @@ RtlpIoWorkerThreadProc(IN PVOID Parameter) DPRINT1("Failed to create handle to own thread! Status: 0x%x\n", Status); InitFailed: - _InterlockedDecrement(&ThreadPoolIOWorkerThreads); + InterlockedDecrement(&ThreadPoolIOWorkerThreads); /* Signal initialization completion */ - _InterlockedExchange((PLONG)Parameter, + InterlockedExchange((PLONG)Parameter, 1); RtlExitUserThread(Status); @@ -579,7 +579,7 @@ InitFailed: (PLIST_ENTRY)&ThreadInfo.ListEntry); /* Signal initialization completion */ - _InterlockedExchange((PLONG)Parameter, + InterlockedExchange((PLONG)Parameter, 1); for (;;) @@ -626,7 +626,7 @@ Wait: if (Terminate) { /* Rundown the thread and unlink it from the list */ - _InterlockedDecrement(&ThreadPoolIOWorkerThreads); + InterlockedDecrement(&ThreadPoolIOWorkerThreads); RemoveEntryList((PLIST_ENTRY)&ThreadInfo.ListEntry); } @@ -663,10 +663,10 @@ RtlpWorkerThreadProc(IN PVOID Parameter) PKNORMAL_ROUTINE ApcRoutine; NTSTATUS Status = STATUS_SUCCESS; - if (_InterlockedIncrement(&ThreadPoolWorkerThreads) > MAX_WORKERTHREADS) + if (InterlockedIncrement(&ThreadPoolWorkerThreads) > MAX_WORKERTHREADS) { /* Signal initialization completion */ - _InterlockedExchange((PLONG)Parameter, + InterlockedExchange((PLONG)Parameter, 1); /* Oops, too many worker threads... */ @@ -675,7 +675,7 @@ RtlpWorkerThreadProc(IN PVOID Parameter) } /* Signal initialization completion */ - _InterlockedExchange((PLONG)Parameter, + InterlockedExchange((PLONG)Parameter, 1); for (;;) @@ -736,7 +736,7 @@ RtlpWorkerThreadProc(IN PVOID Parameter) if (Terminate) { - _InterlockedDecrement(&ThreadPoolWorkerThreads); + InterlockedDecrement(&ThreadPoolWorkerThreads); Status = STATUS_SUCCESS; break; } From b8cf5f8653393c8d236a880277d46503ad94b0b1 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 10 Feb 2011 13:01:39 +0000 Subject: [PATCH 014/287] Merge MSVC fixes from cmake branch svn path=/trunk/; revision=50650 --- reactos/base/applications/mmc/precomp.h | 1 - .../applications/mscutils/eventvwr/resource.h | 1 + reactos/base/applications/network/ping/ping.c | 1 + reactos/base/applications/paint/registry.c | 4 +-- reactos/base/applications/rapps/rappsmsg.mc | 1 - reactos/base/applications/regedit/framewnd.c | 4 ++- reactos/base/applications/taskmgr/resource.h | 1 + reactos/base/shell/explorer-new/taskswnd.c | 9 +++--- .../boot/freeldr/freeldr/reactos/reactos.c | 3 +- reactos/dll/win32/iphlpapi/dhcp_reactos.c | 3 -- reactos/dll/win32/iphlpapi/ifenum_reactos.c | 3 -- reactos/dll/win32/iphlpapi/registry.c | 2 -- reactos/dll/win32/kernel32/misc/lcformat.c | 2 +- reactos/drivers/base/kddll/kddll.h | 4 +-- reactos/drivers/usb/usbehci/irp.c | 1 + reactos/drivers/video/miniport/vga_new/vga.c | 28 ++++++++--------- reactos/hal/halx86/generic/bios.c | 2 +- reactos/include/crt/_mingw.h | 2 +- reactos/include/crt/crtdefs.h | 6 ++++ reactos/include/crt/float.h | 30 +++++++++---------- reactos/include/crt/msc/intrin.h | 26 ++++++++-------- reactos/include/crt/sec_api/string_s.h | 3 ++ reactos/include/ddk/wdm.h | 4 +-- reactos/include/dxsdk/d3dx9shape.h | 2 +- reactos/include/dxsdk/dmksctrl.h | 2 +- reactos/include/dxsdk/dxsdkver.h | 2 +- reactos/include/dxsdk/pixplugin.h | 2 +- reactos/include/ndk/umfuncs.h | 3 +- reactos/include/reactos/mc/bugcodes.mc | 14 --------- reactos/include/reactos/mc/errcodes.mc | 17 ----------- reactos/include/reactos/mc/ntstatus.mc | 1 - reactos/include/reactos/undocuser.h | 2 +- reactos/include/reactos/wine/config.h | 4 ++- reactos/include/reactos/wine/ddk/imm.h | 2 +- reactos/include/xdk/rtlfuncs.h | 2 +- reactos/lib/3rdparty/mingw/cinitexe.c | 4 +++ reactos/lib/3rdparty/mingw/crt_handler.c | 2 ++ reactos/lib/3rdparty/mingw/crtexe.c | 3 ++ reactos/lib/3rdparty/mingw/merr.c | 1 - reactos/lib/3rdparty/mingw/pesect.c | 2 ++ reactos/lib/3rdparty/mingw/pseudo-reloc.c | 7 +++-- reactos/ntoskrnl/include/internal/ex.h | 2 +- reactos/ntoskrnl/include/internal/ob_x.h | 4 +-- reactos/ntoskrnl/include/internal/trap_x.h | 1 + reactos/ntoskrnl/io/iomgr/irp.c | 4 +-- reactos/ntoskrnl/io/pnpmgr/pnpmgr.c | 5 ---- reactos/ntoskrnl/mm/ARM3/vadnode.c | 8 +++-- reactos/ntoskrnl/mm/marea.c | 3 +- reactos/tools/cabman/cabinet.h | 4 +-- 49 files changed, 118 insertions(+), 126 deletions(-) diff --git a/reactos/base/applications/mmc/precomp.h b/reactos/base/applications/mmc/precomp.h index ad39a6ff1c9..7bc0abc0755 100644 --- a/reactos/base/applications/mmc/precomp.h +++ b/reactos/base/applications/mmc/precomp.h @@ -1,4 +1,3 @@ -#pragma once #include #include diff --git a/reactos/base/applications/mscutils/eventvwr/resource.h b/reactos/base/applications/mscutils/eventvwr/resource.h index 5ed5016949b..40a9b97082d 100644 --- a/reactos/base/applications/mscutils/eventvwr/resource.h +++ b/reactos/base/applications/mscutils/eventvwr/resource.h @@ -60,3 +60,4 @@ #define IDS_COLUMNUSER 306 #define IDS_COLUMNCOMPUTER 307 #define IDS_COLUMNEVENTDATA 308 + diff --git a/reactos/base/applications/network/ping/ping.c b/reactos/base/applications/network/ping/ping.c index b827a53107d..6f7935e9159 100644 --- a/reactos/base/applications/network/ping/ping.c +++ b/reactos/base/applications/network/ping/ping.c @@ -738,6 +738,7 @@ int wmain(int argc, LPWSTR argv[]) FormatOutput(IDS_PACKETS_SENT_RECEIVED_LOST,\ SentCount, SentCount - LostCount, LostCount, Count); + /* Print approximate times or NO approximate times if 100% loss */ if ((SentCount - LostCount) > 0) { diff --git a/reactos/base/applications/paint/registry.c b/reactos/base/applications/paint/registry.c index 392fc08d6de..6f4e8e53a64 100644 --- a/reactos/base/applications/paint/registry.c +++ b/reactos/base/applications/paint/registry.c @@ -16,11 +16,11 @@ void SetWallpaper(TCHAR * FileName, DWORD dwStyle, DWORD dwTile) //FIXME: Has to be called 2x to apply the pattern (tiled/stretched) too { - SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (PVOID) FileName, SPIF_UPDATEINIFILE); - HKEY hDesktop; TCHAR szStyle[3], szTile[3]; + SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (PVOID) FileName, SPIF_UPDATEINIFILE); + if ((dwStyle > 2) || (dwTile > 2)) return; diff --git a/reactos/base/applications/rapps/rappsmsg.mc b/reactos/base/applications/rapps/rappsmsg.mc index 2fdf0419d66..3b3aceb3b65 100644 --- a/reactos/base/applications/rapps/rappsmsg.mc +++ b/reactos/base/applications/rapps/rappsmsg.mc @@ -25,4 +25,3 @@ Language=English Removal of the program "%1" is called. . -; EOF diff --git a/reactos/base/applications/regedit/framewnd.c b/reactos/base/applications/regedit/framewnd.c index baccec07d5d..5d9a68264c9 100644 --- a/reactos/base/applications/regedit/framewnd.c +++ b/reactos/base/applications/regedit/framewnd.c @@ -367,12 +367,14 @@ static BOOL UnloadHive(HWND hWnd) TCHAR Caption[128]; LPCTSTR pszKeyPath; HKEY hRootKey; + LONG regUnloadResult; + /* get the item key to unload */ pszKeyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hRootKey); /* load and set the caption and flags for dialog */ LoadString(hInst, IDS_UNLOAD_HIVE, Caption, COUNT_OF(Caption)); /* now unload the hive */ - LONG regUnloadResult = RegUnLoadKey(hRootKey, pszKeyPath); + regUnloadResult = RegUnLoadKey(hRootKey, pszKeyPath); if(regUnloadResult == ERROR_SUCCESS) { /* refresh tree and list views */ diff --git a/reactos/base/applications/taskmgr/resource.h b/reactos/base/applications/taskmgr/resource.h index f67d6adf604..778bb200209 100644 --- a/reactos/base/applications/taskmgr/resource.h +++ b/reactos/base/applications/taskmgr/resource.h @@ -251,3 +251,4 @@ #define _APS_NEXT_SYMED_VALUE 110 #endif #endif + diff --git a/reactos/base/shell/explorer-new/taskswnd.c b/reactos/base/shell/explorer-new/taskswnd.c index 6a4501191cc..ff52fc7d326 100644 --- a/reactos/base/shell/explorer-new/taskswnd.c +++ b/reactos/base/shell/explorer-new/taskswnd.c @@ -1725,8 +1725,9 @@ TaskSwitchWnd_HandleTaskItemRightClick(IN OUT PTASK_SWITCH_WND This, if (hmenu) { POINT pt; + int cmd; GetCursorPos(&pt); - int cmd = TrackPopupMenu(hmenu, TPM_LEFTBUTTON|TPM_RIGHTBUTTON|TPM_RETURNCMD, pt.x, pt.y, 0, This->hWndToolbar, NULL); + cmd = TrackPopupMenu(hmenu, TPM_LEFTBUTTON|TPM_RIGHTBUTTON|TPM_RETURNCMD, pt.x, pt.y, 0, This->hWndToolbar, NULL); if (cmd) { SetForegroundWindow(TaskItem->hWnd); // reactivate window after the context menu has closed PostMessage(TaskItem->hWnd, WM_SYSCOMMAND, cmd, 0); @@ -1756,19 +1757,19 @@ TaskSwitchWnd_HandleButtonRightClick(IN OUT PTASK_SWITCH_WND This, TaskSwitchWnd_HandleTaskGroupRightClick(This, TaskGroup); return TRUE; - } + } } TaskItem = FindTaskItemByIndex(This, (INT)wIndex); - + if (TaskItem != NULL) { TaskSwitchWnd_HandleTaskItemRightClick(This, TaskItem); return TRUE; } - + return FALSE; } diff --git a/reactos/boot/freeldr/freeldr/reactos/reactos.c b/reactos/boot/freeldr/freeldr/reactos/reactos.c index 22f3771b28b..959dc22b05e 100644 --- a/reactos/boot/freeldr/freeldr/reactos/reactos.c +++ b/reactos/boot/freeldr/freeldr/reactos/reactos.c @@ -606,6 +606,8 @@ LoadAndBootReactOS(PCSTR OperatingSystemName) // if (IniReadSettingByName(SectionId, "Options", value, sizeof(value))) { + PCHAR File; + // // Append boot-time options // @@ -614,7 +616,6 @@ LoadAndBootReactOS(PCSTR OperatingSystemName) // // Check if a ramdisk file was given // - PCHAR File; File = strstr(value, "/RDIMAGEPATH="); if (File) { diff --git a/reactos/dll/win32/iphlpapi/dhcp_reactos.c b/reactos/dll/win32/iphlpapi/dhcp_reactos.c index 3364e3c9c7e..b72c945f2d5 100644 --- a/reactos/dll/win32/iphlpapi/dhcp_reactos.c +++ b/reactos/dll/win32/iphlpapi/dhcp_reactos.c @@ -12,9 +12,6 @@ #include "dhcpcapi.h" #include -#define NDEBUG -#include "debug.h" - DWORD APIENTRY DhcpRosGetAdapterInfo(DWORD AdapterIndex, PBOOL DhcpEnabled, PDWORD DhcpServer, diff --git a/reactos/dll/win32/iphlpapi/ifenum_reactos.c b/reactos/dll/win32/iphlpapi/ifenum_reactos.c index 8eec8a77b1f..0ffe129ebd0 100644 --- a/reactos/dll/win32/iphlpapi/ifenum_reactos.c +++ b/reactos/dll/win32/iphlpapi/ifenum_reactos.c @@ -40,9 +40,6 @@ #include "ifenum.h" #include -//#define NDEBUG -#include "debug.h" - WINE_DEFAULT_DEBUG_CHANNEL(iphlpapi); /* Functions */ diff --git a/reactos/dll/win32/iphlpapi/registry.c b/reactos/dll/win32/iphlpapi/registry.c index e83fde95281..57af182db6f 100644 --- a/reactos/dll/win32/iphlpapi/registry.c +++ b/reactos/dll/win32/iphlpapi/registry.c @@ -1,7 +1,5 @@ #include "iphlpapi_private.h" -#include "debug.h" - int GetLongestChildKeyName( HANDLE RegHandle ) { LONG Status; DWORD MaxAdapterName; diff --git a/reactos/dll/win32/kernel32/misc/lcformat.c b/reactos/dll/win32/kernel32/misc/lcformat.c index dbddcd7179d..663dec62819 100644 --- a/reactos/dll/win32/kernel32/misc/lcformat.c +++ b/reactos/dll/win32/kernel32/misc/lcformat.c @@ -3,7 +3,7 @@ * * Copyright 1995 Martin von Loewis * Copyright 1998 David Lee Lambert - * Copyright 2000 Julio César Gázquez + * Copyright 2000 Julio Csar Gzquez * Copyright 2003 Jon Griffiths * Copyright 2005 Dmitry Timoshkov * diff --git a/reactos/drivers/base/kddll/kddll.h b/reactos/drivers/base/kddll/kddll.h index abbd6d31d44..b6119e39dcc 100644 --- a/reactos/drivers/base/kddll/kddll.h +++ b/reactos/drivers/base/kddll/kddll.h @@ -12,8 +12,6 @@ #include #define NDEBUG #include -#include -#include #include #include "arc/arc.h" #include "windbgkd.h" @@ -21,6 +19,8 @@ #include #include /* port intrinsics */ +long atol(const char *str); + typedef UCHAR BYTE, *PBYTE; typedef ULONG (*PFNDBGPRNT)(const char *Format, ...); diff --git a/reactos/drivers/usb/usbehci/irp.c b/reactos/drivers/usb/usbehci/irp.c index 3658d888d47..fa77f1cdd48 100644 --- a/reactos/drivers/usb/usbehci/irp.c +++ b/reactos/drivers/usb/usbehci/irp.c @@ -540,6 +540,7 @@ NTSTATUS HandleUrbRequest(PPDO_DEVICE_EXTENSION PdoDeviceExtension, PIRP Irp) if (!(PdoDeviceExtension->Ports[Urb->UrbControlVendorClassRequest.Index-1].PortStatus & 0x8000)) CompletePendingURBRequest(PdoDeviceExtension); + break; } case USB_REQUEST_SET_ADDRESS: diff --git a/reactos/drivers/video/miniport/vga_new/vga.c b/reactos/drivers/video/miniport/vga_new/vga.c index a97c64bdecd..866c658d788 100644 --- a/reactos/drivers/video/miniport/vga_new/vga.c +++ b/reactos/drivers/video/miniport/vga_new/vga.c @@ -93,7 +93,7 @@ VgaSetPaletteReg( PVIDEO_PALETTE_DATA PaletteBuffer, ULONG PaletteBufferSize ); - + VP_STATUS VgaSetColorLookup( PHW_DEVICE_EXTENSION HwDeviceExtension, @@ -846,11 +846,11 @@ Return Value: case IOCTL_VIDEO_QUERY_PUBLIC_ACCESS_RANGES: { - VideoDebugPrint((2, "VgaStartIO - Query Public Address Ranges\n")); - PVIDEO_PUBLIC_ACCESS_RANGES portAccess; ULONG physicalPortLength; + VideoDebugPrint((2, "VgaStartIO - Query Public Address Ranges\n")); + if (RequestPacket->OutputBufferLength < sizeof(VIDEO_PUBLIC_ACCESS_RANGES)) { @@ -882,7 +882,7 @@ Return Value: // eVb: 1.17 [END] VideoDebugPrint((2, "VgaStartIO - mapping ports to (%x)\n", portAccess->VirtualAddress)); } - + break; case IOCTL_VIDEO_FREE_PUBLIC_ACCESS_RANGES: @@ -891,7 +891,7 @@ Return Value: status = ERROR_INVALID_FUNCTION; break; - + // // if we get here, an invalid IoControlCode was specified. // @@ -1371,7 +1371,7 @@ Return Value: { PVIDEOMODE CurrentMode = HwDeviceExtension->CurrentMode; USHORT i; - + // // Check if the size of the data in the input buffer is large enough. // @@ -1400,9 +1400,9 @@ Return Value: // // Check SVGA mode // - + if (CurrentMode->bitsPerPlane >= 8) return VbeSetColorLookup(HwDeviceExtension, ClutBuffer); -// eVb: 1.14 [END] +// eVb: 1.14 [END] // // Path for VGA mode // @@ -1507,11 +1507,11 @@ VgaAcquireResources( { VP_STATUS Status = NO_ERROR; ULONG Ranges, i; - + // // Try exclusive ranges (vga + ati) // - + Ranges = NUM_VGA_ACCESS_RANGES; for (i = 0; i < Ranges; i++) VgaAccessRange[i].RangeShareable = FALSE; if (VideoPortVerifyAccessRanges(DeviceExtension, Ranges, VgaAccessRange) != NO_ERROR) @@ -1519,14 +1519,14 @@ VgaAcquireResources( // // Not worked, try vga only // - + Ranges = 3; if (VideoPortVerifyAccessRanges(DeviceExtension, Ranges, VgaAccessRange) != NO_ERROR) { // // Still not, try shared ranges // - + for (i = 0; i < Ranges; i++) VgaAccessRange[i].RangeShareable = TRUE; Status = VideoPortVerifyAccessRanges(DeviceExtension, Ranges, VgaAccessRange); if (Status == NO_ERROR) @@ -1534,7 +1534,7 @@ VgaAcquireResources( // // It did work // - + VideoPortVerifyAccessRanges(DeviceExtension, 0, 0); Status = NO_ERROR; } @@ -1546,7 +1546,7 @@ VgaAcquireResources( // // Worked with exclusive, also try shared // - + for (i = 0; i < Ranges; i++) VgaAccessRange[i].RangeShareable = TRUE; Status = VideoPortVerifyAccessRanges(DeviceExtension, Ranges, VgaAccessRange); } diff --git a/reactos/hal/halx86/generic/bios.c b/reactos/hal/halx86/generic/bios.c index 5bffb2d9389..9103effe84a 100644 --- a/reactos/hal/halx86/generic/bios.c +++ b/reactos/hal/halx86/generic/bios.c @@ -197,9 +197,9 @@ HalpDispatchV86Opcode(IN PKTRAP_FRAME TrapFrame) /* V86 TRAP HANDLERS **********************************************************/ #ifndef _MINIHAL_ +DECLSPEC_NORETURN VOID FASTCALL -DECLSPEC_NORETURN HalpTrap0DHandler(IN PKTRAP_FRAME TrapFrame) { /* Enter the trap */ diff --git a/reactos/include/crt/_mingw.h b/reactos/include/crt/_mingw.h index b35b6af7203..d952d1dfcde 100644 --- a/reactos/include/crt/_mingw.h +++ b/reactos/include/crt/_mingw.h @@ -187,7 +187,7 @@ allow GCC to optimize away some EH unwind code, at least in DW2 case. */ #endif #endif -#ifdef _WIN64 +#if defined(_WIN64) && !defined(_MSC_VER) #undef USE_MINGW_SETJMP_TWO_ARGS #define USE_MINGW_SETJMP_TWO_ARGS #endif diff --git a/reactos/include/crt/crtdefs.h b/reactos/include/crt/crtdefs.h index 96a534b81fc..832769e12d4 100644 --- a/reactos/include/crt/crtdefs.h +++ b/reactos/include/crt/crtdefs.h @@ -133,8 +133,14 @@ #endif #ifndef _CRT_ALIGN +#if defined (__midl) || defined(__WIDL__) +#define _CRT_ALIGN(x) +#elif defined(_MSC_VER) +#define _CRT_ALIGN(x) __declspec(align(x)) +#else #define _CRT_ALIGN(x) __attribute__ ((aligned(x))) #endif +#endif #ifndef _CRTNOALIAS #define _CRTNOALIAS diff --git a/reactos/include/crt/float.h b/reactos/include/crt/float.h index 25fa05db284..a542686948c 100644 --- a/reactos/include/crt/float.h +++ b/reactos/include/crt/float.h @@ -104,12 +104,12 @@ extern "C" { /* Set the FPU control word as cw = (cw & ~unMask) | (unNew & unMask), * i.e. change the bits in unMask to have the values they have in unNew, * leaving other bits unchanged. */ -_CRTIMP unsigned int __cdecl __MINGW_NOTHROW _controlfp (unsigned int unNew, unsigned int unMask); -_CRTIMP unsigned int __cdecl __MINGW_NOTHROW _control87 (unsigned int unNew, unsigned int unMask); +__MINGW_NOTHROW _CRTIMP unsigned int __cdecl _controlfp (unsigned int unNew, unsigned int unMask); +__MINGW_NOTHROW _CRTIMP unsigned int __cdecl _control87 (unsigned int unNew, unsigned int unMask); -_CRTIMP unsigned int __cdecl __MINGW_NOTHROW _clearfp (void); /* Clear the FPU status word */ -_CRTIMP unsigned int __cdecl __MINGW_NOTHROW _statusfp (void); /* Report the FPU status word */ +__MINGW_NOTHROW _CRTIMP unsigned int __cdecl _clearfp (void); /* Clear the FPU status word */ +__MINGW_NOTHROW _CRTIMP unsigned int __cdecl _statusfp (void); /* Report the FPU status word */ #define _clear87 _clearfp #define _status87 _statusfp @@ -123,11 +123,11 @@ _CRTIMP unsigned int __cdecl __MINGW_NOTHROW _statusfp (void); /* Report the FPU per fninit. To use the MSVCRT.dll _fpreset, include CRT_fp8.o when building your application. */ -void __cdecl __MINGW_NOTHROW _fpreset (void); -void __cdecl __MINGW_NOTHROW fpreset (void); +__MINGW_NOTHROW void __cdecl _fpreset (void); +__MINGW_NOTHROW void __cdecl fpreset (void); /* Global 'variable' for the current floating point error code. */ -_CRTIMP int * __cdecl __MINGW_NOTHROW __fpecode(void); +__MINGW_NOTHROW _CRTIMP int * __cdecl __fpecode(void); #define _fpecode (*(__fpecode())) /* @@ -135,15 +135,15 @@ _CRTIMP int * __cdecl __MINGW_NOTHROW __fpecode(void); * but they really belong in math.h. */ -_CRTIMP double __cdecl __MINGW_NOTHROW _chgsign (double); -_CRTIMP double __cdecl __MINGW_NOTHROW _copysign (double, double); -_CRTIMP double __cdecl __MINGW_NOTHROW _logb (double); -_CRTIMP double __cdecl __MINGW_NOTHROW _nextafter (double, double); -_CRTIMP double __cdecl __MINGW_NOTHROW _scalb (double, long); +__MINGW_NOTHROW _CRTIMP double __cdecl _chgsign (double); +__MINGW_NOTHROW _CRTIMP double __cdecl _copysign (double, double); +__MINGW_NOTHROW _CRTIMP double __cdecl _logb (double); +__MINGW_NOTHROW _CRTIMP double __cdecl _nextafter (double, double); +__MINGW_NOTHROW _CRTIMP double __cdecl _scalb (double, long); -_CRTIMP int __cdecl __MINGW_NOTHROW _finite (double); -_CRTIMP int __cdecl __MINGW_NOTHROW _fpclass (double); -_CRTIMP int __cdecl __MINGW_NOTHROW _isnan (double); +__MINGW_NOTHROW _CRTIMP int __cdecl _finite (double); +__MINGW_NOTHROW _CRTIMP int __cdecl _fpclass (double); +__MINGW_NOTHROW _CRTIMP int __cdecl _isnan (double); #ifdef __cplusplus } diff --git a/reactos/include/crt/msc/intrin.h b/reactos/include/crt/msc/intrin.h index 1a951ebdf17..ed53695d093 100644 --- a/reactos/include/crt/msc/intrin.h +++ b/reactos/include/crt/msc/intrin.h @@ -21,16 +21,10 @@ void _ReadBarrier(void); void _WriteBarrier(void); #pragma intrinsic(_WriteBarrier) -char _InterlockedCompareExchange8(volatile char * const Destination, const char Exchange, const char Comperand); -#pragma intrinsic(_InterlockedCompareExchange8) -short _InterlockedCompareExchange16(volatile short * const Destination, const short Exchange, const short Comperand); -#pragma intrinsic(_InterlockedCompareExchange16) long _InterlockedCompareExchange(volatile long * const Destination, const long Exchange, const long Comperand); #pragma intrinsic(_InterlockedCompareExchange) long _InterlockedExchange(volatile long * const Target, const long Value); #pragma intrinsic(_InterlockedExchange) -short _InterlockedExchangeAdd16(volatile short * const Addend, const short Value); -#pragma intrinsic(_InterlockedExchangeAdd16) long _InterlockedExchangeAdd(volatile long * const Addend, const long Value); #pragma intrinsic(_InterlockedExchangeAdd) char _InterlockedAnd8(volatile char * const value, const char mask); @@ -51,8 +45,6 @@ short _InterlockedXor16(volatile short * const value, const short mask); #pragma intrinsic(_InterlockedXor16) long _InterlockedXor(volatile long * const value, const long mask); #pragma intrinsic(_InterlockedXor) -long _InterlockedAddLargeStatistic(volatile __int64 * const Addend, const long Value); -#pragma intrinsic(_InterlockedAddLargeStatistic) long _InterlockedDecrement(volatile long * const lpAddend); #pragma intrinsic(_InterlockedDecrement) long _InterlockedIncrement(volatile long * const lpAddend); @@ -66,7 +58,10 @@ unsigned char _interlockedbittestandreset(volatile long * a, const long b); unsigned char _interlockedbittestandset(volatile long * a, const long b); #pragma intrinsic(_interlockedbittestandset) -#if defined(_M_AMD64) +#if defined(_M_IX86) +long _InterlockedAddLargeStatistic(volatile __int64 * const Addend, const long Value); +#pragma intrinsic(_InterlockedAddLargeStatistic) +#elif defined(_M_AMD64) __int64 _InterlockedExchange64(volatile __int64 * const Target, const __int64 Value); #pragma intrinsic(_InterlockedExchange64) __int64 _InterlockedExchangeAdd64(volatile __int64 * const Addend, const __int64 Value); @@ -77,7 +72,7 @@ void * _InterlockedExchangePointer(void * volatile * const Target, void * const #pragma intrinsic(_InterlockedExchangePointer) __int64 _InterlockedAnd64(volatile __int64 * const value, const __int64 mask); #pragma intrinsic(_InterlockedAnd64) -long _InterlockedOr64(volatile __int64 * const value, const __int64 mask); +__int64 _InterlockedOr64(volatile __int64 * const value, const __int64 mask); #pragma intrinsic(_InterlockedOr64) __int64 _InterlockedCompareExchange64(volatile __int64 * const Destination, const __int64 Exchange, const __int64 Comperand); #pragma intrinsic(_InterlockedCompareExchange64) @@ -139,7 +134,7 @@ void __addgsqword(const unsigned long Offset, const unsigned __int64 Data); #pragma intrinsic(__addgsqword) #endif -//#if defined(_M_IX86) +#if defined(_M_IX86) /*** FS segment addressing ***/ void __writefsbyte(const unsigned long Offset, const unsigned char Data); #pragma intrinsic(__writefsbyte) @@ -165,7 +160,7 @@ void __addfsword(const unsigned long Offset, const unsigned short Data); #pragma intrinsic(__addfsword) void __addfsdword(const unsigned long Offset, const unsigned int Data); #pragma intrinsic(__addfsdword) -//#endif +#endif /*** Bit manipulation ***/ @@ -289,7 +284,12 @@ void __writedr(unsigned reg, unsigned __int64 value); unsigned long __readcr0(void); unsigned long __readcr2(void); unsigned long __readcr3(void); -unsigned long __readcr4(void); +//unsigned long __readcr4(void); +//#pragma intrinsic(__readcr4) +// HACK: MSVC is broken +unsigned long ___readcr4(void); +#define __readcr4 ___readcr4 + unsigned int __readdr(unsigned int reg); void __writedr(unsigned reg, unsigned int value); #endif diff --git a/reactos/include/crt/sec_api/string_s.h b/reactos/include/crt/sec_api/string_s.h index 9db70e77d50..4a1c00159ee 100644 --- a/reactos/include/crt/sec_api/string_s.h +++ b/reactos/include/crt/sec_api/string_s.h @@ -21,6 +21,9 @@ extern "C" { _CRTIMP errno_t __cdecl _strnset_s(char *_Str,size_t _Size,int _Val,size_t _MaxCount); _CRTIMP errno_t __cdecl _strupr_s(char *_Str,size_t _Size); _CRTIMP errno_t __cdecl _strupr_s_l(char *_Str,size_t _Size,_locale_t _Locale); + _CRTIMP errno_t __cdecl strcpy_s(char *_Dst, size_t _Size, const char *_Src); + _CRTIMP errno_t __cdecl strcat_s(char *_Dst, size_t _Size, const char *_Src); + #ifndef _WSTRING_S_DEFINED #define _WSTRING_S_DEFINED _CRTIMP wchar_t *__cdecl wcstok_s(wchar_t *_Str,const wchar_t *_Delim,wchar_t **_Context); diff --git a/reactos/include/ddk/wdm.h b/reactos/include/ddk/wdm.h index 05f57a0d23f..8da3a5ab485 100644 --- a/reactos/include/ddk/wdm.h +++ b/reactos/include/ddk/wdm.h @@ -7897,7 +7897,7 @@ KfRaiseIrql(IN KIRQL NewIrql) { KIRQL OldIrql; - OldIrql = __readcr8(); + OldIrql = (KIRQL)__readcr8(); //ASSERT(OldIrql <= NewIrql); __writecr8(NewIrql); return OldIrql; @@ -9309,7 +9309,7 @@ RtlExtendedMagicDivide( ret64 = UnsignedMultiplyHigh(Pos ? Dividend.QuadPart : -Dividend.QuadPart, MagicDivisor.QuadPart); ret64 >>= ShiftCount; - ret.QuadPart = Pos ? ret64 : -ret64; + ret.QuadPart = Pos ? ret64 : -(LONG64)ret64; return ret; } #endif diff --git a/reactos/include/dxsdk/d3dx9shape.h b/reactos/include/dxsdk/d3dx9shape.h index c1dec053b8e..af47eb73970 100644 --- a/reactos/include/dxsdk/d3dx9shape.h +++ b/reactos/include/dxsdk/d3dx9shape.h @@ -92,4 +92,4 @@ D3DXCreateTorus( } #endif -#endif \ No newline at end of file +#endif diff --git a/reactos/include/dxsdk/dmksctrl.h b/reactos/include/dxsdk/dmksctrl.h index 729f8468a45..0f24280c739 100644 --- a/reactos/include/dxsdk/dmksctrl.h +++ b/reactos/include/dxsdk/dmksctrl.h @@ -112,4 +112,4 @@ DECLARE_INTERFACE_(IKsControl, IUnknown) #pragma warning(pop) #endif -#endif \ No newline at end of file +#endif diff --git a/reactos/include/dxsdk/dxsdkver.h b/reactos/include/dxsdk/dxsdkver.h index 5ed1a591125..b3799d221a2 100644 --- a/reactos/include/dxsdk/dxsdkver.h +++ b/reactos/include/dxsdk/dxsdkver.h @@ -7,4 +7,4 @@ #define _DXSDK_BUILD_MAJOR 91 #define _DXSDK_BUILD_MINOR 0000 -#endif \ No newline at end of file +#endif diff --git a/reactos/include/dxsdk/pixplugin.h b/reactos/include/dxsdk/pixplugin.h index 96ef5bd6308..b8620c6b263 100644 --- a/reactos/include/dxsdk/pixplugin.h +++ b/reactos/include/dxsdk/pixplugin.h @@ -44,4 +44,4 @@ BOOL WINAPI PIXGetPluginInfo( PIXPLUGININFO* pPIXPluginInfo ); #ifdef __cplusplus }; -#endif \ No newline at end of file +#endif diff --git a/reactos/include/ndk/umfuncs.h b/reactos/include/ndk/umfuncs.h index a3721733e3a..d4b1f5f5982 100644 --- a/reactos/include/ndk/umfuncs.h +++ b/reactos/include/ndk/umfuncs.h @@ -157,6 +157,7 @@ DbgUiStopDebugging( IN HANDLE Process ); +NTSYSAPI NTSTATUS NTAPI DbgUiWaitStateChange( @@ -295,7 +296,7 @@ LdrUnloadDll( IN PVOID BaseAddress ); -typedef VOID NTAPI (*PLDR_CALLBACK)(PVOID CallbackContext, PVOID Name); +typedef VOID (NTAPI *PLDR_CALLBACK)(PVOID CallbackContext, PVOID Name); NTSTATUS NTAPI LdrVerifyImageMatchesChecksum( diff --git a/reactos/include/reactos/mc/bugcodes.mc b/reactos/include/reactos/mc/bugcodes.mc index bb0b556f564..3b4fbab50a8 100644 --- a/reactos/include/reactos/mc/bugcodes.mc +++ b/reactos/include/reactos/mc/bugcodes.mc @@ -1,12 +1,3 @@ -; -; Created by : Marc Piulachs. -; This source code is offered for use in the public domain. -; - -; -; ntoskrnl.exe bug codes -; - MessageIdTypedef=ULONG SeverityNames=(Success=0x0:STATUS_SEVERITY_SUCCESS @@ -23,9 +14,6 @@ FacilityNames=(System=0x0:FACILITY_SYSTEM LanguageNames=(English=0x409:MSG00409) -; -; message definitions -; MessageId=0x7E Severity=Informational Facility=System @@ -1528,5 +1516,3 @@ SymbolicName=ATTEMPTED_EXECUTE_OF_NOEXECUTE_MEMORY Language=English An attempt was made to execute to non-executable memory. . - -; EOF diff --git a/reactos/include/reactos/mc/errcodes.mc b/reactos/include/reactos/mc/errcodes.mc index 6352cd6bb7e..d85e707ab9d 100644 --- a/reactos/include/reactos/mc/errcodes.mc +++ b/reactos/include/reactos/mc/errcodes.mc @@ -1,7 +1,3 @@ -; -; kernel32.mc MESSAGE resources for kernel32.dll -; - MessageIdTypedef=ULONG SeverityNames=(Success=0x0:STATUS_SEVERITY_SUCCESS @@ -17,13 +13,6 @@ FacilityNames=(System=0x0:FACILITY_SYSTEM LanguageNames=(English=0x409:MSG00409) - -; -; message definitions -; - -; Facility=System - MessageId=0 Severity=Success Facility=System @@ -17173,8 +17162,6 @@ ERROR_EVT_CHANNEL_PATH_TOO_GENERAL - The specified channel path selects more tha . -; Facility=WIN32 - MessageId=0x000E Severity=Warning Facility=WIN32 @@ -17208,8 +17195,6 @@ E_ACCESSDENIED - WIN32 access denied error . -; Facility=ITF - MessageId=0x0000 Severity=Warning Facility=ITF @@ -17489,5 +17474,3 @@ SymbolicName=CLASS_E_NOTLICENSED Language=English CLASS_E_NOTLICENSED - Class is not licensed for use . - -; EOF diff --git a/reactos/include/reactos/mc/ntstatus.mc b/reactos/include/reactos/mc/ntstatus.mc index fb3929209d7..9fe190409ea 100644 --- a/reactos/include/reactos/mc/ntstatus.mc +++ b/reactos/include/reactos/mc/ntstatus.mc @@ -20,7 +20,6 @@ SXS=0x15:FACILITY_SXS_ERROR_CODE ) LanguageNames=(English=0x409:MSG00409) -;#define STATUS_SUCCESS ((NTSTATUS)0x00000000L) MessageId=0x00 Severity=Success Facility=System diff --git a/reactos/include/reactos/undocuser.h b/reactos/include/reactos/undocuser.h index dcb0b0474d3..22bd858ee3b 100644 --- a/reactos/include/reactos/undocuser.h +++ b/reactos/include/reactos/undocuser.h @@ -172,4 +172,4 @@ typedef struct tagUSERAPIHOOK BOOL WINAPI RegisterUserApiHook(PUSERAPIHOOKINFO puah); BOOL WINAPI UnregisterUserApiHook(VOID); -#endif \ No newline at end of file +#endif diff --git a/reactos/include/reactos/wine/config.h b/reactos/include/reactos/wine/config.h index f24e05a0a0e..cc682661373 100644 --- a/reactos/include/reactos/wine/config.h +++ b/reactos/include/reactos/wine/config.h @@ -777,7 +777,9 @@ /* #undef HAVE_SYS_TIMES_H */ /* Define to 1 if you have the header file. */ -#define HAVE_SYS_TIME_H 1 +#ifndef _MSC_VER + #define HAVE_SYS_TIME_H 1 +#endif /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 diff --git a/reactos/include/reactos/wine/ddk/imm.h b/reactos/include/reactos/wine/ddk/imm.h index 29242f38279..0ee7ee52904 100644 --- a/reactos/include/reactos/wine/ddk/imm.h +++ b/reactos/include/reactos/wine/ddk/imm.h @@ -2,7 +2,7 @@ #ifndef _WINE_IMM_H_ #define _WINE_IMM_H_ -#include +#include #ifdef WINE_NO_UNICODE_MACROS # define WINELIB_NAME_AW(func) \ diff --git a/reactos/include/xdk/rtlfuncs.h b/reactos/include/xdk/rtlfuncs.h index d0657f6dd41..7b91b19ac73 100644 --- a/reactos/include/xdk/rtlfuncs.h +++ b/reactos/include/xdk/rtlfuncs.h @@ -2630,7 +2630,7 @@ RtlExtendedMagicDivide( ret64 = UnsignedMultiplyHigh(Pos ? Dividend.QuadPart : -Dividend.QuadPart, MagicDivisor.QuadPart); ret64 >>= ShiftCount; - ret.QuadPart = Pos ? ret64 : -ret64; + ret.QuadPart = Pos ? ret64 : -(LONG64)ret64; return ret; } #endif diff --git a/reactos/lib/3rdparty/mingw/cinitexe.c b/reactos/lib/3rdparty/mingw/cinitexe.c index b69eebe7eb9..b7a957fd72f 100644 --- a/reactos/lib/3rdparty/mingw/cinitexe.c +++ b/reactos/lib/3rdparty/mingw/cinitexe.c @@ -2,6 +2,10 @@ #include #include +#ifdef _MSC_VER +#pragma comment(linker, "/merge:.CRT=.rdata") +#endif + _CRTALLOC(".CRT$XIA") _PVFV __xi_a[] = { NULL }; _CRTALLOC(".CRT$XIZ") _PVFV __xi_z[] = { NULL }; _CRTALLOC(".CRT$XCA") _PVFV __xc_a[] = { NULL }; diff --git a/reactos/lib/3rdparty/mingw/crt_handler.c b/reactos/lib/3rdparty/mingw/crt_handler.c index 8e47df0a6c1..34b5170c2df 100644 --- a/reactos/lib/3rdparty/mingw/crt_handler.c +++ b/reactos/lib/3rdparty/mingw/crt_handler.c @@ -16,7 +16,9 @@ #if defined (_WIN64) && defined (__ia64__) #error FIXME: Unsupported __ImageBase implementation. #else +#ifndef _MSC_VER #define __ImageBase __MINGW_LSYMBOL(_image_base__) +#endif /* This symbol is defined by the linker. */ extern IMAGE_DOS_HEADER __ImageBase; #endif diff --git a/reactos/lib/3rdparty/mingw/crtexe.c b/reactos/lib/3rdparty/mingw/crtexe.c index a677301c9d8..daab5cd5984 100644 --- a/reactos/lib/3rdparty/mingw/crtexe.c +++ b/reactos/lib/3rdparty/mingw/crtexe.c @@ -33,7 +33,10 @@ extern char *** __MINGW_IMP_SYMBOL(__initenv); #endif /* Hack, for bug in ld. Will be removed soon. */ +#ifndef _MSC_VER #define __ImageBase __MINGW_LSYMBOL(_image_base__) +#endif + /* This symbol is defined by ld. */ extern IMAGE_DOS_HEADER __ImageBase; diff --git a/reactos/lib/3rdparty/mingw/merr.c b/reactos/lib/3rdparty/mingw/merr.c index 134e10fae62..0500021cd14 100644 --- a/reactos/lib/3rdparty/mingw/merr.c +++ b/reactos/lib/3rdparty/mingw/merr.c @@ -50,4 +50,3 @@ _matherr (struct _exception *pexcept) type, pexcept->name, pexcept->arg1, pexcept->arg2, pexcept->retval); return 0; } - diff --git a/reactos/lib/3rdparty/mingw/pesect.c b/reactos/lib/3rdparty/mingw/pesect.c index 60bbbc4c0d0..38677532aeb 100644 --- a/reactos/lib/3rdparty/mingw/pesect.c +++ b/reactos/lib/3rdparty/mingw/pesect.c @@ -11,7 +11,9 @@ #error FIXME: Unsupported __ImageBase implementation. #else /* Hack, for bug in ld. Will be removed soon. */ +#ifndef _MSC_VER #define __ImageBase __MINGW_LSYMBOL(_image_base__) +#endif /* This symbol is defined by the linker. */ extern IMAGE_DOS_HEADER __ImageBase; #endif diff --git a/reactos/lib/3rdparty/mingw/pseudo-reloc.c b/reactos/lib/3rdparty/mingw/pseudo-reloc.c index 77f041114d7..d87b3dc5709 100644 --- a/reactos/lib/3rdparty/mingw/pseudo-reloc.c +++ b/reactos/lib/3rdparty/mingw/pseudo-reloc.c @@ -46,7 +46,10 @@ extern char __RUNTIME_PSEUDO_RELOC_LIST__; extern char __RUNTIME_PSEUDO_RELOC_LIST_END__; -extern char __MINGW_LSYMBOL(_image_base__); +#ifndef _MSC_VER +#define __ImageBase __MINGW_LSYMBOL(_image_base__) +#endif +extern char __ImageBase; void _pei386_runtime_relocator (void); @@ -363,5 +366,5 @@ _pei386_runtime_relocator (void) ++was_init; do_pseudo_reloc (&__RUNTIME_PSEUDO_RELOC_LIST__, &__RUNTIME_PSEUDO_RELOC_LIST_END__, - &__MINGW_LSYMBOL(_image_base__)); + &__ImageBase); } diff --git a/reactos/ntoskrnl/include/internal/ex.h b/reactos/ntoskrnl/include/internal/ex.h index 3ef21387baa..7c26af3070a 100644 --- a/reactos/ntoskrnl/include/internal/ex.h +++ b/reactos/ntoskrnl/include/internal/ex.h @@ -1143,7 +1143,7 @@ ExReleasePushLockExclusive(PEX_PUSH_LOCK PushLock) /* Unlock the pushlock */ OldValue.Value = InterlockedExchangeAddSizeT((PSIZE_T)PushLock, - -(SIZE_T)EX_PUSH_LOCK_LOCK); + -(SSIZE_T)EX_PUSH_LOCK_LOCK); /* Sanity checks */ ASSERT(OldValue.Locked); diff --git a/reactos/ntoskrnl/include/internal/ob_x.h b/reactos/ntoskrnl/include/internal/ob_x.h index 545b41fc67e..aa9d59cd05d 100644 --- a/reactos/ntoskrnl/include/internal/ob_x.h +++ b/reactos/ntoskrnl/include/internal/ob_x.h @@ -358,14 +358,14 @@ ObpFreeCapturedAttributes(IN PVOID Buffer, { /* The free was within the Depth */ InterlockedPushEntrySList(&List->L.ListHead, - (PSINGLE_LIST_ENTRY)Buffer); + (PSLIST_ENTRY)Buffer); } } else { /* The free was within the Depth */ InterlockedPushEntrySList(&List->L.ListHead, - (PSINGLE_LIST_ENTRY)Buffer); + (PSLIST_ENTRY)Buffer); } } diff --git a/reactos/ntoskrnl/include/internal/trap_x.h b/reactos/ntoskrnl/include/internal/trap_x.h index 5ead64057e2..09d17ed94e3 100644 --- a/reactos/ntoskrnl/include/internal/trap_x.h +++ b/reactos/ntoskrnl/include/internal/trap_x.h @@ -21,6 +21,7 @@ #endif #elif _MSC_VER #define UNREACHABLE __assume(0) +#define __builtin_expect(a,b) (a) #else #define UNREACHABLE #endif diff --git a/reactos/ntoskrnl/io/iomgr/irp.c b/reactos/ntoskrnl/io/iomgr/irp.c index a7f3a96ab21..2e25a4094bc 100644 --- a/reactos/ntoskrnl/io/iomgr/irp.c +++ b/reactos/ntoskrnl/io/iomgr/irp.c @@ -549,7 +549,7 @@ IoAllocateIrp(IN CCHAR StackSize, if (ChargeQuota) Flags |= IRP_QUOTA_CHARGED; /* FIXME: Implement Lookaside Floats */ - + /* Figure out which Lookaside List to use */ if ((StackSize <= 8) && (ChargeQuota == FALSE)) { @@ -1832,7 +1832,7 @@ NTAPI IoIs32bitProcess( IN PIRP Irp OPTIONAL) { -#pragma message IoIs32bitProcess is hardcoded to FALSE +#pragma message "IoIs32bitProcess is hardcoded to FALSE" return FALSE; } #endif diff --git a/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c b/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c index cfdad1d741a..0d8a1995d82 100644 --- a/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c +++ b/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c @@ -31,11 +31,6 @@ extern BOOLEAN PnpSystemInit; PDRIVER_OBJECT IopRootDriverObject; PIO_BUS_TYPE_GUID_LIST PnpBusTypeGuidList = NULL; -#if defined (ALLOC_PRAGMA) -#pragma alloc_text(INIT, PnpInit) -#pragma alloc_text(INIT, PnpInit2) -#endif - typedef struct _INVALIDATE_DEVICE_RELATION_DATA { PDEVICE_OBJECT DeviceObject; diff --git a/reactos/ntoskrnl/mm/ARM3/vadnode.c b/reactos/ntoskrnl/mm/ARM3/vadnode.c index cb6c656a732..551a1946f8e 100644 --- a/reactos/ntoskrnl/mm/ARM3/vadnode.c +++ b/reactos/ntoskrnl/mm/ARM3/vadnode.c @@ -97,11 +97,13 @@ MiInsertNode(IN PMM_AVL_TABLE Table, IN PMMADDRESS_NODE Parent, IN TABLE_SEARCH_RESULT Result) { + PMMVAD Vad; + /* Insert it into the tree */ RtlpInsertAvlTreeNode(Table, NewNode, Parent, Result); /* Now insert an ARM3 MEMORY_AREA for this node, unless the insert was already from the MEMORY_AREA code */ - PMMVAD Vad = (PMMVAD)NewNode; + Vad = (PMMVAD)NewNode; if (Vad->u.VadFlags.Spare == 0) { NTSTATUS Status; @@ -165,6 +167,8 @@ NTAPI MiRemoveNode(IN PMMADDRESS_NODE Node, IN PMM_AVL_TABLE Table) { + PMMVAD Vad; + /* Call the AVL code */ RtlpDeleteAvlTreeNode(Table, Node); @@ -180,7 +184,7 @@ MiRemoveNode(IN PMMADDRESS_NODE Node, } /* Free the node from ReactOS view as well */ - PMMVAD Vad = (PMMVAD)Node; + Vad = (PMMVAD)Node; if (Vad->u.VadFlags.Spare == 0) { PMEMORY_AREA MemoryArea; diff --git a/reactos/ntoskrnl/mm/marea.c b/reactos/ntoskrnl/mm/marea.c index a621abfdc69..cacf2ae667e 100644 --- a/reactos/ntoskrnl/mm/marea.c +++ b/reactos/ntoskrnl/mm/marea.c @@ -374,8 +374,9 @@ MmInsertMemoryArea( /* Build a lame VAD if this is a user-space allocation */ if ((marea->EndingAddress < MmSystemRangeStart) && (marea->Type != MEMORY_AREA_OWNED_BY_ARM3)) { - ASSERT(marea->Type == MEMORY_AREA_VIRTUAL_MEMORY || marea->Type == MEMORY_AREA_SECTION_VIEW); PMMVAD Vad; + + ASSERT(marea->Type == MEMORY_AREA_VIRTUAL_MEMORY || marea->Type == MEMORY_AREA_SECTION_VIEW); Vad = ExAllocatePoolWithTag(NonPagedPool, sizeof(MMVAD), 'Fake'); ASSERT(Vad); RtlZeroMemory(Vad, sizeof(MMVAD)); diff --git a/reactos/tools/cabman/cabinet.h b/reactos/tools/cabman/cabinet.h index f6175af5cc1..92b49cf3200 100755 --- a/reactos/tools/cabman/cabinet.h +++ b/reactos/tools/cabman/cabinet.h @@ -29,7 +29,7 @@ #define DIR_SEPARATOR_CHAR '\\' #define DIR_SEPARATOR_STRING "\\" -#define strcasecmp _strcmpi +#define strcasecmp _stricmp #define strdup _strdup #define AllocateMemory(size) HeapAlloc(GetProcessHeap(), 0, size) @@ -80,7 +80,7 @@ extern ULONG DebugTraceLevel; #else /* DBG */ #undef DPRINT -#define DPRINT(_t_, _x_) +#define DPRINT(_t_, _x_) do { } while(0) #undef ASSERT #define ASSERT(_x_) From bd7f92508e327ecaa0c99b203b7fa023d924eea4 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Thu, 10 Feb 2011 13:24:39 +0000 Subject: [PATCH 015/287] [RTL] - Move page heap related code to heappage.c. svn path=/trunk/; revision=50652 --- reactos/lib/rtl/heapdbg.c | 20 ------------------- reactos/lib/rtl/heappage.c | 39 ++++++++++++++++++++++++++++++++++++++ reactos/lib/rtl/rtl.rbuild | 1 + 3 files changed, 40 insertions(+), 20 deletions(-) create mode 100644 reactos/lib/rtl/heappage.c diff --git a/reactos/lib/rtl/heapdbg.c b/reactos/lib/rtl/heapdbg.c index b8d68bd31eb..3bcafa33112 100644 --- a/reactos/lib/rtl/heapdbg.c +++ b/reactos/lib/rtl/heapdbg.c @@ -14,12 +14,6 @@ #define NDEBUG #include -BOOLEAN RtlpPageHeapEnabled = FALSE; -ULONG RtlpPageHeapGlobalFlags; -ULONG RtlpPageHeapSizeRangeStart, RtlpPageHeapSizeRangeEnd; -ULONG RtlpPageHeapDllRangeStart, RtlpPageHeapDllRangeEnd; -WCHAR RtlpPageHeapTargetDlls[512]; - /* FUNCTIONS ******************************************************************/ HANDLE NTAPI @@ -548,18 +542,4 @@ RtlDebugSizeHeap(HANDLE HeapPtr, return Result; } - -// Page heap -> move to another file - -HANDLE NTAPI -RtlpPageHeapCreate(ULONG Flags, - PVOID Addr, - SIZE_T TotalSize, - SIZE_T CommitSize, - PVOID Lock, - PRTL_HEAP_PARAMETERS Parameters) -{ - return NULL; -} - /* EOF */ \ No newline at end of file diff --git a/reactos/lib/rtl/heappage.c b/reactos/lib/rtl/heappage.c new file mode 100644 index 00000000000..b42136218b9 --- /dev/null +++ b/reactos/lib/rtl/heappage.c @@ -0,0 +1,39 @@ +/* COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS system libraries + * FILE: lib/rtl/heappage.c + * PURPOSE: RTL Page Heap implementation + * PROGRAMMERS: Copyright 2011 Aleksey Bragin + */ + +/* Useful references: + http://msdn.microsoft.com/en-us/library/ms220938(VS.80).aspx +*/ + +/* INCLUDES *****************************************************************/ + +#include +#include + +#define NDEBUG +#include + +BOOLEAN RtlpPageHeapEnabled = FALSE; +ULONG RtlpPageHeapGlobalFlags; +ULONG RtlpPageHeapSizeRangeStart, RtlpPageHeapSizeRangeEnd; +ULONG RtlpPageHeapDllRangeStart, RtlpPageHeapDllRangeEnd; +WCHAR RtlpPageHeapTargetDlls[512]; + +/* FUNCTIONS ******************************************************************/ + +HANDLE NTAPI +RtlpPageHeapCreate(ULONG Flags, + PVOID Addr, + SIZE_T TotalSize, + SIZE_T CommitSize, + PVOID Lock, + PRTL_HEAP_PARAMETERS Parameters) +{ + return NULL; +} + +/* EOF */ diff --git a/reactos/lib/rtl/rtl.rbuild b/reactos/lib/rtl/rtl.rbuild index f7781dc389b..e567221cf06 100644 --- a/reactos/lib/rtl/rtl.rbuild +++ b/reactos/lib/rtl/rtl.rbuild @@ -74,6 +74,7 @@ handle.c heap.c heapdbg.c + heappage.c image.c interlck.c message.c From 54917c852b0f823f5e30eb96564ba36950a89349 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Thu, 10 Feb 2011 17:13:53 +0000 Subject: [PATCH 016/287] [XCOPY] - Spanish translation by JasonGenie at gmail dot com See issue #5889 for more details. svn path=/trunk/; revision=50653 --- .../base/applications/cmdutils/xcopy/Es.rc | 80 +++++++++++++++++++ .../base/applications/cmdutils/xcopy/rsrc.rc | 1 + 2 files changed, 81 insertions(+) create mode 100644 reactos/base/applications/cmdutils/xcopy/Es.rc diff --git a/reactos/base/applications/cmdutils/xcopy/Es.rc b/reactos/base/applications/cmdutils/xcopy/Es.rc new file mode 100644 index 00000000000..67c9eb8ba04 --- /dev/null +++ b/reactos/base/applications/cmdutils/xcopy/Es.rc @@ -0,0 +1,80 @@ +/* + * XCOPY - Wine-compatible xcopy program + * Spanish language support + * + * Copyright (C) 2007 Jeisson T. + * + * 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_SPANISH, SUBLANG_DEFAULT + +STRINGTABLE +{ + STRING_INVPARMS, "Cantidad invalido de parametros - Use xcopy /? para obtener ayuda\n" + STRING_INVPARM, "Parametro invalido '%s' - Use xcopy /? para obtener ayuda\n" + STRING_PAUSE, "Unde para iniciar la copia\n" + STRING_SIMCOPY, "%d archivo(s) seran copiado(s)\n" + STRING_COPY, "%d archivo(s) copiado(s)\n" + STRING_QISDIR, "Es '%s' un nombre de archivo o de directorio\n\ + en el punto de destino?\n\ + (F - Archivo, D - Directorio)\n" + STRING_SRCPROMPT,"%s? (Si|No)\n" + STRING_OVERWRITE,"Destruir y escribir encima %s? (Si|No|Todo)\n" + STRING_COPYFAIL, "La copia de '%s' a '%s' ha faillecido con r/c %d\n" + STRING_OPENFAIL, "Impossible de abrir '%s'\n" + STRING_READFAIL, "Hubo un error durante la lectura de '%s'\n" + STRING_YES_CHAR, "S" + STRING_NO_CHAR, "N" + STRING_ALL_CHAR, "T" + STRING_FILE_CHAR,"A" + STRING_DIR_CHAR, "D" + + STRING_HELP, +"XCOPY - Copia los archivos o directorios fuentes a un destino\n\ +\n\ +Sintaxis:\n\ +XCOPY fuente [dest] [/I] [/S] [/Q] [/F] [/L] [/W] [/T] [/N] [/U]\n\ +\t [/R] [/H] [/C] [/P] [/A] [/M] [/E] [/D] [/Y] [/-Y]\n\ +\n\ +En la cual:\n\ +\n\ +[/I] Asuma el directorio si el destino no existe y copia dos o\n\ +\tmas archivos\n\ +[/S] Copia directorios y subdirectorios\n\ +[/E] Copia directorios y subdirectorios, incluyendo las que estan vacias\n\ +[/Q] No mostrar la lista de los nombres de los archivos durante la copia (silencioso)\n\ +[/F] Mostrar todas las fuentes y todos los destinos durante la copia.\n\ +[/L] Simular la operacion, mostrando los nombres de archivos que seran copiados\n\ +[/W] Preguntar antes de iniciar la operacion de copia\n\ +[/T] Crear una estructura de repertorios vacios pero no copia los archivos\n\ +[/Y] No pide confirmacion cuando sobreescribe sobre los archivos\n\ +[/-Y] Pide confirmacion cuando sobreescribe los archivos\n\ +[/P] Pregunta al usuario ante de copiar cada archivo fuente\n\ +[/N] Copiar usando los nombres cortos\n\ +[/U] Copia solamente los archivos que ya existent en el punto de destino\n\ +[/R] Sobreescribir los archivos en lectura unica\n\ +[/H] Incluir los archivos escondidos y los del systema en la copia\n\ +[/C] Siempre continuar mismo si un error occure en la copia\n\ +[/A] Copia solamente archivos con el attributo de archivo definido\n\ +[/M] Copia solamente archivos con el attributo de archivo definido, supprime\n\ +\tl'attributo de archivo\n\ +[/D | /D:m-d-y] Copia los nuevos archivos or los que fueront modificado despues la fecha especificada.\n\ +\t\tSi la fecha no esta especificada, copia unicamente cuando el archivo de destino est mas viejo\n\ +\t\tque el archivo fuente\n\n" + +} diff --git a/reactos/base/applications/cmdutils/xcopy/rsrc.rc b/reactos/base/applications/cmdutils/xcopy/rsrc.rc index ec82d6116f6..38e169fd31f 100644 --- a/reactos/base/applications/cmdutils/xcopy/rsrc.rc +++ b/reactos/base/applications/cmdutils/xcopy/rsrc.rc @@ -30,6 +30,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "En.rc" #include "No.rc" #include "Pl.rc" +#include "Es.rc" /* UTF-8 */ #include "De.rc" From 92677eb0874109329683c333575170b6712bc56f Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Thu, 10 Feb 2011 18:21:53 +0000 Subject: [PATCH 017/287] - Add stubs for all page heap API functions. - Enable call to RtlpPageHeapDestroy() when necessary. - Reset Parameters==-1 hack after unsuccessful call to RtlpPageHeapCreate(), would be necessary when page heap is implemented.. svn path=/trunk/; revision=50654 --- reactos/lib/rtl/heap.c | 7 ++++ reactos/lib/rtl/heap.h | 47 ++++++++++++++++++++++++++ reactos/lib/rtl/heappage.c | 69 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 123 insertions(+) diff --git a/reactos/lib/rtl/heap.c b/reactos/lib/rtl/heap.c index 9a563eeecd0..bb81fc3987a 100644 --- a/reactos/lib/rtl/heap.c +++ b/reactos/lib/rtl/heap.c @@ -1364,6 +1364,10 @@ RtlCreateHeap(ULONG Flags, //ASSERT(FALSE); DPRINT1("Enabling page heap failed\n"); + + /* Reset a special Parameters == -1 hack */ + if ((ULONG_PTR)Parameters == (ULONG_PTR)-1) + Parameters = NULL; } /* Check validation flags */ @@ -1716,6 +1720,9 @@ RtlDestroyHeap(HANDLE HeapPtr) /* [in] Handle of heap */ if (!HeapPtr) return NULL; + /* Call page heap routine if required */ + if (Heap->ForceFlags & HEAP_FLAG_PAGE_ALLOCS) return RtlpPageHeapDestroy(HeapPtr); + /* Call special heap */ if (RtlpHeapIsSpecial(Heap->Flags)) { diff --git a/reactos/lib/rtl/heap.h b/reactos/lib/rtl/heap.h index 8291838c6de..4ea5f098620 100644 --- a/reactos/lib/rtl/heap.h +++ b/reactos/lib/rtl/heap.h @@ -385,6 +385,8 @@ RtlDebugSizeHeap(HANDLE HeapPtr, ULONG Flags, PVOID Ptr); +/* heappage.c */ + HANDLE NTAPI RtlpPageHeapCreate(ULONG Flags, PVOID Addr, @@ -393,4 +395,49 @@ RtlpPageHeapCreate(ULONG Flags, PVOID Lock, PRTL_HEAP_PARAMETERS Parameters); +PVOID NTAPI +RtlpPageHeapDestroy(HANDLE HeapPtr); + +PVOID NTAPI +RtlpPageHeapAllocate(IN PVOID HeapPtr, + IN ULONG Flags, + IN SIZE_T Size); + +BOOLEAN NTAPI +RtlpPageHeapFree(HANDLE HeapPtr, + ULONG Flags, + PVOID Ptr); + +PVOID NTAPI +RtlpPageHeapReAllocate(HANDLE HeapPtr, + ULONG Flags, + PVOID Ptr, + SIZE_T Size); + +BOOLEAN NTAPI +RtlpPageHeapGetUserInfo(PVOID HeapHandle, + ULONG Flags, + PVOID BaseAddress, + PVOID *UserValue, + PULONG UserFlags); + +BOOLEAN NTAPI +RtlpPageHeapSetUserValue(PVOID HeapHandle, + ULONG Flags, + PVOID BaseAddress, + PVOID UserValue); + +BOOLEAN +NTAPI +RtlpPageHeapSetUserFlags(PVOID HeapHandle, + ULONG Flags, + PVOID BaseAddress, + ULONG UserFlagsReset, + ULONG UserFlagsSet); + +SIZE_T NTAPI +RtlpPageHeapSize(HANDLE HeapPtr, + ULONG Flags, + PVOID Ptr); + #endif diff --git a/reactos/lib/rtl/heappage.c b/reactos/lib/rtl/heappage.c index b42136218b9..a953d4ceb39 100644 --- a/reactos/lib/rtl/heappage.c +++ b/reactos/lib/rtl/heappage.c @@ -36,4 +36,73 @@ RtlpPageHeapCreate(ULONG Flags, return NULL; } +PVOID NTAPI +RtlpPageHeapDestroy(HANDLE HeapPtr) +{ + return FALSE; +} + +PVOID NTAPI +RtlpPageHeapAllocate(IN PVOID HeapPtr, + IN ULONG Flags, + IN SIZE_T Size) +{ + return NULL; +} + +BOOLEAN NTAPI +RtlpPageHeapFree(HANDLE HeapPtr, + ULONG Flags, + PVOID Ptr) +{ + return FALSE; +} + +PVOID NTAPI +RtlpPageHeapReAllocate(HANDLE HeapPtr, + ULONG Flags, + PVOID Ptr, + SIZE_T Size) +{ + return NULL; +} + +BOOLEAN NTAPI +RtlpPageHeapGetUserInfo(PVOID HeapHandle, + ULONG Flags, + PVOID BaseAddress, + PVOID *UserValue, + PULONG UserFlags) +{ + return FALSE; +} + +BOOLEAN NTAPI +RtlpPageHeapSetUserValue(PVOID HeapHandle, + ULONG Flags, + PVOID BaseAddress, + PVOID UserValue) +{ + return FALSE; +} + +BOOLEAN +NTAPI +RtlpPageHeapSetUserFlags(PVOID HeapHandle, + ULONG Flags, + PVOID BaseAddress, + ULONG UserFlagsReset, + ULONG UserFlagsSet) +{ + return FALSE; +} + +SIZE_T NTAPI +RtlpPageHeapSize(HANDLE HeapPtr, + ULONG Flags, + PVOID Ptr) +{ + return 0; +} + /* EOF */ From dca0c91ecc1aeca9e712d996cbbbea82163355eb Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 10 Feb 2011 20:26:41 +0000 Subject: [PATCH 018/287] [FREELDR] Fix broken release version svn path=/trunk/; revision=50655 --- reactos/boot/freeldr/freeldr/debug.c | 13 ------------- reactos/boot/freeldr/freeldr/freeldr.c | 13 +++++++++++++ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/reactos/boot/freeldr/freeldr/debug.c b/reactos/boot/freeldr/freeldr/debug.c index 95a5a4f1b71..4ab90966192 100644 --- a/reactos/boot/freeldr/freeldr/debug.c +++ b/reactos/boot/freeldr/freeldr/debug.c @@ -66,19 +66,6 @@ ULONG BaudRate = 115200; BOOLEAN DebugStartOfLine = TRUE; -// We need to emulate these, because the original ones don't work in freeldr -int __cdecl wctomb(char *mbchar, wchar_t wchar) -{ - *mbchar = wchar; - return 1; -} - -int __cdecl mbtowc (wchar_t *wchar, const char *mbchar, size_t count) -{ - *wchar = *mbchar; - return 1; -} - VOID DebugInit(VOID) { if (DebugPort & RS232) diff --git a/reactos/boot/freeldr/freeldr/freeldr.c b/reactos/boot/freeldr/freeldr/freeldr.c index 04dae9b6541..57899168b2a 100644 --- a/reactos/boot/freeldr/freeldr/freeldr.c +++ b/reactos/boot/freeldr/freeldr/freeldr.c @@ -53,3 +53,16 @@ VOID BootMain(LPSTR CmdLine) #endif RunLoader(); } + +// We need to emulate these, because the original ones don't work in freeldr +int __cdecl wctomb(char *mbchar, wchar_t wchar) +{ + *mbchar = wchar; + return 1; +} + +int __cdecl mbtowc (wchar_t *wchar, const char *mbchar, size_t count) +{ + *wchar = *mbchar; + return 1; +} From 57e4ff4b2bf604a620701367e55ba66123468edc Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Fri, 11 Feb 2011 13:48:41 +0000 Subject: [PATCH 019/287] Reduce difference with the cmake branch, mostly msvc and amd64 fixes. svn path=/trunk/; revision=50656 --- reactos/boot/freeldr/freeldr/windows/winldr.c | 7 +- reactos/drivers/storage/classpnp/class.c | 2 +- reactos/drivers/storage/classpnp/obsolete.c | 2 +- reactos/include/crt/mingw32/intrin_x86.h | 33 ++ reactos/include/crt/setjmp.h | 18 +- reactos/include/crt/stddef.h | 8 +- reactos/include/crt/stdlib.h | 14 +- reactos/include/crt/string.h | 40 +- reactos/include/crt/sys/stat.h | 12 +- reactos/include/crt/vadefs.h | 18 +- reactos/include/ndk/inline_ntcurrentteb.h | 66 +-- reactos/include/ndk/peb_teb.h | 2 +- reactos/include/psdk/rpc.h | 12 +- reactos/include/psdk/strsafe.h | 7 +- reactos/include/psdk/unknown.h | 6 +- reactos/include/psdk/wspiapi.h | 20 +- reactos/include/reactos/asm.h | 9 + .../include/reactos/mingw-w64/sect_attribs.h | 2 +- reactos/include/xdk/kefuncs.h | 2 +- .../lib/drivers/ip/network/i386/checksum.S | 390 +++++++++--------- .../ntoskrnl/include/internal/i386/intrin_i.h | 48 +++ reactos/ntoskrnl/ke/i386/cpu.c | 8 +- reactos/ntoskrnl/mm/ARM3/i386/init.c | 11 +- reactos/ntoskrnl/mm/ARM3/miarm.h | 8 + reactos/tools/unicode/string.c | 3 +- reactos/tools/unicode/wine/unicode.h | 60 ++- 26 files changed, 429 insertions(+), 379 deletions(-) diff --git a/reactos/boot/freeldr/freeldr/windows/winldr.c b/reactos/boot/freeldr/freeldr/windows/winldr.c index 59a997b084f..14159b47a24 100644 --- a/reactos/boot/freeldr/freeldr/windows/winldr.c +++ b/reactos/boot/freeldr/freeldr/windows/winldr.c @@ -39,6 +39,10 @@ extern BOOLEAN UseRealHeap; extern ULONG LoaderPagesSpanned; extern BOOLEAN AcpiPresent; +extern HEADLESS_LOADER_BLOCK LoaderRedirectionInformation; +extern BOOLEAN WinLdrTerminalConnected; +extern void WinLdrSetupEms(IN PCHAR BootOptions); + BOOLEAN WinLdrCheckForLoadedDll(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, IN PCH DllName, @@ -206,8 +210,6 @@ WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock, #ifdef _M_IX86 /* Set headless block pointer */ - extern HEADLESS_LOADER_BLOCK LoaderRedirectionInformation; - extern BOOLEAN WinLdrTerminalConnected; if (WinLdrTerminalConnected) { Extension->HeadlessLoaderBlock = MmHeapAlloc(sizeof(HEADLESS_LOADER_BLOCK)); @@ -537,7 +539,6 @@ LoadAndBootWindows(PCSTR OperatingSystemName, #ifdef _M_IX86 /* Setup redirection support */ - extern void WinLdrSetupEms(IN PCHAR BootOptions); WinLdrSetupEms(BootOptions); #endif /* Detect hardware */ diff --git a/reactos/drivers/storage/classpnp/class.c b/reactos/drivers/storage/classpnp/class.c index bf73d776523..2da38e04de8 100644 --- a/reactos/drivers/storage/classpnp/class.c +++ b/reactos/drivers/storage/classpnp/class.c @@ -2485,7 +2485,7 @@ ClassIoComplete( retry = TRUE; } - if (retry && (irpStack->Parameters.Others.Argument4--)) { + if (retry && ((*(PCHAR*)&irpStack->Parameters.Others.Argument4)--)) { // // Retry request. diff --git a/reactos/drivers/storage/classpnp/obsolete.c b/reactos/drivers/storage/classpnp/obsolete.c index 1dec49c4306..c0d6792d9cb 100644 --- a/reactos/drivers/storage/classpnp/obsolete.c +++ b/reactos/drivers/storage/classpnp/obsolete.c @@ -161,7 +161,7 @@ ClassIoCompleteAssociated( retry = TRUE; } - if (retry && (irpStack->Parameters.Others.Argument4--)) { + if (retry && ((*(PCHAR*)&irpStack->Parameters.Others.Argument4)--)) { // // Retry request. If the class driver has supplied a StartIo, diff --git a/reactos/include/crt/mingw32/intrin_x86.h b/reactos/include/crt/mingw32/intrin_x86.h index 1be110c4473..a92f2b307ef 100644 --- a/reactos/include/crt/mingw32/intrin_x86.h +++ b/reactos/include/crt/mingw32/intrin_x86.h @@ -1128,6 +1128,39 @@ __INTRIN_INLINE void __outdwordstring(unsigned short const Port, const unsigned __asm__ __volatile__("rep; outsl" : : [Port] "d" (Port), [Buffer] "S" (Buffer), "c" (Count)); } +__INTRIN_INLINE int _inp(unsigned short Port) +{ + return __inbyte(Port); +} + +__INTRIN_INLINE unsigned short _inpw(unsigned short Port) +{ + return __inword(Port); +} + +__INTRIN_INLINE unsigned long _inpd(unsigned short Port) +{ + return __indword(Port); +} + +__INTRIN_INLINE int _outp(unsigned short Port, int databyte) +{ + __outbyte(Port, databyte); + return databyte; +} + +__INTRIN_INLINE unsigned short _outpw(unsigned short Port, unsigned short dataword) +{ + __outword(Port, dataword); + return dataword; +} + +__INTRIN_INLINE unsigned long _outpd(unsigned short Port, unsigned long dataword) +{ + __outdword(Port, dataword); + return dataword; +} + /*** System information ***/ __INTRIN_INLINE void __cpuid(int CPUInfo[], const int InfoType) diff --git a/reactos/include/crt/setjmp.h b/reactos/include/crt/setjmp.h index 002e525c050..3c1ab86995f 100644 --- a/reactos/include/crt/setjmp.h +++ b/reactos/include/crt/setjmp.h @@ -145,9 +145,6 @@ extern "C" { #define _JMP_BUF_DEFINED #endif -#ifdef _MSC_VER -int __cdecl __MINGW_NOTHROW setjmp(jmp_buf _Buf); -#else #ifdef USE_MINGW_SETJMP_TWO_ARGS #ifndef _INC_SETJMPEX #if defined(__x86_64) @@ -158,20 +155,19 @@ int __cdecl __MINGW_NOTHROW setjmp(jmp_buf _Buf); ({ void* value; __asm__ __volatile__("movl %%esp, %[value]" : [value] "=r" (value)); value; }) #endif #define setjmp(BUF) _setjmp((BUF),mingw_getsp()) - int __cdecl __MINGW_NOTHROW _setjmp(jmp_buf _Buf,void *_Ctx); -#else + int __MINGW_NOTHROW __cdecl _setjmp(jmp_buf _Buf,void *_Ctx); +#else /* _INC_SETJMPEX */ #undef setjmp #define setjmp(BUF) _setjmpex((BUF),mingw_getsp()) #define setjmpex(BUF) _setjmpex((BUF),mingw_getsp()) - int __cdecl __MINGW_NOTHROW _setjmpex(jmp_buf _Buf,void *_Ctx); -#endif -#else + int __MINGW_NOTHROW __cdecl _setjmpex(jmp_buf _Buf,void *_Ctx); +#endif /* _INC_SETJMPEX */ +#else /* !USE_MINGW_SETJMP_TWO_ARGS */ #ifndef _INC_SETJMPEX #define setjmp _setjmp #endif - int __cdecl __MINGW_NOTHROW setjmp(jmp_buf _Buf); -#endif -#endif + int __MINGW_NOTHROW __cdecl setjmp(jmp_buf _Buf); +#endif /* !USE_MINGW_SETJMP_TWO_ARGS */ __declspec(noreturn) __MINGW_NOTHROW void __cdecl ms_longjmp(jmp_buf _Buf,int _Value)/* throw(...)*/; __declspec(noreturn) __MINGW_NOTHROW void __cdecl longjmp(jmp_buf _Buf,int _Value); diff --git a/reactos/include/crt/stddef.h b/reactos/include/crt/stddef.h index 0c366e977fd..97a519ea88e 100644 --- a/reactos/include/crt/stddef.h +++ b/reactos/include/crt/stddef.h @@ -13,13 +13,7 @@ extern "C" { #endif -#ifndef _CRT_ERRNO_DEFINED -#define _CRT_ERRNO_DEFINED - _CRTIMP extern int *__cdecl _errno(void); -#define errno (*_errno()) - errno_t __cdecl _set_errno(int _Value); - errno_t __cdecl _get_errno(int *_Value); -#endif +#include _CRTIMP extern unsigned long __cdecl __threadid(void); #define _threadid (__threadid()) diff --git a/reactos/include/crt/stdlib.h b/reactos/include/crt/stdlib.h index 800ad1ca61d..475bf924342 100644 --- a/reactos/include/crt/stdlib.h +++ b/reactos/include/crt/stdlib.h @@ -134,13 +134,7 @@ extern "C" { _invalid_parameter_handler __cdecl _set_invalid_parameter_handler(_invalid_parameter_handler _Handler); _invalid_parameter_handler __cdecl _get_invalid_parameter_handler(void); -#ifndef _CRT_ERRNO_DEFINED -#define _CRT_ERRNO_DEFINED - _CRTIMP extern int *__cdecl _errno(void); -#define errno (*_errno()) - errno_t __cdecl _set_errno(int _Value); - errno_t __cdecl _get_errno(int *_Value); -#endif +#include _CRTIMP unsigned long *__cdecl __doserrno(void); #define _doserrno (*__doserrno()) errno_t __cdecl _set_doserrno(unsigned long _Value); @@ -447,10 +441,10 @@ extern "C" { _CRTIMP void __cdecl _wsplitpath(const wchar_t *_FullPath,wchar_t *_Drive,wchar_t *_Dir,wchar_t *_Filename,wchar_t *_Ext); #endif - _CRTIMP void __cdecl _beep(unsigned _Frequency,unsigned _Duration) __MINGW_ATTRIB_DEPRECATED; + _CRTIMP __MINGW_ATTRIB_DEPRECATED void __cdecl _beep(unsigned _Frequency,unsigned _Duration); /* Not to be confused with _set_error_mode (int). */ - _CRTIMP void __cdecl _seterrormode(int _Mode) __MINGW_ATTRIB_DEPRECATED; - _CRTIMP void __cdecl _sleep(unsigned long _Duration) __MINGW_ATTRIB_DEPRECATED; + _CRTIMP __MINGW_ATTRIB_DEPRECATED void __cdecl _seterrormode(int _Mode); + _CRTIMP __MINGW_ATTRIB_DEPRECATED void __cdecl _sleep(unsigned long _Duration); #endif #ifndef NO_OLDNAMES diff --git a/reactos/include/crt/string.h b/reactos/include/crt/string.h index 0ecde8b7ee5..472d76ce9fe 100644 --- a/reactos/include/crt/string.h +++ b/reactos/include/crt/string.h @@ -82,6 +82,17 @@ extern "C" { _CRTIMP char *_strupr_l(char *_String,_locale_t _Locale); _CRTIMP size_t __cdecl strxfrm(char *_Dst,const char *_Src,size_t _MaxCount); _CRTIMP size_t __cdecl _strxfrm_l(char *_Dst,const char *_Src,size_t _MaxCount,_locale_t _Locale); +#if __STDC_WANT_SECURE_LIB__ + _CRTIMP errno_t __cdecl _strset_s(char *_Dst,size_t _DstSize,int _Value); + _CRTIMP errno_t __cdecl _strerror_s(char *_Buf,size_t _SizeInBytes,const char *_ErrMsg); + _CRTIMP errno_t __cdecl _strlwr_s(char *_Str,size_t _Size); + _CRTIMP errno_t __cdecl _strlwr_s_l(char *_Str,size_t _Size,_locale_t _Locale); + _CRTIMP errno_t __cdecl _strnset_s(char *_Str,size_t _Size,int _Val,size_t _MaxCount); + _CRTIMP errno_t __cdecl _strupr_s(char *_Str,size_t _Size); + _CRTIMP errno_t __cdecl _strupr_s_l(char *_Str,size_t _Size,_locale_t _Locale); + _CRTIMP errno_t __cdecl strcpy_s(char *_Dst, size_t _Size, const char *_Src); + _CRTIMP errno_t __cdecl strcat_s(char *_Dst, size_t _Size, const char *_Src); +#endif #ifndef NO_OLDNAMES _CRTIMP _CRT_NONSTDC_DEPRECATE(_strdup) char *__cdecl strdup(const char *_Src); @@ -102,27 +113,15 @@ extern "C" { _CRTIMP wchar_t *__cdecl _wcsdup(const wchar_t *_Str); _CRTIMP _CRT_INSECURE_DEPRECATE(wcsat_s) wchar_t *__cdecl wcscat(wchar_t *_Dest,const wchar_t *_Source); -#if __STDC_WANT_SECURE_LIB__ - _CRTIMP errno_t __cdecl wcsat_s(wchar_t * Dest, size_t SizeInWords, const wchar_t * _Source); -#endif _CRTIMP _CONST_RETURN wchar_t *__cdecl wcschr(const wchar_t *_Str,wchar_t _Ch); _CRTIMP int __cdecl wcscmp(const wchar_t *_Str1,const wchar_t *_Str2); _CRTIMP _CRT_INSECURE_DEPRECATE(wcscpy_s) wchar_t *__cdecl wcscpy(wchar_t *_Dest,const wchar_t *_Source); -#if __STDC_WANT_SECURE_LIB__ - _CRTIMP errno_t __cdecl wcscpy_s(wchar_t * Dest, size_t SizeInWords, const wchar_t * _Source); -#endif _CRTIMP size_t __cdecl wcscspn(const wchar_t *_Str,const wchar_t *_Control); _CRTIMP wchar_t *wcsncat(wchar_t *_Dest,const wchar_t *_Source,size_t _Count); _CRTIMP size_t __cdecl wcslen(const wchar_t *_Str); _CRTIMP _CRT_INSECURE_DEPRECATE(wcsnlen_s) size_t __cdecl wcsnlen(const wchar_t *_Src,size_t _MaxCount); -#if __STDC_WANT_SECURE_LIB__ - _CRTIMP errno_t __cdecl wcsnlen_s(wchar_t **_Src, size_t _MaxCount); -#endif _CRTIMP int __cdecl wcsncmp(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount); _CRTIMP _CRT_INSECURE_DEPRECATE(wcsncpy_s) wchar_t *wcsncpy(wchar_t *_Dest,const wchar_t *_Source,size_t _Count); -#if __STDC_WANT_SECURE_LIB__ - _CRTIMP errno_t __cdecl wcsncpy_s(wchar_t *_Dest, size_t SizeInWords, const wchar_t *_Source ,size_t _Count); -#endif _CRTIMP _CONST_RETURN wchar_t *__cdecl wcspbrk(const wchar_t *_Str,const wchar_t *_Control); _CRTIMP _CONST_RETURN wchar_t *__cdecl wcsrchr(const wchar_t *_Str,wchar_t _Ch); _CRTIMP size_t __cdecl wcsspn(const wchar_t *_Str,const wchar_t *_Control); @@ -151,6 +150,20 @@ extern "C" { _CRTIMP int __cdecl _wcsncoll_l(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount,_locale_t _Locale); _CRTIMP int __cdecl _wcsnicoll(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount); _CRTIMP int __cdecl _wcsnicoll_l(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount,_locale_t _Locale); +#if __STDC_WANT_SECURE_LIB__ + _CRTIMP errno_t __cdecl wcsat_s(wchar_t * Dest, size_t SizeInWords, const wchar_t * _Source); + _CRTIMP errno_t __cdecl wcscpy_s(wchar_t * Dest, size_t SizeInWords, const wchar_t * _Source); + _CRTIMP errno_t __cdecl wcsnlen_s(wchar_t **_Src, size_t _MaxCount); + _CRTIMP errno_t __cdecl wcsncpy_s(wchar_t *_Dest, size_t SizeInWords, const wchar_t *_Source ,size_t _Count); + _CRTIMP errno_t __cdecl _wcserror_s(wchar_t *_Buf,size_t _SizeInWords,int _ErrNum); + _CRTIMP errno_t __cdecl __wcserror_s(wchar_t *_Buffer,size_t _SizeInWords,const wchar_t *_ErrMsg); + _CRTIMP errno_t __cdecl _wcsnset_s(wchar_t *_Dst,size_t _DstSizeInWords,wchar_t _Val,size_t _MaxCount); + _CRTIMP errno_t __cdecl _wcsset_s(wchar_t *_Str,size_t _SizeInWords,wchar_t _Val); + _CRTIMP errno_t __cdecl _wcslwr_s(wchar_t *_Str,size_t _SizeInWords); + _CRTIMP errno_t __cdecl _wcslwr_s_l(wchar_t *_Str,size_t _SizeInWords,_locale_t _Locale); + _CRTIMP errno_t __cdecl _wcsupr_s(wchar_t *_Str,size_t _Size); + _CRTIMP errno_t __cdecl _wcsupr_s_l(wchar_t *_Str,size_t _Size,_locale_t _Locale); +#endif #ifndef NO_OLDNAMES _CRTIMP _CRT_NONSTDC_DEPRECATE(_wcsdup) wchar_t *__cdecl wcsdup(const wchar_t *_Str); @@ -171,8 +184,6 @@ extern "C" { } #endif -#include - // HACK #define strcasecmp _stricmp #define strncasecmp _strnicmp @@ -180,3 +191,4 @@ extern "C" { #define wcsicmp _wcsicmp #endif + diff --git a/reactos/include/crt/sys/stat.h b/reactos/include/crt/sys/stat.h index 22bfb0f32c7..45ec7eaad57 100644 --- a/reactos/include/crt/sys/stat.h +++ b/reactos/include/crt/sys/stat.h @@ -187,9 +187,9 @@ extern "C" { _Stat->st_gid = _Stat64.st_gid; _Stat->st_rdev = _Stat64.st_rdev; _Stat->st_size = _Stat64.st_size; - _Stat->st_atime = _Stat64.st_atime; - _Stat->st_mtime = _Stat64.st_mtime; - _Stat->st_ctime = _Stat64.st_ctime; + _Stat->st_atime = (__time32_t)_Stat64.st_atime; + _Stat->st_mtime = (__time32_t)_Stat64.st_mtime; + _Stat->st_ctime = (__time32_t)_Stat64.st_ctime; return ret; } __CRT_INLINE int __cdecl _fstat32i64(int _FileDes, struct _stat32i64 *_Stat) @@ -204,9 +204,9 @@ extern "C" { _Stat->st_gid = _Stat64.st_gid; _Stat->st_rdev = _Stat64.st_rdev; _Stat->st_size = _Stat64.st_size; - _Stat->st_atime = _Stat64.st_atime; - _Stat->st_mtime = _Stat64.st_mtime; - _Stat->st_ctime = _Stat64.st_ctime; + _Stat->st_atime = (__time32_t)_Stat64.st_atime; + _Stat->st_mtime = (__time32_t)_Stat64.st_mtime; + _Stat->st_ctime = (__time32_t)_Stat64.st_ctime; return ret; } #endif /* _USE_32BIT_TIME_T */ diff --git a/reactos/include/crt/vadefs.h b/reactos/include/crt/vadefs.h index 6a72792d171..6e14de7500e 100644 --- a/reactos/include/crt/vadefs.h +++ b/reactos/include/crt/vadefs.h @@ -81,14 +81,24 @@ extern "C" { #define __va_copy(d,s) __builtin_va_copy(d,s) #elif defined(_MSC_VER) -#if defined(_M_IA64) || defined(_M_AMD64) || defined(_M_CEE) -#error Please implement me -#endif - +#if defined(_M_IX86) #define _crt_va_start(v,l) ((void)((v) = (va_list)_ADDRESSOF(l) + _INTSIZEOF(l))) #define _crt_va_arg(v,l) (*(l *)(((v) += _INTSIZEOF(l)) - _INTSIZEOF(l))) #define _crt_va_end(v) ((void)((v) = (va_list)0)) #define __va_copy(d,s) ((void)((d) = (s))) +#elif defined(_M_AMD64) +#define _PTRSIZEOF(n) ((sizeof(n) + sizeof(void*) - 1) & ~(sizeof(void*) - 1)) +#define _ISSTRUCT(t) ((sizeof(t) > sizeof(void*)) || (sizeof(t) & (sizeof(t)-1)) != 0) +#define _crt_va_start(v,l) ((void)((v) = (va_list)_ADDRESSOF(l) + _PTRSIZEOF(l))) +#define _crt_va_arg(v,t) (_ISSTRUCT(t) ? \ + (**(t**)(((v) += sizeof(void*)) - sizeof(void*))) : \ + (*(t*)(((v) += sizeof(void*)) - sizeof(void*)))) +#define _crt_va_end(v) ((void)((v) = (va_list)0)) +#define __va_copy(d,s) ((void)((d) = (s))) +#else //if defined(_M_IA64) || defined(_M_CEE) +#error Please implement me +#endif + #endif #if !defined(va_copy) && (!defined(__STRICT_ANSI__) || __STDC_VERSION__ + 0 >= 199900L) diff --git a/reactos/include/ndk/inline_ntcurrentteb.h b/reactos/include/ndk/inline_ntcurrentteb.h index ffda4d96924..4f874e6d7b1 100644 --- a/reactos/include/ndk/inline_ntcurrentteb.h +++ b/reactos/include/ndk/inline_ntcurrentteb.h @@ -1,20 +1,10 @@ #ifndef _INLINE_NT_CURRENTTEB_H_ #define _INLINE_NT_CURRENTTEB_H_ -#ifdef __GNUC__ - #if defined(_M_IX86) FORCEINLINE struct _TEB * NtCurrentTeb(void) { - struct _TEB *ret; - - __asm__ __volatile__ ( - "movl %%fs:0x18, %0\n" - : "=r" (ret) - : /* no inputs */ - ); - - return ret; + return (struct _TEB *)__readfsdword(0x18); } #elif defined(_M_ARM) @@ -24,63 +14,17 @@ FORCEINLINE struct _TEB * NtCurrentTeb(void) #include #elif defined(_M_AMD64) -FORCEINLINE struct _TEB * NtCurrentTeb(VOID) +FORCEINLINE struct _TEB * NtCurrentTeb(void) { return (struct _TEB *)__readgsqword(FIELD_OFFSET(NT_TIB, Self)); } #elif defined(_M_PPC) -extern __inline__ struct _TEB * NtCurrentTeb(void) +FORCEINLINE struct _TEB * NtCurrentTeb(void) { - return __readfsdword_winnt(0x18); + return (struct _TEB *)__readfsdword_winnt(0x18); } #else -extern __inline__ struct _TEB * NtCurrentTeb(void) -{ - return __readfsdword_winnt(0x18); -} +#error Unsupported architecture #endif -#elif defined(__WATCOMC__) - -extern PVOID GetCurrentFiber(void); -#pragma aux GetCurrentFiber = \ - "mov eax, dword ptr fs:0x10" \ - value [eax] \ - modify [eax]; - -extern struct _TEB * NtCurrentTeb(void); -#pragma aux NtCurrentTeb = \ - "mov eax, dword ptr fs:0x18" \ - value [eax] \ - modify [eax]; - -#elif defined(_MSC_VER) - -#if (_MSC_FULL_VER >= 13012035) - -__inline PVOID GetCurrentFiber(void) { return (PVOID)(ULONG_PTR)__readfsdword(0x10); } -__inline struct _TEB * NtCurrentTeb(void) { return (struct _TEB *)(ULONG_PTR)__readfsdword(0x18); } - -#else - -static __inline PVOID GetCurrentFiber(void) -{ - PVOID p; - __asm mov eax, fs:[10h] - __asm mov [p], eax - return p; -} - -static __inline struct _TEB * NtCurrentTeb(void) -{ - struct _TEB *p; - __asm mov eax, fs:[18h] - __asm mov [p], eax - return p; -} - -#endif /* _MSC_FULL_VER */ - -#endif /* __GNUC__/__WATCOMC__/_MSC_VER */ - #endif//_INLINE_NT_CURRENTTEB_H_ diff --git a/reactos/include/ndk/peb_teb.h b/reactos/include/ndk/peb_teb.h index ec4b2d33617..4f43d058234 100644 --- a/reactos/include/ndk/peb_teb.h +++ b/reactos/include/ndk/peb_teb.h @@ -12,7 +12,7 @@ #define PTR(x) x #endif -#if defined(_WIN64) && !defined(EXPLICIT_32BIT) +#if (defined(_WIN64) && !defined(EXPLICIT_32BIT)) || defined(EXPLICIT_64BIT) #define GDI_HANDLE_BUFFER_SIZE 60 #else #define GDI_HANDLE_BUFFER_SIZE 34 diff --git a/reactos/include/psdk/rpc.h b/reactos/include/psdk/rpc.h index de8aa7cfa29..800abf44fe2 100644 --- a/reactos/include/psdk/rpc.h +++ b/reactos/include/psdk/rpc.h @@ -1,17 +1,11 @@ #if !defined( RPC_NO_WINDOWS_H ) && !defined( MAC ) && !defined( _MAC ) -#if defined (_OLE32_) -#ifndef RC_INVOKED -#include -#endif -#include -#include -#else +#ifndef _INC_WINDOWS #include -#endif +#endif /* _INC_WINDOWS */ #endif -#ifdef __GNUC__ +#ifndef RC_INVOKED #include #endif diff --git a/reactos/include/psdk/strsafe.h b/reactos/include/psdk/strsafe.h index 7f09e1bd0fe..0f84a20dd77 100644 --- a/reactos/include/psdk/strsafe.h +++ b/reactos/include/psdk/strsafe.h @@ -1,6 +1,7 @@ #ifndef __STRSAFE_H_ #define __STRSAFE_H_ +#include #include #include @@ -238,7 +239,11 @@ STRSAFEAPI StringCxxVPrintfEx(STRSAFE_LPTSTR pszDest, size_t cxDest, STRSAFE_LPT #else // !STRSAFE_LIB /* Create inlined versions */ +#ifdef __GNUC__ #define STRSAFEAPI HRESULT static __inline__ +#else +#define STRSAFEAPI HRESULT __inline +#endif #define STRSAFE_MAX_CXX STRSAFE_CCHtoCXX(STRSAFE_MAX_CCH) @@ -496,7 +501,7 @@ StringCxxVPrintfEx( if (SUCCEEDED(hr)) { - if ((dwFlags & STRSAFE_FILL_BEHIND_NULL) && (iResult + 1 < cchMax)) + if ((dwFlags & STRSAFE_FILL_BEHIND_NULL) && ((size_t)iResult + 1 < cchMax)) { memset(pszDest + iResult + 1, dwFlags & 0xff, diff --git a/reactos/include/psdk/unknown.h b/reactos/include/psdk/unknown.h index 6fe27fc3658..8c0ea17a1ce 100644 --- a/reactos/include/psdk/unknown.h +++ b/reactos/include/psdk/unknown.h @@ -16,8 +16,8 @@ * */ -#ifndef __unknwn_h__ -#define __unknwn_h__ +#ifndef _UNKNOWN_H_ +#define _UNKNOWN_H_ #ifdef __cplusplus extern "C" { @@ -70,5 +70,5 @@ HRESULT IN POOL_TYPE PoolType ); -#endif +#endif /* _UNKNOWN_H_ */ diff --git a/reactos/include/psdk/wspiapi.h b/reactos/include/psdk/wspiapi.h index ea41ec8ab47..bbb01e10ee9 100644 --- a/reactos/include/psdk/wspiapi.h +++ b/reactos/include/psdk/wspiapi.h @@ -45,6 +45,12 @@ char (&__wspiapi_countof_helper(__CountofType (&_Array)[_N]))[_N]; #define getnameinfo WspiapiGetNameInfo #define freeaddrinfo WspiapiFreeAddrInfo +#if _MSC_VER +#define WSPIAPI_INLINE __inline +#else +#define WSPIAPI_INLINE static inline +#endif + typedef int (WINAPI *WSPIAPI_PGETADDRINFO)( IN const char *nodename, @@ -436,12 +442,12 @@ typedef struct { } WSPIAPI_FUNCTION; #define WSPIAPI_FUNCTION_ARRAY { \ - "getaddrinfo", (FARPROC) WspiapiLegacyGetAddrInfo, \ - "getnameinfo", (FARPROC) WspiapiLegacyGetNameInfo, \ - "freeaddrinfo", (FARPROC) WspiapiLegacyFreeAddrInfo, \ + {"getaddrinfo", (FARPROC) WspiapiLegacyGetAddrInfo}, \ + {"getnameinfo", (FARPROC) WspiapiLegacyGetNameInfo}, \ + {"freeaddrinfo", (FARPROC) WspiapiLegacyFreeAddrInfo} \ } -FORCEINLINE +WSPIAPI_INLINE FARPROC WINAPI WspiapiLoad( @@ -503,7 +509,7 @@ WspiapiLoad( return (rgtGlobal[wFunction].pfAddress); } -FORCEINLINE +WSPIAPI_INLINE int WINAPI WspiapiGetAddrInfo( @@ -522,7 +528,7 @@ WspiapiGetAddrInfo( return iError; } -FORCEINLINE +WSPIAPI_INLINE int WINAPI WspiapiGetNameInfo( @@ -544,7 +550,7 @@ WspiapiGetNameInfo( return iError; } -FORCEINLINE +WSPIAPI_INLINE void WINAPI WspiapiFreeAddrInfo( diff --git a/reactos/include/reactos/asm.h b/reactos/include/reactos/asm.h index 4a6f20b9f08..f617926d1b5 100644 --- a/reactos/include/reactos/asm.h +++ b/reactos/include/reactos/asm.h @@ -12,6 +12,7 @@ OPTION DOTNAME .586 +.XMM .MODEL FLAT ASSUME CS:NOTHING, DS:NOTHING, ES:NOTHING, FS:NOTHING, GS:NOTHING @@ -75,6 +76,10 @@ ENDM dd args ENDM +.double MACRO args:VARARG + dq args +ENDM + UNIMPLEMENTED MACRO name ENDM @@ -117,6 +122,10 @@ ENDM .global \symbol .endm +/* Dummy ASSUME */ +.macro ASSUME p1 p2 p3 p4 p5 p6 p7 p8 +.endm + /* MASM compatible ALIGN */ #define ALIGN .align diff --git a/reactos/include/reactos/mingw-w64/sect_attribs.h b/reactos/include/reactos/mingw-w64/sect_attribs.h index 6e59216dbde..4d1a24f2173 100644 --- a/reactos/include/reactos/mingw-w64/sect_attribs.h +++ b/reactos/include/reactos/mingw-w64/sect_attribs.h @@ -9,7 +9,7 @@ #if defined(_M_IA64) || defined(_M_AMD64) #define _ATTRIBUTES #else -#define _ATTRIBUTES shared +#define _ATTRIBUTES read #endif /* Reference list of existing section for msvcrt. */ diff --git a/reactos/include/xdk/kefuncs.h b/reactos/include/xdk/kefuncs.h index 27049e651ba..eb5c7a25c5e 100644 --- a/reactos/include/xdk/kefuncs.h +++ b/reactos/include/xdk/kefuncs.h @@ -208,7 +208,7 @@ KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock) #endif NTKERNELAPI -DECLSPEC_NORETURN +//DECLSPEC_NORETURN VOID NTAPI KeBugCheckEx( diff --git a/reactos/lib/drivers/ip/network/i386/checksum.S b/reactos/lib/drivers/ip/network/i386/checksum.S index 16a4e02ccec..219120debbc 100644 --- a/reactos/lib/drivers/ip/network/i386/checksum.S +++ b/reactos/lib/drivers/ip/network/i386/checksum.S @@ -24,109 +24,111 @@ * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. */ - + /* * computes a partial checksum, e.g. for TCP/UDP fragments */ -/* +/* unsigned int csum_partial(const unsigned char * buff, int len, unsigned int sum) */ - -.text + +#include + +.code .align 4 -.globl _csum_partial - +PUBLIC _csum_partial + #ifndef CONFIG_X86_USE_PPRO_CHECKSUM - /* + /* * Experiments with Ethernet and SLIP connections show that buff * is aligned on either a 2-byte or 4-byte boundary. We get at * least a twofold speedup on 486 and Pentium if it is 4-byte aligned. * Fortunately, it is easy to convert 2-byte alignment to 4-byte * alignment for the unrolled loop. - */ -_csum_partial: - pushl %esi - pushl %ebx - movl 20(%esp),%eax # Function arg: unsigned int sum - movl 16(%esp),%ecx # Function arg: int len - movl 12(%esp),%esi # Function arg: unsigned char *buff - testl $3, %esi # Check alignment. - jz 2f # Jump if alignment is ok. - testl $1, %esi # Check alignment. - jz 10f # Jump if alignment is boundary of 2bytes. + */ +_csum_partial: + push esi + push ebx + mov eax, [esp + 20] // Function arg: unsigned int sum + mov ecx, [esp + 16] // Function arg: int len + mov esi, [esp + 12] // Function arg: unsigned char *buff + test esi, 3 // Check alignment. + jz m2 // Jump if alignment is ok. + test esi, 1 // Check alignment. + jz l10 // Jump if alignment is boundary of 2bytes. // buf is odd - dec %ecx - jl 8f - movzbl (%esi), %ebx - adcl %ebx, %eax - roll $8, %eax - inc %esi - testl $2, %esi - jz 2f -10: - subl $2, %ecx # Alignment uses up two bytes. - jae 1f # Jump if we had at least two bytes. - addl $2, %ecx # ecx was < 2. Deal with it. - jmp 4f -1: movw (%esi), %bx - addl $2, %esi - addw %bx, %ax - adcl $0, %eax -2: - movl %ecx, %edx - shrl $5, %ecx - jz 2f - testl %esi, %esi -1: movl (%esi), %ebx - adcl %ebx, %eax - movl 4(%esi), %ebx - adcl %ebx, %eax - movl 8(%esi), %ebx - adcl %ebx, %eax - movl 12(%esi), %ebx - adcl %ebx, %eax - movl 16(%esi), %ebx - adcl %ebx, %eax - movl 20(%esi), %ebx - adcl %ebx, %eax - movl 24(%esi), %ebx - adcl %ebx, %eax - movl 28(%esi), %ebx - adcl %ebx, %eax - lea 32(%esi), %esi - dec %ecx - jne 1b - adcl $0, %eax -2: movl %edx, %ecx - andl $0x1c, %edx - je 4f - shrl $2, %edx # This clears CF -3: adcl (%esi), %eax - lea 4(%esi), %esi - dec %edx - jne 3b - adcl $0, %eax -4: andl $3, %ecx - jz 7f - cmpl $2, %ecx - jb 5f - movw (%esi),%cx - leal 2(%esi),%esi - je 6f - shll $16,%ecx -5: movb (%esi),%cl -6: addl %ecx,%eax - adcl $0, %eax -7: - testl $1, 12(%esp) - jz 8f - roll $8, %eax -8: - popl %ebx - popl %esi + dec ecx + jl l8 + movzx ebx, byte ptr [esi] + adc eax, ebx + rol eax, 8 + inc esi + test esi, 2 + jz m2 +l10: + sub ecx, 2 // Alignment uses up two bytes. + jae m1 // Jump if we had at least two bytes. + add ecx, 2 // ecx was < 2. Deal with it. + jmp l4 +m1: mov bx, [esi] + add esi, 2 + add ax, bx + adc eax, 0 +m2: + mov edx, ecx + shr ecx, 5 + jz l2 + test esi, esi +l1: mov ebx, [esi] + adc eax, ebx + mov ebx, [esi + 4] + adc eax, ebx + mov ebx, [esi + 8] + adc eax, ebx + mov ebx, [esi + 12] + adc eax, ebx + mov ebx, [esi + 16] + adc eax, ebx + mov ebx, [esi + 20] + adc eax, ebx + mov ebx, [esi + 24] + adc eax, ebx + mov ebx, [esi + 28] + adc eax, ebx + lea esi, [esi + 32] + dec ecx + jne l1 + adc eax, 0 +l2: mov ecx, edx + and edx, HEX(1c) + je l4 + shr edx, 2 // This clears CF +l3: adc eax, [esi] + lea esi, [esi + 4] + dec edx + jne l3 + adc eax, 0 +l4: and ecx, 3 + jz l7 + cmp ecx, 2 + jb l5 + mov cx, [esi] + lea esi, [esi + 2] + je l6 + shl ecx, 16 +l5: mov cl, [esi] +l6: add eax, ecx + adc eax, 0 +l7: + test dword ptr [esp + 12], 1 + jz l8 + rol eax, 8 +l8: + pop ebx + pop esi ret #else @@ -134,116 +136,118 @@ _csum_partial: /* Version for PentiumII/PPro */ csum_partial: - pushl %esi - pushl %ebx - movl 20(%esp),%eax # Function arg: unsigned int sum - movl 16(%esp),%ecx # Function arg: int len - movl 12(%esp),%esi # Function arg: const unsigned char *buf + push esi + push ebx + mov eax, [esp + 20] # Function arg: unsigned int sum + mov ecx, [esp + 16] # Function arg: int len + mov esi, [esp + 12] # Function arg: const unsigned char *buf - testl $3, %esi - jnz 25f -10: - movl %ecx, %edx - movl %ecx, %ebx - andl $0x7c, %ebx - shrl $7, %ecx - addl %ebx,%esi - shrl $2, %ebx - negl %ebx - lea 45f(%ebx,%ebx,2), %ebx - testl %esi, %esi - jmp *%ebx + test esi, 3 + jnz l25f +l10: + mov edx, ecx + mov ebx, ecx + and ebx, HEX(7c) + shr ecx, 7 + add esi, ebx + shr ebx, 2 + neg ebx + lea ebx, l45[ebx + ebx * 2] + test esi, esi + jmp dword ptr [ebx] - # Handle 2-byte-aligned regions -20: addw (%esi), %ax - lea 2(%esi), %esi - adcl $0, %eax - jmp 10b -25: - testl $1, %esi - jz 30f - # buf is odd - dec %ecx - jl 90f - movzbl (%esi), %ebx - addl %ebx, %eax - adcl $0, %eax - roll $8, %eax - inc %esi - testl $2, %esi - jz 10b + // Handle 2-byte-aligned regions +l20: add ax, [esi] + lea esi, [esi + 2] + adc eax, 0 + jmp l10b +l25: + test esi, 1 + jz l30f + // buf is odd + dec ecx + jl l90 + movzb ebx, [esi] + add eax, ebx + adc eax, 0 + rol eax, 8 + inc esi + test esi, 2 + jz l10b -30: subl $2, %ecx - ja 20b - je 32f - addl $2, %ecx - jz 80f - movzbl (%esi),%ebx # csumming 1 byte, 2-aligned - addl %ebx, %eax - adcl $0, %eax - jmp 80f -32: - addw (%esi), %ax # csumming 2 bytes, 2-aligned - adcl $0, %eax - jmp 80f +l30: sub ecx, 2 + ja l20 + je l32 + add ecx, 2 + jz l80 + movzb ebx, [esi] // csumming 1 byte, 2-aligned + add eax, ebx + adc eax, 0 + jmp l80 +l32: + add ax, [esi] // csumming 2 bytes, 2-aligned + adc eax, 0 + jmp l80 -40: - addl -128(%esi), %eax - adcl -124(%esi), %eax - adcl -120(%esi), %eax - adcl -116(%esi), %eax - adcl -112(%esi), %eax - adcl -108(%esi), %eax - adcl -104(%esi), %eax - adcl -100(%esi), %eax - adcl -96(%esi), %eax - adcl -92(%esi), %eax - adcl -88(%esi), %eax - adcl -84(%esi), %eax - adcl -80(%esi), %eax - adcl -76(%esi), %eax - adcl -72(%esi), %eax - adcl -68(%esi), %eax - adcl -64(%esi), %eax - adcl -60(%esi), %eax - adcl -56(%esi), %eax - adcl -52(%esi), %eax - adcl -48(%esi), %eax - adcl -44(%esi), %eax - adcl -40(%esi), %eax - adcl -36(%esi), %eax - adcl -32(%esi), %eax - adcl -28(%esi), %eax - adcl -24(%esi), %eax - adcl -20(%esi), %eax - adcl -16(%esi), %eax - adcl -12(%esi), %eax - adcl -8(%esi), %eax - adcl -4(%esi), %eax -45: - lea 128(%esi), %esi - adcl $0, %eax - dec %ecx - jge 40b - movl %edx, %ecx -50: andl $3, %ecx - jz 80f +l40: + add eax, [esi -128] + adc eax, [esi -124] + adc eax, [esi -120] + adc eax, [esi -116] + adc eax, [esi -112] + adc eax, [esi -108] + adc eax, [esi -104] + adc eax, [esi -100] + adc eax, [esi -96] + adc eax, [esi -92] + adc eax, [esi -88] + adc eax, [esi -84] + adc eax, [esi -80] + adc eax, [esi -76] + adc eax, [esi -72] + adc eax, [esi -68] + adc eax, [esi -64] + adc eax, [esi -60] + adc eax, [esi -56] + adc eax, [esi -52] + adc eax, [esi -48] + adc eax, [esi -44] + adc eax, [esi -40] + adc eax, [esi -36] + adc eax, [esi -32] + adc eax, [esi -28] + adc eax, [esi -24] + adc eax, [esi -20] + adc eax, [esi -16] + adc eax, [esi -12] + adc eax, [esi -8] + adc eax, [esi -4] +l45: + lea esi, [esi + 128] + adc eax, 0 + dec ecx + jge l40 + mov ecx, edx +l50: and ecx, 3 + jz l80 - # Handle the last 1-3 bytes without jumping - notl %ecx # 1->2, 2->1, 3->0, higher bits are masked - movl $0xffffff,%ebx # by the shll and shrl instructions - shll $3,%ecx - shrl %cl,%ebx - andl -128(%esi),%ebx # esi is 4-aligned so should be ok - addl %ebx,%eax - adcl $0,%eax -80: - testl $1, 12(%esp) - jz 90f - roll $8, %eax -90: - popl %ebx - popl %esi + // Handle the last 1-3 bytes without jumping + not ecx // 1->2, 2->1, 3->0, higher bits are masked + mov ebx, HEX(ffffff) // by the shll and shrl instructions + shl ecx, 3 + shr ebx, cl + and ebx, [esi -128] // esi is 4-aligned so should be ok + add eax, ebx + adc eax, 0 +l80: + test dword ptr [esp + 12], 1 + jz l90 + rol eax, 8 +l90: + pop ebx + pop esi ret - + #endif + +END diff --git a/reactos/ntoskrnl/include/internal/i386/intrin_i.h b/reactos/ntoskrnl/include/internal/i386/intrin_i.h index 6cb2a7cbf0a..3a2664ba5b4 100644 --- a/reactos/ntoskrnl/include/internal/i386/intrin_i.h +++ b/reactos/ntoskrnl/include/internal/i386/intrin_i.h @@ -144,6 +144,32 @@ __sgdt(OUT PVOID Descriptor) sgdt [eax] } } + +FORCEINLINE +VOID +__fxsave(OUT PFX_SAVE_AREA SaveArea) +{ + __asm mov eax, SaveArea + __asm fxsave [eax] +} + +FORCEINLINE +VOID +__fxrstor(IN PFX_SAVE_AREA SaveArea) +{ + __asm mov eax, SaveArea + __asm fxrstor [eax] +} + +FORCEINLINE +VOID +__fnsave(OUT PFLOATING_SAVE_AREA SaveArea) +{ + __asm mov eax, SaveArea + __asm fnsave [eax] + __asm wait; +} + #define Ke386GetGlobalDescriptorTable __sgdt FORCEINLINE @@ -268,6 +294,28 @@ Ke386SetGs(IN USHORT Value) __asm mov gs, ax; } +extern ULONG KeI386FxsrPresent; + +FORCEINLINE +VOID +Ke386SaveFpuState(IN PVOID SaveArea) +{ + if (KeI386FxsrPresent) + { + __fxsave(SaveArea); + } + else + { + __fnsave(SaveArea); + } +} + +#define Ke386FnSave __fnsave +#define Ke386FxSave __fxsave +// The name suggest, that the original author didn't understand what frstor means +#define Ke386FxStore __fxrstor + + #else #error Unknown compiler for inline assembler #endif diff --git a/reactos/ntoskrnl/ke/i386/cpu.c b/reactos/ntoskrnl/ke/i386/cpu.c index a8db4d5b5dd..2606297c1b4 100644 --- a/reactos/ntoskrnl/ke/i386/cpu.c +++ b/reactos/ntoskrnl/ke/i386/cpu.c @@ -109,7 +109,13 @@ RDMSR(IN ULONG Register) #define CX86_CCR1 0xc1 /* NSC/Cyrix CPU indexed register access macros */ -#define getCx86(reg) ({ WRITE_PORT_UCHAR((PUCHAR)(ULONG_PTR)0x22,(reg)); READ_PORT_UCHAR((PUCHAR)(ULONG_PTR)0x23); }) +static __inline +ULONG +getCx86(UCHAR reg) +{ + WRITE_PORT_UCHAR((PUCHAR)(ULONG_PTR)0x22, reg); + return READ_PORT_UCHAR((PUCHAR)(ULONG_PTR)0x23); +} #define setCx86(reg, data) do { \ WRITE_PORT_UCHAR((PUCHAR)(ULONG_PTR)0x22,(reg)); \ diff --git a/reactos/ntoskrnl/mm/ARM3/i386/init.c b/reactos/ntoskrnl/mm/ARM3/i386/init.c index 116271c6618..0f91b30ce67 100644 --- a/reactos/ntoskrnl/mm/ARM3/i386/init.c +++ b/reactos/ntoskrnl/mm/ARM3/i386/init.c @@ -18,15 +18,16 @@ /* GLOBALS ********************************************************************/ /* Template PTE and PDE for a kernel page */ -MMPTE ValidKernelPde = {.u.Hard.Valid = 1, .u.Hard.Write = 1, .u.Hard.Dirty = 1, .u.Hard.Accessed = 1}; -MMPTE ValidKernelPte = {.u.Hard.Valid = 1, .u.Hard.Write = 1, .u.Hard.Dirty = 1, .u.Hard.Accessed = 1}; +MMPTE ValidKernelPde = {{PTE_VALID|PTE_READWRITE|PTE_DIRTY|PTE_ACCESSED}}; +MMPTE ValidKernelPte = {{PTE_VALID|PTE_READWRITE|PTE_DIRTY|PTE_ACCESSED}}; /* Template PDE for a demand-zero page */ -MMPDE DemandZeroPde = {.u.Long = (MM_READWRITE << MM_PTE_SOFTWARE_PROTECTION_BITS)}; -MMPTE DemandZeroPte = {.u.Long = (MM_READWRITE << MM_PTE_SOFTWARE_PROTECTION_BITS)}; +MMPDE DemandZeroPde = {{MM_READWRITE << MM_PTE_SOFTWARE_PROTECTION_BITS}}; +MMPTE DemandZeroPte = {{MM_READWRITE << MM_PTE_SOFTWARE_PROTECTION_BITS}}; /* Template PTE for prototype page */ -MMPTE PrototypePte = {.u.Long = (MM_READWRITE << MM_PTE_SOFTWARE_PROTECTION_BITS) | PTE_PROTOTYPE | (MI_PTE_LOOKUP_NEEDED << PAGE_SHIFT)}; +MMPTE PrototypePte = {{(MM_READWRITE << MM_PTE_SOFTWARE_PROTECTION_BITS) | + PTE_PROTOTYPE | (MI_PTE_LOOKUP_NEEDED << PAGE_SHIFT)}}; /* PRIVATE FUNCTIONS **********************************************************/ diff --git a/reactos/ntoskrnl/mm/ARM3/miarm.h b/reactos/ntoskrnl/mm/ARM3/miarm.h index 4c17cd27973..7b24a18062d 100644 --- a/reactos/ntoskrnl/mm/ARM3/miarm.h +++ b/reactos/ntoskrnl/mm/ARM3/miarm.h @@ -128,6 +128,14 @@ C_ASSERT(SYSTEM_PD_SIZE == PAGE_SIZE); #define PTE_EXECUTE_READWRITE 0x2 // Not worrying about NX yet #define PTE_EXECUTE_WRITECOPY 0x200 #define PTE_PROTOTYPE 0x400 + +// +// State Flags +// +#define PTE_VALID 0x1 +#define PTE_ACCESSED 0x20 +#define PTE_DIRTY 0x40 + // // Cache flags // diff --git a/reactos/tools/unicode/string.c b/reactos/tools/unicode/string.c index d9f6144bb9a..c55a96f3669 100644 --- a/reactos/tools/unicode/string.c +++ b/reactos/tools/unicode/string.c @@ -21,7 +21,6 @@ #include #include #include -#include #define WINE_UNICODE_INLINE /* nothing */ #include "wine/unicode.h" @@ -465,7 +464,7 @@ int vsnprintfW(WCHAR *str, size_t len, const WCHAR *format, va_list valist) *fmta = '\0'; if (*iter == 'a' || *iter == 'A' || *iter == 'e' || *iter == 'E' || - *iter == 'f' || *iter == 'F' || + *iter == 'f' || *iter == 'F' || *iter == 'g' || *iter == 'G') sprintf(bufaiter, fmtbufa, va_arg(valist, double)); else diff --git a/reactos/tools/unicode/wine/unicode.h b/reactos/tools/unicode/wine/unicode.h index 7f64b3c5f78..3bd09a8995b 100644 --- a/reactos/tools/unicode/wine/unicode.h +++ b/reactos/tools/unicode/wine/unicode.h @@ -18,10 +18,11 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#ifndef __WINE_UNICODE_H -#define __WINE_UNICODE_H +#ifndef __WINE_WINE_UNICODE_H +#define __WINE_WINE_UNICODE_H #include +#include #include // Definitions copied from @@ -44,12 +45,24 @@ #define WC_NO_BEST_FIT_CHARS 1024 #define WC_ERR_INVALID_CHARS 0x0080 +#ifdef __WINE_WINE_TEST_H +#error This file should not be used in Wine tests +#endif + +#ifdef __cplusplus +extern "C" { +#endif + #ifndef WINE_UNICODE_API -#define WINE_UNICODE_API DECLSPEC_IMPORT +# if defined(_MSC_VER) || defined(__MINGW32__) +# define WINE_UNICODE_API DECLSPEC_IMPORT +# else +# define WINE_UNICODE_API +# endif #endif #ifndef WINE_UNICODE_INLINE -#define WINE_UNICODE_INLINE extern inline +#define WINE_UNICODE_INLINE static inline #endif /* code page info common to SBCS and DBCS */ @@ -117,20 +130,17 @@ extern int snprintfW( WCHAR *str, size_t len, const WCHAR *format, ... ); extern int vsprintfW( WCHAR *str, const WCHAR *format, va_list valist ); extern int vsnprintfW( WCHAR *str, size_t len, const WCHAR *format, va_list valist ); -WINE_UNICODE_INLINE int wine_is_dbcs_leadbyte( const union cptable *table, unsigned char ch ); WINE_UNICODE_INLINE int wine_is_dbcs_leadbyte( const union cptable *table, unsigned char ch ) { return (table->info.char_size == 2) && (table->dbcs.cp2uni_leadbytes[ch]); } -WINE_UNICODE_INLINE WCHAR tolowerW( WCHAR ch ); WINE_UNICODE_INLINE WCHAR tolowerW( WCHAR ch ) { extern WINE_UNICODE_API const WCHAR wine_casemap_lower[]; return ch + wine_casemap_lower[wine_casemap_lower[ch >> 8] + (ch & 0xff)]; } -WINE_UNICODE_INLINE WCHAR toupperW( WCHAR ch ); WINE_UNICODE_INLINE WCHAR toupperW( WCHAR ch ) { extern WINE_UNICODE_API const WCHAR wine_casemap_upper[]; @@ -139,74 +149,62 @@ WINE_UNICODE_INLINE WCHAR toupperW( WCHAR ch ) /* the character type contains the C1_* flags in the low 12 bits */ /* and the C2_* type in the high 4 bits */ -WINE_UNICODE_INLINE unsigned short get_char_typeW( WCHAR ch ); WINE_UNICODE_INLINE unsigned short get_char_typeW( WCHAR ch ) { extern WINE_UNICODE_API const unsigned short wine_wctype_table[]; return wine_wctype_table[wine_wctype_table[ch >> 8] + (ch & 0xff)]; } -WINE_UNICODE_INLINE int iscntrlW( WCHAR wc ); WINE_UNICODE_INLINE int iscntrlW( WCHAR wc ) { return get_char_typeW(wc) & C1_CNTRL; } -WINE_UNICODE_INLINE int ispunctW( WCHAR wc ); WINE_UNICODE_INLINE int ispunctW( WCHAR wc ) { return get_char_typeW(wc) & C1_PUNCT; } -WINE_UNICODE_INLINE int isspaceW( WCHAR wc ); WINE_UNICODE_INLINE int isspaceW( WCHAR wc ) { return get_char_typeW(wc) & C1_SPACE; } -WINE_UNICODE_INLINE int isdigitW( WCHAR wc ); WINE_UNICODE_INLINE int isdigitW( WCHAR wc ) { return get_char_typeW(wc) & C1_DIGIT; } -WINE_UNICODE_INLINE int isxdigitW( WCHAR wc ); WINE_UNICODE_INLINE int isxdigitW( WCHAR wc ) { return get_char_typeW(wc) & C1_XDIGIT; } -WINE_UNICODE_INLINE int islowerW( WCHAR wc ); WINE_UNICODE_INLINE int islowerW( WCHAR wc ) { return get_char_typeW(wc) & C1_LOWER; } -WINE_UNICODE_INLINE int isupperW( WCHAR wc ); WINE_UNICODE_INLINE int isupperW( WCHAR wc ) { return get_char_typeW(wc) & C1_UPPER; } -WINE_UNICODE_INLINE int isalnumW( WCHAR wc ); WINE_UNICODE_INLINE int isalnumW( WCHAR wc ) { return get_char_typeW(wc) & (C1_ALPHA|C1_DIGIT|C1_LOWER|C1_UPPER); } -WINE_UNICODE_INLINE int isalphaW( WCHAR wc ); WINE_UNICODE_INLINE int isalphaW( WCHAR wc ) { return get_char_typeW(wc) & (C1_ALPHA|C1_LOWER|C1_UPPER); } -WINE_UNICODE_INLINE int isgraphW( WCHAR wc ); WINE_UNICODE_INLINE int isgraphW( WCHAR wc ) { return get_char_typeW(wc) & (C1_ALPHA|C1_PUNCT|C1_DIGIT|C1_LOWER|C1_UPPER); } -WINE_UNICODE_INLINE int isprintW( WCHAR wc ); WINE_UNICODE_INLINE int isprintW( WCHAR wc ) { return get_char_typeW(wc) & (C1_ALPHA|C1_BLANK|C1_PUNCT|C1_DIGIT|C1_LOWER|C1_UPPER); @@ -214,15 +212,13 @@ WINE_UNICODE_INLINE int isprintW( WCHAR wc ) /* some useful string manipulation routines */ -WINE_UNICODE_INLINE unsigned int strlenW( const WCHAR *str ); WINE_UNICODE_INLINE unsigned int strlenW( const WCHAR *str ) { const WCHAR *s = str; while (*s) s++; - return s - str; + return (unsigned int)(s - str); } -WINE_UNICODE_INLINE WCHAR *strcpyW( WCHAR *dst, const WCHAR *src ); WINE_UNICODE_INLINE WCHAR *strcpyW( WCHAR *dst, const WCHAR *src ) { WCHAR *p = dst; @@ -233,14 +229,12 @@ WINE_UNICODE_INLINE WCHAR *strcpyW( WCHAR *dst, const WCHAR *src ) /* strncpy doesn't do what you think, don't use it */ #define strncpyW(d,s,n) error do_not_use_strncpyW_use_lstrcpynW_or_memcpy_instead -WINE_UNICODE_INLINE int strcmpW( const WCHAR *str1, const WCHAR *str2 ); WINE_UNICODE_INLINE int strcmpW( const WCHAR *str1, const WCHAR *str2 ) { while (*str1 && (*str1 == *str2)) { str1++; str2++; } return *str1 - *str2; } -WINE_UNICODE_INLINE int strncmpW( const WCHAR *str1, const WCHAR *str2, int n ); WINE_UNICODE_INLINE int strncmpW( const WCHAR *str1, const WCHAR *str2, int n ) { if (n <= 0) return 0; @@ -248,21 +242,18 @@ WINE_UNICODE_INLINE int strncmpW( const WCHAR *str1, const WCHAR *str2, int n ) return *str1 - *str2; } -WINE_UNICODE_INLINE WCHAR *strcatW( WCHAR *dst, const WCHAR *src ); WINE_UNICODE_INLINE WCHAR *strcatW( WCHAR *dst, const WCHAR *src ) { strcpyW( dst + strlenW(dst), src ); return dst; } -WINE_UNICODE_INLINE WCHAR *strchrW( const WCHAR *str, WCHAR ch ); WINE_UNICODE_INLINE WCHAR *strchrW( const WCHAR *str, WCHAR ch ) { do { if (*str == ch) return (WCHAR *)(ULONG_PTR)str; } while (*str++); return NULL; } -WINE_UNICODE_INLINE WCHAR *strrchrW( const WCHAR *str, WCHAR ch ); WINE_UNICODE_INLINE WCHAR *strrchrW( const WCHAR *str, WCHAR ch ) { WCHAR *ret = NULL; @@ -270,14 +261,12 @@ WINE_UNICODE_INLINE WCHAR *strrchrW( const WCHAR *str, WCHAR ch ) return ret; } -WINE_UNICODE_INLINE WCHAR *strpbrkW( const WCHAR *str, const WCHAR *accept ); WINE_UNICODE_INLINE WCHAR *strpbrkW( const WCHAR *str, const WCHAR *accept ) { for ( ; *str; str++) if (strchrW( accept, *str )) return (WCHAR *)(ULONG_PTR)str; return NULL; } -WINE_UNICODE_INLINE size_t strspnW( const WCHAR *str, const WCHAR *accept ); WINE_UNICODE_INLINE size_t strspnW( const WCHAR *str, const WCHAR *accept ) { const WCHAR *ptr; @@ -285,7 +274,6 @@ WINE_UNICODE_INLINE size_t strspnW( const WCHAR *str, const WCHAR *accept ) return ptr - str; } -WINE_UNICODE_INLINE size_t strcspnW( const WCHAR *str, const WCHAR *reject ); WINE_UNICODE_INLINE size_t strcspnW( const WCHAR *str, const WCHAR *reject ) { const WCHAR *ptr; @@ -293,7 +281,6 @@ WINE_UNICODE_INLINE size_t strcspnW( const WCHAR *str, const WCHAR *reject ) return ptr - str; } -WINE_UNICODE_INLINE WCHAR *strlwrW( WCHAR *str ); WINE_UNICODE_INLINE WCHAR *strlwrW( WCHAR *str ) { WCHAR *ret = str; @@ -301,7 +288,6 @@ WINE_UNICODE_INLINE WCHAR *strlwrW( WCHAR *str ) return ret; } -WINE_UNICODE_INLINE WCHAR *struprW( WCHAR *str ); WINE_UNICODE_INLINE WCHAR *struprW( WCHAR *str ) { WCHAR *ret = str; @@ -309,7 +295,6 @@ WINE_UNICODE_INLINE WCHAR *struprW( WCHAR *str ) return ret; } -WINE_UNICODE_INLINE WCHAR *memchrW( const WCHAR *ptr, WCHAR ch, size_t n ); WINE_UNICODE_INLINE WCHAR *memchrW( const WCHAR *ptr, WCHAR ch, size_t n ) { const WCHAR *end; @@ -317,7 +302,6 @@ WINE_UNICODE_INLINE WCHAR *memchrW( const WCHAR *ptr, WCHAR ch, size_t n ) return NULL; } -WINE_UNICODE_INLINE WCHAR *memrchrW( const WCHAR *ptr, WCHAR ch, size_t n ); WINE_UNICODE_INLINE WCHAR *memrchrW( const WCHAR *ptr, WCHAR ch, size_t n ) { const WCHAR *end; @@ -326,13 +310,11 @@ WINE_UNICODE_INLINE WCHAR *memrchrW( const WCHAR *ptr, WCHAR ch, size_t n ) return ret; } -WINE_UNICODE_INLINE long int atolW( const WCHAR *str ); WINE_UNICODE_INLINE long int atolW( const WCHAR *str ) { return strtolW( str, (WCHAR **)0, 10 ); } -WINE_UNICODE_INLINE int atoiW( const WCHAR *str ); WINE_UNICODE_INLINE int atoiW( const WCHAR *str ) { return (int)atolW( str ); @@ -340,4 +322,8 @@ WINE_UNICODE_INLINE int atoiW( const WCHAR *str ) #undef WINE_UNICODE_INLINE -#endif /* __WINE_UNICODE_H */ +#ifdef __cplusplus +} +#endif + +#endif /* __WINE_WINE_UNICODE_H */ From 2c1be143a4381939bbe3b80ebce2c24f919710dc Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 11 Feb 2011 17:01:40 +0000 Subject: [PATCH 020/287] merge most spec file changes from cmake branch svn path=/trunk/; revision=50657 --- reactos/dll/directx/msdmo/msdmo.spec | 8 +- reactos/dll/directx/msdmo/stubs.c | 32 ++++ reactos/dll/directx/quartz/quartz.spec | 3 +- reactos/dll/win32/activeds/activeds.spec | 44 ++--- reactos/dll/win32/activeds/stubs.c | 176 ++++++++++++++++++++ reactos/dll/win32/advapi32/advapi32.spec | 6 +- reactos/dll/win32/atl/atl.spec | 22 +-- reactos/dll/win32/atl/stubs.c | 127 +++++++++++++++ reactos/dll/win32/browseui/browseui.spec | 2 +- reactos/dll/win32/browseui/dllinstall.c | 11 ++ reactos/dll/win32/cabinet/cabinet.spec | 4 +- reactos/dll/win32/cabinet/stubs.c | 22 +++ reactos/dll/win32/comctl32/comctl32.spec | 8 +- reactos/dll/win32/comctl32/stubs.c | 41 +++++ reactos/dll/win32/cryptdll/cryptdll.spec | 22 +-- reactos/dll/win32/cryptdll/stubs.c | 71 ++++++++ reactos/dll/win32/dnsapi/dnsapi.spec | 198 +++++++++++------------ reactos/dll/win32/dnsapi/dnsapi/stubs.c | 7 + reactos/dll/win32/gdi32/gdi32.spec | 4 +- reactos/dll/win32/hid/hid.spec | 86 +++++----- reactos/dll/win32/iphlpapi/iphlpapi.spec | 24 +-- reactos/dll/win32/loadperf/loadperf.spec | 16 +- reactos/dll/win32/loadperf/stubs.c | 85 ++++++++++ reactos/dll/win32/mapi32/mapi32.spec | 42 ++--- reactos/dll/win32/mapi32/stubs.c | 116 +++++++++++++ reactos/dll/win32/mpr/mpr.spec | 38 ++--- reactos/dll/win32/msvcrt/msvcrt.spec | 90 +++++------ reactos/dll/win32/msvcrt/stubs.c | 83 ++++++++++ reactos/dll/win32/msxml3/msxml3.spec | 14 +- reactos/dll/win32/secur32/secur32.spec | 26 +-- reactos/dll/win32/secur32/stubs.c | 56 +++++++ reactos/dll/win32/security/security.spec | 56 +------ reactos/dll/win32/shdocvw/shdocvw.spec | 8 +- reactos/dll/win32/shlwapi/shlwapi.spec | 2 +- reactos/dll/win32/tapi32/tapi32.spec | 8 +- reactos/dll/win32/user32/misc/stubs.c | 91 +++++++++++ reactos/dll/win32/winmm/winmm.spec | 4 +- reactos/dll/win32/ws2_32/ws2_32.spec | 10 +- 38 files changed, 1271 insertions(+), 392 deletions(-) create mode 100644 reactos/dll/directx/msdmo/stubs.c create mode 100644 reactos/dll/win32/activeds/stubs.c create mode 100644 reactos/dll/win32/atl/stubs.c create mode 100644 reactos/dll/win32/browseui/dllinstall.c create mode 100644 reactos/dll/win32/cabinet/stubs.c create mode 100644 reactos/dll/win32/comctl32/stubs.c create mode 100644 reactos/dll/win32/cryptdll/stubs.c create mode 100644 reactos/dll/win32/loadperf/stubs.c create mode 100644 reactos/dll/win32/mapi32/stubs.c create mode 100644 reactos/dll/win32/msvcrt/stubs.c create mode 100644 reactos/dll/win32/secur32/stubs.c diff --git a/reactos/dll/directx/msdmo/msdmo.spec b/reactos/dll/directx/msdmo/msdmo.spec index 1b534d03df7..651c4440295 100644 --- a/reactos/dll/directx/msdmo/msdmo.spec +++ b/reactos/dll/directx/msdmo/msdmo.spec @@ -1,11 +1,11 @@ @ stdcall DMOEnum(ptr long long ptr long ptr ptr) @ stdcall DMOGetName(ptr wstr) @ stdcall DMOGetTypes(ptr long ptr ptr long ptr ptr) -@ stub DMOGuidToStrA -@ stub DMOGuidToStrW +@ stdcall DMOGuidToStrA(long long) +@ stdcall DMOGuidToStrW(long long) @ stdcall DMORegister(wstr ptr ptr long long ptr long ptr) -@ stub DMOStrToGuidA -@ stub DMOStrToGuidW +@ stdcall DMOStrToGuidA(long long) +@ stdcall DMOStrToGuidW(long long) @ stdcall DMOUnregister(ptr ptr) @ stdcall MoCopyMediaType(ptr ptr) @ stdcall MoCreateMediaType(ptr long) diff --git a/reactos/dll/directx/msdmo/stubs.c b/reactos/dll/directx/msdmo/stubs.c new file mode 100644 index 00000000000..dfafe7afd49 --- /dev/null +++ b/reactos/dll/directx/msdmo/stubs.c @@ -0,0 +1,32 @@ + +#include +#define NDEBUG +#include + +void +WINAPI +DMOGuidToStrA(DWORD Unknown1, DWORD Unknown2) +{ + UNIMPLEMENTED; +} + +void +WINAPI +DMOGuidToStrW(DWORD Unknown1, DWORD Unknown2) +{ + UNIMPLEMENTED; +} + +void +WINAPI +DMOStrToGuidA(DWORD Unknown1, DWORD Unknown2) +{ + UNIMPLEMENTED; +} + +void +WINAPI +DMOStrToGuidW(DWORD Unknown1, DWORD Unknown2) +{ + UNIMPLEMENTED; +} diff --git a/reactos/dll/directx/quartz/quartz.spec b/reactos/dll/directx/quartz/quartz.spec index 7c0e2acf409..a52d17b4cc2 100644 --- a/reactos/dll/directx/quartz/quartz.spec +++ b/reactos/dll/directx/quartz/quartz.spec @@ -6,4 +6,5 @@ @ stdcall -private DllGetClassObject(ptr ptr ptr) @ stdcall -private DllRegisterServer() @ stdcall -private DllUnregisterServer() -@ stub GetProxyDllInfo +@ stdcall GetProxyDllInfo(ptr ptr) + diff --git a/reactos/dll/win32/activeds/activeds.spec b/reactos/dll/win32/activeds/activeds.spec index 2b458342493..2b79ca3d8b1 100644 --- a/reactos/dll/win32/activeds/activeds.spec +++ b/reactos/dll/win32/activeds/activeds.spec @@ -1,28 +1,28 @@ 3 stdcall ADsGetObject(wstr ptr ptr) 4 stdcall ADsBuildEnumerator(ptr ptr) -5 stub ADsFreeEnumerator +5 stdcall ADsFreeEnumerator(ptr) 6 stdcall ADsEnumerateNext(ptr long ptr ptr) -7 stub ADsBuildVarArrayStr -8 stub ADsBuildVarArrayInt +7 stdcall ADsBuildVarArrayStr(ptr long ptr) +8 stdcall ADsBuildVarArrayInt(ptr long ptr) 9 stdcall ADsOpenObject(wstr wstr wstr long ptr ptr) -12 stub ADsSetLastError +12 stdcall ADsSetLastError(long str str) 13 stdcall ADsGetLastError(ptr ptr long ptr long) -14 stub AllocADsMem +14 stdcall AllocADsMem(long) 15 stdcall FreeADsMem(ptr) -16 stub ReallocADsMem -17 stub AllocADsStr -18 stub FreeADsStr -19 stub ReallocADsStr -20 stub ADsEncodeBinaryData -21 stub PropVariantToAdsType -22 stub AdsTypeToPropVariant -23 stub AdsFreeAdsValues -24 stub ADsDecodeBinaryData -25 stub AdsTypeToPropVariant2 -26 stub PropVariantToAdsType2 -27 stub ConvertSecDescriptorToVariant -28 stub ConvertSecurityDescriptorToSecDes -#@ stub DllCanUnloadNow -#@ stub DllGetClassObject -#@ stub DllRegisterServer -#@ stub DllUnregisterServer +16 stdcall ReallocADsMem(ptr long long) +17 stdcall AllocADsStr(ptr) +18 stdcall FreeADsStr(ptr) +19 stdcall ReallocADsStr(ptr ptr) +20 stdcall ADsEncodeBinaryData(ptr long ptr) +21 stdcall PropVariantToAdsType(ptr long ptr ptr) +22 stdcall AdsTypeToPropVariant(ptr long ptr) +23 stdcall AdsFreeAdsValues(ptr long) +24 stdcall ADsDecodeBinaryData(wstr ptr long) +25 cdecl AdsTypeToPropVariant2() # unknown prototype +26 cdecl PropVariantToAdsType2() # unknown prototype +27 cdecl ConvertSecDescriptorToVariant() # unknown prototype +28 cdecl ConvertSecurityDescriptorToSecDes() # unknown prototype +#@ stdcall -private DllCanUnloadNow() +#@ stdcall -private DllGetClassObject(ptr ptr ptr) +#@ stdcall -private DllRegisterServer() +#@ stdcall -private DllUnregisterServer() diff --git a/reactos/dll/win32/activeds/stubs.c b/reactos/dll/win32/activeds/stubs.c new file mode 100644 index 00000000000..fbcb1148add --- /dev/null +++ b/reactos/dll/win32/activeds/stubs.c @@ -0,0 +1,176 @@ +#include +#include +#include + +// FIXME: should go to iads.h +typedef struct _adsvalue *PADSVALUE; + +HRESULT +WINAPI +ADsFreeEnumerator( + IN IEnumVARIANT *pEnumVariant) +{ + UNIMPLEMENTED; + return E_NOTIMPL; +} + +HRESULT +WINAPI +ADsBuildVarArrayStr( + LPWSTR *lppPathNames, + DWORD dwPathNames, + VARIANT *pVar) +{ + UNIMPLEMENTED; + return E_NOTIMPL; +} + +HRESULT +WINAPI +ADsBuildVarArrayInt( + LPDWORD lpdwObjectTypes, + DWORD dwObjectTypes, + VARIANT *pVar) +{ + UNIMPLEMENTED; + return E_NOTIMPL; +} + +VOID +WINAPI +ADsSetLastError( + IN DWORD dwErr, + IN LPCWSTR pszError, + IN LPCWSTR pszProvider) + +{ + UNIMPLEMENTED; +} + +LPVOID +WINAPI +AllocADsMem(DWORD cb) +{ + UNIMPLEMENTED; + return NULL; +} + +LPVOID +WINAPI +ReallocADsMem( + LPVOID pOldMem, + DWORD cbOld, + DWORD cbNew) +{ + UNIMPLEMENTED; + return NULL; +} + +LPWSTR +WINAPI +AllocADsStr(LPCWSTR pStr) +{ + UNIMPLEMENTED; + return NULL; +} + +BOOL +WINAPI +FreeADsStr(IN LPWSTR pStr) +{ + UNIMPLEMENTED; + return FALSE; +} + +BOOL +WINAPI +ReallocADsStr( + IN OUT LPWSTR *ppStr, + IN LPWSTR pStr) +{ + UNIMPLEMENTED; + return FALSE; +} + +HRESULT +WINAPI +ADsEncodeBinaryData( + PBYTE pbSrcData, + DWORD dwSrcLen, + OUT LPWSTR *ppszDestData) +{ + UNIMPLEMENTED; + return E_NOTIMPL; +} + +HRESULT +WINAPI +PropVariantToAdsType( + VARIANT * pVariant, + DWORD dwNumVariant, + PADSVALUE *ppAdsValues, + PDWORD pdwNumValues) +{ + UNIMPLEMENTED; + return E_NOTIMPL; +} + +HRESULT +WINAPI +AdsTypeToPropVariant( + PADSVALUE pAdsValues, + DWORD dwNumValues, + VARIANT * pVariant) +{ + UNIMPLEMENTED; + return E_NOTIMPL; +} + +void +WINAPI +AdsFreeAdsValues( + PADSVALUE pAdsValues, + DWORD dwNumValues) +{ + UNIMPLEMENTED; +} + +HRESULT +WINAPI +ADsDecodeBinaryData( + LPCWSTR szSrcData, + PBYTE *ppbDestData, + ULONG *pdwDestLen) +{ + UNIMPLEMENTED; + return E_NOTIMPL; +} + +int AdsTypeToPropVariant2() +{ + DPRINT1("WARNING: calling stub AdsTypeToPropVariant2()\n"); + __wine_spec_unimplemented_stub("activeds.dll", __FUNCTION__); + return 0; +} + +int PropVariantToAdsType2() +{ + DPRINT1("WARNING: calling stub PropVariantToAdsType2()\n"); + __wine_spec_unimplemented_stub("activeds.dll", __FUNCTION__); + return 0; +} + +int ConvertSecDescriptorToVariant() +{ + DPRINT1("WARNING: calling stub ConvertSecDescriptorToVariant()\n"); + __wine_spec_unimplemented_stub("activeds.dll", __FUNCTION__); + return 0; +} + +int ConvertSecurityDescriptorToSecDes() +{ + DPRINT1("WARNING: calling stub ConvertSecurityDescriptorToSecDes()\n"); + __wine_spec_unimplemented_stub("activeds.dll", __FUNCTION__); + return 0; +} + diff --git a/reactos/dll/win32/advapi32/advapi32.spec b/reactos/dll/win32/advapi32/advapi32.spec index 810c1ab4754..249028013b2 100644 --- a/reactos/dll/win32/advapi32/advapi32.spec +++ b/reactos/dll/win32/advapi32/advapi32.spec @@ -383,8 +383,8 @@ @ stub LsaOpenSecret @ stub LsaOpenTrustedDomain @ stdcall LsaOpenTrustedDomainByName(ptr ptr long ptr) -@ stub LsaQueryDomainInformationPolicy -@ stub LsaQueryForestTrustInformation +@ stdcall LsaQueryDomainInformationPolicy(ptr long ptr) +@ stdcall LsaQueryForestTrustInformation(ptr ptr ptr) @ stdcall LsaQueryInfoTrustedDomain(long long long) @ stdcall LsaQueryInformationPolicy(ptr long ptr) @ stub LsaQuerySecret @@ -396,7 +396,7 @@ @ stub LsaRemovePrivilegesFromAccount @ stdcall LsaRetrievePrivateData(ptr ptr ptr) @ stdcall LsaSetDomainInformationPolicy(ptr long ptr) -@ stub LsaSetForestTrustInformation +@ stdcall LsaSetForestTrustInformation(ptr ptr ptr long ptr) @ stdcall LsaSetInformationPolicy(long long ptr) @ stub LsaSetInformationTrustedDomain @ stub LsaSetQuotasForAccount diff --git a/reactos/dll/win32/atl/atl.spec b/reactos/dll/win32/atl/atl.spec index 1a0966dea25..08b1bccce67 100644 --- a/reactos/dll/win32/atl/atl.spec +++ b/reactos/dll/win32/atl/atl.spec @@ -16,18 +16,18 @@ 21 stdcall AtlModuleTerm(ptr) 22 stdcall AtlModuleUnregisterServer(ptr ptr) 23 stdcall AtlModuleUpdateRegistryFromResourceD(ptr wstr long ptr ptr) -24 stub AtlWaitWithMessageLoop -25 stub AtlSetErrorInfo +24 stdcall AtlWaitWithMessageLoop(ptr) +25 stdcall AtlSetErrorInfo(ptr ptr long ptr ptr ptr ptr) 26 stdcall AtlCreateTargetDC(long ptr) 27 stdcall AtlHiMetricToPixel(ptr ptr) 28 stdcall AtlPixelToHiMetric(ptr ptr) -29 stub AtlDevModeW2A +29 stdcall AtlDevModeW2A(ptr ptr) 30 stdcall AtlComPtrAssign(ptr ptr) 31 stdcall AtlComQIPtrAssign(ptr ptr ptr) 32 stdcall AtlInternalQueryInterface(ptr ptr ptr ptr) -34 stub AtlGetVersion -35 stub AtlAxDialogBoxW -36 stub AtlAxDialogBoxA +34 stdcall AtlGetVersion(ptr) +35 stdcall AtlAxDialogBoxW(ptr wstr ptr ptr ptr) +36 stdcall AtlAxDialogBoxA(ptr str ptr ptr ptr) 37 stdcall AtlAxCreateDialogW(long wstr long ptr long) 38 stdcall AtlAxCreateDialogA(long str long ptr long) 39 stdcall AtlAxCreateControl(ptr ptr ptr ptr) @@ -40,13 +40,13 @@ 46 stdcall AtlModuleRegisterWndClassInfoA(ptr ptr ptr) 47 stdcall AtlAxGetControl(long ptr) 48 stdcall AtlAxGetHost(long ptr) -49 stub AtlRegisterClassCategoriesHelper +49 stdcall AtlRegisterClassCategoriesHelper(ptr ptr long) 50 stdcall AtlIPersistStreamInit_Load(ptr ptr ptr ptr) 51 stdcall AtlIPersistStreamInit_Save(ptr long ptr ptr ptr) -52 stub AtlIPersistPropertyBag_Load -53 stub AtlIPersistPropertyBag_Save -54 stub AtlGetObjectSourceInterface -55 stub AtlModuleUnRegisterTypeLib +52 stdcall AtlIPersistPropertyBag_Load(ptr ptr ptr ptr ptr) +53 stdcall AtlIPersistPropertyBag_Save(ptr long long ptr ptr ptr) +54 stdcall AtlGetObjectSourceInterface(ptr ptr ptr ptr ptr) +55 stdcall AtlModuleUnregisterTypeLib(ptr str) 56 stdcall AtlModuleLoadTypeLib(ptr wstr ptr ptr) 57 stdcall AtlModuleUnregisterServerEx(ptr long ptr) 58 stdcall AtlModuleAddTermFunc(ptr ptr long) diff --git a/reactos/dll/win32/atl/stubs.c b/reactos/dll/win32/atl/stubs.c new file mode 100644 index 00000000000..a35e3dc6508 --- /dev/null +++ b/reactos/dll/win32/atl/stubs.c @@ -0,0 +1,127 @@ +#include +#include + +#define ATLAPI_(x) x WINAPI +#define ATLAPI ATLAPI_(HRESULT) + +struct _ATL_CATMAP_ENTRY; +typedef struct _ATL_PROPMAP_ENTRY ATL_PROPMAP_ENTRY; +typedef struct _ATL_MODULE _ATL_MODULE; + +BOOL +WINAPI +AtlWaitWithMessageLoop( + HANDLE hEvent) +{ + UNIMPLEMENTED; + return FALSE; +} + +ATLAPI +AtlSetErrorInfo( + const CLSID *pclsid, + LPCOLESTR lpszDesc, + DWORD dwHelpID, + LPCOLESTR lpszHelpFile, + const IID *piid, + HRESULT hRes, + HINSTANCE hInst) +{ + UNIMPLEMENTED; + return E_NOTIMPL; +} + +ATLAPI_(LPDEVMODEA) +AtlDevModeW2A(LPDEVMODEA lpDevModeA, LPDEVMODEW lpDevModeW) +{ + UNIMPLEMENTED; + return NULL; +} + +ATLAPI_(DWORD) +AtlGetVersion(void* pReserved) +{ + UNIMPLEMENTED; + return 0; +} + +ATLAPI_(int) +AtlAxDialogBoxW( + HINSTANCE hInstance, + LPCWSTR lpTemplateName, + HWND hWndParent, + DLGPROC lpDialogProc, + LPARAM dwInitParam) +{ + UNIMPLEMENTED; + return 0; +} + +ATLAPI_(int) +AtlAxDialogBoxA( + HINSTANCE hInstance, + LPCSTR lpTemplateName, + HWND hWndParent, + DLGPROC lpDialogProc, + LPARAM dwInitParam) +{ + UNIMPLEMENTED; + return 0; +} + +ATLAPI_(int) +AtlRegisterClassCategoriesHelper( + const CLSID *pclsid, + const struct _ATL_CATMAP_ENTRY* pEntry, + BOOL arg3) +{ + UNIMPLEMENTED; + return 0; +} + +ATLAPI +AtlIPersistPropertyBag_Load( + LPPROPERTYBAG pPropBag, + LPERRORLOG pErrorLog, + const ATL_PROPMAP_ENTRY* pMap, + void* pThis, + IUnknown* pUnk) +{ + UNIMPLEMENTED; + return E_NOTIMPL; +} + +ATLAPI +AtlIPersistPropertyBag_Save( + LPPROPERTYBAG pPropBag, + BOOL fClearDirty, + BOOL fSaveAllProperties, + const ATL_PROPMAP_ENTRY* pMap, + void* pThis, + IUnknown* pUnk) +{ + UNIMPLEMENTED; + return E_NOTIMPL; +} + +ATLAPI +AtlGetObjectSourceInterface( + IUnknown* punkObj, + GUID* plibid, + IID* piid, + unsigned short* pdwMajor, + unsigned short* pdwMinor) +{ + UNIMPLEMENTED; + return E_NOTIMPL; +} + +ATLAPI +AtlModuleUnregisterTypeLib( + _ATL_MODULE* pM, + LPCOLESTR lpszIndex) +{ + UNIMPLEMENTED; + return E_NOTIMPL; +} + diff --git a/reactos/dll/win32/browseui/browseui.spec b/reactos/dll/win32/browseui/browseui.spec index 74c5e332f2b..005e7bc7063 100644 --- a/reactos/dll/win32/browseui/browseui.spec +++ b/reactos/dll/win32/browseui/browseui.spec @@ -1,7 +1,7 @@ @ stdcall -private DllCanUnloadNow() @ stdcall -private DllGetClassObject(ptr ptr ptr) @ stdcall -private DllGetVersion(ptr) -@ stub DllInstall +@ stdcall DllInstall(long wstr) @ stdcall -private DllRegisterServer() @ stdcall -private DllUnregisterServer() 101 stdcall -noname InitOCHostClass(long) diff --git a/reactos/dll/win32/browseui/dllinstall.c b/reactos/dll/win32/browseui/dllinstall.c new file mode 100644 index 00000000000..7d9bfeed362 --- /dev/null +++ b/reactos/dll/win32/browseui/dllinstall.c @@ -0,0 +1,11 @@ +#include + +HRESULT +WINAPI +DllInstall( + BOOL bInstall, + PCWSTR pszCmdLine) +{ + return S_OK; +} + diff --git a/reactos/dll/win32/cabinet/cabinet.spec b/reactos/dll/win32/cabinet/cabinet.spec index 96127cfc429..00b6cb4c30a 100644 --- a/reactos/dll/win32/cabinet/cabinet.spec +++ b/reactos/dll/win32/cabinet/cabinet.spec @@ -1,7 +1,7 @@ -1 stub GetDllVersion +1 stdcall -private GetDllVersion() 2 stdcall -private DllGetVersion (ptr) 3 stdcall Extract(ptr str) -4 stub DeleteExtractedFiles +4 stdcall -private DeleteExtractedFiles(ptr) 10 cdecl FCICreate(ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr) 11 cdecl FCIAddFile(long ptr ptr long ptr ptr ptr long) 12 cdecl FCIFlushFolder(long ptr ptr) diff --git a/reactos/dll/win32/cabinet/stubs.c b/reactos/dll/win32/cabinet/stubs.c new file mode 100644 index 00000000000..d57a544020d --- /dev/null +++ b/reactos/dll/win32/cabinet/stubs.c @@ -0,0 +1,22 @@ +#include +#include + +typedef PVOID PSESSION; + +VOID +WINAPI +DeleteExtractedFiles( + PSESSION ps) +{ + UNIMPLEMENTED; +} + + +LPCSTR +WINAPI +GetDllVersion(void) +{ + /* This is what it returns on Windows XP SP3 */ + return "5.1.2600.5512"; +} + diff --git a/reactos/dll/win32/comctl32/comctl32.spec b/reactos/dll/win32/comctl32/comctl32.spec index c2c76a3774b..60378c28513 100644 --- a/reactos/dll/win32/comctl32/comctl32.spec +++ b/reactos/dll/win32/comctl32/comctl32.spec @@ -30,8 +30,8 @@ 155 stdcall -noname FindMRUStringA(long str ptr) 156 stdcall -noname DelMRUString(long long) 157 stdcall -noname CreateMRUListLazyA(ptr long long long) -163 stub -noname CreatePage -164 stub -noname CreateProxyPage +163 stdcall -noname CreatePage(long ptr) +164 stdcall -noname CreateProxyPage(long long) 167 stdcall -noname AddMRUData(long ptr long) 169 stdcall -noname FindMRUData(long ptr long ptr) 233 stdcall -noname Str_GetPtrA(str str long) @@ -88,13 +88,13 @@ 376 stdcall -noname IntlStrEqWorkerA(long str str long) 377 stdcall -noname IntlStrEqWorkerW(long wstr wstr long) 382 stdcall -noname SmoothScrollWindow(ptr) -383 stub -noname DoReaderMode +383 stdcall -noname DoReaderMode(ptr) 384 stdcall -noname SetPathWordBreakProc(ptr long) 385 stdcall -noname DPA_EnumCallback(long long long) 386 stdcall -noname DPA_DestroyCallback(ptr ptr long) 387 stdcall -noname DSA_EnumCallback(ptr ptr long) 388 stdcall -noname DSA_DestroyCallback(ptr ptr long) -389 stub -noname SHGetProcessDword +389 stdcall -noname comctl32_389(long long) 390 stdcall -noname ImageList_SetColorTable(ptr long long ptr) 400 stdcall -noname CreateMRUListW(ptr) 401 stdcall -noname AddMRUStringW(long wstr) diff --git a/reactos/dll/win32/comctl32/stubs.c b/reactos/dll/win32/comctl32/stubs.c new file mode 100644 index 00000000000..31ea57a019c --- /dev/null +++ b/reactos/dll/win32/comctl32/stubs.c @@ -0,0 +1,41 @@ +#include +#include + +typedef PVOID PREADERMODEINFO; + +HWND +WINAPI +CreatePage( + DWORD dwInitParam, + HWND hWndParent) +{ + UNIMPLEMENTED; + return NULL; +} + +HWND +WINAPI +CreateProxyPage( + DWORD dwUnknown1, + DWORD dwUnknown2) +{ + UNIMPLEMENTED; + return NULL; +} + +VOID +WINAPI +DoReaderMode( + PREADERMODEINFO prmi) +{ + UNIMPLEMENTED; +} + +VOID +WINAPI +comctl32_389( + DWORD dwUnknown1, + DWORD dwUnknown2) +{ + UNIMPLEMENTED; +} diff --git a/reactos/dll/win32/cryptdll/cryptdll.spec b/reactos/dll/win32/cryptdll/cryptdll.spec index 27b336cc992..ecbece5c28c 100644 --- a/reactos/dll/win32/cryptdll/cryptdll.spec +++ b/reactos/dll/win32/cryptdll/cryptdll.spec @@ -1,14 +1,14 @@ -@ stub CDBuildIntegrityVect -@ stub CDBuildVect -@ stub CDFindCommonCSystem -@ stub CDFindCommonCSystemWithKey -@ stub CDGenerateRandomBits -@ stub CDLocateCSystem -@ stub CDLocateCheckSum -@ stub CDLocateRng -@ stub CDRegisterCSystem -@ stub CDRegisterCheckSum -@ stub CDRegisterRng +@ stdcall CDBuildIntegrityVect(long long) +@ stdcall CDBuildVect(long long) +@ stdcall CDFindCommonCSystem(long long long) +@ stdcall CDFindCommonCSystemWithKey(long long long long long) +@ stdcall CDGenerateRandomBits(long long) +@ stdcall CDLocateCSystem(long long) +@ stdcall CDLocateCheckSum(long long) +@ stdcall CDLocateRng(long long) +@ stdcall CDRegisterCSystem(long) +@ stdcall CDRegisterCheckSum(long) +@ stdcall CDRegisterRng(long) @ stdcall MD5Final(ptr) advapi32.MD5Final @ stdcall MD5Init(ptr) advapi32.MD5Init @ stdcall MD5Update(ptr ptr long) advapi32.MD5Update diff --git a/reactos/dll/win32/cryptdll/stubs.c b/reactos/dll/win32/cryptdll/stubs.c new file mode 100644 index 00000000000..230ce09d74c --- /dev/null +++ b/reactos/dll/win32/cryptdll/stubs.c @@ -0,0 +1,71 @@ + +#include +#define NDEBUG +#include + +void WINAPI +CDBuildIntegrityVect(DWORD Unknown1, DWORD Unknown2) +{ + UNIMPLEMENTED; +} + +void WINAPI +CDBuildVect(DWORD Unknown1, DWORD Unknown2) +{ + UNIMPLEMENTED; +} + +void WINAPI +CDFindCommonCSystem(DWORD Unknown1, DWORD Unknown2, DWORD Unknown3) +{ + UNIMPLEMENTED; +} + +void WINAPI +CDFindCommonCSystemWithKey(DWORD Unknown1, DWORD Unknown2, DWORD Unknown3, DWORD Unknown4, DWORD Unknown5) +{ + UNIMPLEMENTED; +} + +void WINAPI +CDGenerateRandomBits(DWORD Unknown1, DWORD Unknown2) +{ + UNIMPLEMENTED; +} + +void WINAPI +CDLocateCSystem(DWORD Unknown1, DWORD Unknown2) +{ + UNIMPLEMENTED; +} + +void WINAPI +CDLocateCheckSum(DWORD Unknown1, DWORD Unknown2) +{ + UNIMPLEMENTED; +} + +void WINAPI +CDLocateRng(DWORD Unknown1, DWORD Unknown2) +{ + UNIMPLEMENTED; +} + +void WINAPI +CDRegisterCSystem(DWORD Unknown1) +{ + UNIMPLEMENTED; +} + +void WINAPI +CDRegisterCheckSum(DWORD Unknown1) +{ + UNIMPLEMENTED; +} + +void WINAPI +CDRegisterRng(DWORD Unknown1) +{ + UNIMPLEMENTED; +} + diff --git a/reactos/dll/win32/dnsapi/dnsapi.spec b/reactos/dll/win32/dnsapi/dnsapi.spec index 4c739916a5b..00727b1103a 100644 --- a/reactos/dll/win32/dnsapi/dnsapi.spec +++ b/reactos/dll/win32/dnsapi/dnsapi.spec @@ -1,132 +1,132 @@ @ stdcall DnsAcquireContextHandle_A(long ptr ptr) @ stdcall DnsAcquireContextHandle_UTF8(long ptr ptr) @ stdcall DnsAcquireContextHandle_W(long ptr ptr) -@ stub DnsAddRecordSet_A -@ stub DnsAddRecordSet_UTF8 -@ stub DnsAddRecordSet_W -@ stub DnsAllocateRecord -@ stub DnsApiHeapReset +@ stdcall DnsAddRecordSet_A() +@ stdcall DnsAddRecordSet_UTF8() +@ stdcall DnsAddRecordSet_W() +@ stdcall DnsAllocateRecord() +@ stdcall DnsApiHeapReset() @ stdcall DnsApiAlloc(long) @ stdcall DnsApiFree(ptr) -@ stub DnsAsyncRegisterHostAddrs_A -@ stub DnsAsyncRegisterHostAddrs_UTF8 -@ stub DnsAsyncRegisterHostAddrs_W -@ stub DnsAsyncRegisterInit -@ stub DnsAsyncRegisterTerm -@ stub DnsCheckNameCollision_A -@ stub DnsCheckNameCollision_UTF8 -@ stub DnsCheckNameCollision_W -@ stub DnsCopyStringEx -@ stub DnsCreateReverseNameStringForIpAddress -@ stub DnsCreateStandardDnsNameCopy -@ stub DnsCreateStringCopy -@ stub DnsDhcpSrvRegisterHostName_W -@ stub DnsDhcpSrvRegisterInit -@ stub DnsDhcpSrvRegisterTerm -@ stub DnsDisableAdapterDomainNameRegistration -@ stub DnsDisableBNodeResolverThread -@ stub DnsDisableDynamicRegistration -@ stub DnsDowncaseDnsNameLabel -@ stub DnsEnableAdapterDomainNameRegistration -@ stub DnsEnableBNodeResolverThread -@ stub DnsEnableDynamicRegistration +@ stdcall DnsAsyncRegisterHostAddrs_A() +@ stdcall DnsAsyncRegisterHostAddrs_UTF8() +@ stdcall DnsAsyncRegisterHostAddrs_W() +@ stdcall DnsAsyncRegisterInit() +@ stdcall DnsAsyncRegisterTerm() +@ stdcall DnsCheckNameCollision_A() +@ stdcall DnsCheckNameCollision_UTF8() +@ stdcall DnsCheckNameCollision_W() +@ stdcall DnsCopyStringEx() +@ stdcall DnsCreateReverseNameStringForIpAddress() +@ stdcall DnsCreateStandardDnsNameCopy() +@ stdcall DnsCreateStringCopy() +@ stdcall DnsDhcpSrvRegisterHostName_W() +@ stdcall DnsDhcpSrvRegisterInit() +@ stdcall DnsDhcpSrvRegisterTerm() +@ stdcall DnsDisableAdapterDomainNameRegistration() +@ stdcall DnsDisableBNodeResolverThread() +@ stdcall DnsDisableDynamicRegistration() +@ stdcall DnsDowncaseDnsNameLabel() +@ stdcall DnsEnableAdapterDomainNameRegistration() +@ stdcall DnsEnableBNodeResolverThread() +@ stdcall DnsEnableDynamicRegistration() @ stdcall DnsExtractRecordsFromMessage_UTF8(ptr long ptr) @ stdcall DnsExtractRecordsFromMessage_W(ptr long ptr) -@ stub DnsFindAuthoritativeZone +@ stdcall DnsFindAuthoritativeZone() @ stdcall DnsFlushResolverCache() -@ stub DnsFlushResolverCacheEntry_A -@ stub DnsFlushResolverCacheEntry_UTF8 -@ stub DnsFlushResolverCacheEntry_W -@ stub DnsFreeAdapterInformation -@ stub DnsFreeNetworkInformation -@ stub DnsFreeSearchInformation -@ stub DnsGetBufferLengthForStringCopy -@ stub DnsGetCacheDataTable -@ stub DnsGetDnsServerList -@ stub DnsGetDomainName -@ stub DnsGetHostName_A -@ stub DnsGetHostName_UTF8 -@ stub DnsGetHostName_W -@ stub DnsGetIpAddressInfoList -@ stub DnsGetIpAddressList -@ stub DnsGetLastServerUpdateIP -@ stub DnsGetMaxNumberOfAddressesToRegister -@ stub DnsGetNetworkInformation -@ stub DnsGetPrimaryDomainName_A -@ stub DnsGetPrimaryDomainName_UTF8 -@ stub DnsGetPrimaryDomainName_W -@ stub DnsGetSearchInformation -@ stub DnsIpv6AddressToString -@ stub DnsIpv6StringToAddress -@ stub DnsIsAdapterDomainNameRegistrationEnabled -@ stub DnsIsAMailboxType -@ stub DnsIsDynamicRegistrationEnabled -@ stub DnsIsStatusRcode -@ stub DnsIsStringCountValidForTextType -@ stub DnsMapRcodeToStatus -@ stub DnsModifyRecordSet_A -@ stub DnsModifyRecordSet_UTF8 -@ stub DnsModifyRecordSet_W +@ stdcall DnsFlushResolverCacheEntry_A() +@ stdcall DnsFlushResolverCacheEntry_UTF8() +@ stdcall DnsFlushResolverCacheEntry_W() +@ stdcall DnsFreeAdapterInformation() +@ stdcall DnsFreeNetworkInformation() +@ stdcall DnsFreeSearchInformation() +@ stdcall DnsGetBufferLengthForStringCopy() +@ stdcall DnsGetCacheDataTable() +@ stdcall DnsGetDnsServerList() +@ stdcall DnsGetDomainName() +@ stdcall DnsGetHostName_A() +@ stdcall DnsGetHostName_UTF8() +@ stdcall DnsGetHostName_W() +@ stdcall DnsGetIpAddressInfoList() +@ stdcall DnsGetIpAddressList() +@ stdcall DnsGetLastServerUpdateIP() +@ stdcall DnsGetMaxNumberOfAddressesToRegister() +@ stdcall DnsGetNetworkInformation() +@ stdcall DnsGetPrimaryDomainName_A() +@ stdcall DnsGetPrimaryDomainName_UTF8() +@ stdcall DnsGetPrimaryDomainName_W() +@ stdcall DnsGetSearchInformation() +@ stdcall DnsIpv6AddressToString() +@ stdcall DnsIpv6StringToAddress() +@ stdcall DnsIsAdapterDomainNameRegistrationEnabled() +@ stdcall DnsIsAMailboxType() +@ stdcall DnsIsDynamicRegistrationEnabled() +@ stdcall DnsIsStatusRcode() +@ stdcall DnsIsStringCountValidForTextType() +@ stdcall DnsMapRcodeToStatus() +@ stdcall DnsModifyRecordSet_A() +@ stdcall DnsModifyRecordSet_UTF8() +@ stdcall DnsModifyRecordSet_W() @ stdcall DnsModifyRecordsInSet_A(ptr ptr long ptr ptr ptr) @ stdcall DnsModifyRecordsInSet_UTF8(ptr ptr long ptr ptr ptr) @ stdcall DnsModifyRecordsInSet_W(ptr ptr long ptr ptr ptr) @ stdcall DnsNameCompare_A(str str) -@ stub DnsNameCompareEx_A -@ stub DnsNameCompareEx_UTF8 -@ stub DnsNameCompareEx_W +@ stdcall DnsNameCompareEx_A() +@ stdcall DnsNameCompareEx_UTF8() +@ stdcall DnsNameCompareEx_W() @ stdcall DnsNameCompare_W(wstr wstr) -@ stub DnsNameCopy -@ stub DnsNameCopyAllocate -@ stub DnsNotifyResolver +@ stdcall DnsNameCopy() +@ stdcall DnsNameCopyAllocate() +@ stdcall DnsNotifyResolver() @ stdcall DnsQuery_A(str long long ptr ptr ptr) @ stdcall DnsQueryConfig(long long wstr ptr ptr ptr) -@ stub DnsQueryEx +@ stdcall DnsQueryEx() @ stdcall DnsQuery_UTF8(str long long ptr ptr ptr) @ stdcall DnsQuery_W(wstr long long ptr ptr ptr) -@ stub DnsRecordBuild_UTF8 -@ stub DnsRecordBuild_W +@ stdcall DnsRecordBuild_UTF8() +@ stdcall DnsRecordBuild_W() @ stdcall DnsRecordCompare(ptr ptr) @ stdcall DnsRecordCopyEx(ptr long long) @ stdcall DnsRecordListFree(ptr long) @ stdcall DnsRecordSetCompare(ptr ptr ptr ptr) @ stdcall DnsRecordSetCopyEx(ptr long long) @ stdcall DnsRecordSetDetach(ptr) -@ stub DnsRecordStringForType -@ stub DnsRecordStringForWritableType -@ stub DnsRecordTypeForName -@ stub DnsRelationalCompare_UTF8 -@ stub DnsRelationalCompare_W +@ stdcall DnsRecordStringForType() +@ stdcall DnsRecordStringForWritableType() +@ stdcall DnsRecordTypeForName() +@ stdcall DnsRelationalCompare_UTF8() +@ stdcall DnsRelationalCompare_W() @ stdcall DnsReleaseContextHandle(ptr) -@ stub DnsRemoveRegistrations +@ stdcall DnsRemoveRegistrations() @ stdcall DnsReplaceRecordSetA(ptr long ptr ptr ptr) -@ stub DnsReplaceRecordSet_A +@ stdcall DnsReplaceRecordSet_A() @ stdcall DnsReplaceRecordSetUTF8(ptr long ptr ptr ptr) -@ stub DnsReplaceRecordSet_UTF8 +@ stdcall DnsReplaceRecordSet_UTF8() @ stdcall DnsReplaceRecordSetW(ptr long ptr ptr ptr) -@ stub DnsReplaceRecordSet_W -@ stub DnsServiceNotificationDeregister_A -@ stub DnsServiceNotificationDeregister_UTF8 -@ stub DnsServiceNotificationDeregister_W -@ stub DnsServiceNotificationRegister_A -@ stub DnsServiceNotificationRegister_UTF8 -@ stub DnsServiceNotificationRegister_W -@ stub DnsSetMaxNumberOfAddressesToRegister -@ stub DnsStatusString -@ stub DnsStringCopyAllocateEx -@ stub DnsUnicodeToUtf8 -@ stub DnsUpdate -@ stub DnsUpdateTest_A -@ stub DnsUpdateTest_UTF8 -@ stub DnsUpdateTest_W -@ stub DnsUtf8ToUnicode +@ stdcall DnsReplaceRecordSet_W() +@ stdcall DnsServiceNotificationDeregister_A() +@ stdcall DnsServiceNotificationDeregister_UTF8() +@ stdcall DnsServiceNotificationDeregister_W() +@ stdcall DnsServiceNotificationRegister_A() +@ stdcall DnsServiceNotificationRegister_UTF8() +@ stdcall DnsServiceNotificationRegister_W() +@ stdcall DnsSetMaxNumberOfAddressesToRegister() +@ stdcall DnsStatusString() +@ stdcall DnsStringCopyAllocateEx() +@ stdcall DnsUnicodeToUtf8() +@ stdcall DnsUpdate() +@ stdcall DnsUpdateTest_A() +@ stdcall DnsUpdateTest_UTF8() +@ stdcall DnsUpdateTest_W() +@ stdcall DnsUtf8ToUnicode() @ stdcall DnsValidateName_A(str long) @ stdcall DnsValidateName_UTF8(str long) @ stdcall DnsValidateName_W(wstr long) -@ stub DnsValidateUtf8Byte -@ stub DnsWinsRecordFlagForString -@ stub DnsWinsRecordFlagString +@ stdcall DnsValidateUtf8Byte() +@ stdcall DnsWinsRecordFlagForString() +@ stdcall DnsWinsRecordFlagString() @ stdcall DnsWriteQuestionToBuffer_UTF8(ptr ptr str long long long) @ stdcall DnsWriteQuestionToBuffer_W(ptr ptr wstr long long long) -@ stub DnsWriteReverseNameStringForIpAddress -@ stub GetCurrentTimeInSeconds +@ stdcall DnsWriteReverseNameStringForIpAddress() +@ stdcall GetCurrentTimeInSeconds() @ stdcall DnsFree(ptr long) diff --git a/reactos/dll/win32/dnsapi/dnsapi/stubs.c b/reactos/dll/win32/dnsapi/dnsapi/stubs.c index fd30c0c6a88..36cd71731e4 100644 --- a/reactos/dll/win32/dnsapi/dnsapi/stubs.c +++ b/reactos/dll/win32/dnsapi/dnsapi/stubs.c @@ -822,3 +822,10 @@ GetCurrentTimeInSeconds() UNIMPLEMENTED; return ERROR_OUTOFMEMORY; } + +DNS_STATUS WINAPI +DnsNotifyResolver() +{ + UNIMPLEMENTED; + return ERROR_OUTOFMEMORY; +} diff --git a/reactos/dll/win32/gdi32/gdi32.spec b/reactos/dll/win32/gdi32/gdi32.spec index 60f819a8b65..b3b0fdd34c9 100644 --- a/reactos/dll/win32/gdi32/gdi32.spec +++ b/reactos/dll/win32/gdi32/gdi32.spec @@ -102,7 +102,7 @@ @ stdcall DdEntry27(ptr long) NtGdiDdFlipToGDISurface @ stdcall DdEntry28(ptr ptr) NtGdiDdGetAvailDriverMemory @ stdcall DdEntry29(ptr ptr) NtGdiDdGetBltStatus -@ stdcall DdEntry2(ptr)NtGdiD3dContextDestroy +@ stdcall DdEntry2(ptr) NtGdiD3dContextDestroy @ stdcall DdEntry30(ptr ptr) NtGdiDdGetDC @ stdcall DdEntry31(ptr ptr) NtGdiDdGetDriverInfo @ stdcall DdEntry32(ptr ptr long) NtGdiDdGetDxHandle @@ -125,7 +125,7 @@ @ stdcall DdEntry48(ptr ptr) NtGdiDdSetExclusiveMode @ stdcall DdEntry49(ptr ptr ptr) NtGdiDdSetGammaRamp @ stdcall DdEntry4(ptr) NtGdiD3dValidateTextureStageState -@ stdcall DdEntry50(ptr ptr long)NtGdiDdCreateSurfaceEx +@ stdcall DdEntry50(ptr ptr long) NtGdiDdCreateSurfaceEx @ stdcall DdEntry51(ptr ptr ptr) NtGdiDdSetOverlayPosition @ stdcall DdEntry52(ptr ptr) NtGdiDdUnattachSurface @ stdcall DdEntry53(ptr ptr) NtGdiDdUnlock diff --git a/reactos/dll/win32/hid/hid.spec b/reactos/dll/win32/hid/hid.spec index 32d0687b3e0..a10c7e692c0 100644 --- a/reactos/dll/win32/hid/hid.spec +++ b/reactos/dll/win32/hid/hid.spec @@ -1,44 +1,44 @@ -@ stub HidD_FlushQueue -@ stub HidD_FreePreparsedData -@ stub HidD_GetAttributes -@ stub HidD_GetConfiguration -@ stub HidD_GetFeature +@ stdcall HidD_FlushQueue(ptr) +@ stdcall HidD_FreePreparsedData(ptr) +@ stdcall HidD_GetAttributes(ptr ptr) +@ stdcall HidD_GetConfiguration(ptr ptr long) +@ stdcall HidD_GetFeature(ptr ptr long) @ stdcall HidD_GetHidGuid(ptr) -@ stub HidD_GetIndexedString -@ stub HidD_GetInputReport -@ stub HidD_GetManufacturerString -@ stub HidD_GetMsGenreDescriptor -@ stub HidD_GetNumInputBuffers -@ stub HidD_GetPhysicalDescriptor -@ stub HidD_GetPreparsedData -@ stub HidD_GetProductString -@ stub HidD_GetSerialNumberString -@ stub HidD_Hello -@ stub HidD_SetConfiguration -@ stub HidD_SetFeature -@ stub HidD_SetNumInputBuffers -@ stub HidD_SetOutputReport -@ stub HidP_GetButtonCaps -@ stub HidP_GetCaps -@ stub HidP_GetData -@ stub HidP_GetExtendedAttributes -@ stub HidP_GetLinkCollectionNodes -@ stub HidP_GetScaledUsageValue -@ stub HidP_GetSpecificButtonCaps -@ stub HidP_GetSpecificValueCaps -@ stub HidP_GetUsageValue -@ stub HidP_GetUsageValueArray -@ stub HidP_GetUsages -@ stub HidP_GetUsagesEx -@ stub HidP_GetValueCaps -@ stub HidP_InitializeReportForID -@ stub HidP_MaxDataListLength -@ stub HidP_MaxUsageListLength -@ stub HidP_SetData -@ stub HidP_SetScaledUsageValue -@ stub HidP_SetUsageValue -@ stub HidP_SetUsageValueArray -@ stub HidP_SetUsages -@ stub HidP_TranslateUsagesToI8042ScanCodes -@ stub HidP_UnsetUsages -@ stub HidP_UsageListDifference +@ stdcall HidD_GetIndexedString(ptr long ptr long) +@ stdcall HidD_GetInputReport(ptr ptr long) +@ stdcall HidD_GetManufacturerString(ptr ptr long) +@ stdcall HidD_GetMsGenreDescriptor(ptr ptr long) +@ stdcall HidD_GetNumInputBuffers(ptr ptr) +@ stdcall HidD_GetPhysicalDescriptor(ptr ptr long) +@ stdcall HidD_GetPreparsedData(ptr ptr) +@ stdcall HidD_GetProductString(ptr ptr long) +@ stdcall HidD_GetSerialNumberString(ptr ptr long) +@ stdcall HidD_Hello(ptr long) +@ stdcall HidD_SetConfiguration(ptr ptr long) +@ stdcall HidD_SetFeature(ptr ptr long) +@ stdcall HidD_SetNumInputBuffers(ptr long) +@ stdcall HidD_SetOutputReport(ptr ptr long) +@ stdcall HidP_GetButtonCaps(long ptr ptr ptr) +@ stdcall HidP_GetCaps(ptr ptr) +@ stdcall HidP_GetData(long ptr ptr ptr ptr long) +@ stdcall HidP_GetExtendedAttributes(long long ptr ptr ptr) +@ stdcall HidP_GetLinkCollectionNodes(ptr ptr ptr) +@ stdcall HidP_GetScaledUsageValue(long long long long ptr ptr ptr long) +@ stdcall HidP_GetSpecificButtonCaps(long long long long ptr ptr ptr) +@ stdcall HidP_GetSpecificValueCaps(long long long long ptr ptr ptr) +@ stdcall HidP_GetUsageValue(long long long long ptr ptr ptr long) +@ stdcall HidP_GetUsageValueArray(long long long long ptr long ptr ptr long) +@ stdcall HidP_GetUsages(long long long ptr ptr ptr ptr long) +@ stdcall HidP_GetUsagesEx(long long ptr ptr ptr ptr long) +@ stdcall HidP_GetValueCaps(long ptr ptr ptr) +@ stdcall HidP_InitializeReportForID(long long ptr ptr long) +@ stdcall HidP_MaxDataListLength(long ptr) +@ stdcall HidP_MaxUsageListLength(long long ptr) +@ stdcall HidP_SetData(long ptr ptr ptr ptr long) +@ stdcall HidP_SetScaledUsageValue(long long long long long ptr ptr long) +@ stdcall HidP_SetUsageValue(long long long long long ptr ptr long) +@ stdcall HidP_SetUsageValueArray(long long long long ptr long ptr ptr long) +@ stdcall HidP_SetUsages(long long long ptr ptr ptr ptr long) +@ stdcall HidP_TranslateUsagesToI8042ScanCodes(ptr long long ptr ptr ptr) +@ stdcall HidP_UnsetUsages(long long long ptr ptr ptr ptr long) +@ stdcall HidP_UsageListDifference(ptr ptr ptr ptr long) diff --git a/reactos/dll/win32/iphlpapi/iphlpapi.spec b/reactos/dll/win32/iphlpapi/iphlpapi.spec index f65673b601f..ace65bf541d 100644 --- a/reactos/dll/win32/iphlpapi/iphlpapi.spec +++ b/reactos/dll/win32/iphlpapi/iphlpapi.spec @@ -10,7 +10,7 @@ @ stub AllocateAndGetUdpExTable2FromStack @ stub AllocateAndGetUdpExTableFromStack @ stdcall AllocateAndGetUdpTableFromStack( ptr long long long ) -@ stub CancelIPChangeNotify +@ stdcall CancelIPChangeNotify(ptr) @ stub CancelSecurityHealthChangeNotify @ stdcall CreateIpForwardEntry( ptr ) @ stdcall CreateIpNetEntry( ptr ) @@ -19,16 +19,16 @@ @ stdcall DeleteIpForwardEntry( ptr ) @ stdcall DeleteIpNetEntry( ptr ) @ stdcall DeleteProxyArpEntry( long long long ) -@ stub DisableMediaSense +@ stdcall DisableMediaSense(ptr ptr) @ stdcall EnableRouter( ptr ptr ) @ stdcall FlushIpNetTable( long ) @ stub FlushIpNetTableFromStack @ stdcall GetAdapterIndex( wstr ptr ) -@ stub GetAdapterOrderMap +@ stdcall GetAdapterOrderMap() @ stdcall GetAdaptersAddresses( long long ptr ptr ptr ) @ stdcall GetAdaptersInfo( ptr ptr ) @ stdcall GetBestInterface( long ptr ) -@ stub GetBestInterfaceEx +@ stdcall GetBestInterfaceEx(ptr ptr) @ stub GetBestInterfaceFromStack @ stdcall GetBestRoute( long long long ) @ stub GetBestRouteFromStack @@ -36,7 +36,7 @@ @ stub GetExtendedUdpTable @ stdcall GetFriendlyIfIndex( long ) @ stdcall GetIcmpStatistics( ptr ) -@ stub GetIcmpStatisticsEx +@ stdcall GetIcmpStatisticsEx(ptr long) @ stub GetIcmpStatsFromStack @ stub GetIcmpStatsFromStackEx @ stdcall GetIfEntry( ptr ) @@ -49,13 +49,13 @@ @ stdcall GetInterfaceInfo( ptr ptr ) @ stdcall GetIpAddrTable( ptr ptr long ) @ stub GetIpAddrTableFromStack -@ stub GetIpErrorString +@ stdcall GetIpErrorString(long ptr ptr) @ stdcall GetIpForwardTable( ptr ptr long ) @ stub GetIpForwardTableFromStack @ stdcall GetIpNetTable( ptr ptr long ) @ stub GetIpNetTableFromStack @ stdcall GetIpStatistics( ptr ) -@ stub GetIpStatisticsEx +@ stdcall GetIpStatisticsEx(ptr long) @ stub GetIpStatsFromStack @ stub GetIpStatsFromStackEx @ stdcall GetNetworkParams( ptr ptr ) @@ -68,14 +68,14 @@ @ stdcall GetRTTAndHopCount( long ptr long ptr ) @ stub GetTcpExTable2FromStack @ stdcall GetTcpStatistics( ptr ) -@ stub GetTcpStatisticsEx +@ stdcall GetTcpStatisticsEx(ptr long) @ stub GetTcpStatsFromStack @ stub GetTcpStatsFromStackEx @ stdcall GetTcpTable( ptr ptr long ) @ stub GetTcpTableFromStack @ stub GetUdpExTable2FromStack @ stdcall GetUdpStatistics( ptr ) -@ stub GetUdpStatisticsEx +@ stdcall GetUdpStatisticsEx(ptr long) @ stub GetUdpStatsFromStack @ stub GetUdpStatsFromStackEx @ stdcall GetUdpTable( ptr ptr long ) @@ -112,14 +112,14 @@ @ stub NhGetGuidFromInterfaceName @ stdcall NhGetInterfaceNameFromDeviceGuid(long long long long long) @ stub NhGetInterfaceNameFromGuid -@ stub NhpAllocateAndGetInterfaceInfoFromStack +@ stdcall NhpAllocateAndGetInterfaceInfoFromStack(ptr ptr long ptr long) @ stub NhpGetInterfaceIndexFromStack @ stdcall NotifyAddrChange( ptr ptr ) @ stdcall NotifyRouteChange( ptr ptr ) @ stub NotifyRouteChangeEx @ stub NotifySecurityHealthChange -@ stub RestoreMediaSense -@ stub SendARP +@ stdcall RestoreMediaSense(ptr ptr) +@ stdcall SendARP(long long ptr ptr) @ stub SetAdapterIpAddress @ stub SetBlockRoutes @ stdcall SetIfEntry( ptr ) diff --git a/reactos/dll/win32/loadperf/loadperf.spec b/reactos/dll/win32/loadperf/loadperf.spec index 06e78918d1b..18940024e77 100644 --- a/reactos/dll/win32/loadperf/loadperf.spec +++ b/reactos/dll/win32/loadperf/loadperf.spec @@ -1,14 +1,14 @@ -@ stub BackupPerfRegistryToFileW +@ stdcall BackupPerfRegistryToFileW(long long) @ stdcall InstallPerfDllA(str str ptr) @ stdcall InstallPerfDllW(wstr wstr ptr) -@ stub LoadMofFromInstalledServiceA -@ stub LoadMofFromInstalledServiceW +@ stdcall LoadMofFromInstalledServiceA(ptr ptr ptr) +@ stdcall LoadMofFromInstalledServiceW(ptr ptr ptr) @ stdcall LoadPerfCounterTextStringsA(str long) @ stdcall LoadPerfCounterTextStringsW(wstr long) -@ stub RestorePerfRegistryFromFileW -@ stub SetServiceAsTrustedA -@ stub SetServiceAsTrustedW +@ stdcall RestorePerfRegistryFromFileW(ptr ptr) +@ stdcall SetServiceAsTrustedA(ptr ptr) +@ stdcall SetServiceAsTrustedW(ptr ptr) @ stdcall UnloadPerfCounterTextStringsA(str long) @ stdcall UnloadPerfCounterTextStringsW(wstr long) -@ stub UpdatePerfNameFilesA -@ stub UpdatePerfNameFilesW +@ stdcall UpdatePerfNameFilesA(ptr ptr ptr ptr) +@ stdcall UpdatePerfNameFilesW(ptr ptr ptr ptr) diff --git a/reactos/dll/win32/loadperf/stubs.c b/reactos/dll/win32/loadperf/stubs.c new file mode 100644 index 00000000000..bd172d27924 --- /dev/null +++ b/reactos/dll/win32/loadperf/stubs.c @@ -0,0 +1,85 @@ + +#include +#define NDEBUG +#include + +#define LOADPERF_FUNCTION DWORD WINAPI + +LOADPERF_FUNCTION +BackupPerfRegistryToFileW( + IN LPCWSTR szFileName, + IN LPCWSTR szCommentString OPTIONAL) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +LOADPERF_FUNCTION +LoadMofFromInstalledServiceA( + IN LPCSTR szServiceName, + IN LPCSTR szMofFilename, + IN ULONG_PTR dwFlags) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +LOADPERF_FUNCTION +LoadMofFromInstalledServiceW( + IN LPCWSTR szServiceName, + IN LPCWSTR szMofFilename, + IN ULONG_PTR dwFlags) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +LOADPERF_FUNCTION +RestorePerfRegistryFromFileW( + IN LPCWSTR szFileName, + IN LPCWSTR szLangId) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +LOADPERF_FUNCTION +SetServiceAsTrustedA( + IN LPCSTR szReserved, + IN LPCSTR szServiceName) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +LOADPERF_FUNCTION +SetServiceAsTrustedW( + IN LPCWSTR szReserved OPTIONAL, + IN LPCWSTR szServiceName) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +LOADPERF_FUNCTION +UpdatePerfNameFilesA( + IN LPCSTR szNewCtrFilePath, + IN LPCSTR szNewHlpFilePath OPTIONAL, + IN LPSTR szLanguageID, + IN ULONG_PTR dwFlags) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +LOADPERF_FUNCTION +UpdatePerfNameFilesW( + IN LPCWSTR szNewCtrFilePath, + IN LPCWSTR szNewHlpFilePath OPTIONAL, + IN LPWSTR szLanguageID, + IN ULONG_PTR dwFlags) +{ + UNIMPLEMENTED; + return ERROR_CALL_NOT_IMPLEMENTED; +} + diff --git a/reactos/dll/win32/mapi32/mapi32.spec b/reactos/dll/win32/mapi32/mapi32.spec index 8037c9b54d8..0698dc32fcf 100644 --- a/reactos/dll/win32/mapi32/mapi32.spec +++ b/reactos/dll/win32/mapi32/mapi32.spec @@ -1,4 +1,4 @@ - 8 stub @ + 8 stub mapi32_8 10 stdcall MAPILogonEx(long ptr ptr long ptr) 11 stdcall MAPILogonEx@20(long ptr ptr long ptr) MAPILogonEx 12 stdcall MAPIAllocateBuffer(long ptr) @@ -18,8 +18,8 @@ 26 stub LaunchWizard@20 27 stdcall -private DllGetClassObject(ptr ptr ptr) 28 stdcall -private DllCanUnloadNow() - 29 stub MAPIOpenFormMgr - 30 stub MAPIOpenFormMgr@8 + 29 stdcall MAPIOpenFormMgr(ptr ptr) + 30 stdcall MAPIOpenFormMgr@8(ptr ptr) MAPIOpenFormMgr 31 stdcall MAPIOpenLocalFormContainer(ptr) 32 stdcall MAPIOpenLocalFormContainer@4(ptr) MAPIOpenLocalFormContainer 33 stdcall ScInitMapiUtil@4(long) ScInitMapiUtil @@ -89,12 +89,12 @@ 146 stub HrDecomposeMsgID@24 147 stdcall OpenStreamOnFile@24(ptr ptr ptr ptr ptr ptr) OpenStreamOnFile 148 stdcall OpenStreamOnFile(ptr ptr ptr ptr ptr ptr) -149 stub OpenTnefStream@28 -150 stub OpenTnefStream -151 stub OpenTnefStreamEx@32 -152 stub OpenTnefStreamEx -153 stub GetTnefStreamCodepage@12 -154 stub GetTnefStreamCodepage +149 stdcall OpenTnefStream@28(ptr ptr ptr long ptr long ptr) OpenTnefStream +150 stdcall OpenTnefStream(ptr ptr ptr long ptr long ptr) +151 stdcall OpenTnefStreamEx@32(ptr ptr ptr long ptr long ptr ptr) OpenTnefStreamEx +152 stdcall OpenTnefStreamEx(ptr ptr ptr long ptr long ptr ptr) +153 stdcall GetTnefStreamCodepage@12(ptr ptr ptr) GetTnefStreamCodepage +154 stdcall GetTnefStreamCodepage(ptr ptr ptr) 155 stdcall UlFromSzHex@4(ptr) UlFromSzHex 156 stub UNKOBJ_ScAllocate@12 157 stub UNKOBJ_ScAllocateMore@16 @@ -120,10 +120,10 @@ 180 stdcall FBadRow@4(ptr) FBadRow 181 stdcall FBadProp@4(ptr) FBadProp 182 stdcall FBadColumnSet@4(ptr) FBadColumnSet -183 stub RTFSync@12 -184 stub RTFSync -185 stub WrapCompressedRTFStream@12 -186 stub WrapCompressedRTFStream +183 stdcall RTFSync@12(ptr long ptr) RTFSync +184 stdcall RTFSync(ptr long ptr) +185 stdcall WrapCompressedRTFStream@12(ptr long ptr) WrapCompressedRTFStream +186 stdcall WrapCompressedRTFStream(ptr long ptr) 187 stub __ValidateParameters@8 188 stub __CPPValidateParameters@8 189 stub FBadSortOrderSet@4 @@ -178,13 +178,13 @@ 239 stub HrDispatchNotifications@4 241 stub HrValidateParameters@8 244 stub ScCreateConversationIndex@16 -246 stub HrGetOmiProvidersFlags -247 stub HrGetOmiProvidersFlags@8 -248 stub HrSetOmiProvidersFlagsInvalid -249 stub HrSetOmiProvidersFlagsInvalid@4 -250 stub GetOutlookVersion -251 stub GetOutlookVersion@0 -252 stub FixMAPI -253 stub FixMAPI@0 +246 stdcall HrGetOmiProvidersFlags(long long) +247 stdcall HrGetOmiProvidersFlags@8(long long) HrGetOmiProvidersFlags +248 stdcall HrSetOmiProvidersFlagsInvalid(long) +249 stdcall HrSetOmiProvidersFlagsInvalid@4(long) HrSetOmiProvidersFlagsInvalid +250 stdcall GetOutlookVersion() +251 stdcall GetOutlookVersion@0() GetOutlookVersion +252 stdcall FixMAPI() +253 stdcall FixMAPI@0() FixMAPI 254 stdcall FGetComponentPath(str str ptr long long) 255 stdcall FGetComponentPath@20(str str ptr long long) FGetComponentPath diff --git a/reactos/dll/win32/mapi32/stubs.c b/reactos/dll/win32/mapi32/stubs.c new file mode 100644 index 00000000000..57b0628897c --- /dev/null +++ b/reactos/dll/win32/mapi32/stubs.c @@ -0,0 +1,116 @@ +#include +#include +#include + +typedef PVOID LPMAPIFORMMGR, LPADDRESSBOOK; + +HRESULT +WINAPI +MAPIOpenFormMgr( + LPMAPISESSION pSession, + LPMAPIFORMMGR *ppmgr) +{ + UNIMPLEMENTED; + return E_NOTIMPL; +} + + +HRESULT +WINAPI +OpenTnefStream( + LPVOID lpvSupport, + LPSTREAM lpStream, + LPTSTR lpszStreamName, + ULONG ulFlags, + LPMESSAGE lpMessage, + WORD wKey, + LPSTREAM *lppTNEF) +{ + UNIMPLEMENTED; + return E_NOTIMPL; +} + +HRESULT +WINAPI +OpenTnefStreamEx( + LPVOID lpvSupport, + LPSTREAM lpStream, + LPTSTR lpszStreamName, + ULONG ulFlags, + LPMESSAGE lpMessage, + WORD wKeyVal, + LPADDRESSBOOK lpAdressBook, + LPSTREAM *lppTNEF) +{ + UNIMPLEMENTED; + return E_NOTIMPL; +} + +HRESULT +WINAPI +GetTnefStreamCodepage( + LPSTREAM lpStream, + ULONG *lpulCodepage, + ULONG *lpulSubCodepage) +{ + UNIMPLEMENTED; + return E_NOTIMPL; +} + +HRESULT +WINAPI +RTFSync( + LPMESSAGE lpMessage, + ULONG ulFlags, + BOOL *lpfMessageUpdated) +{ + UNIMPLEMENTED; + return E_NOTIMPL; +} + +HRESULT +WINAPI +WrapCompressedRTFStream( + LPSTREAM lpCompressedRTFStream, + ULONG ulflags, + LPSTREAM *lpUncompressedRTFStream) +{ + UNIMPLEMENTED; + return E_NOTIMPL; +} + +HRESULT +WINAPI +HrGetOmiProvidersFlags( + DWORD dwUnknown1, + DWORD dwUnknown2) +{ + UNIMPLEMENTED; + return E_NOTIMPL; +} + +HRESULT +WINAPI +HrSetOmiProvidersFlagsInvalid( + DWORD dwUnknown1) +{ + UNIMPLEMENTED; + return E_NOTIMPL; +} + +ULONG +WINAPI +GetOutlookVersion(void) +{ + UNIMPLEMENTED; + return 0; +} + +HRESULT +WINAPI +FixMAPI(void) +{ + UNIMPLEMENTED; + return E_NOTIMPL; +} + diff --git a/reactos/dll/win32/mpr/mpr.spec b/reactos/dll/win32/mpr/mpr.spec index 53466155f03..119590bf5d1 100644 --- a/reactos/dll/win32/mpr/mpr.spec +++ b/reactos/dll/win32/mpr/mpr.spec @@ -1,23 +1,23 @@ # ordinal exports - 1 stub @ - 2 stub @ - 3 stub @ - 4 stub @ - 5 stub @ - 6 stub @ - 7 stub @ - 8 stub @ - 9 stub @ -12 stub @ -13 stub @ -14 stub @ -15 stub @ -16 stub @ -17 stub @ -18 stub @ -19 stub @ -20 stub @ -21 stub @ + 1 stub MPR_1 + 2 stub MPR_2 + 3 stub MPR_3 + 4 stub MPR_4 + 5 stub MPR_5 + 6 stub MPR_6 + 7 stub MPR_7 + 8 stub MPR_8 + 9 stub MPR_9 +12 stub MPR_12 +13 stub MPR_13 +14 stub MPR_14 +15 stub MPR_15 +16 stub MPR_16 +17 stub MPR_17 +18 stub MPR_18 +19 stub MPR_19 +20 stub MPR_20 +21 stub MPR_21 22 stdcall @(long) MPR_Alloc 23 stdcall @(ptr long) MPR_ReAlloc 24 stdcall @(ptr) MPR_Free diff --git a/reactos/dll/win32/msvcrt/msvcrt.spec b/reactos/dll/win32/msvcrt/msvcrt.spec index 9749fff4b8d..1dc1b1e2a73 100644 --- a/reactos/dll/win32/msvcrt/msvcrt.spec +++ b/reactos/dll/win32/msvcrt/msvcrt.spec @@ -137,14 +137,14 @@ @ extern __badioinfo __badioinfo @ cdecl __crtCompareStringA(long long str long str long) kernel32.CompareStringA @ cdecl __crtCompareStringW(long long wstr long wstr long) kernel32.CompareStringW -@ cdecl __crtGetLocaleInfoW(long long ptr long) kernel32.GetLocaleInfo +@ cdecl __crtGetLocaleInfoW(long long ptr long) kernel32.GetLocaleInfoW @ cdecl __crtGetStringTypeW(long long wstr long ptr) @ cdecl __crtLCMapStringA(long long str long ptr long long long) # stub __crtLCMapStringW @ cdecl __dllonexit(ptr ptr ptr) @ cdecl __doserrno() __doserrno @ cdecl __fpecode() -@ stub __get_app_type +@ cdecl __get_app_type() @ cdecl __getmainargs(ptr ptr ptr long ptr) @ extern __initenv __initenv @ cdecl __iob_func() __p__iob @@ -152,7 +152,7 @@ @ cdecl __iscsym(long) __iscsym @ cdecl __iscsymf(long) __iscsymf @ extern __lc_codepage MSVCRT___lc_codepage -@ stub __lc_collate +# @ stub __lc_collate # not in XP / 7 @ extern __lc_collate_cp MSVCRT___lc_collate_cp @ extern __lc_handle MSVCRT___lc_handle @ cdecl __lconv_init() @@ -190,15 +190,15 @@ @ cdecl -arch=i386 __p__daylight() @ cdecl -arch=i386 __p__dstbias() @ cdecl -arch=i386 __p__environ() -@ stub -arch=i386 __p__fileinfo #() +@ cdecl -arch=i386 __p__fileinfo() @ cdecl -arch=i386 __p__fmode() @ cdecl -arch=i386 __p__iob() -@ stub -arch=i386 __p__mbcasemap #() +@ cdecl -arch=i386 __p__mbcasemap() @ cdecl -arch=i386 __p__mbctype() @ cdecl -arch=i386 __p__osver() @ cdecl -arch=i386 __p__pctype() __pctype_func @ cdecl -arch=i386 __p__pgmptr() -@ stub -arch=i386 __p__pwctype #() +@ cdecl -arch=i386 __p__pwctype() @ cdecl -arch=i386 __p__timezone() __p__timezone @ cdecl -arch=i386 __p__tzname() @ cdecl -arch=i386 __p__wcmdln() @@ -210,7 +210,7 @@ @ cdecl __pctype_func() __pctype_func @ extern __pioinfo __pioinfo # stub __pwctype_func -@ stub __pxcptinfoptrs #() +@ cdecl __pxcptinfoptrs() @ cdecl __set_app_type(long) @ extern __setlc_active @ cdecl __setusermatherr(ptr) @@ -260,7 +260,7 @@ # stub _aligned_realloc_dbg @ cdecl _amsg_exit(long) @ cdecl _assert(str str long) -@ stub _atodbl #(ptr str) +@ cdecl _atodbl(ptr str) # stub _atodbl_l # @ cdecl _atof_l(str ptr) # stub _atoflt_l @@ -365,7 +365,7 @@ @ cdecl _fgetchar() @ cdecl _fgetwchar() @ cdecl _filbuf(ptr) -# extern _fileinfo +@ extern _fileinfo @ cdecl _filelength(long) @ cdecl -ret64 _filelengthi64(long) @ cdecl _fileno(ptr) @@ -381,7 +381,7 @@ @ cdecl _flushall() @ extern _fmode @ cdecl _fpclass(double) -@ stub _fpieee_flt #(long ptr ptr) +@ cdecl _fpieee_flt(long ptr ptr) @ cdecl _fpreset() # stub _fprintf_l # stub _fprintf_p @@ -439,8 +439,8 @@ # stub _get_winminor # stub _get_winver # stub _get_wpgmptr -@ stub _get_terminate -@ stub _get_unexpected +# @ stub _get_terminate # not in XP / 7 +# @ stub _get_unexpected # not in XP / 7 @ cdecl _getch() @ cdecl _getche() @ cdecl _getcwd(str long) @@ -452,7 +452,7 @@ @ cdecl _getmaxstdio() @ cdecl _getmbcp() @ cdecl _getpid() kernel32.GetCurrentProcessId -@ stub _getsystime #(ptr) +@ cdecl _getsystime(ptr) @ cdecl _getw(ptr) # stub _getwch # stub _getwche @@ -466,7 +466,7 @@ @ cdecl _heapchk() @ cdecl _heapmin() @ cdecl _heapset(long) -@ stub _heapused #(ptr ptr) +# @ stub _heapused #(ptr ptr) # not in XP / 7 @ cdecl _heapwalk(ptr) @ cdecl _hypot(double double) @ cdecl _i64toa(long long ptr long) @@ -475,10 +475,10 @@ # stub _i64tow_s @ cdecl _initterm(ptr ptr) # stub _initterm_e -@ stub _inp #(long) -i386 -@ stub _inpd #(long) -i386 -@ stub _inpw #(long) -i386 -# @ cdecl _invalid_parameter(wstr wstr wstr long long) +@ cdecl -arch=i386 _inp(long) MSVCRT__inp +@ cdecl -arch=i386 _inpd(long) MSVCRT__inpd +@ cdecl -arch=i386 _inpw(long) MSVCRT__inpw +@ cdecl _invalid_parameter(wstr wstr wstr long long) @ extern _iob # stub _isalnum_l # stub _isalpha_l @@ -490,25 +490,25 @@ # stub _isgraph_l # stub _isleadbyte_l # stub _islower_l -@ stub _ismbbalnum #(long) +@ cdecl _ismbbalnum(long) # stub _ismbbalnum_l @ stub _ismbbalpha #(long) # stub _ismbbalpha_l -@ stub _ismbbgraph #(long) +@ cdecl _ismbbgraph(long) # stub _ismbbgraph_l -@ stub _ismbbkalnum #(long) +@ cdecl _ismbbkalnum(long) # stub _ismbbkalnum_l @ cdecl _ismbbkana(long) # stub _ismbbkana_l -@ stub _ismbbkprint #(long) +@ cdecl _ismbbkprint(long) # stub _ismbbkprint_l -@ stub _ismbbkpunct #(long) +@ cdecl _ismbbkpunct(long) # stub _ismbbkpunct_l @ cdecl _ismbblead(long) # stub _ismbblead_l @ stub _ismbbprint #(long) # stub _ismbbprint_l -@ stub _ismbbpunct #(long) +@ cdecl _ismbbpunct(long) # stub _ismbbpunct_l @ cdecl _ismbbtrail(long) # stub _ismbbtrail_l @@ -524,11 +524,11 @@ # stub _ismbchira_l @ cdecl _ismbckata(long) # stub _ismbckata_l -@ stub _ismbcl0 #(long) +@ cdecl _ismbcl0(long) # stub _ismbcl0_l -@ stub _ismbcl1 #(long) +@ cdecl _ismbcl1(long) # stub _ismbcl1_l -@ stub _ismbcl2 #(long) +@ cdecl _ismbcl2(long) # stub _ismbcl2_l @ cdecl _ismbclegal(long) # stub _ismbclegal_l @@ -602,20 +602,20 @@ @ cdecl _mbbtombc(long) # stub _mbbtombc_l @ cdecl _mbbtype(long long) -# extern _mbcasemap +@ extern _mbcasemap @ cdecl _mbccpy (str str) # stub _mbccpy_l # stub _mbccpy_s # stub _mbccpy_s_l @ cdecl _mbcjistojms (long) # stub _mbcjistojms_l -@ stub _mbcjmstojis #(long) +@ cdecl _mbcjmstojis(long) # stub _mbcjmstojis_l @ cdecl _mbclen(ptr) # stub _mbclen_l -@ stub _mbctohira #(long) +@ cdecl _mbctohira(long) # stub _mbctohira_l -@ stub _mbctokata #(long) +@ cdecl _mbctokata(long) # stub _mbctokata_l @ cdecl _mbctolower(long) # stub _mbctolower_l @@ -665,7 +665,7 @@ # stub _mbsnbcmp_l @ cdecl _mbsnbcnt(ptr long) # stub _mbsnbcnt_l -@ stub _mbsnbcoll #(str str long) +@ cdecl _mbsnbcoll(str str long) # stub _mbsnbcoll_l @ cdecl _mbsnbcpy(ptr str long) # stub _mbsnbcpy_l @@ -673,7 +673,7 @@ # stub _mbsnbcpy_s_l @ cdecl _mbsnbicmp(str str long) # stub _mbsnbicmp_l -@ stub _mbsnbicoll #(str str long) +@ cdecl _mbsnbicoll(str str long) # stub _mbsnbicoll_l @ cdecl _mbsnbset(str long long) # stub _mbsnbset_l @@ -687,7 +687,7 @@ # stub _mbsnccnt_l @ cdecl _mbsncmp(str str long) # stub _mbsncmp_l -@ stub _mbsncoll #(str str long) +@ cdecl _mbsncoll(str str long) # stub _mbsncoll_l @ cdecl _mbsncpy(str str long) # stub _mbsncpy_l @@ -697,7 +697,7 @@ # stub _mbsnextc_l @ cdecl _mbsnicmp(str str long) # stub _mbsnicmp_l -@ stub _mbsnicoll #(str str long) +@ cdecl _mbsnicoll(str str long) # stub _mbsnicoll_l @ cdecl _mbsninc(str long) # stub _mbsninc_l @@ -757,9 +757,9 @@ @ cdecl _open_osfhandle(long long) @ extern _osplatform _osplatform @ extern _osver _osver -@ stub _outp #(long long) -@ stub _outpd #(long long) -@ stub _outpw #(long long) +@ cdecl _outp(long long) MSVCRT__outp +@ cdecl _outpd(long long) MSVCRT__outpd +@ cdecl _outpw(long long) MSVCRT__outpw @ cdecl _pclose (ptr) @ extern _pctype _pctype @ extern _pgmptr _pgmptr @@ -819,7 +819,7 @@ @ cdecl _setmaxstdio(long) @ cdecl _setmbcp(long) @ cdecl _setmode(long long) -@ stub _setsystime #(ptr long) +@ cdecl _setsystime(ptr long) @ cdecl _sleep(long) @ varargs _snprintf(ptr long str) # stub _snprintf_c @@ -876,11 +876,11 @@ # stub _strlwr_l # stub _strlwr_s # stub _strlwr_s_l -@ stub _strncoll #(str str long) +@ cdecl _strncoll(str str long) # stub _strncoll_l @ cdecl _strnicmp(str str long) # stub _strnicmp_l -@ stub _strnicoll #(str str long) +@ cdecl _strnicoll(str str long) # stub _strnicoll_l @ cdecl _strnset(str long long) # stub _strnset_s @@ -1021,11 +1021,11 @@ # stub _wcslwr_l # stub _wcslwr_s # stub _wcslwr_s_l -@ stub _wcsncoll #(wstr wstr long) +@ cdecl _wcsncoll(wstr wstr long) # stub _wcsncoll_l @ cdecl _wcsnicmp(wstr wstr long) # stub _wcsnicmp_l -@ stub _wcsnicoll #(wstr wstr long) +@ cdecl _wcsnicoll(wstr wstr long) # stub _wcsnicoll_l @ cdecl _wcsnset(wstr long long) # stub _wcsnset_s @@ -1091,7 +1091,7 @@ # stub _wmktemp_s @ varargs _wopen(wstr long) # stub _woutput_s -@ stub _wperror #(wstr) +@ cdecl _wperror(wstr) @ extern _wpgmptr @ cdecl _wpopen (wstr wstr) # stub _wprintf_l @@ -1131,7 +1131,7 @@ @ cdecl _wsystem(wstr) @ cdecl _wtempnam(wstr wstr) # stub _wtempnam_dbg -@ stub _wtmpnam #(ptr) +@ cdecl _wtmpnam(ptr) # stub _wtmpnam_s # @ cdecl _wtof(wstr) # @ cdecl _wtof_l(wstr ptr) diff --git a/reactos/dll/win32/msvcrt/stubs.c b/reactos/dll/win32/msvcrt/stubs.c new file mode 100644 index 00000000000..539a31652ce --- /dev/null +++ b/reactos/dll/win32/msvcrt/stubs.c @@ -0,0 +1,83 @@ + +#include + +#undef UNIMPLEMENTED +#define UNIMPLEMENTED __wine_spec_unimplemented_stub("msvcrt.dll", __FUNCTION__) + +int __get_app_type() +{ + UNIMPLEMENTED; + return 0; +} + +int _fileinfo; + +void * +__p__fileinfo() +{ + return &_fileinfo; +} + +unsigned char _mbcasemap[1]; + +void * +__p__mbcasemap() +{ + return _mbcasemap; +} + +int _atodbl( + void * value, + char * str) +{ + UNIMPLEMENTED; + return 0; +} + +int _ismbbkprint( + unsigned int c) +{ + UNIMPLEMENTED; + return 0; +} + + +int MSVCRT__inp( + unsigned short port) +{ + return _inp(port); +} + +unsigned short MSVCRT__inpw( + unsigned short port) +{ + return _inpw(port); +} + +unsigned long MSVCRT__inpd( + unsigned short port) +{ + return _inpd(port); +} + + +int MSVCRT__outp( + unsigned short port, + int databyte) +{ + return _outp(port, databyte); +} + +unsigned short MSVCRT__outpw( + unsigned short port, + unsigned short dataword) +{ + return _outpw(port, dataword); +} + +unsigned long MSVCRT__outpd( + unsigned short port, + unsigned long dataword) +{ + return _outpd(port, dataword); +} diff --git a/reactos/dll/win32/msxml3/msxml3.spec b/reactos/dll/win32/msxml3/msxml3.spec index 15b763e7928..6f6f7b82f52 100644 --- a/reactos/dll/win32/msxml3/msxml3.spec +++ b/reactos/dll/win32/msxml3/msxml3.spec @@ -1,10 +1,10 @@ - 6 stub @ - 7 stub @ - 8 stub @ - 9 stub @ -10 stub @ -11 stub @ -12 stub @ + 6 stub MSXML3_6 + 7 stub MSXML3_7 + 8 stub MSXML3_8 + 9 stub MSXML3_9 +10 stub MSXML3_10 +11 stub MSXML3_11 +12 stub MSXML3_12 @ stdcall -private DllCanUnloadNow() @ stdcall -private DllGetClassObject(ptr ptr ptr) diff --git a/reactos/dll/win32/secur32/secur32.spec b/reactos/dll/win32/secur32/secur32.spec index 3a419fa0584..8ccc0ddd7c0 100644 --- a/reactos/dll/win32/secur32/secur32.spec +++ b/reactos/dll/win32/secur32/secur32.spec @@ -1,17 +1,10 @@ -@ stdcall LsaRegisterLogonProcess(ptr ptr ptr) -@ stdcall LsaLogonUser(ptr ptr long long ptr long ptr ptr ptr ptr ptr ptr ptr ptr) -@ stdcall LsaDeregisterLogonProcess(long) -@ stdcall LsaConnectUntrusted(long) -@ stdcall LsaLookupAuthenticationPackage(ptr ptr ptr) -@ stdcall LsaFreeReturnBuffer(ptr) -@ stdcall LsaCallAuthenticationPackage(long long ptr long ptr ptr ptr) @ stdcall AcceptSecurityContext(ptr ptr ptr long long ptr ptr ptr ptr) @ stdcall AcquireCredentialsHandleA(str str long ptr ptr ptr ptr ptr ptr) @ stdcall AcquireCredentialsHandleW(wstr wstr long ptr ptr ptr ptr ptr ptr) @ stdcall AddCredentialsA(ptr str str long ptr ptr ptr ptr) @ stdcall AddCredentialsW(ptr wstr wstr long ptr ptr ptr ptr) -@ stub AddSecurityPackageA -@ stub AddSecurityPackageW +@ stdcall AddSecurityPackageA(str ptr) +@ stdcall AddSecurityPackageW(wstr ptr) @ stdcall ApplyControlTokenA(ptr ptr) @ stdcall ApplyControlToken(ptr ptr) ApplyControlTokenW @ stdcall CompleteAuthToken(ptr ptr) @@ -19,8 +12,8 @@ @ stub CredUnmarshalTargetInfo @ stdcall DecryptMessage(ptr ptr long ptr) @ stdcall DeleteSecurityContext(ptr) -@ stub DeleteSecurityPackageA -@ stub DeleteSecurityPackageW +@ stdcall DeleteSecurityPackageA(str) +@ stdcall DeleteSecurityPackageW(wstr) @ stdcall EncryptMessage(ptr long ptr long) @ stdcall EnumerateSecurityPackagesA(ptr ptr) @ stdcall EnumerateSecurityPackagesW(ptr ptr) @@ -29,7 +22,7 @@ @ stdcall FreeCredentialsHandle(ptr) @ stdcall GetComputerObjectNameA(long ptr ptr) @ stdcall GetComputerObjectNameW(long ptr ptr) -@ stub GetSecurityUserInfo +@ stdcall GetSecurityUserInfo(ptr long ptr) @ stdcall GetUserNameExA(long ptr ptr) @ stdcall GetUserNameExW(long ptr ptr) @ stdcall ImpersonateSecurityContext(ptr) @@ -39,8 +32,15 @@ @ stdcall InitSecurityInterfaceW() @ stdcall InitializeSecurityContextA(ptr ptr str long long long ptr long ptr ptr ptr ptr) @ stdcall InitializeSecurityContextW(ptr ptr wstr long long long ptr long ptr ptr ptr ptr) +@ stdcall LsaCallAuthenticationPackage(long long ptr long ptr ptr ptr) +@ stdcall LsaConnectUntrusted(long) +@ stdcall LsaDeregisterLogonProcess(long) @ stdcall LsaEnumerateLogonSessions(ptr ptr) +@ stdcall LsaFreeReturnBuffer(ptr) @ stdcall LsaGetLogonSessionData(ptr ptr) +@ stdcall LsaLogonUser(ptr ptr long long ptr long ptr ptr ptr ptr ptr ptr ptr ptr) +@ stdcall LsaLookupAuthenticationPackage(ptr ptr ptr) +@ stdcall LsaRegisterLogonProcess(ptr ptr ptr) @ stdcall LsaRegisterPolicyChangeNotification(long ptr) @ stdcall LsaUnregisterPolicyChangeNotification(long ptr) @ stdcall MakeSignature(ptr long ptr long) @@ -64,7 +64,7 @@ @ stdcall SealMessage(ptr long ptr long) EncryptMessage @ stub SecCacheSspiPackages @ stub SecDeleteUserModeContext -@ stub SecGetLocaleSpecificEncryptionRules +@ stub SecGetLocaleSpecificEncryptionRules # not on win32k3 x64 @ stub SecInitUserModeContext @ stub SecpFreeMemory @ stub SecpTranslateName diff --git a/reactos/dll/win32/secur32/stubs.c b/reactos/dll/win32/secur32/stubs.c new file mode 100644 index 00000000000..e7003bc7eed --- /dev/null +++ b/reactos/dll/win32/secur32/stubs.c @@ -0,0 +1,56 @@ + + +#include + +#define NDEBUG +#include + +#define SEC_ENTRY WINAPI +#define STATUS_UNSUCCESSFUL ((SECURITY_STATUS)0x80000001) + +typedef LONG SECURITY_STATUS; +typedef PVOID PSECURITY_PACKAGE_OPTIONS, PSecurityUserData; + +SECURITY_STATUS +SEC_ENTRY +DeleteSecurityPackageA(LPSTR pszPackageName) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +SECURITY_STATUS +SEC_ENTRY +DeleteSecurityPackageW(LPWSTR pszPackageName) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +SECURITY_STATUS +SEC_ENTRY +AddSecurityPackageA(LPSTR pszPackageName, PSECURITY_PACKAGE_OPTIONS pOptions) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +SECURITY_STATUS +SEC_ENTRY +AddSecurityPackageW(LPWSTR pszPackageName, PSECURITY_PACKAGE_OPTIONS pOptions) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +SECURITY_STATUS +SEC_ENTRY +GetSecurityUserInfo( + PLUID LogonId, + ULONG Flags, + PSecurityUserData *UserInformation) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + diff --git a/reactos/dll/win32/security/security.spec b/reactos/dll/win32/security/security.spec index 953b2b673b0..14dd922c580 100644 --- a/reactos/dll/win32/security/security.spec +++ b/reactos/dll/win32/security/security.spec @@ -1,48 +1,27 @@ -@ stdcall LsaRegisterLogonProcess(ptr ptr ptr) secur32.LsaRegisterLogonProcess -@ stdcall LsaLogonUser(ptr ptr long long ptr long ptr ptr ptr ptr ptr ptr ptr ptr) secur32.LsaLogonUser -@ stdcall LsaDeregisterLogonProcess(long) secur32.LsaDeregisterLogonProcess -@ stdcall LsaConnectUntrusted(long) secur32.LsaConnectUntrusted -@ stdcall LsaLookupAuthenticationPackage(ptr ptr ptr) SECUR32.LsaLookupAuthenticationPackage -@ stdcall LsaFreeReturnBuffer(ptr) SECUR32.LsaFreeReturnBuffer -@ stdcall LsaCallAuthenticationPackage(long long ptr long ptr ptr ptr) SECUR32.LsaCallAuthenticationPackage @ stdcall AcceptSecurityContext(ptr ptr ptr long long ptr ptr ptr ptr) SECUR32.AcceptSecurityContext @ stdcall AcquireCredentialsHandleA(str str long ptr ptr ptr ptr ptr ptr) SECUR32.AcquireCredentialsHandleA @ stdcall AcquireCredentialsHandleW(wstr wstr long ptr ptr ptr ptr ptr ptr) SECUR32.AcquireCredentialsHandleW -@ stdcall AddCredentialsA(ptr str str long ptr ptr ptr ptr) SECUR32.AddCredentialsA -@ stdcall AddCredentialsW(ptr wstr wstr long ptr ptr ptr ptr) SECUR32.AddCredentialsW -@ stub AddSecurityPackageA # SECUR32.AddSecurityPackageA -@ stub AddSecurityPackageW # SECUR32.AddSecurityPackageW -@ stdcall ApplyControlTokenA(ptr ptr) SECUR32.ApplyControlTokenA -@ stdcall ApplyControlTokenW(ptr ptr) SECUR32.ApplyControlTokenW +@ stdcall AddSecurityPackageA(str ptr) SECUR32.AddSecurityPackageA +@ stdcall AddSecurityPackageW(wstr ptr) SECUR32.AddSecurityPackageW +@ stdcall ApplyControlToken(ptr ptr) SECUR32.ApplyControlToken @ stdcall CompleteAuthToken(ptr ptr) SECUR32.CompleteAuthToken -@ stub CredMarshalTargetInfo # SECUR32.CredMarshalTargetInfo -@ stub CredUnmarshalTargetInfo # SECUR32.CredUnmarshalTargetInfo @ stdcall DecryptMessage(ptr ptr long ptr) SECUR32.DecryptMessage @ stdcall DeleteSecurityContext(ptr) SECUR32.DeleteSecurityContext -@ stub DeleteSecurityPackageA # SECUR32.DeleteSecurityPackageA -@ stub DeleteSecurityPackageW # SECUR32.DeleteSecurityPackageW +@ stdcall DeleteSecurityPackageA(str) SECUR32.DeleteSecurityPackageA +@ stdcall DeleteSecurityPackageW(wstr) SECUR32.DeleteSecurityPackageW @ stdcall EncryptMessage(ptr long ptr long) SECUR32.EncryptMessage @ stdcall EnumerateSecurityPackagesA(ptr ptr) SECUR32.EnumerateSecurityPackagesA @ stdcall EnumerateSecurityPackagesW(ptr ptr) SECUR32.EnumerateSecurityPackagesW @ stdcall ExportSecurityContext(ptr long ptr ptr) SECUR32.ExportSecurityContext @ stdcall FreeContextBuffer(ptr) SECUR32.FreeContextBuffer @ stdcall FreeCredentialsHandle(ptr) SECUR32.FreeCredentialsHandle -@ stdcall GetComputerObjectNameA(long ptr ptr) SECUR32.GetComputerObjectNameA -@ stdcall GetComputerObjectNameW(long ptr ptr) SECUR32.GetComputerObjectNameW -@ stub GetSecurityUserInfo # SECUR32.GetSecurityUserInfo -@ stdcall GetUserNameExA(long ptr ptr) SECUR32.GetUserNameExA -@ stdcall GetUserNameExW(long ptr ptr) SECUR32.GetUserNameExW @ stdcall ImpersonateSecurityContext(ptr) SECUR32.ImpersonateSecurityContext @ stdcall ImportSecurityContextA(str ptr ptr ptr) SECUR32.ImportSecurityContextA @ stdcall ImportSecurityContextW(wstr ptr ptr ptr) SECUR32.ImportSecurityContextW -@ stdcall InitSecurityInterfaceA() SECUR32.InitSecurityInterfaceA -@ stdcall InitSecurityInterfaceW() SECUR32.InitSecurityInterfaceW @ stdcall InitializeSecurityContextA(ptr ptr str long long long ptr long ptr ptr ptr ptr) SECUR32.InitializeSecurityContextA @ stdcall InitializeSecurityContextW(ptr ptr wstr long long long ptr long ptr ptr ptr ptr) SECUR32.InitializeSecurityContextW -@ stdcall LsaEnumerateLogonSessions(ptr ptr) SECUR32.LsaEnumerateLogonSessions -@ stdcall LsaGetLogonSessionData(ptr ptr) SECUR32.LsaGetLogonSessionData -@ stdcall LsaRegisterPolicyChangeNotification(long ptr) SECUR32.LsaRegisterPolicyChangeNotification -@ stdcall LsaUnregisterPolicyChangeNotification(long ptr) SECUR32.LsaUnregisterPolicyChangeNotification +@ stdcall InitSecurityInterfaceA() SECUR32.InitSecurityInterfaceA +@ stdcall InitSecurityInterfaceW() SECUR32.InitSecurityInterfaceW @ stdcall MakeSignature(ptr long ptr long) SECUR32.MakeSignature @ stdcall QueryContextAttributesA(ptr long ptr) SECUR32.QueryContextAttributesA @ stdcall QueryContextAttributesW(ptr long ptr) SECUR32.QueryContextAttributesW @@ -52,26 +31,7 @@ @ stdcall QuerySecurityPackageInfoA(str ptr) SECUR32.QuerySecurityPackageInfoA @ stdcall QuerySecurityPackageInfoW(wstr ptr) SECUR32.QuerySecurityPackageInfoW @ stdcall RevertSecurityContext(ptr) SECUR32.RevertSecurityContext -@ stub SaslAcceptSecurityContext # SECUR32.SaslAcceptSecurityContext -@ stub SaslEnumerateProfilesA # SECUR32.SaslEnumerateProfilesA -@ stub SaslEnumerateProfilesW # SECUR32.SaslEnumerateProfilesW -@ stub SaslGetProfilePackageA # SECUR32.SaslGetProfilePackageA -@ stub SaslGetProfilePackageW # SECUR32.SaslGetProfilePackageW -@ stub SaslIdentifyPackageA # SECUR32.SaslIdentifyPackageA -@ stub SaslIdentifyPackageW # SECUR32.SaslIdentifyPackageW -@ stub SaslInitializeSecurityContextA # SECUR32.SaslInitializeSecurityContextA -@ stub SaslInitializeSecurityContextW # SECUR32.SaslInitializeSecurityContextW @ stdcall SealMessage(ptr long ptr long) SECUR32.EncryptMessage -@ stub SecCacheSspiPackages # SECUR32.SecCacheSspiPackages -@ stub SecDeleteUserModeContext # SECUR32.SecDeleteUserModeContext -@ stub SecGetLocaleSpecificEncryptionRules # SECUR32.SecGetLocaleSpecificEncryptionRules -@ stub SecInitUserModeContext # SECUR32.SecInitUserModeContext -@ stub SecpFreeMemory # SECUR32.SecpFreeMemory -@ stub SecpTranslateName # SECUR32.SecpTranslateName -@ stub SecpTranslateNameEx # SECUR32.SecpTranslateNameEx -@ stub SetContextAttributesA # SECUR32.SetContextAttributesA -@ stub SetContextAttributesW #SECUR32.SetContextAttributesW -@ stdcall TranslateNameA(str long long ptr ptr) SECUR32.TranslateNameA -@ stdcall TranslateNameW(wstr long long ptr ptr) SECUR32.TranslateNameW @ stdcall UnsealMessage(ptr ptr long ptr) SECUR32.DecryptMessage @ stdcall VerifySignature(ptr ptr long ptr) SECUR32.VerifySignature + diff --git a/reactos/dll/win32/shdocvw/shdocvw.spec b/reactos/dll/win32/shdocvw/shdocvw.spec index be59d85c06b..4f1cbf2209d 100644 --- a/reactos/dll/win32/shdocvw/shdocvw.spec +++ b/reactos/dll/win32/shdocvw/shdocvw.spec @@ -43,7 +43,7 @@ 158 stdcall -noname SHRestricted2A(long str long) 159 stdcall -noname SHRestricted2W(long wstr long) 160 stub -noname SHIsRestricted2W -161 stub @ # CSearchAssistantOC::OnDraw +161 stub shdocvw_161 # CSearchAssistantOC::OnDraw 162 stub -noname CDDEAuto_Navigate 163 stub SHAddSubscribeFavorite 164 stub -noname ResetProfileSharing @@ -66,7 +66,7 @@ 185 stub -noname FireEvent_Quit 187 stub -noname SHDGetPageLocation 188 stub -noname SHIEErrorMsgBox -189 stub @ # FIXME: same as ordinal 148 +189 stub shdocvw_189 # FIXME: same as ordinal 148 190 stub -noname SHRunIndirectRegClientCommandForward 191 stub -noname SHIsRegisteredClient 192 stub -noname SHGetHistoryPIDL @@ -75,7 +75,7 @@ 196 stub -noname IEDDE_WindowDestroyed 197 stub -noname IEDDE_NewWindow 198 stub -noname IsErrorUrl -199 stub @ +199 stub shdocvw_199 200 stub -noname SHGetViewStream 203 stub -noname NavToUrlUsingIEA 204 stub -noname NavToUrlUsingIEW @@ -91,7 +91,7 @@ 217 stub -noname GetDefaultInternetSearchUrlA 218 stdcall -noname IEParseDisplayNameWithBCW(long wstr ptr ptr) 219 stub -noname IEILIsEqual -220 stub @ +220 stub shdocvw_220 221 stub -noname IECreateFromPathCPWithBCA 222 stub -noname IECreateFromPathCPWithBCW 223 stub -noname ResetWebSettings diff --git a/reactos/dll/win32/shlwapi/shlwapi.spec b/reactos/dll/win32/shlwapi/shlwapi.spec index a277f50736a..a2b7799b72e 100644 --- a/reactos/dll/win32/shlwapi/shlwapi.spec +++ b/reactos/dll/win32/shlwapi/shlwapi.spec @@ -417,7 +417,7 @@ 417 stub -noname SHWinHelpOnDemandA 418 stdcall -noname MLFreeLibrary(long) 419 stdcall -noname SHFlushSFCacheWrap() -420 stub @ # CMemStream::Commit +420 stub SHLWAPI_420 # CMemStream::Commit 421 stub -noname SHLoadPersistedDataObject 422 stdcall -noname SHGlobalCounterCreateNamedA(str long) 423 stdcall -noname SHGlobalCounterCreateNamedW(wstr long) diff --git a/reactos/dll/win32/tapi32/tapi32.spec b/reactos/dll/win32/tapi32/tapi32.spec index 93e3a35d599..7310100206b 100644 --- a/reactos/dll/win32/tapi32/tapi32.spec +++ b/reactos/dll/win32/tapi32/tapi32.spec @@ -100,7 +100,7 @@ @ stub lineGetCountryW @ stdcall lineGetDevCaps(long long long long ptr) lineGetDevCapsA @ stdcall lineGetDevCapsA(long long long long ptr) -@ stub lineGetDevCapsW +@ stdcall lineGetDevCapsW(ptr long long long ptr) @ stdcall lineGetDevConfig(long ptr str) lineGetDevConfigA @ stdcall lineGetDevConfigA(long ptr str) @ stub lineGetDevConfigW @@ -108,7 +108,7 @@ @ stub lineGetGroupListW @ stdcall lineGetID(long long long long ptr str) lineGetIDA @ stdcall lineGetIDA(long long long long ptr str) -@ stub lineGetIDW +@ stdcall lineGetIDW(ptr long ptr long ptr ptr) @ stdcall lineGetIcon(long str ptr) lineGetIconA @ stdcall lineGetIconA(long str ptr) @ stub lineGetIconW @@ -120,7 +120,7 @@ @ stdcall lineGetNumRings(long long ptr) @ stdcall lineGetProviderList(long ptr) lineGetProviderListA @ stdcall lineGetProviderListA(long ptr) -@ stub lineGetProviderListW +@ stdcall lineGetProviderListW(long ptr) @ stub lineGetProxyStatus @ stub lineGetQueueInfo @ stub lineGetQueueInfoA @@ -141,7 +141,7 @@ @ stub lineInitializeExW @ stdcall lineMakeCall(long ptr str long ptr) lineMakeCallA @ stdcall lineMakeCallA(long ptr str long ptr) -@ stub lineMakeCallW +@ stdcall lineMakeCallW(ptr ptr ptr long ptr) @ stdcall lineMonitorDigits(long long) @ stdcall lineMonitorMedia(long long) @ stdcall lineMonitorTones(long ptr long) diff --git a/reactos/dll/win32/user32/misc/stubs.c b/reactos/dll/win32/user32/misc/stubs.c index 229c0a9bc7d..2b98a5c53b5 100644 --- a/reactos/dll/win32/user32/misc/stubs.c +++ b/reactos/dll/win32/user32/misc/stubs.c @@ -541,3 +541,94 @@ DWORD WINAPI UserRegisterWowHandlers(PVOID Unknown1, PVOID Unknown2) return 0; } +BOOL +WINAPI +BuildReasonArray(PVOID Pointer) +{ + UNIMPLEMENTED; + return FALSE; +} + +VOID +WINAPI +CreateSystemThreads(DWORD dwUnknown) +{ + NtUserCallOneParam(dwUnknown, ONEPARAM_ROUTINE_CREATESYSTEMTHREADS); +} + +BOOL +WINAPI +DestroyReasons(PVOID Pointer) +{ + UNIMPLEMENTED; + return FALSE; +} + +BOOL +WINAPI +DeviceEventWorker(DWORD dw1, DWORD dw2, DWORD dw3, DWORD dw4, DWORD dw5) +{ + UNIMPLEMENTED; + return FALSE; +} + +BOOL +WINAPI +GetCursorFrameInfo(DWORD dw1, DWORD dw2, DWORD dw3, DWORD dw4, DWORD dw5) +{ + UNIMPLEMENTED; + return FALSE; +} + +BOOL +WINAPI +GetReasonTitleFromReasonCode(DWORD dw1, DWORD dw2, DWORD dw3) +{ + UNIMPLEMENTED; + return FALSE; +} + +BOOL +WINAPI +RecordShutdownReason(DWORD dw0) +{ + UNIMPLEMENTED; + return FALSE; +} + +BOOL +WINAPI +UserLpkPSMTextOut(DWORD dw1, DWORD dw2, DWORD dw3, DWORD dw4, DWORD dw5, DWORD dw6) +{ + UNIMPLEMENTED; + return FALSE; +} + +BOOL +WINAPI +UserLpkTabbedTextOut( + DWORD dw1, + DWORD dw2, + DWORD dw3, + DWORD dw4, + DWORD dw5, + DWORD dw6, + DWORD dw7, + DWORD dw8, + DWORD dw9, + DWORD dw10, + DWORD dw11, + DWORD dw12) +{ + UNIMPLEMENTED; + return FALSE; +} + +BOOL +WINAPI +Win32PoolAllocationStats(DWORD dw1, DWORD dw2, DWORD dw3, DWORD dw4, DWORD dw5) +{ + UNIMPLEMENTED; + return FALSE; +} + diff --git a/reactos/dll/win32/winmm/winmm.spec b/reactos/dll/win32/winmm/winmm.spec index 870b7755bc3..9b600dbae7a 100644 --- a/reactos/dll/win32/winmm/winmm.spec +++ b/reactos/dll/win32/winmm/winmm.spec @@ -1,7 +1,7 @@ # ordinal exports 1 stdcall @(ptr long long) PlaySoundA -3 stub @ -4 stub @ +3 stub WINMM_3 +4 stub WINMM_4 @ stdcall CloseDriver(long long long) @ stdcall DefDriverProc(long long long long long) diff --git a/reactos/dll/win32/ws2_32/ws2_32.spec b/reactos/dll/win32/ws2_32/ws2_32.spec index afd1065719c..a99c870bd63 100644 --- a/reactos/dll/win32/ws2_32/ws2_32.spec +++ b/reactos/dll/win32/ws2_32/ws2_32.spec @@ -48,7 +48,7 @@ 151 stdcall __WSAFDIsSet(long ptr) -500 stub WEP +500 stdcall WEP() # @ stdcall GetAddrInfoW(wstr wstr ptr ptr) @ stdcall WSApSetPostRoutine(ptr) @@ -84,13 +84,13 @@ @ stdcall WSALookupServiceEnd(long) @ stdcall WSALookupServiceNextA(long long ptr ptr) @ stdcall WSALookupServiceNextW(long long ptr ptr) -@ stub WSANSPIoctl +@ stdcall WSANSPIoctl(ptr long ptr long ptr long ptr ptr) @ stdcall WSANtohl(long long ptr) @ stdcall WSANtohs(long long ptr) @ stdcall WSAProviderConfigChange(ptr ptr ptr) @ stdcall WSARecv(long ptr long ptr ptr ptr ptr) @ stdcall WSARecvDisconnect(long ptr) -@ stdcall WSARecvFrom(long ptr long ptr ptr ptr ptr ptr ptr ) +@ stdcall WSARecvFrom(long ptr long ptr ptr ptr ptr ptr ptr ) @ stdcall WSARemoveServiceClass(ptr) @ stdcall WSAResetEvent(long) kernel32.ResetEvent @ stdcall WSASend(long ptr long ptr long ptr ptr) @@ -111,8 +111,8 @@ @ stdcall WSCInstallNameSpace(wstr wstr long long ptr) @ stdcall WSCInstallProvider(ptr wstr ptr long ptr) @ stdcall WSCUnInstallNameSpace(ptr) -@ stub WSCUpdateProvider -@ stub WSCWriteNameSpaceOrder +@ stdcall WSCUpdateProvider(ptr ptr ptr long ptr) +@ stdcall WSCWriteNameSpaceOrder(ptr long) @ stdcall WSCWriteProviderOrder(ptr long) @ stdcall freeaddrinfo(ptr) @ stdcall getaddrinfo(str str ptr ptr) From f45c49b9d3429a20cd95046ca7faef310d3910da Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 11 Feb 2011 17:27:43 +0000 Subject: [PATCH 021/287] add stub files to build svn path=/trunk/; revision=50659 --- reactos/dll/directx/msdmo/msdmo.rbuild | 1 + reactos/dll/win32/activeds/activeds.rbuild | 1 + reactos/dll/win32/atl/atl.rbuild | 1 + reactos/dll/win32/browseui/browseui.rbuild | 1 + reactos/dll/win32/cabinet/cabinet.rbuild | 1 + reactos/dll/win32/comctl32/comctl32.rbuild | 1 + reactos/dll/win32/cryptdll/cryptdll.rbuild | 1 + reactos/dll/win32/loadperf/loadperf.rbuild | 1 + reactos/dll/win32/mapi32/mapi32.rbuild | 1 + reactos/dll/win32/msvcrt/msvcrt.rbuild | 1 + reactos/dll/win32/secur32/secur32.rbuild | 1 + 11 files changed, 11 insertions(+) diff --git a/reactos/dll/directx/msdmo/msdmo.rbuild b/reactos/dll/directx/msdmo/msdmo.rbuild index 5b2f1dbd258..b6dabb41476 100644 --- a/reactos/dll/directx/msdmo/msdmo.rbuild +++ b/reactos/dll/directx/msdmo/msdmo.rbuild @@ -5,6 +5,7 @@ dmoreg.c dmort.c + stubs.c rsrc.rc wine uuid diff --git a/reactos/dll/win32/activeds/activeds.rbuild b/reactos/dll/win32/activeds/activeds.rbuild index 7c8cda0340c..c878f82048a 100644 --- a/reactos/dll/win32/activeds/activeds.rbuild +++ b/reactos/dll/win32/activeds/activeds.rbuild @@ -6,5 +6,6 @@ wine activeds_main.c + stubs.c diff --git a/reactos/dll/win32/atl/atl.rbuild b/reactos/dll/win32/atl/atl.rbuild index d162664f4e7..85ec749ccc4 100644 --- a/reactos/dll/win32/atl/atl.rbuild +++ b/reactos/dll/win32/atl/atl.rbuild @@ -12,6 +12,7 @@ atl_main.c registrar.c rsrc.rc + stubs.c . wine uuid diff --git a/reactos/dll/win32/browseui/browseui.rbuild b/reactos/dll/win32/browseui/browseui.rbuild index 62900b7ecaf..63415e6f93e 100644 --- a/reactos/dll/win32/browseui/browseui.rbuild +++ b/reactos/dll/win32/browseui/browseui.rbuild @@ -43,5 +43,6 @@ toolsband.cpp travellog.cpp utility.cpp + dllinstall.c browseui.rc diff --git a/reactos/dll/win32/cabinet/cabinet.rbuild b/reactos/dll/win32/cabinet/cabinet.rbuild index 879a4a2af9c..75c64fe1014 100644 --- a/reactos/dll/win32/cabinet/cabinet.rbuild +++ b/reactos/dll/win32/cabinet/cabinet.rbuild @@ -9,6 +9,7 @@ cabinet_main.c fci.c fdi.c + stubs.c cabinet.rc wine ntdll diff --git a/reactos/dll/win32/comctl32/comctl32.rbuild b/reactos/dll/win32/comctl32/comctl32.rbuild index 958edb05d11..15ed84c0602 100644 --- a/reactos/dll/win32/comctl32/comctl32.rbuild +++ b/reactos/dll/win32/comctl32/comctl32.rbuild @@ -46,6 +46,7 @@ trackbar.c treeview.c updown.c + stubs.c rsrc.rc uuid wine diff --git a/reactos/dll/win32/cryptdll/cryptdll.rbuild b/reactos/dll/win32/cryptdll/cryptdll.rbuild index 3d351306b05..125d364b750 100644 --- a/reactos/dll/win32/cryptdll/cryptdll.rbuild +++ b/reactos/dll/win32/cryptdll/cryptdll.rbuild @@ -9,4 +9,5 @@ advapi32 ntdll cryptdll.c + stubs.c diff --git a/reactos/dll/win32/loadperf/loadperf.rbuild b/reactos/dll/win32/loadperf/loadperf.rbuild index 82a17fb25ef..015f95fbd9d 100644 --- a/reactos/dll/win32/loadperf/loadperf.rbuild +++ b/reactos/dll/win32/loadperf/loadperf.rbuild @@ -6,6 +6,7 @@ include/reactos/wine loadperf_main.c + stubs.c wine ntdll diff --git a/reactos/dll/win32/mapi32/mapi32.rbuild b/reactos/dll/win32/mapi32/mapi32.rbuild index 4832457070b..3426b46957f 100644 --- a/reactos/dll/win32/mapi32/mapi32.rbuild +++ b/reactos/dll/win32/mapi32/mapi32.rbuild @@ -11,6 +11,7 @@ prop.c sendmail.c util.c + stubs.c version.rc wine shlwapi diff --git a/reactos/dll/win32/msvcrt/msvcrt.rbuild b/reactos/dll/win32/msvcrt/msvcrt.rbuild index 513de0f5520..eef606663f6 100644 --- a/reactos/dll/win32/msvcrt/msvcrt.rbuild +++ b/reactos/dll/win32/msvcrt/msvcrt.rbuild @@ -21,5 +21,6 @@ pseh precomp.h dllmain.c + stubs.c msvcrt.rc diff --git a/reactos/dll/win32/secur32/secur32.rbuild b/reactos/dll/win32/secur32/secur32.rbuild index d75e9266efb..68db02d8ea6 100644 --- a/reactos/dll/win32/secur32/secur32.rbuild +++ b/reactos/dll/win32/secur32/secur32.rbuild @@ -9,6 +9,7 @@ dllmain.c secext.c sspi.c + stubs.c secur32.rc precomp.h From 8ce4c3ffdbe7d7f9adf380dd53e579cdff888f0e Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 11 Feb 2011 17:41:05 +0000 Subject: [PATCH 022/287] Add missing stubs.h svn path=/trunk/; revision=50661 --- reactos/include/reactos/stubs.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 reactos/include/reactos/stubs.h diff --git a/reactos/include/reactos/stubs.h b/reactos/include/reactos/stubs.h new file mode 100644 index 00000000000..0dcbf20be81 --- /dev/null +++ b/reactos/include/reactos/stubs.h @@ -0,0 +1,16 @@ + +#include +#include "windef.h" +#include "winbase.h" +#include "wine/config.h" +#include "wine/exception.h" + +#include + +#define __wine_spec_unimplemented_stub(module, function) \ +{ \ + ULONG_PTR args[2]; \ + args[0] = (ULONG_PTR)module; \ + args[1] = (ULONG_PTR)function; \ + RaiseException( EXCEPTION_WINE_STUB, EH_NONCONTINUABLE, 2, args ); \ +} From 1fdb5b918fb106663850fbe79baf68a1ad6450b8 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 11 Feb 2011 18:05:48 +0000 Subject: [PATCH 023/287] try to fix build svn path=/trunk/; revision=50662 --- reactos/dll/directx/msdmo/stubs.c | 2 +- reactos/dll/win32/atl/stubs.c | 4 ++-- reactos/dll/win32/cabinet/stubs.c | 2 +- reactos/dll/win32/cryptdll/stubs.c | 2 +- reactos/dll/win32/loadperf/stubs.c | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/reactos/dll/directx/msdmo/stubs.c b/reactos/dll/directx/msdmo/stubs.c index dfafe7afd49..1b4dee9a72f 100644 --- a/reactos/dll/directx/msdmo/stubs.c +++ b/reactos/dll/directx/msdmo/stubs.c @@ -1,7 +1,7 @@ #include #define NDEBUG -#include +#include void WINAPI diff --git a/reactos/dll/win32/atl/stubs.c b/reactos/dll/win32/atl/stubs.c index a35e3dc6508..01f22de9199 100644 --- a/reactos/dll/win32/atl/stubs.c +++ b/reactos/dll/win32/atl/stubs.c @@ -1,5 +1,5 @@ #include -#include +#include #define ATLAPI_(x) x WINAPI #define ATLAPI ATLAPI_(HRESULT) @@ -31,7 +31,7 @@ AtlSetErrorInfo( return E_NOTIMPL; } -ATLAPI_(LPDEVMODEA) +ATLAPI_(LPDEVMODEA) AtlDevModeW2A(LPDEVMODEA lpDevModeA, LPDEVMODEW lpDevModeW) { UNIMPLEMENTED; diff --git a/reactos/dll/win32/cabinet/stubs.c b/reactos/dll/win32/cabinet/stubs.c index d57a544020d..e0469cb5ae4 100644 --- a/reactos/dll/win32/cabinet/stubs.c +++ b/reactos/dll/win32/cabinet/stubs.c @@ -1,5 +1,5 @@ #include -#include +#include typedef PVOID PSESSION; diff --git a/reactos/dll/win32/cryptdll/stubs.c b/reactos/dll/win32/cryptdll/stubs.c index 230ce09d74c..86bee19fa34 100644 --- a/reactos/dll/win32/cryptdll/stubs.c +++ b/reactos/dll/win32/cryptdll/stubs.c @@ -1,7 +1,7 @@ #include #define NDEBUG -#include +#include void WINAPI CDBuildIntegrityVect(DWORD Unknown1, DWORD Unknown2) diff --git a/reactos/dll/win32/loadperf/stubs.c b/reactos/dll/win32/loadperf/stubs.c index bd172d27924..e319f10ecfc 100644 --- a/reactos/dll/win32/loadperf/stubs.c +++ b/reactos/dll/win32/loadperf/stubs.c @@ -1,7 +1,7 @@ #include #define NDEBUG -#include +#include #define LOADPERF_FUNCTION DWORD WINAPI From eaf8e05a46680d99dbe2acd66e30867feb14e71c Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 11 Feb 2011 21:22:18 +0000 Subject: [PATCH 024/287] [NTDLL_APITEST] some printf tests svn path=/trunk/; revision=50663 --- rostests/apitests/ntdll/sprintf.c | 524 ++++++++++++++++++++++++++++++ 1 file changed, 524 insertions(+) create mode 100644 rostests/apitests/ntdll/sprintf.c diff --git a/rostests/apitests/ntdll/sprintf.c b/rostests/apitests/ntdll/sprintf.c new file mode 100644 index 00000000000..470713adfac --- /dev/null +++ b/rostests/apitests/ntdll/sprintf.c @@ -0,0 +1,524 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: GPL - See COPYING in the top level directory + * PURPOSE: Test for sprintf + * PROGRAMMER: Timo Kreuzer + */ + +#include +#include +#include +#include +#include +#include +#include + + +#define ok_str(x, y) \ + ok(strcmp(x, y) == 0, "got '%s', expected '%s'\n", x, y); + +#define ok_int(x, y) \ + ok(x == y, "got %d, expected %d\n", x, y); + +int (*p_vsprintf)(char *buf, const char *fmt, va_list argptr); + + +int +my_sprintf(char *buf, const char *format, ...) +{ + const TCHAR * fmt = format; + va_list argptr; + + va_start(argptr, format); + return p_vsprintf(buf, fmt, argptr); +} + +int +my_swprintf(wchar_t *buf, const wchar_t *format, ...) +{ + const wchar_t * fmt = format; + va_list argptr; + + va_start(argptr, format); + return _vsnwprintf(buf, MAXLONG, fmt, argptr); +} + +#define sprintf(buf, format, ...) my_sprintf(buf, format, __VA_ARGS__); +#define swprintf(buf, format, ...) my_swprintf((wchar_t*)buf, format, __VA_ARGS__); + +void +test_c() +{ + char buffer[64]; + + sprintf(buffer, "%c", 0x3031); + ok_str(buffer, "1"); + + sprintf(buffer, "%hc", 0x3031); + ok_str(buffer, "1"); + + sprintf(buffer, "%wc", 0x3031); + ok_str(buffer, "?"); + + sprintf(buffer, "%lc", 0x3031); + ok_str(buffer, "?"); + + sprintf(buffer, "%Lc", 0x3031); + ok_str(buffer, "1"); + + sprintf(buffer, "%Ic", 0x3031); + ok_str(buffer, "Ic"); + + sprintf(buffer, "%Iwc", 0x3031); + ok_str(buffer, "Iwc"); + + sprintf(buffer, "%I32c", 0x3031); + ok_str(buffer, "1"); + + sprintf(buffer, "%I64c", 0x3031); + ok_str(buffer, "1"); + + sprintf(buffer, "%4c", 0x3031); + ok_str(buffer, " 1"); + + sprintf(buffer, "%04c", 0x3031); + ok_str(buffer, "0001"); + + sprintf(buffer, "%+4c", 0x3031); + ok_str(buffer, " 1"); + +} + +void +test_d() +{ + char buffer[5000]; + int result; + + sprintf(buffer, "%d", 1234567); + ok_str(buffer, "1234567"); + + sprintf(buffer, "%d", -1234567); + ok_str(buffer, "-1234567"); + + sprintf(buffer, "%hd", 1234567); + ok_str(buffer, "-10617"); + + sprintf(buffer, "%08d", 1234); + ok_str(buffer, "00001234"); + + sprintf(buffer, "%-08d", 1234); + ok_str(buffer, "1234 "); + + sprintf(buffer, "%+08d", 1234); + ok_str(buffer, "+0001234"); + + sprintf(buffer, "%+3d", 1234); + ok_str(buffer, "+1234"); + + sprintf(buffer, "%3.3d", 1234); + ok_str(buffer, "1234"); + + sprintf(buffer, "%3.6d", 1234); + ok_str(buffer, "001234"); + + sprintf(buffer, "%8d", -1234); + ok_str(buffer, " -1234"); + + sprintf(buffer, "%08d", -1234); + ok_str(buffer, "-0001234"); + + sprintf(buffer, "%ld", -1234); + ok_str(buffer, "-1234"); + + sprintf(buffer, "%wd", -1234); + ok_str(buffer, "-1234"); + + sprintf(buffer, "%ld", -5149074030855LL); + ok_str(buffer, "591757049"); + + sprintf(buffer, "%lld", -5149074030855LL); + ok_str(buffer, "591757049"); + + sprintf(buffer, "%I64d", -5149074030855LL); + ok_str(buffer, "-5149074030855"); + + sprintf(buffer, "%Ld", -5149074030855LL); + ok_str(buffer, "591757049"); + + sprintf(buffer, "%lhwI64d", -5149074030855LL); + ok_str(buffer, "-5149074030855"); + + sprintf(buffer, "%I64hlwd", -5149074030855LL); + ok_str(buffer, "-5149074030855"); + + sprintf(buffer, "%hlwd", -5149074030855LL); + ok_str(buffer, "32505"); + + sprintf(buffer, "%Ild", -5149074030855LL); + ok_str(buffer, "Ild"); + + sprintf(buffer, "%hd", -5149074030855LL); + ok_str(buffer, "32505"); + + sprintf(buffer, "%hhd", -5149074030855LL); + ok_str(buffer, "32505"); + + sprintf(buffer, "%hI32hd", -5149074030855LL); + ok_str(buffer, "32505"); + + sprintf(buffer, "%wd", -5149074030855LL); + ok_str(buffer, "591757049"); + + result = sprintf(buffer, " %d.%d", 3, 0); + ok_int(result, 4); + +} + +void +test_u() +{ + char buffer[64]; + + sprintf(buffer, "%u", 1234); + ok_str(buffer, "1234"); + + sprintf(buffer, "%u", -1234); + ok_str(buffer, "4294966062"); + + sprintf(buffer, "%lu", -1234); + ok_str(buffer, "4294966062"); + + sprintf(buffer, "%llu", -1234); + ok_str(buffer, "4294966062"); + + sprintf(buffer, "%+u", 1234); + ok_str(buffer, "1234"); + + sprintf(buffer, "% u", 1234); + ok_str(buffer, "1234"); + +} + +void +test_x() +{ + char buffer[64]; + + sprintf(buffer, "%x", 0x1234abcd); + ok_str(buffer, "1234abcd"); + + sprintf(buffer, "%X", 0x1234abcd); + ok_str(buffer, "1234ABCD"); + + sprintf(buffer, "%#x", 0x1234abcd); + ok_str(buffer, "0x1234abcd"); + + sprintf(buffer, "%#X", 0x1234abcd); + ok_str(buffer, "0X1234ABCD"); + + /* "0x" is contained in the field length */ + sprintf(buffer, "%#012X", 0x1234abcd); + ok_str(buffer, "0X001234ABCD"); + + sprintf(buffer, "%llx", 0x1234abcd5678ULL); + ok_str(buffer, "abcd5678"); + + sprintf(buffer, "%I64x", 0x1234abcd5678ULL); + ok_str(buffer, "1234abcd5678"); + +} + +void +test_p() +{ + char buffer[64]; + + sprintf(buffer, "%p", (void*)(ptrdiff_t)0x123abc); + ok_str(buffer, "00123ABC"); + + sprintf(buffer, "%#p", (void*)(ptrdiff_t)0x123abc); + ok_str(buffer, "0X00123ABC"); + + sprintf(buffer, "%#012p", (void*)(ptrdiff_t)0x123abc); + ok_str(buffer, " 0X00123ABC"); + + sprintf(buffer, "%9p", (void*)(ptrdiff_t)0x123abc); + ok_str(buffer, " 00123ABC"); + + sprintf(buffer, "%09p", (void*)(ptrdiff_t)0x123abc); + ok_str(buffer, " 00123ABC"); + + sprintf(buffer, "% 9p", (void*)(ptrdiff_t)0x123abc); + ok_str(buffer, " 00123ABC"); + + sprintf(buffer, "%-9p", (void*)(ptrdiff_t)0x123abc); + ok_str(buffer, "00123ABC "); + + sprintf(buffer, "%4p", (void*)(ptrdiff_t)0x123abc); + ok_str(buffer, "00123ABC"); + + sprintf(buffer, "%9.4p", (void*)(ptrdiff_t)0x123abc); + ok_str(buffer, " 00123ABC"); + + sprintf(buffer, "%I64p", 0x123abc456789ULL); + ok_str(buffer, "123ABC456789"); + + sprintf(buffer, "%hp", 0x123abc); + ok_str(buffer, "00003ABC"); + +} + +void +test_o() +{ + TCHAR buffer[64]; + + sprintf(buffer, "%o", 1234); + ok_str(buffer, "2322"); + + sprintf(buffer, "%o", -1234); + ok_str(buffer, "37777775456"); + +} + +void +test_s() +{ + char buffer[64]; + + sprintf(buffer, "%s", "test"); + ok_str(buffer, "test"); + + sprintf(buffer, "%S", L"test"); + ok_str(buffer, "test"); + + sprintf(buffer, "%ls", L"test"); + ok_str(buffer, "test"); + + sprintf(buffer, "%ws", L"test"); + ok_str(buffer, "test"); + + sprintf(buffer, "%hs", "test"); + ok_str(buffer, "test"); + + sprintf(buffer, "%hS", "test"); + ok_str(buffer, "test"); + + sprintf(buffer, "%7s", "test"); + ok_str(buffer, " test"); + + sprintf(buffer, "%07s", "test"); + ok_str(buffer, "000test"); + + sprintf(buffer, "%.3s", "test"); + ok_str(buffer, "tes"); + + sprintf(buffer, "%+7.3s", "test"); + ok_str(buffer, " tes"); + + sprintf(buffer, "%+4.0s", "test"); + ok_str(buffer, " "); + + +} + +void +test_n() +{ + int len = 123; + __int64 len64; + char buffer[64]; + + sprintf(buffer, "%07s%n", "test", &len); + ok_int(len, 7); + + len = 0x12345678; + sprintf(buffer, "%s%hn", "test", &len); + ok_int(len, 0x12340004); + + len = 0x12345678; + sprintf(buffer, "%s%hhn", "test", &len); + ok_int(len, 0x12340004); + + len64 = 0x0123456781234567ULL; + sprintf(buffer, "%s%lln", "test", &len64); + ok(len64 == 0x123456700000004ULL, " "); + +} + +void +test_f() +{ + char buffer[128]; + long double fpval; + + fpval = 1. / 3.; + sprintf(buffer, "%f", fpval); + ok_str(buffer, "-0.000000"); + + sprintf(buffer, "%lf", fpval); + ok_str(buffer, "-0.000000"); + + sprintf(buffer, "%llf", fpval); + ok_str(buffer, "-0.000000"); + + sprintf(buffer, "%Lf", fpval); + ok_str(buffer, "-0.000000"); + + sprintf(buffer, "%f", (double)fpval); + ok_str(buffer, "0.333333"); + + sprintf(buffer, "%f", (double)0.125); + ok_str(buffer, "0.125000"); + + sprintf(buffer, "%3.7f", (double)fpval); + ok_str(buffer, "0.3333333"); + + sprintf(buffer, "%3.30f", (double)fpval); + ok_str(buffer, "0.333333333333333310000000000000"); + + sprintf(buffer, "%3.60f", (double)fpval); + ok_str(buffer, "0.333333333333333310000000000000000000000000000000000000000000"); + + sprintf(buffer, "%3.80f", (double)fpval); + ok_str(buffer, "0.33333333333333331000000000000000000000000000000000000000000000000000000000000000"); + + fpval = 1. / 0.; + sprintf(buffer, "%f", fpval); + ok_str(buffer, "0.000000"); + + sprintf(buffer, "%f", 0x7ff8000000000000ULL); // NAN + ok_str(buffer, "1.#QNAN0"); + + sprintf(buffer, "%.9f", 0x7ff8000000000000ULL); + ok_str(buffer, "1.#QNAN0000"); + + sprintf(buffer, "%f", 0x7ff0000000000000ULL ); // INFINITY + ok_str(buffer, "1.#INF00"); + + sprintf(buffer, "%f", 0xfff0000000000000ULL ); // -INFINITY + ok_str(buffer, "-1.#INF00"); + + sprintf(buffer, "%f", 0xfff8000000000000ULL); // broken + ok_str(buffer, "-1.#IND00"); + +} + +void +test_e() +{ + char buffer[128]; + long double fpval; + + fpval = 1. / 3.; + sprintf(buffer, "%e", fpval); + ok_str(buffer, "-3.720662e-103"); + + fpval = 1. / 3.; + sprintf(buffer, "%e", (double)fpval); + ok_str(buffer, "3.333333e-001"); + + sprintf(buffer, "%e", 33.54223); + ok_str(buffer, "3.354223e+001"); + + sprintf(buffer, "%e", NAN); + ok_str(buffer, "1.#QNAN0e+000"); + + sprintf(buffer, "%.9e", NAN); + ok_str(buffer, "1.#QNAN0000e+000"); + + sprintf(buffer, "%e", INFINITY ); + ok_str(buffer, "1.#INF00e+000"); + + sprintf(buffer, "%e", -INFINITY ); + ok_str(buffer, "-1.#INF00e+000"); + + +} + +typedef struct _STRING +{ + unsigned short Length; + unsigned short MaximumLength; + void *Buffer; +} STRING; + +void +test_Z() +{ + char buffer[128]; + STRING string; + int result; + + string.Buffer = "Test\0Hallo"; + string.Length = 4; + string.MaximumLength = 5; + + sprintf(buffer, "%Z", &string); + ok_str(buffer, "Test"); + + string.Length = 8; + sprintf(buffer, "%Z", &string); + ok_str(buffer, "Test"); + + string.Length = 3; + sprintf(buffer, "%Z", &string); + ok_str(buffer, "Tes"); + + string.Buffer = 0; + sprintf(buffer, "%Z", &string); + ok_str(buffer, "(null)"); + + sprintf(buffer, "%Z", 0); + ok_str(buffer, "(null)"); + + string.Buffer = (char*)L"Test\0Hallo"; + string.Length = 8; + string.MaximumLength = 10; + + + string.Buffer = (char*)L"test"; + string.Length = 12; + string.MaximumLength = 15; + result = _snprintf(buffer, 127, "%Z %u%c", &string, 1, 0); + ok_int(result, 15); + +} + +void +test_other() +{ + char buffer[128]; + + sprintf(buffer, "%lI64wQ", "test"); + ok_str(buffer, "Q"); + +} + +START_TEST(sprintf) +{ + HANDLE hModule; + + hModule = GetModuleHandleA("msvcrt.dll"); + if (!hModule) return; + p_vsprintf = (PVOID)GetProcAddress(hModule, "vsprintf"); + if (!p_vsprintf) return; + + test_c(); + test_d(); + test_u(); + test_x(); + test_p(); + test_o(); + + test_s(); + + test_f(); + test_e(); + test_Z(); + + test_n(); + test_other(); +} + From 6dddb1823b126c10d0d44ca2a625100e9afdf267 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sat, 12 Feb 2011 09:28:41 +0000 Subject: [PATCH 025/287] [NDK] - Add RTL_TRACE_BLOCK structure definition. svn path=/trunk/; revision=50665 --- reactos/include/ndk/rtltypes.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/reactos/include/ndk/rtltypes.h b/reactos/include/ndk/rtltypes.h index 6d393c2b1e0..c211ccada3c 100644 --- a/reactos/include/ndk/rtltypes.h +++ b/reactos/include/ndk/rtltypes.h @@ -1285,6 +1285,18 @@ typedef struct _STACK_TRACE_DATABASE RTL_CRITICAL_SECTION CriticalSection; } STACK_TRACE_DATABASE, *PSTACK_TRACE_DATABASE; +typedef struct _RTL_TRACE_BLOCK +{ + ULONG Magic; + ULONG Count; + ULONG Size; + ULONG UserCount; + ULONG UserSize; + PVOID UserContext; + struct _RTL_TRACE_BLOCK *Next; + PVOID *Trace; +} RTL_TRACE_BLOCK, *PRTL_TRACE_BLOCK; + #ifndef NTOS_MODE_USER // From 04bef099e65fe4a43ae3d8c2932a5fc9ca474404 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sat, 12 Feb 2011 16:38:00 +0000 Subject: [PATCH 026/287] [RTL/DPH] - Add core DPH (Debug Page Heap) structures based on Windows 2003/Vista. - Add misc generic support routines. - Implement DPH version of RtlCreateHeap(). - Debug prints match those printed by Windows 2003. svn path=/trunk/; revision=50667 --- reactos/dll/ntdll/ldr/startup.c | 12 +- reactos/lib/rtl/heappage.c | 488 +++++++++++++++++++++++++++++++- 2 files changed, 491 insertions(+), 9 deletions(-) diff --git a/reactos/dll/ntdll/ldr/startup.c b/reactos/dll/ntdll/ldr/startup.c index 2b5ae0140a9..06b90b07558 100644 --- a/reactos/dll/ntdll/ldr/startup.c +++ b/reactos/dll/ntdll/ldr/startup.c @@ -74,9 +74,9 @@ LoadImageFileExecutionOptions(PPEB Peb) UNICODE_STRING ImageName; UNICODE_STRING ImagePathName; ULONG ValueSize; - extern ULONG RtlpPageHeapGlobalFlags, RtlpPageHeapSizeRangeStart, RtlpPageHeapSizeRangeEnd; + extern ULONG RtlpDphGlobalFlags, RtlpPageHeapSizeRangeStart, RtlpPageHeapSizeRangeEnd; extern ULONG RtlpPageHeapDllRangeStart, RtlpPageHeapDllRangeEnd; - extern WCHAR RtlpPageHeapTargetDlls[512]; + extern WCHAR RtlpDphTargetDlls[512]; extern BOOLEAN RtlpPageHeapEnabled; if (Peb->ProcessParameters && @@ -144,8 +144,8 @@ LoadImageFileExecutionOptions(PPEB Peb) LdrQueryImageFileExecutionOptions(&ImageName, L"PageHeapFlags", REG_DWORD, - (PVOID)&RtlpPageHeapGlobalFlags, - sizeof(RtlpPageHeapGlobalFlags), + (PVOID)&RtlpDphGlobalFlags, + sizeof(RtlpDphGlobalFlags), &ValueSize); LdrQueryImageFileExecutionOptions(&ImageName, @@ -179,8 +179,8 @@ LoadImageFileExecutionOptions(PPEB Peb) LdrQueryImageFileExecutionOptions(&ImageName, L"PageHeapTargetDlls", REG_SZ, - (PVOID)RtlpPageHeapTargetDlls, - sizeof(RtlpPageHeapTargetDlls), + (PVOID)RtlpDphTargetDlls, + sizeof(RtlpDphTargetDlls), &ValueSize); /* Now when all parameters are read, enable page heap */ diff --git a/reactos/lib/rtl/heappage.c b/reactos/lib/rtl/heappage.c index a953d4ceb39..fb9ba898d06 100644 --- a/reactos/lib/rtl/heappage.c +++ b/reactos/lib/rtl/heappage.c @@ -17,14 +17,368 @@ #define NDEBUG #include +/* TYPES **********************************************************************/ + +typedef struct _DPH_BLOCK_INFORMATION +{ + ULONG StartStamp; + PVOID Heap; + ULONG RequestedSize; + ULONG ActualSize; + union + { + LIST_ENTRY FreeQueue; + SINGLE_LIST_ENTRY FreePushList; + WORD TraceIndex; + }; + PVOID StackTrace; + ULONG EndStamp; +} DPH_BLOCK_INFORMATION, *PDPH_BLOCK_INFORMATION; + +typedef struct _DPH_HEAP_BLOCK +{ + union + { + struct _DPH_HEAP_BLOCK *pNextAlloc; + LIST_ENTRY AvailableEntry; + RTL_BALANCED_LINKS TableLinks; + }; + PUCHAR pUserAllocation; + PUCHAR pVirtualBlock; + ULONG nVirtualBlockSize; + ULONG nVirtualAccessSize; + ULONG nUserRequestedSize; + ULONG nUserActualSize; + PVOID UserValue; + ULONG UserFlags; + PRTL_TRACE_BLOCK StackTrace; + LIST_ENTRY AdjacencyEntry; + PUCHAR pVirtualRegion; +} DPH_HEAP_BLOCK, *PDPH_HEAP_BLOCK; + +typedef struct _DPH_HEAP_ROOT +{ + ULONG Signature; + ULONG HeapFlags; + PRTL_CRITICAL_SECTION HeapCritSect; + ULONG nRemoteLockAcquired; + + PDPH_HEAP_BLOCK pVirtualStorageListHead; + PDPH_HEAP_BLOCK pVirtualStorageListTail; + ULONG nVirtualStorageRanges; + ULONG nVirtualStorageBytes; + + RTL_AVL_TABLE BusyNodesTable; + PDPH_HEAP_BLOCK NodeToAllocate; + ULONG nBusyAllocations; + ULONG nBusyAllocationBytesCommitted; + + PDPH_HEAP_BLOCK pFreeAllocationListHead; + PDPH_HEAP_BLOCK pFreeAllocationListTail; + ULONG nFreeAllocations; + ULONG nFreeAllocationBytesCommitted; + + LIST_ENTRY AvailableAllocationHead; + ULONG nAvailableAllocations; + ULONG nAvailableAllocationBytesCommitted; + + PDPH_HEAP_BLOCK pUnusedNodeListHead; + PDPH_HEAP_BLOCK pUnusedNodeListTail; + ULONG nUnusedNodes; + ULONG nBusyAllocationBytesAccessible; + PDPH_HEAP_BLOCK pNodePoolListHead; + PDPH_HEAP_BLOCK pNodePoolListTail; + ULONG nNodePools; + ULONG nNodePoolBytes; + + LIST_ENTRY NextHeap; + ULONG ExtraFlags; + ULONG Seed; + PVOID NormalHeap; + PRTL_TRACE_BLOCK CreateStackTrace; + PVOID FirstThread; +} DPH_HEAP_ROOT, *PDPH_HEAP_ROOT; + +/* GLOBALS ********************************************************************/ + BOOLEAN RtlpPageHeapEnabled = FALSE; -ULONG RtlpPageHeapGlobalFlags; +ULONG RtlpDphGlobalFlags; ULONG RtlpPageHeapSizeRangeStart, RtlpPageHeapSizeRangeEnd; ULONG RtlpPageHeapDllRangeStart, RtlpPageHeapDllRangeEnd; -WCHAR RtlpPageHeapTargetDlls[512]; +WCHAR RtlpDphTargetDlls[512]; + +ULONG RtlpDphBreakOptions; +ULONG RtlpDphDebugOptions; + +LIST_ENTRY RtlpDphPageHeapList; +BOOLEAN RtlpDphPageHeapListInitialized; +RTL_CRITICAL_SECTION RtlpDphPageHeapListLock; +ULONG RtlpDphPageHeapListLength; +UNICODE_STRING RtlpDphTargetDllsUnicode; + +/* Counters */ +LONG RtlpDphCounter; +LONG RtlpDphAllocFails; +LONG RtlpDphReleaseFails; +LONG RtlpDphFreeFails; +LONG RtlpDphProtectFails; + +#define DPH_RESERVE_SIZE 0x100000 +#define DPH_POOL_SIZE 0x4000 + +/* RtlpDphBreakOptions */ +#define DPH_BREAK_ON_RESERVE_FAIL 0x01 +#define DPH_BREAK_ON_COMMIT_FAIL 0x02 +#define DPH_BREAK_ON_RELEASE_FAIL 0x04 +#define DPH_BREAK_ON_FREE_FAIL 0x08 +#define DPH_BREAK_ON_PROTECT_FAIL 0x10 + +/* RtlpDphDebugOptions */ +#define DPH_DEBUG_INTERNAL_VALIDATE 0x01 +#define DPH_DEBUG_VERBOSE 0x04 + +/* Fillers */ +#define DPH_FILL 0xEEEEEEEE + +/* Signatures */ +#define DPH_SIGNATURE 0xFFEEDDCC /* FUNCTIONS ******************************************************************/ +NTSTATUS NTAPI +RtlpSecMemFreeVirtualMemory(HANDLE Process, PVOID *Base, PSIZE_T Size, ULONG Type) +{ + NTSTATUS Status; + //PVOID *SavedBase = Base; + //PSIZE_T SavedSize = Size; + + /* Free the memory */ + Status = ZwFreeVirtualMemory(Process, Base, Size, Type); + + /* Flush secure memory cache if needed and retry freeing */ +#if 0 + if (Status == STATUS_INVALID_PAGE_PROTECTION && + Process == NtCurrentProcess() && + RtlFlushSecureMemoryCache(*SavedBase, *SavedSize)) + { + Status = ZwFreeVirtualMemory(NtCurrentProcess(), SavedBase, SavedSize, Type); + } +#endif + + return Status; +} + +NTSTATUS NTAPI +RtlpDphAllocateVm(PVOID *Base, SIZE_T Size, ULONG Type, ULONG Protection) +{ + NTSTATUS Status; + Status = ZwAllocateVirtualMemory(NtCurrentProcess(), + Base, + 0, + &Size, + Type, + Protection); + + /* Check for failures */ + if (!NT_SUCCESS(Status)) + { + if (Type == MEM_RESERVE) + { + _InterlockedIncrement(&RtlpDphCounter); + if (RtlpDphBreakOptions & DPH_BREAK_ON_RESERVE_FAIL) + { + DPRINT1("Page heap: AllocVm (%p, %p, %x) failed with %x \n", Base, Size, Type, Status); + DbgBreakPoint(); + return Status; + } + } + else + { + _InterlockedIncrement(&RtlpDphAllocFails); + if (RtlpDphBreakOptions & DPH_BREAK_ON_COMMIT_FAIL) + { + DPRINT1("Page heap: AllocVm (%p, %p, %x) failed with %x \n", Base, Size, Type, Status); + DbgBreakPoint(); + return Status; + } + } + } + + return Status; +} + +NTSTATUS NTAPI +RtlpDphFreeVm(PVOID Base, SIZE_T Size, ULONG Type, ULONG Protection) +{ + NTSTATUS Status; + + /* Free the memory */ + Status = RtlpSecMemFreeVirtualMemory(NtCurrentProcess(), &Base, &Size, Type); + + /* Log/report failures */ + if (!NT_SUCCESS(Status)) + { + if (Type == MEM_RELEASE) + { + _InterlockedIncrement(&RtlpDphReleaseFails); + if (RtlpDphBreakOptions & DPH_BREAK_ON_RELEASE_FAIL) + { + DPRINT1("Page heap: FreeVm (%p, %p, %x) failed with %x \n", Base, Size, Type, Status); + DbgBreakPoint(); + return Status; + } + } + else + { + _InterlockedIncrement(&RtlpDphFreeFails); + if (RtlpDphBreakOptions & DPH_BREAK_ON_FREE_FAIL) + { + DPRINT1("Page heap: FreeVm (%p, %p, %x) failed with %x \n", Base, Size, Type, Status); + DbgBreakPoint(); + return Status; + } + } + } + + return Status; +} + +NTSTATUS NTAPI +RtlpDphProtectVm(PVOID Base, SIZE_T Size, ULONG Protection) +{ + NTSTATUS Status; + ULONG OldProtection; + + /* Change protection */ + Status = ZwProtectVirtualMemory(NtCurrentProcess(), &Base, &Size, Protection, &OldProtection); + + /* Log/report failures */ + if (!NT_SUCCESS(Status)) + { + _InterlockedIncrement(&RtlpDphProtectFails); + if (RtlpDphBreakOptions & DPH_BREAK_ON_PROTECT_FAIL) + { + DPRINT1("Page heap: ProtectVm (%p, %p, %x) failed with %x \n", Base, Size, Protection, Status); + DbgBreakPoint(); + return Status; + } + } + + return Status; +} + +VOID NTAPI +RtlpDphAddNewPool(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK NodeBlock, PVOID Virtual, SIZE_T Size, BOOLEAN Add) +{ + UNIMPLEMENTED; +} + +PDPH_HEAP_BLOCK NTAPI +RtlpDphAllocateNode(PDPH_HEAP_ROOT DphRoot) +{ + UNIMPLEMENTED; + return NULL; +} + +VOID NTAPI +RtlpDphPlaceOnPoolList(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK DphNode) +{ + UNIMPLEMENTED; +} + +VOID NTAPI +RtlpDphPlaceOnVirtualList(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK DphNode) +{ + UNIMPLEMENTED; +} + +VOID NTAPI +RtlpDphCoalesceNodeIntoAvailable(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK DphNode) +{ + UNIMPLEMENTED; +} + +RTL_GENERIC_COMPARE_RESULTS +NTAPI +RtlpDphCompareNodeForTable(IN PRTL_AVL_TABLE Table, + IN PVOID FirstStruct, + IN PVOID SecondStruct) +{ + /* FIXME: TODO */ + ASSERT(FALSE); + return 0; +} + +PVOID +NTAPI +RtlpDphAllocateNodeForTable(IN PRTL_AVL_TABLE Table, + IN CLONG ByteSize) +{ + /* FIXME: TODO */ + ASSERT(FALSE); + return NULL; +} + +VOID +NTAPI +RtlpDphFreeNodeForTable(IN PRTL_AVL_TABLE Table, + IN PVOID Buffer) +{ + /* FIXME: TODO */ + ASSERT(FALSE); +} + +NTSTATUS NTAPI +RtlpDphInitializeDelayedFreeQueue() +{ + UNIMPLEMENTED; + return STATUS_SUCCESS; +} + +NTSTATUS NTAPI +RtlpDphTargetDllsLogicInitialize() +{ + UNIMPLEMENTED; + return STATUS_SUCCESS; +} + +VOID NTAPI +RtlpDphInternalValidatePageHeap(PDPH_HEAP_ROOT DphRoot, PVOID Address, ULONG Value) +{ + UNIMPLEMENTED; +} + +NTSTATUS NTAPI +RtlpDphProcessStartupInitialization() +{ + NTSTATUS Status; + PTEB Teb = NtCurrentTeb(); + + /* Initialize the DPH heap list and its critical section */ + InitializeListHead(&RtlpDphPageHeapList); + Status = RtlInitializeCriticalSection(&RtlpDphPageHeapListLock); + if (!NT_SUCCESS(Status)) + { + ASSERT(FALSE); + return Status; + } + + /* Initialize delayed-free queue */ + Status = RtlpDphInitializeDelayedFreeQueue(); + if (!NT_SUCCESS(Status)) return Status; + + /* Initialize the target dlls string */ + RtlInitUnicodeString(&RtlpDphTargetDllsUnicode, RtlpDphTargetDlls); + Status = RtlpDphTargetDllsLogicInitialize(); + + /* Per-process DPH init is done */ + RtlpDphPageHeapListInitialized = TRUE; + + DPRINT1("Page heap: pid 0x%X: page heap enabled with flags 0x%X.\n", Teb->ClientId.UniqueProcess, RtlpDphGlobalFlags); + + return Status; +} + HANDLE NTAPI RtlpPageHeapCreate(ULONG Flags, PVOID Addr, @@ -33,7 +387,135 @@ RtlpPageHeapCreate(ULONG Flags, PVOID Lock, PRTL_HEAP_PARAMETERS Parameters) { - return NULL; + PVOID Base; + PHEAP HeapPtr; + PDPH_HEAP_ROOT DphRoot; + PDPH_HEAP_BLOCK DphNode; + ULONG MemSize; + NTSTATUS Status; + LARGE_INTEGER PerfCounter; + + /* Check for a DPH bypass flag */ + if ((ULONG_PTR)Parameters == -1) return NULL; + + /* Make sure no user-allocated stuff was provided */ + if (Addr || Lock) return NULL; + + /* Allocate minimum amount of virtual memory */ + MemSize = DPH_RESERVE_SIZE; + Status = RtlpDphAllocateVm(&Base, MemSize, MEM_COMMIT, PAGE_NOACCESS); + if (!NT_SUCCESS(Status)) + { + ASSERT(FALSE); + return NULL; + } + + /* Set protection */ + Status = RtlpDphProtectVm(Base, 2*PAGE_SIZE + DPH_POOL_SIZE, PAGE_READWRITE); + if (!NT_SUCCESS(Status)) + { + //RtlpDphFreeVm(Base, 0, 0, 0); + ASSERT(FALSE); + return NULL; + } + + /* Start preparing the 1st page. Fill it with the default filler */ + RtlFillMemory(Base, PAGE_SIZE, DPH_FILL); + + /* Set flags in the "HEAP" structure */ + HeapPtr = (PHEAP)Base; + HeapPtr->Flags = Flags | HEAP_FLAG_PAGE_ALLOCS; + HeapPtr->ForceFlags = Flags | HEAP_FLAG_PAGE_ALLOCS; + + /* Set 1st page to read only now */ + Status = RtlpDphProtectVm(Base, PAGE_SIZE, PAGE_READONLY); + if (!NT_SUCCESS(Status)) + { + ASSERT(FALSE); + return NULL; + } + + /* 2nd page is the real DPH root block */ + DphRoot = (PDPH_HEAP_ROOT)((PCHAR)Base + PAGE_SIZE); + + /* Initialize the DPH root */ + DphRoot->Signature = DPH_SIGNATURE; + DphRoot->HeapFlags = Flags; + DphRoot->HeapCritSect = (PRTL_CRITICAL_SECTION)((PCHAR)DphRoot + DPH_POOL_SIZE); + DphRoot->ExtraFlags = RtlpDphGlobalFlags; + + ZwQueryPerformanceCounter(&PerfCounter, NULL); + DphRoot->Seed = PerfCounter.LowPart; + + RtlInitializeCriticalSection(DphRoot->HeapCritSect); + + /* Create a normal heap for this paged heap */ + DphRoot->NormalHeap = RtlCreateHeap(Flags, NULL, TotalSize, CommitSize, NULL, (PRTL_HEAP_PARAMETERS)-1); + if (!DphRoot->NormalHeap) + { + ASSERT(FALSE); + return NULL; + } + + /* 3rd page: a pool for DPH allocations */ + RtlpDphAddNewPool(DphRoot, NULL, DphRoot + 1, DPH_POOL_SIZE - sizeof(DPH_HEAP_ROOT), FALSE); + + /* Allocate internal heap blocks. For the root */ + DphNode = RtlpDphAllocateNode(DphRoot); + ASSERT(DphNode != NULL); + DphNode->pVirtualBlock = (PUCHAR)DphRoot; + DphNode->nVirtualBlockSize = DPH_POOL_SIZE; + RtlpDphPlaceOnPoolList(DphRoot, DphNode); + + /* For the memory we allocated as a whole */ + DphNode = RtlpDphAllocateNode(DphRoot); + ASSERT(DphNode != NULL); + DphNode->pVirtualBlock = Base; + DphNode->nVirtualBlockSize = MemSize; + RtlpDphPlaceOnVirtualList(DphRoot, DphNode); + + /* For the remaining part */ + DphNode = RtlpDphAllocateNode(DphRoot); + ASSERT(DphNode != NULL); + DphNode->pVirtualBlock = (PUCHAR)Base + 2*PAGE_SIZE + DPH_POOL_SIZE; + DphNode->nVirtualBlockSize = MemSize - (2*PAGE_SIZE + DPH_POOL_SIZE); + RtlpDphCoalesceNodeIntoAvailable(DphRoot, DphNode); + + //DphRoot->CreateStackTrace = RtlpDphLogStackTrace(1); + + /* Initialize AVL-based busy nodes table */ + RtlInitializeGenericTableAvl(&DphRoot->BusyNodesTable, + RtlpDphCompareNodeForTable, + RtlpDphAllocateNodeForTable, + RtlpDphFreeNodeForTable, + NULL); + + /* Initialize per-process startup info */ + if (!RtlpDphPageHeapListInitialized) RtlpDphProcessStartupInitialization(); + + /* Acquire the heap list lock */ + RtlEnterCriticalSection(&RtlpDphPageHeapListLock); + + /* Insert this heap to the tail of the global list */ + InsertTailList(&RtlpDphPageHeapList, &DphRoot->NextHeap); + + /* Note we increased the size of the list */ + RtlpDphPageHeapListLength++; + + /* Release the heap list lock */ + RtlLeaveCriticalSection(&RtlpDphPageHeapListLock); + + if (RtlpDphDebugOptions & DPH_DEBUG_VERBOSE) + { + DPRINT1("Page heap: process 0x%X created heap @ %p (%p, flags 0x%X)\n", + NtCurrentTeb()->ClientId.UniqueProcess, (PUCHAR)DphRoot - PAGE_SIZE, DphRoot->NormalHeap, DphRoot->ExtraFlags); + } + + /* Perform internal validation if required */ + if (RtlpDphDebugOptions & DPH_DEBUG_INTERNAL_VALIDATE) + RtlpDphInternalValidatePageHeap(DphRoot, NULL, 0); + + return (PUCHAR)DphRoot - PAGE_SIZE; } PVOID NTAPI From 14dadc959190485c16299250ff0ee4b90f2ea297 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 12 Feb 2011 16:55:08 +0000 Subject: [PATCH 027/287] [COMCTL32] Fix bitmap resources. They were not very valid. Windows didn't even load them. Probably created with some linux tool *cough* Fixes part of the broken icons. Not the pink ones though. svn path=/trunk/; revision=50668 --- reactos/dll/win32/comctl32/idb_hist_large.bmp | Bin 11642 -> 11574 bytes reactos/dll/win32/comctl32/idb_hist_small.bmp | Bin 5242 -> 5174 bytes reactos/dll/win32/comctl32/idb_std_large.bmp | Bin 34682 -> 34614 bytes reactos/dll/win32/comctl32/idb_std_small.bmp | Bin 15482 -> 15414 bytes reactos/dll/win32/comctl32/idb_view_large.bmp | Bin 27770 -> 27702 bytes reactos/dll/win32/comctl32/idb_view_small.bmp | Bin 12410 -> 12342 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/reactos/dll/win32/comctl32/idb_hist_large.bmp b/reactos/dll/win32/comctl32/idb_hist_large.bmp index b7818fbafb22c45a5b4a6ccbec91fad9304fe51f..c6aee0bb37ac56ad7f10551b8fa5f4ab4da189b9 100644 GIT binary patch delta 51 xcmewrwJl2C$=6Jm0SwH5qy`XI0I>uRGcqVJFiez}Tv*FA`3_U!=DSRDwE*uRGcqVJFi(`1H2%-P06{=OhX0Hp5(;p#HyUy< NO?2SeY{~Rj3jj8w4lDow diff --git a/reactos/dll/win32/comctl32/idb_hist_small.bmp b/reactos/dll/win32/comctl32/idb_hist_small.bmp index c735f54377f2ca6dfd890857db294ff983ff8d6e..2ae50010edba99890341d7913f7426dd285bba6a 100644 GIT binary patch delta 46 scmeyRu}wqX$=6JT0SwH5qy`WN0I>iNGcqVJFiez}oLH;4aqeAV0IN_44gdfE delta 102 zcmdm{@k>MA$+t>`0Su~uWDXDq0I>iNGcqVJFi(`1H2%-P06{=OhX0Hp5(;p#CmL!_ M77)(bxT{7O0PLF$r~m)} diff --git a/reactos/dll/win32/comctl32/idb_std_large.bmp b/reactos/dll/win32/comctl32/idb_std_large.bmp index 7e19185c92939d9e868fca6bd41e1c7e8b66e32a..c10dc72da1bf0c87fe817f29135d21ffc7178d27 100644 GIT binary patch delta 53 zcmey>$F!}FN#4oVtepW2%z&f@5N9wlFh~GtMg|22hKcf$8*A6FPU2wQtjp%x2mlsb B3O4`% delta 102 zcmdni$Mma@N#4n~s+|E0s(@q;5N9wlFh~GtMg|22=85u>`u`aiAPA)FKTsA9u(BuD Qaq4e$n9REQDQjRO0BlqcLjV8( diff --git a/reactos/dll/win32/comctl32/idb_std_small.bmp b/reactos/dll/win32/comctl32/idb_std_small.bmp index 7db2f3ca805be4790328e915c0bc3de23759b58c..aedd4a861cfef482c5c807657fc0c62192861184 100644 GIT binary patch delta 43 pcmexWv8_Vh$=A$=0SwH5qy`Xw0Ac|kW@J!cV3;T`xv}P-H2}ea2yXxY delta 99 zcmdm1@vB1K$+yae0Su~uWDXF20Ac|kW@J!cV4f&1Y5bpo0fK;n4F4HHBoyFePiABk J-e~p58UQ_`4b=bu diff --git a/reactos/dll/win32/comctl32/idb_view_large.bmp b/reactos/dll/win32/comctl32/idb_view_large.bmp index 22e4d1d8b8b9b38df34ff20ed450ec161d2f8045..ce4ea4f4c1b15e1af1af27bc0202973f4a5d00db 100644 GIT binary patch delta 50 ycmex$gK^spMtLV+vm6F6FawerK&-&Xz#svn85tB97$(X~Zmd1ZxY?1(G7A6-KMBDA delta 105 zcmdmXgYnl5MtLXSsvHI|r~;B8rUD}ag9MOfWKdvWo+vMA{GWjVf Date: Sat, 12 Feb 2011 17:40:51 +0000 Subject: [PATCH 028/287] - Revert 45676 - It appears that the definitions for IID_IUnknown differ for kernel mode COM and user mode COM svn path=/trunk/; revision=50669 --- reactos/include/ddk/punknown.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/include/ddk/punknown.h b/reactos/include/ddk/punknown.h index 9b801f71e4e..29dae3c82bc 100644 --- a/reactos/include/ddk/punknown.h +++ b/reactos/include/ddk/punknown.h @@ -32,7 +32,7 @@ extern "C" { #define __IUnknown_INTERFACE_DEFINED__ DEFINE_GUID(IID_IUnknown, - 0x00000000, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46); + 0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x46); #undef INTERFACE #define INTERFACE IUnknown From 641cb1f0f0b717d6df00aac3588651394cfd8a50 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sat, 12 Feb 2011 18:39:17 +0000 Subject: [PATCH 029/287] [NTOSKRNL] For both FsRtlIsNameInExpression & FsRtlIsDbcsInExpression: - Remove useless checks - Move redundant sum before loop, so it's done only once - Fix handling of * wildcard This fixes failing kmtest tests added in r50614 svn path=/trunk/; revision=50670 --- reactos/ntoskrnl/fsrtl/dbcsname.c | 36 ++++++++++++++++++++----------- reactos/ntoskrnl/fsrtl/name.c | 35 ++++++++++++++++++++---------- 2 files changed, 48 insertions(+), 23 deletions(-) diff --git a/reactos/ntoskrnl/fsrtl/dbcsname.c b/reactos/ntoskrnl/fsrtl/dbcsname.c index 5b67c30dc1c..cdde1269e1b 100644 --- a/reactos/ntoskrnl/fsrtl/dbcsname.c +++ b/reactos/ntoskrnl/fsrtl/dbcsname.c @@ -160,7 +160,7 @@ NTAPI FsRtlIsDbcsInExpression(IN PANSI_STRING Expression, IN PANSI_STRING Name) { - USHORT ExpressionPosition = 0, NamePosition = 0, MatchingChars; + USHORT ExpressionPosition = 0, NamePosition = 0, MatchingChars, StarFound = MAXUSHORT; PAGED_CODE(); ASSERT(Name->Length); @@ -169,34 +169,37 @@ FsRtlIsDbcsInExpression(IN PANSI_STRING Expression, while (NamePosition < Name->Length && ExpressionPosition < Expression->Length) { - if ((Expression->Buffer[ExpressionPosition] == Name->Buffer[NamePosition]) || - (Expression->Buffer[ExpressionPosition] == '?') || (Expression->Buffer[ExpressionPosition] == ANSI_DOS_QM) || - (Expression->Buffer[ExpressionPosition] == ANSI_DOS_DOT && Name->Buffer[NamePosition] == '.')) + if ((Expression->Buffer[ExpressionPosition] == Name->Buffer[NamePosition])) { NamePosition++; ExpressionPosition++; } + else if ((Expression->Buffer[ExpressionPosition] == '?') || (Expression->Buffer[ExpressionPosition] == ANSI_DOS_QM) || + (Expression->Buffer[ExpressionPosition] == ANSI_DOS_DOT && Name->Buffer[NamePosition] == '.')) + { + NamePosition++; + ExpressionPosition++; + StarFound = MAXUSHORT; + } else if (Expression->Buffer[ExpressionPosition] == '*') { - if (ExpressionPosition < (Expression->Length - 1)) + StarFound = ExpressionPosition++; + if (StarFound < (Expression->Length - 1)) { - if (Expression->Buffer[ExpressionPosition+1] != '*' && Expression->Buffer[ExpressionPosition+1] != '?' && - Expression->Buffer[ExpressionPosition+1] != ANSI_DOS_DOT && - Expression->Buffer[ExpressionPosition+1] != ANSI_DOS_QM && - Expression->Buffer[ExpressionPosition+1] != ANSI_DOS_STAR) + while (Name->Buffer[NamePosition] != Expression->Buffer[ExpressionPosition] && + NamePosition < Name->Length) { - while (Name->Buffer[NamePosition] != Expression->Buffer[ExpressionPosition+1] && - NamePosition < Name->Length) NamePosition++; + NamePosition++; } } else { NamePosition = Name->Length; } - ExpressionPosition++; } else if (Expression->Buffer[ExpressionPosition] == ANSI_DOS_STAR) { + StarFound = MAXUSHORT; MatchingChars = NamePosition; while (MatchingChars < Name->Length) { @@ -208,6 +211,15 @@ FsRtlIsDbcsInExpression(IN PANSI_STRING Expression, } ExpressionPosition++; } + else if (StarFound != MAXUSHORT) + { + ExpressionPosition = StarFound + 1; + while (Name->Buffer[NamePosition] != Expression->Buffer[ExpressionPosition] && + NamePosition < Name->Length) + { + NamePosition++; + } + } else { NamePosition = Name->Length; diff --git a/reactos/ntoskrnl/fsrtl/name.c b/reactos/ntoskrnl/fsrtl/name.c index fc4d7400141..0712a2b38ad 100644 --- a/reactos/ntoskrnl/fsrtl/name.c +++ b/reactos/ntoskrnl/fsrtl/name.c @@ -22,40 +22,44 @@ FsRtlIsNameInExpressionPrivate(IN PUNICODE_STRING Expression, IN BOOLEAN IgnoreCase, IN PWCHAR UpcaseTable OPTIONAL) { - USHORT ExpressionPosition = 0, NamePosition = 0, MatchingChars; + USHORT ExpressionPosition = 0, NamePosition = 0, MatchingChars, StarFound = MAXUSHORT; PAGED_CODE(); ASSERT(!IgnoreCase || UpcaseTable); while (NamePosition < Name->Length / sizeof(WCHAR) && ExpressionPosition < Expression->Length / sizeof(WCHAR)) { - if ((Expression->Buffer[ExpressionPosition] == (IgnoreCase ? UpcaseTable[Name->Buffer[NamePosition]] : Name->Buffer[NamePosition])) || - (Expression->Buffer[ExpressionPosition] == L'?') || (Expression->Buffer[ExpressionPosition] == DOS_QM) || - (Expression->Buffer[ExpressionPosition] == DOS_DOT && Name->Buffer[NamePosition] == L'.')) + if ((Expression->Buffer[ExpressionPosition] == (IgnoreCase ? UpcaseTable[Name->Buffer[NamePosition]] : Name->Buffer[NamePosition]))) { NamePosition++; ExpressionPosition++; } + else if (Expression->Buffer[ExpressionPosition] == L'?' || (Expression->Buffer[ExpressionPosition] == DOS_QM) || + (Expression->Buffer[ExpressionPosition] == DOS_DOT && Name->Buffer[NamePosition] == L'.')) + { + NamePosition++; + ExpressionPosition++; + StarFound = MAXUSHORT; + } else if (Expression->Buffer[ExpressionPosition] == L'*') { - if (ExpressionPosition < (Expression->Length / sizeof(WCHAR) - 1)) + StarFound = ExpressionPosition++; + if (StarFound < (Expression->Length / sizeof(WCHAR) - 1)) { - if (Expression->Buffer[ExpressionPosition+1] != L'*' && Expression->Buffer[ExpressionPosition+1] != L'?' && - Expression->Buffer[ExpressionPosition+1] != DOS_DOT && Expression->Buffer[ExpressionPosition+1] != DOS_QM && - Expression->Buffer[ExpressionPosition+1] != DOS_STAR) + while ((IgnoreCase ? UpcaseTable[Name->Buffer[NamePosition]] : Name->Buffer[NamePosition]) != Expression->Buffer[ExpressionPosition] && + NamePosition < Name->Length / sizeof(WCHAR)) { - while ((IgnoreCase ? UpcaseTable[Name->Buffer[NamePosition]] : Name->Buffer[NamePosition]) != Expression->Buffer[ExpressionPosition+1] && - NamePosition < Name->Length / sizeof(WCHAR)) NamePosition++; + NamePosition++; } } else { NamePosition = Name->Length / sizeof(WCHAR); } - ExpressionPosition++; } else if (Expression->Buffer[ExpressionPosition] == DOS_STAR) { + StarFound = MAXUSHORT; MatchingChars = NamePosition; while (MatchingChars < Name->Length / sizeof(WCHAR)) { @@ -67,6 +71,15 @@ FsRtlIsNameInExpressionPrivate(IN PUNICODE_STRING Expression, } ExpressionPosition++; } + else if (StarFound != MAXUSHORT) + { + ExpressionPosition = StarFound + 1; + while ((IgnoreCase ? UpcaseTable[Name->Buffer[NamePosition]] : Name->Buffer[NamePosition]) != Expression->Buffer[ExpressionPosition] && + NamePosition < Name->Length / sizeof(WCHAR)) + { + NamePosition++; + } + } else { NamePosition = Name->Length / sizeof(WCHAR); From db2351ec56583dd2222335483a52546a6ccb71d9 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Sat, 12 Feb 2011 18:55:52 +0000 Subject: [PATCH 030/287] - Fix a bug where a spinlock was acquired on not initialized local variable svn path=/trunk/; revision=50673 --- reactos/drivers/ksfilter/ks/swenum.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/reactos/drivers/ksfilter/ks/swenum.c b/reactos/drivers/ksfilter/ks/swenum.c index 08d5286bd58..8430b64a1f4 100644 --- a/reactos/drivers/ksfilter/ks/swenum.c +++ b/reactos/drivers/ksfilter/ks/swenum.c @@ -1156,12 +1156,12 @@ KspBusWorkerRoutine( BOOLEAN DoInvalidate = FALSE; KIRQL OldLevel; - /* acquire lock */ - KeAcquireSpinLock(&BusDeviceExtension->Lock, &OldLevel); - /* get device extension */ BusDeviceExtension = (PBUS_ENUM_DEVICE_EXTENSION)Parameter; + /* acquire lock */ + KeAcquireSpinLock(&BusDeviceExtension->Lock, &OldLevel); + /* get current time */ KeQuerySystemTime(&Time); From f0395ac74ae103ec92efa85709e2f669887431af Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 12 Feb 2011 20:23:16 +0000 Subject: [PATCH 031/287] [ADVAPI32] Move file encryption functions from crypt/crypt.c to misc/efs.c. svn path=/trunk/; revision=50675 --- reactos/dll/win32/advapi32/crypt/crypt.c | 121 --------------------- reactos/dll/win32/advapi32/misc/efs.c | 128 ++++++++++++++++++++++- 2 files changed, 126 insertions(+), 123 deletions(-) diff --git a/reactos/dll/win32/advapi32/crypt/crypt.c b/reactos/dll/win32/advapi32/crypt/crypt.c index ee2380cee90..e7c04c5478c 100644 --- a/reactos/dll/win32/advapi32/crypt/crypt.c +++ b/reactos/dll/win32/advapi32/crypt/crypt.c @@ -2217,124 +2217,3 @@ BOOL WINAPI CryptVerifySignatureA (HCRYPTHASH hHash, CONST BYTE *pbSignature, DW return result; } - -/* - * @unimplemented - */ -DWORD WINAPI AddUsersToEncryptedFile ( - LPCWSTR lpcwstr, - PENCRYPTION_CERTIFICATE_LIST pencryption_certificate_list - ) -{ - FIXME("%s() not implemented!\n", __FUNCTION__); - return ERROR_CALL_NOT_IMPLEMENTED; -} - -/* - * @unimplemented - */ -DWORD WINAPI RemoveUsersFromEncryptedFile ( - LPCWSTR lpcwstr, - PENCRYPTION_CERTIFICATE_HASH_LIST pencryption_certificate_hash_list - ) -{ - FIXME("%s() not implemented!\n", __FUNCTION__); - return ERROR_CALL_NOT_IMPLEMENTED; -} - -/* - * @unimplemented - */ -BOOL WINAPI FileEncryptionStatusW ( - LPCWSTR lpFileName, - LPDWORD lpStatus - ) -{ - FIXME("%s(%S) not implemented!\n", __FUNCTION__, lpFileName); - if (!lpStatus) - return FALSE; - *lpStatus = FILE_SYSTEM_NOT_SUPPORT; - return TRUE; -} - - -/* - * @implemented - */ -BOOL WINAPI FileEncryptionStatusA ( - LPCSTR lpFileName, - LPDWORD lpStatus - ) -{ - UNICODE_STRING FileName; - NTSTATUS Status; - BOOL ret = FALSE; - - TRACE("(%s, %p)\n", lpFileName, lpStatus); - - FileName.Buffer = NULL; - - Status = RtlCreateUnicodeStringFromAsciiz(&FileName, lpFileName); - if (!NT_SUCCESS(Status)) - { - SetLastError(RtlNtStatusToDosError(Status)); - goto cleanup; - } - ret = FileEncryptionStatusW(FileName.Buffer, lpStatus); - -cleanup: - if (FileName.Buffer != NULL) - RtlFreeUnicodeString(&FileName); - return ret; -} - -/* - * @unimplemented - */ -DWORD WINAPI QueryUsersOnEncryptedFile ( - LPCWSTR lpctstr, - PENCRYPTION_CERTIFICATE_HASH_LIST* pencryption_certificate_hash_list - ) -{ - FIXME("%s() not implemented!\n", __FUNCTION__); - return ERROR_CALL_NOT_IMPLEMENTED; -} - - -/* - * @unimplemented - */ -void WINAPI FreeEncryptionCertificateHashList ( - PENCRYPTION_CERTIFICATE_HASH_LIST pencryption_certificate_hash_list - ) -{ - FIXME("%s() not implemented!\n", __FUNCTION__); - return; -} - - -/* - * @unimplemented - */ -DWORD WINAPI QueryRecoveryAgentsOnEncryptedFile ( - LPCWSTR lpctstr, - PENCRYPTION_CERTIFICATE_HASH_LIST* pencryption_certificate_hash_list - ) -{ - FIXME("%s() not implemented!\n", __FUNCTION__); - return ERROR_CALL_NOT_IMPLEMENTED; -} - -/* - * @unimplemented - */ -BOOL WINAPI EncryptionDisable( - LPCWSTR DirPath, - BOOL Disable - ) -{ - FIXME("%s() not implemented!\n", __FUNCTION__); - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return FALSE; -} - diff --git a/reactos/dll/win32/advapi32/misc/efs.c b/reactos/dll/win32/advapi32/misc/efs.c index 11fb8e588ed..51f4111368a 100644 --- a/reactos/dll/win32/advapi32/misc/efs.c +++ b/reactos/dll/win32/advapi32/misc/efs.c @@ -12,11 +12,24 @@ WINE_DEFAULT_DEBUG_CHANNEL(advapi); +/* + * @unimplemented + */ +DWORD WINAPI +AddUsersToEncryptedFile(LPCWSTR lpcwstr, + PENCRYPTION_CERTIFICATE_LIST pencryption_certificate_list) +{ + FIXME("%s() not implemented!\n", __FUNCTION__); + return ERROR_CALL_NOT_IMPLEMENTED; +} + + /* * @implemented */ BOOL WINAPI -DecryptFileA(LPCSTR lpFileName, DWORD dwReserved) +DecryptFileA(LPCSTR lpFileName, + DWORD dwReserved) { UNICODE_STRING FileName; NTSTATUS Status; @@ -40,7 +53,9 @@ DecryptFileA(LPCSTR lpFileName, DWORD dwReserved) /* * @unimplemented */ -BOOL WINAPI DecryptFileW(LPCWSTR lpFileName, DWORD dwReserved) +BOOL WINAPI +DecryptFileW(LPCWSTR lpFileName, + DWORD dwReserved) { FIXME("%s(%S) not implemented!\n", __FUNCTION__, lpFileName); return TRUE; @@ -82,4 +97,113 @@ EncryptFileW(LPCWSTR lpFileName) return TRUE; } + +/* + * @unimplemented + */ +BOOL WINAPI +EncryptionDisable(LPCWSTR DirPath, + BOOL Disable) +{ + FIXME("%s() not implemented!\n", __FUNCTION__); + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return FALSE; +} + + +/* + * @implemented + */ +BOOL WINAPI +FileEncryptionStatusA(LPCSTR lpFileName, + LPDWORD lpStatus) +{ + UNICODE_STRING FileName; + NTSTATUS Status; + BOOL ret = FALSE; + + TRACE("(%s, %p)\n", lpFileName, lpStatus); + + FileName.Buffer = NULL; + + Status = RtlCreateUnicodeStringFromAsciiz(&FileName, lpFileName); + if (!NT_SUCCESS(Status)) + { + SetLastError(RtlNtStatusToDosError(Status)); + goto cleanup; + } + + ret = FileEncryptionStatusW(FileName.Buffer, lpStatus); + +cleanup: + if (FileName.Buffer != NULL) + RtlFreeUnicodeString(&FileName); + + return ret; +} + +/* + * @unimplemented + */ +BOOL WINAPI +FileEncryptionStatusW(LPCWSTR lpFileName, + LPDWORD lpStatus) +{ + FIXME("%s(%S) not implemented!\n", __FUNCTION__, lpFileName); + + if (!lpStatus) + return FALSE; + + *lpStatus = FILE_SYSTEM_NOT_SUPPORT; + + return TRUE; +} + + +/* + * @unimplemented + */ +VOID WINAPI +FreeEncryptionCertificateHashList(PENCRYPTION_CERTIFICATE_HASH_LIST pencryption_certificate_hash_list) +{ + FIXME("%s() not implemented!\n", __FUNCTION__); + return; +} + + +/* + * @unimplemented + */ +DWORD WINAPI +QueryRecoveryAgentsOnEncryptedFile(LPCWSTR lpctstr, + PENCRYPTION_CERTIFICATE_HASH_LIST* pencryption_certificate_hash_list) +{ + FIXME("%s() not implemented!\n", __FUNCTION__); + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* + * @unimplemented + */ +DWORD WINAPI +QueryUsersOnEncryptedFile(LPCWSTR lpctstr, + PENCRYPTION_CERTIFICATE_HASH_LIST* pencryption_certificate_hash_list) +{ + FIXME("%s() not implemented!\n", __FUNCTION__); + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/* + * @unimplemented + */ +DWORD WINAPI +RemoveUsersFromEncryptedFile(LPCWSTR lpcwstr, + PENCRYPTION_CERTIFICATE_HASH_LIST pencryption_certificate_hash_list) +{ + FIXME("%s() not implemented!\n", __FUNCTION__); + return ERROR_CALL_NOT_IMPLEMENTED; +} + /* EOF */ From f1debffcdaf70f5330c586678ea903d5e2c6a556 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 12 Feb 2011 20:30:09 +0000 Subject: [PATCH 032/287] [WIN32K] Handle BITMAPV4HEADER and BITMAPV5HEADER, when creating a DIB palette. Detect PAL_RGB like done with PAL_BGR in PALETTE_AllocPalette (optimization). Fixes pink icons. svn path=/trunk/; revision=50676 --- reactos/subsystems/win32/win32k/objects/dibobj.c | 16 +++++++++++++--- .../subsystems/win32/win32k/objects/palette.c | 2 ++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/dibobj.c b/reactos/subsystems/win32/win32k/objects/dibobj.c index 6ab2f6cd306..1dfa5344ad8 100644 --- a/reactos/subsystems/win32/win32k/objects/dibobj.c +++ b/reactos/subsystems/win32/win32k/objects/dibobj.c @@ -1750,9 +1750,19 @@ BuildDIBPalette(CONST BITMAPINFO *bmi) else if (bmi->bmiHeader.biCompression == BI_BITFIELDS) { paletteType = PAL_BITFIELDS; - RedMask = pdwColors[0]; - GreenMask = pdwColors[1]; - BlueMask = pdwColors[2]; + if (bmi->bmiHeader.biSize >= sizeof(BITMAPV4HEADER)) + { + PBITMAPV4HEADER pV4Header = (PBITMAPV4HEADER)&bmi->bmiHeader; + RedMask = pV4Header->bV4RedMask; + GreenMask = pV4Header->bV4GreenMask; + BlueMask = pV4Header->bV4BlueMask; + } + else + { + RedMask = pdwColors[0]; + GreenMask = pdwColors[1]; + BlueMask = pdwColors[2]; + } } else { diff --git a/reactos/subsystems/win32/win32k/objects/palette.c b/reactos/subsystems/win32/win32k/objects/palette.c index 860813ce8f1..38a4532f417 100644 --- a/reactos/subsystems/win32/win32k/objects/palette.c +++ b/reactos/subsystems/win32/win32k/objects/palette.c @@ -197,6 +197,8 @@ PALETTE_AllocPalette(ULONG Mode, PalGDI->flFlags |= PAL_RGB16_565; else if (Red == 0xFF0000 && Green == 0xFF00 && Blue == 0xFF) PalGDI->flFlags |= PAL_BGR; + else if (Red == 0xFF && Green == 0xFF00 && Blue == 0xFF0000) + PalGDI->flFlags |= PAL_RGB; } PALETTE_UnlockPalette(PalGDI); From 90ece09e2cbc7a9fbe496447fc35fad9dcf47e9b Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sat, 12 Feb 2011 20:32:49 +0000 Subject: [PATCH 033/287] Remove some artifact from ARM build. Would it fix build? svn path=/trunk/; revision=50677 --- reactos/ReactOS-arm.rbuild | 3 --- 1 file changed, 3 deletions(-) diff --git a/reactos/ReactOS-arm.rbuild b/reactos/ReactOS-arm.rbuild index cda72c2e186..22da8090ddb 100644 --- a/reactos/ReactOS-arm.rbuild +++ b/reactos/ReactOS-arm.rbuild @@ -104,9 +104,6 @@ - - - From 856e0d9b91f7652acb9bad4037fc257a44202a52 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 12 Feb 2011 23:59:12 +0000 Subject: [PATCH 034/287] [SETUPAPI] Add resource descriptor function stubs. svn path=/trunk/; revision=50678 --- reactos/dll/win32/setupapi/cfgmgr.c | 164 +++++++++++++++++++++++ reactos/dll/win32/setupapi/setupapi.spec | 26 ++-- 2 files changed, 177 insertions(+), 13 deletions(-) diff --git a/reactos/dll/win32/setupapi/cfgmgr.c b/reactos/dll/win32/setupapi/cfgmgr.c index 684853f2299..8742b8165ed 100644 --- a/reactos/dll/win32/setupapi/cfgmgr.c +++ b/reactos/dll/win32/setupapi/cfgmgr.c @@ -413,6 +413,34 @@ CONFIGRET WINAPI CM_Add_ID_ExW( } +/*********************************************************************** + * CM_Add_Res_Des [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Add_Res_Des( + PRES_DES prdResDes, LOG_CONF lcLogConf, RESOURCEID ResourceID, + PCVOID ResourceData, ULONG ResourceLen, ULONG ulFlags) +{ + TRACE("%p %p %lu %p %lu %lx\n", prdResDes, lcLogConf, ResourceID, + ResourceData, ResourceLen, ulFlags); + return CM_Add_Res_Des_Ex(prdResDes, lcLogConf, ResourceID, ResourceData, + ResourceLen, ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Add_Res_Des_Ex [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Add_Res_Des_Ex( + PRES_DES prdResDes, LOG_CONF lcLogConf, RESOURCEID ResourceID, + PCVOID ResourceData, ULONG ResourceLen, ULONG ulFlags, HMACHINE hMachine) +{ + FIXME("%p %p %lu %p %lu %lx %p\n", prdResDes, lcLogConf, ResourceID, + ResourceData, ResourceLen, ulFlags, hMachine); + + return CR_CALL_NOT_IMPLEMENTED; +} + + /*********************************************************************** * CM_Connect_MachineA [SETUPAPI.@] */ @@ -1172,6 +1200,42 @@ CONFIGRET WINAPI CM_Free_Log_Conf_Handle( } +/*********************************************************************** + * CM_Free_Res_Des [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Free_Res_Des( + PRES_DES prdResDes, RES_DES rdResDes, ULONG ulFlags) +{ + TRACE("%p %p %lx\n", prdResDes, rdResDes, ulFlags); + return CM_Free_Res_Des_Ex(prdResDes, rdResDes, ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Free_Res_Des_Ex [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Free_Res_Des_Ex( + PRES_DES prdResDes, RES_DES rdResDes, ULONG ulFlags, + HMACHINE hMachine) +{ + FIXME("%p %p %lx %lx\n", prdResDes, rdResDes, ulFlags, hMachine); + + return CR_CALL_NOT_IMPLEMENTED; +} + + +/*********************************************************************** + * CM_Free_Res_Des_Handle [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Free_Res_Des_Handle( + RES_DES rdResDes) +{ + FIXME("%p\n", rdResDes); + + return CR_CALL_NOT_IMPLEMENTED; +} + + /*********************************************************************** * CM_Get_Child [SETUPAPI.@] */ @@ -2640,6 +2704,34 @@ CONFIGRET WINAPI CM_Get_Next_Log_Conf_Ex( } +/*********************************************************************** + * CM_Get_Next_Re_Des [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_Next_Res_Des( + PRES_DES prdResDes, RES_DES rdResDes, RESOURCEID ForResource, + PRESOURCEID pResourceID, ULONG ulFlags) +{ + TRACE("%p %p %lu %p %lx\n", prdResDes, rdResDes, ForResource, + pResourceID, ulFlags); + return CM_Get_Next_Res_Des_Ex(prdResDes, rdResDes, ForResource, + pResourceID, ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Get_Next_Re_Des_Ex [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_Next_Res_Des_Ex( + PRES_DES prdResDes, RES_DES rdResDes, RESOURCEID ForResource, + PRESOURCEID pResourceID, ULONG ulFlags, HMACHINE hMachine) +{ + FIXME("%p %p %lu %p %lx %lx\n", prdResDes, rdResDes, ForResource, + pResourceID, ulFlags, hMachine); + + return CR_CALL_NOT_IMPLEMENTED; +} + + /*********************************************************************** * CM_Get_Parent [SETUPAPI.@] */ @@ -2727,6 +2819,51 @@ CONFIGRET WINAPI CM_Get_Parent_Ex( } +/*********************************************************************** + * CM_Get_Res_Des_Data [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_Res_Des_Data( + RES_DES rdResDes, PVOID Buffer, ULONG BufferLen, ULONG ulFlags) +{ + TRACE("%p %p %l %lx\n", rdResDes, Buffer, BufferLen, ulFlags); + return CM_Get_Res_Des_Data_Ex(rdResDes, Buffer, BufferLen, ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Get_Res_Des_Data_Ex [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_Res_Des_Data_Ex( + RES_DES rdResDes, PVOID Buffer, ULONG BufferLen, ULONG ulFlags, + HMACHINE hMachine) +{ + FIXME("%p %p %l %lx %lx\n", rdResDes, Buffer, BufferLen, ulFlags, hMachine); + return CR_CALL_NOT_IMPLEMENTED; +} + + +/*********************************************************************** + * CM_Get_Res_Des_Size [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_Res_Des_Data_Size( + PULONG pulSize, RES_DES rdResDes, ULONG ulFlags) +{ + TRACE("%p %p %lx\n", pulSize, rdResDes, ulFlags); + return CM_Get_Res_Des_Data_Size_Ex(pulSize, rdResDes, ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Get_Res_Des_Size_Ex [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_Res_Des_Data_Size_Ex( + PULONG pulSize, RES_DES rdResDes, ULONG ulFlags, HMACHINE hMachine) +{ + TRACE("%p %p %lx %lx\n", pulSize, rdResDes, ulFlags, hMachine); + return CR_CALL_NOT_IMPLEMENTED; +} + + /*********************************************************************** * CM_Get_Sibling [SETUPAPI.@] */ @@ -3104,6 +3241,33 @@ CONFIGRET WINAPI CM_Locate_DevNode_ExW( } +/*********************************************************************** + * CM_Modify_Res_Des [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Modify_Res_Des( + PRES_DES prdResDes, RES_DES rdResDes, RESOURCEID ResourceID, + PCVOID ResourceData, ULONG ResourceLen, ULONG ulFlags) +{ + TRACE("%p %p %lx %p %lu %lx", prdResDes, rdResDes, ResourceID, ResourceData, + ResourceLen, ulFlags); + return CM_Modify_Res_Des_Ex(prdResDes, rdResDes, ResourceID, ResourceData, + ResourceLen, ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Modify_Res_Des_Ex [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Modify_Res_Des_Ex( + PRES_DES prdResDes, RES_DES rdResDes, RESOURCEID ResourceID, PCVOID ResourceData, + ULONG ResourceLen, ULONG ulFlags, HMACHINE hMachine) +{ + FIXME("%p %p %lx %p %lu %lx %lx", prdResDes, rdResDes, ResourceID, ResourceData, + ResourceLen, ulFlags, hMachine); + return CR_CALL_NOT_IMPLEMENTED; +} + + /*********************************************************************** * CM_Move_DevNode [SETUPAPI.@] */ diff --git a/reactos/dll/win32/setupapi/setupapi.spec b/reactos/dll/win32/setupapi/setupapi.spec index fb6d16ad18a..cf546503ed9 100644 --- a/reactos/dll/win32/setupapi/setupapi.spec +++ b/reactos/dll/win32/setupapi/setupapi.spec @@ -14,8 +14,8 @@ @ stdcall CM_Add_ID_ExA(ptr str long ptr) @ stdcall CM_Add_ID_ExW(ptr wstr long ptr) @ stub CM_Add_Range -@ stub CM_Add_Res_Des -@ stub CM_Add_Res_Des_Ex +@ stdcall CM_Add_Res_Des(ptr ptr long ptr long long) +@ stdcall CM_Add_Res_Des_Ex(ptr ptr long ptr long long long) @ stdcall CM_Connect_MachineA(str ptr) @ stdcall CM_Connect_MachineW(wstr ptr) @ stdcall CM_Create_DevNodeA(ptr str long long) @@ -48,9 +48,9 @@ @ stdcall CM_Free_Log_Conf_Ex(ptr long ptr) @ stdcall CM_Free_Log_Conf_Handle(ptr) @ stub CM_Free_Range_List -@ stub CM_Free_Res_Des -@ stub CM_Free_Res_Des_Ex -@ stub CM_Free_Res_Des_Handle +@ stdcall CM_Free_Res_Des(ptr ptr long) +@ stdcall CM_Free_Res_Des_Ex(ptr ptr long long) +@ stdcall CM_Free_Res_Des_Handle(ptr) @ stub CM_Free_Resource_Conflict_Handle @ stdcall CM_Get_Child(ptr long long) @ stdcall CM_Get_Child_Ex(ptr long long long) @@ -118,14 +118,14 @@ @ stdcall CM_Get_Log_Conf_Priority_Ex(ptr ptr long long) @ stdcall CM_Get_Next_Log_Conf(ptr ptr long) @ stdcall CM_Get_Next_Log_Conf_Ex(ptr ptr long long) -@ stub CM_Get_Next_Res_Des -@ stub CM_Get_Next_Res_Des_Ex +@ stdcall CM_Get_Next_Res_Des(ptr ptr long ptr long) +@ stdcall CM_Get_Next_Res_Des_Ex(ptr ptr long ptr long long) @ stdcall CM_Get_Parent(ptr long long) @ stdcall CM_Get_Parent_Ex(ptr long long long) -@ stub CM_Get_Res_Des_Data -@ stub CM_Get_Res_Des_Data_Ex -@ stub CM_Get_Res_Des_Data_Size -@ stub CM_Get_Res_Des_Data_Size_Ex +@ stdcall CM_Get_Res_Des_Data(ptr ptr long long) +@ stdcall CM_Get_Res_Des_Data_Ex(ptr ptr long long long) +@ stdcall CM_Get_Res_Des_Data_Size(ptr ptr long) +@ stdcall CM_Get_Res_Des_Data_Size_Ex(ptr ptr long long) @ stub CM_Get_Resource_Conflict_Count @ stub CM_Get_Resource_Conflict_DetailsA @ stub CM_Get_Resource_Conflict_DetailsW @@ -144,8 +144,8 @@ @ stdcall CM_Locate_DevNode_ExA(ptr str long long) @ stdcall CM_Locate_DevNode_ExW(ptr wstr long long) @ stub CM_Merge_Range_List -@ stub CM_Modify_Res_Des -@ stub CM_Modify_Res_Des_Ex +@ stdcall CM_Modify_Res_Des(ptr ptr long ptr long long) +@ stdcall CM_Modify_Res_Des_Ex(ptr ptr long ptr long long long) @ stdcall CM_Move_DevNode(long long long) @ stdcall CM_Move_DevNode_Ex(long long long long) @ stub CM_Next_Range From 05ec891399caa1259897623de3b8fb124eb5ecb4 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 13 Feb 2011 08:19:16 +0000 Subject: [PATCH 035/287] [KMTEST] Some more tests to FsRtlIsNameInExpression & FsRtlIsDbcsInExpression. Some are failing. svn path=/trunk/; revision=50679 --- rostests/drivers/kmtest/ntos_fsrtl.c | 32 ++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/rostests/drivers/kmtest/ntos_fsrtl.c b/rostests/drivers/kmtest/ntos_fsrtl.c index 6e3a5b3b746..b23b87a5a63 100644 --- a/rostests/drivers/kmtest/ntos_fsrtl.c +++ b/rostests/drivers/kmtest/ntos_fsrtl.c @@ -139,6 +139,22 @@ VOID FsRtlIsNameInExpressionTest() RtlInitUnicodeString(&Expression, L"*.c.d"); RtlInitUnicodeString(&Name, L"a.b.c.d"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE"); + RtlInitUnicodeString(&Expression, L"*?"); + RtlInitUnicodeString(&Name, L""); + ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE"); + RtlInitUnicodeString(&Name, L"a"); + ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE"); + RtlInitUnicodeString(&Name, L"aa"); + ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE"); + RtlInitUnicodeString(&Expression, L"?*?"); + RtlInitUnicodeString(&Name, L""); + ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE"); + RtlInitUnicodeString(&Name, L"a"); + ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE"); + RtlInitUnicodeString(&Name, L"aa"); + ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE"); + RtlInitUnicodeString(&Name, L"aaa"); + ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE"); } VOID FsRtlIsDbcsInExpressionTest() @@ -251,6 +267,22 @@ VOID FsRtlIsDbcsInExpressionTest() RtlInitAnsiString(&Expression, "*.c.d"); RtlInitAnsiString(&Name, "a.b.c.d"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE"); + RtlInitAnsiString(&Expression, "*?"); + RtlInitAnsiString(&Name, ""); + ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE"); + RtlInitAnsiString(&Name, "a"); + ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE"); + RtlInitAnsiString(&Name, "aa"); + ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE"); + RtlInitAnsiString(&Expression, "?*?"); + RtlInitAnsiString(&Name, ""); + ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE"); + RtlInitAnsiString(&Name, "a"); + ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE"); + RtlInitAnsiString(&Name, "aa"); + ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE"); + RtlInitAnsiString(&Name, "aaa"); + ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE"); } /* PUBLIC FUNCTIONS ***********************************************************/ From d4e44f51ea92906441172f0dd64f085db7b5fd10 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 13 Feb 2011 08:43:48 +0000 Subject: [PATCH 036/287] [NTOSKRNL] For both FsRtlIsNameInExpression & FsRtlIsDbcsInExpression: - Get back "useless checks" (tests show they weren't that useless) - Prevent code redundancy This fixes 4 failing kmtest tests added in r50679 svn path=/trunk/; revision=50680 --- reactos/ntoskrnl/fsrtl/dbcsname.c | 21 +++++++++------------ reactos/ntoskrnl/fsrtl/name.c | 21 +++++++++------------ 2 files changed, 18 insertions(+), 24 deletions(-) diff --git a/reactos/ntoskrnl/fsrtl/dbcsname.c b/reactos/ntoskrnl/fsrtl/dbcsname.c index cdde1269e1b..67454955316 100644 --- a/reactos/ntoskrnl/fsrtl/dbcsname.c +++ b/reactos/ntoskrnl/fsrtl/dbcsname.c @@ -184,15 +184,7 @@ FsRtlIsDbcsInExpression(IN PANSI_STRING Expression, else if (Expression->Buffer[ExpressionPosition] == '*') { StarFound = ExpressionPosition++; - if (StarFound < (Expression->Length - 1)) - { - while (Name->Buffer[NamePosition] != Expression->Buffer[ExpressionPosition] && - NamePosition < Name->Length) - { - NamePosition++; - } - } - else + if (ExpressionPosition == Expression->Length) { NamePosition = Name->Length; } @@ -214,10 +206,15 @@ FsRtlIsDbcsInExpression(IN PANSI_STRING Expression, else if (StarFound != MAXUSHORT) { ExpressionPosition = StarFound + 1; - while (Name->Buffer[NamePosition] != Expression->Buffer[ExpressionPosition] && - NamePosition < Name->Length) + if (Expression->Buffer[ExpressionPosition] != '*' && Expression->Buffer[ExpressionPosition] != '?' && + Expression->Buffer[ExpressionPosition] != ANSI_DOS_DOT && Expression->Buffer[ExpressionPosition] != ANSI_DOS_QM && + Expression->Buffer[ExpressionPosition] != ANSI_DOS_STAR) { - NamePosition++; + while (Name->Buffer[NamePosition] != Expression->Buffer[ExpressionPosition] && + NamePosition < Name->Length) + { + NamePosition++; + } } } else diff --git a/reactos/ntoskrnl/fsrtl/name.c b/reactos/ntoskrnl/fsrtl/name.c index 0712a2b38ad..88f60c0d30f 100644 --- a/reactos/ntoskrnl/fsrtl/name.c +++ b/reactos/ntoskrnl/fsrtl/name.c @@ -44,15 +44,7 @@ FsRtlIsNameInExpressionPrivate(IN PUNICODE_STRING Expression, else if (Expression->Buffer[ExpressionPosition] == L'*') { StarFound = ExpressionPosition++; - if (StarFound < (Expression->Length / sizeof(WCHAR) - 1)) - { - while ((IgnoreCase ? UpcaseTable[Name->Buffer[NamePosition]] : Name->Buffer[NamePosition]) != Expression->Buffer[ExpressionPosition] && - NamePosition < Name->Length / sizeof(WCHAR)) - { - NamePosition++; - } - } - else + if (ExpressionPosition == Expression->Length / sizeof(WCHAR)) { NamePosition = Name->Length / sizeof(WCHAR); } @@ -74,10 +66,15 @@ FsRtlIsNameInExpressionPrivate(IN PUNICODE_STRING Expression, else if (StarFound != MAXUSHORT) { ExpressionPosition = StarFound + 1; - while ((IgnoreCase ? UpcaseTable[Name->Buffer[NamePosition]] : Name->Buffer[NamePosition]) != Expression->Buffer[ExpressionPosition] && - NamePosition < Name->Length / sizeof(WCHAR)) + if (Expression->Buffer[ExpressionPosition] != L'*' && Expression->Buffer[ExpressionPosition] != L'?' && + Expression->Buffer[ExpressionPosition] != DOS_DOT && Expression->Buffer[ExpressionPosition] != DOS_QM && + Expression->Buffer[ExpressionPosition] != DOS_STAR) { - NamePosition++; + while ((IgnoreCase ? UpcaseTable[Name->Buffer[NamePosition]] : Name->Buffer[NamePosition]) != Expression->Buffer[ExpressionPosition] && + NamePosition < Name->Length / sizeof(WCHAR)) + { + NamePosition++; + } } } else From 506c3a298935998563cdcdaa42ba237467d29d29 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 13 Feb 2011 09:43:01 +0000 Subject: [PATCH 037/287] [KMTEST] Some more tests to FsRtlIsNameInExpression & FsRtlIsDbcsInExpression. Some are failing. svn path=/trunk/; revision=50681 --- rostests/drivers/kmtest/ntos_fsrtl.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/rostests/drivers/kmtest/ntos_fsrtl.c b/rostests/drivers/kmtest/ntos_fsrtl.c index b23b87a5a63..67e7e839610 100644 --- a/rostests/drivers/kmtest/ntos_fsrtl.c +++ b/rostests/drivers/kmtest/ntos_fsrtl.c @@ -139,6 +139,8 @@ VOID FsRtlIsNameInExpressionTest() RtlInitUnicodeString(&Expression, L"*.c.d"); RtlInitUnicodeString(&Name, L"a.b.c.d"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE"); + RtlInitUnicodeString(&Expression, L"*.?.c.d"); + ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE"); RtlInitUnicodeString(&Expression, L"*?"); RtlInitUnicodeString(&Name, L""); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE"); @@ -146,6 +148,8 @@ VOID FsRtlIsNameInExpressionTest() ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE"); RtlInitUnicodeString(&Name, L"aa"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE"); + RtlInitUnicodeString(&Name, L"aaa"); + ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE"); RtlInitUnicodeString(&Expression, L"?*?"); RtlInitUnicodeString(&Name, L""); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE"); @@ -155,6 +159,8 @@ VOID FsRtlIsNameInExpressionTest() ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE"); RtlInitUnicodeString(&Name, L"aaa"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE"); + RtlInitUnicodeString(&Name, L"aaaa"); + ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE"); } VOID FsRtlIsDbcsInExpressionTest() @@ -267,6 +273,8 @@ VOID FsRtlIsDbcsInExpressionTest() RtlInitAnsiString(&Expression, "*.c.d"); RtlInitAnsiString(&Name, "a.b.c.d"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE"); + RtlInitAnsiString(&Expression, "*.?.c.d"); + ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE"); RtlInitAnsiString(&Expression, "*?"); RtlInitAnsiString(&Name, ""); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE"); @@ -274,6 +282,8 @@ VOID FsRtlIsDbcsInExpressionTest() ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE"); RtlInitAnsiString(&Name, "aa"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE"); + RtlInitAnsiString(&Name, "aaa"); + ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE"); RtlInitAnsiString(&Expression, "?*?"); RtlInitAnsiString(&Name, ""); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE"); @@ -283,6 +293,8 @@ VOID FsRtlIsDbcsInExpressionTest() ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE"); RtlInitAnsiString(&Name, "aaa"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE"); + RtlInitAnsiString(&Name, "aaaa"); + ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE"); } /* PUBLIC FUNCTIONS ***********************************************************/ From bdb4931234f8c81f5ae418e7a88a246835d6d51b Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 13 Feb 2011 10:02:31 +0000 Subject: [PATCH 038/287] [CFGMGR32] - Add missing functions. - Add forwarders to functions that are exported by setupapi.dll. - Mark deprecated functions. svn path=/trunk/; revision=50682 --- reactos/dll/win32/cfgmgr32/cfgmgr32.spec | 55 +++++++++++++++--------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/reactos/dll/win32/cfgmgr32/cfgmgr32.spec b/reactos/dll/win32/cfgmgr32/cfgmgr32.spec index f1c54cb363a..f3aab21514a 100644 --- a/reactos/dll/win32/cfgmgr32/cfgmgr32.spec +++ b/reactos/dll/win32/cfgmgr32/cfgmgr32.spec @@ -1,9 +1,9 @@ @ stdcall CMP_Init_Detection(long) setupapi.CMP_Init_Detection @ stdcall CMP_RegisterNotification(ptr ptr long ptr) setupapi.CMP_RegisterNotification @ stdcall CMP_Report_LogOn(long long) setupapi.CMP_Report_LogOn -@ stub CMP_UnregisterNotification # setupapi.CMP_UnregisterNotification +@ stdcall CMP_UnregisterNotification(ptr) setupapi.CMP_UnregisterNotification @ stdcall CMP_WaitNoPendingInstallEvents(long) setupapi.CMP_WaitNoPendingInstallEvents -@ stub CMP_WaitServicesAvailable # setupapi.CMP_WaitServicesAvailable +@ stdcall CMP_WaitServicesAvailable(ptr) setupapi.CMP_WaitServicesAvailable @ stdcall CM_Add_Empty_Log_Conf(ptr ptr long long) setupapi.CM_Add_Empty_Log_Conf @ stdcall CM_Add_Empty_Log_Conf_Ex(ptr ptr long long ptr) setupapi.CM_Add_Empty_Log_Conf_Ex @ stdcall CM_Add_IDA(ptr str long) setupapi.CM_Add_IDA @@ -11,8 +11,8 @@ @ stdcall CM_Add_ID_ExA(ptr str long ptr) setupapi.CM_Add_ID_ExA @ stdcall CM_Add_ID_ExW(ptr wstr long ptr) setupapi.CM_Add_ID_ExW @ stub CM_Add_Range # setupapi.CM_Add_Range -@ stub CM_Add_Res_Des # setupapi.CM_Add_Res_Des -@ stub CM_Add_Res_Des_Ex # setupapi.CM_Add_Res_Des_Ex +@ stdcall CM_Add_Res_Des(ptr ptr long ptr long long) setupapi.CM_Add_Res_Des +@ stdcall CM_Add_Res_Des_Ex(ptr ptr long ptr long long long) setupapi.CM_Add_Res_Des_Ex @ stdcall CM_Connect_MachineA(str ptr) setupapi.CM_Connect_MachineA @ stdcall CM_Connect_MachineW(wstr ptr) setupapi.CM_Connect_MachineW @ stdcall CM_Create_DevNodeA(ptr str long long) setupapi.CM_Create_DevNodeA @@ -45,9 +45,10 @@ @ stdcall CM_Free_Log_Conf_Ex(ptr long ptr) setupapi.CM_Free_Log_Conf_Ex @ stdcall CM_Free_Log_Conf_Handle(ptr) setupapi.CM_Free_Log_Conf_Handle @ stub CM_Free_Range_List # setupapi.CM_Free_Range_List -@ stub CM_Free_Res_Des # setupapi.CM_Free_Res_Des -@ stub CM_Free_Res_Des_Ex # setupapi.CM_Free_Res_Des_Ex -@ stub CM_Free_Res_Des_Handle # setupapi.CM_Free_Res_Des_Handle +@ stdcall CM_Free_Res_Des(ptr ptr long) setupapi.CM_Free_Res_Des +@ stdcall CM_Free_Res_Des_Ex(ptr ptr long long) setupapi.CM_Free_Res_Des_Ex +@ stdcall CM_Free_Res_Des_Handle(ptr) setupapi.CM_Free_Res_Des_Handle +@ stub CM_Free_Resource_Conflict_Handle # setupapi.CM_Free_Resource_Conflict_Handle @ stdcall CM_Get_Child(ptr long long) setupapi.CM_Get_Child @ stdcall CM_Get_Child_Ex(ptr long long long) setupapi.CM_Get_Child_Ex @ stdcall CM_Get_Class_Key_NameA(ptr str ptr long) setupapi.CM_Get_Class_Key_NameA @@ -58,6 +59,8 @@ @ stdcall CM_Get_Class_NameW(ptr wstr ptr long) setupapi.CM_Get_Class_NameW @ stdcall CM_Get_Class_Name_ExA(ptr str ptr long long) setupapi.CM_Get_Class_Name_ExA @ stdcall CM_Get_Class_Name_ExW(ptr wstr ptr long long) setupapi.CM_Get_Class_Name_ExW +@ stub CM_Get_Class_Registry_PropertyA # setupapi.CM_Get_Class_Registry_PropertyA +@ stub CM_Get_Class_Registry_PropertyW # setupapi.CM_Get_Class_Registry_PropertyW @ stdcall CM_Get_Depth(ptr long long) setupapi.CM_Get_Depth @ stdcall CM_Get_Depth_Ex(ptr long long long) setupapi.CM_Get_Depth_Ex @ stdcall CM_Get_DevNode_Registry_PropertyA(long long ptr ptr ptr long) setupapi.CM_Get_DevNode_Registry_PropertyA @@ -108,14 +111,17 @@ @ stdcall CM_Get_Log_Conf_Priority_Ex(ptr ptr long long) setupapi.CM_Get_Log_Conf_Priority_Ex @ stdcall CM_Get_Next_Log_Conf(ptr ptr long) setupapi.CM_Get_Next_Log_Conf @ stdcall CM_Get_Next_Log_Conf_Ex(ptr ptr long long) setupapi.CM_Get_Next_Log_Conf_Ex -@ stub CM_Get_Next_Res_Des # setupapi.CM_Get_Next_Res_Des -@ stub CM_Get_Next_Res_Des_Ex # setupapi.CM_Get_Next_Res_Des_Ex +@ stdcall CM_Get_Next_Res_Des(ptr ptr long ptr long) setupapi.CM_Get_Next_Res_Des +@ stdcall CM_Get_Next_Res_Des_Ex(ptr ptr long ptr long long) setupapi.CM_Get_Next_Res_Des_Ex @ stdcall CM_Get_Parent(ptr long long) setupapi.CM_Get_Parent @ stdcall CM_Get_Parent_Ex(ptr long long long) setupapi.CM_Get_Parent_Ex -@ stub CM_Get_Res_Des_Data # setupapi.CM_Get_Res_Des_Data -@ stub CM_Get_Res_Des_Data_Ex # setupapi.CM_Get_Res_Des_Data_Ex -@ stub CM_Get_Res_Des_Data_Size # setupapi.CM_Get_Res_Des_Data_Size -@ stub CM_Get_Res_Des_Data_Size_Ex # setupapi.CM_Get_Res_Des_Data_Size_Ex +@ stdcall CM_Get_Res_Des_Data(ptr ptr long long) setupapi.CM_Get_Res_Des_Data +@ stdcall CM_Get_Res_Des_Data_Ex(ptr ptr long long long) setupapi.CM_Get_Res_Des_Data_Ex +@ stdcall CM_Get_Res_Des_Data_Size(ptr ptr long) setupapi.CM_Get_Res_Des_Data_Size +@ stdcall CM_Get_Res_Des_Data_Size_Ex(ptr ptr long long) setupapi.CM_Get_Res_Des_Data_Size_Ex +@ stub CM_Get_Resource_Conflict_Count # setupapi.CM_Get_Resource_Conflict_Count +@ stub CM_Get_Resource_Conflict_DetailsA # setupapi.CM_Get_Resource_Conflict_DetailsA +@ stub CM_Get_Resource_Conflict_DetailsW # setupapi.CM_Get_Resource_Conflict_DetailsW @ stdcall CM_Get_Sibling(ptr long long) setupapi.CM_Get_Sibling @ stdcall CM_Get_Sibling_Ex(ptr long long long) setupapi.CM_Get_Sibling_Ex @ stdcall CM_Get_Version() setupapi.CM_Get_Version @@ -129,8 +135,8 @@ @ stdcall CM_Locate_DevNode_ExA(ptr str long long) setupapi.CM_Locate_DevNode_ExA @ stdcall CM_Locate_DevNode_ExW(ptr wstr long long) setupapi.CM_Locate_DevNode_ExW @ stub CM_Merge_Range_List # setupapi.CM_Merge_Range_List -@ stub CM_Modify_Res_Des # setupapi.CM_Modify_Res_Des -@ stub CM_Modify_Res_Des_Ex # setupapi.CM_Modify_Res_Des_Ex +@ stdcall CM_Modify_Res_Des(ptr ptr long ptr long long) setupapi.CM_Modify_Res_Des +@ stdcall CM_Modify_Res_Des_Ex(ptr ptr long ptr long long long) setupapi.CM_Modify_Res_Des_Ex @ stdcall CM_Move_DevNode(long long long) setupapi.CM_Move_DevNode @ stdcall CM_Move_DevNode_Ex(long long long long) setupapi.CM_Move_DevNode_Ex @ stub CM_Next_Range # setupapi.CM_Next_Range @@ -140,14 +146,17 @@ @ stdcall CM_Open_Class_Key_ExW(ptr wstr long long ptr long long) setupapi.CM_Open_Class_Key_ExW @ stdcall CM_Open_DevNode_Key(ptr long long long ptr long) setupapi.CM_Open_DevNode_Key @ stdcall CM_Open_DevNode_Key_Ex(ptr long long long ptr long long) setupapi.CM_Open_DevNode_Key_Ex -@ stub CM_Query_And_Remove_SubTreeA -@ stub CM_Query_And_Remove_SubTreeW +@ stub CM_Query_And_Remove_SubTreeA # setupapi.CM_Query_And_Remove_SubTreeA +@ stub CM_Query_And_Remove_SubTreeW # setupapi.CM_Query_And_Remove_SubTreeW +@ stub CM_Query_And_Remove_SubTree_ExA # setupapi.CM_Query_And_Remove_SubTree_ExA +@ stub CM_Query_And_Remove_SubTree_ExW # setupapi.CM_Query_And_Remove_SubTree_ExW @ stub CM_Query_Arbitrator_Free_Data # setupapi.CM_Query_Arbitrator_Free_Data @ stub CM_Query_Arbitrator_Free_Data_Ex # setupapi.CM_Query_Arbitrator_Free_Data_Ex @ stub CM_Query_Arbitrator_Free_Size # setupapi.CM_Query_Arbitrator_Free_Size @ stub CM_Query_Arbitrator_Free_Size_Ex # setupapi.CM_Query_Arbitrator_Free_Size_Ex @ stub CM_Query_Remove_SubTree # setupapi.CM_Query_Remove_SubTree @ stub CM_Query_Remove_SubTree_Ex # setupapi.CM_Query_Remove_SubTree_Ex +@ stub CM_Query_Resource_Conflict_List # setupapi.CM_Query_Resource_Conflict_List @ stdcall CM_Reenumerate_DevNode(long long) setupapi.CM_Reenumerate_DevNode @ stdcall CM_Reenumerate_DevNode_Ex(long long long) setuapi.CM_Reenumerate_DevNode_Ex @ stub CM_Register_Device_Driver # setupapi.CM_Register_Device_Driver @@ -158,16 +167,14 @@ @ stub CM_Register_Device_Interface_ExW # setupapi.CM_Register_Device_Interface_ExW @ stub CM_Remove_SubTree # setupapi.CM_Remove_SubTree @ stub CM_Remove_SubTree_Ex # setupapi.CM_Remove_SubTree_Ex -@ stub CM_Remove_Unmarked_Children # setupapi.CM_Remove_Unmarked_Children -@ stub CM_Remove_Unmarked_Children_Ex # setupapi.CM_Remove_Unmarked_Children_Ex @ stub CM_Request_Device_EjectA # setupapi.CM_Request_Device_EjectA @ stub CM_Request_Device_EjectW # setupapi.CM_Request_Device_EjectW @ stdcall CM_Request_Eject_PC() setupapi.CM_Request_Eject_PC @ stdcall CM_Request_Eject_PC_Ex(long) setupapi.CM_Request_Eject_PC_Ex -@ stub CM_Reset_Children_Marks # setupapi.CM_Reset_Children_Marks -@ stub CM_Reset_Children_Marks_Ex # setupapi.CM_Reset_Children_Marks_Ex @ stdcall CM_Run_Detection(long) setupapi.CM_Run_Detection @ stdcall CM_Run_Detection_Ex(long long) setupapi.CM_Run_Detection_Ex +@ stub CM_Set_Class_Registry_PropertyA # setupapi.CM_Set_Class_Registry_PropertyA +@ stub CM_Set_Class_Registry_PropertyW # setupapi.CM_Set_Class_Registry_PropertyW @ stdcall CM_Set_DevNode_Problem(long long long) setupapi.CM_Set_DevNode_Problem @ stdcall CM_Set_DevNode_Problem_Ex(long long long long) setupapi.CM_Set_DevNode_Problem_Ex @ stdcall CM_Set_DevNode_Registry_PropertyA(long long ptr long long) setupapi.CM_Set_DevNode_Registry_PropertyA @@ -189,3 +196,9 @@ @ stub CM_Unregister_Device_InterfaceW # setupapi.CM_Unregister_Device_InterfaceW @ stub CM_Unregister_Device_Interface_ExA # setupapi.CM_Unregister_Device_Interface_ExA @ stub CM_Unregister_Device_Interface_ExW # setupapi.CM_Unregister_Device_Interface_ExW + +# Deprecated functions, they are not present in Win2003 SP1 +@ stub CM_Remove_Unmarked_Children # setupapi.CM_Remove_Unmarked_Children +@ stub CM_Remove_Unmarked_Children_Ex # setupapi.CM_Remove_Unmarked_Children_Ex +@ stub CM_Reset_Children_Marks # setupapi.CM_Reset_Children_Marks +@ stub CM_Reset_Children_Marks_Ex # setupapi.CM_Reset_Children_Marks_Ex From b607fcee936c0f5546e9dadd659ba83f2587f412 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sun, 13 Feb 2011 16:03:58 +0000 Subject: [PATCH 039/287] [RTL/DPH] - Implement adding a new pool and allocating a new node. - Add a bunch of stubs. svn path=/trunk/; revision=50683 --- reactos/lib/rtl/heappage.c | 152 +++++++++++++++++++++++++++++++++++-- 1 file changed, 144 insertions(+), 8 deletions(-) diff --git a/reactos/lib/rtl/heappage.c b/reactos/lib/rtl/heappage.c index fb9ba898d06..35a8e1b2c44 100644 --- a/reactos/lib/rtl/heappage.c +++ b/reactos/lib/rtl/heappage.c @@ -269,6 +269,70 @@ RtlpDphProtectVm(PVOID Base, SIZE_T Size, ULONG Protection) VOID NTAPI RtlpDphAddNewPool(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK NodeBlock, PVOID Virtual, SIZE_T Size, BOOLEAN Add) +{ + PDPH_HEAP_BLOCK DphNode, DphStartNode; + ULONG NodeCount; + + NodeCount = (Size >> 6) - 1; + DphStartNode = Virtual; + + /* Set pNextAlloc for all blocks */ + for (DphNode = Virtual; NodeCount > 0; DphNode++, NodeCount--) + DphNode->pNextAlloc = DphNode + 1; + + /* and the last one */ + DphNode->pNextAlloc = NULL; + + /* Add it to the tail of unused node list */ + if (DphRoot->pUnusedNodeListTail) + DphRoot->pUnusedNodeListTail->pNextAlloc = DphStartNode; + else + DphRoot->pUnusedNodeListHead = DphStartNode; + + DphRoot->pUnusedNodeListTail = DphNode; + + /* Increase counters */ + DphRoot->nUnusedNodes += NodeCount; + + if (Add) + { + UNIMPLEMENTED; + } +} + +PDPH_HEAP_BLOCK NTAPI +RtlpDphFindAvailableMemory(PDPH_HEAP_ROOT DphRoot, + SIZE_T Size, + PDPH_HEAP_BLOCK *Prev) +{ + UNIMPLEMENTED; + return NULL; +} + + +PDPH_HEAP_BLOCK NTAPI +RtlpDphTakeNodeFromUnusedList(PDPH_HEAP_ROOT DphRoot) +{ + UNIMPLEMENTED; + return NULL; +} + +VOID NTAPI +RtlpDphReturnNodeToUnusedList(PDPH_HEAP_ROOT DphRoot, + PDPH_HEAP_BLOCK Node) +{ +} + +VOID NTAPI +RtlpDphRemoveFromAvailableList(PDPH_HEAP_ROOT DphRoot, + PDPH_HEAP_BLOCK Node) +{ + UNIMPLEMENTED; +} + +VOID NTAPI +RtlpDphCoalesceNodeIntoAvailable(PDPH_HEAP_ROOT DphRoot, + PDPH_HEAP_BLOCK Node) { UNIMPLEMENTED; } @@ -276,8 +340,86 @@ RtlpDphAddNewPool(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK NodeBlock, PVOID Virtu PDPH_HEAP_BLOCK NTAPI RtlpDphAllocateNode(PDPH_HEAP_ROOT DphRoot) { - UNIMPLEMENTED; - return NULL; + PDPH_HEAP_BLOCK Node; + NTSTATUS Status; + ULONG Size = DPH_POOL_SIZE; + PVOID Ptr; + + /* Check for the easy case */ + if (DphRoot->pUnusedNodeListHead) + { + /* Just take a node from this list */ + Node = RtlpDphTakeNodeFromUnusedList(DphRoot); + ASSERT(Node); + return Node; + } + + /* There is a need to make free space */ + Node = RtlpDphFindAvailableMemory(DphRoot, DPH_POOL_SIZE, NULL); + + if (!DphRoot->pUnusedNodeListHead && !Node) + { + /* Retry with a smaller request */ + Size = PAGE_SIZE; + Node = RtlpDphFindAvailableMemory(DphRoot, PAGE_SIZE, NULL); + } + + if (!DphRoot->pUnusedNodeListHead) + { + if (Node) + { + RtlpDphRemoveFromAvailableList(DphRoot, Node); + Ptr = Node->pVirtualBlock; + } + else + { + /* No free space, need to alloc a new VM block */ + Size = DPH_POOL_SIZE; + Status = RtlpDphAllocateVm(&Ptr, DPH_RESERVE_SIZE, MEM_COMMIT, PAGE_NOACCESS); + + if (!NT_SUCCESS(Status)) + { + /* Retry with a smaller size */ + Status = RtlpDphAllocateVm(&Ptr, 0x10000, MEM_COMMIT, PAGE_NOACCESS); + if (!NT_SUCCESS(Status)) return NULL; + } + } + + /* VM is allocated at this point, set protection */ + Status = RtlpDphProtectVm(Ptr, Size, PAGE_READWRITE); + if (!NT_SUCCESS(Status)) + { + ASSERT(FALSE); + return NULL; + } + + /* Zero the memory */ + if (Node) RtlZeroMemory(Ptr, Size); + + /* Add a new pool based on this VM */ + RtlpDphAddNewPool(DphRoot, Node, Ptr, Size, TRUE); + + if (!Node) + { + ASSERT(FALSE); + } + else + { + if (Node->nVirtualBlockSize > Size) + { + Node->pVirtualBlock += Size; + Node->nVirtualBlockSize -= Size; + + RtlpDphCoalesceNodeIntoAvailable(DphRoot, Node); + } + else + { + RtlpDphReturnNodeToUnusedList(DphRoot, Node); + } + } + } + + return RtlpDphTakeNodeFromUnusedList(DphRoot); } VOID NTAPI @@ -292,12 +434,6 @@ RtlpDphPlaceOnVirtualList(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK DphNode) UNIMPLEMENTED; } -VOID NTAPI -RtlpDphCoalesceNodeIntoAvailable(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK DphNode) -{ - UNIMPLEMENTED; -} - RTL_GENERIC_COMPARE_RESULTS NTAPI RtlpDphCompareNodeForTable(IN PRTL_AVL_TABLE Table, From 2ac5519cc7001fa6349cc07bd2da696d68ef94a8 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 13 Feb 2011 20:23:03 +0000 Subject: [PATCH 040/287] [NTOSKRNL] Improved * WC handling for both FsRtlIsNameInExpression & FsRtlIsDbcsInExpression This fixes all failing tests in kmtest svn path=/trunk/; revision=50685 --- reactos/ntoskrnl/fsrtl/dbcsname.c | 50 ++++++++++++++++++++++++----- reactos/ntoskrnl/fsrtl/name.c | 53 ++++++++++++++++++++++++++----- 2 files changed, 87 insertions(+), 16 deletions(-) diff --git a/reactos/ntoskrnl/fsrtl/dbcsname.c b/reactos/ntoskrnl/fsrtl/dbcsname.c index 67454955316..9311caef9f5 100644 --- a/reactos/ntoskrnl/fsrtl/dbcsname.c +++ b/reactos/ntoskrnl/fsrtl/dbcsname.c @@ -174,6 +174,45 @@ FsRtlIsDbcsInExpression(IN PANSI_STRING Expression, NamePosition++; ExpressionPosition++; } + else if (StarFound != MAXUSHORT && (Expression->Buffer[StarFound + 1] == '*' || + Expression->Buffer[StarFound + 1] == '?' || Expression->Buffer[StarFound + 1] == ANSI_DOS_DOT)) + { + ExpressionPosition = StarFound + 1; + switch (Expression->Buffer[ExpressionPosition]) + { + case '*': + StarFound = ExpressionPosition++; + break; + + case '?': + ExpressionPosition++; + MatchingChars = NamePosition; + while (Name->Buffer[NamePosition] != Expression->Buffer[ExpressionPosition] && + NamePosition < Name->Length) + { + NamePosition++; + } + + if (NamePosition - MatchingChars > 0) + { + StarFound = MAXUSHORT; + } + break; + + case ANSI_DOS_DOT: + while (Name->Buffer[NamePosition] != '.' && NamePosition < Name->Length) + { + NamePosition++; + } + ExpressionPosition++; + StarFound = MAXUSHORT; + break; + + default: + /* Should never happen */ + ASSERT(FALSE); + } + } else if ((Expression->Buffer[ExpressionPosition] == '?') || (Expression->Buffer[ExpressionPosition] == ANSI_DOS_QM) || (Expression->Buffer[ExpressionPosition] == ANSI_DOS_DOT && Name->Buffer[NamePosition] == '.')) { @@ -206,15 +245,10 @@ FsRtlIsDbcsInExpression(IN PANSI_STRING Expression, else if (StarFound != MAXUSHORT) { ExpressionPosition = StarFound + 1; - if (Expression->Buffer[ExpressionPosition] != '*' && Expression->Buffer[ExpressionPosition] != '?' && - Expression->Buffer[ExpressionPosition] != ANSI_DOS_DOT && Expression->Buffer[ExpressionPosition] != ANSI_DOS_QM && - Expression->Buffer[ExpressionPosition] != ANSI_DOS_STAR) + while (Name->Buffer[NamePosition] != Expression->Buffer[ExpressionPosition] && + NamePosition < Name->Length) { - while (Name->Buffer[NamePosition] != Expression->Buffer[ExpressionPosition] && - NamePosition < Name->Length) - { - NamePosition++; - } + NamePosition++; } } else diff --git a/reactos/ntoskrnl/fsrtl/name.c b/reactos/ntoskrnl/fsrtl/name.c index 88f60c0d30f..8868ecc714d 100644 --- a/reactos/ntoskrnl/fsrtl/name.c +++ b/reactos/ntoskrnl/fsrtl/name.c @@ -34,6 +34,47 @@ FsRtlIsNameInExpressionPrivate(IN PUNICODE_STRING Expression, NamePosition++; ExpressionPosition++; } + else if (StarFound != MAXUSHORT && (Expression->Buffer[StarFound + 1] == L'*' || + Expression->Buffer[StarFound + 1] == L'?' || Expression->Buffer[StarFound + 1] == DOS_DOT)) + { + ExpressionPosition = StarFound + 1; + switch (Expression->Buffer[ExpressionPosition]) + { + case L'*': + StarFound = ExpressionPosition++; + break; + + case L'?': + ExpressionPosition++; + MatchingChars = NamePosition; + while ((IgnoreCase ? UpcaseTable[Name->Buffer[NamePosition]] : + Name->Buffer[NamePosition]) != Expression->Buffer[ExpressionPosition] && + NamePosition < Name->Length / sizeof(WCHAR)) + { + NamePosition++; + } + + if (NamePosition - MatchingChars > 0) + { + StarFound = MAXUSHORT; + } + break; + + case DOS_DOT: + while (Name->Buffer[NamePosition] != L'.' && + NamePosition < Name->Length / sizeof(WCHAR)) + { + NamePosition++; + } + ExpressionPosition++; + StarFound = MAXUSHORT; + break; + + default: + /* Should never happen */ + ASSERT(FALSE); + } + } else if (Expression->Buffer[ExpressionPosition] == L'?' || (Expression->Buffer[ExpressionPosition] == DOS_QM) || (Expression->Buffer[ExpressionPosition] == DOS_DOT && Name->Buffer[NamePosition] == L'.')) { @@ -66,15 +107,11 @@ FsRtlIsNameInExpressionPrivate(IN PUNICODE_STRING Expression, else if (StarFound != MAXUSHORT) { ExpressionPosition = StarFound + 1; - if (Expression->Buffer[ExpressionPosition] != L'*' && Expression->Buffer[ExpressionPosition] != L'?' && - Expression->Buffer[ExpressionPosition] != DOS_DOT && Expression->Buffer[ExpressionPosition] != DOS_QM && - Expression->Buffer[ExpressionPosition] != DOS_STAR) + while ((IgnoreCase ? UpcaseTable[Name->Buffer[NamePosition]] : + Name->Buffer[NamePosition]) != Expression->Buffer[ExpressionPosition] && + NamePosition < Name->Length / sizeof(WCHAR)) { - while ((IgnoreCase ? UpcaseTable[Name->Buffer[NamePosition]] : Name->Buffer[NamePosition]) != Expression->Buffer[ExpressionPosition] && - NamePosition < Name->Length / sizeof(WCHAR)) - { - NamePosition++; - } + NamePosition++; } } else From f571cf32bd6b6667f27dfd344313a85b2ef6c20c Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sun, 13 Feb 2011 21:39:26 +0000 Subject: [PATCH 041/287] [RTL/DPH] - Implement list manipulation routines: pool list, virtual list, unused list. - Implement node removal from an available list. svn path=/trunk/; revision=50686 --- reactos/lib/rtl/heappage.c | 153 ++++++++++++++++++++++++++----------- 1 file changed, 110 insertions(+), 43 deletions(-) diff --git a/reactos/lib/rtl/heappage.c b/reactos/lib/rtl/heappage.c index 35a8e1b2c44..d48efe4042d 100644 --- a/reactos/lib/rtl/heappage.c +++ b/reactos/lib/rtl/heappage.c @@ -143,6 +143,11 @@ LONG RtlpDphProtectFails; /* Signatures */ #define DPH_SIGNATURE 0xFFEEDDCC +/* Biased pointer macros */ +#define IS_BIASED_POINTER(ptr) ((ULONG_PTR)(ptr) & 1) +#define POINTER_REMOVE_BIAS(ptr) ((ULONG_PTR)(ptr) & ~(ULONG_PTR)1) +#define POINTER_ADD_BIAS(ptr) ((ULONG_PTR)(ptr) & 1) + /* FUNCTIONS ******************************************************************/ NTSTATUS NTAPI @@ -268,7 +273,99 @@ RtlpDphProtectVm(PVOID Base, SIZE_T Size, ULONG Protection) } VOID NTAPI -RtlpDphAddNewPool(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK NodeBlock, PVOID Virtual, SIZE_T Size, BOOLEAN Add) +RtlpDphPlaceOnPoolList(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK DphNode) +{ + /* DphNode is being added to the tail of the list */ + DphNode->pNextAlloc = NULL; + + /* Add it to the tail of the linked list */ + if (DphRoot->pNodePoolListTail) + DphRoot->pNodePoolListTail->pNextAlloc = DphNode; + else + DphRoot->pNodePoolListHead = DphNode; + DphRoot->pNodePoolListTail = DphNode; + + /* Update byte counts taking in account this new node */ + DphRoot->nNodePools++; + DphRoot->nNodePoolBytes += DphNode->nVirtualBlockSize; +} + +VOID NTAPI +RtlpDphPlaceOnVirtualList(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK DphNode) +{ + /* Add it to the head of the virtual list */ + DphNode->pNextAlloc = DphRoot->pVirtualStorageListHead; + if (!DphRoot->pVirtualStorageListHead) + DphRoot->pVirtualStorageListTail = DphNode; + DphRoot->pVirtualStorageListHead = DphNode; + + /* Update byte counts taking in account this new node */ + DphRoot->nVirtualStorageRanges++; + DphRoot->nVirtualStorageBytes += DphNode->nVirtualBlockSize; +} + +PDPH_HEAP_BLOCK NTAPI +RtlpDphTakeNodeFromUnusedList(PDPH_HEAP_ROOT DphRoot) +{ + PDPH_HEAP_BLOCK Node = DphRoot->pUnusedNodeListHead; + PDPH_HEAP_BLOCK Next; + + /* Take the first entry */ + if (!Node) return NULL; + + /* Remove that entry (Node) from the list */ + Next = Node->pNextAlloc; + if (DphRoot->pUnusedNodeListHead == Node) DphRoot->pUnusedNodeListHead = Next; + if (DphRoot->pUnusedNodeListTail == Node) DphRoot->pUnusedNodeListTail = NULL; + + /* Decrease amount of unused nodes */ + DphRoot->nUnusedNodes--; + + return Node; +} + +VOID NTAPI +RtlpDphReturnNodeToUnusedList(PDPH_HEAP_ROOT DphRoot, + PDPH_HEAP_BLOCK Node) +{ + /* Add it back to the head of the unused list */ + Node->pNextAlloc = DphRoot->pUnusedNodeListHead; + if (!DphRoot->pUnusedNodeListHead) DphRoot->pUnusedNodeListTail = Node; + DphRoot->pUnusedNodeListHead = Node; + + /* Increase amount of unused nodes */ + DphRoot->nUnusedNodes++; +} + +VOID NTAPI +RtlpDphRemoveFromAvailableList(PDPH_HEAP_ROOT DphRoot, + PDPH_HEAP_BLOCK Node) +{ + /* Make sure Adjacency list pointers are biased */ + ASSERT(IS_BIASED_POINTER(Node->AdjacencyEntry.Flink)); + ASSERT(IS_BIASED_POINTER(Node->AdjacencyEntry.Blink)); + + /* Remove it from the list */ + RemoveEntryList(&Node->AvailableEntry); + + /* Decrease heap counters */ + DphRoot->nAvailableAllocations--; + DphRoot->nAvailableAllocationBytesCommitted -= Node->nVirtualBlockSize; + + /* Remove bias from the AdjacencyEntry pointer */ + POINTER_REMOVE_BIAS(Node->AdjacencyEntry.Flink); + POINTER_REMOVE_BIAS(Node->AdjacencyEntry.Blink); +} + +VOID NTAPI +RtlpDphCoalesceNodeIntoAvailable(PDPH_HEAP_ROOT DphRoot, + PDPH_HEAP_BLOCK Node) +{ + UNIMPLEMENTED; +} + +VOID NTAPI +RtlpDphAddNewPool(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK NodeBlock, PVOID Virtual, SIZE_T Size, BOOLEAN PlaceOnPool) { PDPH_HEAP_BLOCK DphNode, DphStartNode; ULONG NodeCount; @@ -294,9 +391,19 @@ RtlpDphAddNewPool(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK NodeBlock, PVOID Virtu /* Increase counters */ DphRoot->nUnusedNodes += NodeCount; - if (Add) + /* Check if we need to place it on the pool list */ + if (PlaceOnPool) { - UNIMPLEMENTED; + /* Get a node from the unused list */ + DphNode = RtlpDphTakeNodeFromUnusedList(DphRoot); + ASSERT(DphNode); + + /* Set its virtual block values */ + DphNode->pVirtualBlock = Virtual; + DphNode->nVirtualBlockSize = Size; + + /* Place it on the pool list */ + RtlpDphPlaceOnPoolList(DphRoot, DphNode); } } @@ -309,34 +416,6 @@ RtlpDphFindAvailableMemory(PDPH_HEAP_ROOT DphRoot, return NULL; } - -PDPH_HEAP_BLOCK NTAPI -RtlpDphTakeNodeFromUnusedList(PDPH_HEAP_ROOT DphRoot) -{ - UNIMPLEMENTED; - return NULL; -} - -VOID NTAPI -RtlpDphReturnNodeToUnusedList(PDPH_HEAP_ROOT DphRoot, - PDPH_HEAP_BLOCK Node) -{ -} - -VOID NTAPI -RtlpDphRemoveFromAvailableList(PDPH_HEAP_ROOT DphRoot, - PDPH_HEAP_BLOCK Node) -{ - UNIMPLEMENTED; -} - -VOID NTAPI -RtlpDphCoalesceNodeIntoAvailable(PDPH_HEAP_ROOT DphRoot, - PDPH_HEAP_BLOCK Node) -{ - UNIMPLEMENTED; -} - PDPH_HEAP_BLOCK NTAPI RtlpDphAllocateNode(PDPH_HEAP_ROOT DphRoot) { @@ -422,18 +501,6 @@ RtlpDphAllocateNode(PDPH_HEAP_ROOT DphRoot) return RtlpDphTakeNodeFromUnusedList(DphRoot); } -VOID NTAPI -RtlpDphPlaceOnPoolList(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK DphNode) -{ - UNIMPLEMENTED; -} - -VOID NTAPI -RtlpDphPlaceOnVirtualList(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK DphNode) -{ - UNIMPLEMENTED; -} - RTL_GENERIC_COMPARE_RESULTS NTAPI RtlpDphCompareNodeForTable(IN PRTL_AVL_TABLE Table, From c1f1c6ee4189c43a8e50f04bf43206082b363e48 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 14 Feb 2011 16:04:01 +0000 Subject: [PATCH 042/287] [WIN32K] Fix initialization of XLATEOBJ, when source and dest format are equal. Patch by Thomas Faber (thfabba at gmx de) See issue #5828 for more details. svn path=/trunk/; revision=50694 --- reactos/subsystems/win32/win32k/eng/xlate.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/reactos/subsystems/win32/win32k/eng/xlate.c b/reactos/subsystems/win32/win32k/eng/xlate.c index f6aa48cd5fe..1f0fde662df 100644 --- a/reactos/subsystems/win32/win32k/eng/xlate.c +++ b/reactos/subsystems/win32/win32k/eng/xlate.c @@ -361,9 +361,7 @@ EXLATEOBJ_vInitialize( EXLATEOBJ_vInitTrivial(pexlo); - if (ppalDst == ppalSrc || !ppalSrc || !ppalDst || - ((ppalDst->flFlags == PAL_RGB || ppalDst->flFlags == PAL_BGR) && - ppalDst->flFlags == ppalSrc->flFlags)) + if (!ppalSrc || !ppalDst) { return; } @@ -372,6 +370,13 @@ EXLATEOBJ_vInitialize( pexlo->ppalDst = ppalDst; pexlo->xlo.iSrcType = ppalSrc->flFlags; pexlo->xlo.iDstType = ppalDst->flFlags; + + if (ppalDst == ppalSrc || + ((ppalDst->flFlags == PAL_RGB || ppalDst->flFlags == PAL_BGR) && + ppalDst->flFlags == ppalSrc->flFlags)) + { + return; + } /* Chack if both of the pallettes are indexed */ if (!(ppalSrc->flFlags & PAL_INDEXED) || !(ppalDst->flFlags & PAL_INDEXED)) @@ -607,13 +612,6 @@ EXLATEOBJ_vInitXlateFromDCs( psurfDst = pdcDst->dclevel.pSurface; psurfSrc = pdcSrc->dclevel.pSurface; - /* Check for trivial color translation */ - if (psurfDst == psurfSrc) - { - EXLATEOBJ_vInitTrivial(pexlo); - return; - } - /* Normal initialisation. No surface means DEFAULT_BITMAP */ EXLATEOBJ_vInitialize(pexlo, psurfSrc ? psurfSrc->ppal : &gpalMono, From 0be071911157cb15957e73bc5a367a2c9f2bb430 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 14 Feb 2011 17:23:58 +0000 Subject: [PATCH 043/287] [WIN32K] - Remove gexloTrivial, it was never used - Remove EXLATEOBJ_vInitTrivial and move the code into EXLATEOBJ_vInitialize - Properly set XO_TABLE - Set ppalDstDc in EXLATEOBJ_vInitXlateFromDCs svn path=/trunk/; revision=50695 --- reactos/subsystems/win32/win32k/eng/xlate.c | 57 ++++++++------------- 1 file changed, 22 insertions(+), 35 deletions(-) diff --git a/reactos/subsystems/win32/win32k/eng/xlate.c b/reactos/subsystems/win32/win32k/eng/xlate.c index 1f0fde662df..82414bd062b 100644 --- a/reactos/subsystems/win32/win32k/eng/xlate.c +++ b/reactos/subsystems/win32/win32k/eng/xlate.c @@ -17,8 +17,6 @@ /** Globals *******************************************************************/ ULONG giUniqueXlate = 0; -EXLATEOBJ gexloTrivial; -XLATEOBJ* gpxloTrivial = &gexloTrivial.xlo; const BYTE gajXlate5to8[32] = { 0, 8, 16, 25, 33, 41, 49, 58, 66, 74, 82, 90, 99,107,115,123, @@ -329,23 +327,6 @@ EXLATEOBJ_iXlateBitfieldsToPal(PEXLATEOBJ pexlo, ULONG iColor) /** Private Functions *********************************************************/ -VOID -NTAPI -EXLATEOBJ_vInitTrivial(PEXLATEOBJ pexlo) -{ - pexlo->xlo.iUniq = InterlockedIncrement((LONG*)&giUniqueXlate); - pexlo->xlo.flXlate = XO_TRIVIAL; - pexlo->xlo.iSrcType = PAL_RGB; - pexlo->xlo.iDstType = PAL_RGB; - pexlo->xlo.cEntries = 0; - pexlo->xlo.pulXlate = pexlo->aulXlate; - pexlo->pfnXlate = EXLATEOBJ_iXlateTrivial; - pexlo->ppalSrc = &gpalRGB; - pexlo->ppalDst = &gpalRGB; - pexlo->ppalDstDc = &gpalRGB; - pexlo->hColorTransform = NULL; -} - VOID NTAPI EXLATEOBJ_vInitialize( @@ -359,22 +340,24 @@ EXLATEOBJ_vInitialize( ULONG cEntries; ULONG i, ulColor; - EXLATEOBJ_vInitTrivial(pexlo); - - if (!ppalSrc || !ppalDst) - { - return; - } + if (!ppalSrc) ppalSrc = &gpalRGB; + if (!ppalDst) ppalDst = &gpalRGB; + pexlo->xlo.iUniq = InterlockedIncrement((LONG*)&giUniqueXlate); + pexlo->xlo.cEntries = 0; + pexlo->xlo.flXlate = 0; + pexlo->xlo.pulXlate = pexlo->aulXlate; + pexlo->pfnXlate = EXLATEOBJ_iXlateTrivial; + pexlo->hColorTransform = NULL; pexlo->ppalSrc = ppalSrc; pexlo->ppalDst = ppalDst; pexlo->xlo.iSrcType = ppalSrc->flFlags; pexlo->xlo.iDstType = ppalDst->flFlags; - - if (ppalDst == ppalSrc || - ((ppalDst->flFlags == PAL_RGB || ppalDst->flFlags == PAL_BGR) && - ppalDst->flFlags == ppalSrc->flFlags)) + pexlo->ppalDstDc = &gpalRGB; + + if (ppalDst == ppalSrc) { + pexlo->xlo.flXlate |= XO_TRIVIAL; return; } @@ -460,12 +443,14 @@ EXLATEOBJ_vInitialize( return; } } - pexlo->xlo.cEntries = cEntries; pexlo->pfnXlate = EXLATEOBJ_iXlateTable; + pexlo->xlo.cEntries = cEntries; + pexlo->xlo.flXlate |= XO_TABLE; + if (ppalDst->flFlags & PAL_INDEXED) { - pexlo->xlo.flXlate |= XO_TABLE; + ULONG cDiff = 0; for (i = 0; i < cEntries; i++) { @@ -476,11 +461,11 @@ EXLATEOBJ_vInitialize( pexlo->xlo.pulXlate[i] = PALETTE_ulGetNearestPaletteIndex(ppalDst, ulColor); - if (pexlo->xlo.pulXlate[i] != i) - pexlo->xlo.flXlate &= ~XO_TRIVIAL; + if (pexlo->xlo.pulXlate[i] != i) cDiff++; } - if (pexlo->xlo.flXlate & XO_TRIVIAL) + /* Check if we have only trivial mappings */ + if (cDiff == 0) { if (pexlo->xlo.pulXlate != pexlo->aulXlate) { @@ -489,6 +474,7 @@ EXLATEOBJ_vInitialize( } pexlo->pfnXlate = EXLATEOBJ_iXlateTrivial; pexlo->xlo.flXlate = XO_TRIVIAL; + pexlo->xlo.cEntries = 0; return; } } @@ -619,6 +605,8 @@ EXLATEOBJ_vInitXlateFromDCs( pdcSrc->pdcattr->crBackgroundClr, pdcDst->pdcattr->crBackgroundClr, pdcDst->pdcattr->crForegroundClr); + + pexlo->ppalDstDc = pdcDst->dclevel.ppal; } VOID @@ -637,7 +625,6 @@ NTSTATUS NTAPI InitXlateImpl(VOID) { - EXLATEOBJ_vInitTrivial(&gexloTrivial); return STATUS_SUCCESS; } From a92739091bfc185214ae0d9394d89569c51bf4dc Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Tue, 15 Feb 2011 11:53:16 +0000 Subject: [PATCH 044/287] [RTL/DPH] - Implement more support functions: coalescing a node into the list of available nodes, finding a best fitting node for a given size, growing available virtual memory amount. svn path=/trunk/; revision=50698 --- reactos/lib/rtl/heappage.c | 212 ++++++++++++++++++++++++++++++++++++- 1 file changed, 207 insertions(+), 5 deletions(-) diff --git a/reactos/lib/rtl/heappage.c b/reactos/lib/rtl/heappage.c index d48efe4042d..6c3f9b55299 100644 --- a/reactos/lib/rtl/heappage.c +++ b/reactos/lib/rtl/heappage.c @@ -7,6 +7,7 @@ /* Useful references: http://msdn.microsoft.com/en-us/library/ms220938(VS.80).aspx + http://blogs.msdn.com/b/jiangyue/archive/2010/03/16/windows-heap-overrun-monitoring.aspx */ /* INCLUDES *****************************************************************/ @@ -125,6 +126,7 @@ LONG RtlpDphProtectFails; #define DPH_RESERVE_SIZE 0x100000 #define DPH_POOL_SIZE 0x4000 +#define DPH_FREE_LIST_MINIMUM 8 /* RtlpDphBreakOptions */ #define DPH_BREAK_ON_RESERVE_FAIL 0x01 @@ -150,6 +152,9 @@ LONG RtlpDphProtectFails; /* FUNCTIONS ******************************************************************/ +BOOLEAN NTAPI +RtlpDphGrowVirtual(PDPH_HEAP_ROOT DphRoot, SIZE_T Size); + NTSTATUS NTAPI RtlpSecMemFreeVirtualMemory(HANDLE Process, PVOID *Base, PSIZE_T Size, ULONG Type) { @@ -360,6 +365,75 @@ RtlpDphRemoveFromAvailableList(PDPH_HEAP_ROOT DphRoot, VOID NTAPI RtlpDphCoalesceNodeIntoAvailable(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK Node) +{ + PDPH_HEAP_BLOCK NodeEntry, PrevNode = NULL, NextNode; + PLIST_ENTRY AvailListHead; + PLIST_ENTRY CurEntry; + + /* Update heap counters */ + DphRoot->nAvailableAllocationBytesCommitted += Node->nVirtualBlockSize; + DphRoot->nAvailableAllocations++; + + /* Find where to put this node according to its virtual address */ + AvailListHead = &DphRoot->AvailableAllocationHead; + CurEntry = AvailListHead->Flink; + + while (CurEntry != AvailListHead) + { + NodeEntry = CONTAINING_RECORD(CurEntry, DPH_HEAP_BLOCK, AvailableEntry); + + if (NodeEntry->pVirtualBlock >= Node->pVirtualBlock) + { + PrevNode = NodeEntry; + break; + } + CurEntry = CurEntry->Flink; + } + + /* Did we find a node to insert our one after? */ + if (!PrevNode) + { + /* No, just add to the head of the list then */ + InsertHeadList(AvailListHead, &Node->AvailableEntry); + } + else + { + /* Check the previous node and merge if possible */ + if (PrevNode->pVirtualBlock + PrevNode->nVirtualBlockSize == Node->pVirtualBlock) + { + /* They are adjacent - merge! */ + PrevNode->nVirtualBlockSize += Node->nVirtualBlockSize; + RtlpDphReturnNodeToUnusedList(DphRoot, Node); + DphRoot->nAvailableAllocations--; + + Node = PrevNode; + } + else + { + /* Insert after PrevNode */ + InsertTailList(&PrevNode->AvailableEntry, &Node->AvailableEntry); + } + } + + /* Now check the next entry after our one */ + if (Node->AvailableEntry.Flink != AvailListHead) + { + NextNode = CONTAINING_RECORD(Node->AvailableEntry.Flink, DPH_HEAP_BLOCK, AvailableEntry);; + /* Node is not at the tail of the list, check if it's adjacent */ + if (Node->pVirtualBlock + Node->nVirtualBlockSize == NextNode->pVirtualBlock) + { + /* They are adjacent - merge! */ + Node->nVirtualBlockSize += NextNode->nVirtualBlockSize; + Node->pNextAlloc = NextNode->pNextAlloc; + RtlpDphReturnNodeToUnusedList(DphRoot, NextNode); + DphRoot->nAvailableAllocations--; + } + } +} + +VOID NTAPI +RtlpDphCoalesceFreeIntoAvailable(PDPH_HEAP_ROOT DphRoot, + ULONG Size) { UNIMPLEMENTED; } @@ -407,13 +481,91 @@ RtlpDphAddNewPool(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK NodeBlock, PVOID Virtu } } +PDPH_HEAP_BLOCK NTAPI +RtlpDphSearchAvailableMemoryListForBestFit(PDPH_HEAP_ROOT DphRoot, + SIZE_T Size) +{ + PLIST_ENTRY CurEntry; + PDPH_HEAP_BLOCK Node; + + CurEntry = DphRoot->AvailableAllocationHead.Flink; + + while (TRUE) + { + /* If we reached end of the list - return right away */ + if (CurEntry == &DphRoot->AvailableAllocationHead) return NULL; + + /* Get the current available node */ + Node = CONTAINING_RECORD(CurEntry, DPH_HEAP_BLOCK, AvailableEntry); + + /* Check its size */ + if (Node->nVirtualBlockSize >= Size) break; + + /* Move to the next available entry */ + CurEntry = CurEntry->Flink; + } + + /* Make sure Adjacency list pointers are biased */ + ASSERT(IS_BIASED_POINTER(Node->AdjacencyEntry.Flink)); + ASSERT(IS_BIASED_POINTER(Node->AdjacencyEntry.Blink)); + + return Node; +} + PDPH_HEAP_BLOCK NTAPI RtlpDphFindAvailableMemory(PDPH_HEAP_ROOT DphRoot, SIZE_T Size, - PDPH_HEAP_BLOCK *Prev) + BOOLEAN Grow) { - UNIMPLEMENTED; - return NULL; + PDPH_HEAP_BLOCK Node; + ULONG NewSize; + + /* Find an available best fitting node */ + Node = RtlpDphSearchAvailableMemoryListForBestFit(DphRoot, Size); + + /* If that didn't work, try to search a smaller one in the loop */ + while (!Node) + { + /* Break if the free list becomes too small */ + if (DphRoot->nFreeAllocations <= DPH_FREE_LIST_MINIMUM) break; + + /* Calculate a new free list size */ + NewSize = DphRoot->nFreeAllocations >> 1; + if (NewSize < DPH_FREE_LIST_MINIMUM) NewSize = DPH_FREE_LIST_MINIMUM; + + /* Coalesce free into available */ + RtlpDphCoalesceFreeIntoAvailable(DphRoot, NewSize); + + /* Try to find an available best fitting node again */ + Node = RtlpDphSearchAvailableMemoryListForBestFit(DphRoot, Size); + } + + /* If Node is NULL, then we could fix the situation only by + growing the available VM size */ + if (!Node && Grow) + { + /* Grow VM size, if it fails - return failure directly */ + if (!RtlpDphGrowVirtual(DphRoot, Size)) return NULL; + + /* Try to find an available best fitting node again */ + Node = RtlpDphSearchAvailableMemoryListForBestFit(DphRoot, Size); + + if (!Node) + { + /* Do the last attempt: coalesce all free into available (if Size fits there) */ + if (DphRoot->nFreeAllocationBytesCommitted + DphRoot->nAvailableAllocationBytesCommitted >= Size) + { + /* Coalesce free into available */ + RtlpDphCoalesceFreeIntoAvailable(DphRoot, 0); + + /* Try to find an available best fitting node again */ + Node = RtlpDphSearchAvailableMemoryListForBestFit(DphRoot, Size); + } + } + } + + /* Return node we found */ + return Node; } PDPH_HEAP_BLOCK NTAPI @@ -434,13 +586,13 @@ RtlpDphAllocateNode(PDPH_HEAP_ROOT DphRoot) } /* There is a need to make free space */ - Node = RtlpDphFindAvailableMemory(DphRoot, DPH_POOL_SIZE, NULL); + Node = RtlpDphFindAvailableMemory(DphRoot, DPH_POOL_SIZE, FALSE); if (!DphRoot->pUnusedNodeListHead && !Node) { /* Retry with a smaller request */ Size = PAGE_SIZE; - Node = RtlpDphFindAvailableMemory(DphRoot, PAGE_SIZE, NULL); + Node = RtlpDphFindAvailableMemory(DphRoot, PAGE_SIZE, FALSE); } if (!DphRoot->pUnusedNodeListHead) @@ -501,6 +653,56 @@ RtlpDphAllocateNode(PDPH_HEAP_ROOT DphRoot) return RtlpDphTakeNodeFromUnusedList(DphRoot); } +BOOLEAN NTAPI +RtlpDphGrowVirtual(PDPH_HEAP_ROOT DphRoot, + SIZE_T Size) +{ + PDPH_HEAP_BLOCK Node, AvailableNode; + PVOID Base; + SIZE_T VirtualSize; + NTSTATUS Status; + + /* Start with allocating a couple of nodes */ + Node = RtlpDphAllocateNode(DphRoot); + if (!Node) return FALSE; + + AvailableNode = RtlpDphAllocateNode(DphRoot); + if (!AvailableNode) + { + /* Free the allocated node and return failure */ + RtlpDphReturnNodeToUnusedList(DphRoot, Node); + return FALSE; + } + + /* Calculate size of VM to allocate by rounding it up */ + VirtualSize = (Size + 0xFFFF) & 0xFFFF0000; + if (VirtualSize < DPH_RESERVE_SIZE) + VirtualSize = DPH_RESERVE_SIZE; + + /* Allocate the virtual memory */ + Status = RtlpDphAllocateVm(&Base, VirtualSize, MEM_RESERVE, PAGE_NOACCESS); + if (!NT_SUCCESS(Status)) + { + /* Free the allocated node and return failure */ + RtlpDphReturnNodeToUnusedList(DphRoot, Node); + RtlpDphReturnNodeToUnusedList(DphRoot, AvailableNode); + return FALSE; + } + + /* Set up our two nodes describing this VM */ + Node->pVirtualBlock = Base; + Node->nVirtualBlockSize = VirtualSize; + AvailableNode->pVirtualBlock = Base; + AvailableNode->nVirtualBlockSize = VirtualSize; + + /* Add them to virtual and available lists respectively */ + RtlpDphPlaceOnVirtualList(DphRoot, Node); + RtlpDphCoalesceNodeIntoAvailable(DphRoot, AvailableNode); + + /* Return success */ + return TRUE; +} + RTL_GENERIC_COMPARE_RESULTS NTAPI RtlpDphCompareNodeForTable(IN PRTL_AVL_TABLE Table, From d0e56f53d1d4b377037083b017e50c7407d37dec Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Tue, 15 Feb 2011 22:02:28 +0000 Subject: [PATCH 045/287] [RTL/DPH] - Implement other support locking/unlocking, handle-related routines. - Fix RtlpDphFreeVm definition. - Node lists related improvements: Add a function for removing a node from a free list, implement coalescing free nodes into an available list. - Implement a non-implemented case in RtlpDphAllocateNode when there is a need to allocate more virtual memory, and fix incorrect size calculation too. - Implement a function for validating the page heap block. - Implement RtlpPageHeapDestroy. Now we have two exported APIs ready: heap create and heap destroy. svn path=/trunk/; revision=50721 --- reactos/lib/rtl/heappage.c | 328 +++++++++++++++++++++++++++++++++++-- 1 file changed, 312 insertions(+), 16 deletions(-) diff --git a/reactos/lib/rtl/heappage.c b/reactos/lib/rtl/heappage.c index 6c3f9b55299..43f3a3a9324 100644 --- a/reactos/lib/rtl/heappage.c +++ b/reactos/lib/rtl/heappage.c @@ -139,8 +139,21 @@ LONG RtlpDphProtectFails; #define DPH_DEBUG_INTERNAL_VALIDATE 0x01 #define DPH_DEBUG_VERBOSE 0x04 +/* DPH ExtraFlags */ +#define DPH_EXTRA_CHECK_CORRUPTED_BLOCKS 0x10 + /* Fillers */ #define DPH_FILL 0xEEEEEEEE +#define DPH_FILL_START_STAMP_1 0xABCDBBBB +#define DPH_FILL_START_STAMP_2 0xABCDBBBA +#define DPH_FILL_END_STAMP_1 0xDCBABBBB +#define DPH_FILL_BLOCK_END 0xD0 + +/* Validation info flags */ +#define DPH_VALINFO_BAD_START_STAMP 0x01 +#define DPH_VALINFO_BAD_END_STAMP 0x02 +#define DPH_VALINFO_BAD_POINTER 0x04 +#define DPH_VALINFO_BAD_END_FILL 0x10 /* Signatures */ #define DPH_SIGNATURE 0xFFEEDDCC @@ -155,6 +168,67 @@ LONG RtlpDphProtectFails; BOOLEAN NTAPI RtlpDphGrowVirtual(PDPH_HEAP_ROOT DphRoot, SIZE_T Size); +PVOID NTAPI +RtlpDphPointerFromHandle(PVOID Handle) +{ + PHEAP NormalHeap = (PHEAP)Handle; + PDPH_HEAP_ROOT DphHeap = (PDPH_HEAP_ROOT)((PUCHAR)Handle + PAGE_SIZE); + + if (NormalHeap->ForceFlags & HEAP_FLAG_PAGE_ALLOCS) + { + if (DphHeap->Signature == DPH_SIGNATURE) + return DphHeap; + } + + DPRINT1("heap handle with incorrect signature\n"); + DbgBreakPoint(); + return NULL; +} + +VOID NTAPI +RtlpDphEnterCriticalSection(PDPH_HEAP_ROOT DphRoot, ULONG Flags) +{ + if (Flags & HEAP_NO_SERIALIZE) + { + /* More complex scenario */ + if (!RtlTryEnterCriticalSection(DphRoot->HeapCritSect)) + { + if (!DphRoot->nRemoteLockAcquired) + { + DPRINT1("multithreaded access in HEAP_NO_SERIALIZE heap\n"); + DbgBreakPoint(); + + /* Clear out the no serialize flag */ + DphRoot->HeapFlags &= ~HEAP_NO_SERIALIZE; + } + + /* Enter the heap's critical section */ + RtlEnterCriticalSection(DphRoot->HeapCritSect); + } + } + else + { + /* Just enter the heap's critical section */ + RtlEnterCriticalSection(DphRoot->HeapCritSect); + } +} + +VOID NTAPI +RtlpDphLeaveCriticalSection(PDPH_HEAP_ROOT DphRoot) +{ + /* Just leave the heap's critical section */ + RtlLeaveCriticalSection(DphRoot->HeapCritSect); +} + + +VOID NTAPI +RtlpDphPreProcessing(PDPH_HEAP_ROOT DphRoot, ULONG Flags) +{ + RtlpDphEnterCriticalSection(DphRoot, Flags); + + /* FIXME: Validate integrity, internal lists if necessary */ +} + NTSTATUS NTAPI RtlpSecMemFreeVirtualMemory(HANDLE Process, PVOID *Base, PSIZE_T Size, ULONG Type) { @@ -218,7 +292,7 @@ RtlpDphAllocateVm(PVOID *Base, SIZE_T Size, ULONG Type, ULONG Protection) } NTSTATUS NTAPI -RtlpDphFreeVm(PVOID Base, SIZE_T Size, ULONG Type, ULONG Protection) +RtlpDphFreeVm(PVOID Base, SIZE_T Size, ULONG Type) { NTSTATUS Status; @@ -362,6 +436,28 @@ RtlpDphRemoveFromAvailableList(PDPH_HEAP_ROOT DphRoot, POINTER_REMOVE_BIAS(Node->AdjacencyEntry.Blink); } +VOID NTAPI +RtlpDphRemoveFromFreeList(PDPH_HEAP_ROOT DphRoot, + PDPH_HEAP_BLOCK Node, + PDPH_HEAP_BLOCK Prev) +{ + PDPH_HEAP_BLOCK Next; + + /* Detach it from the list */ + Next = Node->pNextAlloc; + if (DphRoot->pFreeAllocationListHead == Node) + DphRoot->pFreeAllocationListHead = Next; + if (DphRoot->pFreeAllocationListTail == Node) + DphRoot->pFreeAllocationListTail = Prev; + if (Prev) Prev->pNextAlloc = Next; + + /* Decrease heap counters */ + DphRoot->nFreeAllocations--; + DphRoot->nFreeAllocationBytesCommitted -= Node->nVirtualBlockSize; + + Node->StackTrace = NULL; +} + VOID NTAPI RtlpDphCoalesceNodeIntoAvailable(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK Node) @@ -433,9 +529,30 @@ RtlpDphCoalesceNodeIntoAvailable(PDPH_HEAP_ROOT DphRoot, VOID NTAPI RtlpDphCoalesceFreeIntoAvailable(PDPH_HEAP_ROOT DphRoot, - ULONG Size) + ULONG LeaveOnFreeList) { - UNIMPLEMENTED; + PDPH_HEAP_BLOCK Node = DphRoot->pFreeAllocationListHead, Next; + SIZE_T FreeAllocations = DphRoot->nFreeAllocations; + + /* Make sure requested size is not too big */ + ASSERT(FreeAllocations >= LeaveOnFreeList); + + while (Node) + { + FreeAllocations--; + if (FreeAllocations <= LeaveOnFreeList) break; + + /* Get the next pointer, because it may be changed after following two calls */ + Next = Node->pNextAlloc; + + /* Remove it from the free list */ + RtlpDphRemoveFromFreeList(DphRoot, Node, NULL); + + /* And put into the available */ + RtlpDphCoalesceNodeIntoAvailable(DphRoot, Node); + + Node = Next; + } } VOID NTAPI @@ -573,7 +690,7 @@ RtlpDphAllocateNode(PDPH_HEAP_ROOT DphRoot) { PDPH_HEAP_BLOCK Node; NTSTATUS Status; - ULONG Size = DPH_POOL_SIZE; + SIZE_T Size = DPH_POOL_SIZE, SizeVirtual; PVOID Ptr; /* Check for the easy case */ @@ -601,17 +718,20 @@ RtlpDphAllocateNode(PDPH_HEAP_ROOT DphRoot) { RtlpDphRemoveFromAvailableList(DphRoot, Node); Ptr = Node->pVirtualBlock; + SizeVirtual = Node->nVirtualBlockSize; } else { /* No free space, need to alloc a new VM block */ Size = DPH_POOL_SIZE; - Status = RtlpDphAllocateVm(&Ptr, DPH_RESERVE_SIZE, MEM_COMMIT, PAGE_NOACCESS); + SizeVirtual = DPH_RESERVE_SIZE; + Status = RtlpDphAllocateVm(&Ptr, SizeVirtual, MEM_COMMIT, PAGE_NOACCESS); if (!NT_SUCCESS(Status)) { /* Retry with a smaller size */ - Status = RtlpDphAllocateVm(&Ptr, 0x10000, MEM_COMMIT, PAGE_NOACCESS); + SizeVirtual = 0x10000; + Status = RtlpDphAllocateVm(&Ptr, SizeVirtual, MEM_COMMIT, PAGE_NOACCESS); if (!NT_SUCCESS(Status)) return NULL; } } @@ -620,7 +740,16 @@ RtlpDphAllocateNode(PDPH_HEAP_ROOT DphRoot) Status = RtlpDphProtectVm(Ptr, Size, PAGE_READWRITE); if (!NT_SUCCESS(Status)) { - ASSERT(FALSE); + if (Node) + { + RtlpDphCoalesceNodeIntoAvailable(DphRoot, Node); + } + else + { + //RtlpDphFreeVm(); + ASSERT(FALSE); + } + return NULL; } @@ -630,11 +759,7 @@ RtlpDphAllocateNode(PDPH_HEAP_ROOT DphRoot) /* Add a new pool based on this VM */ RtlpDphAddNewPool(DphRoot, Node, Ptr, Size, TRUE); - if (!Node) - { - ASSERT(FALSE); - } - else + if (Node) { if (Node->nVirtualBlockSize > Size) { @@ -648,6 +773,23 @@ RtlpDphAllocateNode(PDPH_HEAP_ROOT DphRoot) RtlpDphReturnNodeToUnusedList(DphRoot, Node); } } + else + { + /* The new VM block was just allocated a few code lines ago, + so initialize it */ + Node = RtlpDphTakeNodeFromUnusedList(DphRoot); + Node->pVirtualBlock = Ptr; + Node->nVirtualBlockSize = SizeVirtual; + RtlpDphPlaceOnVirtualList(DphRoot, Node); + + Node = RtlpDphTakeNodeFromUnusedList(DphRoot); + Node->pVirtualBlock = (PUCHAR)Ptr + Size; + Node->nVirtualBlockSize = SizeVirtual - Size; + RtlpDphPlaceOnVirtualList(DphRoot, Node); + + /* Coalesce them into available list */ + RtlpDphCoalesceNodeIntoAvailable(DphRoot, Node); + } } return RtlpDphTakeNodeFromUnusedList(DphRoot); @@ -709,7 +851,7 @@ RtlpDphCompareNodeForTable(IN PRTL_AVL_TABLE Table, IN PVOID FirstStruct, IN PVOID SecondStruct) { - /* FIXME: TODO */ + UNIMPLEMENTED; ASSERT(FALSE); return 0; } @@ -719,7 +861,7 @@ NTAPI RtlpDphAllocateNodeForTable(IN PRTL_AVL_TABLE Table, IN CLONG ByteSize) { - /* FIXME: TODO */ + UNIMPLEMENTED; ASSERT(FALSE); return NULL; } @@ -729,7 +871,7 @@ NTAPI RtlpDphFreeNodeForTable(IN PRTL_AVL_TABLE Table, IN PVOID Buffer) { - /* FIXME: TODO */ + UNIMPLEMENTED; ASSERT(FALSE); } @@ -740,6 +882,13 @@ RtlpDphInitializeDelayedFreeQueue() return STATUS_SUCCESS; } +VOID NTAPI +RtlpDphFreeDelayedBlocksFromHeap(PDPH_HEAP_ROOT DphRoot, + PHEAP NormalHeap) +{ + UNIMPLEMENTED; +} + NTSTATUS NTAPI RtlpDphTargetDllsLogicInitialize() { @@ -753,6 +902,78 @@ RtlpDphInternalValidatePageHeap(PDPH_HEAP_ROOT DphRoot, PVOID Address, ULONG Val UNIMPLEMENTED; } +VOID NTAPI +RtlpDphReportCorruptedBlock(PDPH_HEAP_ROOT DphRoot, + ULONG Reserved, + PVOID Block, + ULONG ValidationInfo) +{ + UNIMPLEMENTED; +} + +BOOLEAN NTAPI +RtlpDphIsPageHeapBlock(PDPH_HEAP_ROOT DphRoot, + PVOID Block, + PULONG ValidationInformation, + BOOLEAN CheckFillers) +{ + PDPH_BLOCK_INFORMATION BlockInfo; + BOOLEAN SomethingWrong = FALSE; + PUCHAR Byte, Start, End; + + ASSERT(ValidationInformation != NULL); + *ValidationInformation = 0; + + // _SEH2_TRY { + BlockInfo = (PDPH_BLOCK_INFORMATION)Block - 1; + + /* Check stamps */ + if (BlockInfo->StartStamp != DPH_FILL_START_STAMP_1) + { + *ValidationInformation |= DPH_VALINFO_BAD_START_STAMP; + SomethingWrong = TRUE; + + /* Check if it has an alloc/free mismatch */ + if (BlockInfo->StartStamp == DPH_FILL_START_STAMP_2) + { + /* Notify respectively */ + *ValidationInformation = 0x101; + } + } + + if (BlockInfo->EndStamp != DPH_FILL_END_STAMP_1) + { + *ValidationInformation |= DPH_VALINFO_BAD_END_STAMP; + SomethingWrong = TRUE; + } + + /* Check root heap pointer */ + if (BlockInfo->Heap != DphRoot) + { + *ValidationInformation |= DPH_VALINFO_BAD_POINTER; + SomethingWrong = TRUE; + } + + /* Check other fillers if requested */ + if (CheckFillers) + { + /* Check space after the block */ + Start = (PUCHAR)Block + BlockInfo->RequestedSize; + End = (PUCHAR)ROUND_UP(Start, PAGE_SIZE); + for (Byte = Start; Byte < End; Byte++) + { + if (*Byte != DPH_FILL_BLOCK_END) + { + *ValidationInformation |= DPH_VALINFO_BAD_END_FILL; + SomethingWrong = TRUE; + break; + } + } + } + + return (SomethingWrong == FALSE); +} + NTSTATUS NTAPI RtlpDphProcessStartupInitialization() { @@ -926,7 +1147,82 @@ RtlpPageHeapCreate(ULONG Flags, PVOID NTAPI RtlpPageHeapDestroy(HANDLE HeapPtr) { - return FALSE; + PDPH_HEAP_ROOT DphRoot; + PDPH_HEAP_BLOCK Node, Next; + PHEAP NormalHeap; + ULONG Value; + + /* Check if it's not a process heap */ + if (HeapPtr == RtlGetProcessHeap()) + { + DbgBreakPoint(); + return NULL; + } + + /* Get pointer to the heap root */ + DphRoot = RtlpDphPointerFromHandle(HeapPtr); + if (!DphRoot) return NULL; + + RtlpDphPreProcessing(DphRoot, DphRoot->HeapFlags); + + /* Get the pointer to the normal heap */ + NormalHeap = DphRoot->NormalHeap; + + /* Free the delayed-free blocks */ + RtlpDphFreeDelayedBlocksFromHeap(DphRoot, NormalHeap); + + /* Go through the busy blocks */ + Node = RtlEnumerateGenericTableAvl(&DphRoot->BusyNodesTable, TRUE); + + while (Node) + { + if (!(DphRoot->ExtraFlags & DPH_EXTRA_CHECK_CORRUPTED_BLOCKS)) + { + if (!RtlpDphIsPageHeapBlock(DphRoot, Node->pUserAllocation, &Value, TRUE)) + { + RtlpDphReportCorruptedBlock(DphRoot, 3, Node->pUserAllocation, Value); + } + } + + /* FIXME: Call AV notification */ + //AVrfInternalHeapFreeNotification(); + + /* Go to the next node */ + Node = RtlEnumerateGenericTableAvl(&DphRoot->BusyNodesTable, FALSE); + } + + /* Acquire the global heap list lock */ + RtlEnterCriticalSection(&RtlpDphPageHeapListLock); + + /* Remove the entry and decrement the global counter */ + RemoveEntryList(&DphRoot->NextHeap); + RtlpDphPageHeapListLength--; + + /* Release the global heap list lock */ + RtlLeaveCriticalSection(&RtlpDphPageHeapListLock); + + /* Leave and delete this heap's critical section */ + RtlLeaveCriticalSection(DphRoot->HeapCritSect); + RtlDeleteCriticalSection(DphRoot->HeapCritSect); + + /* Now go through all virtual list nodes and release the VM */ + Node = DphRoot->pVirtualStorageListHead; + while (Node) + { + Next = Node->pNextAlloc; + /* Release the memory without checking result */ + RtlpDphFreeVm(Node->pVirtualBlock, 0, MEM_RELEASE); + Node = Next; + } + + /* Destroy the normal heap */ + RtlDestroyHeap(NormalHeap); + + /* Report success */ + if (RtlpDphDebugOptions & DPH_DEBUG_VERBOSE) + DPRINT1("Page heap: process 0x%X destroyed heap @ %p (%p)\n", NtCurrentTeb()->ClientId.UniqueProcess, HeapPtr, NormalHeap); + + return NULL; } PVOID NTAPI From ef2d957db76c486a7ced29f603ccc0d35d1f53f2 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Wed, 16 Feb 2011 11:49:51 +0000 Subject: [PATCH 046/287] [RTL/DPH] - Use better names for validation information flags based on application verifier messages. - Implement a simple RtlpDphReportCorruptedBlock routine which just prints the problem description for now, without any additional info. svn path=/trunk/; revision=50730 --- reactos/lib/rtl/heappage.c | 65 ++++++++++++++++++++++++++++++++++---- 1 file changed, 59 insertions(+), 6 deletions(-) diff --git a/reactos/lib/rtl/heappage.c b/reactos/lib/rtl/heappage.c index 43f3a3a9324..b32cb297d2c 100644 --- a/reactos/lib/rtl/heappage.c +++ b/reactos/lib/rtl/heappage.c @@ -150,10 +150,16 @@ LONG RtlpDphProtectFails; #define DPH_FILL_BLOCK_END 0xD0 /* Validation info flags */ -#define DPH_VALINFO_BAD_START_STAMP 0x01 -#define DPH_VALINFO_BAD_END_STAMP 0x02 -#define DPH_VALINFO_BAD_POINTER 0x04 -#define DPH_VALINFO_BAD_END_FILL 0x10 +#define DPH_VALINFO_BAD_START_STAMP 0x01 +#define DPH_VALINFO_BAD_END_STAMP 0x02 +#define DPH_VALINFO_BAD_POINTER 0x04 +#define DPH_VALINFO_BAD_PREFIX_PATTERN 0x08 +#define DPH_VALINFO_BAD_SUFFIX_PATTERN 0x10 +#define DPH_VALINFO_EXCEPTION 0x20 +#define DPH_VALINFO_1 0x40 +#define DPH_VALINFO_BAD_INFIX_PATTERN 0x80 +#define DPH_VALINFO_ALREADY_FREED 0x100 +#define DPH_VALINFO_CORRUPTED_AFTER_FREE 0x200 /* Signatures */ #define DPH_SIGNATURE 0xFFEEDDCC @@ -908,7 +914,54 @@ RtlpDphReportCorruptedBlock(PDPH_HEAP_ROOT DphRoot, PVOID Block, ULONG ValidationInfo) { - UNIMPLEMENTED; + //RtlpDphGetBlockSizeFromCorruptedBlock(); + + if (ValidationInfo & DPH_VALINFO_CORRUPTED_AFTER_FREE) + { + DPRINT1("block corrupted after having been freed\n"); + } + + if (ValidationInfo & DPH_VALINFO_ALREADY_FREED) + { + DPRINT1("block already freed\n"); + } + + if (ValidationInfo & DPH_VALINFO_BAD_INFIX_PATTERN) + { + DPRINT1("corrupted infix pattern for freed block\n"); + } + + if (ValidationInfo & DPH_VALINFO_BAD_POINTER) + { + DPRINT1("corrupted heap pointer or using wrong heap\n"); + } + + if (ValidationInfo & DPH_VALINFO_BAD_SUFFIX_PATTERN) + { + DPRINT1("corrupted suffix pattern\n"); + } + + if (ValidationInfo & DPH_VALINFO_BAD_PREFIX_PATTERN) + { + DPRINT1("corrupted prefix pattern\n"); + } + + if (ValidationInfo & DPH_VALINFO_BAD_START_STAMP) + { + DPRINT1("corrupted start stamp\n"); + } + + if (ValidationInfo & DPH_VALINFO_BAD_END_STAMP) + { + DPRINT1("corrupted end stamp\n"); + } + + if (ValidationInfo & DPH_VALINFO_EXCEPTION) + { + DPRINT1("exception raised while verifying block\n"); + } + + DPRINT1("Corrupted heap block %p\n", Block); } BOOLEAN NTAPI @@ -964,7 +1017,7 @@ RtlpDphIsPageHeapBlock(PDPH_HEAP_ROOT DphRoot, { if (*Byte != DPH_FILL_BLOCK_END) { - *ValidationInformation |= DPH_VALINFO_BAD_END_FILL; + *ValidationInformation |= DPH_VALINFO_BAD_SUFFIX_PATTERN; SomethingWrong = TRUE; break; } From 8e49b7982611d5606beb7a953c895807396f5ed1 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Wed, 16 Feb 2011 13:09:18 +0000 Subject: [PATCH 047/287] [RTL/DPH] - Connect debug page heap routines in the debug heap implementation, so they are going to be actually called now. - Implement delayed free queue initialization and freeing. svn path=/trunk/; revision=50734 --- reactos/lib/rtl/heapdbg.c | 28 ++++++------ reactos/lib/rtl/heappage.c | 94 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 105 insertions(+), 17 deletions(-) diff --git a/reactos/lib/rtl/heapdbg.c b/reactos/lib/rtl/heapdbg.c index 3bcafa33112..89865227fcc 100644 --- a/reactos/lib/rtl/heapdbg.c +++ b/reactos/lib/rtl/heapdbg.c @@ -136,8 +136,8 @@ RtlDebugAllocateHeap(PVOID HeapPtr, BOOLEAN HeapLocked = FALSE; PVOID Result; - //if (Heap->ForceFlags & HEAP_FLAG_PAGE_ALLOCS) - //return RtlpPageHeapAllocateHeap(HeapPtr, Flags, Size); + if (Heap->ForceFlags & HEAP_FLAG_PAGE_ALLOCS) + return RtlpPageHeapAllocate(HeapPtr, Flags, Size); if (Heap->Signature != HEAP_SIGNATURE) { @@ -203,8 +203,8 @@ RtlDebugReAllocateHeap(HANDLE HeapPtr, PVOID Result = NULL; PHEAP_ENTRY HeapEntry; - //if (Heap->ForceFlags & HEAP_FLAG_PAGE_ALLOCS) - //return RtlpPageHeapReAllocateHeap(HeapPtr, Flags, Size); + if (Heap->ForceFlags & HEAP_FLAG_PAGE_ALLOCS) + return RtlpPageHeapReAllocate(HeapPtr, Flags, Ptr, Size); if (Heap->Signature != HEAP_SIGNATURE) { @@ -273,8 +273,8 @@ RtlDebugFreeHeap(HANDLE HeapPtr, PHEAP_ENTRY HeapEntry; BOOLEAN Result = FALSE; - //if (Heap->ForceFlags & HEAP_FLAG_PAGE_ALLOCS) - //return RtlpPageHeapFreeHeap(HeapPtr, Flags, Size); + if (Heap->ForceFlags & HEAP_FLAG_PAGE_ALLOCS) + return RtlpPageHeapFree(HeapPtr, Flags, Ptr); if (Heap->Signature != HEAP_SIGNATURE) { @@ -330,8 +330,8 @@ RtlDebugGetUserInfoHeap(PVOID HeapHandle, PHEAP_ENTRY HeapEntry; BOOLEAN Result = FALSE; - //if (Heap->ForceFlags & HEAP_FLAG_PAGE_ALLOCS) - //return RtlpPageHeapGetUserInfoHeap(HeapPtr, Flags, Size); + if (Heap->ForceFlags & HEAP_FLAG_PAGE_ALLOCS) + return RtlpPageHeapGetUserInfo(HeapHandle, Flags, BaseAddress, UserValue, UserFlags); if (Heap->Signature != HEAP_SIGNATURE) { @@ -382,8 +382,8 @@ RtlDebugSetUserValueHeap(PVOID HeapHandle, PHEAP_ENTRY HeapEntry; BOOLEAN Result = FALSE; - //if (Heap->ForceFlags & HEAP_FLAG_PAGE_ALLOCS) - //return RtlpPageHeapSetUserValueHeap(HeapPtr, Flags, Size); + if (Heap->ForceFlags & HEAP_FLAG_PAGE_ALLOCS) + return RtlpPageHeapSetUserValue(HeapHandle, Flags, BaseAddress, UserValue); if (Heap->Signature != HEAP_SIGNATURE) { @@ -439,8 +439,8 @@ RtlDebugSetUserFlagsHeap(PVOID HeapHandle, PHEAP_ENTRY HeapEntry; BOOLEAN Result = FALSE; - //if (Heap->ForceFlags & HEAP_FLAG_PAGE_ALLOCS) - //return RtlPageHeapSetUserFlagsHeap(HeapPtr, Flags, BaseAddress, UserFlagsReset, UserFlagsSet); + if (Heap->ForceFlags & HEAP_FLAG_PAGE_ALLOCS) + return RtlpPageHeapSetUserFlags(HeapHandle, Flags, BaseAddress, UserFlagsReset, UserFlagsSet); /* Check if this heap allows flags to be set at all */ if (UserFlagsSet & ~HEAP_SETTABLE_USER_FLAGS || @@ -500,8 +500,8 @@ RtlDebugSizeHeap(HANDLE HeapPtr, PHEAP_ENTRY HeapEntry; SIZE_T Result = ~(SIZE_T)0; - //if (Heap->ForceFlags & HEAP_FLAG_PAGE_ALLOCS) - //return RtlPageHeapSizeHeap(HeapPtr, Flags, Ptr); + if (Heap->ForceFlags & HEAP_FLAG_PAGE_ALLOCS) + return RtlpPageHeapSize(HeapPtr, Flags, Ptr); /* Check heap signature */ if (Heap->Signature != HEAP_SIGNATURE) diff --git a/reactos/lib/rtl/heappage.c b/reactos/lib/rtl/heappage.c index b32cb297d2c..cb09b6c4416 100644 --- a/reactos/lib/rtl/heappage.c +++ b/reactos/lib/rtl/heappage.c @@ -117,6 +117,12 @@ RTL_CRITICAL_SECTION RtlpDphPageHeapListLock; ULONG RtlpDphPageHeapListLength; UNICODE_STRING RtlpDphTargetDllsUnicode; +RTL_CRITICAL_SECTION RtlpDphDelayedFreeQueueLock; +LIST_ENTRY RtlpDphDelayedFreeQueue; +SLIST_HEADER RtlpDphDelayedTemporaryPushList; +ULONG RtlpDphMemoryUsedByDelayedFreeBlocks; +ULONG RtlpDphNumberOfDelayedFreeBlocks; + /* Counters */ LONG RtlpDphCounter; LONG RtlpDphAllocFails; @@ -174,6 +180,13 @@ LONG RtlpDphProtectFails; BOOLEAN NTAPI RtlpDphGrowVirtual(PDPH_HEAP_ROOT DphRoot, SIZE_T Size); +BOOLEAN NTAPI +RtlpDphIsNormalFreeHeapBlock(PVOID Block, PULONG ValidationInformation, BOOLEAN CheckFillers); + +VOID NTAPI +RtlpDphReportCorruptedBlock(PDPH_HEAP_ROOT DphRoot, ULONG Reserved, PVOID Block, ULONG ValidationInfo); + + PVOID NTAPI RtlpDphPointerFromHandle(PVOID Handle) { @@ -884,15 +897,78 @@ RtlpDphFreeNodeForTable(IN PRTL_AVL_TABLE Table, NTSTATUS NTAPI RtlpDphInitializeDelayedFreeQueue() { - UNIMPLEMENTED; - return STATUS_SUCCESS; + NTSTATUS Status; + + Status = RtlInitializeCriticalSection(&RtlpDphDelayedFreeQueueLock); + if (!NT_SUCCESS(Status)) + { + // TODO: Log this error! + DPRINT1("Failure initializing delayed free queue critical section\n"); + return Status; + } + + /* Initialize lists */ + InitializeListHead(&RtlpDphDelayedFreeQueue); + RtlInitializeSListHead(&RtlpDphDelayedTemporaryPushList); + + /* Reset counters */ + RtlpDphMemoryUsedByDelayedFreeBlocks = 0; + RtlpDphNumberOfDelayedFreeBlocks = 0; + + return Status; } VOID NTAPI RtlpDphFreeDelayedBlocksFromHeap(PDPH_HEAP_ROOT DphRoot, PHEAP NormalHeap) { - UNIMPLEMENTED; + PLIST_ENTRY Current, Next; + PDPH_BLOCK_INFORMATION BlockInfo; + ULONG ValidationInfo; + + /* The original routine seems to use a temporary SList to put blocks to be freed, + then it releases the lock and frees the blocks. But let's make it simple for now */ + + /* Acquire the delayed free queue lock */ + RtlEnterCriticalSection(&RtlpDphDelayedFreeQueueLock); + + /* Traverse the list */ + Current = RtlpDphDelayedFreeQueue.Flink; + while (Current != &RtlpDphDelayedFreeQueue); + { + /* Get the next entry pointer */ + Next = Current->Flink; + + BlockInfo = CONTAINING_RECORD(Current, DPH_BLOCK_INFORMATION, FreeQueue); + + /* Check if it belongs to the same heap */ + if (BlockInfo->Heap == DphRoot) + { + /* Remove it from the list */ + RemoveEntryList(Current); + + /* Reset its heap to NULL */ + BlockInfo->Heap = NULL; + + if (!RtlpDphIsNormalFreeHeapBlock(BlockInfo + 1, &ValidationInfo, TRUE)) + { + RtlpDphReportCorruptedBlock(DphRoot, 10, BlockInfo + 1, ValidationInfo); + } + + /* Decrement counters */ + RtlpDphMemoryUsedByDelayedFreeBlocks -= BlockInfo->ActualSize; + RtlpDphNumberOfDelayedFreeBlocks--; + + /* Free the normal heap */ + RtlFreeHeap (NormalHeap, 0, BlockInfo); + } + + /* Move to the next one */ + Current = Next; + } + + /* Release the delayed free queue lock */ + RtlLeaveCriticalSection(&RtlpDphDelayedFreeQueueLock); } NTSTATUS NTAPI @@ -1027,6 +1103,18 @@ RtlpDphIsPageHeapBlock(PDPH_HEAP_ROOT DphRoot, return (SomethingWrong == FALSE); } +BOOLEAN NTAPI +RtlpDphIsNormalFreeHeapBlock(PVOID Block, + PULONG ValidationInformation, + BOOLEAN CheckFillers) +{ + ASSERT(ValidationInformation != NULL); + + UNIMPLEMENTED; + *ValidationInformation = 0; + return TRUE; +} + NTSTATUS NTAPI RtlpDphProcessStartupInitialization() { From bc8d008551542d26d120a8a8f82f9dfd85878e3c Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 16 Feb 2011 23:29:50 +0000 Subject: [PATCH 048/287] [WIN32K] In IntEngGradientFillRect, take the translate value into account, that we need when drawing happens on an intermediate surface. Patch by Thomas Faber (ThFabba at gmx dot de) See issue #5805 for more details. svn path=/trunk/; revision=50764 --- reactos/subsystems/win32/win32k/eng/gradient.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/reactos/subsystems/win32/win32k/eng/gradient.c b/reactos/subsystems/win32/win32k/eng/gradient.c index 75faeae5c33..38d663c7723 100644 --- a/reactos/subsystems/win32/win32k/eng/gradient.c +++ b/reactos/subsystems/win32/win32k/eng/gradient.c @@ -130,7 +130,7 @@ IntEngGradientFillRect( { Color = XLATEOBJ_iXlate(pxlo, RGB(c[0], c[1], c[2])); DibFunctionsForBitmapFormat[psoOutput->iBitmapFormat].DIB_VLine( - psoOutput, y, FillRect.top, FillRect.bottom, Color); + psoOutput, y + Translate.x, FillRect.top + Translate.y, FillRect.bottom + Translate.y, Color); } HVSTEPCOL(0); HVSTEPCOL(1); @@ -158,7 +158,7 @@ IntEngGradientFillRect( { Color = XLATEOBJ_iXlate(pxlo, RGB(c[0], c[1], c[2])); DibFunctionsForBitmapFormat[psoOutput->iBitmapFormat].DIB_HLine( - psoOutput, FillRect.left, FillRect.right, y, Color); + psoOutput, FillRect.left + Translate.x, FillRect.right + Translate.x, y + Translate.y, Color); } HVSTEPCOL(0); HVSTEPCOL(1); @@ -187,7 +187,7 @@ IntEngGradientFillRect( for(; FillRect.top < FillRect.bottom; FillRect.top++) { DibFunctionsForBitmapFormat[psoOutput->iBitmapFormat].DIB_HLine( - psoOutput, FillRect.left, FillRect.right, FillRect.top, Color); + psoOutput, FillRect.left + Translate.x, FillRect.right + Translate.x, FillRect.top + Translate.y, Color); } } } @@ -318,7 +318,7 @@ IntEngGradientFillTriangle( //ULONG i; POINTL Translate; INTENG_ENTER_LEAVE EnterLeave; - RECTL FillRect; + RECTL FillRect = { 0, 0, 0, 0 }; //ULONG Color; //BOOL sx[NLINES]; From 9d4ba43f0bf34cabc05ef8b3203bc5ad0c651bf6 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Thu, 17 Feb 2011 14:46:30 +0000 Subject: [PATCH 049/287] [RTL/DPH] - Implement allocating from the page heap along with all necessary helper routines. Some minor things are left though, so it doesn't work yet. - Change some defines names to more meaningful/readable. svn path=/trunk/; revision=50766 --- reactos/lib/rtl/heappage.c | 303 +++++++++++++++++++++++++++++++++++-- 1 file changed, 291 insertions(+), 12 deletions(-) diff --git a/reactos/lib/rtl/heappage.c b/reactos/lib/rtl/heappage.c index cb09b6c4416..4706cca0df2 100644 --- a/reactos/lib/rtl/heappage.c +++ b/reactos/lib/rtl/heappage.c @@ -146,14 +146,16 @@ LONG RtlpDphProtectFails; #define DPH_DEBUG_VERBOSE 0x04 /* DPH ExtraFlags */ -#define DPH_EXTRA_CHECK_CORRUPTED_BLOCKS 0x10 +#define DPH_EXTRA_CHECK_UNDERRUN 0x10 +#define DPH_LOG_STACK_TRACES 0x0 //FIXME: Get correct value /* Fillers */ #define DPH_FILL 0xEEEEEEEE #define DPH_FILL_START_STAMP_1 0xABCDBBBB #define DPH_FILL_START_STAMP_2 0xABCDBBBA #define DPH_FILL_END_STAMP_1 0xDCBABBBB -#define DPH_FILL_BLOCK_END 0xD0 +#define DPH_FILL_SUFFIX 0xD0 +#define DPH_FILL_INFIX 0xC0 /* Validation info flags */ #define DPH_VALINFO_BAD_START_STAMP 0x01 @@ -186,6 +188,21 @@ RtlpDphIsNormalFreeHeapBlock(PVOID Block, PULONG ValidationInformation, BOOLEAN VOID NTAPI RtlpDphReportCorruptedBlock(PDPH_HEAP_ROOT DphRoot, ULONG Reserved, PVOID Block, ULONG ValidationInfo); +VOID NTAPI +RtlpDphRaiseException(NTSTATUS Status) +{ + EXCEPTION_RECORD Exception; + + /* Initialize exception record */ + Exception.ExceptionCode = Status; + Exception.ExceptionAddress = RtlpDphRaiseException; + Exception.ExceptionFlags = 0; + Exception.ExceptionRecord = NULL; + Exception.NumberParameters = 0; + + /* Raise the exception */ + RtlRaiseException(&Exception); +} PVOID NTAPI RtlpDphPointerFromHandle(PVOID Handle) @@ -248,6 +265,20 @@ RtlpDphPreProcessing(PDPH_HEAP_ROOT DphRoot, ULONG Flags) /* FIXME: Validate integrity, internal lists if necessary */ } +VOID NTAPI +RtlpDphPostProcessing(PDPH_HEAP_ROOT DphRoot) +{ + if (!DphRoot) return; + + if (RtlpDphDebugOptions & DPH_DEBUG_INTERNAL_VALIDATE) + { + /* FIXME: Validate integrity, internal lists if necessary */ + } + + /* Release the lock */ + RtlpDphLeaveCriticalSection(DphRoot); +} + NTSTATUS NTAPI RtlpSecMemFreeVirtualMemory(HANDLE Process, PVOID *Base, PSIZE_T Size, ULONG Type) { @@ -370,6 +401,53 @@ RtlpDphProtectVm(PVOID Base, SIZE_T Size, ULONG Protection) return Status; } +BOOLEAN NTAPI +RtlpDphWritePageHeapBlockInformation(PDPH_HEAP_ROOT DphRoot, PVOID UserAllocation, SIZE_T Size, SIZE_T UserSize) +{ + PDPH_BLOCK_INFORMATION BlockInfo; + PUCHAR FillPtr; + + /* Get pointer to the block info structure */ + BlockInfo = (PDPH_BLOCK_INFORMATION)UserAllocation - 1; + + /* Set up basic fields */ + BlockInfo->Heap = DphRoot; + BlockInfo->ActualSize = UserSize; + BlockInfo->RequestedSize = Size; + BlockInfo->StartStamp = DPH_FILL_START_STAMP_1; + BlockInfo->EndStamp = DPH_FILL_END_STAMP_1; + + /* Fill with a pattern */ + FillPtr = (PUCHAR)UserAllocation + Size; + RtlFillMemory(FillPtr, ROUND_UP(FillPtr, PAGE_SIZE) - FillPtr, DPH_FILL_SUFFIX); + + /* FIXME: Check if logging stack traces is turned on */ + //if (DphRoot->ExtraFlags & + + return TRUE; +} + +VOID NTAPI +RtlpDphPlaceOnBusyList(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK DphNode) +{ + BOOLEAN NewElement; + PVOID AddressUserData; + + /* Add it to the AVL busy nodes table */ + AddressUserData = RtlInsertElementGenericTableAvl(&DphRoot->BusyNodesTable, + &DphNode->pUserAllocation, + sizeof(ULONG_PTR), + &NewElement); + + ASSERT(AddressUserData == &DphNode->pUserAllocation); + ASSERT(NewElement == TRUE); + + /* Update heap counters */ + DphRoot->nBusyAllocations++; + DphRoot->nBusyAllocationBytesAccessible += DphNode->nVirtualAccessSize; + DphRoot->nBusyAllocationBytesCommitted += DphNode->nVirtualBlockSize; +} + VOID NTAPI RtlpDphPlaceOnPoolList(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK DphNode) { @@ -704,6 +782,28 @@ RtlpDphFindAvailableMemory(PDPH_HEAP_ROOT DphRoot, return Node; } +NTSTATUS NTAPI +RtlpDphSetProtectionBeforeUse(PDPH_HEAP_ROOT DphRoot, PUCHAR VirtualBlock, ULONG UserSize) +{ + ULONG Protection; + PVOID Base; + + // FIXME: Check this, when we should add up usersize and when we shouldn't! + if (!(DphRoot->ExtraFlags & DPH_EXTRA_CHECK_UNDERRUN)) + { + Base = VirtualBlock; + } + else + { + Base = VirtualBlock + UserSize; + } + + // FIXME: It should be different, but for now it's fine + Protection = PAGE_READWRITE; + + return RtlpDphProtectVm(Base, PAGE_SIZE, Protection); +} + PDPH_HEAP_BLOCK NTAPI RtlpDphAllocateNode(PDPH_HEAP_ROOT DphRoot) { @@ -870,9 +970,17 @@ RtlpDphCompareNodeForTable(IN PRTL_AVL_TABLE Table, IN PVOID FirstStruct, IN PVOID SecondStruct) { - UNIMPLEMENTED; - ASSERT(FALSE); - return 0; + ULONG_PTR FirstBlock, SecondBlock; + + FirstBlock = *((ULONG_PTR *)FirstStruct); + SecondBlock = *((ULONG_PTR *)SecondStruct); + + if (FirstBlock < SecondBlock) + return GenericLessThan; + else if (FirstBlock > SecondBlock) + return GenericGreaterThan; + + return GenericEqual; } PVOID @@ -880,9 +988,21 @@ NTAPI RtlpDphAllocateNodeForTable(IN PRTL_AVL_TABLE Table, IN CLONG ByteSize) { - UNIMPLEMENTED; - ASSERT(FALSE); - return NULL; + PDPH_HEAP_BLOCK pBlock; + PDPH_HEAP_ROOT DphRoot; + + /* This mega-assert comes from a text search over Windows 2003 checked binary of ntdll.dll */ + ASSERT((ULONG_PTR)(((PRTL_BALANCED_LINKS)0)+1) + sizeof(PUCHAR) == ByteSize); + + /* Get pointer to the containing heap root record */ + DphRoot = CONTAINING_RECORD(Table, DPH_HEAP_ROOT, BusyNodesTable); + pBlock = DphRoot->NodeToAllocate; + ASSERT(pBlock == (PDPH_HEAP_BLOCK)(Table+1)); // FIXME: Delete once confirmed + + DphRoot->NodeToAllocate = NULL; + ASSERT(pBlock); + + return &(pBlock->TableLinks); } VOID @@ -890,8 +1010,7 @@ NTAPI RtlpDphFreeNodeForTable(IN PRTL_AVL_TABLE Table, IN PVOID Buffer) { - UNIMPLEMENTED; - ASSERT(FALSE); + /* Nothing */ } NTSTATUS NTAPI @@ -984,6 +1103,12 @@ RtlpDphInternalValidatePageHeap(PDPH_HEAP_ROOT DphRoot, PVOID Address, ULONG Val UNIMPLEMENTED; } +VOID NTAPI +RtlpDphVerifyIntegrity(PDPH_HEAP_ROOT DphRoot) +{ + UNIMPLEMENTED; +} + VOID NTAPI RtlpDphReportCorruptedBlock(PDPH_HEAP_ROOT DphRoot, ULONG Reserved, @@ -1146,6 +1271,14 @@ RtlpDphProcessStartupInitialization() return Status; } +BOOLEAN NTAPI +RtlpDphShouldAllocateInPageHeap(PDPH_HEAP_ROOT DphRoot, + SIZE_T Size) +{ + UNIMPLEMENTED; + return TRUE; +} + HANDLE NTAPI RtlpPageHeapCreate(ULONG Flags, PVOID Addr, @@ -1317,7 +1450,7 @@ RtlpPageHeapDestroy(HANDLE HeapPtr) while (Node) { - if (!(DphRoot->ExtraFlags & DPH_EXTRA_CHECK_CORRUPTED_BLOCKS)) + if (!(DphRoot->ExtraFlags & DPH_EXTRA_CHECK_UNDERRUN)) { if (!RtlpDphIsPageHeapBlock(DphRoot, Node->pUserAllocation, &Value, TRUE)) { @@ -1371,7 +1504,153 @@ RtlpPageHeapAllocate(IN PVOID HeapPtr, IN ULONG Flags, IN SIZE_T Size) { - return NULL; + PDPH_HEAP_ROOT DphRoot; + PDPH_HEAP_BLOCK Node, AllocatedNode; + BOOLEAN Biased = FALSE; + ULONG TotalSize, UserSize; + NTSTATUS Status; + SIZE_T UserActualSize; + + /* Check requested size */ + if (Size > 0x7FF00000) + { + DPRINT1("extreme size request\n"); + + /* Generate an exception if needed */ + if (Flags & HEAP_GENERATE_EXCEPTIONS) RtlpDphRaiseException(STATUS_NO_MEMORY); + + return NULL; + } + + /* Unbias the pointer if necessary */ + if (IS_BIASED_POINTER(HeapPtr)) + { + HeapPtr = (PVOID)POINTER_REMOVE_BIAS(HeapPtr); + Biased = TRUE; + } + + /* Get a pointer to the heap root */ + DphRoot = RtlpDphPointerFromHandle(HeapPtr); + if (!DphRoot) return NULL; + + /* Acquire the heap lock */ + //RtlpDphEnterCriticalSection(DphRoot, Flags); + RtlpDphPreProcessing(DphRoot, Flags); + + /* Perform internal validation if specified by flags */ + if (RtlpDphDebugOptions & DPH_DEBUG_INTERNAL_VALIDATE && !Biased) + { + RtlpDphInternalValidatePageHeap(DphRoot, NULL, 0); + } + + /* Add heap flags */ + Flags |= DphRoot->HeapFlags; + + if (!Biased && !RtlpDphShouldAllocateInPageHeap(DphRoot, Size)) + { + /* Perform allocation from a normal heap */ + ASSERT(FALSE); + } + + /* Perform heap integrity check if specified by flags */ + if (RtlpDphDebugOptions & DPH_DEBUG_INTERNAL_VALIDATE) + { + RtlpDphVerifyIntegrity(DphRoot); + } + + /* Calculate sizes */ + UserSize = ROUND_UP(Size + sizeof(DPH_BLOCK_INFORMATION), PAGE_SIZE); + TotalSize = UserSize + PAGE_SIZE; + + // RtlpDphAllocateNode(DphRoot); + Node = RtlpDphFindAvailableMemory(DphRoot, TotalSize, TRUE); + if (!Node) + { + DPRINT1("Page heap: Unable to allocate virtual memory\n"); + DbgBreakPoint(); + + /* Release the lock */ + RtlpDphPostProcessing(DphRoot); + + return NULL; + } + ASSERT(Node->nVirtualBlockSize >= TotalSize); + + /* Set protection */ + Status = RtlpDphSetProtectionBeforeUse(DphRoot, Node->pVirtualBlock, UserSize); + if (!NT_SUCCESS(Status)) + { + ASSERT(FALSE); + } + + /* Check node's size */ + if (Node->nVirtualBlockSize > TotalSize) + { + /* The block contains too much free space, reduce it */ + Node->pVirtualBlock += TotalSize; + Node->nVirtualBlockSize -= TotalSize; + DphRoot->nAvailableAllocationBytesCommitted -= TotalSize; + + AllocatedNode = RtlpDphAllocateNode(DphRoot); + ASSERT(AllocatedNode != NULL); + AllocatedNode->pVirtualBlock = Node->pVirtualBlock - TotalSize; + AllocatedNode->nVirtualBlockSize = TotalSize; + } + else + { + /* The block's size fits exactly */ + RtlpDphRemoveFromAvailableList(DphRoot, Node); + AllocatedNode = Node; + } + + /* Calculate actual user size */ + if (DphRoot->HeapFlags & HEAP_NO_ALIGNMENT) + UserActualSize = Size; + else + UserActualSize = ROUND_UP(Size, 8); + + /* Set up the block */ + AllocatedNode->nVirtualAccessSize = UserSize; + AllocatedNode->nUserActualSize = UserActualSize; + AllocatedNode->nUserRequestedSize = Size; + + if (DphRoot->ExtraFlags & DPH_EXTRA_CHECK_UNDERRUN) + AllocatedNode->pUserAllocation = AllocatedNode->pVirtualBlock + PAGE_SIZE; + else + AllocatedNode->pUserAllocation = AllocatedNode->pVirtualBlock + AllocatedNode->nVirtualAccessSize - UserActualSize; + + AllocatedNode->UserValue = NULL; + AllocatedNode->UserFlags = Flags & HEAP_SETTABLE_USER_FLAGS; + + // FIXME: Don't forget about stack traces if such flag was set + AllocatedNode->StackTrace = NULL; + + /* Place it on busy list */ + RtlpDphPlaceOnBusyList(DphRoot, AllocatedNode); + + /* Zero or patter-fill memory depending on flags */ + if (Flags & HEAP_ZERO_MEMORY) + RtlZeroMemory(AllocatedNode->pUserAllocation, Size); + else + RtlFillMemory(AllocatedNode->pUserAllocation, Size, DPH_FILL_INFIX); + + /* Write DPH info */ + if (!(DphRoot->ExtraFlags & DPH_EXTRA_CHECK_UNDERRUN)) + { + RtlpDphWritePageHeapBlockInformation(DphRoot, AllocatedNode->pUserAllocation, Size, UserSize); + } + + /* Finally allocation is done, perform validation again if required */ + if (RtlpDphDebugOptions & DPH_DEBUG_INTERNAL_VALIDATE && !Biased) + { + RtlpDphInternalValidatePageHeap(DphRoot, NULL, 0); + } + + /* Release the lock */ + RtlpDphPostProcessing(DphRoot); + + /* Return pointer to user allocation */ + return AllocatedNode->pUserAllocation; } BOOLEAN NTAPI From f333f561b4a689b1c80cbff40091f2ea41abbb14 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Thu, 17 Feb 2011 15:31:19 +0000 Subject: [PATCH 050/287] - Fix build. svn path=/trunk/; revision=50767 --- reactos/lib/rtl/heappage.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/lib/rtl/heappage.c b/reactos/lib/rtl/heappage.c index 4706cca0df2..18415466680 100644 --- a/reactos/lib/rtl/heappage.c +++ b/reactos/lib/rtl/heappage.c @@ -419,7 +419,7 @@ RtlpDphWritePageHeapBlockInformation(PDPH_HEAP_ROOT DphRoot, PVOID UserAllocatio /* Fill with a pattern */ FillPtr = (PUCHAR)UserAllocation + Size; - RtlFillMemory(FillPtr, ROUND_UP(FillPtr, PAGE_SIZE) - FillPtr, DPH_FILL_SUFFIX); + RtlFillMemory(FillPtr, ROUND_UP(FillPtr, PAGE_SIZE) - (ULONG_PTR)FillPtr, DPH_FILL_SUFFIX); /* FIXME: Check if logging stack traces is turned on */ //if (DphRoot->ExtraFlags & @@ -1216,7 +1216,7 @@ RtlpDphIsPageHeapBlock(PDPH_HEAP_ROOT DphRoot, End = (PUCHAR)ROUND_UP(Start, PAGE_SIZE); for (Byte = Start; Byte < End; Byte++) { - if (*Byte != DPH_FILL_BLOCK_END) + if (*Byte != DPH_FILL_SUFFIX) { *ValidationInformation |= DPH_VALINFO_BAD_SUFFIX_PATTERN; SomethingWrong = TRUE; From 85e4bbe4f5b9dfb5ce065ace1980ce2affc2c877 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Thu, 17 Feb 2011 16:52:06 +0000 Subject: [PATCH 051/287] [RTL/AVL] - Remove unnecessary field from TABLE_ENTRY_HEADER. Spotted by (the only in ReactOS?) user of RTL AVL tables - page heap. svn path=/trunk/; revision=50768 --- reactos/lib/rtl/avlsupp.c | 1 - 1 file changed, 1 deletion(-) diff --git a/reactos/lib/rtl/avlsupp.c b/reactos/lib/rtl/avlsupp.c index 50b96ce2874..d50d5e8e286 100644 --- a/reactos/lib/rtl/avlsupp.c +++ b/reactos/lib/rtl/avlsupp.c @@ -12,7 +12,6 @@ typedef struct _TABLE_ENTRY_HEADER { RTL_BALANCED_LINKS BalancedLinks; - LIST_ENTRY ListEntry; LONGLONG UserData; } TABLE_ENTRY_HEADER, *PTABLE_ENTRY_HEADER; From 02ad384a403787ae022ae53b73ef6cfdb959828c Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Thu, 17 Feb 2011 21:58:08 +0000 Subject: [PATCH 052/287] [NTOS/MM] - An accompanying change to r50768. Fixes boot. svn path=/trunk/; revision=50770 --- reactos/ntoskrnl/mm/ARM3/miavl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/mm/ARM3/miavl.h b/reactos/ntoskrnl/mm/ARM3/miavl.h index 8b0ce6db62c..da698d6f70c 100644 --- a/reactos/ntoskrnl/mm/ARM3/miavl.h +++ b/reactos/ntoskrnl/mm/ARM3/miavl.h @@ -44,7 +44,7 @@ RtlpAvlCompareRoutine(IN PRTL_AVL_TABLE Table, IN PVOID Buffer, IN PVOID UserData) { - PRTL_BALANCED_LINKS CurrentNode = (PVOID)((ULONG_PTR)UserData - sizeof(LIST_ENTRY) - sizeof(RTL_BALANCED_LINKS)); + PRTL_BALANCED_LINKS CurrentNode = (PVOID)((ULONG_PTR)UserData - sizeof(RTL_BALANCED_LINKS)); ULONG_PTR StartingVpn = (ULONG_PTR)Buffer; if (StartingVpn < CurrentNode->StartingVpn) { From 708dbb878c84fabe8e497c9772a3aa97dfce618f Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Thu, 17 Feb 2011 22:29:49 +0000 Subject: [PATCH 053/287] [RTL/DPH] - Various fixes: set NodeToAllocate member of the heap root so it could be used lated in AVL allocation routine, initialize the AvailableAllocation list. - Comment out biased pointer checks for now, and fix biasing the AdjacencyEntry pointer (spotted by rafalh). svn path=/trunk/; revision=50773 --- reactos/lib/rtl/heappage.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/reactos/lib/rtl/heappage.c b/reactos/lib/rtl/heappage.c index 18415466680..be1b18b69b3 100644 --- a/reactos/lib/rtl/heappage.c +++ b/reactos/lib/rtl/heappage.c @@ -434,6 +434,7 @@ RtlpDphPlaceOnBusyList(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK DphNode) PVOID AddressUserData; /* Add it to the AVL busy nodes table */ + DphRoot->NodeToAllocate = DphNode; AddressUserData = RtlInsertElementGenericTableAvl(&DphRoot->BusyNodesTable, &DphNode->pUserAllocation, sizeof(ULONG_PTR), @@ -518,8 +519,8 @@ RtlpDphRemoveFromAvailableList(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK Node) { /* Make sure Adjacency list pointers are biased */ - ASSERT(IS_BIASED_POINTER(Node->AdjacencyEntry.Flink)); - ASSERT(IS_BIASED_POINTER(Node->AdjacencyEntry.Blink)); + //ASSERT(IS_BIASED_POINTER(Node->AdjacencyEntry.Flink)); + //ASSERT(IS_BIASED_POINTER(Node->AdjacencyEntry.Blink)); /* Remove it from the list */ RemoveEntryList(&Node->AvailableEntry); @@ -529,8 +530,8 @@ RtlpDphRemoveFromAvailableList(PDPH_HEAP_ROOT DphRoot, DphRoot->nAvailableAllocationBytesCommitted -= Node->nVirtualBlockSize; /* Remove bias from the AdjacencyEntry pointer */ - POINTER_REMOVE_BIAS(Node->AdjacencyEntry.Flink); - POINTER_REMOVE_BIAS(Node->AdjacencyEntry.Blink); + Node->AdjacencyEntry.Flink = (PLIST_ENTRY)POINTER_REMOVE_BIAS(Node->AdjacencyEntry.Flink); + Node->AdjacencyEntry.Blink = (PLIST_ENTRY)POINTER_REMOVE_BIAS(Node->AdjacencyEntry.Blink); } VOID NTAPI @@ -720,8 +721,8 @@ RtlpDphSearchAvailableMemoryListForBestFit(PDPH_HEAP_ROOT DphRoot, } /* Make sure Adjacency list pointers are biased */ - ASSERT(IS_BIASED_POINTER(Node->AdjacencyEntry.Flink)); - ASSERT(IS_BIASED_POINTER(Node->AdjacencyEntry.Blink)); + //ASSERT(IS_BIASED_POINTER(Node->AdjacencyEntry.Flink)); + //ASSERT(IS_BIASED_POINTER(Node->AdjacencyEntry.Blink)); return Node; } @@ -997,7 +998,6 @@ RtlpDphAllocateNodeForTable(IN PRTL_AVL_TABLE Table, /* Get pointer to the containing heap root record */ DphRoot = CONTAINING_RECORD(Table, DPH_HEAP_ROOT, BusyNodesTable); pBlock = DphRoot->NodeToAllocate; - ASSERT(pBlock == (PDPH_HEAP_BLOCK)(Table+1)); // FIXME: Delete once confirmed DphRoot->NodeToAllocate = NULL; ASSERT(pBlock); @@ -1348,6 +1348,7 @@ RtlpPageHeapCreate(ULONG Flags, DphRoot->Seed = PerfCounter.LowPart; RtlInitializeCriticalSection(DphRoot->HeapCritSect); + InitializeListHead(&DphRoot->AvailableAllocationHead); /* Create a normal heap for this paged heap */ DphRoot->NormalHeap = RtlCreateHeap(Flags, NULL, TotalSize, CommitSize, NULL, (PRTL_HEAP_PARAMETERS)-1); From 6e305f061532126cfcf0c598d3d0fe9155177a04 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Fri, 18 Feb 2011 09:48:13 +0000 Subject: [PATCH 054/287] [RTL/AVL] - Fix an inverted condition which resulted in incorrect assignment of NewElement var in RtlInsertElementGenericTableAvl(). svn path=/trunk/; revision=50784 --- reactos/lib/rtl/avltable.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/lib/rtl/avltable.c b/reactos/lib/rtl/avltable.c index acfb99d4a64..6578a71d972 100644 --- a/reactos/lib/rtl/avltable.c +++ b/reactos/lib/rtl/avltable.c @@ -88,7 +88,7 @@ RtlInsertElementGenericTableFullAvl(IN PRTL_AVL_TABLE Table, } /* Return status */ - if (NewElement) *NewElement = (SearchResult == TableFoundNode); + if (NewElement) *NewElement = (SearchResult != TableFoundNode); /* Return pointer to user data */ return UserData; From 20ec1352081bf5ab07baebde45e594e5b90c986a Mon Sep 17 00:00:00 2001 From: Giannis Adamopoulos Date: Fri, 18 Feb 2011 14:26:11 +0000 Subject: [PATCH 055/287] [win32k] - Check if CombinedClip is NULL before accesing it Should fix a crash with Download Master svn path=/trunk/; revision=50797 --- reactos/subsystems/win32/win32k/objects/bitmaps.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/reactos/subsystems/win32/win32k/objects/bitmaps.c b/reactos/subsystems/win32/win32k/objects/bitmaps.c index 23e8c395b7d..0b3f56e7d6f 100644 --- a/reactos/subsystems/win32/win32k/objects/bitmaps.c +++ b/reactos/subsystems/win32/win32k/objects/bitmaps.c @@ -438,7 +438,8 @@ NtGdiGetPixel(HDC hDC, INT XPos, INT YPos) XPos += dc->ptlDCOrig.x; YPos += dc->ptlDCOrig.y; - if (RECTL_bPointInRect(&dc->rosdc.CombinedClip->rclBounds, XPos, YPos)) + if ((dc->rosdc.CombinedClip == NULL) || + (RECTL_bPointInRect(&dc->rosdc.CombinedClip->rclBounds, XPos, YPos))) { bInRect = TRUE; psurf = dc->dclevel.pSurface; From a33a1f21db9b2a8996acb417a72c008a738ddc2e Mon Sep 17 00:00:00 2001 From: Giannis Adamopoulos Date: Fri, 18 Feb 2011 14:28:58 +0000 Subject: [PATCH 056/287] [explorer] - Fix some visual problems in the toolbar svn path=/trunk/; revision=50798 --- reactos/base/shell/explorer/shell/mainframe.cpp | 2 +- reactos/base/shell/explorer/shell/shellbrowser.cpp | 8 ++++++-- reactos/base/shell/explorer/utility/window.cpp | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/reactos/base/shell/explorer/shell/mainframe.cpp b/reactos/base/shell/explorer/shell/mainframe.cpp index 9019de568cc..d03efbfcd7e 100644 --- a/reactos/base/shell/explorer/shell/mainframe.cpp +++ b/reactos/base/shell/explorer/shell/mainframe.cpp @@ -873,7 +873,7 @@ HWND MDIMainFrame::Create() HMENU hMenuFrame = LoadMenu(g_Globals._hInstance, MAKEINTRESOURCE(IDM_MDIFRAME)); return Window::Create(WINDOW_CREATOR(MDIMainFrame), 0, - (LPCTSTR)(int)g_Globals._hframeClass, ResString(IDS_TITLE), WS_OVERLAPPEDWINDOW, + (LPCTSTR)(int)g_Globals._hframeClass, ResString(IDS_TITLE), WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0/*hwndDesktop*/, hMenuFrame); } diff --git a/reactos/base/shell/explorer/shell/shellbrowser.cpp b/reactos/base/shell/explorer/shell/shellbrowser.cpp index a8728293e0f..17a23d01b52 100644 --- a/reactos/base/shell/explorer/shell/shellbrowser.cpp +++ b/reactos/base/shell/explorer/shell/shellbrowser.cpp @@ -654,8 +654,12 @@ MDIShellBrowserChild::MDIShellBrowserChild(HWND hwnd, const ShellChildWndInfo& i MDIShellBrowserChild* MDIShellBrowserChild::create(const ShellChildWndInfo& info) { - ChildWindow* child = ChildWindow::create(info, info._pos.rcNormalPosition, - WINDOW_CREATOR_INFO(MDIShellBrowserChild,ShellChildWndInfo), CLASSNAME_CHILDWND, NULL, info._pos.showCmd==SW_SHOWMAXIMIZED? WS_MAXIMIZE: 0); + ChildWindow* child = ChildWindow::create(info, + info._pos.rcNormalPosition, + WINDOW_CREATOR_INFO(MDIShellBrowserChild,ShellChildWndInfo), + CLASSNAME_CHILDWND, + NULL, + WS_CLIPCHILDREN | (info._pos.showCmd==SW_SHOWMAXIMIZED? WS_MAXIMIZE: 0)); return static_cast(child); } diff --git a/reactos/base/shell/explorer/utility/window.cpp b/reactos/base/shell/explorer/utility/window.cpp index cfbce1db79f..4ad750f7a8c 100644 --- a/reactos/base/shell/explorer/utility/window.cpp +++ b/reactos/base/shell/explorer/utility/window.cpp @@ -39,7 +39,7 @@ WindowClass::WindowClass(LPCTSTR classname, UINT style_, WNDPROC wndproc) style = style_; hInstance = g_Globals._hInstance; hCursor = LoadCursor(0, IDC_ARROW); - + this->hbrBackground = (HBRUSH)(COLOR_BTNFACE+1); lpszClassName = classname; lpfnWndProc = wndproc; From b58bdd0a999e4c520fa42e33eb272780044ebf67 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 18 Feb 2011 14:35:44 +0000 Subject: [PATCH 057/287] [WIN32K] compile gdidebug code as a seperate file and give it a seperate header svn path=/trunk/; revision=50799 --- .../win32/win32k/include/gdidebug.h | 75 +++++++++++++++++++ .../subsystems/win32/win32k/include/win32kp.h | 1 + .../subsystems/win32/win32k/objects/gdidbg.c | 75 +++++-------------- .../subsystems/win32/win32k/objects/gdiobj.c | 4 - reactos/subsystems/win32/win32k/win32k.rbuild | 1 + 5 files changed, 96 insertions(+), 60 deletions(-) create mode 100644 reactos/subsystems/win32/win32k/include/gdidebug.h diff --git a/reactos/subsystems/win32/win32k/include/gdidebug.h b/reactos/subsystems/win32/win32k/include/gdidebug.h new file mode 100644 index 00000000000..42c20f97c82 --- /dev/null +++ b/reactos/subsystems/win32/win32k/include/gdidebug.h @@ -0,0 +1,75 @@ +#pragma once + +extern ULONG gulDebugChannels; + +enum _DEBUGCHANNELS +{ + DbgCustom = 1, + DbgObjects = 2, + DbgBitBlt = 4, + DbgXlate = 8, + DbgModeSwitch = 16, +}; + +#define DBGENABLE(ch) gulDebugChannels |= (ch); +#define DBGDISABLE(ch) gulDebugChannels &= ~(ch); +#define DPRINTCH(ch) if (gulDebugChannels & (ch)) DbgPrint + +#ifdef GDI_DEBUG + +#define KeRosDumpStackFrames(Frames, Count) KdSystemDebugControl('DsoR', (PVOID)Frames, Count, NULL, 0, NULL, KernelMode) +NTSYSAPI ULONG APIENTRY RtlWalkFrameChain(OUT PVOID *Callers, IN ULONG Count, IN ULONG Flags); + +#define IS_HANDLE_VALID(idx) \ + ((GdiHandleTable->Entries[idx].Type & GDI_ENTRY_BASETYPE_MASK) != 0) + +#define GDIDBG_TRACECALLER() \ + DPRINT1("-> called from:\n"); \ + KeRosDumpStackFrames(NULL, 20); +#define GDIDBG_TRACEALLOCATOR(handle) \ + DPRINT1("-> allocated from:\n"); \ + KeRosDumpStackFrames(GDIHandleAllocator[GDI_HANDLE_GET_INDEX(handle)], GDI_STACK_LEVELS); +#define GDIDBG_TRACELOCKER(handle) \ + DPRINT1("-> locked from:\n"); \ + KeRosDumpStackFrames(GDIHandleLocker[GDI_HANDLE_GET_INDEX(handle)], GDI_STACK_LEVELS); +#define GDIDBG_TRACESHARELOCKER(handle) \ + DPRINT1("-> locked from:\n"); \ + KeRosDumpStackFrames(GDIHandleShareLocker[GDI_HANDLE_GET_INDEX(handle)], GDI_STACK_LEVELS); +#define GDIDBG_TRACEDELETER(handle) \ + DPRINT1("-> deleted from:\n"); \ + KeRosDumpStackFrames(GDIHandleDeleter[GDI_HANDLE_GET_INDEX(handle)], GDI_STACK_LEVELS); +#define GDIDBG_CAPTUREALLOCATOR(handle) \ + CaptureStackBackTace((PVOID*)GDIHandleAllocator[GDI_HANDLE_GET_INDEX(handle)], GDI_STACK_LEVELS); +#define GDIDBG_CAPTURELOCKER(handle) \ + CaptureStackBackTace((PVOID*)GDIHandleLocker[GDI_HANDLE_GET_INDEX(handle)], GDI_STACK_LEVELS); +#define GDIDBG_CAPTURESHARELOCKER(handle) \ + CaptureStackBackTace((PVOID*)GDIHandleShareLocker[GDI_HANDLE_GET_INDEX(handle)], GDI_STACK_LEVELS); +#define GDIDBG_CAPTUREDELETER(handle) \ + CaptureStackBackTace((PVOID*)GDIHandleDeleter[GDI_HANDLE_GET_INDEX(handle)], GDI_STACK_LEVELS); +#define GDIDBG_DUMPHANDLETABLE() \ + IntDumpHandleTable(GdiHandleTable) +#define GDIDBG_INITLOOPTRACE() \ + ULONG Attempts = 0; +#define GDIDBG_TRACELOOP(Handle, PrevThread, Thread) \ + if ((++Attempts % 20) == 0) \ + { \ + DPRINT1("[%d] Handle 0x%p Locked by 0x%x (we're 0x%x)\n", Attempts, Handle, PrevThread, Thread); \ + } + +#else + +#define GDIDBG_TRACECALLER() +#define GDIDBG_TRACEALLOCATOR(index) +#define GDIDBG_TRACELOCKER(index) +#define GDIDBG_TRACESHARELOCKER(index) +#define GDIDBG_CAPTUREALLOCATOR(index) +#define GDIDBG_CAPTURELOCKER(index) +#define GDIDBG_CAPTURESHARELOCKER(index) +#define GDIDBG_CAPTUREDELETER(handle) +#define GDIDBG_DUMPHANDLETABLE() +#define GDIDBG_INITLOOPTRACE() +#define GDIDBG_TRACELOOP(Handle, PrevThread, Thread) +#define GDIDBG_TRACEDELETER(handle) + +#endif /* GDI_DEBUG */ + diff --git a/reactos/subsystems/win32/win32k/include/win32kp.h b/reactos/subsystems/win32/win32k/include/win32kp.h index 7842bb276d9..94bf3190b85 100644 --- a/reactos/subsystems/win32/win32k/include/win32kp.h +++ b/reactos/subsystems/win32/win32k/include/win32kp.h @@ -87,3 +87,4 @@ #include #include #include +#include diff --git a/reactos/subsystems/win32/win32k/objects/gdidbg.c b/reactos/subsystems/win32/win32k/objects/gdidbg.c index efa686fc06b..3a0ac31600b 100644 --- a/reactos/subsystems/win32/win32k/objects/gdidbg.c +++ b/reactos/subsystems/win32/win32k/objects/gdidbg.c @@ -1,7 +1,21 @@ -#ifdef GDI_DEBUG +/* + * PROJECT: ReactOS win32 kernel mode subsystem + * LICENSE: GPL - See COPYING in the top level directory + * FILE: subsystems/win32/win32k/objects/gdidbg.c + * PURPOSE: Special debugging functions for gdi + * PROGRAMMERS: Timo Kreuzer + */ -#define KeRosDumpStackFrames(Frames, Count) KdSystemDebugControl('DsoR', (PVOID)Frames, Count, NULL, 0, NULL, KernelMode) -NTSYSAPI ULONG APIENTRY RtlWalkFrameChain(OUT PVOID *Callers, IN ULONG Count, IN ULONG Flags); +/** INCLUDES ******************************************************************/ + +#include +#define NDEBUG +#include + + +ULONG gulDebugChannels = 0; + +#ifdef GDI_DEBUG #define GDI_STACK_LEVELS 20 static ULONG_PTR GDIHandleAllocator[GDI_HANDLE_COUNT][GDI_STACK_LEVELS+1]; @@ -37,9 +51,6 @@ CompareBacktraces(ULONG idx1, ULONG idx2) return TRUE; } -#define IS_HANDLE_VALID(idx) \ - ((GdiHandleTable->Entries[idx].Type & GDI_ENTRY_BASETYPE_MASK) != 0) - void IntDumpHandleTable(PGDI_HANDLE_TABLE HandleTable) { static int leak_reported = 0; @@ -110,8 +121,8 @@ void IntDumpHandleTable(PGDI_HANDLE_TABLE HandleTable) for (i = 0; i < nTraces && AllocatorTable[i].count > 1; i++) { /* Print out the allocation count */ - DbgPrint(" %i allocs, type = 0x%lx:\n", - AllocatorTable[i].count, + DbgPrint(" %i allocs, type = 0x%lx:\n", + AllocatorTable[i].count, GdiHandleTable->Entries[AllocatorTable[i].idx].Type); /* Dump the frames */ @@ -272,39 +283,6 @@ GdiDbgHTIntegrityCheck() return r; } -#define GDIDBG_TRACECALLER() \ - DPRINT1("-> called from:\n"); \ - KeRosDumpStackFrames(NULL, 20); -#define GDIDBG_TRACEALLOCATOR(handle) \ - DPRINT1("-> allocated from:\n"); \ - KeRosDumpStackFrames(GDIHandleAllocator[GDI_HANDLE_GET_INDEX(handle)], GDI_STACK_LEVELS); -#define GDIDBG_TRACELOCKER(handle) \ - DPRINT1("-> locked from:\n"); \ - KeRosDumpStackFrames(GDIHandleLocker[GDI_HANDLE_GET_INDEX(handle)], GDI_STACK_LEVELS); -#define GDIDBG_TRACESHARELOCKER(handle) \ - DPRINT1("-> locked from:\n"); \ - KeRosDumpStackFrames(GDIHandleShareLocker[GDI_HANDLE_GET_INDEX(handle)], GDI_STACK_LEVELS); -#define GDIDBG_TRACEDELETER(handle) \ - DPRINT1("-> deleted from:\n"); \ - KeRosDumpStackFrames(GDIHandleDeleter[GDI_HANDLE_GET_INDEX(handle)], GDI_STACK_LEVELS); -#define GDIDBG_CAPTUREALLOCATOR(handle) \ - CaptureStackBackTace((PVOID*)GDIHandleAllocator[GDI_HANDLE_GET_INDEX(handle)], GDI_STACK_LEVELS); -#define GDIDBG_CAPTURELOCKER(handle) \ - CaptureStackBackTace((PVOID*)GDIHandleLocker[GDI_HANDLE_GET_INDEX(handle)], GDI_STACK_LEVELS); -#define GDIDBG_CAPTURESHARELOCKER(handle) \ - CaptureStackBackTace((PVOID*)GDIHandleShareLocker[GDI_HANDLE_GET_INDEX(handle)], GDI_STACK_LEVELS); -#define GDIDBG_CAPTUREDELETER(handle) \ - CaptureStackBackTace((PVOID*)GDIHandleDeleter[GDI_HANDLE_GET_INDEX(handle)], GDI_STACK_LEVELS); -#define GDIDBG_DUMPHANDLETABLE() \ - IntDumpHandleTable(GdiHandleTable) -#define GDIDBG_INITLOOPTRACE() \ - ULONG Attempts = 0; -#define GDIDBG_TRACELOOP(Handle, PrevThread, Thread) \ - if ((++Attempts % 20) == 0) \ - { \ - DPRINT1("[%d] Handle 0x%p Locked by 0x%x (we're 0x%x)\n", Attempts, Handle, PrevThread, Thread); \ - } - ULONG FASTCALL GDIOBJ_IncrementShareCount(POBJ Object) @@ -315,20 +293,5 @@ GDIOBJ_IncrementShareCount(POBJ Object) return cLocks; } -#else - -#define GDIDBG_TRACECALLER() -#define GDIDBG_TRACEALLOCATOR(index) -#define GDIDBG_TRACELOCKER(index) -#define GDIDBG_TRACESHARELOCKER(index) -#define GDIDBG_CAPTUREALLOCATOR(index) -#define GDIDBG_CAPTURELOCKER(index) -#define GDIDBG_CAPTURESHARELOCKER(index) -#define GDIDBG_CAPTUREDELETER(handle) -#define GDIDBG_DUMPHANDLETABLE() -#define GDIDBG_INITLOOPTRACE() -#define GDIDBG_TRACELOOP(Handle, PrevThread, Thread) -#define GDIDBG_TRACEDELETER(handle) - #endif /* GDI_DEBUG */ diff --git a/reactos/subsystems/win32/win32k/objects/gdiobj.c b/reactos/subsystems/win32/win32k/objects/gdiobj.c index beeee0a7cdf..deb62e6ea10 100644 --- a/reactos/subsystems/win32/win32k/objects/gdiobj.c +++ b/reactos/subsystems/win32/win32k/objects/gdiobj.c @@ -8,8 +8,6 @@ /** INCLUDES ******************************************************************/ -//#define GDI_DEBUG - #include #define NDEBUG #include @@ -28,8 +26,6 @@ DPRINT("%s:%i: Delay\n", __FILE__, __LINE__); \ KeDelayExecutionThread(KernelMode, FALSE, &ShortDelay) -#include "gdidbg.c" - static BOOL INTERNAL_CALL GDI_CleanupDummy(PVOID ObjectBody); diff --git a/reactos/subsystems/win32/win32k/win32k.rbuild b/reactos/subsystems/win32/win32k/win32k.rbuild index a472d21178e..fa51a09635a 100644 --- a/reactos/subsystems/win32/win32k/win32k.rbuild +++ b/reactos/subsystems/win32/win32k/win32k.rbuild @@ -184,6 +184,7 @@ freetype.c gdibatch.c gdiobj.c + gdidbg.c icm.c line.c metafile.c From da4ba71aeedf857225f8ab29156f0c204a631198 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Fri, 18 Feb 2011 14:45:13 +0000 Subject: [PATCH 058/287] [RTL/DPH] - Zero-initialize VM allocation base. - Don't reserve VM, just commit it right away. This was a premature optimisation. Instead, retry committing a smaller amount of memory if committing all memory fails. svn path=/trunk/; revision=50800 --- reactos/lib/rtl/heappage.c | 39 +++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/reactos/lib/rtl/heappage.c b/reactos/lib/rtl/heappage.c index be1b18b69b3..f95986df338 100644 --- a/reactos/lib/rtl/heappage.c +++ b/reactos/lib/rtl/heappage.c @@ -108,9 +108,6 @@ ULONG RtlpPageHeapSizeRangeStart, RtlpPageHeapSizeRangeEnd; ULONG RtlpPageHeapDllRangeStart, RtlpPageHeapDllRangeEnd; WCHAR RtlpDphTargetDlls[512]; -ULONG RtlpDphBreakOptions; -ULONG RtlpDphDebugOptions; - LIST_ENTRY RtlpDphPageHeapList; BOOLEAN RtlpDphPageHeapListInitialized; RTL_CRITICAL_SECTION RtlpDphPageHeapListLock; @@ -177,6 +174,10 @@ LONG RtlpDphProtectFails; #define POINTER_REMOVE_BIAS(ptr) ((ULONG_PTR)(ptr) & ~(ULONG_PTR)1) #define POINTER_ADD_BIAS(ptr) ((ULONG_PTR)(ptr) & 1) + +ULONG RtlpDphBreakOptions = 0;//0xFFFFFFFF; +ULONG RtlpDphDebugOptions; + /* FUNCTIONS ******************************************************************/ BOOLEAN NTAPI @@ -312,7 +313,7 @@ RtlpDphAllocateVm(PVOID *Base, SIZE_T Size, ULONG Type, ULONG Protection) &Size, Type, Protection); - + DPRINT1("Page heap: AllocVm (%p, %p, %x) status %x \n", Base, Size, Type, Status); /* Check for failures */ if (!NT_SUCCESS(Status)) { @@ -348,7 +349,7 @@ RtlpDphFreeVm(PVOID Base, SIZE_T Size, ULONG Type) /* Free the memory */ Status = RtlpSecMemFreeVirtualMemory(NtCurrentProcess(), &Base, &Size, Type); - + DPRINT1("Page heap: FreeVm (%p, %p, %x) status %x \n", Base, Size, Type, Status); /* Log/report failures */ if (!NT_SUCCESS(Status)) { @@ -811,7 +812,7 @@ RtlpDphAllocateNode(PDPH_HEAP_ROOT DphRoot) PDPH_HEAP_BLOCK Node; NTSTATUS Status; SIZE_T Size = DPH_POOL_SIZE, SizeVirtual; - PVOID Ptr; + PVOID Ptr = NULL; /* Check for the easy case */ if (DphRoot->pUnusedNodeListHead) @@ -920,7 +921,7 @@ RtlpDphGrowVirtual(PDPH_HEAP_ROOT DphRoot, SIZE_T Size) { PDPH_HEAP_BLOCK Node, AvailableNode; - PVOID Base; + PVOID Base = NULL; SIZE_T VirtualSize; NTSTATUS Status; @@ -937,18 +938,26 @@ RtlpDphGrowVirtual(PDPH_HEAP_ROOT DphRoot, } /* Calculate size of VM to allocate by rounding it up */ - VirtualSize = (Size + 0xFFFF) & 0xFFFF0000; - if (VirtualSize < DPH_RESERVE_SIZE) + Size = ROUND_UP(Size, 0xFFFF); + VirtualSize = Size; + if (Size < DPH_RESERVE_SIZE) VirtualSize = DPH_RESERVE_SIZE; /* Allocate the virtual memory */ - Status = RtlpDphAllocateVm(&Base, VirtualSize, MEM_RESERVE, PAGE_NOACCESS); + // FIXME: Shouldn't it be MEM_RESERVE with later committing? + Status = RtlpDphAllocateVm(&Base, VirtualSize, MEM_COMMIT, PAGE_NOACCESS); if (!NT_SUCCESS(Status)) { - /* Free the allocated node and return failure */ - RtlpDphReturnNodeToUnusedList(DphRoot, Node); - RtlpDphReturnNodeToUnusedList(DphRoot, AvailableNode); - return FALSE; + /* Retry again with a smaller size */ + VirtualSize = Size; + Status = RtlpDphAllocateVm(&Base, VirtualSize, MEM_COMMIT, PAGE_NOACCESS); + if (!NT_SUCCESS(Status)) + { + /* Free the allocated node and return failure */ + RtlpDphReturnNodeToUnusedList(DphRoot, Node); + RtlpDphReturnNodeToUnusedList(DphRoot, AvailableNode); + return FALSE; + } } /* Set up our two nodes describing this VM */ @@ -1287,7 +1296,7 @@ RtlpPageHeapCreate(ULONG Flags, PVOID Lock, PRTL_HEAP_PARAMETERS Parameters) { - PVOID Base; + PVOID Base = NULL; PHEAP HeapPtr; PDPH_HEAP_ROOT DphRoot; PDPH_HEAP_BLOCK DphNode; From 269bbf132875573ea50407be2f56e787df7ceb7a Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 18 Feb 2011 15:01:00 +0000 Subject: [PATCH 059/287] [CSRSRV] Dereference all threads, when a process is terminated. Fixes ghost processes in taskmgr! Patch by Rafal Harabien, See issue #1567 for more details. svn path=/trunk/; revision=50803 --- .../subsystems/win32/csrss/csrsrv/api/process.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/reactos/subsystems/win32/csrss/csrsrv/api/process.c b/reactos/subsystems/win32/csrss/csrsrv/api/process.c index 8b7a4832f8d..58fb959611b 100644 --- a/reactos/subsystems/win32/csrss/csrsrv/api/process.c +++ b/reactos/subsystems/win32/csrss/csrsrv/api/process.c @@ -145,6 +145,8 @@ NTSTATUS WINAPI CsrFreeProcessData(HANDLE Pid) ULONG hash; PCSRSS_PROCESS_DATA pProcessData, *pPrevLink; HANDLE Process; + PLIST_ENTRY NextEntry; + PCSR_THREAD Thread; hash = ((ULONG_PTR)Pid >> 2) % (sizeof(ProcessData) / sizeof(*ProcessData)); pPrevLink = &ProcessData[hash]; @@ -161,14 +163,27 @@ NTSTATUS WINAPI CsrFreeProcessData(HANDLE Pid) DPRINT("CsrFreeProcessData pid: %d\n", Pid); Process = pProcessData->Process; CallProcessDeleted(pProcessData); + + /* Dereference all process threads */ + NextEntry = pProcessData->ThreadList.Flink; + while (NextEntry != &pProcessData->ThreadList) + { + Thread = CONTAINING_RECORD(NextEntry, CSR_THREAD, Link); + NextEntry = NextEntry->Flink; + + CsrThreadRefcountZero(Thread); + } + if (pProcessData->CsrSectionViewBase) { NtUnmapViewOfSection(NtCurrentProcess(), pProcessData->CsrSectionViewBase); } + if (pProcessData->ServerCommunicationPort) { NtClose(pProcessData->ServerCommunicationPort); } + *pPrevLink = pProcessData->next; RtlFreeHeap(CsrssApiHeap, 0, pProcessData); From 5e45b1eb7af3cc87ea3f24a1df83ab12ebb9e2a3 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 18 Feb 2011 15:08:50 +0000 Subject: [PATCH 060/287] [WIN32K] Fix a bug in GDIOBJ_LockObj, that would cause a deadlock, when an object was deleted while another thread was waiting to acquire the handle lock. svn path=/trunk/; revision=50804 --- .../subsystems/win32/win32k/objects/gdiobj.c | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/gdiobj.c b/reactos/subsystems/win32/win32k/objects/gdiobj.c index deb62e6ea10..7d2f7414809 100644 --- a/reactos/subsystems/win32/win32k/objects/gdiobj.c +++ b/reactos/subsystems/win32/win32k/objects/gdiobj.c @@ -1005,16 +1005,6 @@ GDIOBJ_LockObj(HGDIOBJ hObj, DWORD ExpectedType) } ProcessId = (HANDLE)((ULONG_PTR)PsGetCurrentProcessId() & ~1); - HandleProcessId = (HANDLE)((ULONG_PTR)Entry->ProcessId & ~1); - - /* Check for invalid owner. */ - if (ProcessId != HandleProcessId && HandleProcessId != NULL) - { - DPRINT1("Tried to lock object (0x%p) of wrong owner! ProcessId = %p, HandleProcessId = %p\n", hObj, ProcessId, HandleProcessId); - GDIDBG_TRACECALLER(); - GDIDBG_TRACEALLOCATOR(hObj); - return NULL; - } /* * Prevent the thread from being terminated during the locking process. @@ -1031,6 +1021,17 @@ GDIOBJ_LockObj(HGDIOBJ hObj, DWORD ExpectedType) for (;;) { + HandleProcessId = (HANDLE)((ULONG_PTR)Entry->ProcessId & ~1); + + /* Check for invalid owner. */ + if (ProcessId != HandleProcessId && HandleProcessId != NULL) + { + DPRINT1("Tried to lock object (0x%p) of wrong owner! ProcessId = %p, HandleProcessId = %p\n", hObj, ProcessId, HandleProcessId); + GDIDBG_TRACECALLER(); + GDIDBG_TRACEALLOCATOR(hObj); + break; + } + /* Lock the handle table entry. */ LockedProcessId = (HANDLE)((ULONG_PTR)HandleProcessId | 0x1); PrevProcId = InterlockedCompareExchangePointer((PVOID*)&Entry->ProcessId, From dda9fb952c7db14b5fe594a9f4868d2d21568643 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 18 Feb 2011 15:59:32 +0000 Subject: [PATCH 061/287] [NTOSKRNL] Alex messed up. Fix by Patch by Rafal Harabien, svn path=/trunk/; revision=50806 --- reactos/ntoskrnl/ps/state.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/ps/state.c b/reactos/ntoskrnl/ps/state.c index e64f227c140..62664f9cc10 100644 --- a/reactos/ntoskrnl/ps/state.c +++ b/reactos/ntoskrnl/ps/state.c @@ -510,7 +510,7 @@ NtQueueApcThread(IN HANDLE ThreadHandle, ExGetPreviousMode(), (PVOID)&Thread, NULL); - if (NT_SUCCESS(Status)) return Status; + if (!NT_SUCCESS(Status)) return Status; /* Check if this is a System Thread */ if (Thread->SystemThread) From bc92849c38185b1657ee36e464dab8362d85b0af Mon Sep 17 00:00:00 2001 From: Giannis Adamopoulos Date: Fri, 18 Feb 2011 16:28:52 +0000 Subject: [PATCH 062/287] [win32k] - Fix a bug that caused problems when the user clicks in the caption of a window to activate it svn path=/trunk/; revision=50807 --- reactos/subsystems/win32/win32k/ntuser/msgqueue.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/subsystems/win32/win32k/ntuser/msgqueue.c b/reactos/subsystems/win32/win32k/ntuser/msgqueue.c index 6947db56004..36ac945fb74 100644 --- a/reactos/subsystems/win32/win32k/ntuser/msgqueue.c +++ b/reactos/subsystems/win32/win32k/ntuser/msgqueue.c @@ -1093,7 +1093,7 @@ BOOL co_IntProcessMouseMessage(MSG* msg, BOOL* RemoveMessages, UINT first, UINT /* Activate the window if needed */ - if (msg->hwnd != MessageQueue->ActiveWindow) + if (msg->hwnd != UserGetForegroundWindow()) { PWND pwndTop = pwndMsg; while (pwndTop) From c7b9d6f0dfa6fa93a260de496ca697f5b54279d8 Mon Sep 17 00:00:00 2001 From: Giannis Adamopoulos Date: Fri, 18 Feb 2011 20:16:43 +0000 Subject: [PATCH 063/287] [user32/win32k] - Implement MessageBeep and SetLogonNotifyWindow [winlogon] - Implement receiving notifications from win32k to play sounds of MessageBeep svn path=/trunk/; revision=50813 --- reactos/base/system/winlogon/sas.c | 51 +++++++++++++++- reactos/base/system/winlogon/winlogon.c | 59 ++++++++++++++----- reactos/base/system/winlogon/winlogon.h | 8 +++ reactos/dll/win32/user32/misc/misc.c | 2 +- reactos/dll/win32/user32/windows/messagebox.c | 31 +--------- reactos/include/reactos/undocuser.h | 2 +- reactos/include/reactos/winlogon.h | 8 --- .../subsystems/win32/win32k/include/winsta.h | 1 + .../subsystems/win32/win32k/ntuser/ntstubs.c | 11 ---- .../win32/win32k/ntuser/simplecall.c | 3 + .../subsystems/win32/win32k/ntuser/winsta.c | 24 ++++++++ 11 files changed, 133 insertions(+), 67 deletions(-) diff --git a/reactos/base/system/winlogon/sas.c b/reactos/base/system/winlogon/sas.c index d4dbad881f6..d394439b191 100644 --- a/reactos/base/system/winlogon/sas.c +++ b/reactos/base/system/winlogon/sas.c @@ -25,8 +25,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(winlogon); #define HK_CTRL_ALT_DEL 0 #define HK_CTRL_SHIFT_ESC 1 -extern BOOL WINAPI SetLogonNotifyWindow(HWND Wnd, HWINSTA WinSta); - /* FUNCTIONS ****************************************************************/ static BOOL @@ -843,6 +841,40 @@ CheckForShutdownPrivilege( return STATUS_SUCCESS; } +BOOL +WINAPI +HandleMessageBeep(UINT uType) +{ + LPWSTR EventName; + + switch(uType) + { + case 0xFFFFFFFF: + EventName = NULL; + break; + case MB_OK: + EventName = L"SystemDefault"; + break; + case MB_ICONASTERISK: + EventName = L"SystemAsterisk"; + break; + case MB_ICONEXCLAMATION: + EventName = L"SystemExclamation"; + break; + case MB_ICONHAND: + EventName = L"SystemHand"; + break; + case MB_ICONQUESTION: + EventName = L"SystemQuestion"; + break; + default: + WARN("Unhandled type %d\n", uType); + EventName = L"SystemDefault"; + } + + return PlaySoundRoutine(EventName, FALSE, SND_ALIAS | SND_NOWAIT | SND_NOSTOP | SND_ASYNC); +} + static LRESULT CALLBACK SASWindowProc( IN HWND hwndDlg, @@ -902,6 +934,21 @@ SASWindowProc( } return TRUE; } + case WM_LOGONNOTIFY: + { + switch(wParam) + { + case LN_MESSAGE_BEEP: + { + return HandleMessageBeep(lParam); + } + default: + { + ERR("WM_LOGONNOTIFY case %d is unimplemented\n", wParam); + } + } + return 0; + } case WLX_WM_SAS: { DispatchSAS(Session, (DWORD)wParam); diff --git a/reactos/base/system/winlogon/winlogon.c b/reactos/base/system/winlogon/winlogon.c index 3f977d0f9be..619ff4e7367 100644 --- a/reactos/base/system/winlogon/winlogon.c +++ b/reactos/base/system/winlogon/winlogon.c @@ -23,6 +23,49 @@ PWLSESSION WLSession = NULL; /* FUNCTIONS *****************************************************************/ +BOOL +PlaySoundRoutine( + IN LPCWSTR FileName, + IN UINT bLogon, + IN UINT Flags) +{ + typedef BOOL (WINAPI *PLAYSOUNDW)(LPCWSTR,HMODULE,DWORD); + typedef UINT (WINAPI *WAVEOUTGETNUMDEVS)(VOID); + PLAYSOUNDW Play; + WAVEOUTGETNUMDEVS waveOutGetNumDevs; + UINT NumDevs; + HMODULE hLibrary; + BOOL Ret = FALSE; + + hLibrary = LoadLibraryW(L"winmm.dll"); + if (hLibrary) + { + waveOutGetNumDevs = (WAVEOUTGETNUMDEVS)GetProcAddress(hLibrary, "waveOutGetNumDevs"); + if (waveOutGetNumDevs) + { + NumDevs = waveOutGetNumDevs(); + if (!NumDevs) + { + if (!bLogon) + { + Beep(500, 500); + } + FreeLibrary(hLibrary); + return FALSE; + } + } + + Play = (PLAYSOUNDW)GetProcAddress(hLibrary, "PlaySoundW"); + if (Play) + { + Ret = Play(FileName, NULL, Flags); + } + FreeLibrary(hLibrary); + } + + return Ret; +} + DWORD WINAPI PlayLogonSoundThread( @@ -32,10 +75,8 @@ PlayLogonSoundThread( WCHAR szBuffer[MAX_PATH] = {0}; WCHAR szDest[MAX_PATH]; DWORD dwSize = sizeof(szBuffer); - HMODULE hLibrary; SERVICE_STATUS_PROCESS Info; - typedef BOOL (WINAPI *PLAYSOUNDW)(LPCWSTR,HMODULE,DWORD); - PLAYSOUNDW Play; + ULONG Index = 0; if (RegOpenKeyExW(HKEY_CURRENT_USER, L"AppEvents\\Schemes\\Apps\\.Default\\WindowsLogon\\.Current", 0, KEY_READ, &hKey) != ERROR_SUCCESS) @@ -94,17 +135,7 @@ PlayLogonSoundThread( if (Info.dwCurrentState != SERVICE_RUNNING) ExitThread(0); - - hLibrary = LoadLibraryW(L"winmm.dll"); - if (hLibrary) - { - Play = (PLAYSOUNDW)GetProcAddress(hLibrary, "PlaySoundW"); - if (Play) - { - Play(szDest, NULL, SND_FILENAME); - } - FreeLibrary(hLibrary); - } + PlaySoundRoutine(szDest, TRUE, SND_FILENAME); } ExitThread(0); } diff --git a/reactos/base/system/winlogon/winlogon.h b/reactos/base/system/winlogon/winlogon.h index 45e73254428..d28e1502544 100644 --- a/reactos/base/system/winlogon/winlogon.h +++ b/reactos/base/system/winlogon/winlogon.h @@ -40,6 +40,7 @@ #include #include +#include #include #include "setup.h" @@ -203,6 +204,13 @@ StartScreenSaver( IN PWLSESSION Session); /* winlogon.c */ + +BOOL +PlaySoundRoutine( + IN LPCWSTR FileName, + IN UINT Logon, + IN UINT Flags); + BOOL DisplayStatusMessage( IN PWLSESSION Session, diff --git a/reactos/dll/win32/user32/misc/misc.c b/reactos/dll/win32/user32/misc/misc.c index e7b7672cfdc..3f1c4b6b367 100644 --- a/reactos/dll/win32/user32/misc/misc.c +++ b/reactos/dll/win32/user32/misc/misc.c @@ -72,7 +72,7 @@ SetLogonNotifyWindow (HWND Wnd, HWINSTA WinSta) return(FALSE); } - return(TRUE); + return NtUserSetLogonNotifyWindow(Wnd); } /* diff --git a/reactos/dll/win32/user32/windows/messagebox.c b/reactos/dll/win32/user32/windows/messagebox.c index 7ea0b9016e2..13b374af9d3 100644 --- a/reactos/dll/win32/user32/windows/messagebox.c +++ b/reactos/dll/win32/user32/windows/messagebox.c @@ -890,36 +890,7 @@ BOOL WINAPI MessageBeep(UINT uType) { -#if 0 - LPWSTR EventName; - - switch(uType) - { - case 0xFFFFFFFF: - if(waveOutGetNumDevs() == 0) - return Beep(500, 100); // Beep through speaker - /* fall through */ - case MB_OK: - EventName = L"SystemDefault"; - break; - case MB_ICONASTERISK: - EventName = L"SystemAsterisk"; - break; - case MB_ICONEXCLAMATION: - EventName = L"SystemExclamation"; - break; - case MB_ICONHAND: - EventName = L"SystemHand"; - break; - case MB_ICONQUESTION: - EventName = L"SystemQuestion"; - break; - } - - return PlaySoundW((LPCWSTR)EventName, NULL, SND_ALIAS | SND_NOWAIT | SND_NOSTOP | SND_ASYNC); -#else - return Beep(500, 100); // Beep through speaker -#endif + return (BOOL)NtUserCallOneParam(ONEPARAM_ROUTINE_MESSAGEBEEP, uType); } diff --git a/reactos/include/reactos/undocuser.h b/reactos/include/reactos/undocuser.h index 22bd858ee3b..208c10b3686 100644 --- a/reactos/include/reactos/undocuser.h +++ b/reactos/include/reactos/undocuser.h @@ -92,7 +92,7 @@ #define SBRG_PAGEDOWNLEFT 4 /* the page down or page left region */ #define SBRG_BOTTOMLEFTBTN 5 /* the bottom or left button */ - +BOOL WINAPI SetLogonNotifyWindow(HWND Wnd, HWINSTA WinSta); BOOL WINAPI KillSystemTimer(HWND,UINT_PTR); UINT_PTR WINAPI SetSystemTimer(HWND,UINT_PTR,UINT,TIMERPROC); DWORD_PTR WINAPI SetSysColorsTemp(const COLORREF *, const HBRUSH *, DWORD_PTR); diff --git a/reactos/include/reactos/winlogon.h b/reactos/include/reactos/winlogon.h index 42eaf620468..4c00b674e81 100644 --- a/reactos/include/reactos/winlogon.h +++ b/reactos/include/reactos/winlogon.h @@ -17,14 +17,6 @@ #define EWX_INTERNAL_KILL_ALL_APPS (EWX_INTERNAL_FLAG | 0x200) #define EWX_INTERNAL_FLAG_LOGOFF 0x1000 -#define WM_LOGONNOTIFY 0x0000004c - -/* WPARAM values for WM_LOGONNOTIFY */ -#define LN_START_TASK_MANAGER 0x4 -#define LN_LOCK_WORKSTATION 0x5 -#define LN_UNLOCK_WORKSTATION 0x6 -#define LN_MESSAGE_BEEP 0x9 - #endif /* REACTOS_WINLOGON_H_INCLUDED */ /* EOF */ diff --git a/reactos/subsystems/win32/win32k/include/winsta.h b/reactos/subsystems/win32/win32k/include/winsta.h index a50a23ed6b7..c40d14bf419 100644 --- a/reactos/subsystems/win32/win32k/include/winsta.h +++ b/reactos/subsystems/win32/win32k/include/winsta.h @@ -61,6 +61,7 @@ typedef struct _WINSTATION_OBJECT extern WINSTATION_OBJECT *InputWindowStation; extern PPROCESSINFO LogonProcess; +extern HWND hwndSAS; INIT_FUNCTION NTSTATUS diff --git a/reactos/subsystems/win32/win32k/ntuser/ntstubs.c b/reactos/subsystems/win32/win32k/ntuser/ntstubs.c index 5045718de8a..821d4d6ddf4 100644 --- a/reactos/subsystems/win32/win32k/ntuser/ntstubs.c +++ b/reactos/subsystems/win32/win32k/ntuser/ntstubs.c @@ -1272,17 +1272,6 @@ NtUserSetLayeredWindowAttributes(HWND hwnd, return FALSE; } -/* - * @unimplemented - */ -BOOL APIENTRY -NtUserSetLogonNotifyWindow(HWND hWnd) -{ - UNIMPLEMENTED - - return 0; -} - /* * @unimplemented */ diff --git a/reactos/subsystems/win32/win32k/ntuser/simplecall.c b/reactos/subsystems/win32/win32k/ntuser/simplecall.c index 941d31a4f63..f31b44296a1 100644 --- a/reactos/subsystems/win32/win32k/ntuser/simplecall.c +++ b/reactos/subsystems/win32/win32k/ntuser/simplecall.c @@ -341,6 +341,9 @@ NtUserCallOneParam( } case ONEPARAM_ROUTINE_REPLYMESSAGE: RETURN (co_MsqReplyMessage((LRESULT) Param)); + case ONEPARAM_ROUTINE_MESSAGEBEEP: + RETURN ( UserPostMessage(hwndSAS, WM_LOGONNOTIFY, LN_MESSAGE_BEEP, Param) ); + /* TODO: Implement sound sentry */ } DPRINT1("Calling invalid routine number 0x%x in NtUserCallOneParam(), Param=0x%x\n", Routine, Param); diff --git a/reactos/subsystems/win32/win32k/ntuser/winsta.c b/reactos/subsystems/win32/win32k/ntuser/winsta.c index d6e5a0fe446..ff429a17524 100644 --- a/reactos/subsystems/win32/win32k/ntuser/winsta.c +++ b/reactos/subsystems/win32/win32k/ntuser/winsta.c @@ -43,6 +43,9 @@ /* Currently active window station */ PWINSTATION_OBJECT InputWindowStation = NULL; +/* Winlogon sas window*/ +HWND hwndSAS = NULL; + /* INITALIZATION FUNCTIONS ****************************************************/ static GENERIC_MAPPING IntWindowStationMapping = @@ -1455,4 +1458,25 @@ NtUserBuildNameList( BuildDesktopNameList(hWindowStation, dwSize, lpBuffer, pRequiredSize); } +/* + * @implemented + */ +BOOL APIENTRY +NtUserSetLogonNotifyWindow(HWND hWnd) +{ + if(LogonProcess != PsGetCurrentProcessWin32Process()) + { + return FALSE; + } + + if(!IntIsWindow(hWnd)) + { + return FALSE; + } + + hwndSAS = hWnd; + + return TRUE; +} + /* EOF */ From dc663b0be2f7df3ec84ece7d790f3c46618fcfa6 Mon Sep 17 00:00:00 2001 From: Giannis Adamopoulos Date: Fri, 18 Feb 2011 20:26:19 +0000 Subject: [PATCH 064/287] - Remove a documented definition from undocuser.h svn path=/trunk/; revision=50814 --- reactos/include/psdk/windowsx.h | 1 + reactos/include/reactos/undocuser.h | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/include/psdk/windowsx.h b/reactos/include/psdk/windowsx.h index dc813389899..0ed21e8fe04 100644 --- a/reactos/include/psdk/windowsx.h +++ b/reactos/include/psdk/windowsx.h @@ -1,6 +1,7 @@ #ifndef _WINDOWSX_H #define _WINDOWSX_H +#define WM_CTLCOLOR 25 #define Button_Enable(hwndCtl,fEnable) EnableWindow((hwndCtl),(fEnable)) #define Button_GetCheck(hwndCtl) ((int)(DWORD)SendMessage((hwndCtl),BM_GETCHECK,0,0)) #define Button_GetState(hwndCtl) ((int)(DWORD)SendMessage((hwndCtl),BM_GETSTATE,0,0)) diff --git a/reactos/include/reactos/undocuser.h b/reactos/include/reactos/undocuser.h index 208c10b3686..06312d7d34e 100644 --- a/reactos/include/reactos/undocuser.h +++ b/reactos/include/reactos/undocuser.h @@ -25,7 +25,6 @@ /* Non SDK Window Message types. */ #define WM_SETVISIBLE 0x00000009 -#define WM_CTLCOLOR 0x00000019 #define WM_ALTTABACTIVE 0x00000029 #define WM_ISACTIVEICON 0x00000035 #define WM_QUERYPARKICON 0x00000036 From 6d4a648fe6b09354a2179775fa42444d675bc550 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sat, 19 Feb 2011 10:20:27 +0000 Subject: [PATCH 065/287] Fix a typo. svn path=/trunk/; revision=50815 --- reactos/base/applications/mscutils/eventvwr/eventvwr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/base/applications/mscutils/eventvwr/eventvwr.c b/reactos/base/applications/mscutils/eventvwr/eventvwr.c index 69086b132a9..bed476d1211 100644 --- a/reactos/base/applications/mscutils/eventvwr/eventvwr.c +++ b/reactos/base/applications/mscutils/eventvwr/eventvwr.c @@ -203,7 +203,7 @@ GetEventMessageFileDLL(IN LPCWSTR lpLogName, /* Returns a string containing the requested substituted environment variable. */ ExpandEnvironmentStringsW((LPCWSTR)szModuleName, ExpandedName, MAX_PATH); - /* Succesfull */ + /* Successful */ bReturn = TRUE; } } From 5d2a7901f7b1ee553647c71ad36a657e8f3bb722 Mon Sep 17 00:00:00 2001 From: Giannis Adamopoulos Date: Sat, 19 Feb 2011 12:22:52 +0000 Subject: [PATCH 066/287] [win32k] - Revert r50121 and r50154 svn path=/trunk/; revision=50816 --- .../win32/win32k/include/msgqueue.h | 7 +++- .../win32/win32k/ntuser/clipboard.c | 2 +- .../subsystems/win32/win32k/ntuser/desktop.c | 6 ++- .../subsystems/win32/win32k/ntuser/focus.c | 16 ++++---- .../subsystems/win32/win32k/ntuser/message.c | 41 +++++++++++++++++++ .../subsystems/win32/win32k/ntuser/ntstubs.c | 2 +- .../subsystems/win32/win32k/ntuser/painting.c | 2 +- 7 files changed, 63 insertions(+), 13 deletions(-) diff --git a/reactos/subsystems/win32/win32k/include/msgqueue.h b/reactos/subsystems/win32/win32k/include/msgqueue.h index ed80d369dc3..6831cc701c4 100644 --- a/reactos/subsystems/win32/win32k/include/msgqueue.h +++ b/reactos/subsystems/win32/win32k/include/msgqueue.h @@ -180,6 +180,11 @@ co_IntSendMessage(HWND hWnd, WPARAM wParam, LPARAM lParam); LRESULT FASTCALL +co_IntPostOrSendMessage(HWND hWnd, + UINT Msg, + WPARAM wParam, + LPARAM lParam); +LRESULT FASTCALL co_IntSendMessageTimeout(HWND hWnd, UINT Msg, WPARAM wParam, @@ -187,7 +192,7 @@ co_IntSendMessageTimeout(HWND hWnd, UINT uFlags, UINT uTimeout, ULONG_PTR *uResult); -BOOL FASTCALL UserSendNotifyMessage( HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam ); + LRESULT FASTCALL co_IntSendMessageNoWait(HWND hWnd, UINT Msg, WPARAM wParam, diff --git a/reactos/subsystems/win32/win32k/ntuser/clipboard.c b/reactos/subsystems/win32/win32k/ntuser/clipboard.c index 121d7af06ae..b75cb2da3f5 100644 --- a/reactos/subsystems/win32/win32k/ntuser/clipboard.c +++ b/reactos/subsystems/win32/win32k/ntuser/clipboard.c @@ -601,7 +601,7 @@ NtUserEmptyClipboard(VOID) if (ret && ClipboardOwnerWindow) { DPRINT("Clipboard: WM_DESTROYCLIPBOARD to %p", ClipboardOwnerWindow->head.h); - co_IntSendMessageNoWait( ClipboardOwnerWindow->head.h, WM_DESTROYCLIPBOARD, 0, 0); + co_IntSendMessage( ClipboardOwnerWindow->head.h, WM_DESTROYCLIPBOARD, 0, 0); } UserLeave(); diff --git a/reactos/subsystems/win32/win32k/ntuser/desktop.c b/reactos/subsystems/win32/win32k/ntuser/desktop.c index 74da248d3e7..b0b3c7ce803 100644 --- a/reactos/subsystems/win32/win32k/ntuser/desktop.c +++ b/reactos/subsystems/win32/win32k/ntuser/desktop.c @@ -738,7 +738,11 @@ VOID co_IntShellHookNotify(WPARAM Message, LPARAM lParam) for (; *cursor; cursor++) { - UserPostMessage(*cursor, gpsi->uiShellMsg, Message, lParam); + DPRINT("Sending notify\n"); + co_IntPostOrSendMessage(*cursor, + gpsi->uiShellMsg, + Message, + lParam); } ExFreePool(HwndList); diff --git a/reactos/subsystems/win32/win32k/ntuser/focus.c b/reactos/subsystems/win32/win32k/ntuser/focus.c index 6b1428c45e4..0ce1b388bd2 100644 --- a/reactos/subsystems/win32/win32k/ntuser/focus.c +++ b/reactos/subsystems/win32/win32k/ntuser/focus.c @@ -77,12 +77,12 @@ co_IntSendActivateMessages(HWND hWndPrev, HWND hWnd, BOOL MouseActivate) if (WindowPrev) UserRefObjectCo(WindowPrev, &RefPrev); /* Send palette messages */ - if (co_IntSendMessage(hWnd, WM_QUERYNEWPALETTE, 0, 0)) + if (co_IntPostOrSendMessage(hWnd, WM_QUERYNEWPALETTE, 0, 0)) { - UserSendNotifyMessage( HWND_BROADCAST, - WM_PALETTEISCHANGING, - (WPARAM)hWnd, - 0); + UserPostMessage( HWND_BROADCAST, + WM_PALETTEISCHANGING, + (WPARAM)hWnd, + 0); } if (Window->spwndPrev != NULL) @@ -166,7 +166,7 @@ co_IntSendKillFocusMessages(HWND hWndPrev, HWND hWnd) if (hWndPrev) { IntNotifyWinEvent(EVENT_OBJECT_FOCUS, NULL, OBJID_CLIENT, CHILDID_SELF, 0); - co_IntSendMessageNoWait(hWndPrev, WM_KILLFOCUS, (WPARAM)hWnd, 0); + co_IntPostOrSendMessage(hWndPrev, WM_KILLFOCUS, (WPARAM)hWnd, 0); } } @@ -177,7 +177,7 @@ co_IntSendSetFocusMessages(HWND hWndPrev, HWND hWnd) { PWND pWnd = UserGetWindowObject(hWnd); IntNotifyWinEvent(EVENT_OBJECT_FOCUS, pWnd, OBJID_CLIENT, CHILDID_SELF, 0); - co_IntSendMessageNoWait(hWnd, WM_SETFOCUS, (WPARAM)hWndPrev, 0); + co_IntPostOrSendMessage(hWnd, WM_SETFOCUS, (WPARAM)hWndPrev, 0); } } @@ -579,7 +579,7 @@ NtUserSetCapture(HWND hWnd) if (Window) IntNotifyWinEvent(EVENT_SYSTEM_CAPTURESTART, Window, OBJID_WINDOW, CHILDID_SELF, WEF_SETBYWNDPTI); - co_IntSendMessageNoWait(hWndPrev, WM_CAPTURECHANGED, 0, (LPARAM)hWnd); + co_IntPostOrSendMessage(hWndPrev, WM_CAPTURECHANGED, 0, (LPARAM)hWnd); ThreadQueue->CaptureWindow = hWnd; RETURN( hWndPrev); diff --git a/reactos/subsystems/win32/win32k/ntuser/message.c b/reactos/subsystems/win32/win32k/ntuser/message.c index 9abaa04d357..5c66991361b 100644 --- a/reactos/subsystems/win32/win32k/ntuser/message.c +++ b/reactos/subsystems/win32/win32k/ntuser/message.c @@ -1549,6 +1549,47 @@ CLEANUP: END_CLEANUP; } +/* This function posts a message if the destination's message queue belongs to +another thread, otherwise it sends the message. It does not support broadcast +messages! */ +LRESULT FASTCALL +co_IntPostOrSendMessage( HWND hWnd, + UINT Msg, + WPARAM wParam, + LPARAM lParam ) +{ + ULONG_PTR Result; + PTHREADINFO pti; + PWND Window; + + if ( hWnd == HWND_BROADCAST ) + { + return 0; + } + + if(!(Window = UserGetWindowObject(hWnd))) + { + return 0; + } + + pti = PsGetCurrentThreadWin32Thread(); + + if ( Window->head.pti->MessageQueue != pti->MessageQueue && + FindMsgMemory(Msg) == 0 ) + { + Result = UserPostMessage(hWnd, Msg, wParam, lParam); + } + else + { + if ( !co_IntSendMessageTimeoutSingle(hWnd, Msg, wParam, lParam, SMTO_NORMAL, 0, &Result) ) + { + Result = 0; + } + } + + return (LRESULT)Result; +} + LRESULT FASTCALL co_IntDoSendMessage( HWND hWnd, UINT Msg, diff --git a/reactos/subsystems/win32/win32k/ntuser/ntstubs.c b/reactos/subsystems/win32/win32k/ntuser/ntstubs.c index 821d4d6ddf4..44d718131c6 100644 --- a/reactos/subsystems/win32/win32k/ntuser/ntstubs.c +++ b/reactos/subsystems/win32/win32k/ntuser/ntstubs.c @@ -564,7 +564,7 @@ NtUserSetSysColors( } if (Ret) { - UserSendNotifyMessage(HWND_BROADCAST, WM_SYSCOLORCHANGE, 0, 0); + UserPostMessage(HWND_BROADCAST, WM_SYSCOLORCHANGE, 0, 0); } UserLeave(); return Ret; diff --git a/reactos/subsystems/win32/win32k/ntuser/painting.c b/reactos/subsystems/win32/win32k/ntuser/painting.c index c9bc3146a60..59e370c4c89 100644 --- a/reactos/subsystems/win32/win32k/ntuser/painting.c +++ b/reactos/subsystems/win32/win32k/ntuser/painting.c @@ -1957,7 +1957,7 @@ UserRealizePalette(HDC hdc) hWnd = IntWindowFromDC(hdc); if (hWnd) // Send broadcast if dc is associated with a window. { // FYI: Thread locked in CallOneParam. - UserSendNotifyMessage((HWND)HWND_BROADCAST, WM_PALETTECHANGED, (WPARAM)hWnd, 0); + co_IntSendMessage((HWND)HWND_BROADCAST, WM_PALETTECHANGED, (WPARAM)hWnd, 0); } } return Ret; From 2352ea6662418de2fe7bdc480a40a4599e9e2af4 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sat, 19 Feb 2011 13:58:55 +0000 Subject: [PATCH 067/287] [NTOSKRNL] - No need to use ULONG when dealing with strings, USHORT is enough. This makes MSVC warnings silent. - Fix a really nasty bug in FsRtlIsHpfsDbcsLegal() svn path=/trunk/; revision=50817 --- reactos/ntoskrnl/fsrtl/dbcsname.c | 12 ++++++------ reactos/ntoskrnl/fsrtl/name.c | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/reactos/ntoskrnl/fsrtl/dbcsname.c b/reactos/ntoskrnl/fsrtl/dbcsname.c index 9311caef9f5..d99fa191c0a 100644 --- a/reactos/ntoskrnl/fsrtl/dbcsname.c +++ b/reactos/ntoskrnl/fsrtl/dbcsname.c @@ -46,8 +46,8 @@ FsRtlDissectDbcs(IN ANSI_STRING Name, OUT PANSI_STRING FirstPart, OUT PANSI_STRING RemainingPart) { - ULONG FirstPosition, i; - ULONG SkipFirstSlash = 0; + USHORT FirstPosition, i; + USHORT SkipFirstSlash = 0; PAGED_CODE(); /* Zero the strings before continuing */ @@ -116,7 +116,7 @@ BOOLEAN NTAPI FsRtlDoesDbcsContainWildCards(IN PANSI_STRING Name) { - ULONG i; + USHORT i; PAGED_CODE(); /* Check every character */ @@ -300,7 +300,7 @@ FsRtlIsFatDbcsLegal(IN ANSI_STRING DbcsName, { ANSI_STRING FirstPart, RemainingPart, Name; BOOLEAN LastDot; - ULONG i; + USHORT i; PAGED_CODE(); /* Just quit if the string is empty */ @@ -437,7 +437,7 @@ FsRtlIsHpfsDbcsLegal(IN ANSI_STRING DbcsName, IN BOOLEAN LeadingBackslashPermissible) { ANSI_STRING FirstPart, RemainingPart, Name; - ULONG i; + USHORT i; PAGED_CODE(); /* Just quit if the string is empty */ @@ -490,7 +490,7 @@ FsRtlIsHpfsDbcsLegal(IN ANSI_STRING DbcsName, i++; } /* Then check for bad characters */ - else if (!!FsRtlIsAnsiCharacterLegalHpfs(FirstPart.Buffer[i], WildCardsPermissible)) + else if (!FsRtlIsAnsiCharacterLegalHpfs(FirstPart.Buffer[i], WildCardsPermissible)) { return FALSE; } diff --git a/reactos/ntoskrnl/fsrtl/name.c b/reactos/ntoskrnl/fsrtl/name.c index 8868ecc714d..29f6e90d76c 100644 --- a/reactos/ntoskrnl/fsrtl/name.c +++ b/reactos/ntoskrnl/fsrtl/name.c @@ -163,7 +163,7 @@ FsRtlAreNamesEqual(IN PCUNICODE_STRING Name1, UNICODE_STRING UpcaseName1; UNICODE_STRING UpcaseName2; BOOLEAN StringsAreEqual, MemoryAllocated = FALSE; - ULONG i; + USHORT i; NTSTATUS Status; PAGED_CODE(); @@ -255,8 +255,8 @@ FsRtlDissectName(IN UNICODE_STRING Name, OUT PUNICODE_STRING FirstPart, OUT PUNICODE_STRING RemainingPart) { - ULONG FirstPosition, i; - ULONG SkipFirstSlash = 0; + USHORT FirstPosition, i; + USHORT SkipFirstSlash = 0; PAGED_CODE(); /* Zero the strings before continuing */ From 4638bf943c04adcc646bc2921642b7a873679fe6 Mon Sep 17 00:00:00 2001 From: Giannis Adamopoulos Date: Sat, 19 Feb 2011 16:09:59 +0000 Subject: [PATCH 068/287] [win32k] - Fix combobox to show the drop down window correctly when the parent window is topmost See issue #5705 for more details. svn path=/trunk/; revision=50818 --- reactos/dll/win32/user32/controls/combo.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/dll/win32/user32/controls/combo.c b/reactos/dll/win32/user32/controls/combo.c index de6c646268d..422953195c4 100644 --- a/reactos/dll/win32/user32/controls/combo.c +++ b/reactos/dll/win32/user32/controls/combo.c @@ -1119,7 +1119,7 @@ static void CBDropDown( LPHEADCOMBO lphc ) if( (rect.bottom + nDroppedHeight) >= mon_info.rcWork.bottom ) rect.bottom = rect.top - nDroppedHeight; - SetWindowPos( lphc->hWndLBox, HWND_TOP, rect.left, rect.bottom, + SetWindowPos( lphc->hWndLBox, HWND_TOPMOST, rect.left, rect.bottom, lphc->droppedRect.right - lphc->droppedRect.left, nDroppedHeight, SWP_NOACTIVATE | SWP_SHOWWINDOW); From 634966f644636a0cc28689c05eb887c9a63b5faf Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Sat, 19 Feb 2011 17:00:08 +0000 Subject: [PATCH 069/287] - Revert 49767 on Pierre's request, which reverted this: - Added real implementation of SetLastError() (instead of forwarding to NTDLL) - Implemented BaseSetLastNTError() - Renamed Basep8BitStringToCachedUnicodeString() to Basep8BitStringToStaticUnicodeString() and sightly changed its implementation - Fixed implementation of LoadLibraryExA() & DisableThreadLibraryCalls() using those changes This is matching w2k3 implementation. This is of course a WIP. svn path=/trunk/; revision=50819 --- reactos/dll/win32/kernel32/include/kernel32.h | 7 +- reactos/dll/win32/kernel32/kernel32.def | 4 +- reactos/dll/win32/kernel32/misc/env.c | 81 ++++++++++++++ reactos/dll/win32/kernel32/misc/error.c | 100 ++++-------------- reactos/dll/win32/kernel32/misc/ldr.c | 38 ++++--- reactos/dll/win32/kernel32/misc/utils.c | 29 +++-- reactos/dll/win32/kernel32/process/procsup.c | 2 +- 7 files changed, 144 insertions(+), 117 deletions(-) diff --git a/reactos/dll/win32/kernel32/include/kernel32.h b/reactos/dll/win32/kernel32/include/kernel32.h index fae3e844009..8229e1428bd 100755 --- a/reactos/dll/win32/kernel32/include/kernel32.h +++ b/reactos/dll/win32/kernel32/include/kernel32.h @@ -69,7 +69,6 @@ #define SetLastErrorByStatus(x) RtlSetLastWin32ErrorAndNtStatusFromNtStatus((x)) #define GetLastError() NtCurrentTeb()->LastErrorValue -#define SetLastError(x) NtCurrentTeb()->LastErrorValue = (x) typedef struct _CODEPAGE_ENTRY { @@ -192,7 +191,7 @@ BasepAnsiStringToHeapUnicodeString(IN LPCSTR AnsiString, PUNICODE_STRING WINAPI -Basep8BitStringToCachedUnicodeString(IN LPCSTR String); +Basep8BitStringToStaticUnicodeString(IN LPCSTR AnsiString); NTSTATUS WINAPI @@ -225,3 +224,7 @@ GetDllLoadPath(LPCWSTR lpModule); VOID WINAPI InitCommandLines(VOID); + +VOID +WINAPI +BaseSetLastNTError(IN NTSTATUS Status); diff --git a/reactos/dll/win32/kernel32/kernel32.def b/reactos/dll/win32/kernel32/kernel32.def index f0130a96267..1dd6b5e8ff4 100644 --- a/reactos/dll/win32/kernel32/kernel32.def +++ b/reactos/dll/win32/kernel32/kernel32.def @@ -46,7 +46,7 @@ @ stdcall BaseProcessInitPostImport() ; missing in Win 7 @ stdcall BaseQueryModuleData(str str ptr ptr ptr) ;check ;@ stdcall BaseThreadInitThunk ; Win 7 -;@ stdcall BaseSetLastNTError ; Win 7, not 64 bit +;@ stdcall BaseSetLastNTError ; Win 7, not 64 bit (present on w2k3 but not exported) @ stdcall BaseUpdateAppcompatCache(long long long) ;@ stdcall BaseVerifyUnicodeString ; Win 7 ;@ stdcall Basep8BitStringToDynamicUnicodeString ; Win 7 @@ -1211,7 +1211,7 @@ @ stdcall SetHandleInformation(long long long) @ stdcall SetInformationJobObject(long long ptr long) @ stub SetLastConsoleEventActive ; missing in XP SP3 -@ stdcall SetLastError(long) ntdll.RtlSetLastWin32Error +@ stdcall SetLastError(long) @ stub SetLocalPrimaryComputerNameA ; missing in XP SP3 @ stub SetLocalPrimaryComputerNameW ; missing in XP SP3 @ stdcall SetLocalTime(ptr) diff --git a/reactos/dll/win32/kernel32/misc/env.c b/reactos/dll/win32/kernel32/misc/env.c index b132abfa3df..3ff452b583e 100644 --- a/reactos/dll/win32/kernel32/misc/env.c +++ b/reactos/dll/win32/kernel32/misc/env.c @@ -5,6 +5,8 @@ * FILE: lib/kernel32/misc/env.c * PURPOSE: Environment functions * PROGRAMMER: Ariadne ( ariadne@xs4all.nl) + * Emanuele Aliberti + * Thomas Weidenmueller * UPDATE HISTORY: * Created 01/11/98 */ @@ -17,6 +19,85 @@ /* FUNCTIONS ******************************************************************/ +/* + * @implemented + */ +BOOL +WINAPI +Beep (DWORD dwFreq, DWORD dwDuration) +{ + HANDLE hBeep; + UNICODE_STRING BeepDevice; + OBJECT_ATTRIBUTES ObjectAttributes; + IO_STATUS_BLOCK IoStatusBlock; + BEEP_SET_PARAMETERS BeepSetParameters; + NTSTATUS Status; + + /* check the parameters */ + if ((dwFreq >= 0x25 && dwFreq <= 0x7FFF) || + (dwFreq == 0x0 && dwDuration == 0x0)) + { + /* open the device */ + RtlInitUnicodeString(&BeepDevice, + L"\\Device\\Beep"); + + InitializeObjectAttributes(&ObjectAttributes, + &BeepDevice, + 0, + NULL, + NULL); + + Status = NtCreateFile(&hBeep, + FILE_READ_DATA | FILE_WRITE_DATA, + &ObjectAttributes, + &IoStatusBlock, + NULL, + 0, + FILE_SHARE_READ | FILE_SHARE_WRITE, + FILE_OPEN_IF, + 0, + NULL, + 0); + if (NT_SUCCESS(Status)) + { + /* Set beep data */ + BeepSetParameters.Frequency = dwFreq; + BeepSetParameters.Duration = dwDuration; + + Status = NtDeviceIoControlFile(hBeep, + NULL, + NULL, + NULL, + &IoStatusBlock, + IOCTL_BEEP_SET, + &BeepSetParameters, + sizeof(BEEP_SET_PARAMETERS), + NULL, + 0); + + /* do an alertable wait if necessary */ + if (NT_SUCCESS(Status) && + (dwFreq != 0x0 || dwDuration != 0x0) && dwDuration != MAXDWORD) + { + SleepEx(dwDuration, + TRUE); + } + + NtClose(hBeep); + } + } + else + Status = STATUS_INVALID_PARAMETER; + + if (!NT_SUCCESS(Status)) + { + SetLastErrorByStatus (Status); + return FALSE; + } + + return TRUE; +} + /* * @implemented */ diff --git a/reactos/dll/win32/kernel32/misc/error.c b/reactos/dll/win32/kernel32/misc/error.c index 91499530312..b742d82384e 100644 --- a/reactos/dll/win32/kernel32/misc/error.c +++ b/reactos/dll/win32/kernel32/misc/error.c @@ -1,99 +1,45 @@ -/* $Id$ - * +/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS system libraries * FILE: dll/win32/kernel32/misc/error.c - * PURPOSE: Environment functions - * PROGRAMMER: Emanuele Aliberti - * Thomas Weidenmueller - * UPDATE HISTORY: - * Created 05/10/98 + * PURPOSE: Error functions + * PROGRAMMER: Pierre Schweitzer (pierre.schweitzer@reactos.org) */ - #include #define NDEBUG #include -/* - * @implemented - */ -BOOL +DWORD g_dwLastErrorToBreakOn; + +/* FUNCTIONS ******************************************************************/ + +VOID WINAPI -Beep (DWORD dwFreq, DWORD dwDuration) +SetLastError( + IN DWORD dwErrCode) { - HANDLE hBeep; - UNICODE_STRING BeepDevice; - OBJECT_ATTRIBUTES ObjectAttributes; - IO_STATUS_BLOCK IoStatusBlock; - BEEP_SET_PARAMETERS BeepSetParameters; - NTSTATUS Status; - - /* check the parameters */ - if ((dwFreq >= 0x25 && dwFreq <= 0x7FFF) || - (dwFreq == 0x0 && dwDuration == 0x0)) + if (g_dwLastErrorToBreakOn) { - /* open the device */ - RtlInitUnicodeString(&BeepDevice, - L"\\Device\\Beep"); - - InitializeObjectAttributes(&ObjectAttributes, - &BeepDevice, - 0, - NULL, - NULL); - - Status = NtCreateFile(&hBeep, - FILE_READ_DATA | FILE_WRITE_DATA, - &ObjectAttributes, - &IoStatusBlock, - NULL, - 0, - FILE_SHARE_READ | FILE_SHARE_WRITE, - FILE_OPEN_IF, - 0, - NULL, - 0); - if (NT_SUCCESS(Status)) + /* If we have error to break on and if current matches, break */ + if (g_dwLastErrorToBreakOn == dwErrCode) { - /* Set beep data */ - BeepSetParameters.Frequency = dwFreq; - BeepSetParameters.Duration = dwDuration; - - Status = NtDeviceIoControlFile(hBeep, - NULL, - NULL, - NULL, - &IoStatusBlock, - IOCTL_BEEP_SET, - &BeepSetParameters, - sizeof(BEEP_SET_PARAMETERS), - NULL, - 0); - - /* do an alertable wait if necessary */ - if (NT_SUCCESS(Status) && - (dwFreq != 0x0 || dwDuration != 0x0) && dwDuration != MAXDWORD) - { - SleepEx(dwDuration, - TRUE); - } - - NtClose(hBeep); + DbgBreakPoint(); } } - else - Status = STATUS_INVALID_PARAMETER; - if (!NT_SUCCESS(Status)) - { - SetLastErrorByStatus (Status); - return FALSE; - } + /* Set last error */ + NtCurrentTeb()->LastErrorValue = dwErrCode; +} - return TRUE; +VOID +WINAPI +BaseSetLastNTError( + IN NTSTATUS Status) +{ + SetLastError(RtlNtStatusToDosError(Status)); } /* EOF */ diff --git a/reactos/dll/win32/kernel32/misc/ldr.c b/reactos/dll/win32/kernel32/misc/ldr.c index 9e324785454..da2f5821255 100644 --- a/reactos/dll/win32/kernel32/misc/ldr.c +++ b/reactos/dll/win32/kernel32/misc/ldr.c @@ -102,19 +102,18 @@ GetDllLoadPath(LPCWSTR lpModule) */ BOOL WINAPI -DisableThreadLibraryCalls ( - HMODULE hLibModule - ) +DisableThreadLibraryCalls( + IN HMODULE hLibModule) { - NTSTATUS Status; + NTSTATUS Status; - Status = LdrDisableThreadCalloutsForDll ((PVOID)hLibModule); - if (!NT_SUCCESS (Status)) - { - SetLastErrorByStatus (Status); - return FALSE; - } - return TRUE; + Status = LdrDisableThreadCalloutsForDll((PVOID)hLibModule); + if (!NT_SUCCESS(Status)) + { + BaseSetLastNTError(Status); + return FALSE; + } + return TRUE; } @@ -136,18 +135,17 @@ LoadLibraryA ( */ HINSTANCE WINAPI -LoadLibraryExA ( - LPCSTR lpLibFileName, - HANDLE hFile, - DWORD dwFlags - ) +LoadLibraryExA( + LPCSTR lpLibFileName, + HANDLE hFile, + DWORD dwFlags) { - PWCHAR FileNameW; + PUNICODE_STRING FileNameW; - if (!(FileNameW = FilenameA2W(lpLibFileName, FALSE))) - return FALSE; + if (!(FileNameW = Basep8BitStringToStaticUnicodeString(lpLibFileName))) + return NULL; - return LoadLibraryExW(FileNameW, hFile, dwFlags); + return LoadLibraryExW(FileNameW->Buffer, hFile, dwFlags); } diff --git a/reactos/dll/win32/kernel32/misc/utils.c b/reactos/dll/win32/kernel32/misc/utils.c index 5e2508e4ab6..9fdde3548b5 100644 --- a/reactos/dll/win32/kernel32/misc/utils.c +++ b/reactos/dll/win32/kernel32/misc/utils.c @@ -57,28 +57,27 @@ Basep8BitStringToLiveUnicodeString(OUT PUNICODE_STRING UnicodeString, */ PUNICODE_STRING WINAPI -Basep8BitStringToCachedUnicodeString(IN LPCSTR String) +Basep8BitStringToStaticUnicodeString(IN LPCSTR String) { - PUNICODE_STRING StaticString = &NtCurrentTeb()->StaticUnicodeString; + PUNICODE_STRING StaticString = &(NtCurrentTeb()->StaticUnicodeString); ANSI_STRING AnsiString; NTSTATUS Status; - - DPRINT("Basep8BitStringToCachedUnicodeString\n"); - + /* Initialize an ANSI String */ - RtlInitAnsiString(&AnsiString, String); - - /* Convert it */ - Status = Basep8BitStringToUnicodeString(StaticString, &AnsiString, FALSE); - - /* Handle failure */ - if (!NT_SUCCESS(Status)) + if (!NT_SUCCESS(RtlInitAnsiStringEx(&AnsiString, String))) { - SetLastErrorByStatus(Status); + SetLastError(ERROR_FILENAME_EXCED_RANGE); return NULL; } - - /* Return pointer to the string */ + + /* Convert it */ + Status = Basep8BitStringToUnicodeString(StaticString, &AnsiString, FALSE); + if (!NT_SUCCESS(Status)) + { + BaseSetLastNTError(Status); + return NULL; + } + return StaticString; } diff --git a/reactos/dll/win32/kernel32/process/procsup.c b/reactos/dll/win32/kernel32/process/procsup.c index 2afb4e06111..fc4648858c5 100644 --- a/reactos/dll/win32/kernel32/process/procsup.c +++ b/reactos/dll/win32/kernel32/process/procsup.c @@ -1558,7 +1558,7 @@ CreateProcessInternalA(HANDLE hToken, NtCurrentTeb()->StaticUnicodeString.MaximumLength) { /* Cache it in the TEB */ - CommandLine = Basep8BitStringToCachedUnicodeString(lpCommandLine); + CommandLine = Basep8BitStringToStaticUnicodeString(lpCommandLine); } else { From d0515abbea2e194ec99fd0cc9df4af805540dcca Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 19 Feb 2011 18:28:13 +0000 Subject: [PATCH 070/287] [SETUPAPI] - Implement CM_Get_Device_Interface_AliasA, CM_Get_Device_Interface_AliasW and CM_Get_Device_Interface_Alias_ExW. - Add a stub for CM_Get_Device_Interface_Alias_ExA. - Implement the obsolete functions CM_Query_Remove_SubTree[_Ex] and CM_Remove_SubTree[_Ex]. svn path=/trunk/; revision=50820 --- reactos/dll/win32/setupapi/cfgmgr.c | 155 +++++++++++++++++++++++ reactos/dll/win32/setupapi/setupapi.spec | 16 +-- 2 files changed, 163 insertions(+), 8 deletions(-) diff --git a/reactos/dll/win32/setupapi/cfgmgr.c b/reactos/dll/win32/setupapi/cfgmgr.c index 8742b8165ed..5b975189351 100644 --- a/reactos/dll/win32/setupapi/cfgmgr.c +++ b/reactos/dll/win32/setupapi/cfgmgr.c @@ -2284,6 +2284,109 @@ CONFIGRET WINAPI CM_Get_Device_ID_Size_Ex( } +/*********************************************************************** + * CM_Get_Device_Interface_AliasA [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_Device_Interface_AliasA( + LPCSTR pszDeviceInterface, LPGUID AliasInterfaceGuid, + LPSTR pszAliasDeviceInterface, PULONG pulLength, ULONG ulFlags) +{ + TRACE("%p %p %p %p %lu\n", pszDeviceInterface, AliasInterfaceGuid, + pszAliasDeviceInterface, pulLength, ulFlags); + + return CM_Get_Device_Interface_Alias_ExA(pszDeviceInterface, + AliasInterfaceGuid, pszAliasDeviceInterface, pulLength, + ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Get_Device_Interface_AliasW [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_Device_Interface_AliasW( + LPCWSTR pszDeviceInterface, LPGUID AliasInterfaceGuid, + LPWSTR pszAliasDeviceInterface, PULONG pulLength, ULONG ulFlags) +{ + TRACE("%p %p %p %p %lu\n", pszDeviceInterface, AliasInterfaceGuid, + pszAliasDeviceInterface, pulLength, ulFlags); + + return CM_Get_Device_Interface_Alias_ExW(pszDeviceInterface, + AliasInterfaceGuid, pszAliasDeviceInterface, pulLength, + ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Get_Device_Interface_Alias_ExA [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_Device_Interface_Alias_ExA( + LPCSTR pszDeviceInterface, LPGUID AliasInterfaceGuid, LPSTR pszAliasDeviceInterface, + PULONG pulLength, ULONG ulFlags, HMACHINE hMachine) +{ + FIXME("%p %p %p %p %lu %lx\n", pszDeviceInterface, AliasInterfaceGuid, + pszAliasDeviceInterface, pulLength, ulFlags, hMachine); + + return CR_CALL_NOT_IMPLEMENTED; +} + + +/*********************************************************************** + * CM_Get_Device_Interface_Alias_ExW [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_Device_Interface_Alias_ExW( + LPCWSTR pszDeviceInterface, LPGUID AliasInterfaceGuid, LPWSTR pszAliasDeviceInterface, + PULONG pulLength, ULONG ulFlags, HMACHINE hMachine) +{ + RPC_BINDING_HANDLE BindingHandle = NULL; + ULONG ulTransferLength; + CONFIGRET ret = CR_SUCCESS; + + TRACE("%p %p %p %p %lu %lx\n", pszDeviceInterface, AliasInterfaceGuid, + pszAliasDeviceInterface, pulLength, ulFlags, hMachine); + + if (pszDeviceInterface == NULL || + AliasInterfaceGuid == NULL || + pszAliasDeviceInterface == NULL || + pulLength == NULL) + return CR_INVALID_POINTER; + + if (ulFlags != 0) + return CR_INVALID_FLAG; + + if (hMachine != NULL) + { + BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle; + if (BindingHandle == NULL) + return CR_FAILURE; + } + else + { + if (!PnpGetLocalHandles(&BindingHandle, NULL)) + return CR_FAILURE; + } + + ulTransferLength = *pulLength; + + RpcTryExcept + { + ret = PNP_GetInterfaceDeviceAlias(BindingHandle, + (LPWSTR)pszDeviceInterface, + AliasInterfaceGuid, + pszAliasDeviceInterface, + pulLength, + &ulTransferLength, + 0); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + ret = RpcStatusToCmStatus(RpcExceptionCode()); + } + RpcEndExcept; + + return ret; +} + + /*********************************************************************** * CM_Get_First_Log_Conf [SETUPAPI.@] */ @@ -3534,6 +3637,32 @@ CONFIGRET WINAPI CM_Open_DevNode_Key_Ex( } +/*********************************************************************** + * CM_Query_Remove_SubTree [SETUPAPI.@] + * + * This function is obsolete in Windows XP and above. + */ +CONFIGRET WINAPI CM_Query_Remove_SubTree( + DEVINST dnAncestor, ULONG ulFlags) +{ + TRACE("%lx %lx\n", dnAncestor, ulFlags); + return CR_CALL_NOT_IMPLEMENTED; +} + + +/*********************************************************************** + * CM_Query_Remove_SubTree_Ex [SETUPAPI.@] + * + * This function is obsolete in Windows XP and above. + */ +CONFIGRET WINAPI CM_Query_Remove_SubTree_Ex( + DEVINST dnAncestor, ULONG ulFlags, HMACHINE hMachine) +{ + TRACE("%lx %lx %lx\n", dnAncestor, ulFlags, hMachine); + return CR_CALL_NOT_IMPLEMENTED; +} + + /*********************************************************************** * CM_Reenumerate_DevNode [SETUPAPI.@] */ @@ -3603,6 +3732,32 @@ CM_Reenumerate_DevNode_Ex( } +/*********************************************************************** + * CM_Remove_SubTree [SETUPAPI.@] + * + * This function is obsolete in Windows XP and above. + */ +CONFIGRET WINAPI CM_Remove_SubTree( + DEVINST dnAncestor, ULONG ulFlags) +{ + TRACE("%lx %lx\n", dnAncestor, ulFlags); + return CR_CALL_NOT_IMPLEMENTED; +} + + +/*********************************************************************** + * CM_Remove_SubTree_Ex [SETUPAPI.@] + * + * This function is obsolete in Windows XP and above. + */ +CONFIGRET WINAPI CM_Remove_SubTree_Ex( + DEVINST dnAncestor, ULONG ulFlags, HMACHINE hMachine) +{ + TRACE("%lx %lx %lx\n", dnAncestor, ulFlags, hMachine); + return CR_CALL_NOT_IMPLEMENTED; +} + + /*********************************************************************** * CM_Request_Eject_PC [SETUPAPI.@] */ diff --git a/reactos/dll/win32/setupapi/setupapi.spec b/reactos/dll/win32/setupapi/setupapi.spec index cf546503ed9..4c77bf1e1d2 100644 --- a/reactos/dll/win32/setupapi/setupapi.spec +++ b/reactos/dll/win32/setupapi/setupapi.spec @@ -90,10 +90,10 @@ @ stdcall CM_Get_Device_ID_List_Size_ExW(ptr wstr long long) @ stdcall CM_Get_Device_ID_Size(ptr long long) @ stdcall CM_Get_Device_ID_Size_Ex(ptr long long long) -@ stub CM_Get_Device_Interface_AliasA -@ stub CM_Get_Device_Interface_AliasW -@ stub CM_Get_Device_Interface_Alias_ExA -@ stub CM_Get_Device_Interface_Alias_ExW +@ stdcall CM_Get_Device_Interface_AliasA(str ptr str ptr long) +@ stdcall CM_Get_Device_Interface_AliasW(wstr ptr wstr ptr long) +@ stdcall CM_Get_Device_Interface_Alias_ExA(str ptr str ptr long long) +@ stdcall CM_Get_Device_Interface_Alias_ExW(wstr ptr wstr ptr long long) @ stub CM_Get_Device_Interface_ListA @ stub CM_Get_Device_Interface_ListW @ stub CM_Get_Device_Interface_List_ExA @@ -163,8 +163,8 @@ @ stub CM_Query_Arbitrator_Free_Data_Ex @ stub CM_Query_Arbitrator_Free_Size @ stub CM_Query_Arbitrator_Free_Size_Ex -@ stub CM_Query_Remove_SubTree -@ stub CM_Query_Remove_SubTree_Ex +@ stdcall CM_Query_Remove_SubTree(long long) +@ stdcall CM_Query_Remove_SubTree_Ex(long long long) @ stub CM_Query_Resource_Conflict_List @ stdcall CM_Reenumerate_DevNode(long long) @ stdcall CM_Reenumerate_DevNode_Ex(long long long) @@ -174,8 +174,8 @@ @ stub CM_Register_Device_InterfaceW @ stub CM_Register_Device_Interface_ExA @ stub CM_Register_Device_Interface_ExW -@ stub CM_Remove_SubTree -@ stub CM_Remove_SubTree_Ex +@ stdcall CM_Remove_SubTree(long long) +@ stdcall CM_Remove_SubTree_Ex(long long long) @ stub CM_Request_Device_EjectA @ stub CM_Request_Device_EjectW @ stub CM_Request_Device_Eject_ExA From 3eb47ac17d27ba35508378cfe3b64fd59f3739ae Mon Sep 17 00:00:00 2001 From: Sylvain Petreolle Date: Sat, 19 Feb 2011 18:43:54 +0000 Subject: [PATCH 071/287] [NTOSKRNL] Fix typo. svn path=/trunk/; revision=50821 --- reactos/ntoskrnl/io/pnpmgr/pnpres.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/io/pnpmgr/pnpres.c b/reactos/ntoskrnl/io/pnpmgr/pnpres.c index 733440dd5fb..ac1884e2d11 100644 --- a/reactos/ntoskrnl/io/pnpmgr/pnpres.c +++ b/reactos/ntoskrnl/io/pnpmgr/pnpres.c @@ -755,7 +755,7 @@ IopTranslateDeviceResources( &DescriptorTranslated->u.Port.Start)) { Status = STATUS_UNSUCCESSFUL; - DPRINT1("Failed to translate port resource (Start: 0xI64x)\n", DescriptorRaw->u.Port.Start.QuadPart); + DPRINT1("Failed to translate port resource (Start: 0x%I64x)\n", DescriptorRaw->u.Port.Start.QuadPart); goto cleanup; } break; From 7d2277a1ea600df119f8df1791b4634e1bef1bcd Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sat, 19 Feb 2011 21:24:47 +0000 Subject: [PATCH 072/287] [EVENTVWR] - Fix handling of NULL lpComputerName. - Handle lpData conversion to a wide string and make sure it's NULL terminated. - Patch by Rafal Harabien, See issue #5926 for more details. svn path=/trunk/; revision=50822 --- .../applications/mscutils/eventvwr/eventvwr.c | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/reactos/base/applications/mscutils/eventvwr/eventvwr.c b/reactos/base/applications/mscutils/eventvwr/eventvwr.c index bed476d1211..6a116ac3d00 100644 --- a/reactos/base/applications/mscutils/eventvwr/eventvwr.c +++ b/reactos/base/applications/mscutils/eventvwr/eventvwr.c @@ -503,11 +503,12 @@ QueryEventMessages(LPWSTR lpMachineName, HWND hwndDlg; HANDLE hEventLog; EVENTLOGRECORD *pevlr; - DWORD dwRead, dwNeeded, dwThisRecord, dwTotalRecords = 0, dwCurrentRecord = 1, dwRecordsToRead = 0, dwFlags; + DWORD dwRead, dwNeeded, dwThisRecord, dwTotalRecords = 0, dwCurrentRecord = 1, dwRecordsToRead = 0, dwFlags, dwMaxLength; LPWSTR lpSourceName; LPWSTR lpComputerName; - LPWSTR lpData; + LPSTR lpData; BOOL bResult = TRUE; /* Read succeeded. */ + int i; WCHAR szWindowTitle[MAX_PATH]; WCHAR szStatusText[MAX_PATH]; @@ -519,6 +520,7 @@ QueryEventMessages(LPWSTR lpMachineName, WCHAR szUsername[MAX_PATH]; WCHAR szEventText[EVENT_MESSAGE_FILE_BUFFER]; WCHAR szCategory[MAX_PATH]; + WCHAR szData[MAX_PATH]; SYSTEMTIME time; LVITEMW lviEventItem; @@ -606,7 +608,7 @@ QueryEventMessages(LPWSTR lpMachineName, lpComputerName = (LPWSTR)((LPBYTE)pevlr + sizeof(EVENTLOGRECORD) + (wcslen(lpSourceName) + 1) * sizeof(WCHAR)); // This ist the data section of the current event - lpData = (LPWSTR)((LPBYTE)pevlr + pevlr->DataOffset); + lpData = (LPSTR)((LPBYTE)pevlr + pevlr->DataOffset); // Compute the event type EventTimeToSystemTime(pevlr->TimeWritten, &time); @@ -665,7 +667,13 @@ QueryEventMessages(LPWSTR lpMachineName, ListView_SetItemText(hwndListView, lviEventItem.iItem, 5, szEventID); ListView_SetItemText(hwndListView, lviEventItem.iItem, 6, szUsername); //User ListView_SetItemText(hwndListView, lviEventItem.iItem, 7, lpComputerName); //Computer - ListView_SetItemText(hwndListView, lviEventItem.iItem, 8, lpData); //Event Text + MultiByteToWideChar(CP_ACP, + 0, + lpData, + pevlr->DataLength, + szData, + MAX_PATH); + ListView_SetItemText(hwndListView, lviEventItem.iItem, 8, szData); //Event Text dwRead -= pevlr->Length; pevlr = (EVENTLOGRECORD *)((LPBYTE) pevlr + pevlr->Length); @@ -678,7 +686,15 @@ QueryEventMessages(LPWSTR lpMachineName, // All events loaded EndDialog(hwndDlg, 0); - swprintf(szWindowTitle, L"%s - %s Log on \\\\%s", szTitle, lpLogName, lpComputerName); + + i = swprintf(szWindowTitle, L"%s - %s Log on \\\\", szTitle, lpLogName); /* i = number of characters written */ + /* lpComputerName can be NULL here if no records was read */ + dwMaxLength = sizeof(szWindowTitle)/sizeof(WCHAR)-i; + if(!lpComputerName) + GetComputerNameW(szWindowTitle+i, &dwMaxLength); + else + _snwprintf(szWindowTitle+i, dwMaxLength, L"%s", lpComputerName); + swprintf(szStatusText, L"%s has %d event(s)", lpLogName, dwTotalRecords); // Update the status bar From ea5522e1d84ae77bcb397cbe86b2aac1b530672c Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 19 Feb 2011 21:50:11 +0000 Subject: [PATCH 073/287] [NTOSKRNL] Add support for debug pre/post syscall hooks, that can be registered from win32k. They only exist on DBG versions. svn path=/trunk/; revision=50823 --- reactos/ntoskrnl/include/internal/kd.h | 9 ++++++++ reactos/ntoskrnl/kd/kdmain.c | 19 ++++++++++++++- reactos/ntoskrnl/ke/i386/traphdlr.c | 32 ++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/include/internal/kd.h b/reactos/ntoskrnl/include/internal/kd.h index b61d498b771..53ee9b0f4b2 100644 --- a/reactos/ntoskrnl/include/internal/kd.h +++ b/reactos/ntoskrnl/include/internal/kd.h @@ -363,3 +363,12 @@ extern KD_CONTEXT KdpContext; extern ULONG Kd_WIN2000_Mask; #endif + +#if DBG +#define ID_Win32PreServiceHook 'WSH0' +#define ID_Win32PostServiceHook 'WSH1' +typedef void (NTAPI *PKDBG_PRESERVICEHOOK)(ULONG, PULONG_PTR); +typedef ULONG_PTR (NTAPI *PKDBG_POSTSERVICEHOOK)(ULONG, ULONG_PTR); +extern PKDBG_PRESERVICEHOOK KeWin32PreServiceHook; +extern PKDBG_POSTSERVICEHOOK KeWin32PostServiceHook; +#endif diff --git a/reactos/ntoskrnl/kd/kdmain.c b/reactos/ntoskrnl/kd/kdmain.c index 6b16582735a..ac1f0bc4911 100644 --- a/reactos/ntoskrnl/kd/kdmain.c +++ b/reactos/ntoskrnl/kd/kdmain.c @@ -71,7 +71,7 @@ KdpServiceDispatcher(ULONG Service, case EnterDebugger: DbgBreakPoint(); break; - + case KdSpare3: MmDumpArmPfnDatabase(FALSE); break; @@ -82,6 +82,23 @@ KdpServiceDispatcher(ULONG Service, break; } + /* Register a debug callback */ + case 'CsoR': + { + switch (Buffer1Length) + { + case ID_Win32PreServiceHook: + KeWin32PreServiceHook = Buffer1; + break; + + case ID_Win32PostServiceHook: + KeWin32PostServiceHook = Buffer1; + break; + + } + break; + } + /* Special case for stack frame dumps */ case 'DsoR': { diff --git a/reactos/ntoskrnl/ke/i386/traphdlr.c b/reactos/ntoskrnl/ke/i386/traphdlr.c index 4822b71b8aa..1d3b098504a 100644 --- a/reactos/ntoskrnl/ke/i386/traphdlr.c +++ b/reactos/ntoskrnl/ke/i386/traphdlr.c @@ -46,6 +46,10 @@ UCHAR KiTrapIoTable[] = }; PFAST_SYSTEM_CALL_EXIT KiFastCallExitHandler; +#if DBG +PKDBG_PRESERVICEHOOK KeWin32PreServiceHook = NULL; +PKDBG_POSTSERVICEHOOK KeWin32PostServiceHook = NULL; +#endif /* TRAP EXIT CODE *************************************************************/ @@ -1443,6 +1447,28 @@ KiDebugServiceHandler(IN PKTRAP_FRAME TrapFrame) KiDebugHandler(TrapFrame, TrapFrame->Eax, TrapFrame->Ecx, TrapFrame->Edx); } + +FORCEINLINE +VOID +KiDbgPreServiceHook(ULONG SystemCallNumber, PULONG_PTR Arguments) +{ +#if DBG + if (SystemCallNumber >= 0x1000 && KeWin32PreServiceHook) + KeWin32PreServiceHook(SystemCallNumber, Arguments); +#endif +} + +FORCEINLINE +ULONG_PTR +KiDbgPostServiceHook(ULONG SystemCallNumber, ULONG_PTR Result) +{ +#if DBG + if (SystemCallNumber >= 0x1000 && KeWin32PostServiceHook) + return KeWin32PostServiceHook(SystemCallNumber, Result); +#endif + return Result; +} + DECLSPEC_NORETURN VOID FORCEINLINE @@ -1553,10 +1579,16 @@ KiSystemCall(IN PKTRAP_FRAME TrapFrame, while (TRUE); } + /* Call pre-service debug hook */ + KiDbgPreServiceHook(SystemCallNumber, Arguments); + /* Get the handler and make the system call */ Handler = (PVOID)DescriptorTable->Base[Id]; Result = KiSystemCallTrampoline(Handler, Arguments, StackBytes); + /* Call post-service debug hook */ + Result = KiDbgPostServiceHook(SystemCallNumber, Result); + /* Make sure we're exiting correctly */ KiExitSystemCallDebugChecks(Id, TrapFrame); From dc29559c25924f269b2a24ff5c64c9ff8f3d264b Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 19 Feb 2011 21:56:43 +0000 Subject: [PATCH 074/287] [WIN32K] - Add ros specific member cExclusiveLocks to THREADINFO to track number of acquired locks - Add functions/macros to check lock count - Move some definitions into gdidebug.h for global use - Fix broken GdiDbgHTIntegrityCheck - Add pre and post syscall hook functions (unused yet) svn path=/trunk/; revision=50824 --- .../win32/win32k/include/gdidebug.h | 38 +++++++ .../subsystems/win32/win32k/include/win32.h | 11 +- .../subsystems/win32/win32k/objects/gdidbg.c | 103 +++++++++++------- 3 files changed, 109 insertions(+), 43 deletions(-) diff --git a/reactos/subsystems/win32/win32k/include/gdidebug.h b/reactos/subsystems/win32/win32k/include/gdidebug.h index 42c20f97c82..dc7179ae24f 100644 --- a/reactos/subsystems/win32/win32k/include/gdidebug.h +++ b/reactos/subsystems/win32/win32k/include/gdidebug.h @@ -2,6 +2,12 @@ extern ULONG gulDebugChannels; +#define GDI_STACK_LEVELS 20 +extern ULONG_PTR GDIHandleAllocator[GDI_HANDLE_COUNT][GDI_STACK_LEVELS+1]; +extern ULONG_PTR GDIHandleLocker[GDI_HANDLE_COUNT][GDI_STACK_LEVELS+1]; +extern ULONG_PTR GDIHandleShareLocker[GDI_HANDLE_COUNT][GDI_STACK_LEVELS+1]; +extern ULONG_PTR GDIHandleDeleter[GDI_HANDLE_COUNT][GDI_STACK_LEVELS+1]; + enum _DEBUGCHANNELS { DbgCustom = 1, @@ -11,6 +17,10 @@ enum _DEBUGCHANNELS DbgModeSwitch = 16, }; +void IntDumpHandleTable(PGDI_HANDLE_TABLE HandleTable); +ULONG CaptureStackBackTace(PVOID* pFrames, ULONG nFramesToCapture); +BOOL GdiDbgHTIntegrityCheck(); + #define DBGENABLE(ch) gulDebugChannels |= (ch); #define DBGDISABLE(ch) gulDebugChannels &= ~(ch); #define DPRINTCH(ch) if (gulDebugChannels & (ch)) DbgPrint @@ -73,3 +83,31 @@ NTSYSAPI ULONG APIENTRY RtlWalkFrameChain(OUT PVOID *Callers, IN ULONG Count, IN #endif /* GDI_DEBUG */ +#if DBG +void +NTAPI +DbgPreServiceHook(ULONG ulSyscallId, PULONG_PTR pulArguments); + +ULONG_PTR +NTAPI +DbgPostServiceHook(ULONG ulSyscallId, ULONG_PTR ulResult); + +#define ID_Win32PreServiceHook 'WSH0' +#define ID_Win32PostServiceHook 'WSH1' + +FORCEINLINE void +DbgAssertNoGdiLocks(char * pszFile, ULONG nLine) +{ + PTHREADINFO pti = (PTHREADINFO)PsGetCurrentThreadWin32Thread(); + if (pti && pti->cExclusiveLocks != 0) + { + DbgPrint("(%s:%ld) There are %ld exclusive locks!\n", + pszFile, nLine, pti->cExclusiveLocks); + ASSERT(FALSE); + } +} +#define ASSERT_NOGDILOCKS() DbgAssertNoGdiLocks(__FILE__,__LINE__) +#else +#define ASSERT_NOGDILOCKS() +#endif + diff --git a/reactos/subsystems/win32/win32k/include/win32.h b/reactos/subsystems/win32/win32k/include/win32.h index 56bfd56856a..c6dc142f2d3 100644 --- a/reactos/subsystems/win32/win32k/include/win32.h +++ b/reactos/subsystems/win32/win32k/include/win32.h @@ -99,10 +99,13 @@ typedef struct _THREADINFO LIST_ENTRY aphkStart[NB_HOOKS]; CLIENTTHREADINFO cti; // Used only when no Desktop or pcti NULL. - /* ReactOS */ - LIST_ENTRY WindowListHead; - LIST_ENTRY W32CallbackListHead; - SINGLE_LIST_ENTRY ReferencesList; + + /* ReactOS */ + LIST_ENTRY WindowListHead; + LIST_ENTRY W32CallbackListHead; + SINGLE_LIST_ENTRY ReferencesList; + ULONG cExclusiveLocks; + } THREADINFO; #include diff --git a/reactos/subsystems/win32/win32k/objects/gdidbg.c b/reactos/subsystems/win32/win32k/objects/gdidbg.c index 3a0ac31600b..ab1a8d97f29 100644 --- a/reactos/subsystems/win32/win32k/objects/gdidbg.c +++ b/reactos/subsystems/win32/win32k/objects/gdidbg.c @@ -17,11 +17,10 @@ ULONG gulDebugChannels = 0; #ifdef GDI_DEBUG -#define GDI_STACK_LEVELS 20 -static ULONG_PTR GDIHandleAllocator[GDI_HANDLE_COUNT][GDI_STACK_LEVELS+1]; -static ULONG_PTR GDIHandleLocker[GDI_HANDLE_COUNT][GDI_STACK_LEVELS+1]; -static ULONG_PTR GDIHandleShareLocker[GDI_HANDLE_COUNT][GDI_STACK_LEVELS+1]; -static ULONG_PTR GDIHandleDeleter[GDI_HANDLE_COUNT][GDI_STACK_LEVELS+1]; +ULONG_PTR GDIHandleAllocator[GDI_HANDLE_COUNT][GDI_STACK_LEVELS+1]; +ULONG_PTR GDIHandleLocker[GDI_HANDLE_COUNT][GDI_STACK_LEVELS+1]; +ULONG_PTR GDIHandleShareLocker[GDI_HANDLE_COUNT][GDI_STACK_LEVELS+1]; +ULONG_PTR GDIHandleDeleter[GDI_HANDLE_COUNT][GDI_STACK_LEVELS+1]; struct DbgOpenGDIHandle { ULONG idx; @@ -172,44 +171,42 @@ GdiDbgHTIntegrityCheck() /* FIXME: check reserved entries */ /* Now go through the deleted objects */ - i = GdiHandleTable->FirstFree; - if (i) + i = GdiHandleTable->FirstFree & 0xffff; + while (i) { pEntry = &GdiHandleTable->Entries[i]; - for (;;) + if (i > GDI_HANDLE_COUNT) { - nDeleted++; - - /* Check the entry */ - if ((pEntry->Type & GDI_ENTRY_BASETYPE_MASK) != 0) - { - r = 0; - DPRINT1("Deleted Entry has a type != 0\n"); - } - if ((ULONG_PTR)pEntry->KernelData >= GDI_HANDLE_COUNT) - { - r = 0; - DPRINT1("Deleted entries KernelPointer too big\n"); - } - if (pEntry->UserData != NULL) - { - r = 0; - DPRINT1("Deleted entry has UserData != 0\n"); - } - if (pEntry->ProcessId != 0) - { - r = 0; - DPRINT1("Deleted entry has ProcessId != 0\n"); - } - - i = (ULONG_PTR)pEntry->KernelData; - if (!i) - { - break; - } - pEntry = &GdiHandleTable->Entries[i]; + DPRINT1("nDeleted=%ld\n", nDeleted); + ASSERT(FALSE); } - } + + nDeleted++; + + /* Check the entry */ + if ((pEntry->Type & GDI_ENTRY_BASETYPE_MASK) != 0) + { + r = 0; + DPRINT1("Deleted Entry has a type != 0\n"); + } + if ((ULONG_PTR)pEntry->KernelData >= GDI_HANDLE_COUNT) + { + r = 0; + DPRINT1("Deleted entries KernelPointer too big\n"); + } + if (pEntry->UserData != NULL) + { + r = 0; + DPRINT1("Deleted entry has UserData != 0\n"); + } + if (pEntry->ProcessId != 0) + { + r = 0; + DPRINT1("Deleted entry has ProcessId != 0\n"); + } + + i = (ULONG_PTR)pEntry->KernelData & 0xffff; + }; for (i = GdiHandleTable->FirstUnused; i < GDI_HANDLE_COUNT; @@ -295,3 +292,31 @@ GDIOBJ_IncrementShareCount(POBJ Object) #endif /* GDI_DEBUG */ +void +NTAPI +DbgPreServiceHook(ULONG ulSyscallId, PULONG_PTR pulArguments) +{ + PTHREADINFO pti = (PTHREADINFO)PsGetCurrentThreadWin32Thread(); + if (pti && pti->cExclusiveLocks != 0) + { + DbgPrint("FATAL: Win32DbgPreServiceHook(%ld): There are %ld exclusive locks!\n", + ulSyscallId, pti->cExclusiveLocks); + ASSERT(FALSE); + } + +} + +ULONG_PTR +NTAPI +DbgPostServiceHook(ULONG ulSyscallId, ULONG_PTR ulResult) +{ + PTHREADINFO pti = (PTHREADINFO)PsGetCurrentThreadWin32Thread(); + if (pti && pti->cExclusiveLocks != 0) + { + DbgPrint("FATAL: Win32DbgPostServiceHook(%ld): There are %ld exclusive locks!\n", + ulSyscallId, pti->cExclusiveLocks); + ASSERT(FALSE); + } + return ulResult; +} + From ebf22c9469523f8f0f9d3f873fe16ec547d69864 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 19 Feb 2011 22:03:34 +0000 Subject: [PATCH 075/287] [WIN32K] - add tracing of exclusive gdi locks - add some asserts svn path=/trunk/; revision=50825 --- .../subsystems/win32/win32k/include/gdiobj.h | 17 +++++++++++ .../subsystems/win32/win32k/ntuser/ntuser.c | 6 ++-- .../subsystems/win32/win32k/objects/gdiobj.c | 28 +++++++++++++++---- 3 files changed, 44 insertions(+), 7 deletions(-) diff --git a/reactos/subsystems/win32/win32k/include/gdiobj.h b/reactos/subsystems/win32/win32k/include/gdiobj.h index e736391322e..9882e9dccc6 100644 --- a/reactos/subsystems/win32/win32k/include/gdiobj.h +++ b/reactos/subsystems/win32/win32k/include/gdiobj.h @@ -9,6 +9,9 @@ #include #include "win32.h" +/* apparently the first 10 entries are never used in windows as they are empty */ +#define RESERVE_ENTRIES_COUNT 10 + typedef struct _GDI_HANDLE_TABLE { /* The table must be located at the beginning of this structure so it can be @@ -105,6 +108,19 @@ ULONG FORCEINLINE GDIOBJ_UnlockObjByPtr(POBJ Object) { +#if DBG + PTHREADINFO pti = (PTHREADINFO)PsGetCurrentThreadWin32Thread(); + if (pti) + { + if (pti->cExclusiveLocks < 1) + { + DbgPrint("cExclusiveLocks = %ld, object: %ld\n", + pti->cExclusiveLocks, Object->cExclusiveLock); + ASSERT(FALSE); + } + pti->cExclusiveLocks--; + } +#endif INT cLocks = InterlockedDecrement((PLONG)&Object->cExclusiveLock); ASSERT(cLocks >= 0); return cLocks; @@ -120,6 +136,7 @@ GDIOBJ_ShareUnlockObjByPtr(POBJ Object) ASSERT(cLocks >= 0); if ((flags & BASEFLAG_READY_TO_DIE) && (cLocks == 0)) { + ASSERT(Object->cExclusiveLock == 0); GDIOBJ_SetOwnership(hobj, PsGetCurrentProcess()); GDIOBJ_FreeObjByHandle(hobj, GDI_OBJECT_TYPE_DONTCARE); } diff --git a/reactos/subsystems/win32/win32k/ntuser/ntuser.c b/reactos/subsystems/win32/win32k/ntuser/ntuser.c index d28aa33e2e6..2e9d7eb9b47 100644 --- a/reactos/subsystems/win32/win32k/ntuser/ntuser.c +++ b/reactos/subsystems/win32/win32k/ntuser/ntuser.c @@ -38,7 +38,7 @@ InitUserAtoms(VOID) gpsi->atomSysClass[ICLS_SWITCH] = 32771; gpsi->atomSysClass[ICLS_ICONTITLE] = 32772; gpsi->atomSysClass[ICLS_TOOLTIPS] = 32774; - + /* System Message Atom */ AtomMessage = IntAddGlobalAtom(L"Message", TRUE); gpsi->atomSysClass[ICLS_HWNDMESSAGE] = AtomMessage; @@ -112,7 +112,7 @@ UserInitialize( // { GetW32ThreadInfo(); - + // Callback to User32 Client Thread Setup co_IntClientThreadSetup(); @@ -208,12 +208,14 @@ VOID FASTCALL UserEnterShared(VOID) VOID FASTCALL UserEnterExclusive(VOID) { + ASSERT_NOGDILOCKS(); KeEnterCriticalRegion(); ExAcquireResourceExclusiveLite(&UserLock, TRUE); } VOID FASTCALL UserLeave(VOID) { + ASSERT_NOGDILOCKS(); ExReleaseResourceLite(&UserLock); KeLeaveCriticalRegion(); } diff --git a/reactos/subsystems/win32/win32k/objects/gdiobj.c b/reactos/subsystems/win32/win32k/objects/gdiobj.c index 7d2f7414809..dcf59df39db 100644 --- a/reactos/subsystems/win32/win32k/objects/gdiobj.c +++ b/reactos/subsystems/win32/win32k/objects/gdiobj.c @@ -17,9 +17,6 @@ #define GDI_HANDLE_GET_ENTRY(HandleTable, h) \ (&(HandleTable)->Entries[GDI_HANDLE_GET_INDEX((h))]) -/* apparently the first 10 entries are never used in windows as they are empty */ -#define RESERVE_ENTRIES_COUNT 10 - #define BASE_OBJTYPE_COUNT 32 #define DelayExecution() \ @@ -483,6 +480,9 @@ LockHandle: newObject->ulShareCount = 0; newObject->cExclusiveLock = 1; newObject->Tid = Thread; +#if DBG + if (Thread) Thread->cExclusiveLocks++; +#endif AllocTypeDataDump(TypeInfo); @@ -603,11 +603,11 @@ LockHandle: ((Entry->Type & GDI_ENTRY_BASETYPE_MASK) == (HandleUpper & GDI_ENTRY_BASETYPE_MASK)) ) { POBJ Object; + PTHREADINFO Thread = (PTHREADINFO)PsGetCurrentThreadWin32Thread(); Object = Entry->KernelData; - if ((Object->cExclusiveLock == 0 || - Object->Tid == (PTHREADINFO)PsGetCurrentThreadWin32Thread()) && + if ((Object->cExclusiveLock == 0 || Object->Tid == Thread) && Object->ulShareCount == 0) { BOOL Ret; @@ -623,6 +623,18 @@ LockHandle: InterlockedPushFreeEntry(GDI_ENTRY_TO_INDEX(GdiHandleTable, Entry)); Object->hHmgr = NULL; +#if DBG + if (Thread) + { + if (Thread->cExclusiveLocks < Object->cExclusiveLock) + { + DPRINT1("cExclusiveLocks = %ld, object: %ld\n", + Thread->cExclusiveLocks, Object->cExclusiveLock); + ASSERT(FALSE); + } + Thread->cExclusiveLocks -= Object->cExclusiveLock; + } +#endif if (W32Process != NULL) { @@ -1056,6 +1068,9 @@ GDIOBJ_LockObj(HGDIOBJ hObj, DWORD ExpectedType) Object->Tid = Thread; Object->cExclusiveLock = 1; GDIDBG_CAPTURELOCKER(GDI_HANDLE_GET_INDEX(hObj)) +#if DBG + if (Thread) Thread->cExclusiveLocks++; +#endif } else { @@ -1068,6 +1083,9 @@ GDIOBJ_LockObj(HGDIOBJ hObj, DWORD ExpectedType) continue; } InterlockedIncrement((PLONG)&Object->cExclusiveLock); +#if DBG + if (Thread) Thread->cExclusiveLocks++; +#endif } } else From 3e75942b109a5408cf0c4a8184537f847263272c Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 19 Feb 2011 22:29:31 +0000 Subject: [PATCH 076/287] [WIN32K] NtGdiStretchDIBitsInternal: don't call NtGdiGetDCObject and NtGdiCreateCompatibleDC with a dc locked. These cases are not harmful, but generally Nt* and Gre* should never be called with an exclusive gdi lock held. Also don't return in failure case with the dc still locked. svn path=/trunk/; revision=50826 --- .../subsystems/win32/win32k/objects/dibobj.c | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/dibobj.c b/reactos/subsystems/win32/win32k/objects/dibobj.c index 1dfa5344ad8..f33a8bc4ab5 100644 --- a/reactos/subsystems/win32/win32k/objects/dibobj.c +++ b/reactos/subsystems/win32/win32k/objects/dibobj.c @@ -1043,13 +1043,6 @@ NtGdiStretchDIBitsInternal( return 0; } - if (!(pdc = DC_LockDc(hDC))) - { - ExFreePoolWithTag(safeBits, TAG_DIB); - EngSetLastError(ERROR_INVALID_HANDLE); - return 0; - } - _SEH2_TRY { ProbeForRead(BitsInfo, cjMaxInfo, 1); @@ -1076,6 +1069,13 @@ NtGdiStretchDIBitsInternal( hBitmap = NtGdiGetDCObject(hDC, OBJ_BITMAP); + if (!(pdc = DC_LockDc(hDC))) + { + ExFreePoolWithTag(safeBits, TAG_DIB); + EngSetLastError(ERROR_INVALID_HANDLE); + return 0; + } + if (XDest == 0 && YDest == 0 && XSrc == 0 && XSrc == 0 && DestWidth == SrcWidth && DestHeight == SrcHeight && compr == BI_RGB && @@ -1091,14 +1091,17 @@ NtGdiStretchDIBitsInternal( { /* fast path */ ret = IntSetDIBits(pdc, hBitmap, 0, height, safeBits, BitsInfo, Usage); + DC_UnlockDc(pdc); goto cleanup; } } /* slow path - need to use StretchBlt */ - hdcMem = NtGdiCreateCompatibleDC(hDC); hBitmap = DIB_CreateDIBSection(pdc, BitsInfo, Usage, &pvBits, NULL, 0, 0); + DC_UnlockDc(pdc); + + hdcMem = NtGdiCreateCompatibleDC(hDC); if(!hBitmap) { DPRINT1("Error, failed to create a DIB section\n"); @@ -1123,7 +1126,6 @@ NtGdiStretchDIBitsInternal( cleanup: ExFreePoolWithTag(safeBits, TAG_DIB); - DC_UnlockDc(pdc); return ret; } From ebc9df1a2548364d77a00b72a302c547e349bb9d Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 19 Feb 2011 23:44:36 +0000 Subject: [PATCH 077/287] [WIN32K] NtGdiSelectBitmap. Don't exclusively lock the old bitmap. This could cause pool corruptions, when the share count reachted 0, the object was deleted and unlocked after that. Use InterlockedCompareExchange to check and exchange the new bitmaps dc. This is commented out, because it causes a lot of drawing problems. Do the referencing manually instead of calling DC_vSelectSurface. Use a shared reference instead of an exclusive lock for the new bitmap. add code for proper handling of DEFAULT_BITMAP, currently hacked due to restrictions in other parts of win32k. Fixes bug 5498 and probably a lot of other problems. svn path=/trunk/; revision=50827 --- .../subsystems/win32/win32k/objects/dcobjs.c | 136 +++++++++++------- 1 file changed, 83 insertions(+), 53 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/dcobjs.c b/reactos/subsystems/win32/win32k/objects/dcobjs.c index 75cde4146ab..25e54cb36c7 100644 --- a/reactos/subsystems/win32/win32k/objects/dcobjs.c +++ b/reactos/subsystems/win32/win32k/objects/dcobjs.c @@ -251,89 +251,119 @@ NtGdiSelectPen( HBITMAP APIENTRY NtGdiSelectBitmap( - IN HDC hDC, - IN HBITMAP hBmp) + IN HDC hdc, + IN HBITMAP hbmp) { - PDC pDC; + PDC pdc; PDC_ATTR pdcattr; - HBITMAP hOrgBmp; - PSURFACE psurfBmp, psurfOld; + HBITMAP hbmpOld; + PSURFACE psurfNew, psurfOld; HRGN hVisRgn; + SIZEL sizlBitmap = {1, 1}; + ASSERT_NOGDILOCKS(); - if (hDC == NULL || hBmp == NULL) return NULL; + /* Verify parameters */ + if (hdc == NULL || hbmp == NULL) return NULL; - pDC = DC_LockDc(hDC); - if (!pDC) + /* First lock the DC */ + pdc = DC_LockDc(hdc); + if (!pdc) { return NULL; } - pdcattr = pDC->pdcattr; + pdcattr = pdc->pdcattr; - /* must be memory dc to select bitmap */ - if (pDC->dctype != DC_TYPE_MEMORY) + /* Must be a memory dc to select a bitmap */ + if (pdc->dctype != DC_TYPE_MEMORY) { - DC_UnlockDc(pDC); + DC_UnlockDc(pdc); return NULL; } - psurfBmp = SURFACE_LockSurface(hBmp); - if (!psurfBmp) + /* Save the old bitmap */ + psurfOld = pdc->dclevel.pSurface; + + /* Check if the default bitmap was passed */ + if (hbmp == StockObjects[DEFAULT_BITMAP]) { - DC_UnlockDc(pDC); - return NULL; + psurfNew = NULL; + + // HACK + psurfNew = SURFACE_ShareLockSurface(hbmp); + } + else + { + /* Reference the new bitmap and check if it's valid */ + psurfNew = SURFACE_ShareLockSurface(hbmp); + if (!psurfNew) + { + DC_UnlockDc(pdc); + return NULL; + } +#if 0 // FIXME: bug bug, causes problems + /* Set the bitmp's hdc */ + if (InterlockedCompareExchangePointer((PVOID*)&psurfNew->hdc, hdc, 0)) + { + /* The bitmap is already selected, fail */ + SURFACE_ShareUnlockSurface(psurfNew); + DC_UnlockDc(pdc); + return NULL; + } +#endif + /* Get the bitmap size */ + sizlBitmap = psurfNew->SurfObj.sizlBitmap; + + /* Check if the bitmap is a dibsection */ + if(psurfNew->hSecure) + { + /* Set DIBSECTION attribute */ + pdcattr->ulDirty_ |= DC_DIBSECTION; + } + else + { + pdcattr->ulDirty_ &= ~DC_DIBSECTION; + } } - /* Get the handle for the old bitmap */ - ASSERT(pDC->dclevel.pSurface); - hOrgBmp = pDC->dclevel.pSurface->BaseObject.hHmgr; + /* Select the new bitmap */ + pdc->dclevel.pSurface = psurfNew; - /* Lock it, to be sure while we mess with it*/ - psurfOld = SURFACE_LockSurface(hOrgBmp); + /* Check if there was a bitmap selected before */ + if (psurfOld) + { + hbmpOld = psurfOld->BaseObject.hHmgr; - /* Reset hdc, this surface isn't selected anymore */ - psurfOld->hdc = NULL; + /* Reset hdc of old bitmap, this surface isn't selected anymore */ + psurfOld->hdc = NULL; - /* Release the old bitmap, reference the new */ - DC_vSelectSurface(pDC, psurfBmp); + /* Release the old bitmap */ + SURFACE_ShareUnlockSurface(psurfOld); + } + else + { + /* Return default bitmap */ + hbmpOld = StockObjects[DEFAULT_BITMAP]; + } - /* And unlock it, now we're done */ - SURFACE_UnlockSurface(psurfOld); - - // If Info DC this is zero and pSurface is moved to DC->pSurfInfo. - psurfBmp->hdc = hDC; + /* Mark the dc brushes invalid */ + pdcattr->ulDirty_ |= DIRTY_FILL | DIRTY_LINE; + /* Unlock the DC */ + DC_UnlockDc(pdc); /* FIXME; improve by using a region without a handle and selecting it */ hVisRgn = IntSysCreateRectRgn( 0, 0, - psurfBmp->SurfObj.sizlBitmap.cx, - psurfBmp->SurfObj.sizlBitmap.cy); - - if(psurfBmp->hSecure) - { - /* Set DIBSECTION attribute */ - pdcattr->ulDirty_ |= DC_DIBSECTION; - } - else - { - pdcattr->ulDirty_ &= ~DC_DIBSECTION; - } - - /* Release the exclusive lock */ - SURFACE_UnlockSurface(psurfBmp); - - /* Mark the brushes invalid */ - pdcattr->ulDirty_ |= DIRTY_FILL | DIRTY_LINE; - - DC_UnlockDc(pDC); - + sizlBitmap.cx, + sizlBitmap.cy); if (hVisRgn) { - GdiSelectVisRgn(hDC, hVisRgn); + GdiSelectVisRgn(hdc, hVisRgn); REGION_FreeRgnByHandle(hVisRgn); } - return hOrgBmp; + /* Return the old bitmp handle */ + return hbmpOld; } From 37ab9f5320e2219d5bbbce4b6bdcef44476dc34c Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sun, 20 Feb 2011 09:54:01 +0000 Subject: [PATCH 078/287] [RTL/DPH] - Fix a bug with node count in RtlpDphAddNewPool(). - Unprotect needed amount of memory in RtlpDphSetProtectionBeforeUse() instead of always assuming PAGE_SIZE. - Fix an incorrect virtual block pointer calculation in RtlpPageHeapAllocate(). - Silence RtlpDphShouldAllocateInPageHeap() debug print. - Add helpful debug prints (disabled by default). - Some code cleanup for better readibility. - Heap create, destroy and allocating a block from the heap work now. svn path=/trunk/; revision=50828 --- reactos/lib/rtl/heappage.c | 75 +++++++++++++++++++++++++------------- 1 file changed, 49 insertions(+), 26 deletions(-) diff --git a/reactos/lib/rtl/heappage.c b/reactos/lib/rtl/heappage.c index f95986df338..28115bc894b 100644 --- a/reactos/lib/rtl/heappage.c +++ b/reactos/lib/rtl/heappage.c @@ -313,7 +313,7 @@ RtlpDphAllocateVm(PVOID *Base, SIZE_T Size, ULONG Type, ULONG Protection) &Size, Type, Protection); - DPRINT1("Page heap: AllocVm (%p, %p, %x) status %x \n", Base, Size, Type, Status); + DPRINT("Page heap: AllocVm (%p, %p, %x) status %x \n", Base, Size, Type, Status); /* Check for failures */ if (!NT_SUCCESS(Status)) { @@ -434,6 +434,8 @@ RtlpDphPlaceOnBusyList(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK DphNode) BOOLEAN NewElement; PVOID AddressUserData; + DPRINT("RtlpDphPlaceOnBusyList(%p %p)\n", DphRoot, DphNode); + /* Add it to the AVL busy nodes table */ DphRoot->NodeToAllocate = DphNode; AddressUserData = RtlInsertElementGenericTableAvl(&DphRoot->BusyNodesTable, @@ -451,35 +453,35 @@ RtlpDphPlaceOnBusyList(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK DphNode) } VOID NTAPI -RtlpDphPlaceOnPoolList(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK DphNode) +RtlpDphPlaceOnPoolList(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK Node) { /* DphNode is being added to the tail of the list */ - DphNode->pNextAlloc = NULL; + Node->pNextAlloc = NULL; /* Add it to the tail of the linked list */ if (DphRoot->pNodePoolListTail) - DphRoot->pNodePoolListTail->pNextAlloc = DphNode; + DphRoot->pNodePoolListTail->pNextAlloc = Node; else - DphRoot->pNodePoolListHead = DphNode; - DphRoot->pNodePoolListTail = DphNode; + DphRoot->pNodePoolListHead = Node; + DphRoot->pNodePoolListTail = Node; /* Update byte counts taking in account this new node */ DphRoot->nNodePools++; - DphRoot->nNodePoolBytes += DphNode->nVirtualBlockSize; + DphRoot->nNodePoolBytes += Node->nVirtualBlockSize; } VOID NTAPI -RtlpDphPlaceOnVirtualList(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK DphNode) +RtlpDphPlaceOnVirtualList(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK Node) { /* Add it to the head of the virtual list */ - DphNode->pNextAlloc = DphRoot->pVirtualStorageListHead; + Node->pNextAlloc = DphRoot->pVirtualStorageListHead; if (!DphRoot->pVirtualStorageListHead) - DphRoot->pVirtualStorageListTail = DphNode; - DphRoot->pVirtualStorageListHead = DphNode; + DphRoot->pVirtualStorageListTail = Node; + DphRoot->pVirtualStorageListHead = Node; /* Update byte counts taking in account this new node */ DphRoot->nVirtualStorageRanges++; - DphRoot->nVirtualStorageBytes += DphNode->nVirtualBlockSize; + DphRoot->nVirtualStorageBytes += Node->nVirtualBlockSize; } PDPH_HEAP_BLOCK NTAPI @@ -508,7 +510,8 @@ RtlpDphReturnNodeToUnusedList(PDPH_HEAP_ROOT DphRoot, { /* Add it back to the head of the unused list */ Node->pNextAlloc = DphRoot->pUnusedNodeListHead; - if (!DphRoot->pUnusedNodeListHead) DphRoot->pUnusedNodeListTail = Node; + if (!DphRoot->pUnusedNodeListHead) + DphRoot->pUnusedNodeListTail = Node; DphRoot->pUnusedNodeListHead = Node; /* Increase amount of unused nodes */ @@ -523,6 +526,8 @@ RtlpDphRemoveFromAvailableList(PDPH_HEAP_ROOT DphRoot, //ASSERT(IS_BIASED_POINTER(Node->AdjacencyEntry.Flink)); //ASSERT(IS_BIASED_POINTER(Node->AdjacencyEntry.Blink)); + DPRINT("RtlpDphRemoveFromAvailableList(%p %p)\n", DphRoot, Node); + /* Remove it from the list */ RemoveEntryList(&Node->AvailableEntry); @@ -565,6 +570,8 @@ RtlpDphCoalesceNodeIntoAvailable(PDPH_HEAP_ROOT DphRoot, PLIST_ENTRY AvailListHead; PLIST_ENTRY CurEntry; + DPRINT("RtlpDphCoalesceNodeIntoAvailable(%p %p)\n", DphRoot, Node); + /* Update heap counters */ DphRoot->nAvailableAllocationBytesCommitted += Node->nVirtualBlockSize; DphRoot->nAvailableAllocations++; @@ -658,14 +665,18 @@ VOID NTAPI RtlpDphAddNewPool(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK NodeBlock, PVOID Virtual, SIZE_T Size, BOOLEAN PlaceOnPool) { PDPH_HEAP_BLOCK DphNode, DphStartNode; - ULONG NodeCount; + ULONG NodeCount, i; - NodeCount = (Size >> 6) - 1; + //NodeCount = (Size >> 6) - 1; + NodeCount = (Size / sizeof(DPH_HEAP_BLOCK)); DphStartNode = Virtual; /* Set pNextAlloc for all blocks */ - for (DphNode = Virtual; NodeCount > 0; DphNode++, NodeCount--) + for (DphNode = Virtual, i=NodeCount-1; i > 0; i--) + { DphNode->pNextAlloc = DphNode + 1; + DphNode = DphNode->pNextAlloc; + } /* and the last one */ DphNode->pNextAlloc = NULL; @@ -797,13 +808,13 @@ RtlpDphSetProtectionBeforeUse(PDPH_HEAP_ROOT DphRoot, PUCHAR VirtualBlock, ULONG } else { - Base = VirtualBlock + UserSize; + Base = VirtualBlock + PAGE_SIZE; } // FIXME: It should be different, but for now it's fine Protection = PAGE_READWRITE; - return RtlpDphProtectVm(Base, PAGE_SIZE, Protection); + return RtlpDphProtectVm(Base, UserSize, Protection); } PDPH_HEAP_BLOCK NTAPI @@ -1284,7 +1295,8 @@ BOOLEAN NTAPI RtlpDphShouldAllocateInPageHeap(PDPH_HEAP_ROOT DphRoot, SIZE_T Size) { - UNIMPLEMENTED; + //UNIMPLEMENTED; + /* Always use page heap for now */ return TRUE; } @@ -1517,9 +1529,10 @@ RtlpPageHeapAllocate(IN PVOID HeapPtr, PDPH_HEAP_ROOT DphRoot; PDPH_HEAP_BLOCK Node, AllocatedNode; BOOLEAN Biased = FALSE; - ULONG TotalSize, UserSize; + ULONG TotalSize, AccessSize; NTSTATUS Status; SIZE_T UserActualSize; + PVOID Ptr; /* Check requested size */ if (Size > 0x7FF00000) @@ -1569,8 +1582,8 @@ RtlpPageHeapAllocate(IN PVOID HeapPtr, } /* Calculate sizes */ - UserSize = ROUND_UP(Size + sizeof(DPH_BLOCK_INFORMATION), PAGE_SIZE); - TotalSize = UserSize + PAGE_SIZE; + AccessSize = ROUND_UP(Size + sizeof(DPH_BLOCK_INFORMATION), PAGE_SIZE); + TotalSize = AccessSize + PAGE_SIZE; // RtlpDphAllocateNode(DphRoot); Node = RtlpDphFindAvailableMemory(DphRoot, TotalSize, TRUE); @@ -1587,12 +1600,14 @@ RtlpPageHeapAllocate(IN PVOID HeapPtr, ASSERT(Node->nVirtualBlockSize >= TotalSize); /* Set protection */ - Status = RtlpDphSetProtectionBeforeUse(DphRoot, Node->pVirtualBlock, UserSize); + Status = RtlpDphSetProtectionBeforeUse(DphRoot, Node->pVirtualBlock, AccessSize); if (!NT_SUCCESS(Status)) { ASSERT(FALSE); } + Ptr = Node->pVirtualBlock; + /* Check node's size */ if (Node->nVirtualBlockSize > TotalSize) { @@ -1603,7 +1618,7 @@ RtlpPageHeapAllocate(IN PVOID HeapPtr, AllocatedNode = RtlpDphAllocateNode(DphRoot); ASSERT(AllocatedNode != NULL); - AllocatedNode->pVirtualBlock = Node->pVirtualBlock - TotalSize; + AllocatedNode->pVirtualBlock = Ptr; AllocatedNode->nVirtualBlockSize = TotalSize; } else @@ -1620,7 +1635,7 @@ RtlpPageHeapAllocate(IN PVOID HeapPtr, UserActualSize = ROUND_UP(Size, 8); /* Set up the block */ - AllocatedNode->nVirtualAccessSize = UserSize; + AllocatedNode->nVirtualAccessSize = AccessSize; AllocatedNode->nUserActualSize = UserActualSize; AllocatedNode->nUserRequestedSize = Size; @@ -1647,7 +1662,7 @@ RtlpPageHeapAllocate(IN PVOID HeapPtr, /* Write DPH info */ if (!(DphRoot->ExtraFlags & DPH_EXTRA_CHECK_UNDERRUN)) { - RtlpDphWritePageHeapBlockInformation(DphRoot, AllocatedNode->pUserAllocation, Size, UserSize); + RtlpDphWritePageHeapBlockInformation(DphRoot, AllocatedNode->pUserAllocation, Size, AccessSize); } /* Finally allocation is done, perform validation again if required */ @@ -1659,6 +1674,8 @@ RtlpPageHeapAllocate(IN PVOID HeapPtr, /* Release the lock */ RtlpDphPostProcessing(DphRoot); + DPRINT("Allocated user block pointer: %p\n", AllocatedNode->pUserAllocation); + /* Return pointer to user allocation */ return AllocatedNode->pUserAllocation; } @@ -1668,6 +1685,7 @@ RtlpPageHeapFree(HANDLE HeapPtr, ULONG Flags, PVOID Ptr) { + UNIMPLEMENTED; return FALSE; } @@ -1677,6 +1695,7 @@ RtlpPageHeapReAllocate(HANDLE HeapPtr, PVOID Ptr, SIZE_T Size) { + UNIMPLEMENTED; return NULL; } @@ -1687,6 +1706,7 @@ RtlpPageHeapGetUserInfo(PVOID HeapHandle, PVOID *UserValue, PULONG UserFlags) { + UNIMPLEMENTED; return FALSE; } @@ -1696,6 +1716,7 @@ RtlpPageHeapSetUserValue(PVOID HeapHandle, PVOID BaseAddress, PVOID UserValue) { + UNIMPLEMENTED; return FALSE; } @@ -1707,6 +1728,7 @@ RtlpPageHeapSetUserFlags(PVOID HeapHandle, ULONG UserFlagsReset, ULONG UserFlagsSet) { + UNIMPLEMENTED; return FALSE; } @@ -1715,6 +1737,7 @@ RtlpPageHeapSize(HANDLE HeapPtr, ULONG Flags, PVOID Ptr) { + UNIMPLEMENTED; return 0; } From f411e07b42233b8e9f53dbf1a0d6800c0bac3c21 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 20 Feb 2011 10:44:30 +0000 Subject: [PATCH 079/287] [SETUPAPI] Implement CM_Get_Hardware_Profile_Info[_Ex]A/W. svn path=/trunk/; revision=50829 --- reactos/dll/win32/setupapi/cfgmgr.c | 108 +++++++++++++++++++++++ reactos/dll/win32/setupapi/setupapi.spec | 8 +- 2 files changed, 112 insertions(+), 4 deletions(-) diff --git a/reactos/dll/win32/setupapi/cfgmgr.c b/reactos/dll/win32/setupapi/cfgmgr.c index 5b975189351..f7b33e7acdd 100644 --- a/reactos/dll/win32/setupapi/cfgmgr.c +++ b/reactos/dll/win32/setupapi/cfgmgr.c @@ -2638,6 +2638,114 @@ CONFIGRET WINAPI CM_Get_HW_Prof_Flags_ExW( } +/*********************************************************************** + * CM_Get_Hardware_Profile_InfoA [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_Hardware_Profile_InfoA( + ULONG ulIndex, PHWPROFILEINFO_A pHWProfileInfo, ULONG ulFlags) +{ + TRACE("%lu %p %lx\n", ulIndex, pHWProfileInfo, ulFlags); + + return CM_Get_Hardware_Profile_Info_ExA(ulIndex, pHWProfileInfo, + ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Get_Hardware_Profile_InfoW [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_Hardware_Profile_InfoW( + ULONG ulIndex, PHWPROFILEINFO_W pHWProfileInfo, ULONG ulFlags) +{ + TRACE("%lu %p %lx\n", ulIndex, pHWProfileInfo, ulFlags); + + return CM_Get_Hardware_Profile_Info_ExW(ulIndex, pHWProfileInfo, + ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Get_Hardware_Profile_Info_ExA [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_Hardware_Profile_Info_ExA( + ULONG ulIndex, PHWPROFILEINFO_A pHWProfileInfo, ULONG ulFlags, + HMACHINE hMachine) +{ + HWPROFILEINFO_W LocalProfileInfo; + CONFIGRET ret; + + TRACE("%lu %p %lx %lx\n", ulIndex, pHWProfileInfo, ulFlags, hMachine); + + if (pHWProfileInfo == NULL) + return CR_INVALID_POINTER; + + ret = CM_Get_Hardware_Profile_Info_ExW(ulIndex, &LocalProfileInfo, + ulFlags, hMachine); + if (ret == CR_SUCCESS) + { + pHWProfileInfo->HWPI_ulHWProfile = LocalProfileInfo.HWPI_ulHWProfile; + pHWProfileInfo->HWPI_dwFlags = LocalProfileInfo.HWPI_dwFlags; + + if (WideCharToMultiByte(CP_ACP, + 0, + LocalProfileInfo.HWPI_szFriendlyName, + lstrlenW(LocalProfileInfo.HWPI_szFriendlyName) + 1, + pHWProfileInfo->HWPI_szFriendlyName, + MAX_PROFILE_LEN, + NULL, + NULL) == 0) + ret = CR_FAILURE; + } + + return ret; +} + + +/*********************************************************************** + * CM_Get_Hardware_Profile_Info_ExW [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_Hardware_Profile_Info_ExW( + ULONG ulIndex, PHWPROFILEINFO_W pHWProfileInfo, ULONG ulFlags, + HMACHINE hMachine) +{ + RPC_BINDING_HANDLE BindingHandle = NULL; + CONFIGRET ret; + + TRACE("%lu %p %lx %lx\n", ulIndex, pHWProfileInfo, ulFlags, hMachine); + + if (pHWProfileInfo == NULL) + return CR_INVALID_POINTER; + + if (ulFlags != 0) + return CR_INVALID_FLAG; + + if (hMachine != NULL) + { + BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle; + if (BindingHandle == NULL) + return CR_FAILURE; + } + else + { + if (!PnpGetLocalHandles(&BindingHandle, NULL)) + return CR_FAILURE; + } + + RpcTryExcept + { + ret = PNP_GetHwProfInfo(BindingHandle, ulIndex, pHWProfileInfo, + sizeof(HWPROFILEINFO_W), 0); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + ret = RpcStatusToCmStatus(RpcExceptionCode()); + } + RpcEndExcept; + + return ret; +} + + /*********************************************************************** * CM_Get_Log_Conf_Priority [SETUPAPI.@] */ diff --git a/reactos/dll/win32/setupapi/setupapi.spec b/reactos/dll/win32/setupapi/setupapi.spec index 4c77bf1e1d2..95965a3d0bc 100644 --- a/reactos/dll/win32/setupapi/setupapi.spec +++ b/reactos/dll/win32/setupapi/setupapi.spec @@ -110,10 +110,10 @@ @ stdcall CM_Get_HW_Prof_FlagsW(wstr long ptr long) @ stdcall CM_Get_HW_Prof_Flags_ExA(str long ptr long long) @ stdcall CM_Get_HW_Prof_Flags_ExW(wstr long ptr long long) -@ stub CM_Get_Hardware_Profile_InfoA -@ stub CM_Get_Hardware_Profile_InfoW -@ stub CM_Get_Hardware_Profile_Info_ExA -@ stub CM_Get_Hardware_Profile_Info_ExW +@ stdcall CM_Get_Hardware_Profile_InfoA(long ptr long) +@ stdcall CM_Get_Hardware_Profile_InfoW(long ptr long) +@ stdcall CM_Get_Hardware_Profile_Info_ExA(long ptr long long) +@ stdcall CM_Get_Hardware_Profile_Info_ExW(long ptr long long) @ stdcall CM_Get_Log_Conf_Priority(ptr ptr long) @ stdcall CM_Get_Log_Conf_Priority_Ex(ptr ptr long long) @ stdcall CM_Get_Next_Log_Conf(ptr ptr long) From c5e43261f2b49e48360b7e6cc4914568f2aab9a2 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 20 Feb 2011 10:55:48 +0000 Subject: [PATCH 080/287] [CHARMAP] Patch by Carlo Bramini (carlo bramix at libero dot it) - Make the text copy field a richedit control. - Use WM_CHAR to copy the characters - Fix definition of MSFTEDIT_CLASS for the resource compiler See issue #5275 for more details. svn path=/trunk/; revision=50830 --- reactos/base/applications/charmap/charmap.c | 187 +++++++++++------- reactos/base/applications/charmap/charmap.rc | 1 + .../base/applications/charmap/lang/bg-BG.rc | 2 +- .../base/applications/charmap/lang/ca-ES.rc | 2 +- .../base/applications/charmap/lang/cs-CZ.rc | 2 +- .../base/applications/charmap/lang/de-DE.rc | 2 +- .../base/applications/charmap/lang/el-GR.rc | 2 +- .../base/applications/charmap/lang/en-US.rc | 2 +- .../base/applications/charmap/lang/es-ES.rc | 2 +- .../base/applications/charmap/lang/fr-FR.rc | 2 +- .../base/applications/charmap/lang/id-ID.rc | 2 +- .../base/applications/charmap/lang/it-IT.rc | 2 +- .../base/applications/charmap/lang/ja-JP.rc | 2 +- .../base/applications/charmap/lang/ko-KR.rc | 2 +- .../base/applications/charmap/lang/lt-LT.rc | 2 +- .../base/applications/charmap/lang/nl-NL.rc | 2 +- .../base/applications/charmap/lang/no-NO.rc | 2 +- .../base/applications/charmap/lang/pl-PL.rc | 2 +- .../base/applications/charmap/lang/pt-BR.rc | 2 +- .../base/applications/charmap/lang/ru-RU.rc | 2 +- .../base/applications/charmap/lang/sk-SK.rc | 2 +- .../base/applications/charmap/lang/uk-UA.rc | 2 +- .../base/applications/charmap/lang/zh-CN.rc | 2 +- .../base/applications/charmap/lang/zh-TW.rc | 2 +- reactos/base/applications/charmap/map.c | 3 + reactos/base/applications/charmap/precomp.h | 8 +- reactos/include/psdk/richedit.h | 13 +- 27 files changed, 157 insertions(+), 99 deletions(-) diff --git a/reactos/base/applications/charmap/charmap.c b/reactos/base/applications/charmap/charmap.c index 4614bf9c644..6f91d5b4ef9 100644 --- a/reactos/base/applications/charmap/charmap.c +++ b/reactos/base/applications/charmap/charmap.c @@ -133,57 +133,96 @@ ChangeMapFont(HWND hDlg) } } +// Copy collected characters into the clipboard +static +void +CopyCharacters(HWND hDlg) +{ + HWND hText = GetDlgItem(hDlg, IDC_TEXTBOX); + DWORD dwStart, dwEnd; + // Acquire selection limits + SendMessage(hText, EM_GETSEL, (WPARAM)&dwStart, (LPARAM)&dwEnd); + + // Test if the whose text is unselected + if(dwStart == dwEnd) { + + // Select the whole text + SendMessageW(hText, EM_SETSEL, 0, -1); + + // Copy text + SendMessageW(hText, WM_COPY, 0, 0); + + // Restore previous values + SendMessageW(hText, EM_SETSEL, (WPARAM)dwStart, (LPARAM)dwEnd); + + } else { + + // Copy text + SendMessageW(hText, WM_COPY, 0, 0); + } +} + +// Recover charset for the given font +static +BYTE +GetFontMetrics(HWND hWnd, HFONT hFont) +{ + TEXTMETRIC tmFont; + HGDIOBJ hOldObj; + HDC hDC; + + hDC = GetDC(hWnd); + hOldObj = SelectObject(hDC, hFont); + GetTextMetrics(hDC, &tmFont); + SelectObject(hDC, hOldObj); + ReleaseDC(hWnd, hDC); + + return tmFont.tmCharSet; +} + +// Select a new character static VOID -AddCharToSelection(HWND hText, - WCHAR ch) +AddCharToSelection(HWND hDlg, WCHAR ch) { - LPWSTR lpText; - INT Len = GetWindowTextLength(hText); + HWND hMap = GetDlgItem(hDlg, IDC_FONTMAP); + HWND hText = GetDlgItem(hDlg, IDC_TEXTBOX); + HFONT hFont; + LOGFONT lFont; + CHARFORMAT cf; - if (Len != 0) + // Retrieve current character selected + if (ch == 0) { - lpText = HeapAlloc(GetProcessHeap(), - 0, - (Len + 2) * sizeof(WCHAR)); - - if (lpText) - { - LPWSTR lpStr = lpText; - - SendMessageW(hText, - WM_GETTEXT, - Len + 1, - (LPARAM)lpStr); - - lpStr += Len; - *lpStr = ch; - lpStr++; - *lpStr = L'\0'; - - SendMessageW(hText, - WM_SETTEXT, - 0, - (LPARAM)lpText); - - HeapFree(GetProcessHeap(), - 0, - lpText); - } + ch = (WCHAR) SendMessageW(hMap, FM_GETCHAR, 0, 0); + if (!ch) + return; } - else - { - WCHAR szText[2]; - szText[0] = ch; - szText[1] = L'\0'; + // Retrieve current selected font + hFont = (HFONT)SendMessage(hMap, FM_GETHFONT, 0, 0); - SendMessageW(hText, - WM_SETTEXT, - 0, - (LPARAM)szText); - } + // Recover LOGFONT structure from hFont + if (!GetObject(hFont, sizeof(LOGFONT), &lFont)) + return; + + // Recover font properties of Richedit control + ZeroMemory(&cf, sizeof(cf)); + cf.cbSize = sizeof(cf); + SendMessage(hText, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf); + + // Apply properties of the new font + cf.bCharSet = GetFontMetrics(hText, hFont); + + // Update font name + wcscpy(cf.szFaceName, lFont.lfFaceName); + + // Update font properties + SendMessage(hText, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf); + + // Send selected character to Richedit + SendMessage(hText, WM_CHAR, (WPARAM)ch, 0); } @@ -204,6 +243,7 @@ DlgProc(HWND hDlg, case WM_INITDIALOG: { HMENU hSysMenu; + DWORD evMask; hSmIcon = LoadImageW(hInstance, MAKEINTRESOURCEW(IDI_ICON), @@ -256,6 +296,12 @@ DlgProc(HWND hDlg, lpAboutText); } } + + // Configure Richedi control for sending notification changes. + evMask = SendDlgItemMessage(hDlg, IDC_TEXTBOX, EM_GETEVENTMASK, 0, 0); + evMask |= ENM_CHANGE; + SendDlgItemMessage(hDlg, IDC_TEXTBOX, EM_SETEVENTMASK, 0, (LPARAM)evMask); + return TRUE; } @@ -264,41 +310,39 @@ DlgProc(HWND hDlg, switch(LOWORD(wParam)) { case IDC_FONTMAP: - { switch (HIWORD(wParam)) { case FM_SETCHAR: - AddCharToSelection(GetDlgItem(hDlg, IDC_TEXTBOX), - LOWORD(lParam)); + AddCharToSelection(hDlg, LOWORD(lParam)); break; } - } - break; + break; case IDC_FONTCOMBO: - { if (HIWORD(wParam) == CBN_SELCHANGE) { ChangeMapFont(hDlg); } - } - break; + break; case IDC_SELECT: - { - WCHAR ch; - HWND hMap = GetDlgItem(hDlg, IDC_FONTMAP); - - ch = (WCHAR) SendMessageW(hMap, FM_GETCHAR, 0, 0); - - if (ch) - { - AddCharToSelection(GetDlgItem(hDlg, IDC_TEXTBOX), - ch); - } - + AddCharToSelection(hDlg, 0); + break; + + case IDC_TEXTBOX: + switch (HIWORD(wParam)) { + case EN_CHANGE: + if (GetWindowTextLength(GetDlgItem(hDlg, IDC_TEXTBOX)) == 0) + EnableWindow(GetDlgItem(hDlg, IDC_COPY), FALSE); + else + EnableWindow(GetDlgItem(hDlg, IDC_COPY), TRUE); + break; + } + break; + + case IDC_COPY: + CopyCharacters(hDlg); break; - } case IDOK: if (hSmIcon) @@ -306,7 +350,7 @@ DlgProc(HWND hDlg, if (hBgIcon) DestroyIcon(hBgIcon); EndDialog(hDlg, 0); - break; + break; } } break; @@ -347,6 +391,7 @@ wWinMain(HINSTANCE hInst, { INITCOMMONCONTROLSEX iccx; INT Ret = 1; + HMODULE hRichEd20; hInstance = hInst; @@ -356,11 +401,17 @@ wWinMain(HINSTANCE hInst, if (RegisterMapClasses(hInstance)) { - Ret = DialogBoxW(hInstance, - MAKEINTRESOURCEW(IDD_CHARMAP), - NULL, - DlgProc) >= 0; + hRichEd20 = LoadLibraryW(L"RICHED20.DLL"); + if (hRichEd20 != NULL) + { + Ret = DialogBoxW(hInstance, + MAKEINTRESOURCEW(IDD_CHARMAP), + NULL, + DlgProc) >= 0; + + FreeLibrary(hRichEd20); + } UnregisterMapClasses(hInstance); } diff --git a/reactos/base/applications/charmap/charmap.rc b/reactos/base/applications/charmap/charmap.rc index 6c50cb661d5..ce6b398b5d7 100644 --- a/reactos/base/applications/charmap/charmap.rc +++ b/reactos/base/applications/charmap/charmap.rc @@ -1,5 +1,6 @@ #include #include +#include #include "resource.h" diff --git a/reactos/base/applications/charmap/lang/bg-BG.rc b/reactos/base/applications/charmap/lang/bg-BG.rc index 243a34b308b..a4c203b4e9f 100644 --- a/reactos/base/applications/charmap/lang/bg-BG.rc +++ b/reactos/base/applications/charmap/lang/bg-BG.rc @@ -10,7 +10,7 @@ BEGIN PUSHBUTTON "", IDC_CMHELP, 249, 5, 35, 13 CONTROL "", IDC_FONTMAP, "FontMapWnd", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, 20, 22, 266, 156 LTEXT " :", IDC_STATIC, 3, 188, 75, 9 - EDITTEXT IDC_TEXTBOX, 79, 186, 114, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "",IDC_TEXTBOX,RICHEDIT_CLASS,ES_AUTOHSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13 DEFPUSHBUTTON "", IDC_SELECT, 194, 186, 44, 13 PUSHBUTTON "", IDC_COPY, 242, 186, 44, 13, WS_DISABLED //AUTOCHECKBOX "a ", IDC_ADVVIEW, 10, 204, 64, 9, WS_CHILD | WS_VISIBLE | WS_TABSTOP diff --git a/reactos/base/applications/charmap/lang/ca-ES.rc b/reactos/base/applications/charmap/lang/ca-ES.rc index 170cef53200..102e1ceb4f7 100644 --- a/reactos/base/applications/charmap/lang/ca-ES.rc +++ b/reactos/base/applications/charmap/lang/ca-ES.rc @@ -10,7 +10,7 @@ BEGIN PUSHBUTTON "Ajuda", IDC_CMHELP, 249, 5, 35, 13 CONTROL "", IDC_FONTMAP, "FontMapWnd", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, 20, 22, 266, 156 LTEXT "Carcters a copiar :", IDC_STATIC, 6, 188, 66, 9 - EDITTEXT IDC_TEXTBOX, 74, 186, 114, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "",IDC_TEXTBOX,RICHEDIT_CLASS,ES_AUTOHSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13 DEFPUSHBUTTON "Selecciona", IDC_SELECT, 194, 186, 44, 13 PUSHBUTTON "Copia", IDC_COPY, 242, 186, 44, 13, WS_DISABLED //AUTOCHECKBOX "Vista avanada", IDC_ADVVIEW, 10, 204, 64, 9, WS_CHILD | WS_VISIBLE | WS_TABSTOP diff --git a/reactos/base/applications/charmap/lang/cs-CZ.rc b/reactos/base/applications/charmap/lang/cs-CZ.rc index 2a917a2e2c2..a9d48a5ff64 100644 --- a/reactos/base/applications/charmap/lang/cs-CZ.rc +++ b/reactos/base/applications/charmap/lang/cs-CZ.rc @@ -15,7 +15,7 @@ BEGIN PUSHBUTTON "Npovda", IDC_CMHELP, 249, 5, 35, 13 CONTROL "", IDC_FONTMAP, "FontMapWnd", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, 20, 22, 266, 156 LTEXT "Znaky ke zkoprovn:", IDC_STATIC, 6, 188, 66, 9 - EDITTEXT IDC_TEXTBOX, 74, 186, 114, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "",IDC_TEXTBOX,RICHEDIT_CLASS,ES_AUTOHSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13 DEFPUSHBUTTON "Oznait", IDC_SELECT, 194, 186, 44, 13 PUSHBUTTON "Koprovat", IDC_COPY, 242, 186, 44, 13, WS_DISABLED //AUTOCHECKBOX "Pokroil zobrazen", IDC_ADVVIEW, 10, 204, 64, 9, WS_CHILD | WS_VISIBLE | WS_TABSTOP diff --git a/reactos/base/applications/charmap/lang/de-DE.rc b/reactos/base/applications/charmap/lang/de-DE.rc index 9133cdb2c41..cecf8fe2621 100644 --- a/reactos/base/applications/charmap/lang/de-DE.rc +++ b/reactos/base/applications/charmap/lang/de-DE.rc @@ -10,7 +10,7 @@ BEGIN PUSHBUTTON "Hilfe", IDC_CMHELP, 249, 5, 35, 13 CONTROL "", IDC_FONTMAP, "FontMapWnd", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, 20, 22, 266, 156 LTEXT "Zeichenauswahl:", IDC_STATIC, 6, 188, 66, 9 - EDITTEXT IDC_TEXTBOX, 74, 186, 114, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "",IDC_TEXTBOX,RICHEDIT_CLASS,ES_AUTOHSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13 DEFPUSHBUTTON "Auswhlen", IDC_SELECT, 194, 186, 44, 13 PUSHBUTTON "Kopieren", IDC_COPY, 242, 186, 44, 13, WS_DISABLED //AUTOCHECKBOX "Erweiterte Ansicht", IDC_ADVVIEW, 10, 204, 64, 9, WS_CHILD | WS_VISIBLE | WS_TABSTOP diff --git a/reactos/base/applications/charmap/lang/el-GR.rc b/reactos/base/applications/charmap/lang/el-GR.rc index 5d1be14b608..4ad6c2764cb 100644 --- a/reactos/base/applications/charmap/lang/el-GR.rc +++ b/reactos/base/applications/charmap/lang/el-GR.rc @@ -12,7 +12,7 @@ BEGIN CONTROL "",IDC_FONTMAP,"FontMapWnd",WS_VSCROLL | WS_TABSTOP,20, 22,266,156 LTEXT " :",IDC_STATIC,6,184,66,17 - EDITTEXT IDC_TEXTBOX,74,186,114,13 + CONTROL "",IDC_TEXTBOX,RICHEDIT_CLASS,ES_AUTOHSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13 DEFPUSHBUTTON "",IDC_SELECT,194,186,44,13 PUSHBUTTON "",IDC_COPY,242,186,44,13,WS_DISABLED END diff --git a/reactos/base/applications/charmap/lang/en-US.rc b/reactos/base/applications/charmap/lang/en-US.rc index a3390d7d68e..9cf7dfc5347 100644 --- a/reactos/base/applications/charmap/lang/en-US.rc +++ b/reactos/base/applications/charmap/lang/en-US.rc @@ -10,7 +10,7 @@ BEGIN PUSHBUTTON "Help", IDC_CMHELP, 249, 5, 35, 13 CONTROL "", IDC_FONTMAP, "FontMapWnd", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, 20, 22, 266, 156 LTEXT "Characters to copy:", IDC_STATIC, 6, 188, 66, 9 - EDITTEXT IDC_TEXTBOX, 74, 186, 114, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "",IDC_TEXTBOX,RICHEDIT_CLASS,ES_AUTOHSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13 DEFPUSHBUTTON "Select", IDC_SELECT, 194, 186, 44, 13 PUSHBUTTON "Copy", IDC_COPY, 242, 186, 44, 13, WS_DISABLED //AUTOCHECKBOX "Advanced view", IDC_ADVVIEW, 10, 204, 64, 9, WS_CHILD | WS_VISIBLE | WS_TABSTOP diff --git a/reactos/base/applications/charmap/lang/es-ES.rc b/reactos/base/applications/charmap/lang/es-ES.rc index 1e0735b0335..ada78f80c69 100644 --- a/reactos/base/applications/charmap/lang/es-ES.rc +++ b/reactos/base/applications/charmap/lang/es-ES.rc @@ -10,7 +10,7 @@ BEGIN PUSHBUTTON "Ayuda", IDC_CMHELP, 249, 5, 35, 13 CONTROL "", IDC_FONTMAP, "FontMapWnd", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, 20, 22, 266, 156 LTEXT "Caracteres a copiar :", IDC_STATIC, 6, 188, 66, 9 - EDITTEXT IDC_TEXTBOX, 74, 186, 114, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "",IDC_TEXTBOX,RICHEDIT_CLASS,ES_AUTOHSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13 DEFPUSHBUTTON "Seleccionar", IDC_SELECT, 194, 186, 44, 13 PUSHBUTTON "Copiar", IDC_COPY, 242, 186, 44, 13, WS_DISABLED //AUTOCHECKBOX "Vista Avanzada", IDC_ADVVIEW, 10, 204, 64, 9, WS_CHILD | WS_VISIBLE | WS_TABSTOP diff --git a/reactos/base/applications/charmap/lang/fr-FR.rc b/reactos/base/applications/charmap/lang/fr-FR.rc index dc49060ae38..9a2a206726e 100644 --- a/reactos/base/applications/charmap/lang/fr-FR.rc +++ b/reactos/base/applications/charmap/lang/fr-FR.rc @@ -10,7 +10,7 @@ BEGIN PUSHBUTTON "Aide", IDC_CMHELP, 249, 5, 35, 13 CONTROL "", IDC_FONTMAP, "FontMapWnd", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, 20, 22, 266, 156 LTEXT "Caractres copier :", IDC_STATIC, 6, 188, 66, 9 - EDITTEXT IDC_TEXTBOX, 74, 186, 114, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "",IDC_TEXTBOX,RICHEDIT_CLASS,ES_AUTOHSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13 DEFPUSHBUTTON "Slectionner", IDC_SELECT, 194, 186, 44, 13 PUSHBUTTON "Copier", IDC_COPY, 242, 186, 44, 13, WS_DISABLED //AUTOCHECKBOX "Vue avance", IDC_ADVVIEW, 10, 204, 64, 9, WS_CHILD | WS_VISIBLE | WS_TABSTOP diff --git a/reactos/base/applications/charmap/lang/id-ID.rc b/reactos/base/applications/charmap/lang/id-ID.rc index e003f2c1268..790bf651bef 100644 --- a/reactos/base/applications/charmap/lang/id-ID.rc +++ b/reactos/base/applications/charmap/lang/id-ID.rc @@ -10,7 +10,7 @@ BEGIN PUSHBUTTON "Bantuan", IDC_CMHELP, 249, 5, 35, 13 CONTROL "", IDC_FONTMAP, "FontMapWnd", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, 20, 22, 266, 156 LTEXT "Karakter untuk di-copy :", IDC_STATIC, 6, 188, 66, 9 - EDITTEXT IDC_TEXTBOX, 74, 186, 114, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "",IDC_TEXTBOX,RICHEDIT_CLASS,ES_AUTOHSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13 DEFPUSHBUTTON "Pilih", IDC_SELECT, 194, 186, 44, 13 PUSHBUTTON "Copy", IDC_COPY, 242, 186, 44, 13, WS_DISABLED //AUTOCHECKBOX "Advanced view", IDC_ADVVIEW, 10, 204, 64, 9, WS_CHILD | WS_VISIBLE | WS_TABSTOP diff --git a/reactos/base/applications/charmap/lang/it-IT.rc b/reactos/base/applications/charmap/lang/it-IT.rc index 2ca73a7b4a1..f7f44bb2453 100644 --- a/reactos/base/applications/charmap/lang/it-IT.rc +++ b/reactos/base/applications/charmap/lang/it-IT.rc @@ -10,7 +10,7 @@ BEGIN PUSHBUTTON "Aiuto", IDC_CMHELP, 249, 5, 35, 13 CONTROL "", IDC_FONTMAP, "FontMapWnd", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, 20, 22, 266, 156 LTEXT "Caratteri da copiare :", IDC_STATIC, 6, 188, 66, 9 - EDITTEXT IDC_TEXTBOX, 74, 186, 114, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "",IDC_TEXTBOX,RICHEDIT_CLASS,ES_AUTOHSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13 DEFPUSHBUTTON "Selezionare", IDC_SELECT, 194, 186, 44, 13 PUSHBUTTON "Copiare", IDC_COPY, 242, 186, 44, 13, WS_DISABLED //AUTOCHECKBOX "Visualizzazione avanzata", IDC_ADVVIEW, 10, 204, 64, 9, WS_CHILD | WS_VISIBLE | WS_TABSTOP diff --git a/reactos/base/applications/charmap/lang/ja-JP.rc b/reactos/base/applications/charmap/lang/ja-JP.rc index 17c649a23a0..e5e426d2674 100644 --- a/reactos/base/applications/charmap/lang/ja-JP.rc +++ b/reactos/base/applications/charmap/lang/ja-JP.rc @@ -10,7 +10,7 @@ BEGIN PUSHBUTTON "wv", IDC_CMHELP, 249, 5, 35, 13 CONTROL "", IDC_FONTMAP, "FontMapWnd", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, 20, 22, 266, 156 LTEXT "Rs[镶:", IDC_STATIC, 6, 188, 66, 9 - EDITTEXT IDC_TEXTBOX, 74, 186, 114, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "",IDC_TEXTBOX,RICHEDIT_CLASS,ES_AUTOHSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13 DEFPUSHBUTTON "I", IDC_SELECT, 194, 186, 44, 13 PUSHBUTTON "Rs[", IDC_COPY, 242, 186, 44, 13, WS_DISABLED //AUTOCHECKBOX "ڍו\\", IDC_ADVVIEW, 10, 204, 64, 9, WS_CHILD | WS_VISIBLE | WS_TABSTOP diff --git a/reactos/base/applications/charmap/lang/ko-KR.rc b/reactos/base/applications/charmap/lang/ko-KR.rc index 7dea59944a3..b700764d09a 100644 --- a/reactos/base/applications/charmap/lang/ko-KR.rc +++ b/reactos/base/applications/charmap/lang/ko-KR.rc @@ -13,7 +13,7 @@ BEGIN PUSHBUTTON "", IDC_CMHELP, 249, 5, 35, 13 CONTROL "", IDC_FONTMAP, "FontMapWnd", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, 20, 22, 266, 156 LTEXT " :", IDC_STATIC, 6, 188, 66, 9 - EDITTEXT IDC_TEXTBOX, 74, 186, 114, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "",IDC_TEXTBOX,RICHEDIT_CLASS,ES_AUTOHSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13 DEFPUSHBUTTON "", IDC_SELECT, 194, 186, 44, 13 PUSHBUTTON "", IDC_COPY, 242, 186, 44, 13, WS_DISABLED //AUTOCHECKBOX "Ȯ ", IDC_ADVVIEW, 10, 204, 64, 9, WS_CHILD | WS_VISIBLE | WS_TABSTOP diff --git a/reactos/base/applications/charmap/lang/lt-LT.rc b/reactos/base/applications/charmap/lang/lt-LT.rc index 9101081416f..9fec37413ed 100644 --- a/reactos/base/applications/charmap/lang/lt-LT.rc +++ b/reactos/base/applications/charmap/lang/lt-LT.rc @@ -19,7 +19,7 @@ BEGIN PUSHBUTTON "Pagalba", IDC_CMHELP, 249, 5, 35, 13 CONTROL "", IDC_FONTMAP, "FontMapWnd", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, 20, 22, 266, 156 LTEXT "Simboliai kopijavimui:", IDC_STATIC, 6, 188, 72, 9 - EDITTEXT IDC_TEXTBOX, 81, 186, 107, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "",IDC_TEXTBOX,RICHEDIT_CLASS,ES_AUTOHSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13 DEFPUSHBUTTON "Parinkti", IDC_SELECT, 194, 186, 44, 13 PUSHBUTTON "Kopijuoti", IDC_COPY, 242, 186, 44, 13, WS_DISABLED //AUTOCHECKBOX "Advanced view", IDC_ADVVIEW, 10, 204, 64, 9, WS_CHILD | WS_VISIBLE | WS_TABSTOP diff --git a/reactos/base/applications/charmap/lang/nl-NL.rc b/reactos/base/applications/charmap/lang/nl-NL.rc index a3a72ab3320..6389f34f2d0 100644 --- a/reactos/base/applications/charmap/lang/nl-NL.rc +++ b/reactos/base/applications/charmap/lang/nl-NL.rc @@ -10,7 +10,7 @@ BEGIN PUSHBUTTON "Help", IDC_CMHELP, 249, 5, 35, 13 CONTROL "", IDC_FONTMAP, "FontMapWnd", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, 20, 22, 266, 156 LTEXT "Te kopiren tekens:", IDC_STATIC, 6, 188, 66, 9 - EDITTEXT IDC_TEXTBOX, 74, 186, 114, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "",IDC_TEXTBOX,RICHEDIT_CLASS,ES_AUTOHSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13 DEFPUSHBUTTON "Selecteren", IDC_SELECT, 194, 186, 44, 13 PUSHBUTTON "Kopiren", IDC_COPY, 242, 186, 44, 13, WS_DISABLED //AUTOCHECKBOX "Geavanceerde weergave", IDC_ADVVIEW, 10, 204, 64, 9, WS_CHILD | WS_VISIBLE | WS_TABSTOP diff --git a/reactos/base/applications/charmap/lang/no-NO.rc b/reactos/base/applications/charmap/lang/no-NO.rc index a37305737ad..8fd7c204e0b 100644 --- a/reactos/base/applications/charmap/lang/no-NO.rc +++ b/reactos/base/applications/charmap/lang/no-NO.rc @@ -10,7 +10,7 @@ BEGIN PUSHBUTTON "Hjelp", IDC_CMHELP, 249, 5, 35, 13 CONTROL "", IDC_FONTMAP, "FontMapWnd", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, 20, 22, 266, 156 LTEXT "Kopier flgende tegn:", IDC_STATIC, 6, 188, 66, 9 - EDITTEXT IDC_TEXTBOX, 74, 186, 114, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "",IDC_TEXTBOX,RICHEDIT_CLASS,ES_AUTOHSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13 DEFPUSHBUTTON "Velg", IDC_SELECT, 194, 186, 44, 13 PUSHBUTTON "Kopier", IDC_COPY, 242, 186, 44, 13, WS_DISABLED //AUTOCHECKBOX "Avansert visning", IDC_ADVVIEW, 10, 204, 64, 9, WS_CHILD | WS_VISIBLE | WS_TABSTOP diff --git a/reactos/base/applications/charmap/lang/pl-PL.rc b/reactos/base/applications/charmap/lang/pl-PL.rc index 8b636ecadec..75dce3c7064 100644 --- a/reactos/base/applications/charmap/lang/pl-PL.rc +++ b/reactos/base/applications/charmap/lang/pl-PL.rc @@ -16,7 +16,7 @@ BEGIN PUSHBUTTON "Pomo&c", IDC_CMHELP, 249, 5, 35, 13 CONTROL "", IDC_FONTMAP, "FontMapWnd", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, 20, 22, 266, 156 LTEXT "&Znaki do skopiowania:", IDC_STATIC, 6, 188, 66, 9 - EDITTEXT IDC_TEXTBOX, 74, 186, 114, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "",IDC_TEXTBOX,RICHEDIT_CLASS,ES_AUTOHSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13 DEFPUSHBUTTON "Wy&bierz", IDC_SELECT, 194, 186, 44, 13 PUSHBUTTON "&Kopiuj", IDC_COPY, 242, 186, 44, 13, WS_DISABLED //AUTOCHECKBOX "Widok z&aawansowany", IDC_ADVVIEW, 10, 204, 64, 9, WS_CHILD | WS_VISIBLE | WS_TABSTOP diff --git a/reactos/base/applications/charmap/lang/pt-BR.rc b/reactos/base/applications/charmap/lang/pt-BR.rc index a9706cace16..6a86e180307 100644 --- a/reactos/base/applications/charmap/lang/pt-BR.rc +++ b/reactos/base/applications/charmap/lang/pt-BR.rc @@ -10,7 +10,7 @@ BEGIN PUSHBUTTON "Aj&uda", IDC_CMHELP, 249, 5, 35, 13 CONTROL "", IDC_FONTMAP, "FontMapWnd", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, 20, 22, 266, 156 LTEXT "Caracteres a serem copiados :", IDC_STATIC, 6, 183, 66, 17 - EDITTEXT IDC_TEXTBOX, 74, 186, 114, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "",IDC_TEXTBOX,RICHEDIT_CLASS,ES_AUTOHSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13 DEFPUSHBUTTON "Selecionar", IDC_SELECT, 194, 186, 46, 13 PUSHBUTTON "Copiar", IDC_COPY, 244, 186, 46, 13, WS_DISABLED //AUTOCHECKBOX "Modo de exibio avanado", IDC_ADVVIEW, 10, 204, 64, 9, WS_CHILD | WS_VISIBLE | WS_TABSTOP diff --git a/reactos/base/applications/charmap/lang/ru-RU.rc b/reactos/base/applications/charmap/lang/ru-RU.rc index 79941fe6796..1a6bc939526 100644 --- a/reactos/base/applications/charmap/lang/ru-RU.rc +++ b/reactos/base/applications/charmap/lang/ru-RU.rc @@ -12,7 +12,7 @@ BEGIN PUSHBUTTON "", IDC_CMHELP, 249, 5, 35, 13 CONTROL "", IDC_FONTMAP, "FontMapWnd", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, 20, 22, 266, 156 LTEXT " :", IDC_STATIC, 6, 188, 95, 9 - EDITTEXT IDC_TEXTBOX, 80, 186, 109, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "",IDC_TEXTBOX,RICHEDIT_CLASS,ES_AUTOHSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13 DEFPUSHBUTTON "", IDC_SELECT, 194, 186, 44, 13 PUSHBUTTON "", IDC_COPY, 242, 186, 44, 13, WS_DISABLED //AUTOCHECKBOX "Advanced view", IDC_ADVVIEW, 10, 204, 64, 9, WS_CHILD | WS_VISIBLE | WS_TABSTOP diff --git a/reactos/base/applications/charmap/lang/sk-SK.rc b/reactos/base/applications/charmap/lang/sk-SK.rc index 628801f1a92..7ab74b1715e 100644 --- a/reactos/base/applications/charmap/lang/sk-SK.rc +++ b/reactos/base/applications/charmap/lang/sk-SK.rc @@ -19,7 +19,7 @@ BEGIN PUSHBUTTON "&Pomocnk", IDC_CMHELP, 249, 5, 35, 13 CONTROL "", IDC_FONTMAP, "FontMapWnd", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, 20, 22, 266, 156 LTEXT "Koprova &znaky:", IDC_STATIC, 6, 188, 66, 9 - EDITTEXT IDC_TEXTBOX, 74, 186, 114, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "",IDC_TEXTBOX,RICHEDIT_CLASS,ES_AUTOHSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13 DEFPUSHBUTTON "&Vybra", IDC_SELECT, 194, 186, 44, 13 PUSHBUTTON "&Koprova", IDC_COPY, 242, 186, 44, 13, WS_DISABLED //AUTOCHECKBOX "R&ozren zobrazenie", IDC_ADVVIEW, 10, 204, 75, 9, WS_CHILD | WS_VISIBLE | WS_TABSTOP diff --git a/reactos/base/applications/charmap/lang/uk-UA.rc b/reactos/base/applications/charmap/lang/uk-UA.rc index 3c82d762f3f..cabd820e41d 100644 --- a/reactos/base/applications/charmap/lang/uk-UA.rc +++ b/reactos/base/applications/charmap/lang/uk-UA.rc @@ -18,7 +18,7 @@ BEGIN PUSHBUTTON "", IDC_CMHELP, 249, 5, 35, 13 CONTROL "", IDC_FONTMAP, "FontMapWnd", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, 20, 22, 266, 156 LTEXT " :", IDC_STATIC, 6, 188, 66, 9 - EDITTEXT IDC_TEXTBOX, 74, 186, 114, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "",IDC_TEXTBOX,RICHEDIT_CLASS,ES_AUTOHSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13 DEFPUSHBUTTON "", IDC_SELECT, 194, 186, 44, 13 PUSHBUTTON "", IDC_COPY, 242, 186, 44, 13, WS_DISABLED //AUTOCHECKBOX " ", IDC_ADVVIEW, 10, 204, 64, 9, WS_CHILD | WS_VISIBLE | WS_TABSTOP diff --git a/reactos/base/applications/charmap/lang/zh-CN.rc b/reactos/base/applications/charmap/lang/zh-CN.rc index 9b8187200ec..7fdfffd1a1f 100644 --- a/reactos/base/applications/charmap/lang/zh-CN.rc +++ b/reactos/base/applications/charmap/lang/zh-CN.rc @@ -12,7 +12,7 @@ BEGIN PUSHBUTTON "˵", IDC_CMHELP, 249, 5, 35, 13 CONTROL "", IDC_FONTMAP, "FontMapWnd", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, 20, 22, 266, 156 LTEXT "Ƶַ:", IDC_STATIC, 6, 188, 66, 9 - EDITTEXT IDC_TEXTBOX, 74, 186, 114, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "",IDC_TEXTBOX,RICHEDIT_CLASS,ES_AUTOHSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13 DEFPUSHBUTTON "ѡ", IDC_SELECT, 194, 186, 44, 13 PUSHBUTTON "", IDC_COPY, 242, 186, 44, 13, WS_DISABLED //AUTOCHECKBOX "Advanced view", IDC_ADVVIEW, 10, 204, 64, 9, WS_CHILD | WS_VISIBLE | WS_TABSTOP diff --git a/reactos/base/applications/charmap/lang/zh-TW.rc b/reactos/base/applications/charmap/lang/zh-TW.rc index 4cb9841adf5..ba36b67fb70 100644 --- a/reactos/base/applications/charmap/lang/zh-TW.rc +++ b/reactos/base/applications/charmap/lang/zh-TW.rc @@ -12,7 +12,7 @@ BEGIN PUSHBUTTON "", IDC_CMHELP, 249, 5, 35, 13 CONTROL "", IDC_FONTMAP, "FontMapWnd", WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL, 20, 22, 266, 156 LTEXT "ݽƻsršG", IDC_STATIC, 6, 188, 66, 9 - EDITTEXT IDC_TEXTBOX, 74, 186, 114, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CONTROL "",IDC_TEXTBOX,RICHEDIT_CLASS,ES_AUTOHSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13 DEFPUSHBUTTON "", IDC_SELECT, 194, 186, 44, 13 PUSHBUTTON "ƻs", IDC_COPY, 242, 186, 44, 13, WS_DISABLED //AUTOCHECKBOX "Advanced view", IDC_ADVVIEW, 10, 204, 64, 9, WS_CHILD | WS_VISIBLE | WS_TABSTOP diff --git a/reactos/base/applications/charmap/map.c b/reactos/base/applications/charmap/map.c index b9e37cf5a4d..8cbda5af59f 100644 --- a/reactos/base/applications/charmap/map.c +++ b/reactos/base/applications/charmap/map.c @@ -529,6 +529,9 @@ MapWndProc(HWND hwnd, return infoPtr->pActiveCell->ch; } + case FM_GETHFONT: + return (LRESULT)infoPtr->hFont; + case WM_PAINT: { OnPaint(infoPtr, diff --git a/reactos/base/applications/charmap/precomp.h b/reactos/base/applications/charmap/precomp.h index 4e0324c3de5..597d9f20967 100644 --- a/reactos/base/applications/charmap/precomp.h +++ b/reactos/base/applications/charmap/precomp.h @@ -5,6 +5,7 @@ #include #include #include +#include #include "resource.h" #define XCELLS 20 @@ -12,9 +13,10 @@ #define XLARGE 45 #define YLARGE 25 -#define FM_SETFONT (WM_USER + 1) -#define FM_GETCHAR (WM_USER + 2) -#define FM_SETCHAR (WM_USER + 3) +#define FM_SETFONT (WM_USER + 1) +#define FM_GETCHAR (WM_USER + 2) +#define FM_SETCHAR (WM_USER + 3) +#define FM_GETHFONT (WM_USER + 4) extern HINSTANCE hInstance; diff --git a/reactos/include/psdk/richedit.h b/reactos/include/psdk/richedit.h index 095cc8ab554..b0dcd04fa3d 100644 --- a/reactos/include/psdk/richedit.h +++ b/reactos/include/psdk/richedit.h @@ -32,19 +32,20 @@ extern "C" { #define cchTextLimitDefault 0x7fff -#if defined(__GNUC__) -# define MSFTEDIT_CLASS (const WCHAR []){ 'R','i','c','h','E','d','i','t','5','0','W',0 } -#elif defined(_MSC_VER) +#if defined(_MSC_VER) || defined(RC_INVOKED) # define MSFTEDIT_CLASS L"RichEdit50W" +#elif defined(__GNUC__) +# define MSFTEDIT_CLASS (const WCHAR []){ 'R','i','c','h','E','d','i','t','5','0','W',0 } #else static const WCHAR MSFTEDIT_CLASS[] = { 'R','i','c','h','E','d','i','t','5','0','W',0 }; #endif #define RICHEDIT_CLASS20A "RichEdit20A" -#if defined(__GNUC__) + +#if defined(_MSC_VER) || defined(RC_INVOKED) +# define RICHEDIT_CLASS20W L"RichEdit20W" +#elif defined(__GNUC__) # define RICHEDIT_CLASS20W (const WCHAR []){ 'R','i','c','h','E','d','i','t','2','0','W',0 } -#elif defined(_MSC_VER) -# define RICHEDIT_CLASS20W L"RichEdit20W" #else static const WCHAR RICHEDIT_CLASS20W[] = { 'R','i','c','h','E','d','i','t','2','0','W',0 }; #endif From 6da719aa66c53cbd71a066491cc09bc352c1768a Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 20 Feb 2011 11:27:07 +0000 Subject: [PATCH 081/287] [NTOSKRNL] Halfplement (win32 only) ProcessWow64Information case in NtQueryInformationProcess. Patch by Samuel Serapion. See issue #5916 for more details. svn path=/trunk/; revision=50831 --- reactos/ntoskrnl/ps/query.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/reactos/ntoskrnl/ps/query.c b/reactos/ntoskrnl/ps/query.c index 342c818945e..6b6c2681186 100644 --- a/reactos/ntoskrnl/ps/query.c +++ b/reactos/ntoskrnl/ps/query.c @@ -469,11 +469,26 @@ NtQueryInformationProcess(IN HANDLE ProcessHandle, NULL); if (!NT_SUCCESS(Status)) break; - DPRINT1("Not implemented: ProcessWow64Information\n"); + /* Protect write in SEH */ + _SEH2_TRY + { +#ifdef _WIN64 + DPRINT1("Not implemented: ProcessWow64Information\n"); + Status = STATUS_NOT_IMPLEMENTED; +#else + /* Wow64 not present */ + *(PULONG_PTR)ProcessInformation = 0; +#endif + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + /* Get the exception code */ + Status = _SEH2_GetExceptionCode(); + } + _SEH2_END; /* Dereference the process */ ObDereferenceObject(Process); - Status = STATUS_NOT_IMPLEMENTED; break; /* Virtual Memory Statistics */ From 6e366de8b6740348775e6f6156bfc2482ce56bed Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 20 Feb 2011 12:07:28 +0000 Subject: [PATCH 082/287] [KERNEL32] 64 bit compatibility fix for IsWow64Process. Patch by Thomas Faber svn path=/trunk/; revision=50832 --- reactos/dll/win32/kernel32/process/proc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/dll/win32/kernel32/process/proc.c b/reactos/dll/win32/kernel32/process/proc.c index ea9a23e6b56..41889ec8b4a 100644 --- a/reactos/dll/win32/kernel32/process/proc.c +++ b/reactos/dll/win32/kernel32/process/proc.c @@ -1011,7 +1011,7 @@ WINAPI IsWow64Process(HANDLE hProcess, PBOOL Wow64Process) { - ULONG pbi; + ULONG_PTR pbi; NTSTATUS Status; Status = NtQueryInformationProcess(hProcess, From 759dd145d1c7b559c0795fdbfd4d12c8ea4d0d87 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Sun, 20 Feb 2011 16:32:21 +0000 Subject: [PATCH 083/287] - Add french translation for runonce utility - Add svn:eol-style native property - Fix language id (SUBLANG_DEFAULT -> SUBLANG_NEUTRAL) See issue #5918 for more details. svn path=/trunk/; revision=50833 --- reactos/base/system/runonce/lang/fr-FR.rc | 11 +++++++++++ reactos/base/system/runonce/rsrc.rc | 1 + 2 files changed, 12 insertions(+) create mode 100644 reactos/base/system/runonce/lang/fr-FR.rc diff --git a/reactos/base/system/runonce/lang/fr-FR.rc b/reactos/base/system/runonce/lang/fr-FR.rc new file mode 100644 index 00000000000..2981411e6df --- /dev/null +++ b/reactos/base/system/runonce/lang/fr-FR.rc @@ -0,0 +1,11 @@ +LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL + +IDD_RUNONCE_DLG DIALOG DISCARDABLE 0, 0, 239, 170 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Installation de ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS est en train d'installer les lments suivants:", -1, 38, 8, 196, 18 + LISTBOX IDC_COMP_LIST, 36, 32, 197, 131, LBS_OWNERDRAWVARIABLE | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + ICON IDI_ICON, -1, 5, 6, 21, 20 +END diff --git a/reactos/base/system/runonce/rsrc.rc b/reactos/base/system/runonce/rsrc.rc index cc21daecfe9..58c669a3faf 100644 --- a/reactos/base/system/runonce/rsrc.rc +++ b/reactos/base/system/runonce/rsrc.rc @@ -1,5 +1,6 @@ #include "lang/de-DE.rc" #include "lang/en-US.rc" +#include "lang/fr-FR.rc" #include "lang/es-ES.rc" #include "lang/ja-JP.rc" #include "lang/ru-RU.rc" From f59aa17010c842e238b16907898f1c6a5906d782 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Sun, 20 Feb 2011 16:50:38 +0000 Subject: [PATCH 084/287] [USETUP] - Get rid of indirection See issue #5190 for more details. svn path=/trunk/; revision=50834 --- reactos/base/setup/usetup/inffile.c | 37 -------------------- reactos/base/setup/usetup/inffile.h | 28 --------------- reactos/base/setup/usetup/interface/usetup.c | 2 +- reactos/base/setup/usetup/registry.c | 2 +- reactos/base/setup/usetup/usetup.h | 30 ++++++++++++++++ reactos/lib/inflib/infros.h | 19 ---------- 6 files changed, 32 insertions(+), 86 deletions(-) diff --git a/reactos/base/setup/usetup/inffile.c b/reactos/base/setup/usetup/inffile.c index 7b0d2a9748a..71c01088152 100644 --- a/reactos/base/setup/usetup/inffile.c +++ b/reactos/base/setup/usetup/inffile.c @@ -39,13 +39,6 @@ #ifdef __REACTOS__ -VOID WINAPI -InfpCloseInfFile( - IN HINF InfHandle) -{ - InfCloseFile(InfHandle); -} - BOOL WINAPI InfpFindFirstLineW( IN HINF InfHandle, @@ -65,28 +58,6 @@ InfpFindFirstLineW( return TRUE; } -BOOL WINAPI -InfpGetMultiSzFieldW( - IN PINFCONTEXT Context, - IN ULONG FieldIndex, - IN OUT PWSTR ReturnBuffer, - IN ULONG ReturnBufferSize, - OUT PULONG RequiredSize) -{ - return InfGetMultiSzField(Context, FieldIndex, ReturnBuffer, ReturnBufferSize, RequiredSize); -} - -BOOL WINAPI -InfpGetStringFieldW( - IN PINFCONTEXT Context, - IN ULONG FieldIndex, - IN OUT PWSTR ReturnBuffer, - IN ULONG ReturnBufferSize, - OUT PULONG RequiredSize) -{ - return InfGetStringField(Context, FieldIndex, ReturnBuffer, ReturnBufferSize, RequiredSize); -} - HINF WINAPI InfpOpenInfFileW( IN PCWSTR FileName, @@ -238,12 +209,4 @@ INF_OpenBufferedFileA( #endif /* !__REACTOS__ */ } -VOID INF_SetHeap( - IN PVOID Heap) -{ -#ifdef __REACTOS__ - InfSetHeap(Heap); -#endif -} - /* EOF */ diff --git a/reactos/base/setup/usetup/inffile.h b/reactos/base/setup/usetup/inffile.h index 4a5b8d9360f..ba0e45a0fd1 100644 --- a/reactos/base/setup/usetup/inffile.h +++ b/reactos/base/setup/usetup/inffile.h @@ -34,14 +34,9 @@ #include -#define SetupCloseInfFile InfpCloseInfFile #define SetupFindFirstLineW InfpFindFirstLineW -#define SetupFindNextLine InfFindNextLine -#define SetupGetBinaryField InfGetBinaryField #define SetupGetFieldCount InfGetFieldCount #define SetupGetIntField InfGetIntField -#define SetupGetMultiSzFieldW InfpGetMultiSzFieldW -#define SetupGetStringFieldW InfpGetStringFieldW #define SetupOpenInfFileW InfpOpenInfFileW #define INF_STYLE_WIN4 0x00000002 @@ -55,10 +50,6 @@ typedef struct _INFCONTEXT PVOID Line; } INFCONTEXT; -VOID WINAPI -InfpCloseInfFile( - IN HINF InfHandle); - BOOL WINAPI InfpFindFirstLineW( IN HINF InfHandle, @@ -66,22 +57,6 @@ InfpFindFirstLineW( IN PCWSTR Key, IN OUT PINFCONTEXT Context); -BOOL WINAPI -InfpGetMultiSzFieldW( - IN PINFCONTEXT Context, - IN ULONG FieldIndex, - IN OUT PWSTR ReturnBuffer, - IN ULONG ReturnBufferSize, - OUT PULONG RequiredSize); - -BOOL WINAPI -InfpGetStringFieldW( - IN PINFCONTEXT Context, - IN ULONG FieldIndex, - IN OUT PWSTR ReturnBuffer, - IN ULONG ReturnBufferSize, - OUT PULONG RequiredSize); - HINF WINAPI InfpOpenInfFileW( IN PCWSTR FileName, @@ -113,7 +88,4 @@ INF_OpenBufferedFileA( IN LCID LocaleId, OUT PUINT ErrorLine); -VOID INF_SetHeap( - IN PVOID Heap); - /* EOF */ diff --git a/reactos/base/setup/usetup/interface/usetup.c b/reactos/base/setup/usetup/interface/usetup.c index 231238048aa..9fa6d32fdf3 100644 --- a/reactos/base/setup/usetup/interface/usetup.c +++ b/reactos/base/setup/usetup/interface/usetup.c @@ -3978,7 +3978,7 @@ NtProcessStartup(PPEB Peb) RtlNormalizeProcessParams(Peb->ProcessParameters); ProcessHeap = Peb->ProcessHeap; - INF_SetHeap(ProcessHeap); + InfSetHeap(ProcessHeap); RunUSetup(); } #endif /* __REACTOS__ */ diff --git a/reactos/base/setup/usetup/registry.c b/reactos/base/setup/usetup/registry.c index a8081292e67..c5951762d28 100644 --- a/reactos/base/setup/usetup/registry.c +++ b/reactos/base/setup/usetup/registry.c @@ -646,7 +646,7 @@ ImportRegistryFile(PWSTR Filename, DPRINT1("registry_callback() failed\n"); } - SetupCloseInfFile (hInf); + InfCloseFile (hInf); return TRUE; } diff --git a/reactos/base/setup/usetup/usetup.h b/reactos/base/setup/usetup/usetup.h index bbb4212891c..b6f887a20d5 100644 --- a/reactos/base/setup/usetup/usetup.h +++ b/reactos/base/setup/usetup/usetup.h @@ -78,6 +78,36 @@ extern UNICODE_STRING SourcePath; extern BOOLEAN IsUnattendedSetup; extern PWCHAR SelectedLanguageId; +#ifdef __REACTOS__ + +extern VOID InfSetHeap(PVOID Heap); +extern VOID InfCloseFile(HINF InfHandle); +extern BOOLEAN InfFindNextLine(PINFCONTEXT ContextIn, + PINFCONTEXT ContextOut); +extern BOOLEAN InfGetBinaryField(PINFCONTEXT Context, + ULONG FieldIndex, + PUCHAR ReturnBuffer, + ULONG ReturnBufferSize, + PULONG RequiredSize); +extern BOOLEAN InfGetMultiSzField(PINFCONTEXT Context, + ULONG FieldIndex, + PWSTR ReturnBuffer, + ULONG ReturnBufferSize, + PULONG RequiredSize); +extern BOOLEAN InfGetStringField(PINFCONTEXT Context, + ULONG FieldIndex, + PWSTR ReturnBuffer, + ULONG ReturnBufferSize, + PULONG RequiredSize); + +#define SetupCloseInfFile InfCloseFile +#define SetupFindNextLine InfFindNextLine +#define SetupGetBinaryField InfGetBinaryField +#define SetupGetMultiSzFieldW InfGetMultiSzField +#define SetupGetStringFieldW InfGetStringField + +#endif /* __REACTOS__ */ + typedef enum _PAGE_NUMBER { START_PAGE, diff --git a/reactos/lib/inflib/infros.h b/reactos/lib/inflib/infros.h index 80e8692ca56..6a723739080 100644 --- a/reactos/lib/inflib/infros.h +++ b/reactos/lib/inflib/infros.h @@ -14,7 +14,6 @@ extern "C" { #include -extern VOID InfSetHeap(PVOID Heap); extern NTSTATUS InfOpenBufferedFile(PHINF InfHandle, PVOID Buffer, ULONG BufferSize, @@ -25,13 +24,10 @@ extern NTSTATUS InfOpenFile(PHINF InfHandle, extern NTSTATUS InfWriteFile(HINF InfHandle, PUNICODE_STRING FileName, PUNICODE_STRING HeaderComment); -extern VOID InfCloseFile(HINF InfHandle); extern BOOLEAN InfFindFirstLine(HINF InfHandle, PCWSTR Section, PCWSTR Key, PINFCONTEXT *Context); -extern BOOLEAN InfFindNextLine(PINFCONTEXT ContextIn, - PINFCONTEXT ContextOut); extern BOOLEAN InfFindFirstMatchLine(PINFCONTEXT ContextIn, PCWSTR Key, PINFCONTEXT ContextOut); @@ -41,24 +37,9 @@ extern BOOLEAN InfFindNextMatchLine(PINFCONTEXT ContextIn, extern LONG InfGetLineCount(HINF InfHandle, PCWSTR Section); extern LONG InfGetFieldCount(PINFCONTEXT Context); -extern BOOLEAN InfGetBinaryField(PINFCONTEXT Context, - ULONG FieldIndex, - PUCHAR ReturnBuffer, - ULONG ReturnBufferSize, - PULONG RequiredSize); extern BOOLEAN InfGetIntField(PINFCONTEXT Context, ULONG FieldIndex, PINT IntegerValue); -extern BOOLEAN InfGetMultiSzField(PINFCONTEXT Context, - ULONG FieldIndex, - PWSTR ReturnBuffer, - ULONG ReturnBufferSize, - PULONG RequiredSize); -extern BOOLEAN InfGetStringField(PINFCONTEXT Context, - ULONG FieldIndex, - PWSTR ReturnBuffer, - ULONG ReturnBufferSize, - PULONG RequiredSize); extern BOOLEAN InfGetData(PINFCONTEXT Context, PWCHAR *Key, PWCHAR *Data); From 43a5ab1712b2fbfcb00cf4cf106a0bc746f315ca Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 20 Feb 2011 19:23:46 +0000 Subject: [PATCH 085/287] [WIN32CSR] Add a new API GetTempFile() that returns an identifier to be used for creating temporary files. This API should be in basesrv.dll svn path=/trunk/; revision=50835 --- reactos/include/reactos/subsys/csrss/csrss.h | 9 ++++- .../subsystems/win32/csrss/win32csr/dllmain.c | 1 + .../subsystems/win32/csrss/win32csr/file.c | 33 +++++++++++++++++++ .../subsystems/win32/csrss/win32csr/file.h | 17 ++++++++++ .../subsystems/win32/csrss/win32csr/w32csr.h | 1 + .../win32/csrss/win32csr/win32csr.rbuild | 1 + 6 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 reactos/subsystems/win32/csrss/win32csr/file.c create mode 100644 reactos/subsystems/win32/csrss/win32csr/file.h diff --git a/reactos/include/reactos/subsys/csrss/csrss.h b/reactos/include/reactos/subsys/csrss/csrss.h index 1156d39bd49..47c5addc8b8 100644 --- a/reactos/include/reactos/subsys/csrss/csrss.h +++ b/reactos/include/reactos/subsys/csrss/csrss.h @@ -511,7 +511,12 @@ typedef struct DWORD NumberOfHistoryBuffers; DWORD dwFlags; } CSRSS_GET_HISTORY_INFO, *PCSRSS_GET_HISTORY_INFO, - CSRSS_SET_HISTORY_INFO, *PCSRSS_SET_HISTORY_INFO; + CSRSS_SET_HISTORY_INFO, *PCSRSS_SET_HISTORY_INFO;; + +typedef struct +{ + UINT UniqueID; +} CSRSS_GET_TEMP_FILE, *PCSRSS_GET_TEMP_FILE; #define CSR_API_MESSAGE_HEADER_SIZE(Type) (FIELD_OFFSET(CSR_API_MESSAGE, Data) + sizeof(Type)) #define CSRSS_MAX_WRITE_CONSOLE (LPC_MAX_DATA_LENGTH - CSR_API_MESSAGE_HEADER_SIZE(CSRSS_WRITE_CONSOLE)) @@ -592,6 +597,7 @@ typedef struct #define SET_HISTORY_NUMBER_COMMANDS (0x45) #define GET_HISTORY_INFO (0x46) #define SET_HISTORY_INFO (0x47) +#define GET_TEMP_FILE (0x48) /* Keep in sync with definition below. */ #define CSRSS_HEADER_SIZE (sizeof(PORT_MESSAGE) + sizeof(ULONG) + sizeof(NTSTATUS)) @@ -673,6 +679,7 @@ typedef struct _CSR_API_MESSAGE CSRSS_SET_HISTORY_NUMBER_COMMANDS SetHistoryNumberCommands; CSRSS_GET_HISTORY_INFO GetHistoryInfo; CSRSS_SET_HISTORY_INFO SetHistoryInfo; + CSRSS_GET_TEMP_FILE GetTempFile; } Data; } CSR_API_MESSAGE, *PCSR_API_MESSAGE; diff --git a/reactos/subsystems/win32/csrss/win32csr/dllmain.c b/reactos/subsystems/win32/csrss/win32csr/dllmain.c index f38558838e8..06112ab1f42 100644 --- a/reactos/subsystems/win32/csrss/win32csr/dllmain.c +++ b/reactos/subsystems/win32/csrss/win32csr/dllmain.c @@ -87,6 +87,7 @@ static CSRSS_API_DEFINITION Win32CsrApiDefinitions[] = CSRSS_DEFINE_API(SET_HISTORY_NUMBER_COMMANDS, CsrSetHistoryNumberCommands), CSRSS_DEFINE_API(GET_HISTORY_INFO, CsrGetHistoryInfo), CSRSS_DEFINE_API(SET_HISTORY_INFO, CsrSetHistoryInfo), + CSRSS_DEFINE_API(GET_TEMP_FILE, CsrGetTempFile), { 0, 0, NULL } }; diff --git a/reactos/subsystems/win32/csrss/win32csr/file.c b/reactos/subsystems/win32/csrss/win32csr/file.c new file mode 100644 index 00000000000..fd36621f9c3 --- /dev/null +++ b/reactos/subsystems/win32/csrss/win32csr/file.c @@ -0,0 +1,33 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS system libraries + * FILE: subsys/csrss/win32csr/file.c + * PURPOSE: File handling + * PROGRAMMERS: Pierre Schweitzer (pierre.schweitzer@reactos.org) + * NOTE: Belongs to basesrv.dll + */ + +/* INCLUDES ******************************************************************/ + +#include + +#define NDEBUG +#include + +/* GLOBALS *******************************************************************/ + +UINT CsrGetTempFileUnique; + +/* FUNCTIONS *****************************************************************/ + +CSR_API(CsrGetTempFile) +{ + DPRINT1("CsrGetTempFile entered\n"); + + /* Return 16-bits ID */ + Request->Data.GetTempFile.UniqueID = (++CsrGetTempFileUnique & 0xFFFF); + + DPRINT1("Returning: %u\n", Request->Data.GetTempFile.UniqueID); + + return STATUS_SUCCESS; +} diff --git a/reactos/subsystems/win32/csrss/win32csr/file.h b/reactos/subsystems/win32/csrss/win32csr/file.h new file mode 100644 index 00000000000..c163ee53254 --- /dev/null +++ b/reactos/subsystems/win32/csrss/win32csr/file.h @@ -0,0 +1,17 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS system libraries + * FILE: subsystem/win32/csrss/win32csr/file.h + * PURPOSE: File handling + * PROGRAMMERS: Pierre Schweitzer (pierre.schweitzer@reactos.org) + * NOTE: Belongs to basesrv.dll + */ + +#pragma once + +#include "api.h" + +/* Api functions */ +CSR_API(CsrGetTempFile); + +/* EOF */ diff --git a/reactos/subsystems/win32/csrss/win32csr/w32csr.h b/reactos/subsystems/win32/csrss/win32csr/w32csr.h index 5ecc378a7c7..8516cccd034 100644 --- a/reactos/subsystems/win32/csrss/win32csr/w32csr.h +++ b/reactos/subsystems/win32/csrss/win32csr/w32csr.h @@ -18,6 +18,7 @@ #include #include #include +#include "file.h" #include "guiconsole.h" #include "tuiconsole.h" #include diff --git a/reactos/subsystems/win32/csrss/win32csr/win32csr.rbuild b/reactos/subsystems/win32/csrss/win32csr/win32csr.rbuild index 0764763980c..d81443be413 100644 --- a/reactos/subsystems/win32/csrss/win32csr/win32csr.rbuild +++ b/reactos/subsystems/win32/csrss/win32csr/win32csr.rbuild @@ -24,6 +24,7 @@ desktopbg.c dllmain.c exitros.c + file.c guiconsole.c handle.c harderror.c From 35587944a07ea45358fc5c5b208305f057963f38 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 20 Feb 2011 19:28:34 +0000 Subject: [PATCH 086/287] [RTL] - Fixed RtlMultiByteToUnicodeN & RtlAnsiCharToUnicodeChar prototype - Added missing paged code marker to RtlAnsiCharToUnicodeChar - Added a small hack to RtlAnsiCharToUnicodeChar. Indeed, when it's called during second stage, it's failing due to missing NLS table. Probably usetup that doesn't define a registry entry. And then, FreeLdr just passes null pointer. svn path=/trunk/; revision=50836 --- reactos/lib/rtl/nls.c | 6 +++--- reactos/lib/rtl/unicode.c | 14 ++++++++++++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/reactos/lib/rtl/nls.c b/reactos/lib/rtl/nls.c index 131587ddbc3..697835dd697 100644 --- a/reactos/lib/rtl/nls.c +++ b/reactos/lib/rtl/nls.c @@ -226,9 +226,9 @@ RtlInitNlsTables(IN PUSHORT AnsiTableBase, */ NTSTATUS NTAPI RtlMultiByteToUnicodeN( - IN PWCHAR UnicodeString, + OUT PWCHAR UnicodeString, IN ULONG UnicodeSize, - IN PULONG ResultSize, + OUT PULONG ResultSize, IN PCSTR MbString, IN ULONG MbSize) { @@ -286,7 +286,7 @@ RtlMultiByteToUnicodeN( *ResultSize = i * sizeof(WCHAR); } - return(STATUS_SUCCESS); + return STATUS_SUCCESS; } diff --git a/reactos/lib/rtl/unicode.c b/reactos/lib/rtl/unicode.c index e0b8a4f9741..619bba633a8 100644 --- a/reactos/lib/rtl/unicode.c +++ b/reactos/lib/rtl/unicode.c @@ -33,13 +33,23 @@ extern USHORT NlsUnicodeDefaultChar; */ WCHAR NTAPI -RtlAnsiCharToUnicodeChar(IN PUCHAR *AnsiChar) +RtlAnsiCharToUnicodeChar(IN OUT PUCHAR *AnsiChar) { ULONG Size; NTSTATUS Status; WCHAR UnicodeChar = L' '; - Size = (NlsLeadByteInfo[**AnsiChar] == 0) ? 1 : 2; + PAGED_CODE_RTL(); + + if (NlsLeadByteInfo) + { + Size = (NlsLeadByteInfo[**AnsiChar] == 0) ? 1 : 2; + } + else + { + DPRINT1("HACK::Shouldn't have happened! Consider fixing Usetup and registry entries it creates on install\n"); + Size = 1; + } Status = RtlMultiByteToUnicodeN(&UnicodeChar, sizeof(WCHAR), From cbfa1e3dbb35c055d658522b96f73f13722cd652 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 20 Feb 2011 19:33:45 +0000 Subject: [PATCH 087/287] [KERNEL32] Properly implement GetLastError and export it. svn path=/trunk/; revision=50837 --- reactos/dll/win32/kernel32/include/kernel32.h | 1 - reactos/dll/win32/kernel32/kernel32.def | 2 +- reactos/dll/win32/kernel32/kernel32.pspec | 2 +- reactos/dll/win32/kernel32/misc/error.c | 16 ++++++++++++++++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/reactos/dll/win32/kernel32/include/kernel32.h b/reactos/dll/win32/kernel32/include/kernel32.h index 8229e1428bd..363bf706734 100755 --- a/reactos/dll/win32/kernel32/include/kernel32.h +++ b/reactos/dll/win32/kernel32/include/kernel32.h @@ -68,7 +68,6 @@ #define STARTF_SHELLPRIVATE 0x400 #define SetLastErrorByStatus(x) RtlSetLastWin32ErrorAndNtStatusFromNtStatus((x)) -#define GetLastError() NtCurrentTeb()->LastErrorValue typedef struct _CODEPAGE_ENTRY { diff --git a/reactos/dll/win32/kernel32/kernel32.def b/reactos/dll/win32/kernel32/kernel32.def index 1dd6b5e8ff4..d06c4178bde 100644 --- a/reactos/dll/win32/kernel32/kernel32.def +++ b/reactos/dll/win32/kernel32/kernel32.def @@ -539,7 +539,7 @@ @ stub GetSCallbackTemplate ; missing in XP SP3 and Win 7 @ stdcall GetLargePageMinimum() @ stdcall GetLargestConsoleWindowSize(long) -@ stdcall GetLastError() ntdll.RtlGetLastWin32Error +@ stdcall GetLastError() @ stdcall GetLinguistLangSize(ptr) ; missing in Win 7 @ stdcall GetLocalTime(ptr) @ stdcall GetLocaleInfoA(long long ptr long) diff --git a/reactos/dll/win32/kernel32/kernel32.pspec b/reactos/dll/win32/kernel32/kernel32.pspec index dad314bc74d..1a6f18b6e9a 100644 --- a/reactos/dll/win32/kernel32/kernel32.pspec +++ b/reactos/dll/win32/kernel32/kernel32.pspec @@ -539,7 +539,7 @@ @ stub GetSCallbackTemplate ; missing in XP SP3 and Win 7 @ stdcall GetLargePageMinimum() @ stdcall GetLargestConsoleWindowSize(long) -@ stdcall GetLastError() ntdll.RtlGetLastWin32Error +@ stdcall GetLastError() @ stdcall GetLinguistLangSize(ptr) ; missing in Win 7 @ stdcall GetLocalTime(ptr) @ stdcall GetLocaleInfoA(long long ptr long) diff --git a/reactos/dll/win32/kernel32/misc/error.c b/reactos/dll/win32/kernel32/misc/error.c index b742d82384e..1430a3a9a7b 100644 --- a/reactos/dll/win32/kernel32/misc/error.c +++ b/reactos/dll/win32/kernel32/misc/error.c @@ -16,6 +16,9 @@ DWORD g_dwLastErrorToBreakOn; /* FUNCTIONS ******************************************************************/ +/* + * @implemented + */ VOID WINAPI SetLastError( @@ -34,6 +37,9 @@ SetLastError( NtCurrentTeb()->LastErrorValue = dwErrCode; } +/* + * @implemented + */ VOID WINAPI BaseSetLastNTError( @@ -42,4 +48,14 @@ BaseSetLastNTError( SetLastError(RtlNtStatusToDosError(Status)); } +/* + * @implemented + */ +DWORD +WINAPI +GetLastError() +{ + return NtCurrentTeb()->LastErrorValue; +} + /* EOF */ From 6b74e9a9921c78589201405e4a8af2497dd7fc7b Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 20 Feb 2011 19:40:15 +0000 Subject: [PATCH 088/287] [KERNEL32] - Get rid of old function Basep8BitStringToLiveUnicodeString() that doesn't exist under Windows, and that was even unused - Rename Basep8BitStringToHeapUnicodeString() to Basep8BitStringToDynamicUnicodeString() and fix its implementation (and all the calls) - Define BasepUnicodeStringTo8BitString() svn path=/trunk/; revision=50838 --- reactos/dll/win32/kernel32/file/npipe.c | 2 +- reactos/dll/win32/kernel32/include/kernel32.h | 13 ++--- reactos/dll/win32/kernel32/misc/utils.c | 57 +++++++------------ reactos/dll/win32/kernel32/process/procsup.c | 12 ++-- 4 files changed, 32 insertions(+), 52 deletions(-) diff --git a/reactos/dll/win32/kernel32/file/npipe.c b/reactos/dll/win32/kernel32/file/npipe.c index 629b69b678f..c0147730bc8 100644 --- a/reactos/dll/win32/kernel32/file/npipe.c +++ b/reactos/dll/win32/kernel32/file/npipe.c @@ -251,7 +251,7 @@ WaitNamedPipeA(LPCSTR lpNamedPipeName, UNICODE_STRING NameU; /* Convert the name to Unicode */ - Basep8BitStringToHeapUnicodeString(&NameU, lpNamedPipeName); + Basep8BitStringToDynamicUnicodeString(&NameU, lpNamedPipeName); /* Call the Unicode API */ r = WaitNamedPipeW(NameU.Buffer, nTimeOut); diff --git a/reactos/dll/win32/kernel32/include/kernel32.h b/reactos/dll/win32/kernel32/include/kernel32.h index 363bf706734..10e7006f8e8 100755 --- a/reactos/dll/win32/kernel32/include/kernel32.h +++ b/reactos/dll/win32/kernel32/include/kernel32.h @@ -192,15 +192,12 @@ PUNICODE_STRING WINAPI Basep8BitStringToStaticUnicodeString(IN LPCSTR AnsiString); -NTSTATUS +BOOLEAN WINAPI -Basep8BitStringToLiveUnicodeString(OUT PUNICODE_STRING UnicodeString, - IN LPCSTR String); - -NTSTATUS -WINAPI -Basep8BitStringToHeapUnicodeString(OUT PUNICODE_STRING UnicodeString, - IN LPCSTR String); +Basep8BitStringToDynamicUnicodeString(OUT PUNICODE_STRING UnicodeString, + IN LPCSTR String); + +#define BasepUnicodeStringTo8BitString RtlUnicodeStringToAnsiString typedef NTSTATUS (NTAPI *PRTL_CONVERT_STRING)(IN PUNICODE_STRING UnicodeString, IN PANSI_STRING AnsiString, diff --git a/reactos/dll/win32/kernel32/misc/utils.c b/reactos/dll/win32/kernel32/misc/utils.c index 9fdde3548b5..a011ff5e6e3 100644 --- a/reactos/dll/win32/kernel32/misc/utils.c +++ b/reactos/dll/win32/kernel32/misc/utils.c @@ -4,6 +4,7 @@ * FILE: lib/kernel32/misc/utils.c * PURPOSE: Utility and Support Functions * PROGRAMMER: Alex Ionescu (alex@relsoft.net) + * Pierre Schweitzer (pierre.schweitzer@reactos.org) */ /* INCLUDES ****************************************************************/ @@ -24,33 +25,6 @@ PRTL_CONVERT_STRING Basep8BitStringToUnicodeString; /* FUNCTIONS ****************************************************************/ -/* - * Converts an ANSI or OEM String to the specified Unicode String - */ -NTSTATUS -WINAPI -Basep8BitStringToLiveUnicodeString(OUT PUNICODE_STRING UnicodeString, - IN LPCSTR String) -{ - ANSI_STRING AnsiString; - NTSTATUS Status; - - DPRINT("Basep8BitStringToLiveUnicodeString\n"); - - /* Create the ANSI String */ - RtlInitAnsiString(&AnsiString, String); - - /* Convert from OEM or ANSI */ - Status = Basep8BitStringToUnicodeString(UnicodeString, &AnsiString, FALSE); - - /* Return Status */ - if (!NT_SUCCESS(Status)) - { - SetLastErrorByStatus(Status); - } - return Status; -} - /* * Converts an ANSI or OEM String to the TEB StaticUnicodeString @@ -81,29 +55,38 @@ Basep8BitStringToStaticUnicodeString(IN LPCSTR String) return StaticString; } -NTSTATUS +/* + * Allocates space from the Heap and converts an Unicode String into it + */ +BOOLEAN WINAPI -Basep8BitStringToHeapUnicodeString(OUT PUNICODE_STRING UnicodeString, - IN LPCSTR String) +Basep8BitStringToDynamicUnicodeString(OUT PUNICODE_STRING UnicodeString, + IN LPCSTR String) { ANSI_STRING AnsiString; NTSTATUS Status; - DPRINT("Basep8BitStringToCachedUnicodeString\n"); - + DPRINT("Basep8BitStringToDynamicUnicodeString\n"); + /* Initialize an ANSI String */ - RtlInitAnsiString(&AnsiString, String); - + if (!NT_SUCCESS(RtlInitAnsiStringEx(&AnsiString, String))) + { + SetLastError(ERROR_BUFFER_OVERFLOW); + return FALSE; + } + /* Convert it */ - Status = Basep8BitStringToUnicodeString(UnicodeString, &AnsiString, TRUE); - + Status = Basep8BitStringToUnicodeString(UnicodeString, &AnsiString, TRUE); + /* Handle failure */ if (!NT_SUCCESS(Status)) { SetLastErrorByStatus(Status); + return FALSE; } + /* Return Status */ - return Status; + return TRUE; } /* diff --git a/reactos/dll/win32/kernel32/process/procsup.c b/reactos/dll/win32/kernel32/process/procsup.c index fc4648858c5..33b053d9324 100644 --- a/reactos/dll/win32/kernel32/process/procsup.c +++ b/reactos/dll/win32/kernel32/process/procsup.c @@ -1563,8 +1563,8 @@ CreateProcessInternalA(HANDLE hToken, else { /* Use a dynamic version */ - Basep8BitStringToHeapUnicodeString(&LiveCommandLine, - lpCommandLine); + Basep8BitStringToDynamicUnicodeString(&LiveCommandLine, + lpCommandLine); } } else @@ -1576,13 +1576,13 @@ CreateProcessInternalA(HANDLE hToken, /* Convert the Name and Directory */ if (lpApplicationName) { - Basep8BitStringToHeapUnicodeString(&ApplicationName, - lpApplicationName); + Basep8BitStringToDynamicUnicodeString(&ApplicationName, + lpApplicationName); } if (lpCurrentDirectory) { - Basep8BitStringToHeapUnicodeString(&CurrentDirectory, - lpCurrentDirectory); + Basep8BitStringToDynamicUnicodeString(&CurrentDirectory, + lpCurrentDirectory); } /* Now convert Startup Strings */ From bd3cef98c122acb373efe0e838ad23a3093e034f Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 20 Feb 2011 19:49:02 +0000 Subject: [PATCH 089/287] [KERNEL32] - Get rid of Wine's implementation of GetTempFileNameA/W and reimplement them in the Windows 2003 way. This fixes bug #5481 svn path=/trunk/; revision=50839 --- reactos/dll/win32/kernel32/file/file.c | 260 +++++++++++++----- reactos/dll/win32/kernel32/include/kernel32.h | 3 + 2 files changed, 194 insertions(+), 69 deletions(-) diff --git a/reactos/dll/win32/kernel32/file/file.c b/reactos/dll/win32/kernel32/file/file.c index b79bc2b9876..e04f873842d 100644 --- a/reactos/dll/win32/kernel32/file/file.c +++ b/reactos/dll/win32/kernel32/file/file.c @@ -5,7 +5,7 @@ * FILE: lib/kernel32/file/file.c * PURPOSE: Directory functions * PROGRAMMER: Ariadne ( ariadne@xs4all.nl) - * GetTempFileName is modified from WINE [ Alexandre Juiliard ] + * Pierre Schweitzer (pierre.schweitzer@reactos.org) * UPDATE HISTORY: * Created 01/11/98 */ @@ -1212,83 +1212,205 @@ SetFileAttributesW(LPCWSTR lpFileName, /*********************************************************************** * GetTempFileNameA (KERNEL32.@) */ -UINT WINAPI GetTempFileNameA( LPCSTR path, LPCSTR prefix, UINT unique, LPSTR buffer) +UINT WINAPI +GetTempFileNameA(IN LPCSTR lpPathName, + IN LPCSTR lpPrefixString, + IN UINT uUnique, + OUT LPSTR lpTempFileName) { - WCHAR BufferW[MAX_PATH]; - PWCHAR PathW; - WCHAR PrefixW[3+1]; - UINT ret; + UINT ID; + NTSTATUS Status; + LPWSTR lpTempFileNameW; + PUNICODE_STRING lpPathNameW; + ANSI_STRING TempFileNameStringA; + UNICODE_STRING lpPrefixStringW, TempFileNameStringW; - if (!(PathW = FilenameA2W(path, FALSE))) - return 0; - - if (prefix) - FilenameA2W_N(PrefixW, 3+1, prefix, -1); - - ret = GetTempFileNameW(PathW, prefix ? PrefixW : NULL, unique, BufferW); - - if (ret) - FilenameW2A_N(buffer, MAX_PATH, BufferW, -1); - - return ret; -} - -/*********************************************************************** - * GetTempFileNameW (KERNEL32.@) - */ -UINT WINAPI GetTempFileNameW( LPCWSTR path, LPCWSTR prefix, UINT unique, LPWSTR buffer ) -{ - static const WCHAR formatW[] = L"%x.tmp"; - - int i; - LPWSTR p; - - if ( !path || !buffer ) + /* Convert strings */ + lpPathNameW = Basep8BitStringToStaticUnicodeString(lpPathName); + if (!lpPathNameW) { - SetLastError( ERROR_INVALID_PARAMETER ); return 0; } - wcscpy( buffer, path ); - p = buffer + wcslen(buffer); - - /* add a \, if there isn't one */ - if ((p == buffer) || (p[-1] != '\\')) *p++ = '\\'; - - if ( prefix ) - for (i = 3; (i > 0) && (*prefix); i--) *p++ = *prefix++; - - unique &= 0xffff; - - if (unique) swprintf( p, formatW, unique ); - else + if (!Basep8BitStringToDynamicUnicodeString(&lpPrefixStringW, lpPrefixString)) { - /* get a "random" unique number and try to create the file */ - HANDLE handle; - UINT num = GetTickCount() & 0xffff; - - if (!num) num = 1; - unique = num; - do - { - swprintf( p, formatW, unique ); - handle = CreateFileW( buffer, GENERIC_WRITE, 0, NULL, - CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0 ); - if (handle != INVALID_HANDLE_VALUE) - { /* We created it */ - TRACE("created %S\n", buffer); - CloseHandle( handle ); - break; - } - if (GetLastError() != ERROR_FILE_EXISTS && - GetLastError() != ERROR_SHARING_VIOLATION) - break; /* No need to go on */ - if (!(++unique & 0xffff)) unique = 1; - } while (unique != num); + return 0; } - TRACE("returning %S\n", buffer); - return unique; + lpTempFileNameW = RtlAllocateHeap(RtlGetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR)); + if (!lpTempFileNameW) + { + SetLastError(ERROR_NOT_ENOUGH_MEMORY); + RtlFreeUnicodeString(&lpPrefixStringW); + return 0; + } + + /* Call Unicode */ + ID = GetTempFileNameW(lpPathNameW->Buffer, lpPrefixStringW.Buffer, uUnique, lpTempFileNameW); + if (ID) + { + RtlInitUnicodeString(&TempFileNameStringW, lpTempFileNameW); + TempFileNameStringA.Buffer = lpTempFileName; + TempFileNameStringA.MaximumLength = MAX_PATH; + + Status = BasepUnicodeStringTo8BitString(&TempFileNameStringA, &TempFileNameStringW, FALSE); + if (!NT_SUCCESS(Status)) + { + BaseSetLastNTError(Status); + ID = 0; + } + } + + /* Cleanup */ + RtlFreeUnicodeString(&lpPrefixStringW); + RtlFreeHeap(RtlGetProcessHeap(), 0, lpTempFileNameW); + return ID; + } + + /*********************************************************************** + * GetTempFileNameW (KERNEL32.@) + */ +UINT WINAPI +GetTempFileNameW(IN LPCWSTR lpPathName, + IN LPCWSTR lpPrefixString, + IN UINT uUnique, + OUT LPWSTR lpTempFileName) +{ + CHAR * Let; + HANDLE TempFile; + UINT ID, Num = 0; + CHAR IDString[5]; + WCHAR * TempFileName; + CSR_API_MESSAGE ApiMessage; + DWORD FileAttributes, LastError; + UNICODE_STRING PathNameString, PrefixString; + static const WCHAR Ext[] = { L'.', 't', 'm', 'p', UNICODE_NULL }; + + RtlInitUnicodeString(&PathNameString, lpPathName); + if (PathNameString.Length == 0 || PathNameString.Buffer[PathNameString.Length - sizeof(WCHAR)] != L'\\') + { + PathNameString.Length += sizeof(WCHAR); + } + + /* lpTempFileName must be able to contain: PathName, Prefix (3), number(4), .tmp(4) & \0(1) + * See: http://msdn.microsoft.com/en-us/library/aa364991%28v=vs.85%29.aspx + */ + if (PathNameString.Length > (MAX_PATH - 3 - 4 - 4 - 1) * sizeof(WCHAR)) + { + SetLastError(ERROR_BUFFER_OVERFLOW); + return 0; + } + + /* If PathName and TempFileName aren't the same buffer, move PathName to TempFileName */ + if (lpPathName != lpTempFileName) + { + memmove(lpTempFileName, PathNameString.Buffer, PathNameString.Length); + } + + /* PathName MUST BE a path. Check it */ + lpTempFileName[PathNameString.Length - sizeof(WCHAR)] = UNICODE_NULL; + FileAttributes = GetFileAttributesW(lpTempFileName); + if (FileAttributes == INVALID_FILE_ATTRIBUTES) + { + /* Append a '\' if necessary */ + lpTempFileName[PathNameString.Length - sizeof(WCHAR)] = L'\\'; + lpTempFileName[PathNameString.Length] = UNICODE_NULL; + FileAttributes = GetFileAttributesW(lpTempFileName); + if (FileAttributes == INVALID_FILE_ATTRIBUTES) + { + SetLastError(ERROR_DIRECTORY); + return 0; + } + } + if (!(FileAttributes & FILE_ATTRIBUTE_DIRECTORY)) + { + SetLastError(ERROR_DIRECTORY); + return 0; + } + + /* Make sure not to mix path & prefix */ + lpTempFileName[PathNameString.Length - sizeof(WCHAR)] = L'\\'; + RtlInitUnicodeString(&PrefixString, lpPrefixString); + if (PrefixString.Length > 3 * sizeof(WCHAR)) + { + PrefixString.Length = 3 * sizeof(WCHAR); + } + + /* Append prefix to path */ + TempFileName = lpTempFileName + PathNameString.Length / sizeof(WCHAR) - 1; + memmove(TempFileName, PrefixString.Buffer, PrefixString.Length); + TempFileName += PrefixString.Length / sizeof(WCHAR); + + /* Then, generate filename */ + do + { + /* If user didn't gave any ID, ask Csrss to give one */ + if (!uUnique) + { + CsrClientCallServer(&ApiMessage, NULL, MAKE_CSR_API(GET_TEMP_FILE, CSR_NATIVE), sizeof(CSR_API_MESSAGE)); + if (ApiMessage.Data.GetTempFile.UniqueID == 0) + { + Num++; + continue; + } + + ID = ApiMessage.Data.GetTempFile.UniqueID; + } + else + { + ID = uUnique; + } + + /* Convert that ID to wchar */ + RtlIntegerToChar(ID, 0x10, sizeof(IDString), IDString); + Let = IDString; + do + { + *(TempFileName++) = RtlAnsiCharToUnicodeChar(&Let); + } while (*Let != 0); + + /* Append extension & UNICODE_NULL */ + memmove(TempFileName, Ext, sizeof(Ext) + sizeof(WCHAR)); + + /* If user provided its ID, just return */ + if (uUnique) + { + return uUnique; + } + + /* Then, try to create file */ + if (!RtlIsDosDeviceName_U(lpTempFileName)) + { + TempFile = CreateFileW(lpTempFileName, + GENERIC_READ, + 0, + NULL, + CREATE_NEW, + FILE_ATTRIBUTE_NORMAL, + 0); + if (TempFile != INVALID_HANDLE_VALUE) + { + NtClose(TempFile); + DPRINT("Temp file: %S\n", lpTempFileName); + return ID; + } + + LastError = GetLastError(); + /* There is no need to recover from those errors, they would hit next step */ + if (LastError == ERROR_INVALID_PARAMETER || LastError == ERROR_CANNOT_MAKE || + LastError == ERROR_WRITE_PROTECT || LastError == ERROR_NETWORK_ACCESS_DENIED || + LastError == ERROR_DISK_FULL || LastError == ERROR_INVALID_NAME || + LastError == ERROR_BAD_PATHNAME || LastError == ERROR_NO_INHERITANCE || + LastError == ERROR_DISK_CORRUPT || + (LastError == ERROR_ACCESS_DENIED && NtCurrentTeb()->LastStatusValue != STATUS_FILE_IS_A_DIRECTORY)) + { + break; + } + } + Num++; + } while (Num & 0xFFFF); + + return 0; } diff --git a/reactos/dll/win32/kernel32/include/kernel32.h b/reactos/dll/win32/kernel32/include/kernel32.h index 10e7006f8e8..747c8b1b664 100755 --- a/reactos/dll/win32/kernel32/include/kernel32.h +++ b/reactos/dll/win32/kernel32/include/kernel32.h @@ -224,3 +224,6 @@ InitCommandLines(VOID); VOID WINAPI BaseSetLastNTError(IN NTSTATUS Status); + +/* FIXME */ +WCHAR WINAPI RtlAnsiCharToUnicodeChar(LPSTR *); From 5b4f2417fb29b4de621ec64584bedd039e3e892a Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 20 Feb 2011 20:52:52 +0000 Subject: [PATCH 090/287] [SETUPAPI] Implement CM_Query_And_Remove_SubTree[_Ex]A/W and CM_Request_Device_Eject[_Ex]A/W. svn path=/trunk/; revision=50840 --- reactos/dll/win32/setupapi/cfgmgr.c | 266 +++++++++++++++++++++++ reactos/dll/win32/setupapi/setupapi.spec | 16 +- 2 files changed, 274 insertions(+), 8 deletions(-) diff --git a/reactos/dll/win32/setupapi/cfgmgr.c b/reactos/dll/win32/setupapi/cfgmgr.c index f7b33e7acdd..c44aed54a08 100644 --- a/reactos/dll/win32/setupapi/cfgmgr.c +++ b/reactos/dll/win32/setupapi/cfgmgr.c @@ -3745,6 +3745,140 @@ CONFIGRET WINAPI CM_Open_DevNode_Key_Ex( } +/*********************************************************************** + * CM_Query_And_Remove_SubTreeA [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Query_And_Remove_SubTreeA( + DEVINST dnAncestor, PPNP_VETO_TYPE pVetoType, LPSTR pszVetoName, + ULONG ulNameLength, ULONG ulFlags) +{ + TRACE("%lx %p %s %lu %lx\n", dnAncestor, pVetoType, pszVetoName, + ulNameLength, ulFlags); + + return CM_Query_And_Remove_SubTree_ExA(dnAncestor, pVetoType, pszVetoName, + ulNameLength, ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Query_And_Remove_SubTreeW [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Query_And_Remove_SubTreeW( + DEVINST dnAncestor, PPNP_VETO_TYPE pVetoType, LPWSTR pszVetoName, + ULONG ulNameLength, ULONG ulFlags) +{ + TRACE("%lx %p %s %lu %lx\n", dnAncestor, pVetoType, + debugstr_w(pszVetoName), ulNameLength, ulFlags); + + return CM_Query_And_Remove_SubTree_ExW(dnAncestor, pVetoType, pszVetoName, + ulNameLength, ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Query_And_Remove_SubTree_ExA [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Query_And_Remove_SubTree_ExA( + DEVINST dnAncestor, PPNP_VETO_TYPE pVetoType, LPSTR pszVetoName, + ULONG ulNameLength, ULONG ulFlags, HMACHINE hMachine) +{ + LPWSTR lpLocalVetoName; + CONFIGRET ret; + + TRACE("%lx %p %s %lu %lx %lx\n", dnAncestor, pVetoType, pszVetoName, + ulNameLength, ulFlags, hMachine); + + if (pszVetoName == NULL && ulNameLength == 0) + return CR_INVALID_POINTER; + + lpLocalVetoName = HeapAlloc(GetProcessHeap(), 0, ulNameLength * sizeof(WCHAR)); + if (lpLocalVetoName == NULL) + return CR_OUT_OF_MEMORY; + + ret = CM_Query_And_Remove_SubTree_ExW(dnAncestor, pVetoType, lpLocalVetoName, + ulNameLength, ulFlags, hMachine); + if (ret == CR_REMOVE_VETOED) + { + if (WideCharToMultiByte(CP_ACP, + 0, + lpLocalVetoName, + ulNameLength, + pszVetoName, + ulNameLength, + NULL, + NULL) == 0) + ret = CR_FAILURE; + } + + HeapFree(GetProcessHeap(), 0, lpLocalVetoName); + + return ret; +} + + +/*********************************************************************** + * CM_Query_And_Remove_SubTree_ExW [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Query_And_Remove_SubTree_ExW( + DEVINST dnAncestor, PPNP_VETO_TYPE pVetoType, LPWSTR pszVetoName, + ULONG ulNameLength, ULONG ulFlags, HMACHINE hMachine) +{ + RPC_BINDING_HANDLE BindingHandle = NULL; + HSTRING_TABLE StringTable = NULL; + LPWSTR lpDevInst; + CONFIGRET ret; + + TRACE("%lx %p %s %lu %lx %lx\n", dnAncestor, pVetoType, + debugstr_w(pszVetoName), ulNameLength, ulFlags, hMachine); + + if (dnAncestor == 0) + return CR_INVALID_DEVNODE; + + if (ulFlags & ~CM_REMOVE_BITS) + return CR_INVALID_FLAG; + + if (pszVetoName == NULL && ulNameLength == 0) + return CR_INVALID_POINTER; + + if (hMachine != NULL) + { + BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle; + if (BindingHandle == NULL) + return CR_FAILURE; + + StringTable = ((PMACHINE_INFO)hMachine)->StringTable; + if (StringTable == 0) + return CR_FAILURE; + } + else + { + if (!PnpGetLocalHandles(&BindingHandle, &StringTable)) + return CR_FAILURE; + } + + lpDevInst = StringTableStringFromId(StringTable, dnAncestor); + if (lpDevInst == NULL) + return CR_INVALID_DEVNODE; + + RpcTryExcept + { + ret = PNP_QueryRemove(BindingHandle, + lpDevInst, + pVetoType, + pszVetoName, + ulNameLength, + ulFlags); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + ret = RpcStatusToCmStatus(RpcExceptionCode()); + } + RpcEndExcept; + + return ret; +} + + /*********************************************************************** * CM_Query_Remove_SubTree [SETUPAPI.@] * @@ -3866,6 +4000,138 @@ CONFIGRET WINAPI CM_Remove_SubTree_Ex( } +/*********************************************************************** + * CM_Request_Device_EjectA [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Request_Device_EjectA( + DEVINST dnDevInst, PPNP_VETO_TYPE pVetoType, LPSTR pszVetoName, + ULONG ulNameLength, ULONG ulFlags) +{ + TRACE("%lx %p %s %lu %lx\n", dnDevInst, pVetoType, pszVetoName, + ulNameLength, ulFlags); + return CM_Request_Device_Eject_ExA(dnDevInst, pVetoType, pszVetoName, + ulNameLength, ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Request_Device_EjectW [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Request_Device_EjectW( + DEVINST dnDevInst, PPNP_VETO_TYPE pVetoType, LPWSTR pszVetoName, + ULONG ulNameLength, ULONG ulFlags) +{ + TRACE("%lx %p %s %lu %lx\n", dnDevInst, pVetoType, debugstr_w(pszVetoName), + ulNameLength, ulFlags); + return CM_Request_Device_Eject_ExW(dnDevInst, pVetoType, pszVetoName, + ulNameLength, ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Request_Device_Eject_ExA [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Request_Device_Eject_ExA( + DEVINST dnDevInst, PPNP_VETO_TYPE pVetoType, LPSTR pszVetoName, + ULONG ulNameLength, ULONG ulFlags, HMACHINE hMachine) +{ + LPWSTR lpLocalVetoName; + CONFIGRET ret; + + TRACE("%lx %p %s %lu %lx %lx\n", dnDevInst, pVetoType, pszVetoName, + ulNameLength, ulFlags, hMachine); + + if (pszVetoName == NULL && ulNameLength == 0) + return CR_INVALID_POINTER; + + lpLocalVetoName = HeapAlloc(GetProcessHeap(), 0, ulNameLength * sizeof(WCHAR)); + if (lpLocalVetoName == NULL) + return CR_OUT_OF_MEMORY; + + ret = CM_Request_Device_Eject_ExW(dnDevInst, pVetoType, lpLocalVetoName, + ulNameLength, ulFlags, hMachine); + if (ret == CR_REMOVE_VETOED) + { + if (WideCharToMultiByte(CP_ACP, + 0, + lpLocalVetoName, + ulNameLength, + pszVetoName, + ulNameLength, + NULL, + NULL) == 0) + ret = CR_FAILURE; + } + + HeapFree(GetProcessHeap(), 0, lpLocalVetoName); + + return ret; +} + + +/*********************************************************************** + * CM_Request_Device_Eject_ExW [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Request_Device_Eject_ExW( + DEVINST dnDevInst, PPNP_VETO_TYPE pVetoType, LPWSTR pszVetoName, + ULONG ulNameLength, ULONG ulFlags, HMACHINE hMachine) +{ + RPC_BINDING_HANDLE BindingHandle = NULL; + HSTRING_TABLE StringTable = NULL; + LPWSTR lpDevInst; + CONFIGRET ret; + + TRACE("%lx %p %s %lu %lx %lx\n", dnDevInst, pVetoType, + debugstr_w(pszVetoName), ulNameLength, ulFlags, hMachine); + + if (dnDevInst == 0) + return CR_INVALID_DEVNODE; + + if (ulFlags != 0) + return CR_INVALID_FLAG; + + if (pszVetoName == NULL && ulNameLength == 0) + return CR_INVALID_POINTER; + + if (hMachine != NULL) + { + BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle; + if (BindingHandle == NULL) + return CR_FAILURE; + + StringTable = ((PMACHINE_INFO)hMachine)->StringTable; + if (StringTable == 0) + return CR_FAILURE; + } + else + { + if (!PnpGetLocalHandles(&BindingHandle, &StringTable)) + return CR_FAILURE; + } + + lpDevInst = StringTableStringFromId(StringTable, dnDevInst); + if (lpDevInst == NULL) + return CR_INVALID_DEVNODE; + + RpcTryExcept + { + ret = PNP_RequestDeviceEject(BindingHandle, + lpDevInst, + pVetoType, + pszVetoName, + ulNameLength, + ulFlags); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + ret = RpcStatusToCmStatus(RpcExceptionCode()); + } + RpcEndExcept; + + return ret; +} + + /*********************************************************************** * CM_Request_Eject_PC [SETUPAPI.@] */ diff --git a/reactos/dll/win32/setupapi/setupapi.spec b/reactos/dll/win32/setupapi/setupapi.spec index 95965a3d0bc..fcff7a11647 100644 --- a/reactos/dll/win32/setupapi/setupapi.spec +++ b/reactos/dll/win32/setupapi/setupapi.spec @@ -155,10 +155,10 @@ @ stdcall CM_Open_Class_Key_ExW(ptr wstr long long ptr long long) @ stdcall CM_Open_DevNode_Key(ptr long long long ptr long) @ stdcall CM_Open_DevNode_Key_Ex(ptr long long long ptr long long) -@ stub CM_Query_And_Remove_SubTreeA -@ stub CM_Query_And_Remove_SubTreeW -@ stub CM_Query_And_Remove_SubTree_ExA -@ stub CM_Query_And_Remove_SubTree_ExW +@ stdcall CM_Query_And_Remove_SubTreeA(long ptr str long long) +@ stdcall CM_Query_And_Remove_SubTreeW(long ptr wstr long long) +@ stdcall CM_Query_And_Remove_SubTree_ExA(long ptr str long long long) +@ stdcall CM_Query_And_Remove_SubTree_ExW(long ptr wstr long long long) @ stub CM_Query_Arbitrator_Free_Data @ stub CM_Query_Arbitrator_Free_Data_Ex @ stub CM_Query_Arbitrator_Free_Size @@ -176,10 +176,10 @@ @ stub CM_Register_Device_Interface_ExW @ stdcall CM_Remove_SubTree(long long) @ stdcall CM_Remove_SubTree_Ex(long long long) -@ stub CM_Request_Device_EjectA -@ stub CM_Request_Device_EjectW -@ stub CM_Request_Device_Eject_ExA -@ stub CM_Request_Device_Eject_ExW +@ stdcall CM_Request_Device_EjectA(long ptr str long long) +@ stdcall CM_Request_Device_EjectW(long ptr wstr long long) +@ stdcall CM_Request_Device_Eject_ExA(long ptr str long long long) +@ stdcall CM_Request_Device_Eject_ExW(long ptr wstr long long long) @ stdcall CM_Request_Eject_PC() @ stdcall CM_Request_Eject_PC_Ex(long) @ stdcall CM_Run_Detection(long) From f01253299911c380fba168870cb1c5eee2f4801d Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 20 Feb 2011 21:22:53 +0000 Subject: [PATCH 091/287] [RUNONCE] Fixed a typo in french translation svn path=/trunk/; revision=50841 --- reactos/base/system/runonce/lang/fr-FR.rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/base/system/runonce/lang/fr-FR.rc b/reactos/base/system/runonce/lang/fr-FR.rc index 2981411e6df..8c5d3bb443e 100644 --- a/reactos/base/system/runonce/lang/fr-FR.rc +++ b/reactos/base/system/runonce/lang/fr-FR.rc @@ -5,7 +5,7 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "Installation de ReactOS" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "ReactOS est en train d'installer les lments suivants:", -1, 38, 8, 196, 18 + LTEXT "ReactOS est en train d'installer les lments suivants :", -1, 38, 8, 196, 18 LISTBOX IDC_COMP_LIST, 36, 32, 197, 131, LBS_OWNERDRAWVARIABLE | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP ICON IDI_ICON, -1, 5, 6, 21, 20 END From e3a5544d25dbf892f40e0473b84249477871ef57 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 20 Feb 2011 21:40:04 +0000 Subject: [PATCH 092/287] [CONSOLE] French translation by Jason Toscano Corrections/adjustements by me svn path=/trunk/; revision=50842 --- reactos/dll/cpl/console/lang/fr-Fr.rc | 148 ++++++++++++++++++++++++++ reactos/dll/cpl/console/rsrc.rc | 1 + 2 files changed, 149 insertions(+) create mode 100644 reactos/dll/cpl/console/lang/fr-Fr.rc diff --git a/reactos/dll/cpl/console/lang/fr-Fr.rc b/reactos/dll/cpl/console/lang/fr-Fr.rc new file mode 100644 index 00000000000..3cc34122141 --- /dev/null +++ b/reactos/dll/cpl/console/lang/fr-Fr.rc @@ -0,0 +1,148 @@ +/* + * PROJECT: ReactOS Console Configuration DLL + * LICENSE: GPL - See COPYING in the top level directory + * FILE: dll/cpl/console/lang/fr-FR.rc + * PURPOSE: French resource file + * TRANSLATOR: Jason Toscano + */ + +#include + +LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL + +IDD_PROPPAGEOPTIONS DIALOGEX 0, 0, 253, 220 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Options" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Taille du curseur", -1, 7, 7, 120, 70, WS_CHILD | WS_VISIBLE | WS_GROUP + CONTROL "&Petit", IDC_RADIO_SMALL_CURSOR, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 15, 20, 90, 10 + CONTROL "&Moyen", IDC_RADIO_MEDIUM_CURSOR, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 15, 40, 90, 10 + CONTROL "&Grand", IDC_RADIO_LARGE_CURSOR, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 15, 60, 90, 10 + GROUPBOX "Options d'affichage", -1, 133, 7, 112, 70, WS_CHILD | WS_VISIBLE | WS_GROUP + CONTROL "&Fenêtre", IDC_RADIO_DISPLAY_WINDOW, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 142, 20, 70, 10 + CONTROL "P&lein écran", IDC_RADIO_DISPLAY_FULL, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 142, 40, 70, 10 + GROUPBOX "Historique des commandes", -1, 7, 84, 120, 77, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Taille du &buffer :", -1, 14, 101, 70, 12 + EDITTEXT IDC_EDIT_BUFFER_SIZE, 90, 97, 30, 15, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_BUFFER_SIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 119, 97, 12, 15 + LTEXT "&Nombre de buffers :", -1, 14, 124, 70, 12 + EDITTEXT IDC_EDIT_NUM_BUFFER, 90, 120, 30, 15, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_NUM_BUFFER, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 119, 120, 12, 15 + CHECKBOX "&Se débarrasser des vielles copies", IDC_CHECK_DISCARD_DUPLICATES, 12, 140, 110, 15 + GROUPBOX "Options d'édition", -1, 133, 85, 112, 77, BS_GROUPBOX | WS_CHILD | WS_VISIBLE | WS_GROUP + CHECKBOX "M&ode d'édition rapide", IDC_CHECK_QUICK_EDIT, 140, 97, 102, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CHECKBOX "Mode &insertion", IDC_CHECK_INSERT_MODE, 140, 113, 76, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP +END + +IDD_PROPPAGEFONT DIALOGEX 0, 0, 253, 220 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Police" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Fenêtre de Prévisualisation :", -1, 10, 10, 94, 10 + LTEXT "Taille :", -1, 180, 10, 36, 10 + CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74 + LISTBOX IDC_LBOX_FONTS, 181, 20, 55, 80, LBS_DISABLENOSCROLL | WS_VSCROLL + LTEXT "&Police :", -1, 10, 105, 33, 10 + CHECKBOX "&Gras", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10 + LISTBOX IDC_LBOX_TYPE, 10, 120, 110, 40, LBS_DISABLENOSCROLL | WS_VSCROLL + GROUPBOX "", IDC_GROUPBOX_FONT_NAME, 6, 156, 241, 50 + CONTROL "", IDC_STATIC_SELECT_FONT_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 16, 165, 95, 35 + LTEXT "Chaque caractère est :", -1, 124, 166, 75, 10 + LTEXT "largeur du pixel\nhauteur du pixel", -1, 136, 180, 101, 20 + LTEXT "", IDC_FONT_SIZE_X, 120, 180, 10, 10 + LTEXT "", IDC_FONT_SIZE_Y, 120, 188, 10, 10 +END + +IDD_PROPPAGELAYOUT DIALOGEX 0, 0, 253, 220 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Disposition" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Fenêtre de Prévisualisation :", -1, 8, 6, 95, 10 + CONTROL "", IDC_STATIC_LAYOUT_WINDOW_PREVIEW, "Static", SS_SUNKEN | SS_OWNERDRAW, 8, 16, 115, 70 + GROUPBOX "Taille du buffer de l'écran", -1, 130, 12, 115, 50 + LTEXT "&Largeur :", -1, 140, 28, 40, 10 + LTEXT "&Hauteur :", -1, 140, 46, 39, 10 + EDITTEXT IDC_EDIT_SCREEN_BUFFER_WIDTH, 203, 25, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_SCREEN_BUFFER_WIDTH, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 25, 13, 14 + EDITTEXT IDC_EDIT_SCREEN_BUFFER_HEIGHT, 203, 42, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_SCREEN_BUFFER_HEIGHT, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 42, 13, 14 + GROUPBOX "Taille de la fenêtre", -1, 130, 65, 115, 47 + LTEXT "&L&argeur :", -1, 140, 78, 39, 10 + LTEXT "&H&auteur :", -1, 140, 95, 37, 10 + EDITTEXT IDC_EDIT_WINDOW_SIZE_WIDTH, 203, 75, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_WINDOW_SIZE_WIDTH, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 75, 13, 14 + EDITTEXT IDC_EDIT_WINDOW_SIZE_HEIGHT, 203, 92, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_WINDOW_SIZE_HEIGHT, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 92, 13, 14 + GROUPBOX "Position de la Fenêtre", -1, 130, 116, 115, 64 + LTEXT "&Gauche :", -1, 140, 132, 38, 10 + LTEXT "&En haut :", -1, 140, 149, 40, 10 + EDITTEXT IDC_EDIT_WINDOW_POS_LEFT, 203, 128, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_WINDOW_POS_LEFT, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 128, 13, 14 + EDITTEXT IDC_EDIT_WINDOW_POS_TOP, 203, 146, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_WINDOW_POS_TOP, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 146, 13, 14 + CHECKBOX "Laisser le système &positionner la fenêtre", IDC_CHECK_SYSTEM_POS_WINDOW, 137, 165, 104, 10 +END + +IDD_PROPPAGECOLORS DIALOGEX 0, 0, 253, 220 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Couleurs" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "&Texte à l'écran", IDC_RADIO_SCREEN_TEXT, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 12, 112, 10 + CONTROL "Fond de l'&écran", IDC_RADIO_SCREEN_BACKGROUND, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 30, 112, 10 + CONTROL "Texte du &popup", IDC_RADIO_POPUP_TEXT, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 48, 112, 10 + CONTROL "Fond du Pop&up", IDC_RADIO_POPUP_BACKGROUND, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 67, 112, 10 + GROUPBOX "Valeurs de couleur séléctionnées", -1, 129, 7, 118, 73 + LTEXT "&Rouge :", -1, 140, 25, 48, 10 + EDITTEXT IDC_EDIT_COLOR_RED, 210, 22, 30, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_COLOR_RED, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 240, 22, 12, 14 + LTEXT "&Vert :", -1, 140, 42, 48, 10 + EDITTEXT IDC_EDIT_COLOR_GREEN, 210, 39, 30, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_COLOR_GREEN, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 240, 39, 12, 14 + LTEXT "&Bleu :", -1, 140, 60, 48, 10 + EDITTEXT IDC_EDIT_COLOR_BLUE, 210, 56, 30, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_COLOR_BLUE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 240, 56, 12, 14 + CONTROL "", IDC_STATIC_COLOR1, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 17, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR2, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 31, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR3, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 45, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR4, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 59, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR5, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 73, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR6, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 87, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR7, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 101, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR8, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 115, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR9, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 129, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR10, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 143, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR11, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 157, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR12, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 171, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR13, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 185, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR14, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 199, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR15, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 213, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR16, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 227, 90, 12, 12 + GROUPBOX "Couleurs de l'écran sélectionneés", -1, 7, 111, 240, 40 + CONTROL "", IDC_STATIC_SCREEN_COLOR, "Static", SS_OWNERDRAW | SS_SUNKEN, 15, 124, 224, 20 + GROUPBOX "Couleurs du popup sélectionneés", -1, 7, 162, 240, 40 + CONTROL "", IDC_STATIC_POPUP_COLOR, "Static", SS_OWNERDRAW | SS_SUNKEN, 15, 176, 224, 20 +END + +IDD_APPLYOPTIONS DIALOGEX 0, 0, 220, 79 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Appliquer propriétés" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "&Appliquer les propriétés à la fenêtre actuelle seulement", IDC_RADIO_APPLY_CURRENT, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 12, 12, 207, 10 + CONTROL "&Enregistrer les propriétés pour les prochaines fenêtres avec le même titre", IDC_RADIO_APPLY_ALL, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 12, 31, 207, 10 + PUSHBUTTON "OK", IDOK, 58, 58, 50, 14, WS_VISIBLE + PUSHBUTTON "Cancel", IDCANCEL, 114, 58, 50, 14, WS_VISIBLE +END + +STRINGTABLE +BEGIN + IDS_CPLNAME "Console" + IDS_CPLDESCRIPTION "Configurer les propriétés de la console." + IDS_APPLY_SHORTCUT_ALL "Modify &shortcut that started this window" + IDS_SCREEN_TEXT "C:\\ReactOS> dir\nSYSTEM 10-01-99 5:00\nSYSTEM32 10-01-99 5:00" + IDS_RASTERFONTS "Polices Raster" +END diff --git a/reactos/dll/cpl/console/rsrc.rc b/reactos/dll/cpl/console/rsrc.rc index f711388e3a9..facd97b3150 100644 --- a/reactos/dll/cpl/console/rsrc.rc +++ b/reactos/dll/cpl/console/rsrc.rc @@ -8,6 +8,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/de-DE.rc" #include "lang/en-US.rc" #include "lang/es-ES.rc" +#include "lang/fr-FR.rc" #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/no-NO.rc" From 225933083ba8e55d520ac39db0ab727696635c1e Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 20 Feb 2011 21:47:41 +0000 Subject: [PATCH 093/287] [WIN32CSR] Silence CsrGetTempFile() debug svn path=/trunk/; revision=50843 --- reactos/subsystems/win32/csrss/win32csr/file.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/subsystems/win32/csrss/win32csr/file.c b/reactos/subsystems/win32/csrss/win32csr/file.c index fd36621f9c3..d7e8414b0dd 100644 --- a/reactos/subsystems/win32/csrss/win32csr/file.c +++ b/reactos/subsystems/win32/csrss/win32csr/file.c @@ -22,12 +22,12 @@ UINT CsrGetTempFileUnique; CSR_API(CsrGetTempFile) { - DPRINT1("CsrGetTempFile entered\n"); + DPRINT("CsrGetTempFile entered\n"); /* Return 16-bits ID */ Request->Data.GetTempFile.UniqueID = (++CsrGetTempFileUnique & 0xFFFF); - DPRINT1("Returning: %u\n", Request->Data.GetTempFile.UniqueID); + DPRINT("Returning: %u\n", Request->Data.GetTempFile.UniqueID); return STATUS_SUCCESS; } From 30810893ada4010dc173483d4b1f872dc208aebb Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 20 Feb 2011 22:13:59 +0000 Subject: [PATCH 094/287] [SETUPAPI] - Add 'pSetup'-Prefix to the string table functions according to the new naming convention. - Remove the obsolete function StringTableTrim. svn path=/trunk/; revision=50844 --- reactos/dll/win32/setupapi/cfgmgr.c | 76 +++++++-------- reactos/dll/win32/setupapi/rpc.c | 8 +- reactos/dll/win32/setupapi/setupapi.spec | 25 +++-- reactos/dll/win32/setupapi/stringtable.c | 114 ++++++++++------------- reactos/include/psdk/setupapi.h | 25 +++-- 5 files changed, 114 insertions(+), 134 deletions(-) diff --git a/reactos/dll/win32/setupapi/cfgmgr.c b/reactos/dll/win32/setupapi/cfgmgr.c index c44aed54a08..7763c0e2f1b 100644 --- a/reactos/dll/win32/setupapi/cfgmgr.c +++ b/reactos/dll/win32/setupapi/cfgmgr.c @@ -268,7 +268,7 @@ CONFIGRET WINAPI CM_Add_Empty_Log_Conf_Ex( return CR_FAILURE; } - lpDevInst = StringTableStringFromId(StringTable, dnDevInst); + lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst); if (lpDevInst == NULL) return CR_INVALID_DEVNODE; @@ -392,7 +392,7 @@ CONFIGRET WINAPI CM_Add_ID_ExW( return CR_FAILURE; } - lpDevInst = StringTableStringFromId(StringTable, dnDevInst); + lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst); if (lpDevInst == NULL) return CR_INVALID_DEVNODE; @@ -508,18 +508,18 @@ CONFIGRET WINAPI CM_Connect_MachineW( } lstrcpyW(pMachine->szMachineName, UNCServerName); - pMachine->StringTable = StringTableInitialize(); + pMachine->StringTable = pSetupStringTableInitialize(); if (pMachine->StringTable == NULL) { HeapFree(GetProcessHeap(), 0, pMachine); return CR_FAILURE; } - StringTableAddString(pMachine->StringTable, L"PLT", 1); + pSetupStringTableAddString(pMachine->StringTable, L"PLT", 1); if (!PnpBindRpc(UNCServerName, &pMachine->BindingHandle)) { - StringTableDestroy(pMachine->StringTable); + pSetupStringTableDestroy(pMachine->StringTable); HeapFree(GetProcessHeap(), 0, pMachine); return CR_INVALID_MACHINENAME; } @@ -630,7 +630,7 @@ CONFIGRET WINAPI CM_Create_DevNode_ExW( return CR_FAILURE; } - lpParentDevInst = StringTableStringFromId(StringTable, dnParent); + lpParentDevInst = pSetupStringTableStringFromId(StringTable, dnParent); if (lpParentDevInst == NULL) return CR_INVALID_DEVNODE; @@ -650,7 +650,7 @@ CONFIGRET WINAPI CM_Create_DevNode_ExW( if (ret == CR_SUCCESS) { - *pdnDevInst = StringTableAddString(StringTable, pDeviceID, 1); + *pdnDevInst = pSetupStringTableAddString(StringTable, pDeviceID, 1); if (*pdnDevInst == 0) ret = CR_NO_SUCH_DEVNODE; } @@ -794,7 +794,7 @@ CONFIGRET WINAPI CM_Disable_DevNode_Ex( return CR_FAILURE; } - lpDevInst = StringTableStringFromId(StringTable, dnDevInst); + lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst); if (lpDevInst == NULL) return CR_INVALID_DEVNODE; @@ -832,7 +832,7 @@ CONFIGRET WINAPI CM_Disconnect_Machine(HMACHINE hMachine) if (pMachine->bLocal == FALSE) { if (pMachine->StringTable != NULL) - StringTableDestroy(pMachine->StringTable); + pSetupStringTableDestroy(pMachine->StringTable); if (!PnpUnbindRpc(pMachine->BindingHandle)) return CR_ACCESS_DENIED; @@ -893,7 +893,7 @@ CONFIGRET WINAPI CM_Enable_DevNode_Ex( return CR_FAILURE; } - lpDevInst = StringTableStringFromId(StringTable, dnDevInst); + lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst); if (lpDevInst == NULL) return CR_INVALID_DEVNODE; @@ -1161,7 +1161,7 @@ CONFIGRET WINAPI CM_Free_Log_Conf_Ex( return CR_FAILURE; } - lpDevInst = StringTableStringFromId(StringTable, pLogConfInfo->dnDevInst); + lpDevInst = pSetupStringTableStringFromId(StringTable, pLogConfInfo->dnDevInst); if (lpDevInst == NULL) return CR_INVALID_DEVNODE; @@ -1289,7 +1289,7 @@ CONFIGRET WINAPI CM_Get_Child_Ex( return CR_FAILURE; } - lpDevInst = StringTableStringFromId(StringTable, dnDevInst); + lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst); if (lpDevInst == NULL) return CR_INVALID_DEVNODE; @@ -1313,7 +1313,7 @@ CONFIGRET WINAPI CM_Get_Child_Ex( TRACE("szRelatedDevInst: %s\n", debugstr_w(szRelatedDevInst)); - dwIndex = StringTableAddString(StringTable, szRelatedDevInst, 1); + dwIndex = pSetupStringTableAddString(StringTable, szRelatedDevInst, 1); if (dwIndex == -1) return CR_FAILURE; @@ -1596,7 +1596,7 @@ CONFIGRET WINAPI CM_Get_Depth_Ex( return CR_FAILURE; } - lpDevInst = StringTableStringFromId(StringTable, dnDevInst); + lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst); if (lpDevInst == NULL) return CR_INVALID_DEVNODE; @@ -1773,7 +1773,7 @@ CONFIGRET WINAPI CM_Get_DevNode_Registry_Property_ExW( return CR_FAILURE; } - lpDevInst = StringTableStringFromId(StringTable, dnDevInst); + lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst); if (lpDevInst == NULL) return CR_INVALID_DEVNODE; @@ -1861,7 +1861,7 @@ CM_Get_DevNode_Status_Ex( return CR_FAILURE; } - lpDevInst = StringTableStringFromId(StringTable, dnDevInst); + lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst); if (lpDevInst == NULL) return CR_INVALID_DEVNODE; @@ -1978,10 +1978,10 @@ CONFIGRET WINAPI CM_Get_Device_ID_ExW( return CR_FAILURE; } - if (!StringTableStringFromIdEx(StringTable, - dnDevInst, - Buffer, - &BufferLen)) + if (!pSetupStringTableStringFromIdEx(StringTable, + dnDevInst, + Buffer, + &BufferLen)) return CR_FAILURE; return CR_SUCCESS; @@ -2271,7 +2271,7 @@ CONFIGRET WINAPI CM_Get_Device_ID_Size_Ex( return CR_FAILURE; } - DeviceId = StringTableStringFromId(StringTable, dnDevInst); + DeviceId = pSetupStringTableStringFromId(StringTable, dnDevInst); if (DeviceId == NULL) { *pulLen = 0; @@ -2438,7 +2438,7 @@ CONFIGRET WINAPI CM_Get_First_Log_Conf_Ex( return CR_FAILURE; } - lpDevInst = StringTableStringFromId(StringTable, dnDevInst); + lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst); if (lpDevInst == NULL) return CR_INVALID_DEVNODE; @@ -2798,7 +2798,7 @@ CONFIGRET WINAPI CM_Get_Log_Conf_Priority_Ex( return CR_FAILURE; } - lpDevInst = StringTableStringFromId(StringTable, pLogConfInfo->dnDevInst); + lpDevInst = pSetupStringTableStringFromId(StringTable, pLogConfInfo->dnDevInst); if (lpDevInst == NULL) return CR_INVALID_DEVNODE; @@ -2875,7 +2875,7 @@ CONFIGRET WINAPI CM_Get_Next_Log_Conf_Ex( return CR_FAILURE; } - lpDevInst = StringTableStringFromId(StringTable, pLogConfInfo->dnDevInst); + lpDevInst = pSetupStringTableStringFromId(StringTable, pLogConfInfo->dnDevInst); if (lpDevInst == NULL) return CR_INVALID_DEVNODE; @@ -2996,7 +2996,7 @@ CONFIGRET WINAPI CM_Get_Parent_Ex( return CR_FAILURE; } - lpDevInst = StringTableStringFromId(StringTable, dnDevInst); + lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst); if (lpDevInst == NULL) return CR_INVALID_DEVNODE; @@ -3020,7 +3020,7 @@ CONFIGRET WINAPI CM_Get_Parent_Ex( TRACE("szRelatedDevInst: %s\n", debugstr_w(szRelatedDevInst)); - dwIndex = StringTableAddString(StringTable, szRelatedDevInst, 1); + dwIndex = pSetupStringTableAddString(StringTable, szRelatedDevInst, 1); if (dwIndex == -1) return CR_FAILURE; @@ -3128,7 +3128,7 @@ CONFIGRET WINAPI CM_Get_Sibling_Ex( return CR_FAILURE; } - lpDevInst = StringTableStringFromId(StringTable, dnDevInst); + lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst); if (lpDevInst == NULL) return CR_INVALID_DEVNODE; @@ -3152,7 +3152,7 @@ CONFIGRET WINAPI CM_Get_Sibling_Ex( TRACE("szRelatedDevInst: %s\n", debugstr_w(szRelatedDevInst)); - dwIndex = StringTableAddString(StringTable, szRelatedDevInst, 1); + dwIndex = pSetupStringTableAddString(StringTable, szRelatedDevInst, 1); if (dwIndex == -1) return CR_FAILURE; @@ -3443,7 +3443,7 @@ CONFIGRET WINAPI CM_Locate_DevNode_ExW( if (ret == CR_SUCCESS) { - *pdnDevInst = StringTableAddString(StringTable, DeviceIdBuffer, 1); + *pdnDevInst = pSetupStringTableAddString(StringTable, DeviceIdBuffer, 1); if (*pdnDevInst == -1) ret = CR_FAILURE; } @@ -3531,11 +3531,11 @@ CONFIGRET WINAPI CM_Move_DevNode_Ex( return CR_FAILURE; } - lpFromDevInst = StringTableStringFromId(StringTable, dnFromDevInst); + lpFromDevInst = pSetupStringTableStringFromId(StringTable, dnFromDevInst); if (lpFromDevInst == NULL) return CR_INVALID_DEVNODE; - lpToDevInst = StringTableStringFromId(StringTable, dnToDevInst); + lpToDevInst = pSetupStringTableStringFromId(StringTable, dnToDevInst); if (lpToDevInst == NULL) return CR_INVALID_DEVNODE; @@ -3856,7 +3856,7 @@ CONFIGRET WINAPI CM_Query_And_Remove_SubTree_ExW( return CR_FAILURE; } - lpDevInst = StringTableStringFromId(StringTable, dnAncestor); + lpDevInst = pSetupStringTableStringFromId(StringTable, dnAncestor); if (lpDevInst == NULL) return CR_INVALID_DEVNODE; @@ -3952,7 +3952,7 @@ CM_Reenumerate_DevNode_Ex( return CR_FAILURE; } - lpDevInst = StringTableStringFromId(StringTable, dnDevInst); + lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst); if (lpDevInst == NULL) return CR_INVALID_DEVNODE; @@ -4109,7 +4109,7 @@ CONFIGRET WINAPI CM_Request_Device_Eject_ExW( return CR_FAILURE; } - lpDevInst = StringTableStringFromId(StringTable, dnDevInst); + lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst); if (lpDevInst == NULL) return CR_INVALID_DEVNODE; @@ -4280,7 +4280,7 @@ CONFIGRET WINAPI CM_Set_DevNode_Problem_Ex( return CR_FAILURE; } - lpDevInst = StringTableStringFromId(StringTable, dnDevInst); + lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst); if (lpDevInst == NULL) return CR_INVALID_DEVNODE; @@ -4508,7 +4508,7 @@ CONFIGRET WINAPI CM_Set_DevNode_Registry_Property_ExW( return CR_FAILURE; } - lpDevInst = StringTableStringFromId(StringTable, dnDevInst); + lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst); if (lpDevInst == NULL) return CR_INVALID_DEVNODE; @@ -4798,7 +4798,7 @@ CONFIGRET WINAPI CM_Setup_DevNode_Ex( return CR_FAILURE; } - lpDevInst = StringTableStringFromId(StringTable, dnDevInst); + lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst); if (lpDevInst == NULL) return CR_INVALID_DEVNODE; @@ -4866,7 +4866,7 @@ CONFIGRET WINAPI CM_Uninstall_DevNode_Ex( return CR_FAILURE; } - lpDevInst = StringTableStringFromId(StringTable, dnPhantom); + lpDevInst = pSetupStringTableStringFromId(StringTable, dnPhantom); if (lpDevInst == NULL) return CR_INVALID_DEVNODE; diff --git a/reactos/dll/win32/setupapi/rpc.c b/reactos/dll/win32/setupapi/rpc.c index b4bce194f10..72ce54a0a1d 100644 --- a/reactos/dll/win32/setupapi/rpc.c +++ b/reactos/dll/win32/setupapi/rpc.c @@ -79,17 +79,17 @@ PnpGetLocalHandles(RPC_BINDING_HANDLE *BindingHandle, return TRUE; } - LocalStringTable = StringTableInitialize(); + LocalStringTable = pSetupStringTableInitialize(); if (LocalStringTable == NULL) return FALSE; if (PnpBindRpc(NULL, &LocalBindingHandle) != RPC_S_OK) { - StringTableDestroy(LocalStringTable); + pSetupStringTableDestroy(LocalStringTable); return FALSE; } - StringTableAddString(LocalStringTable, L"PLT", 1); + pSetupStringTableAddString(LocalStringTable, L"PLT", 1); if (BindingHandle != NULL) *BindingHandle = LocalBindingHandle; @@ -104,7 +104,7 @@ PnpGetLocalHandles(RPC_BINDING_HANDLE *BindingHandle, RPC_STATUS PnpUnbindLocalBindingHandle(VOID) { - StringTableDestroy(LocalStringTable); + pSetupStringTableDestroy(LocalStringTable); LocalStringTable = NULL; return PnpUnbindRpc(&LocalBindingHandle); } diff --git a/reactos/dll/win32/setupapi/setupapi.spec b/reactos/dll/win32/setupapi/setupapi.spec index fcff7a11647..79bf3aad5c2 100644 --- a/reactos/dll/win32/setupapi/setupapi.spec +++ b/reactos/dll/win32/setupapi/setupapi.spec @@ -584,19 +584,19 @@ @ stub pSetupSetSystemSourcePath @ stub pSetupShouldDeviceBeExcluded @ stdcall pSetupStringFromGuid(ptr wstr long) -@ stdcall pSetupStringTableAddString(ptr wstr long) StringTableAddString -@ stdcall pSetupStringTableAddStringEx(ptr wstr long ptr long) StringTableAddStringEx -@ stdcall pSetupStringTableDestroy(ptr) StringTableDestroy -@ stdcall pSetupStringTableDuplicate(ptr) StringTableDuplicate +@ stdcall pSetupStringTableAddString(ptr wstr long) +@ stdcall pSetupStringTableAddStringEx(ptr wstr long ptr long) +@ stdcall pSetupStringTableDestroy(ptr) +@ stdcall pSetupStringTableDuplicate(ptr) @ stub pSetupStringTableEnum -@ stdcall pSetupStringTableGetExtraData(ptr long ptr long) StringTableGetExtraData -@ stdcall pSetupStringTableInitialize() StringTableInitialize -@ stdcall pSetupStringTableInitializeEx(long long) StringTableInitializeEx -@ stdcall pSetupStringTableLookUpString(ptr wstr long) StringTableLookUpString -@ stdcall pSetupStringTableLookUpStringEx(ptr wstr long ptr ptr) StringTableLookUpStringEx -@ stdcall pSetupStringTableSetExtraData(ptr long ptr long) StringTableSetExtraData -@ stdcall pSetupStringTableStringFromId(ptr long) StringTableStringFromId -@ stdcall pSetupStringTableStringFromIdEx(ptr long ptr ptr) StringTableStringFromIdEx +@ stdcall pSetupStringTableGetExtraData(ptr long ptr long) +@ stdcall pSetupStringTableInitialize() +@ stdcall pSetupStringTableInitializeEx(long long) +@ stdcall pSetupStringTableLookUpString(ptr wstr long) +@ stdcall pSetupStringTableLookUpStringEx(ptr wstr long ptr ptr) +@ stdcall pSetupStringTableSetExtraData(ptr long ptr long) +@ stdcall pSetupStringTableStringFromId(ptr long) +@ stdcall pSetupStringTableStringFromIdEx(ptr long ptr ptr) @ stdcall pSetupUnicodeToMultiByte(wstr long) UnicodeToMultiByte @ stdcall pSetupUnmapAndCloseFile(long long ptr) UnmapAndCloseFile @ stub pSetupVerifyCatalogFile @@ -627,7 +627,6 @@ @ stdcall RetreiveFileSecurity(wstr ptr) @ stub SearchForInfFile @ stdcall StampFileSecurity(wstr ptr) -@ stdcall StringTableTrim(ptr) @ stdcall TakeOwnershipOfFile(wstr) @ stub pSetupDirectoryIdToPath @ stub pSetupGetOsLoaderDriveAndPath diff --git a/reactos/dll/win32/setupapi/stringtable.c b/reactos/dll/win32/setupapi/stringtable.c index 9eba15fb977..522df7c2556 100644 --- a/reactos/dll/win32/setupapi/stringtable.c +++ b/reactos/dll/win32/setupapi/stringtable.c @@ -41,7 +41,7 @@ typedef struct _STRING_TABLE /************************************************************************** - * StringTableInitialize [SETUPAPI.@] + * pSetupStringTableInitialize [SETUPAPI.@] * * Creates a new string table and initializes it. * @@ -53,7 +53,7 @@ typedef struct _STRING_TABLE * Failure: NULL */ HSTRING_TABLE WINAPI -StringTableInitialize(VOID) +pSetupStringTableInitialize(VOID) { PSTRING_TABLE pStringTable; @@ -88,7 +88,7 @@ StringTableInitialize(VOID) /************************************************************************** - * StringTableInitializeEx [SETUPAPI.@] + * pSetupStringTableInitializeEx [SETUPAPI.@] * * Creates a new string table and initializes it. * @@ -101,8 +101,8 @@ StringTableInitialize(VOID) * Failure: NULL */ HSTRING_TABLE WINAPI -StringTableInitializeEx(DWORD dwMaxExtraDataSize, - DWORD dwReserved) +pSetupStringTableInitializeEx(DWORD dwMaxExtraDataSize, + DWORD dwReserved) { PSTRING_TABLE pStringTable; @@ -133,7 +133,7 @@ StringTableInitializeEx(DWORD dwMaxExtraDataSize, /************************************************************************** - * StringTableDestroy [SETUPAPI.@] + * pSetupStringTableDestroy [SETUPAPI.@] * * Destroys a string table. * @@ -144,7 +144,7 @@ StringTableInitializeEx(DWORD dwMaxExtraDataSize, * None */ VOID WINAPI -StringTableDestroy(HSTRING_TABLE hStringTable) +pSetupStringTableDestroy(HSTRING_TABLE hStringTable) { PSTRING_TABLE pStringTable; DWORD i; @@ -175,7 +175,7 @@ StringTableDestroy(HSTRING_TABLE hStringTable) /************************************************************************** - * StringTableAddString [SETUPAPI.@] + * pSetupStringTableAddString [SETUPAPI.@] * * Adds a new string to the string table. * @@ -195,9 +195,9 @@ StringTableDestroy(HSTRING_TABLE hStringTable) * this case. */ DWORD WINAPI -StringTableAddString(HSTRING_TABLE hStringTable, - LPWSTR lpString, - DWORD dwFlags) +pSetupStringTableAddString(HSTRING_TABLE hStringTable, + LPWSTR lpString, + DWORD dwFlags) { PSTRING_TABLE pStringTable; DWORD i; @@ -250,7 +250,7 @@ StringTableAddString(HSTRING_TABLE hStringTable, MyFree(pNewSlots); pStringTable->dwMaxSlots = dwNewMaxSlots; - return StringTableAddString(hStringTable, lpString, dwFlags); + return pSetupStringTableAddString(hStringTable, lpString, dwFlags); } /* Search for an empty slot */ @@ -280,7 +280,7 @@ StringTableAddString(HSTRING_TABLE hStringTable, /************************************************************************** - * StringTableAddStringEx [SETUPAPI.@] + * pSetupStringTableAddStringEx [SETUPAPI.@] * * Adds a new string plus extra data to the string table. * @@ -302,11 +302,11 @@ StringTableAddString(HSTRING_TABLE hStringTable, * this case. */ DWORD WINAPI -StringTableAddStringEx(HSTRING_TABLE hStringTable, - LPWSTR lpString, - DWORD dwFlags, - LPVOID lpExtraData, - DWORD dwExtraDataSize) +pSetupStringTableAddStringEx(HSTRING_TABLE hStringTable, + LPWSTR lpString, + DWORD dwFlags, + LPVOID lpExtraData, + DWORD dwExtraDataSize) { PSTRING_TABLE pStringTable; DWORD i; @@ -390,7 +390,7 @@ StringTableAddStringEx(HSTRING_TABLE hStringTable, /************************************************************************** - * StringTableDuplicate [SETUPAPI.@] + * pSetupStringTableDuplicate [SETUPAPI.@] * * Duplicates a given string table. * @@ -403,7 +403,7 @@ StringTableAddStringEx(HSTRING_TABLE hStringTable, * */ HSTRING_TABLE WINAPI -StringTableDuplicate(HSTRING_TABLE hStringTable) +pSetupStringTableDuplicate(HSTRING_TABLE hStringTable) { PSTRING_TABLE pSourceTable; PSTRING_TABLE pDestinationTable; @@ -474,7 +474,7 @@ StringTableDuplicate(HSTRING_TABLE hStringTable) /************************************************************************** - * StringTableGetExtraData [SETUPAPI.@] + * pSetupStringTableGetExtraData [SETUPAPI.@] * * Retrieves extra data from a given string table entry. * @@ -489,10 +489,10 @@ StringTableDuplicate(HSTRING_TABLE hStringTable) * Failure: FALSE */ BOOL WINAPI -StringTableGetExtraData(HSTRING_TABLE hStringTable, - DWORD dwId, - LPVOID lpExtraData, - DWORD dwExtraDataSize) +pSetupStringTableGetExtraData(HSTRING_TABLE hStringTable, + DWORD dwId, + LPVOID lpExtraData, + DWORD dwExtraDataSize) { PSTRING_TABLE pStringTable; @@ -527,7 +527,7 @@ StringTableGetExtraData(HSTRING_TABLE hStringTable, /************************************************************************** - * StringTableLookUpString [SETUPAPI.@] + * pSetupStringTableLookUpString [SETUPAPI.@] * * Searches a string table for a given string. * @@ -542,9 +542,9 @@ StringTableGetExtraData(HSTRING_TABLE hStringTable, * Failure: -1 */ DWORD WINAPI -StringTableLookUpString(HSTRING_TABLE hStringTable, - LPWSTR lpString, - DWORD dwFlags) +pSetupStringTableLookUpString(HSTRING_TABLE hStringTable, + LPWSTR lpString, + DWORD dwFlags) { PSTRING_TABLE pStringTable; DWORD i; @@ -581,7 +581,7 @@ StringTableLookUpString(HSTRING_TABLE hStringTable, /************************************************************************** - * StringTableLookUpStringEx [SETUPAPI.@] + * pSetupStringTableLookUpStringEx [SETUPAPI.@] * * Searches a string table and extra data for a given string. * @@ -598,11 +598,11 @@ StringTableLookUpString(HSTRING_TABLE hStringTable, * Failure: -1 */ DWORD WINAPI -StringTableLookUpStringEx(HSTRING_TABLE hStringTable, - LPWSTR lpString, - DWORD dwFlags, - LPVOID lpExtraData, - DWORD dwReserved) +pSetupStringTableLookUpStringEx(HSTRING_TABLE hStringTable, + LPWSTR lpString, + DWORD dwFlags, + LPVOID lpExtraData, + DWORD dwReserved) { PSTRING_TABLE pStringTable; DWORD i; @@ -647,7 +647,7 @@ StringTableLookUpStringEx(HSTRING_TABLE hStringTable, /************************************************************************** - * StringTableSetExtraData [SETUPAPI.@] + * pSetupStringTableSetExtraData [SETUPAPI.@] * * Sets extra data for a given string table entry. * @@ -662,10 +662,10 @@ StringTableLookUpStringEx(HSTRING_TABLE hStringTable, * Failure: FALSE */ BOOL WINAPI -StringTableSetExtraData(HSTRING_TABLE hStringTable, - DWORD dwId, - LPVOID lpExtraData, - DWORD dwExtraDataSize) +pSetupStringTableSetExtraData(HSTRING_TABLE hStringTable, + DWORD dwId, + LPVOID lpExtraData, + DWORD dwExtraDataSize) { PSTRING_TABLE pStringTable; @@ -708,7 +708,7 @@ StringTableSetExtraData(HSTRING_TABLE hStringTable, /************************************************************************** - * StringTableStringFromId [SETUPAPI.@] + * pSetupStringTableStringFromId [SETUPAPI.@] * * Returns a pointer to a string for the given string ID. * @@ -721,8 +721,8 @@ StringTableSetExtraData(HSTRING_TABLE hStringTable, * Failure: NULL */ LPWSTR WINAPI -StringTableStringFromId(HSTRING_TABLE hStringTable, - DWORD dwId) +pSetupStringTableStringFromId(HSTRING_TABLE hStringTable, + DWORD dwId) { PSTRING_TABLE pStringTable; static WCHAR empty[] = {0}; @@ -744,7 +744,7 @@ StringTableStringFromId(HSTRING_TABLE hStringTable, /************************************************************************** - * StringTableStringFromIdEx [SETUPAPI.@] + * pSetupStringTableStringFromIdEx [SETUPAPI.@] * * Returns a string for the given string ID. * @@ -759,10 +759,10 @@ StringTableStringFromId(HSTRING_TABLE hStringTable, * Failure: FALSE */ BOOL WINAPI -StringTableStringFromIdEx(HSTRING_TABLE hStringTable, - DWORD dwId, - LPWSTR lpBuffer, - LPDWORD lpBufferLength) +pSetupStringTableStringFromIdEx(HSTRING_TABLE hStringTable, + DWORD dwId, + LPWSTR lpBuffer, + LPDWORD lpBufferLength) { PSTRING_TABLE pStringTable; DWORD dwLength; @@ -797,21 +797,3 @@ StringTableStringFromIdEx(HSTRING_TABLE hStringTable, return bResult; } - - -/************************************************************************** - * StringTableTrim [SETUPAPI.@] - * - * ... - * - * PARAMS - * hStringTable [I] Handle to the string table - * - * RETURNS - * None - */ -VOID WINAPI -StringTableTrim(HSTRING_TABLE hStringTable) -{ - FIXME("%p\n", hStringTable); -} diff --git a/reactos/include/psdk/setupapi.h b/reactos/include/psdk/setupapi.h index e2756f293ed..1f998c46f6c 100644 --- a/reactos/include/psdk/setupapi.h +++ b/reactos/include/psdk/setupapi.h @@ -1430,19 +1430,18 @@ WINSETUPAPI BOOL WINAPI SetupTerminateFileLog(HSPFILELOG); WINSETUPAPI DWORD WINAPI StampFileSecurity(PCWSTR, PSECURITY_DESCRIPTOR); -WINSETUPAPI DWORD WINAPI StringTableAddString(HSTRING_TABLE, LPWSTR, DWORD); -WINSETUPAPI DWORD WINAPI StringTableAddStringEx(HSTRING_TABLE, LPWSTR, DWORD, LPVOID, DWORD); -WINSETUPAPI VOID WINAPI StringTableDestroy(HSTRING_TABLE); -WINSETUPAPI HSTRING_TABLE WINAPI StringTableDuplicate(HSTRING_TABLE); -WINSETUPAPI BOOL WINAPI StringTableGetExtraData(HSTRING_TABLE, DWORD, LPVOID, DWORD); -WINSETUPAPI HSTRING_TABLE WINAPI StringTableInitialize(VOID); -WINSETUPAPI HSTRING_TABLE WINAPI StringTableInitializeEx(DWORD, DWORD); -WINSETUPAPI DWORD WINAPI StringTableLookUpString(HSTRING_TABLE, LPWSTR, DWORD); -WINSETUPAPI DWORD WINAPI StringTableLookUpStringEx(HSTRING_TABLE, LPWSTR, DWORD, LPVOID, DWORD); -WINSETUPAPI BOOL WINAPI StringTableSetExtraData(HSTRING_TABLE, DWORD, LPVOID, DWORD); -WINSETUPAPI LPWSTR WINAPI StringTableStringFromId(HSTRING_TABLE, DWORD); -WINSETUPAPI BOOL WINAPI StringTableStringFromIdEx(HSTRING_TABLE, DWORD, LPWSTR, LPDWORD); -WINSETUPAPI VOID WINAPI StringTableTrim(HSTRING_TABLE); +WINSETUPAPI DWORD WINAPI pSetupStringTableAddString(HSTRING_TABLE, LPWSTR, DWORD); +WINSETUPAPI DWORD WINAPI pSetupStringTableAddStringEx(HSTRING_TABLE, LPWSTR, DWORD, LPVOID, DWORD); +WINSETUPAPI VOID WINAPI pSetupStringTableDestroy(HSTRING_TABLE); +WINSETUPAPI HSTRING_TABLE WINAPI pSetupStringTableDuplicate(HSTRING_TABLE); +WINSETUPAPI BOOL WINAPI pSetupStringTableGetExtraData(HSTRING_TABLE, DWORD, LPVOID, DWORD); +WINSETUPAPI HSTRING_TABLE WINAPI pSetupStringTableInitialize(VOID); +WINSETUPAPI HSTRING_TABLE WINAPI pSetupStringTableInitializeEx(DWORD, DWORD); +WINSETUPAPI DWORD WINAPI pSetupStringTableLookUpString(HSTRING_TABLE, LPWSTR, DWORD); +WINSETUPAPI DWORD WINAPI pSetupStringTableLookUpStringEx(HSTRING_TABLE, LPWSTR, DWORD, LPVOID, DWORD); +WINSETUPAPI BOOL WINAPI pSetupStringTableSetExtraData(HSTRING_TABLE, DWORD, LPVOID, DWORD); +WINSETUPAPI LPWSTR WINAPI pSetupStringTableStringFromId(HSTRING_TABLE, DWORD); +WINSETUPAPI BOOL WINAPI pSetupStringTableStringFromIdEx(HSTRING_TABLE, DWORD, LPWSTR, LPDWORD); WINSETUPAPI DWORD WINAPI TakeOwnershipOfFile(PCWSTR); WINSETUPAPI PSTR WINAPI UnicodeToMultiByte(PCWSTR lpUnicodeStr, UINT uCodePage); From 231588606c726c70456d038a69f4062f2beca869 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Sun, 20 Feb 2011 22:20:23 +0000 Subject: [PATCH 095/287] [Win32k] - Remove unused class list pointer and clear the class registered flag. svn path=/trunk/; revision=50845 --- reactos/subsystems/win32/win32k/include/win32.h | 1 - reactos/subsystems/win32/win32k/main/dllmain.c | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/reactos/subsystems/win32/win32k/include/win32.h b/reactos/subsystems/win32/win32k/include/win32.h index c6dc142f2d3..521ef7a407c 100644 --- a/reactos/subsystems/win32/win32k/include/win32.h +++ b/reactos/subsystems/win32/win32k/include/win32.h @@ -178,7 +178,6 @@ typedef struct _PROCESSINFO DWORD dwLayout; DWORD dwRegisteredClasses; /* ReactOS */ - LIST_ENTRY ClassList; LIST_ENTRY MenuListHead; FAST_MUTEX PrivateFontListLock; LIST_ENTRY PrivateFontListHead; diff --git a/reactos/subsystems/win32/win32k/main/dllmain.c b/reactos/subsystems/win32/win32k/main/dllmain.c index c8cf433ce04..58afc05a97b 100644 --- a/reactos/subsystems/win32/win32k/main/dllmain.c +++ b/reactos/subsystems/win32/win32k/main/dllmain.c @@ -89,8 +89,6 @@ Win32kProcessCallback(struct _EPROCESS *Process, Win32Process->HeapMappings.UserMapping = UserBase; Win32Process->HeapMappings.Count = 1; - InitializeListHead(&Win32Process->ClassList); - InitializeListHead(&Win32Process->MenuListHead); InitializeListHead(&Win32Process->GDIBrushAttrFreeList); @@ -133,6 +131,7 @@ Win32kProcessCallback(struct _EPROCESS *Process, /* no process windows should exist at this point, or the function will assert! */ DestroyProcessClasses(Win32Process); + Win32Process->W32PF_flags &= ~W32PF_CLASSESREGISTERED; GDI_CleanupForProcess(Process); From 1e0e0dd6be6673c477b0de30ac6c41bef47a1c60 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Sun, 20 Feb 2011 22:20:42 +0000 Subject: [PATCH 096/287] [Win32k] - Restore original patch 50154. svn path=/trunk/; revision=50846 --- reactos/subsystems/win32/win32k/include/msgqueue.h | 1 + reactos/subsystems/win32/win32k/ntuser/clipboard.c | 2 +- reactos/subsystems/win32/win32k/ntuser/focus.c | 8 ++++---- reactos/subsystems/win32/win32k/ntuser/ntstubs.c | 2 +- reactos/subsystems/win32/win32k/ntuser/painting.c | 2 +- 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/reactos/subsystems/win32/win32k/include/msgqueue.h b/reactos/subsystems/win32/win32k/include/msgqueue.h index 6831cc701c4..84d803bb7fb 100644 --- a/reactos/subsystems/win32/win32k/include/msgqueue.h +++ b/reactos/subsystems/win32/win32k/include/msgqueue.h @@ -193,6 +193,7 @@ co_IntSendMessageTimeout(HWND hWnd, UINT uTimeout, ULONG_PTR *uResult); +BOOL FASTCALL UserSendNotifyMessage( HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam ); LRESULT FASTCALL co_IntSendMessageNoWait(HWND hWnd, UINT Msg, WPARAM wParam, diff --git a/reactos/subsystems/win32/win32k/ntuser/clipboard.c b/reactos/subsystems/win32/win32k/ntuser/clipboard.c index b75cb2da3f5..121d7af06ae 100644 --- a/reactos/subsystems/win32/win32k/ntuser/clipboard.c +++ b/reactos/subsystems/win32/win32k/ntuser/clipboard.c @@ -601,7 +601,7 @@ NtUserEmptyClipboard(VOID) if (ret && ClipboardOwnerWindow) { DPRINT("Clipboard: WM_DESTROYCLIPBOARD to %p", ClipboardOwnerWindow->head.h); - co_IntSendMessage( ClipboardOwnerWindow->head.h, WM_DESTROYCLIPBOARD, 0, 0); + co_IntSendMessageNoWait( ClipboardOwnerWindow->head.h, WM_DESTROYCLIPBOARD, 0, 0); } UserLeave(); diff --git a/reactos/subsystems/win32/win32k/ntuser/focus.c b/reactos/subsystems/win32/win32k/ntuser/focus.c index 0ce1b388bd2..39e11965462 100644 --- a/reactos/subsystems/win32/win32k/ntuser/focus.c +++ b/reactos/subsystems/win32/win32k/ntuser/focus.c @@ -79,10 +79,10 @@ co_IntSendActivateMessages(HWND hWndPrev, HWND hWnd, BOOL MouseActivate) /* Send palette messages */ if (co_IntPostOrSendMessage(hWnd, WM_QUERYNEWPALETTE, 0, 0)) { - UserPostMessage( HWND_BROADCAST, - WM_PALETTEISCHANGING, - (WPARAM)hWnd, - 0); + UserSendNotifyMessage( HWND_BROADCAST, + WM_PALETTEISCHANGING, + (WPARAM)hWnd, + 0); } if (Window->spwndPrev != NULL) diff --git a/reactos/subsystems/win32/win32k/ntuser/ntstubs.c b/reactos/subsystems/win32/win32k/ntuser/ntstubs.c index 44d718131c6..821d4d6ddf4 100644 --- a/reactos/subsystems/win32/win32k/ntuser/ntstubs.c +++ b/reactos/subsystems/win32/win32k/ntuser/ntstubs.c @@ -564,7 +564,7 @@ NtUserSetSysColors( } if (Ret) { - UserPostMessage(HWND_BROADCAST, WM_SYSCOLORCHANGE, 0, 0); + UserSendNotifyMessage(HWND_BROADCAST, WM_SYSCOLORCHANGE, 0, 0); } UserLeave(); return Ret; diff --git a/reactos/subsystems/win32/win32k/ntuser/painting.c b/reactos/subsystems/win32/win32k/ntuser/painting.c index 59e370c4c89..c9bc3146a60 100644 --- a/reactos/subsystems/win32/win32k/ntuser/painting.c +++ b/reactos/subsystems/win32/win32k/ntuser/painting.c @@ -1957,7 +1957,7 @@ UserRealizePalette(HDC hdc) hWnd = IntWindowFromDC(hdc); if (hWnd) // Send broadcast if dc is associated with a window. { // FYI: Thread locked in CallOneParam. - co_IntSendMessage((HWND)HWND_BROADCAST, WM_PALETTECHANGED, (WPARAM)hWnd, 0); + UserSendNotifyMessage((HWND)HWND_BROADCAST, WM_PALETTECHANGED, (WPARAM)hWnd, 0); } } return Ret; From 6e2693dad2f2a6fc85bf5524be88cad4841d8bd5 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Sun, 20 Feb 2011 22:20:51 +0000 Subject: [PATCH 097/287] [Win32k|User32] - WM_MDICREATE originates from user space so treat it as it should, fixes bug 5903. svn path=/trunk/; revision=50847 --- reactos/dll/win32/user32/windows/message.c | 20 ------ .../subsystems/win32/win32k/ntuser/message.c | 70 ------------------- 2 files changed, 90 deletions(-) diff --git a/reactos/dll/win32/user32/windows/message.c b/reactos/dll/win32/user32/windows/message.c index df82ac37049..f00e6670a00 100644 --- a/reactos/dll/win32/user32/windows/message.c +++ b/reactos/dll/win32/user32/windows/message.c @@ -296,26 +296,6 @@ MsgiKMToUMMessage(PMSG KMMsg, PMSG UMMsg) } break; - case WM_MDICREATE: - { - MDICREATESTRUCTW *mCs = (MDICREATESTRUCTW *) KMMsg->lParam; - PCHAR Class; - mCs->szTitle = (LPCWSTR) ((PCHAR) mCs + (DWORD_PTR) mCs->szTitle); - Class = (PCHAR) mCs + (DWORD_PTR) mCs->szClass; - if (L'A' == *((WCHAR *) Class)) - { - Class += sizeof(WCHAR); - mCs->szClass = (LPCWSTR)(DWORD_PTR) (*((ATOM *) Class)); - } - else - { - ASSERT(L'S' == *((WCHAR *) Class)); - Class += sizeof(WCHAR); - mCs->szClass = (LPCWSTR) Class; - } - } - break; - case WM_DDE_ACK: { PKMDDELPARAM DdeLparam = (PKMDDELPARAM) KMMsg->lParam; diff --git a/reactos/subsystems/win32/win32k/ntuser/message.c b/reactos/subsystems/win32/win32k/ntuser/message.c index 5c66991361b..c5761cc2b22 100644 --- a/reactos/subsystems/win32/win32k/ntuser/message.c +++ b/reactos/subsystems/win32/win32k/ntuser/message.c @@ -139,7 +139,6 @@ static MSGMEMORY MsgMemory[] = { WM_COPYGLOBALDATA, MMS_SIZE_WPARAM, MMS_FLAG_READ }, { WM_WINDOWPOSCHANGED, sizeof(WINDOWPOS), MMS_FLAG_READ }, { WM_WINDOWPOSCHANGING, sizeof(WINDOWPOS), MMS_FLAG_READWRITE }, - { WM_MDICREATE, MMS_SIZE_SPECIAL, MMS_FLAG_READWRITE }, }; static PMSGMEMORY FASTCALL @@ -165,7 +164,6 @@ static UINT FASTCALL MsgMemorySize(PMSGMEMORY MsgMemoryEntry, WPARAM wParam, LPARAM lParam) { CREATESTRUCTW *Cs; - MDICREATESTRUCTW *mCs; PUNICODE_STRING WindowName; PUNICODE_STRING ClassName; UINT Size = 0; @@ -204,21 +202,6 @@ MsgMemorySize(PMSGMEMORY MsgMemoryEntry, WPARAM wParam, LPARAM lParam) } break; - case WM_MDICREATE: - mCs = (MDICREATESTRUCTW *)lParam; - WindowName = (PUNICODE_STRING) mCs->szTitle; - ClassName = (PUNICODE_STRING) mCs->szClass; - Size = sizeof(MDICREATESTRUCTW) + WindowName->Length + sizeof(WCHAR); - if (IS_ATOM(ClassName->Buffer)) - { - Size += sizeof(WCHAR) + sizeof(ATOM); - } - else - { - Size += sizeof(WCHAR) + ClassName->Length + sizeof(WCHAR); - } - break; - case WM_NCCALCSIZE: Size = wParam ? sizeof(NCCALCSIZE_PARAMS) + sizeof(WINDOWPOS) : sizeof(RECT); break; @@ -254,7 +237,6 @@ PackParam(LPARAM *lParamPacked, UINT Msg, WPARAM wParam, LPARAM lParam, BOOL Non NCCALCSIZE_PARAMS *PackedNcCalcsize; CREATESTRUCTW *UnpackedCs; CREATESTRUCTW *PackedCs; - MDICREATESTRUCTW *UnpackedmCs, *PackedmCs; PLARGE_STRING WindowName; PUNICODE_STRING ClassName; POOL_TYPE PoolType; @@ -333,53 +315,6 @@ PackParam(LPARAM *lParamPacked, UINT Msg, WPARAM wParam, LPARAM lParam, BOOL Non ASSERT(CsData == (PCHAR) PackedCs + Size); *lParamPacked = (LPARAM) PackedCs; } - else if (WM_MDICREATE == Msg) - { - UnpackedmCs = (MDICREATESTRUCTW *) lParam; - WindowName = (PLARGE_STRING) UnpackedmCs->szTitle; - ClassName = (PUNICODE_STRING) UnpackedmCs->szClass; - Size = sizeof(MDICREATESTRUCTW) + WindowName->Length + sizeof(WCHAR); - if (IS_ATOM(ClassName->Buffer)) - { - Size += sizeof(WCHAR) + sizeof(ATOM); - } - else - { - Size += sizeof(WCHAR) + ClassName->Length + sizeof(WCHAR); - } - PackedmCs = ExAllocatePoolWithTag(PoolType, Size, TAG_MSG); - if (NULL == PackedmCs) - { - DPRINT1("Not enough memory to pack lParam\n"); - return STATUS_NO_MEMORY; - } - RtlCopyMemory(PackedmCs, UnpackedmCs, sizeof(MDICREATESTRUCTW)); - CsData = (PCHAR) (PackedmCs + 1); - PackedmCs->szTitle = (LPCWSTR) (CsData - (PCHAR) PackedmCs); - RtlCopyMemory(CsData, WindowName->Buffer, WindowName->Length); - CsData += WindowName->Length; - *((WCHAR *) CsData) = L'\0'; - CsData += sizeof(WCHAR); - PackedmCs->szClass = (LPCWSTR) (CsData - (PCHAR) PackedmCs); - if (IS_ATOM(ClassName->Buffer)) - { - *((WCHAR *) CsData) = L'A'; - CsData += sizeof(WCHAR); - *((ATOM *) CsData) = (ATOM)(DWORD_PTR) ClassName->Buffer; - CsData += sizeof(ATOM); - } - else - { - *((WCHAR *) CsData) = L'S'; - CsData += sizeof(WCHAR); - RtlCopyMemory(CsData, ClassName->Buffer, ClassName->Length); - CsData += ClassName->Length; - *((WCHAR *) CsData) = L'\0'; - CsData += sizeof(WCHAR); - } - ASSERT(CsData == (PCHAR) PackedmCs + Size); - *lParamPacked = (LPARAM) PackedmCs; - } else if (PoolType == NonPagedPool) { PMSGMEMORY MsgMemoryEntry; @@ -430,11 +365,6 @@ UnpackParam(LPARAM lParamPacked, UINT Msg, WPARAM wParam, LPARAM lParam, BOOL No return STATUS_SUCCESS; } - else if (WM_MDICREATE == Msg) - { - ExFreePool((PVOID) lParamPacked); - return STATUS_SUCCESS; - } else if (NonPagedPoolUsed) { PMSGMEMORY MsgMemoryEntry; From 98eeb0943d58867b5d190ce4d4933d98b093cf39 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 20 Feb 2011 22:30:50 +0000 Subject: [PATCH 098/287] [HAL] Patch by Rafal Harabien, : - Fix Port numbers and ranges in HalpDefaultIoSpace (divide by 0x100) By me: - Fix DMA 1 port range and fix comment See issue #5925 for more details. svn path=/trunk/; revision=50848 --- reactos/hal/halx86/generic/usage.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/reactos/hal/halx86/generic/usage.c b/reactos/hal/halx86/generic/usage.c index 8339119c39a..099a9e79648 100644 --- a/reactos/hal/halx86/generic/usage.c +++ b/reactos/hal/halx86/generic/usage.c @@ -43,17 +43,17 @@ ADDRESS_USAGE HalpDefaultIoSpace = { NULL, CmResourceTypePort, IDT_INTERNAL, { - {0x2000, 0xC000}, /* Everything */ - {0xC000, 0x1000}, /* DMA 2 */ - {0x8000, 0x1000}, /* DMA 1 */ - {0x2000, 0x200}, /* PIC 1 */ - {0xA000, 0x200}, /* PIC 2 */ - {0x4000, 0x400}, /* PIT 1 */ - {0x4800, 0x400}, /* PIT 2 */ - {0x9200, 0x100}, /* System Control Port A */ - {0x7000, 0x200}, /* CMOS */ - {0xF000, 0x1000}, /* x87 Coprocessor */ - {0xCF800, 0x800}, /* PCI 0 */ + {0x00, 0x20}, /* DMA 1 */ + {0xC0, 0x20}, /* DMA 2 */ + {0x80, 0x10}, /* DMA EPAR */ + {0x20, 0x2}, /* PIC 1 */ + {0xA0, 0x2}, /* PIC 2 */ + {0x40, 0x4}, /* PIT 1 */ + {0x48, 0x4}, /* PIT 2 */ + {0x92, 0x1}, /* System Control Port A */ + {0x70, 0x2}, /* CMOS */ + {0xF0, 0x10}, /* x87 Coprocessor */ + {0xCF8, 0x8}, /* PCI 0 */ {0,0}, } }; From 397fb380b333a9add80bbce027766e2a336db914 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 20 Feb 2011 22:57:31 +0000 Subject: [PATCH 099/287] [KERNEL32] Don't mix tab index and memory length... This fixes several bugs in GetTempFileNameW() and prevents memory corruption ~ Winetest regression is gone :) svn path=/trunk/; revision=50849 --- reactos/dll/win32/kernel32/file/file.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/reactos/dll/win32/kernel32/file/file.c b/reactos/dll/win32/kernel32/file/file.c index e04f873842d..4e1181069a3 100644 --- a/reactos/dll/win32/kernel32/file/file.c +++ b/reactos/dll/win32/kernel32/file/file.c @@ -1287,7 +1287,7 @@ GetTempFileNameW(IN LPCWSTR lpPathName, static const WCHAR Ext[] = { L'.', 't', 'm', 'p', UNICODE_NULL }; RtlInitUnicodeString(&PathNameString, lpPathName); - if (PathNameString.Length == 0 || PathNameString.Buffer[PathNameString.Length - sizeof(WCHAR)] != L'\\') + if (PathNameString.Length == 0 || PathNameString.Buffer[(PathNameString.Length / sizeof(WCHAR)) - 1] != L'\\') { PathNameString.Length += sizeof(WCHAR); } @@ -1306,15 +1306,15 @@ GetTempFileNameW(IN LPCWSTR lpPathName, { memmove(lpTempFileName, PathNameString.Buffer, PathNameString.Length); } - + /* PathName MUST BE a path. Check it */ - lpTempFileName[PathNameString.Length - sizeof(WCHAR)] = UNICODE_NULL; + lpTempFileName[(PathNameString.Length / sizeof(WCHAR)) - 1] = UNICODE_NULL; FileAttributes = GetFileAttributesW(lpTempFileName); if (FileAttributes == INVALID_FILE_ATTRIBUTES) { /* Append a '\' if necessary */ - lpTempFileName[PathNameString.Length - sizeof(WCHAR)] = L'\\'; - lpTempFileName[PathNameString.Length] = UNICODE_NULL; + lpTempFileName[(PathNameString.Length / sizeof(WCHAR)) - 1] = L'\\'; + lpTempFileName[PathNameString.Length / sizeof(WCHAR)] = UNICODE_NULL; FileAttributes = GetFileAttributesW(lpTempFileName); if (FileAttributes == INVALID_FILE_ATTRIBUTES) { @@ -1329,7 +1329,7 @@ GetTempFileNameW(IN LPCWSTR lpPathName, } /* Make sure not to mix path & prefix */ - lpTempFileName[PathNameString.Length - sizeof(WCHAR)] = L'\\'; + lpTempFileName[(PathNameString.Length / sizeof(WCHAR)) - 1] = L'\\'; RtlInitUnicodeString(&PrefixString, lpPrefixString); if (PrefixString.Length > 3 * sizeof(WCHAR)) { @@ -1337,7 +1337,7 @@ GetTempFileNameW(IN LPCWSTR lpPathName, } /* Append prefix to path */ - TempFileName = lpTempFileName + PathNameString.Length / sizeof(WCHAR) - 1; + TempFileName = lpTempFileName + PathNameString.Length / sizeof(WCHAR); memmove(TempFileName, PrefixString.Buffer, PrefixString.Length); TempFileName += PrefixString.Length / sizeof(WCHAR); @@ -1364,8 +1364,8 @@ GetTempFileNameW(IN LPCWSTR lpPathName, /* Convert that ID to wchar */ RtlIntegerToChar(ID, 0x10, sizeof(IDString), IDString); Let = IDString; - do - { + do + { *(TempFileName++) = RtlAnsiCharToUnicodeChar(&Let); } while (*Let != 0); From 80cc7f2ee8a50331f59e9ad82383dc49348f9494 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Sun, 20 Feb 2011 23:01:14 +0000 Subject: [PATCH 100/287] [PORTCLS] - Remove the oldest hack in portcls - Please report any regression(s) svn path=/trunk/; revision=50850 --- .../drivers/wdm/audio/backpln/portcls/dma_slave.cpp | 10 +++------- .../drivers/wdm/audio/backpln/portcls/interfaces.hpp | 6 ++---- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/reactos/drivers/wdm/audio/backpln/portcls/dma_slave.cpp b/reactos/drivers/wdm/audio/backpln/portcls/dma_slave.cpp index a68e25ea8ef..35109f06685 100644 --- a/reactos/drivers/wdm/audio/backpln/portcls/dma_slave.cpp +++ b/reactos/drivers/wdm/audio/backpln/portcls/dma_slave.cpp @@ -196,18 +196,14 @@ CDmaChannelInit::MaximumBufferSize() PHYSICAL_ADDRESS NTAPI -CDmaChannelInit::PhysicalAddress( - PPHYSICAL_ADDRESS Address) +CDmaChannelInit::PhysicalAddress() { DPRINT("CDmaChannelInit_PhysicalAdress: this %p Virtuell %p Physical High %x Low %x%\n", this, m_Buffer, m_Address.HighPart, m_Address.LowPart); - PHYSICAL_ADDRESS Result; - - Address->QuadPart = m_Address.QuadPart; - Result.QuadPart = (PtrToUlong(Address)); - return Result; + return m_Address; } + VOID NTAPI CDmaChannelInit::SetBufferSize( diff --git a/reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp b/reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp index 9163a6a78d6..bec3ccd68b1 100644 --- a/reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp +++ b/reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp @@ -903,8 +903,7 @@ typedef IPortPinDMus *PPORTPINDMUS; IN ULONG BufferSize); \ \ STDMETHODIMP_(PVOID) SystemAddress(void); \ - STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress( \ - IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \ + STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress(); \ STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \ \ STDMETHODIMP_(void) CopyTo( \ @@ -950,8 +949,7 @@ typedef IPortPinDMus *PPORTPINDMUS; IN ULONG BufferSize) PURE; \ \ STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \ - STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS_ \ - IN PPHYSICAL_ADDRESS Address) PURE; \ + STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS) PURE; \ STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \ \ STDMETHOD_(void, CopyTo)( THIS_ \ From 38242931f129ec33287ec847117542b0319183bc Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Mon, 21 Feb 2011 04:22:45 +0000 Subject: [PATCH 101/287] [MMEBUDDY] - Check if there is a reset request in progress while the wave thread is active. In that case exit the wave buffer commiting activity - In the reset routine, perform an alertable wait in order to make the apc io completion complete [PORTCLS] - Only perform copying audio bytes to dma buffer while the adapter is reset state is KSREST_END - Set the reset state indicator before canceling the audio buffers - Should fix the audio hang experienced in Winamp when skipping audio bytes svn path=/trunk/; revision=50851 --- .../wdm/audio/backpln/portcls/pin_wavecyclic.cpp | 10 ++++++++-- .../lib/drivers/sound/mmebuddy/wave/streaming.c | 16 +++++++--------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/reactos/drivers/wdm/audio/backpln/portcls/pin_wavecyclic.cpp b/reactos/drivers/wdm/audio/backpln/portcls/pin_wavecyclic.cpp index 7733606c6a5..fd7fc9de6c7 100644 --- a/reactos/drivers/wdm/audio/backpln/portcls/pin_wavecyclic.cpp +++ b/reactos/drivers/wdm/audio/backpln/portcls/pin_wavecyclic.cpp @@ -823,7 +823,7 @@ CPortPinWaveCyclic::RequestService() PC_ASSERT_IRQL(DISPATCH_LEVEL); - if (m_State == KSSTATE_RUN) + if (m_State == KSSTATE_RUN && m_ResetState == KSRESET_END) { Status = m_Stream->GetPosition(&Position); @@ -904,13 +904,19 @@ CPortPinWaveCyclic::DeviceIoControl( /* check for success */ if (NT_SUCCESS(Status)) { + //determine state of reset request if (ResetValue == KSRESET_BEGIN) { - m_IrpQueue->CancelBuffers(); + // start reset procress + // incoming read/write requests will be rejected m_ResetState = KSRESET_BEGIN; + + // cancel existing buffers + m_IrpQueue->CancelBuffers(); } else if (ResetValue == KSRESET_END) { + // end of reset process m_ResetState = KSRESET_END; } } diff --git a/reactos/lib/drivers/sound/mmebuddy/wave/streaming.c b/reactos/lib/drivers/sound/mmebuddy/wave/streaming.c index 63ac5e0a89d..320ac398238 100644 --- a/reactos/lib/drivers/sound/mmebuddy/wave/streaming.c +++ b/reactos/lib/drivers/sound/mmebuddy/wave/streaming.c @@ -60,7 +60,7 @@ DoWaveStreaming( } while ( ( SoundDeviceInstance->OutstandingBuffers < SoundDeviceInstance->BufferCount ) && - ( Header ) ) + ( Header ) && SoundDeviceInstance->ResetInProgress == FALSE) { HeaderExtension = (PWAVEHDR_EXTENSION) Header->reserved; SND_ASSERT( HeaderExtension ); @@ -176,8 +176,6 @@ CompleteIO( WaveHdr = (PWAVEHDR) SoundOverlapped->Header; SND_ASSERT( WaveHdr ); - SND_ASSERT( ERROR_SUCCESS == dwErrorCode ); - HdrExtension = (PWAVEHDR_EXTENSION) WaveHdr->reserved; SND_ASSERT( HdrExtension ); @@ -305,6 +303,12 @@ StopStreamingInSoundThread( /* cancel all current audio buffers */ FunctionTable->ResetStream(SoundDeviceInstance, DeviceType, TRUE); } + while(SoundDeviceInstance->OutstandingBuffers) + { + SND_TRACE(L"StopStreamingInSoundThread OutStandingBufferCount %lu\n", SoundDeviceInstance->OutstandingBuffers); + /* wait until pending i/o has completed */ + SleepEx(10, TRUE); + } /* complete all current headers */ while( SoundDeviceInstance->HeadWaveHeader ) @@ -316,12 +320,6 @@ StopStreamingInSoundThread( /* there should be no oustanding buffers now */ SND_ASSERT(SoundDeviceInstance->OutstandingBuffers == 0); - while(SoundDeviceInstance->OutstandingBuffers) - { - SND_ERR("StopStreamingInSoundThread OutStandingBufferCount %lu\n", SoundDeviceInstance->OutstandingBuffers); - /* my hack of doom */ - Sleep(10); - } /* Check if reset function is supported */ if (FunctionTable->ResetStream) From 168de1f20c5578faf7f61e5ff0e1821097783329 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Mon, 21 Feb 2011 07:23:18 +0000 Subject: [PATCH 102/287] [KERNEL32] Forgotten changes to .pspec. Why is there still a .def? svn path=/trunk/; revision=50852 --- reactos/dll/win32/kernel32/kernel32.pspec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/dll/win32/kernel32/kernel32.pspec b/reactos/dll/win32/kernel32/kernel32.pspec index 1a6f18b6e9a..48eb29a0763 100644 --- a/reactos/dll/win32/kernel32/kernel32.pspec +++ b/reactos/dll/win32/kernel32/kernel32.pspec @@ -46,7 +46,7 @@ @ stdcall BaseProcessInitPostImport() ; missing in Win 7 @ stdcall BaseQueryModuleData(str str ptr ptr ptr) ;check ;@ stdcall BaseThreadInitThunk ; Win 7 -;@ stdcall BaseSetLastNTError ; Win 7, not 64 bit +;@ stdcall BaseSetLastNTError ; Win 7, not 64 bit (present on w2k3 but not exported) @ stdcall BaseUpdateAppcompatCache(long long long) ;@ stdcall BaseVerifyUnicodeString ; Win 7 ;@ stdcall Basep8BitStringToDynamicUnicodeString ; Win 7 @@ -1210,7 +1210,7 @@ @ stdcall SetHandleInformation(long long long) @ stdcall SetInformationJobObject(long long ptr long) @ stub SetLastConsoleEventActive ; missing in XP SP3 -@ stdcall SetLastError(long) ntdll.RtlSetLastWin32Error +@ stdcall SetLastError(long) @ stub SetLocalPrimaryComputerNameA ; missing in XP SP3 @ stub SetLocalPrimaryComputerNameW ; missing in XP SP3 @ stdcall SetLocalTime(ptr) From 5d30cb38c362bb0e7e6b7e6e4a4565ed2368a5b7 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Mon, 21 Feb 2011 09:01:07 +0000 Subject: [PATCH 103/287] [Win32k] - Fix crash with win wine test. Win test works on my tree here and hardware as well. svn path=/trunk/; revision=50853 --- reactos/subsystems/win32/win32k/ntuser/message.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/reactos/subsystems/win32/win32k/ntuser/message.c b/reactos/subsystems/win32/win32k/ntuser/message.c index c5761cc2b22..1a1ae9d6c71 100644 --- a/reactos/subsystems/win32/win32k/ntuser/message.c +++ b/reactos/subsystems/win32/win32k/ntuser/message.c @@ -1624,11 +1624,6 @@ UserSendNotifyMessage( HWND hWnd, for (i = 0; List[i]; i++) { Ret = UserSendNotifyMessage(List[i], Msg, wParam, lParam); - if (!Ret) - { - DPRINT1("SendNotifyMessage: Failed in Broadcast!\n"); - break; - } } ExFreePool(List); } From 45efecf8e0f2b6623fd344cdf84b41df11a9d56f Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Mon, 21 Feb 2011 09:12:43 +0000 Subject: [PATCH 104/287] [RTL] - Silence this dprint. It's flooding the debug log. svn path=/trunk/; revision=50854 --- reactos/lib/rtl/unicode.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/lib/rtl/unicode.c b/reactos/lib/rtl/unicode.c index 619bba633a8..e49896efa4e 100644 --- a/reactos/lib/rtl/unicode.c +++ b/reactos/lib/rtl/unicode.c @@ -47,7 +47,7 @@ RtlAnsiCharToUnicodeChar(IN OUT PUCHAR *AnsiChar) } else { - DPRINT1("HACK::Shouldn't have happened! Consider fixing Usetup and registry entries it creates on install\n"); + DPRINT("HACK::Shouldn't have happened! Consider fixing Usetup and registry entries it creates on install\n"); Size = 1; } From 70fcc310923b127eef11632f700e09cc03bcb9cf Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Mon, 21 Feb 2011 13:33:13 +0000 Subject: [PATCH 105/287] [RTL/AVL] - Zero out contents of a newly allocated AVL table node. svn path=/trunk/; revision=50855 --- reactos/lib/rtl/avltable.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/reactos/lib/rtl/avltable.c b/reactos/lib/rtl/avltable.c index 6578a71d972..2b5c6085f00 100644 --- a/reactos/lib/rtl/avltable.c +++ b/reactos/lib/rtl/avltable.c @@ -70,11 +70,12 @@ RtlInsertElementGenericTableFullAvl(IN PRTL_AVL_TABLE Table, if (NewElement) *NewElement = FALSE; return NULL; } - + /* Data to return to user */ UserData = &((PTABLE_ENTRY_HEADER)NewNode)->UserData; /* Insert the node in the tree */ + RtlZeroMemory(NewNode, sizeof(RTL_BALANCED_LINKS)); RtlpInsertAvlTreeNode(Table, NewNode, NodeOrParent, SearchResult); /* Copy user buffer */ From 77aa443412889bfbb17d8203366f61a34d991cb2 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 21 Feb 2011 20:55:45 +0000 Subject: [PATCH 106/287] [USER32] Fix a typo. Fixes "Calling invalid routine number 0x10 in NtUserCallOneParam()" svn path=/trunk/; revision=50858 --- reactos/dll/win32/user32/windows/messagebox.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/dll/win32/user32/windows/messagebox.c b/reactos/dll/win32/user32/windows/messagebox.c index 13b374af9d3..3809f590790 100644 --- a/reactos/dll/win32/user32/windows/messagebox.c +++ b/reactos/dll/win32/user32/windows/messagebox.c @@ -890,7 +890,7 @@ BOOL WINAPI MessageBeep(UINT uType) { - return (BOOL)NtUserCallOneParam(ONEPARAM_ROUTINE_MESSAGEBEEP, uType); + return (BOOL)NtUserCallOneParam(uType, ONEPARAM_ROUTINE_MESSAGEBEEP); } From e9af1d723fb81ebcb2d76162ff9061ef33de9e61 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Mon, 21 Feb 2011 22:42:21 +0000 Subject: [PATCH 107/287] [RTL/DPH] - Implement heap free operation using already implemented busy/free/available/unused lists support and other base routines. - Implement missing place to free list and remove from busy list routines. - Implement find busy block routine (using AVL tree). - Fix a bug in RtlpDphCoalesceNodeIntoAvailable() which resulted in unwanted attempt to merge the only node with itself (which failed anyway). - Fix a bug in RtlpDphCoalesceNodeIntoAvailable() which incorrectly removed a node from available list (which is implemented as a standard NT double-linked list, compared to unused and free lists which are implemented as single-linked custom lists and busy list which is an AVL tree). Result of that bug was an infinite loop at the next attempt to traverse the list of available nodes. - In RtlpDphCoalesceFreeIntoAvailable() break when FreeAllocations becomes less than LeaveOnFreeList (before it would break 1 size too early). - Fix list traversal in RtlpDphSearchAvailableMemoryListForBestFit(). If it couldn't find a node, it would return the last node in the list instead of NULL. - In RtlpDphFindAvailableMemory(), a new smaller size should be 4 times smaller, not just 2. - Add a #if0-ed section in RtlpDphRemoveFromAvailableList which checks if a request to remove node not in the list performed. Used only for debugging. - Add a trace dprint to every type of list insert/removal operation for easier tracking. - Add break on NULL ptr freeing support. - RtlpDphSetProtectionAfterUse() is stubbed and protection is set directly in RtlpDphHeapFree(). To be moved into this function. svn path=/trunk/; revision=50860 --- reactos/lib/rtl/heappage.c | 259 ++++++++++++++++++++++++++++++++----- 1 file changed, 230 insertions(+), 29 deletions(-) diff --git a/reactos/lib/rtl/heappage.c b/reactos/lib/rtl/heappage.c index 28115bc894b..41a77727d16 100644 --- a/reactos/lib/rtl/heappage.c +++ b/reactos/lib/rtl/heappage.c @@ -137,20 +137,22 @@ LONG RtlpDphProtectFails; #define DPH_BREAK_ON_RELEASE_FAIL 0x04 #define DPH_BREAK_ON_FREE_FAIL 0x08 #define DPH_BREAK_ON_PROTECT_FAIL 0x10 +#define DPH_BREAK_ON_NULL_FREE 0x80 /* RtlpDphDebugOptions */ #define DPH_DEBUG_INTERNAL_VALIDATE 0x01 #define DPH_DEBUG_VERBOSE 0x04 /* DPH ExtraFlags */ -#define DPH_EXTRA_CHECK_UNDERRUN 0x10 -#define DPH_LOG_STACK_TRACES 0x0 //FIXME: Get correct value +#define DPH_EXTRA_LOG_STACK_TRACES 0x02 +#define DPH_EXTRA_CHECK_UNDERRUN 0x10 /* Fillers */ #define DPH_FILL 0xEEEEEEEE #define DPH_FILL_START_STAMP_1 0xABCDBBBB #define DPH_FILL_START_STAMP_2 0xABCDBBBA #define DPH_FILL_END_STAMP_1 0xDCBABBBB +#define DPH_FILL_END_STAMP_2 0xDCBABBBA #define DPH_FILL_SUFFIX 0xD0 #define DPH_FILL_INFIX 0xC0 @@ -452,10 +454,32 @@ RtlpDphPlaceOnBusyList(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK DphNode) DphRoot->nBusyAllocationBytesCommitted += DphNode->nVirtualBlockSize; } +VOID NTAPI +RtlpDphPlaceOnFreeList(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK Node) +{ + DPRINT("RtlpDphPlaceOnFreeList(%p %p)\n", DphRoot, Node); + + /* Node is being added to the tail of the list */ + Node->pNextAlloc = NULL; + + /* Add it to the tail of the linked list */ + if (DphRoot->pFreeAllocationListTail) + DphRoot->pFreeAllocationListTail->pNextAlloc = Node; + else + DphRoot->pFreeAllocationListHead = Node; + DphRoot->pFreeAllocationListTail = Node; + + /* Update byte counts taking in account this new node */ + DphRoot->nFreeAllocations++; + DphRoot->nFreeAllocationBytesCommitted += Node->nVirtualBlockSize; +} + VOID NTAPI RtlpDphPlaceOnPoolList(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK Node) { - /* DphNode is being added to the tail of the list */ + DPRINT("RtlpDphPlaceOnPoolList(%p %p)\n", DphRoot, Node); + + /* Node is being added to the tail of the list */ Node->pNextAlloc = NULL; /* Add it to the tail of the linked list */ @@ -473,6 +497,8 @@ RtlpDphPlaceOnPoolList(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK Node) VOID NTAPI RtlpDphPlaceOnVirtualList(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK Node) { + DPRINT("RtlpDphPlaceOnVirtualList(%p %p)\n", DphRoot, Node); + /* Add it to the head of the virtual list */ Node->pNextAlloc = DphRoot->pVirtualStorageListHead; if (!DphRoot->pVirtualStorageListHead) @@ -490,6 +516,8 @@ RtlpDphTakeNodeFromUnusedList(PDPH_HEAP_ROOT DphRoot) PDPH_HEAP_BLOCK Node = DphRoot->pUnusedNodeListHead; PDPH_HEAP_BLOCK Next; + DPRINT("RtlpDphTakeNodeFromUnusedList(%p), ret %p\n", DphRoot, Node); + /* Take the first entry */ if (!Node) return NULL; @@ -508,6 +536,8 @@ VOID NTAPI RtlpDphReturnNodeToUnusedList(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK Node) { + DPRINT("RtlpDphReturnNodeToUnusedList(%p, %p)\n", DphRoot, Node); + /* Add it back to the head of the unused list */ Node->pNextAlloc = DphRoot->pUnusedNodeListHead; if (!DphRoot->pUnusedNodeListHead) @@ -528,6 +558,37 @@ RtlpDphRemoveFromAvailableList(PDPH_HEAP_ROOT DphRoot, DPRINT("RtlpDphRemoveFromAvailableList(%p %p)\n", DphRoot, Node); + /* Check if it is in the list */ +#if 0 + { + PLIST_ENTRY CurEntry; + PDPH_HEAP_BLOCK NodeEntry; + BOOLEAN Found = FALSE; + + /* Find where to put this node according to its virtual address */ + CurEntry = DphRoot->AvailableAllocationHead.Flink; + + while (CurEntry != &DphRoot->AvailableAllocationHead) + { + NodeEntry = CONTAINING_RECORD(CurEntry, DPH_HEAP_BLOCK, AvailableEntry); + + if (NodeEntry == Node) + { + Found = TRUE; + break; + } + + CurEntry = CurEntry->Flink; + } + + if (!Found) + { + DPRINT1("Trying to remove non-existing in availlist node!\n"); + DbgBreakPoint(); + } + } +#endif + /* Remove it from the list */ RemoveEntryList(&Node->AvailableEntry); @@ -540,6 +601,24 @@ RtlpDphRemoveFromAvailableList(PDPH_HEAP_ROOT DphRoot, Node->AdjacencyEntry.Blink = (PLIST_ENTRY)POINTER_REMOVE_BIAS(Node->AdjacencyEntry.Blink); } +VOID NTAPI +RtlpDphRemoveFromBusyList(PDPH_HEAP_ROOT DphRoot, + PDPH_HEAP_BLOCK Node) +{ + BOOLEAN ElementPresent; + + DPRINT("RtlpDphRemoveFromBusyList(%p %p)\n", DphRoot, Node); + + /* Delete it from busy nodes table */ + ElementPresent = RtlDeleteElementGenericTableAvl(&DphRoot->BusyNodesTable, &Node->pUserAllocation); + ASSERT(ElementPresent == TRUE); + + /* Update counters */ + DphRoot->nBusyAllocations--; + DphRoot->nBusyAllocationBytesCommitted -= Node->nVirtualBlockSize; + DphRoot->nBusyAllocationBytesAccessible -= Node->nVirtualAccessSize; +} + VOID NTAPI RtlpDphRemoveFromFreeList(PDPH_HEAP_ROOT DphRoot, PDPH_HEAP_BLOCK Node, @@ -547,6 +626,8 @@ RtlpDphRemoveFromFreeList(PDPH_HEAP_ROOT DphRoot, { PDPH_HEAP_BLOCK Next; + DPRINT("RtlpDphRemoveFromFreeList(%p %p %p)\n", DphRoot, Node, Prev); + /* Detach it from the list */ Next = Node->pNextAlloc; if (DphRoot->pFreeAllocationListHead == Node) @@ -578,12 +659,13 @@ RtlpDphCoalesceNodeIntoAvailable(PDPH_HEAP_ROOT DphRoot, /* Find where to put this node according to its virtual address */ AvailListHead = &DphRoot->AvailableAllocationHead; + + /* Find a point where to insert an available node */ CurEntry = AvailListHead->Flink; while (CurEntry != AvailListHead) { NodeEntry = CONTAINING_RECORD(CurEntry, DPH_HEAP_BLOCK, AvailableEntry); - if (NodeEntry->pVirtualBlock >= Node->pVirtualBlock) { PrevNode = NodeEntry; @@ -592,10 +674,9 @@ RtlpDphCoalesceNodeIntoAvailable(PDPH_HEAP_ROOT DphRoot, CurEntry = CurEntry->Flink; } - /* Did we find a node to insert our one after? */ if (!PrevNode) { - /* No, just add to the head of the list then */ + /* That means either this list is empty, or we should add to the head of it */ InsertHeadList(AvailListHead, &Node->AvailableEntry); } else @@ -615,20 +696,22 @@ RtlpDphCoalesceNodeIntoAvailable(PDPH_HEAP_ROOT DphRoot, /* Insert after PrevNode */ InsertTailList(&PrevNode->AvailableEntry, &Node->AvailableEntry); } - } - /* Now check the next entry after our one */ - if (Node->AvailableEntry.Flink != AvailListHead) - { - NextNode = CONTAINING_RECORD(Node->AvailableEntry.Flink, DPH_HEAP_BLOCK, AvailableEntry);; - /* Node is not at the tail of the list, check if it's adjacent */ - if (Node->pVirtualBlock + Node->nVirtualBlockSize == NextNode->pVirtualBlock) + /* Now check the next entry after our one */ + if (Node->AvailableEntry.Flink != AvailListHead) { - /* They are adjacent - merge! */ - Node->nVirtualBlockSize += NextNode->nVirtualBlockSize; - Node->pNextAlloc = NextNode->pNextAlloc; - RtlpDphReturnNodeToUnusedList(DphRoot, NextNode); - DphRoot->nAvailableAllocations--; + NextNode = CONTAINING_RECORD(Node->AvailableEntry.Flink, DPH_HEAP_BLOCK, AvailableEntry); + /* Node is not at the tail of the list, check if it's adjacent */ + if (Node->pVirtualBlock + Node->nVirtualBlockSize == NextNode->pVirtualBlock) + { + /* They are adjacent - merge! */ + Node->nVirtualBlockSize += NextNode->nVirtualBlockSize; + + /* Remove next entry from the list and put it into unused entries list */ + RemoveEntryList(&NextNode->AvailableEntry); + RtlpDphReturnNodeToUnusedList(DphRoot, NextNode); + DphRoot->nAvailableAllocations--; + } } } } @@ -643,10 +726,12 @@ RtlpDphCoalesceFreeIntoAvailable(PDPH_HEAP_ROOT DphRoot, /* Make sure requested size is not too big */ ASSERT(FreeAllocations >= LeaveOnFreeList); + DPRINT("RtlpDphCoalesceFreeIntoAvailable(%p %d)\n", DphRoot, LeaveOnFreeList); + while (Node) { FreeAllocations--; - if (FreeAllocations <= LeaveOnFreeList) break; + if (FreeAllocations < LeaveOnFreeList) break; /* Get the next pointer, because it may be changed after following two calls */ Next = Node->pNextAlloc; @@ -657,6 +742,7 @@ RtlpDphCoalesceFreeIntoAvailable(PDPH_HEAP_ROOT DphRoot, /* And put into the available */ RtlpDphCoalesceNodeIntoAvailable(DphRoot, Node); + /* Go to the next node */ Node = Next; } } @@ -713,20 +799,21 @@ RtlpDphSearchAvailableMemoryListForBestFit(PDPH_HEAP_ROOT DphRoot, SIZE_T Size) { PLIST_ENTRY CurEntry; - PDPH_HEAP_BLOCK Node; + PDPH_HEAP_BLOCK Node, NodeFound = NULL; CurEntry = DphRoot->AvailableAllocationHead.Flink; - while (TRUE) + while (CurEntry != &DphRoot->AvailableAllocationHead) { - /* If we reached end of the list - return right away */ - if (CurEntry == &DphRoot->AvailableAllocationHead) return NULL; - /* Get the current available node */ Node = CONTAINING_RECORD(CurEntry, DPH_HEAP_BLOCK, AvailableEntry); /* Check its size */ - if (Node->nVirtualBlockSize >= Size) break; + if (Node->nVirtualBlockSize >= Size) + { + NodeFound = Node; + break; + } /* Move to the next available entry */ CurEntry = CurEntry->Flink; @@ -736,7 +823,7 @@ RtlpDphSearchAvailableMemoryListForBestFit(PDPH_HEAP_ROOT DphRoot, //ASSERT(IS_BIASED_POINTER(Node->AdjacencyEntry.Flink)); //ASSERT(IS_BIASED_POINTER(Node->AdjacencyEntry.Blink)); - return Node; + return NodeFound; } PDPH_HEAP_BLOCK NTAPI @@ -757,7 +844,7 @@ RtlpDphFindAvailableMemory(PDPH_HEAP_ROOT DphRoot, if (DphRoot->nFreeAllocations <= DPH_FREE_LIST_MINIMUM) break; /* Calculate a new free list size */ - NewSize = DphRoot->nFreeAllocations >> 1; + NewSize = DphRoot->nFreeAllocations >> 2; if (NewSize < DPH_FREE_LIST_MINIMUM) NewSize = DPH_FREE_LIST_MINIMUM; /* Coalesce free into available */ @@ -795,6 +882,23 @@ RtlpDphFindAvailableMemory(PDPH_HEAP_ROOT DphRoot, return Node; } +PDPH_HEAP_BLOCK NTAPI +RtlpDphFindBusyMemory(PDPH_HEAP_ROOT DphRoot, + PVOID pUserMem) +{ + PDPH_HEAP_BLOCK Node; + PVOID Ptr; + + /* Lookup busy block in AVL */ + Ptr = RtlLookupElementGenericTableAvl(&DphRoot->BusyNodesTable, &pUserMem); + if (!Ptr) return NULL; + + /* Restore pointer to the heap block */ + Node = CONTAINING_RECORD(Ptr, DPH_HEAP_BLOCK, pUserAllocation); + ASSERT(Node->pUserAllocation == pUserMem); + return Node; +} + NTSTATUS NTAPI RtlpDphSetProtectionBeforeUse(PDPH_HEAP_ROOT DphRoot, PUCHAR VirtualBlock, ULONG UserSize) { @@ -817,6 +921,20 @@ RtlpDphSetProtectionBeforeUse(PDPH_HEAP_ROOT DphRoot, PUCHAR VirtualBlock, ULONG return RtlpDphProtectVm(Base, UserSize, Protection); } +NTSTATUS NTAPI +RtlpDphSetProtectionAfterUse(PDPH_HEAP_ROOT DphRoot, /*PUCHAR VirtualBlock*/PDPH_HEAP_BLOCK Node) +{ + // FIXME: Bring stuff here + if (DphRoot->ExtraFlags & DPH_EXTRA_CHECK_UNDERRUN) + { + } + else + { + } + + return STATUS_SUCCESS; +} + PDPH_HEAP_BLOCK NTAPI RtlpDphAllocateNode(PDPH_HEAP_ROOT DphRoot) { @@ -1685,8 +1803,91 @@ RtlpPageHeapFree(HANDLE HeapPtr, ULONG Flags, PVOID Ptr) { - UNIMPLEMENTED; - return FALSE; + PDPH_HEAP_ROOT DphRoot; + PDPH_HEAP_BLOCK Node; + ULONG ValidationInfo; + PDPH_BLOCK_INFORMATION Info; + + /* Check for a NULL pointer freeing */ + if (!HeapPtr) + { + if (RtlpDphBreakOptions & DPH_BREAK_ON_NULL_FREE) + { + DPRINT1("Page heap: freeing a null pointer \n"); + DbgBreakPoint(); + } + return TRUE; + } + + /* Get a pointer to the heap root */ + DphRoot = RtlpDphPointerFromHandle(HeapPtr); + if (!DphRoot) return FALSE; + + /* Acquire the heap lock */ + RtlpDphPreProcessing(DphRoot, Flags); + + /* Perform internal validation if specified by flags */ + if (RtlpDphDebugOptions & DPH_DEBUG_INTERNAL_VALIDATE) + RtlpDphInternalValidatePageHeap(DphRoot, NULL, 0); + + /* Add heap flags */ + Flags |= DphRoot->HeapFlags; + + /* Find busy memory */ + Node = RtlpDphFindBusyMemory(DphRoot, Ptr); + + if (!Node) + { + /* This block was not found in page heap, try a normal heap instead */ + //RtlpDphNormalHeapFree(); + ASSERT(FALSE); + } + + if (!(DphRoot->ExtraFlags & DPH_EXTRA_CHECK_UNDERRUN)) + { + /* Check and report corrupted block */ + if (!RtlpDphIsPageHeapBlock(DphRoot, Ptr, &ValidationInfo, TRUE)) + { + RtlpDphReportCorruptedBlock(DphRoot, 1, Ptr, ValidationInfo); + } + + // FIXME: Should go inside RtlpDphSetProtectionAfterUse + if (Node->nVirtualAccessSize != 0) + { + /* Set stamps */ + Info = (PDPH_BLOCK_INFORMATION)Node->pUserAllocation - 1; + Info->StartStamp = DPH_FILL_START_STAMP_2; + Info->EndStamp = DPH_FILL_END_STAMP_2; + + RtlpDphProtectVm(Node->pVirtualBlock, Node->nVirtualAccessSize, PAGE_NOACCESS); + } + } + else + { + // FIXME: Should go inside RtlpDphSetProtectionAfterUse + if (Node->nVirtualAccessSize != 0) + RtlpDphProtectVm(Node->pVirtualBlock + PAGE_SIZE, Node->nVirtualAccessSize, PAGE_NOACCESS); + } + + /* Set new protection */ + RtlpDphSetProtectionAfterUse(DphRoot, Node); + + /* Remove it from the list of busy nodes */ + RtlpDphRemoveFromBusyList(DphRoot, Node); + + /* And put it into the list of free nodes */ + RtlpDphPlaceOnFreeList(DphRoot, Node); + + //if (DphRoot->ExtraFlags & DPH_EXTRA_LOG_STACK_TRACES) + // Node->StackTrace = RtlpDphLogStackTrace(3); + //else + Node->StackTrace = NULL; + + /* Leave the heap lock */ + RtlpDphPostProcessing(DphRoot); + + /* Return success */ + return TRUE; } PVOID NTAPI From 39a0c140c207aaf9b8d08d6977fba9db089b3fbf Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 21 Feb 2011 23:11:53 +0000 Subject: [PATCH 108/287] [CRT] Improve _getdrive and _tchdir. Patch by devpao (devotip at tiscali dot it), small formatting change by me. See issue #5848 for more details. svn path=/trunk/; revision=50861 --- reactos/lib/sdk/crt/direct/chdir.c | 9 ++++++--- reactos/lib/sdk/crt/direct/getdrive.c | 9 ++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/reactos/lib/sdk/crt/direct/chdir.c b/reactos/lib/sdk/crt/direct/chdir.c index 5515d4622cb..f16e0d44cf5 100644 --- a/reactos/lib/sdk/crt/direct/chdir.c +++ b/reactos/lib/sdk/crt/direct/chdir.c @@ -17,10 +17,13 @@ int _tchdir(const _TCHAR* _path) } /* Update the drive-specific current directory variable */ - if (GetCurrentDirectoryW(MAX_PATH, newdir) && newdir[1] == L':') + if (GetCurrentDirectoryW(MAX_PATH, newdir) >= 2) { - WCHAR envvar[4] = { L'=', towupper(newdir[0]), L':', L'\0' }; - SetEnvironmentVariableW(envvar, newdir); + if (newdir[1] == L':') + { + WCHAR envvar[4] = { L'=', towupper(newdir[0]), L':', L'\0' }; + SetEnvironmentVariableW(envvar, newdir); + } } return 0; diff --git a/reactos/lib/sdk/crt/direct/getdrive.c b/reactos/lib/sdk/crt/direct/getdrive.c index de790868d95..d36aec88591 100644 --- a/reactos/lib/sdk/crt/direct/getdrive.c +++ b/reactos/lib/sdk/crt/direct/getdrive.c @@ -20,9 +20,12 @@ int _getdrive(void) { WCHAR buffer[MAX_PATH]; - if (GetCurrentDirectoryW( MAX_PATH, buffer ) && - buffer[0] >= 'A' && buffer[0] <= 'z' && buffer[1] == ':') - return towupper(buffer[0]) - 'A' + 1; + if (GetCurrentDirectoryW( MAX_PATH, buffer )>=2) + { + buffer[0]=towupper(buffer[0]); + if (buffer[0] >= L'A' && buffer[0] <= L'Z' && buffer[1] == L':') + return buffer[0] - L'A' + 1; + } return 0; } From 899ae979f5855204f12c7992f25a57bdb18180aa Mon Sep 17 00:00:00 2001 From: Daniel Reimer Date: Mon, 21 Feb 2011 23:26:03 +0000 Subject: [PATCH 109/287] Update rapps database. svn path=/trunk/; revision=50862 --- .../applications/rapps/rapps/libreoffice.txt | 6 ++--- .../applications/rapps/rapps/mirandaim.txt | 4 ++-- reactos/base/applications/rapps/rapps/mpc.txt | 4 ++-- .../rapps/rapps/openoffice3.0.txt | 24 +++++++++---------- .../base/applications/rapps/rapps/opera.txt | 4 ++-- .../base/applications/rapps/rapps/scite.txt | 4 ++-- reactos/base/applications/rapps/rapps/vlc.txt | 6 ++--- 7 files changed, 26 insertions(+), 26 deletions(-) diff --git a/reactos/base/applications/rapps/rapps/libreoffice.txt b/reactos/base/applications/rapps/rapps/libreoffice.txt index 60c99c5f174..d624bf67319 100644 --- a/reactos/base/applications/rapps/rapps/libreoffice.txt +++ b/reactos/base/applications/rapps/rapps/libreoffice.txt @@ -2,13 +2,13 @@ [Section] Name = LibreOffice -Version = 3.3.0 RC3 +Version = 3.3.0 Licence = LGPL Description = Former called OpenOffice. Open Source Office Suite. -Size = 209.0MB +Size = 215.0MB Category = 6 URLSite = http://www.documentfoundation.org/ -URLDownload = http://download.documentfoundation.org/libreoffice/testing/3.3.0-rc3/win/x86/LibO_3.3.0rc3_Win_x86_install_multi.exe +URLDownload = http://download.documentfoundation.org/libreoffice/stable/3.3.0/win/x86/LibO_3.3.0_Win_x86_install_multi.exe CDPath = none [Section.0407] diff --git a/reactos/base/applications/rapps/rapps/mirandaim.txt b/reactos/base/applications/rapps/rapps/mirandaim.txt index 68a2a602090..dc2184fd02a 100644 --- a/reactos/base/applications/rapps/rapps/mirandaim.txt +++ b/reactos/base/applications/rapps/rapps/mirandaim.txt @@ -2,13 +2,13 @@ [Section] Name = Miranda IM -Version = 0.9.13 +Version = 0.9.16 Licence = GPL Description = Open source multiprotocol instant messaging application - May not work completely. Size = 3.0MB Category = 5 URLSite = http://www.miranda-im.org/ -URLDownload = http://miranda.googlecode.com/files/miranda-im-v0.9.13-unicode.exe +URLDownload = http://miranda.googlecode.com/files/miranda-im-v0.9.16-unicode.exe CDPath = none [Section.0407] diff --git a/reactos/base/applications/rapps/rapps/mpc.txt b/reactos/base/applications/rapps/rapps/mpc.txt index d89fb38bb6a..253eb94b665 100644 --- a/reactos/base/applications/rapps/rapps/mpc.txt +++ b/reactos/base/applications/rapps/rapps/mpc.txt @@ -2,13 +2,13 @@ [Section] Name = Media Player Classic Home Cinema -Version = 1.4.2499 +Version = 1.5.0.2827 Licence = GPL Description = A media player. Size = 4.9MB Category = 1 URLSite = http://mpc-hc.sourceforge.net/ -URLDownload = http://freefr.dl.sourceforge.net/project/mpc-hc/MPC%20HomeCinema%20-%20Win32/MPC-HC%20v1.4.2499.0_32%20bits/MPC-HomeCinema.1.4.2499.0.x86.exe +URLDownload = http://freefr.dl.sourceforge.net/project/mpc-hc/MPC%20HomeCinema%20-%20Win32/MPC-HC%20v1.5.0.2827_32%20bits/MPC-HomeCinema.1.5.0.2827.x86.exe CDPath = none [Section.0407] diff --git a/reactos/base/applications/rapps/rapps/openoffice3.0.txt b/reactos/base/applications/rapps/rapps/openoffice3.0.txt index 2c06235c344..8729cb6232c 100644 --- a/reactos/base/applications/rapps/rapps/openoffice3.0.txt +++ b/reactos/base/applications/rapps/rapps/openoffice3.0.txt @@ -1,36 +1,36 @@ ; UTF-8 [Section] -Name = OpenOffice 3.0 -Version = 3.2.1 +Name = OpenOffice 3.3 +Version = 3.3.0 Licence = LGPL Description = THE Open Source Office Suite. -Size = 134.0MB +Size = 137.0MB Category = 6 URLSite = http://www.openoffice.org/ -URLDownload = http://ftp3.gwdg.de/pub/openoffice/stable/3.2.1/OOo_3.2.1_Win_x86_install_en-US.exe +URLDownload = http://ftp3.gwdg.de/pub/openoffice/stable/3.3.0/OOo_3.3.0_Win_x86_install_en-US.exe CDPath = none [Section.0407] Description = DIE Open Source Office Suite. URLSite = http://de.openoffice.org/ -Size = 144.0MB -URLDownload = http://ftp3.gwdg.de/pub/openoffice/localized/de/3.2.1/OOo_3.2.1_Win_x86_install_de.exe +Size = 160.0MB +URLDownload = http://ftp3.gwdg.de/pub/openoffice/localized/de/3.3.0/OOo_3.3.0_Win_x86_install-wJRE_de.exe [Section.040a] Description = La suite de ofimática de código abierto. URLSite = http://es.openoffice.org/ -Size = 144.0MB -URLDownload = http://ftp3.gwdg.de/pub/openoffice/localized/es/3.2.1/OOo_3.2.1_Win_x86_install-wJRE_es.exe +Size = 132.0MB +URLDownload = http://ftp.gwdg.de/pub/openoffice/localized/es/3.3.0/OOo_3.3.0_Win_x86_install_es.exe [Section.0415] Description = Otwarty pakiet biurowy. URLSite = http://pl.openoffice.org/ -Size = 130.0MB -URLDownload = http://ftp3.gwdg.de/pub/openoffice/localized/pl/3.2.1/OOo_3.2.1_Win_x86_install_pl.exe +Size = 134.0MB +URLDownload = http://ftp3.gwdg.de/pub/openoffice/localized/pl/3.3.0/OOo_3.3.0_Win_x86_install_pl.exe [Section.0422] Description = Відкритий офісний пакет. URLSite = http://ua.openoffice.org/ -Size = 128.0MB -URLDownload = http://ftp3.gwdg.de/pub/openoffice/localized/ru/3.2.1/OOo_3.2.1_Win_x86_install_ru.exe +Size = 133.0MB +URLDownload = http://ftp3.gwdg.de/pub/openoffice/localized/ru/3.3.0/OOo_3.3.0_Win_x86_install_ru.exe diff --git a/reactos/base/applications/rapps/rapps/opera.txt b/reactos/base/applications/rapps/rapps/opera.txt index f01bd9d833d..3f899459666 100644 --- a/reactos/base/applications/rapps/rapps/opera.txt +++ b/reactos/base/applications/rapps/rapps/opera.txt @@ -2,13 +2,13 @@ [Section] Name = Opera -Version = 11.00 +Version = 11.01 Licence = Freeware Description = The popular Opera Browser with many advanced features and including a Mail and BitTorrent client. Size = 8.9M Category = 5 URLSite = http://www.opera.com/ -URLDownload = http://get4.opera.com/pub/opera/win/1100/int/Opera_1100_int_Setup.exe +URLDownload = http://get4.opera.com/pub/opera/win/1101/int/Opera_1101_int_Setup.exe CDPath = none [Section.0405] diff --git a/reactos/base/applications/rapps/rapps/scite.txt b/reactos/base/applications/rapps/rapps/scite.txt index 2b5ae7117f4..02a7793e4dd 100644 --- a/reactos/base/applications/rapps/rapps/scite.txt +++ b/reactos/base/applications/rapps/rapps/scite.txt @@ -2,13 +2,13 @@ [Section] Name = SciTE -Version = 2.23 +Version = 2.24 Licence = Freeware Description = SciTE is a SCIntilla based Text Editor. Originally built to demonstrate Scintilla, it has grown to be a generally useful editor with facilities for building and running programs. Size = 0.6M Category = 7 URLSite = http://www.scintilla.org/ -URLDownload = http://kent.dl.sourceforge.net/project/scintilla/SciTE/2.23/Sc223.exe +URLDownload = http://kent.dl.sourceforge.net/project/scintilla/SciTE/2.24/Sc224.exe CDPath = none [Section.0407] diff --git a/reactos/base/applications/rapps/rapps/vlc.txt b/reactos/base/applications/rapps/rapps/vlc.txt index 76c8c74fe8b..a4cb7b86bc9 100644 --- a/reactos/base/applications/rapps/rapps/vlc.txt +++ b/reactos/base/applications/rapps/rapps/vlc.txt @@ -2,13 +2,13 @@ [Section] Name = VLC media player -Version = 1.1.5 +Version = 1.1.7 Licence = GPL Description = A media player. -Size = 19.1MB +Size = 19.4MB Category = 1 URLSite = http://www.videolan.org/vlc/ -URLDownload = http://ignum.dl.sourceforge.net/project/vlc/1.1.5/win32/vlc-1.1.5-win32.exe +URLDownload = http://kent.dl.sourceforge.net/project/vlc/1.1.7/win32/vlc-1.1.7-win32.exe CDPath = none [Section.0407] From 75e685f7ef2107a0826adbc37d797df8fa32c0a1 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 22 Feb 2011 09:59:49 +0000 Subject: [PATCH 110/287] [NOTEPAD] Patch by EDIJS : Improve window caption string. By me: use StringCchCat instead of _tcscat to prevent possible buffer overruns. See issue #5871 for more details. svn path=/trunk/; revision=50864 --- reactos/base/applications/notepad/dialog.c | 30 +++++++++------------ reactos/base/applications/notepad/notepad.h | 1 + 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/reactos/base/applications/notepad/dialog.c b/reactos/base/applications/notepad/dialog.c index 3bc53ac9383..541a180e23f 100644 --- a/reactos/base/applications/notepad/dialog.c +++ b/reactos/base/applications/notepad/dialog.c @@ -112,31 +112,27 @@ VOID ShowLastError(void) /** * Sets the caption of the main window according to Globals.szFileTitle: - * Notepad - (untitled) if no file is open - * Notepad - [filename] if a file is given + * (untitled) - Notepad if no file is open + * [filename] - Notepad if a file is given */ static void UpdateWindowCaption(void) { TCHAR szCaption[MAX_STRING_LEN]; - TCHAR szUntitled[MAX_STRING_LEN]; + TCHAR szNotepad[MAX_STRING_LEN]; - LoadString(Globals.hInstance, STRING_NOTEPAD, szCaption, SIZEOF(szCaption)); + LoadString(Globals.hInstance, STRING_NOTEPAD, szNotepad, SIZEOF(szNotepad)); - if (Globals.szFileTitle[0] != '\0') { - static const TCHAR bracket_l[] = _T(" - ["); - static const TCHAR bracket_r[] = _T("]"); - _tcscat(szCaption, bracket_l); - _tcscat(szCaption, Globals.szFileTitle); - _tcscat(szCaption, bracket_r); + if (Globals.szFileTitle[0] != '\0') + { + StringCchCat(szCaption, MAX_STRING_LEN, Globals.szFileTitle); } else { - static const TCHAR hyphen[] = _T(" - "); - LoadString(Globals.hInstance, STRING_UNTITLED, szUntitled, SIZEOF(szUntitled)); - _tcscat(szCaption, hyphen); - _tcscat(szCaption, szUntitled); + LoadString(Globals.hInstance, STRING_UNTITLED, szCaption, SIZEOF(szCaption)); } - + + StringCchCat(szCaption, MAX_STRING_LEN, _T(" - ")); + StringCchCat(szCaption, MAX_STRING_LEN, szNotepad); SetWindowText(Globals.hMainWnd, szCaption); } @@ -684,7 +680,7 @@ VOID DIALOG_EditTimeDate(VOID) _tcscat(szText, _T(" ")); GetDateFormat(LOCALE_USER_DEFAULT, DATE_LONGDATE, &st, NULL, szDate, MAX_STRING_LEN); _tcscat(szText, szDate); - SendMessage(Globals.hEdit, EM_REPLACESEL, TRUE, (LPARAM)szDate); + SendMessage(Globals.hEdit, EM_REPLACESEL, TRUE, (LPARAM)szText); } VOID DoCreateStatusBar(VOID) @@ -766,7 +762,7 @@ VOID DoCreateEditWindow(VOID) { DWORD dwStyle; int iSize; - LPTSTR pTemp; + LPTSTR pTemp = NULL; iSize = 0; diff --git a/reactos/base/applications/notepad/notepad.h b/reactos/base/applications/notepad/notepad.h index 26ea408b87f..bc910ab275e 100644 --- a/reactos/base/applications/notepad/notepad.h +++ b/reactos/base/applications/notepad/notepad.h @@ -6,6 +6,7 @@ #include #include #include +#include #include "main.h" #include "dialog.h" From e9b58620aa1dd93f377967fb9ce2227c75e28ec3 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 22 Feb 2011 17:29:32 +0000 Subject: [PATCH 111/287] [CRT] Fix special behaviour of wsprintf: when used with # flag, the "0x" prefix does not count into the field width, so we have to add additional 2 characters here. Fixes Opera installer. See issue #5900 for more details. svn path=/trunk/; revision=50866 --- reactos/lib/sdk/crt/printf/streamout.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/reactos/lib/sdk/crt/printf/streamout.c b/reactos/lib/sdk/crt/printf/streamout.c index c1f654f2c89..8e9ce4f667a 100644 --- a/reactos/lib/sdk/crt/printf/streamout.c +++ b/reactos/lib/sdk/crt/printf/streamout.c @@ -587,6 +587,9 @@ streamout(FILE *stream, const TCHAR *format, va_list argptr) if (flags & FLAG_SPECIAL) { prefix = &digits[16]; +#ifdef _USER32_WSPRINTF + fieldwidth += 2; +#endif } case _T('u'): From f617d8910c272c78e4ad45b0b9d509eb2e7ef0ea Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Tue, 22 Feb 2011 18:43:38 +0000 Subject: [PATCH 112/287] [KERNEL32] Don't make GetBinaryTypeA() rely on Wine's strings conversions functions svn path=/trunk/; revision=50867 --- reactos/dll/win32/kernel32/file/bintype.c | 46 ++++++++++++++++------- 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/reactos/dll/win32/kernel32/file/bintype.c b/reactos/dll/win32/kernel32/file/bintype.c index e59a1c48c26..824121c395c 100644 --- a/reactos/dll/win32/kernel32/file/bintype.c +++ b/reactos/dll/win32/kernel32/file/bintype.c @@ -301,23 +301,43 @@ GetBinaryTypeW ( */ BOOL WINAPI -GetBinaryTypeA ( - LPCSTR lpApplicationName, - LPDWORD lpBinaryType - ) +GetBinaryTypeA(IN LPCSTR lpApplicationName, + OUT LPDWORD lpBinaryType) { - PWCHAR ApplicationNameW; + ANSI_STRING ApplicationNameString; + UNICODE_STRING ApplicationNameW; + BOOL StringAllocated = FALSE, Result; + NTSTATUS Status; - if(!lpApplicationName || !lpBinaryType) - { - SetLastError(ERROR_INVALID_PARAMETER); - return FALSE; - } + RtlInitAnsiString(&ApplicationNameString, lpApplicationName); - if (!(ApplicationNameW = FilenameA2W(lpApplicationName, FALSE))) - return FALSE; + if (ApplicationNameString.Length * sizeof(WCHAR) >= NtCurrentTeb()->StaticUnicodeString.MaximumLength) + { + StringAllocated = TRUE; + Status = RtlAnsiStringToUnicodeString(&ApplicationNameW, &ApplicationNameString, TRUE); + } + else + { + Status = RtlAnsiStringToUnicodeString(&(NtCurrentTeb()->StaticUnicodeString), &ApplicationNameString, FALSE); + } - return GetBinaryTypeW(ApplicationNameW, lpBinaryType); + if (!NT_SUCCESS(Status)) + { + BaseSetLastNTError(Status); + return FALSE; + } + + if (StringAllocated) + { + Result = GetBinaryTypeW(ApplicationNameW.Buffer, lpBinaryType); + RtlFreeUnicodeString(&ApplicationNameW); + } + else + { + Result = GetBinaryTypeW(NtCurrentTeb()->StaticUnicodeString.Buffer, lpBinaryType); + } + + return Result; } /* EOF */ From 8dc411563ba5e15e895d7172d38c8c2eca137950 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Tue, 22 Feb 2011 18:56:46 +0000 Subject: [PATCH 113/287] [KERNEL32] Don't make FindFirstChangeNotificationA() rely on Wine's strings conversions functions svn path=/trunk/; revision=50868 --- reactos/dll/win32/kernel32/file/cnotify.c | 36 ++++++++++++++++------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/reactos/dll/win32/kernel32/file/cnotify.c b/reactos/dll/win32/kernel32/file/cnotify.c index 3f6420bf7ec..37814a13384 100644 --- a/reactos/dll/win32/kernel32/file/cnotify.c +++ b/reactos/dll/win32/kernel32/file/cnotify.c @@ -9,10 +9,14 @@ * Created 01/11/98 */ +/* INCLUDES *****************************************************************/ + #include #define NDEBUG #include +/* FUNCTIONS ****************************************************************/ + /* * @implemented */ @@ -35,20 +39,30 @@ FindCloseChangeNotification (HANDLE hChangeHandle) */ HANDLE WINAPI -FindFirstChangeNotificationA ( - LPCSTR lpPathName, - BOOL bWatchSubtree, - DWORD dwNotifyFilter - ) +FindFirstChangeNotificationA(IN LPCSTR lpPathName, + IN BOOL bWatchSubtree, + IN DWORD dwNotifyFilter) { - PWCHAR PathNameW; + NTSTATUS Status; + ANSI_STRING PathNameString; - if (!(PathNameW = FilenameA2W(lpPathName, FALSE))) - return INVALID_HANDLE_VALUE; + RtlInitAnsiString(&PathNameString, lpPathName); + Status = RtlAnsiStringToUnicodeString(&(NtCurrentTeb()->StaticUnicodeString), &PathNameString, FALSE); + if (!NT_SUCCESS(Status)) + { + if (Status != STATUS_BUFFER_OVERFLOW) + { + SetLastError(ERROR_FILENAME_EXCED_RANGE); + } + else + { + BaseSetLastNTError(Status); + } + return INVALID_HANDLE_VALUE; + } - return FindFirstChangeNotificationW (PathNameW , - bWatchSubtree, - dwNotifyFilter); + return FindFirstChangeNotificationW(NtCurrentTeb()->StaticUnicodeString.Buffer, + bWatchSubtree, dwNotifyFilter); } From 41ee0f405e8caf1f4468e8c061f978ff15a7fae3 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Tue, 22 Feb 2011 19:07:45 +0000 Subject: [PATCH 114/287] [KERNEL32] Don't make CopyFileExA() rely on Wine's strings conversions functions svn path=/trunk/; revision=50869 --- reactos/dll/win32/kernel32/file/copy.c | 51 +++++++++++++------------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/reactos/dll/win32/kernel32/file/copy.c b/reactos/dll/win32/kernel32/file/copy.c index a55fbff84cd..30c847bacf1 100644 --- a/reactos/dll/win32/kernel32/file/copy.c +++ b/reactos/dll/win32/kernel32/file/copy.c @@ -314,37 +314,36 @@ CopyFileExW ( */ BOOL WINAPI -CopyFileExA ( - LPCSTR lpExistingFileName, - LPCSTR lpNewFileName, - LPPROGRESS_ROUTINE lpProgressRoutine, - LPVOID lpData, - BOOL *pbCancel, - DWORD dwCopyFlags - ) +CopyFileExA(IN LPCSTR lpExistingFileName, + IN LPCSTR lpNewFileName, + IN LPPROGRESS_ROUTINE lpProgressRoutine OPTIONAL, + IN LPVOID lpData OPTIONAL, + IN LPBOOL pbCancel OPTIONAL, + IN DWORD dwCopyFlags) { - PWCHAR ExistingFileNameW; - PWCHAR NewFileNameW; - BOOL Result; + BOOL Result = FALSE; + UNICODE_STRING lpNewFileNameW; + PUNICODE_STRING lpExistingFileNameW; - if (!(ExistingFileNameW = FilenameA2W(lpExistingFileName, FALSE))) - return FALSE; + lpExistingFileNameW = Basep8BitStringToStaticUnicodeString(lpExistingFileName); + if (!lpExistingFileName) + { + return FALSE; + } - if (!(NewFileNameW = FilenameA2W(lpNewFileName, TRUE))) - return FALSE; + if (Basep8BitStringToDynamicUnicodeString(&lpNewFileNameW, lpNewFileName)) + { + Result = CopyFileExW(lpExistingFileNameW->Buffer, + lpNewFileNameW.Buffer, + lpProgressRoutine, + lpData, + pbCancel, + dwCopyFlags); - Result = CopyFileExW (ExistingFileNameW , - NewFileNameW , - lpProgressRoutine, - lpData, - pbCancel, - dwCopyFlags); + RtlFreeUnicodeString(&lpNewFileNameW); + } - RtlFreeHeap (RtlGetProcessHeap (), - 0, - NewFileNameW); - - return Result; + return Result; } From d0b18829cd8e0c704e247b270256b1a26d4335d5 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Wed, 23 Feb 2011 10:20:23 +0000 Subject: [PATCH 115/287] [KMTEST] Adding more tests for FsRtlIs*InExpression() functions. All are failing (overrun / wrong result). Based on Thomas Faber's C program. See bug #5923 svn path=/trunk/; revision=50870 --- rostests/drivers/kmtest/ntos_fsrtl.c | 32 ++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/rostests/drivers/kmtest/ntos_fsrtl.c b/rostests/drivers/kmtest/ntos_fsrtl.c index 67e7e839610..f94b2529160 100644 --- a/rostests/drivers/kmtest/ntos_fsrtl.c +++ b/rostests/drivers/kmtest/ntos_fsrtl.c @@ -161,6 +161,22 @@ VOID FsRtlIsNameInExpressionTest() ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE"); RtlInitUnicodeString(&Name, L"aaaa"); ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE"); + + /* Tests from #5923 */ + RtlInitUnicodeString(&Expression, L"C:\\ReactOS\\**"); + RtlInitUnicodeString(&Name, L"C:\\ReactOS\\dings.bmp"); + ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE"); + RtlInitUnicodeString(&Expression, L"C:\\ReactOS\\***"); + ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == TRUE, "expected TRUE, got FALSE"); + RtlInitUnicodeString(&Expression, L"C:\\Windows\\*a*"); + ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE"); + + RtlInitUnicodeString(&Expression, L"C:\\ReactOS\\*.bmp"); + RtlInitUnicodeString(&Name, L"C:\\Windows\\explorer.exe"); + ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE"); + RtlInitUnicodeString(&Expression, L"*.bmp;*.dib"); + RtlInitUnicodeString(&Name, L"winhlp32.exe"); + ok(FsRtlIsNameInExpression(&Expression, &Name, FALSE, NULL) == FALSE, "expected FALSE, got TRUE"); } VOID FsRtlIsDbcsInExpressionTest() @@ -295,6 +311,22 @@ VOID FsRtlIsDbcsInExpressionTest() ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE"); RtlInitAnsiString(&Name, "aaaa"); ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE"); + + /* Tests from #5923 */ + RtlInitAnsiString(&Expression, "C:\\ReactOS\\**"); + RtlInitAnsiString(&Name, "C:\\ReactOS\\dings.bmp"); + ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE"); + RtlInitAnsiString(&Expression, "C:\\ReactOS\\***"); + ok(FsRtlIsDbcsInExpression(&Expression, &Name) == TRUE, "expected TRUE, got FALSE"); + RtlInitAnsiString(&Expression, "C:\\Windows\\*a*"); + ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE"); + + RtlInitAnsiString(&Expression, "C:\\ReactOS\\*.bmp"); + RtlInitAnsiString(&Name, "C:\\Windows\\explorer.exe"); + ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE"); + RtlInitAnsiString(&Expression, "*.bmp;*.dib"); + RtlInitAnsiString(&Name, "winhlp32.exe"); + ok(FsRtlIsDbcsInExpression(&Expression, &Name) == FALSE, "expected FALSE, got TRUE"); } /* PUBLIC FUNCTIONS ***********************************************************/ From 2b1aa6667296a6c1981c27c8fd101e50e2acaa1e Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Wed, 23 Feb 2011 10:32:56 +0000 Subject: [PATCH 116/287] [MPLAY32] - Hackfix playback See issue #5867 for more details. svn path=/trunk/; revision=50871 --- reactos/base/applications/mplay32/mplay32.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/base/applications/mplay32/mplay32.c b/reactos/base/applications/mplay32/mplay32.c index f4bd117a65f..3e0cca4c93b 100644 --- a/reactos/base/applications/mplay32/mplay32.c +++ b/reactos/base/applications/mplay32/mplay32.c @@ -455,7 +455,7 @@ PlayFile(HWND hwnd, LPTSTR lpFileName) mciPlay.dwFrom = 0; mciPlay.dwTo = MaxFilePos; - mciError = mciSendCommand(wDeviceId, MCI_PLAY, MCI_NOTIFY | MCI_FROM | MCI_TO, (DWORD_PTR)&mciPlay); + mciError = mciSendCommand(wDeviceId, MCI_PLAY, MCI_NOTIFY | MCI_FROM /*| MCI_TO*/, (DWORD_PTR)&mciPlay); if (mciError != 0) { MessageBox(hwnd, _T("Can't play!"), NULL, MB_OK); From e5d92f833a0cef745c21e7eedec572766b2b0f9e Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Wed, 23 Feb 2011 11:08:37 +0000 Subject: [PATCH 117/287] [RTL/DPH] - Implement DPH version of ReAllocateHeap. Scenario of falling back to normal heap is stubbed everywhere now. - Fix a bug in POINTER_ADD_BIAS which noone noticed. svn path=/trunk/; revision=50872 --- reactos/lib/rtl/heap.c | 5 +- reactos/lib/rtl/heappage.c | 165 ++++++++++++++++++++++++++++++++++++- 2 files changed, 164 insertions(+), 6 deletions(-) diff --git a/reactos/lib/rtl/heap.c b/reactos/lib/rtl/heap.c index bb81fc3987a..9b0a6f7e8f4 100644 --- a/reactos/lib/rtl/heap.c +++ b/reactos/lib/rtl/heap.c @@ -1362,12 +1362,11 @@ RtlCreateHeap(ULONG Flags, Heap = RtlpPageHeapCreate(Flags, Addr, TotalSize, CommitSize, Lock, Parameters); if (Heap) return Heap; - //ASSERT(FALSE); - DPRINT1("Enabling page heap failed\n"); - /* Reset a special Parameters == -1 hack */ if ((ULONG_PTR)Parameters == (ULONG_PTR)-1) Parameters = NULL; + else + DPRINT1("Enabling page heap failed\n"); } /* Check validation flags */ diff --git a/reactos/lib/rtl/heappage.c b/reactos/lib/rtl/heappage.c index 41a77727d16..7631833ac51 100644 --- a/reactos/lib/rtl/heappage.c +++ b/reactos/lib/rtl/heappage.c @@ -174,7 +174,7 @@ LONG RtlpDphProtectFails; /* Biased pointer macros */ #define IS_BIASED_POINTER(ptr) ((ULONG_PTR)(ptr) & 1) #define POINTER_REMOVE_BIAS(ptr) ((ULONG_PTR)(ptr) & ~(ULONG_PTR)1) -#define POINTER_ADD_BIAS(ptr) ((ULONG_PTR)(ptr) & 1) +#define POINTER_ADD_BIAS(ptr) ((ULONG_PTR)(ptr) | 1) ULONG RtlpDphBreakOptions = 0;//0xFFFFFFFF; @@ -1896,8 +1896,167 @@ RtlpPageHeapReAllocate(HANDLE HeapPtr, PVOID Ptr, SIZE_T Size) { - UNIMPLEMENTED; - return NULL; + PDPH_HEAP_ROOT DphRoot; + PDPH_HEAP_BLOCK Node = NULL, AllocatedNode; + BOOLEAN Biased = FALSE, UseNormalHeap = FALSE, OldBlockPageHeap = TRUE; + ULONG DataSize, ValidationInfo; + PVOID NewAlloc = NULL; + + /* Check requested size */ + if (Size > 0x7FF00000) + { + DPRINT1("extreme size request\n"); + + /* Generate an exception if needed */ + if (Flags & HEAP_GENERATE_EXCEPTIONS) RtlpDphRaiseException(STATUS_NO_MEMORY); + + return NULL; + } + + /* Unbias the pointer if necessary */ + if (IS_BIASED_POINTER(HeapPtr)) + { + HeapPtr = (PVOID)POINTER_REMOVE_BIAS(HeapPtr); + Biased = TRUE; + } + + /* Get a pointer to the heap root */ + DphRoot = RtlpDphPointerFromHandle(HeapPtr); + if (!DphRoot) return NULL; + + /* Acquire the heap lock */ + RtlpDphPreProcessing(DphRoot, Flags); + + /* Perform internal validation if specified by flags */ + if (RtlpDphDebugOptions & DPH_DEBUG_INTERNAL_VALIDATE) + { + RtlpDphInternalValidatePageHeap(DphRoot, NULL, 0); + } + + /* Add heap flags */ + Flags |= DphRoot->HeapFlags; + + /* Exit with NULL right away if inplace is specified */ + if (Flags & HEAP_REALLOC_IN_PLACE_ONLY) + { + /* Release the lock */ + RtlpDphPostProcessing(DphRoot); + + /* Generate an exception if needed */ + if (Flags & HEAP_GENERATE_EXCEPTIONS) RtlpDphRaiseException(STATUS_NO_MEMORY); + + return NULL; + } + + /* Try to get node of the allocated block */ + AllocatedNode = RtlpDphFindBusyMemory(DphRoot, Ptr); + + if (!AllocatedNode) + { + /* This block was not found in page heap, try a normal heap instead */ + //RtlpDphNormalHeapFree(); + ASSERT(FALSE); + OldBlockPageHeap = FALSE; + } + + /* Check the block */ + if (!(DphRoot->ExtraFlags & DPH_EXTRA_CHECK_UNDERRUN)) + { + if (!RtlpDphIsPageHeapBlock(DphRoot, AllocatedNode->pUserAllocation, &ValidationInfo, TRUE)) + { + RtlpDphReportCorruptedBlock(DphRoot, 3, AllocatedNode->pUserAllocation, ValidationInfo); + } + } + + /* Remove old one from the busy list */ + RtlpDphRemoveFromBusyList(DphRoot, AllocatedNode); + + if (!Biased && !RtlpDphShouldAllocateInPageHeap(DphRoot, Size)) + { + // FIXME: Use normal heap + ASSERT(FALSE); + UseNormalHeap = TRUE; + } + else + { + /* Now do a trick: bias the pointer and call our allocate routine */ + NewAlloc = RtlpPageHeapAllocate((PVOID)POINTER_ADD_BIAS(HeapPtr), Flags, Size); + } + + if (!NewAlloc) + { + /* New allocation failed, put the block back (if it was found in page heap) */ + RtlpDphPlaceOnBusyList(DphRoot, AllocatedNode); + + /* Release the lock */ + RtlpDphPostProcessing(DphRoot); + + /* Perform validation again if required */ + if (RtlpDphDebugOptions & DPH_DEBUG_INTERNAL_VALIDATE) + { + RtlpDphInternalValidatePageHeap(DphRoot, NULL, 0); + } + + /* Generate an exception if needed */ + if (Flags & HEAP_GENERATE_EXCEPTIONS) RtlpDphRaiseException(STATUS_NO_MEMORY); + + return NULL; + } + + /* Copy contents of the old block */ + if (AllocatedNode->nUserRequestedSize > Size) + DataSize = Size; + else + DataSize = AllocatedNode->nUserRequestedSize; + + if (DataSize != 0) RtlCopyMemory(NewAlloc, Ptr, DataSize); + + /* Copy user flags and values */ + if (!UseNormalHeap) + { + /* Get the node of the new block */ + Node = RtlpDphFindBusyMemory(DphRoot, NewAlloc); + ASSERT(Node != NULL); + + /* Set its values/flags */ + Node->UserValue = AllocatedNode->UserValue; + if (Flags & HEAP_SETTABLE_USER_FLAGS) + Node->UserFlags = Flags & HEAP_SETTABLE_USER_FLAGS; + else + Node->UserFlags = AllocatedNode->UserFlags; + } + + if (!OldBlockPageHeap) + { + /* Weird scenario, investigate */ + ASSERT(FALSE); + } + + /* Mark the old block as no access */ + if (AllocatedNode->nVirtualAccessSize != 0) + { + RtlpDphProtectVm(AllocatedNode->pVirtualBlock, AllocatedNode->nVirtualAccessSize, PAGE_NOACCESS); + } + + /* And place it on the free list */ + RtlpDphPlaceOnFreeList(DphRoot, AllocatedNode); + + // FIXME: Capture stack traces if needed + AllocatedNode->StackTrace = NULL; + + /* Finally allocation is done, perform validation again if required */ + if (RtlpDphDebugOptions & DPH_DEBUG_INTERNAL_VALIDATE && !Biased) + { + RtlpDphInternalValidatePageHeap(DphRoot, NULL, 0); + } + + /* Release the lock */ + RtlpDphPostProcessing(DphRoot); + + DPRINT("Allocated new user block pointer: %p\n", NewAlloc); + + /* Return pointer to user allocation */ + return NewAlloc; } BOOLEAN NTAPI From d56de922f22e12bb2a21f0f72687fb2c1858f8eb Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Wed, 23 Feb 2011 12:04:08 +0000 Subject: [PATCH 118/287] [NTOSKRNL] One-line fix for FsRtlIs*InExpression(). This fixes failing tests, but not overrun. Added some breaks to reach more quickly the end svn path=/trunk/; revision=50873 --- reactos/ntoskrnl/fsrtl/dbcsname.c | 5 +- reactos/ntoskrnl/fsrtl/largemcb.c | 1088 ++++++++++++++++++++++++----- 2 files changed, 931 insertions(+), 162 deletions(-) diff --git a/reactos/ntoskrnl/fsrtl/dbcsname.c b/reactos/ntoskrnl/fsrtl/dbcsname.c index d99fa191c0a..202c2a3faca 100644 --- a/reactos/ntoskrnl/fsrtl/dbcsname.c +++ b/reactos/ntoskrnl/fsrtl/dbcsname.c @@ -181,7 +181,7 @@ FsRtlIsDbcsInExpression(IN PANSI_STRING Expression, switch (Expression->Buffer[ExpressionPosition]) { case '*': - StarFound = ExpressionPosition++; + StarFound = MAXUSHORT; break; case '?': @@ -226,6 +226,7 @@ FsRtlIsDbcsInExpression(IN PANSI_STRING Expression, if (ExpressionPosition == Expression->Length) { NamePosition = Name->Length; + break; } } else if (Expression->Buffer[ExpressionPosition] == ANSI_DOS_STAR) @@ -253,7 +254,7 @@ FsRtlIsDbcsInExpression(IN PANSI_STRING Expression, } else { - NamePosition = Name->Length; + break; } } if (ExpressionPosition + 1 == Expression->Length && NamePosition == Name->Length && diff --git a/reactos/ntoskrnl/fsrtl/largemcb.c b/reactos/ntoskrnl/fsrtl/largemcb.c index a9edfed2288..0e53bff74fc 100644 --- a/reactos/ntoskrnl/fsrtl/largemcb.c +++ b/reactos/ntoskrnl/fsrtl/largemcb.c @@ -2,8 +2,10 @@ * PROJECT: ReactOS Kernel * LICENSE: GPL - See COPYING in the top level directory * FILE: ntoskrnl/fsrtl/largemcb.c - * PURPOSE: Mapping Control Block (MCB) support for File System Drivers + * PURPOSE: Large Mapped Control Block (MCB) support for File System Drivers * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org) + * Pierre Schweitzer (heis_spiter@hotmail.com) + * Art Yerkes (art.yerkes@gmail.com) */ /* INCLUDES ******************************************************************/ @@ -12,10 +14,158 @@ #define NDEBUG #include +/* GLOBALS *******************************************************************/ + +#define GET_LIST_HEAD(x) ((PLIST_ENTRY)(&((PRTL_GENERIC_TABLE)x)[1])) + +PAGED_LOOKASIDE_LIST FsRtlFirstMappingLookasideList; +NPAGED_LOOKASIDE_LIST FsRtlFastMutexLookasideList; + +typedef struct _LARGE_MCB_MAPPING_ENTRY +{ + LARGE_INTEGER RunStartVbn; + LARGE_INTEGER SectorCount; + LARGE_INTEGER StartingLbn; + LIST_ENTRY Sequence; +} LARGE_MCB_MAPPING_ENTRY, *PLARGE_MCB_MAPPING_ENTRY; + +static VOID McbPrintTree(PBASE_MCB Mcb) +{ + PLARGE_MCB_MAPPING_ENTRY Entry; + for (Entry = (PLARGE_MCB_MAPPING_ENTRY) + RtlEnumerateGenericTable(Mcb->Mapping, TRUE); + Entry; + Entry = (PLARGE_MCB_MAPPING_ENTRY) + RtlEnumerateGenericTable(Mcb->Mapping, FALSE)) + { + DPRINT1 + ("Vbn %x Lbn %x Count %x\n", + Entry->RunStartVbn.LowPart, + Entry->StartingLbn.LowPart, + Entry->SectorCount.LowPart); + } +} + +static PVOID NTAPI McbMappingAllocate(PRTL_GENERIC_TABLE Table, CLONG Bytes) +{ + PVOID Result; + PBASE_MCB Mcb = (PBASE_MCB)Table->TableContext; + Result = ExAllocatePoolWithTag(Mcb->PoolType, Bytes, 'LMCB'); + DPRINT("McbMappingAllocate(%d) => %p\n", Bytes, Result); + return Result; +} + +static VOID NTAPI McbMappingFree(PRTL_GENERIC_TABLE Table, PVOID Buffer) +{ + DPRINT("McbMappingFree(%p)\n", Buffer); + ExFreePoolWithTag(Buffer, 'LMCB'); +} + +static RTL_GENERIC_COMPARE_RESULTS NTAPI McbMappingCompare +(PRTL_GENERIC_TABLE Table, PVOID PtrA, PVOID PtrB) +{ + PLARGE_MCB_MAPPING_ENTRY A = PtrA, B = PtrB; + RTL_GENERIC_COMPARE_RESULTS Result; + DPRINT("Starting to compare element %x to element %x\n", PtrA, PtrB); + Result = + (A->RunStartVbn.QuadPart + A->SectorCount.QuadPart <= + B->RunStartVbn.QuadPart) ? GenericLessThan : + (A->RunStartVbn.QuadPart >= + B->RunStartVbn.QuadPart + B->SectorCount.QuadPart) ? + GenericGreaterThan : GenericEqual; + DPRINT("Compare(%x:%x): %x:%x to %x:%x => %d\n", + A,B, + A->RunStartVbn.LowPart, A->SectorCount.LowPart, + B->RunStartVbn.LowPart, B->SectorCount.LowPart, + Result); + return Result; +} + /* PUBLIC FUNCTIONS **********************************************************/ /* - * @unimplemented + * @implemented + */ +BOOLEAN +NTAPI +FsRtlAddBaseMcbEntry(IN PBASE_MCB Mcb, + IN LONGLONG Vbn, + IN LONGLONG Lbn, + IN LONGLONG SectorCount) +{ + LARGE_MCB_MAPPING_ENTRY Node; + PLARGE_MCB_MAPPING_ENTRY Existing = NULL; + BOOLEAN NewElement = FALSE; + + McbPrintTree(Mcb); + + Node.RunStartVbn.QuadPart = Vbn; + Node.StartingLbn.QuadPart = Lbn; + Node.SectorCount.QuadPart = SectorCount; + + DPRINT("RunStartVbn %x\n", Node.RunStartVbn.LowPart); + DPRINT("StartingLbn %x\n", Node.StartingLbn.LowPart); + DPRINT("SectorCount %x\n", Node.SectorCount.LowPart); + + while (!NewElement) + { + DPRINT("Inserting %x:%x\n", Node.RunStartVbn.LowPart, Node.SectorCount.LowPart); + Existing = RtlInsertElementGenericTable + (Mcb->Mapping, &Node, sizeof(Node), &NewElement); + DPRINT("Existing %x\n", Existing); + if (!Existing) break; + + DPRINT("NewElement %d\n", NewElement); + if (!NewElement) + { + // We merge the existing runs + LARGE_INTEGER StartVbn, FinalVbn; + DPRINT("Existing: %x:%x\n", + Existing->RunStartVbn.LowPart, Node.SectorCount.LowPart); + if (Existing->RunStartVbn.QuadPart < Node.RunStartVbn.QuadPart) + { + StartVbn = Existing->RunStartVbn; + Node.StartingLbn = Existing->StartingLbn; + } + else + { + StartVbn = Node.RunStartVbn; + } + DPRINT("StartVbn %x\n", StartVbn.LowPart); + if (Existing->RunStartVbn.QuadPart + Existing->SectorCount.QuadPart > + Node.RunStartVbn.QuadPart + Node.SectorCount.QuadPart) + { + FinalVbn.QuadPart = + Existing->RunStartVbn.QuadPart + Existing->SectorCount.QuadPart; + } + else + { + FinalVbn.QuadPart = + Node.RunStartVbn.QuadPart + Node.SectorCount.QuadPart; + } + DPRINT("FinalVbn %x\n", FinalVbn.LowPart); + Node.RunStartVbn.QuadPart = StartVbn.QuadPart; + Node.SectorCount.QuadPart = FinalVbn.QuadPart - StartVbn.QuadPart; + RemoveHeadList(&Existing->Sequence); + RtlDeleteElementGenericTable(Mcb->Mapping, Existing); + Mcb->PairCount--; + } + else + { + DPRINT("Mapping added %x\n", Existing); + Mcb->MaximumPairCount++; + Mcb->PairCount++; + InsertHeadList(GET_LIST_HEAD(Mcb->Mapping), &Existing->Sequence); + } + } + + DPRINT("!!Existing %d\n", !!Existing); + McbPrintTree(Mcb); + return !!Existing; +} + +/* + * @implemented */ BOOLEAN NTAPI @@ -24,10 +174,781 @@ FsRtlAddLargeMcbEntry(IN PLARGE_MCB Mcb, IN LONGLONG Lbn, IN LONGLONG SectorCount) { - KeBugCheck(FILE_SYSTEM); - return FALSE; + BOOLEAN Result; + + DPRINT + ("Mcb %x Vbn %x Lbn %x SectorCount %x\n", + Mcb, (ULONG)Vbn, (ULONG)Lbn, (ULONG)SectorCount); + + KeAcquireGuardedMutex(Mcb->GuardedMutex); + Result = FsRtlAddBaseMcbEntry(&(Mcb->BaseMcb), + Vbn, + Lbn, + SectorCount); + KeReleaseGuardedMutex(Mcb->GuardedMutex); + + DPRINT("Done %d\n", Result); + + return Result; } +/* + * @unimplemented + */ +BOOLEAN +NTAPI +FsRtlGetNextBaseMcbEntry(IN PBASE_MCB Mcb, + IN ULONG RunIndex, + OUT PLONGLONG Vbn, + OUT PLONGLONG Lbn, + OUT PLONGLONG SectorCount) +{ + ULONG i = 0; + BOOLEAN Result = FALSE; + PLARGE_MCB_MAPPING_ENTRY Entry; + for (Entry = (PLARGE_MCB_MAPPING_ENTRY) + RtlEnumerateGenericTable(Mcb->Mapping, TRUE); + Entry && i < RunIndex; + Entry = (PLARGE_MCB_MAPPING_ENTRY) + RtlEnumerateGenericTable(Mcb->Mapping, FALSE), i++); + if (Entry) + { + Result = TRUE; + if (Vbn) + *Vbn = Entry->RunStartVbn.QuadPart; + if (Lbn) + *Lbn = Entry->StartingLbn.QuadPart; + if (SectorCount) + *SectorCount = Entry->SectorCount.QuadPart; + } + + return Result; +} + +/* + * @implemented + */ +BOOLEAN +NTAPI +FsRtlGetNextLargeMcbEntry(IN PLARGE_MCB Mcb, + IN ULONG RunIndex, + OUT PLONGLONG Vbn, + OUT PLONGLONG Lbn, + OUT PLONGLONG SectorCount) +{ + BOOLEAN Result; + + DPRINT("FsRtlGetNextLargeMcbEntry Mcb %x RunIndex %x\n", Mcb, RunIndex); + + KeAcquireGuardedMutex(Mcb->GuardedMutex); + Result = FsRtlGetNextBaseMcbEntry(&(Mcb->BaseMcb), + RunIndex, + Vbn, + Lbn, + SectorCount); + KeReleaseGuardedMutex(Mcb->GuardedMutex); + + DPRINT("Done %d\n", Result); + + return Result; +} + +/* + * @implemented + */ +VOID +NTAPI +FsRtlInitializeBaseMcb(IN PBASE_MCB Mcb, + IN POOL_TYPE PoolType) +{ + Mcb->PairCount = 0; + + if (PoolType == PagedPool) + { + Mcb->Mapping = ExAllocateFromPagedLookasideList(&FsRtlFirstMappingLookasideList); + DPRINT("Get from lookaside list\n"); + } + else + { + Mcb->Mapping = ExAllocatePoolWithTag(PoolType | POOL_RAISE_IF_ALLOCATION_FAILURE, + sizeof(RTL_GENERIC_TABLE) + sizeof(LIST_ENTRY), + 'FSBC'); + DPRINT("Allocate\n"); + } + + DPRINT("Mcb->Mapping %x\n", Mcb->Mapping); + Mcb->PoolType = PoolType; + Mcb->MaximumPairCount = MAXIMUM_PAIR_COUNT; + RtlInitializeGenericTable + (Mcb->Mapping, + McbMappingCompare, + McbMappingAllocate, + McbMappingFree, + Mcb); + InitializeListHead(GET_LIST_HEAD(Mcb->Mapping)); +} + +/* + * @implemented + */ +VOID +NTAPI +FsRtlInitializeLargeMcb(IN PLARGE_MCB Mcb, + IN POOL_TYPE PoolType) +{ + Mcb->GuardedMutex = ExAllocateFromNPagedLookasideList(&FsRtlFastMutexLookasideList); + + KeInitializeGuardedMutex(Mcb->GuardedMutex); + + _SEH2_TRY + { + FsRtlInitializeBaseMcb(&(Mcb->BaseMcb), PoolType); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + ExFreeToNPagedLookasideList(&FsRtlFastMutexLookasideList, + Mcb->GuardedMutex); + Mcb->GuardedMutex = NULL; + } + _SEH2_END; +} + +/* + * @implemented + */ +VOID +NTAPI +FsRtlInitializeLargeMcbs(VOID) +{ + /* Initialize the list for the MCB */ + ExInitializePagedLookasideList(&FsRtlFirstMappingLookasideList, + NULL, + NULL, + POOL_RAISE_IF_ALLOCATION_FAILURE, + sizeof(RTL_GENERIC_TABLE) + sizeof(LIST_ENTRY), + IFS_POOL_TAG, + 0); /* FIXME: Should be 4 */ + + /* Initialize the list for the guarded mutex */ + ExInitializeNPagedLookasideList(&FsRtlFastMutexLookasideList, + NULL, + NULL, + POOL_RAISE_IF_ALLOCATION_FAILURE, + sizeof(KGUARDED_MUTEX), + IFS_POOL_TAG, + 0); /* FIXME: Should be 32 */ +} + +/* + * @unimplemented + */ +BOOLEAN +NTAPI +FsRtlLookupBaseMcbEntry(IN PBASE_MCB Mcb, + IN LONGLONG Vbn, + OUT PLONGLONG Lbn OPTIONAL, + OUT PLONGLONG SectorCountFromLbn OPTIONAL, + OUT PLONGLONG StartingLbn OPTIONAL, + OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL, + OUT PULONG Index OPTIONAL) +{ + BOOLEAN Result = FALSE; + LARGE_MCB_MAPPING_ENTRY ToLookup; + PLARGE_MCB_MAPPING_ENTRY Entry; + + ToLookup.RunStartVbn.QuadPart = Vbn; + ToLookup.SectorCount.QuadPart = 1; + + Entry = RtlLookupElementGenericTable(Mcb->Mapping, &ToLookup); + if (!Entry) + { + // Find out if we have a following entry. The spec says we should return + // found with Lbn == -1 when we're beneath the largest map. + ToLookup.SectorCount.QuadPart = (1ull<<62) - ToLookup.RunStartVbn.QuadPart; + Entry = RtlLookupElementGenericTable(Mcb->Mapping, &ToLookup); + if (Entry) + { + Result = TRUE; + if (Lbn) *Lbn = ~0ull; + } + else + { + Result = FALSE; + } + } + else + { + LARGE_INTEGER Offset; + Offset.QuadPart = Vbn - Entry->RunStartVbn.QuadPart; + Result = TRUE; + if (Lbn) *Lbn = Entry->StartingLbn.QuadPart + Offset.QuadPart; + if (SectorCountFromLbn) *SectorCountFromLbn = Entry->SectorCount.QuadPart - Offset.QuadPart; + if (StartingLbn) *StartingLbn = Entry->StartingLbn.QuadPart; + if (SectorCountFromStartingLbn) *SectorCountFromStartingLbn = Entry->SectorCount.QuadPart; + } + + return Result; +} + +/* + * @implemented + */ +BOOLEAN +NTAPI +FsRtlLookupLargeMcbEntry(IN PLARGE_MCB Mcb, + IN LONGLONG Vbn, + OUT PLONGLONG Lbn OPTIONAL, + OUT PLONGLONG SectorCountFromLbn OPTIONAL, + OUT PLONGLONG StartingLbn OPTIONAL, + OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL, + OUT PULONG Index OPTIONAL) +{ + BOOLEAN Result; + + DPRINT("FsRtlLookupLargeMcbEntry Mcb %x Vbn %x\n", Mcb, (ULONG)Vbn); + + KeAcquireGuardedMutex(Mcb->GuardedMutex); + Result = FsRtlLookupBaseMcbEntry(&(Mcb->BaseMcb), + Vbn, + Lbn, + SectorCountFromLbn, + StartingLbn, + SectorCountFromStartingLbn, + Index); + KeReleaseGuardedMutex(Mcb->GuardedMutex); + + DPRINT("Done %d (%x)\n", Result, Lbn ? (ULONG)*Lbn : 0); + + return Result; +} + +/* + * @unimplemented + */ +BOOLEAN +NTAPI +FsRtlLookupLastBaseMcbEntryAndIndex(IN PBASE_MCB OpaqueMcb, + IN OUT PLONGLONG LargeVbn, + IN OUT PLONGLONG LargeLbn, + IN OUT PULONG Index) +{ + ULONG i = 0; + BOOLEAN Result = FALSE; + PLIST_ENTRY ListEntry; + PLARGE_MCB_MAPPING_ENTRY Entry; + PLARGE_MCB_MAPPING_ENTRY CountEntry; + + ListEntry = GET_LIST_HEAD(OpaqueMcb->Mapping); + if (!IsListEmpty(ListEntry)) + { + Entry = CONTAINING_RECORD(ListEntry->Flink, LARGE_MCB_MAPPING_ENTRY, Sequence); + Result = TRUE; + *LargeVbn = Entry->RunStartVbn.QuadPart; + *LargeLbn = Entry->StartingLbn.QuadPart; + + for (i = 0, CountEntry = RtlEnumerateGenericTable(OpaqueMcb->Mapping, TRUE); + CountEntry != Entry; + CountEntry = RtlEnumerateGenericTable(OpaqueMcb->Mapping, FALSE)); + + *Index = i; + } + + return Result; +} + +/* + * @implemented + */ +BOOLEAN +NTAPI +FsRtlLookupLastLargeMcbEntryAndIndex(IN PLARGE_MCB OpaqueMcb, + OUT PLONGLONG LargeVbn, + OUT PLONGLONG LargeLbn, + OUT PULONG Index) +{ + BOOLEAN Result; + + DPRINT("FsRtlLookupLastLargeMcbEntryAndIndex %x\n", OpaqueMcb); + + KeAcquireGuardedMutex(OpaqueMcb->GuardedMutex); + Result = FsRtlLookupLastBaseMcbEntryAndIndex(&(OpaqueMcb->BaseMcb), + LargeVbn, + LargeLbn, + Index); + KeReleaseGuardedMutex(OpaqueMcb->GuardedMutex); + + DPRINT("Done %d\n", Result); + + return Result; +} + +/* + * @unimplemented + */ +BOOLEAN +NTAPI +FsRtlLookupLastBaseMcbEntry(IN PBASE_MCB Mcb, + OUT PLONGLONG Vbn, + OUT PLONGLONG Lbn) +{ + BOOLEAN Result = FALSE; + PLIST_ENTRY ListEntry; + PLARGE_MCB_MAPPING_ENTRY Entry; + + ListEntry = GET_LIST_HEAD(Mcb->Mapping); + if (!IsListEmpty(ListEntry)) + { + Entry = CONTAINING_RECORD(ListEntry->Flink, LARGE_MCB_MAPPING_ENTRY, Sequence); + Result = TRUE; + *Vbn = Entry->RunStartVbn.QuadPart; + *Lbn = Entry->StartingLbn.QuadPart; + } + + return Result; +} + +/* + * @implemented + */ +BOOLEAN +NTAPI +FsRtlLookupLastLargeMcbEntry(IN PLARGE_MCB Mcb, + OUT PLONGLONG Vbn, + OUT PLONGLONG Lbn) +{ + BOOLEAN Result; + + DPRINT("FsRtlLookupLastLargeMcbEntry Mcb %x\n", Mcb); + + KeAcquireGuardedMutex(Mcb->GuardedMutex); + Result = FsRtlLookupLastBaseMcbEntry(&(Mcb->BaseMcb), + Vbn, + Lbn); + KeReleaseGuardedMutex(Mcb->GuardedMutex); + + DPRINT("Done %d\n", Result); + + return Result; +} + +/* + * @implemented + */ +ULONG +NTAPI +FsRtlNumberOfRunsInBaseMcb(IN PBASE_MCB Mcb) +{ + /* Return the count */ + return Mcb->PairCount; +} + +/* + * @implemented + */ +ULONG +NTAPI +FsRtlNumberOfRunsInLargeMcb(IN PLARGE_MCB Mcb) +{ + ULONG NumberOfRuns; + + DPRINT("FsRtlNumberOfRunsInLargeMcb Mcb %x\n", Mcb); + + /* Read the number of runs while holding the MCB lock */ + KeAcquireGuardedMutex(Mcb->GuardedMutex); + NumberOfRuns = Mcb->BaseMcb.PairCount; + KeReleaseGuardedMutex(Mcb->GuardedMutex); + + DPRINT("Done %d\n", NumberOfRuns); + + /* Return the count */ + return NumberOfRuns; +} + +/* + * @unimplemented + */ +VOID +NTAPI +FsRtlRemoveBaseMcbEntry(IN PBASE_MCB Mcb, + IN LONGLONG Vbn, + IN LONGLONG SectorCount) +{ + LARGE_MCB_MAPPING_ENTRY Node; + PLARGE_MCB_MAPPING_ENTRY Element; + + Node.RunStartVbn.QuadPart = Vbn; + Node.SectorCount.QuadPart = SectorCount; + + while ((Element = RtlLookupElementGenericTable(Mcb->Mapping, &Node))) + { + // Must split + if (Element->RunStartVbn.QuadPart < Node.RunStartVbn.QuadPart && + Element->SectorCount.QuadPart > Node.SectorCount.QuadPart) + { + LARGE_MCB_MAPPING_ENTRY Upper, Reinsert; + PLARGE_MCB_MAPPING_ENTRY Reinserted, Inserted; + LARGE_INTEGER StartHole = Node.RunStartVbn; + LARGE_INTEGER EndHole; + EndHole.QuadPart = Node.RunStartVbn.QuadPart + Node.SectorCount.QuadPart; + Upper.RunStartVbn.QuadPart = EndHole.QuadPart; + Upper.StartingLbn.QuadPart = + Element->StartingLbn.QuadPart + + EndHole.QuadPart - + Element->RunStartVbn.QuadPart; + Upper.SectorCount.QuadPart = + Element->SectorCount.QuadPart - + (EndHole.QuadPart - Element->RunStartVbn.QuadPart); + Reinsert = *Element; + Reinsert.SectorCount.QuadPart = + Element->RunStartVbn.QuadPart - StartHole.QuadPart; + RemoveEntryList(&Element->Sequence); + RtlDeleteElementGenericTable(Mcb->Mapping, Element); + Mcb->PairCount--; + + Reinserted = RtlInsertElementGenericTable + (Mcb->Mapping, &Reinsert, sizeof(Reinsert), NULL); + InsertHeadList(GET_LIST_HEAD(Mcb->Mapping), &Reinserted->Sequence); + Mcb->PairCount++; + + Inserted = RtlInsertElementGenericTable + (Mcb->Mapping, &Upper, sizeof(Upper), NULL); + InsertHeadList(GET_LIST_HEAD(Mcb->Mapping), &Inserted->Sequence); + Mcb->PairCount++; + } + else if (Element->RunStartVbn.QuadPart < Node.RunStartVbn.QuadPart) + { + LARGE_MCB_MAPPING_ENTRY NewElement; + PLARGE_MCB_MAPPING_ENTRY Reinserted; + LARGE_INTEGER StartHole = Node.RunStartVbn; + NewElement.RunStartVbn = Element->RunStartVbn; + NewElement.StartingLbn = Element->StartingLbn; + NewElement.SectorCount.QuadPart = StartHole.QuadPart - Element->StartingLbn.QuadPart; + + RemoveEntryList(&Element->Sequence); + RtlDeleteElementGenericTable(Mcb->Mapping, Element); + Mcb->PairCount--; + + Reinserted = RtlInsertElementGenericTable + (Mcb->Mapping, &NewElement, sizeof(NewElement), NULL); + InsertHeadList(GET_LIST_HEAD(Mcb->Mapping), &Reinserted->Sequence); + Mcb->PairCount++; + } + else + { + LARGE_MCB_MAPPING_ENTRY NewElement; + PLARGE_MCB_MAPPING_ENTRY Reinserted; + LARGE_INTEGER EndHole = Element->RunStartVbn; + LARGE_INTEGER EndRun; + EndRun.QuadPart = Element->RunStartVbn.QuadPart + Element->SectorCount.QuadPart; + NewElement.RunStartVbn = EndHole; + NewElement.StartingLbn.QuadPart = Element->StartingLbn.QuadPart + + (EndHole.QuadPart - Element->RunStartVbn.QuadPart); + NewElement.SectorCount.QuadPart = EndRun.QuadPart - EndHole.QuadPart; + + RemoveEntryList(&Element->Sequence); + RtlDeleteElementGenericTable(Mcb->Mapping, Element); + Mcb->PairCount--; + + Reinserted = RtlInsertElementGenericTable + (Mcb->Mapping, &NewElement, sizeof(NewElement), NULL); + InsertHeadList(GET_LIST_HEAD(Mcb->Mapping), &Reinserted->Sequence); + Mcb->PairCount++; + } + } +} + +/* + * @implemented + */ +VOID +NTAPI +FsRtlRemoveLargeMcbEntry(IN PLARGE_MCB Mcb, + IN LONGLONG Vbn, + IN LONGLONG SectorCount) +{ + DPRINT("FsRtlRemoveLargeMcbEntry Mcb %x, Vbn %x, SectorCount %x\n", Mcb, (ULONG)Vbn, (ULONG)SectorCount); + + KeAcquireGuardedMutex(Mcb->GuardedMutex); + FsRtlRemoveBaseMcbEntry(&(Mcb->BaseMcb), + Vbn, + SectorCount); + KeReleaseGuardedMutex(Mcb->GuardedMutex); + + DPRINT("Done\n"); +} + +/* + * @implemented + */ +VOID +NTAPI +FsRtlResetBaseMcb(IN PBASE_MCB Mcb) +{ + PLARGE_MCB_MAPPING_ENTRY Element; + + DPRINT("Reset MCB %x\n", Mcb); + while (RtlNumberGenericTableElements(Mcb->Mapping) && + (Element = (PLARGE_MCB_MAPPING_ENTRY)RtlGetElementGenericTable(Mcb->Mapping, 0))) + { + DPRINT("Deleting %x\n", Element); + RtlDeleteElementGenericTable(Mcb->Mapping, Element); + } + + Mcb->PairCount = 0; + Mcb->MaximumPairCount = 0; + DPRINT("Done\n"); +} + +/* + * @implemented + */ +VOID +NTAPI +FsRtlResetLargeMcb(IN PLARGE_MCB Mcb, + IN BOOLEAN SelfSynchronized) +{ + if (!SelfSynchronized) + { + KeAcquireGuardedMutex(Mcb->GuardedMutex); + } + + FsRtlResetBaseMcb(&Mcb->BaseMcb); + + + if (!SelfSynchronized) + { + KeReleaseGuardedMutex(Mcb->GuardedMutex); + } +} + +#define MCB_BUMP_NO_MORE 0 +#define MCB_BUMP_AGAIN 1 + +static ULONG NTAPI McbBump(PBASE_MCB Mcb, PLARGE_MCB_MAPPING_ENTRY FixedPart) +{ + LARGE_MCB_MAPPING_ENTRY Reimagined; + PLARGE_MCB_MAPPING_ENTRY Found = NULL; + + DPRINT("McbBump %x (%x:%x)\n", Mcb, FixedPart->RunStartVbn.LowPart, FixedPart->SectorCount.LowPart); + + Reimagined = *FixedPart; + while ((Found = RtlLookupElementGenericTable(Mcb->Mapping, &Reimagined))) + { + Reimagined = *Found; + Reimagined.RunStartVbn.QuadPart = + FixedPart->RunStartVbn.QuadPart + FixedPart->SectorCount.QuadPart; + DPRINT("Reimagined %x\n", Reimagined.RunStartVbn.LowPart); + } + + DPRINT("Found %x\n", Found); + if (!Found) return MCB_BUMP_NO_MORE; + DPRINT1 + ("Moving %x-%x to %x because %x-%x overlaps\n", + Found->RunStartVbn.LowPart, + Found->RunStartVbn.LowPart + Found->SectorCount.QuadPart, + Reimagined.RunStartVbn.LowPart + Reimagined.SectorCount.LowPart, + Reimagined.RunStartVbn.LowPart, + Reimagined.RunStartVbn.LowPart + Reimagined.SectorCount.LowPart); + Found->RunStartVbn.QuadPart = Reimagined.RunStartVbn.QuadPart + Reimagined.SectorCount.QuadPart; + Found->StartingLbn.QuadPart = Reimagined.StartingLbn.QuadPart + Reimagined.SectorCount.QuadPart; + + DPRINT("Again\n"); + return MCB_BUMP_AGAIN; +} + +/* + * @unimplemented + */ +BOOLEAN +NTAPI +FsRtlSplitBaseMcb(IN PBASE_MCB Mcb, + IN LONGLONG Vbn, + IN LONGLONG Amount) +{ + ULONG Result; + LARGE_MCB_MAPPING_ENTRY Node; + PLARGE_MCB_MAPPING_ENTRY Existing = NULL; + + Node.RunStartVbn.QuadPart = Vbn; + Node.SectorCount.QuadPart = 0; + + Existing = RtlLookupElementGenericTable(Mcb->Mapping, &Node); + + if (Existing) + { + // We're in the middle of a run + LARGE_MCB_MAPPING_ENTRY UpperPart; + LARGE_MCB_MAPPING_ENTRY LowerPart; + PLARGE_MCB_MAPPING_ENTRY InsertedUpper; + + UpperPart.RunStartVbn.QuadPart = Node.RunStartVbn.QuadPart + Amount; + UpperPart.SectorCount.QuadPart = Existing->RunStartVbn.QuadPart + + (Existing->SectorCount.QuadPart - Node.RunStartVbn.QuadPart); + UpperPart.StartingLbn.QuadPart = Existing->StartingLbn.QuadPart + + (Node.RunStartVbn.QuadPart - Existing->RunStartVbn.QuadPart); + LowerPart.RunStartVbn.QuadPart = Existing->RunStartVbn.QuadPart; + LowerPart.SectorCount.QuadPart = Node.RunStartVbn.QuadPart - Existing->RunStartVbn.QuadPart; + LowerPart.StartingLbn.QuadPart = Existing->StartingLbn.QuadPart; + + Node = UpperPart; + + DPRINT("Loop: %x\n", Node.RunStartVbn.LowPart); + while ((Result = McbBump(Mcb, &Node)) == MCB_BUMP_AGAIN) + { + DPRINT("Node: %x\n", Node.RunStartVbn.LowPart); + } + DPRINT("Done\n"); + + if (Result == MCB_BUMP_NO_MORE) + { + Node = *Existing; + RemoveHeadList(&Existing->Sequence); + RtlDeleteElementGenericTable(Mcb->Mapping, Existing); + Mcb->PairCount--; + + // Adjust the element we found. + Existing->SectorCount = LowerPart.SectorCount; + + InsertedUpper = RtlInsertElementGenericTable + (Mcb->Mapping, &UpperPart, sizeof(UpperPart), NULL); + if (!InsertedUpper) + { + // Just make it like it was + Existing->SectorCount = Node.SectorCount; + return FALSE; + } + InsertHeadList(GET_LIST_HEAD(Mcb->Mapping), &InsertedUpper->Sequence); + Mcb->PairCount++; + } + else + { + Node.RunStartVbn.QuadPart = Vbn; + Node.SectorCount.QuadPart = Amount; + while ((Result = McbBump(Mcb, &Node)) == MCB_BUMP_AGAIN); + return Result == MCB_BUMP_NO_MORE; + } + } + + DPRINT("Done\n"); + + return TRUE; +} + +/* + * @implemented + */ +BOOLEAN +NTAPI +FsRtlSplitLargeMcb(IN PLARGE_MCB Mcb, + IN LONGLONG Vbn, + IN LONGLONG Amount) +{ + BOOLEAN Result; + + DPRINT("FsRtlSplitLargeMcb %x, Vbn %x, Amount %x\n", Mcb, (ULONG)Vbn, (ULONG)Amount); + + KeAcquireGuardedMutex(Mcb->GuardedMutex); + Result = FsRtlSplitBaseMcb(&(Mcb->BaseMcb), + Vbn, + Amount); + KeReleaseGuardedMutex(Mcb->GuardedMutex); + + DPRINT("Done %d\n", Result); + + return Result; +} + +/* + * @unimplemented + */ +VOID +NTAPI +FsRtlTruncateBaseMcb(IN PBASE_MCB Mcb, + IN LONGLONG Vbn) +{ + DPRINT("FsRtlTruncateBaseMcb(%x,%x)\n", Mcb, (ULONG)Vbn); + if (!Vbn) + { + DPRINT("Resetting\n"); + FsRtlResetBaseMcb(Mcb); + } + else + { + LARGE_MCB_MAPPING_ENTRY Truncate; + PLARGE_MCB_MAPPING_ENTRY Found; + Truncate.RunStartVbn.QuadPart = Vbn; + Truncate.SectorCount.QuadPart = (1ull<<62) - Truncate.RunStartVbn.QuadPart; + while ((Found = RtlLookupElementGenericTable(Mcb->Mapping, &Truncate))) + { + DPRINT("Deleting %x\n", Found); + RemoveEntryList(&Found->Sequence); + RtlDeleteElementGenericTable(Mcb->Mapping, Found); + Mcb->PairCount--; + } + } + DPRINT("Done\n"); +} + +/* + * @implemented + */ +VOID +NTAPI +FsRtlTruncateLargeMcb(IN PLARGE_MCB Mcb, + IN LONGLONG Vbn) +{ + DPRINT("FsRtlTruncateLargeMcb %x Vbn %x\n", Mcb, (ULONG)Vbn); + KeAcquireGuardedMutex(Mcb->GuardedMutex); + FsRtlTruncateBaseMcb(&(Mcb->BaseMcb), + Vbn); + KeReleaseGuardedMutex(Mcb->GuardedMutex); + DPRINT("Done\n"); +} + +/* + * @implemented + */ +VOID +NTAPI +FsRtlUninitializeBaseMcb(IN PBASE_MCB Mcb) +{ + DPRINT("FsRtlUninitializeBaseMcb(%x)\n", Mcb); + FsRtlResetBaseMcb(Mcb); + + DPRINT("Mcb->Mapping %x\n", Mcb->Mapping); + if (Mcb->PoolType == PagedPool) + { + DPRINT("Deallocate to lookaside list\n"); + ExFreeToPagedLookasideList(&FsRtlFirstMappingLookasideList, + Mcb->Mapping); + } + else + { + DPRINT("Deallocate\n"); + ExFreePoolWithTag(Mcb->Mapping, 'FSBC'); + } + Mcb->Mapping = NULL; + DPRINT("Done\n"); +} + +/* + * @implemented + */ +VOID +NTAPI +FsRtlUninitializeLargeMcb(IN PLARGE_MCB Mcb) +{ + if (Mcb->GuardedMutex) + { + ExFreeToNPagedLookasideList(&FsRtlFastMutexLookasideList, + Mcb->GuardedMutex); + Mcb->GuardedMutex = NULL; + FsRtlUninitializeBaseMcb(&(Mcb->BaseMcb)); + } +} + +// MCB + /* * @implemented */ @@ -46,24 +967,6 @@ FsRtlAddMcbEntry(IN PMCB Mcb, (LONGLONG)SectorCount); } -/* - * @unimplemented - */ -BOOLEAN -NTAPI -FsRtlGetNextLargeMcbEntry(IN PLARGE_MCB Mcb, - IN ULONG RunIndex, - OUT PLONGLONG Vbn, - OUT PLONGLONG Lbn, - OUT PLONGLONG SectorCount) -{ - KeBugCheck(FILE_SYSTEM); - *Vbn = 0; - *Lbn = 0; - *SectorCount= 0; - return FALSE; -} - /* * @implemented */ @@ -97,17 +1000,6 @@ FsRtlGetNextMcbEntry(IN PMCB Mcb, return Return; } -/* - * @unimplemented - */ -VOID -NTAPI -FsRtlInitializeLargeMcb(IN PLARGE_MCB Mcb, - IN POOL_TYPE PoolType) -{ - KeBugCheck(FILE_SYSTEM); -} - /* * @implemented */ @@ -121,55 +1013,6 @@ FsRtlInitializeMcb(IN PMCB Mcb, PoolType); } -/* - * @unimplemented - */ -BOOLEAN -NTAPI -FsRtlLookupLargeMcbEntry(IN PLARGE_MCB Mcb, - IN LONGLONG Vbn, - OUT PLONGLONG Lbn OPTIONAL, - OUT PLONGLONG SectorCountFromLbn OPTIONAL, - OUT PLONGLONG StartingLbn OPTIONAL, - OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL, - OUT PULONG Index OPTIONAL) -{ - KeBugCheck(FILE_SYSTEM); - *Lbn = 0; - *SectorCountFromLbn = 0; - return FALSE; -} - -/* - * @unimplemented - */ -BOOLEAN -NTAPI -FsRtlLookupLastLargeMcbEntryAndIndex(IN PLARGE_MCB OpaqueMcb, - OUT PLONGLONG LargeVbn, - OUT PLONGLONG LargeLbn, - OUT PULONG Index) -{ - KeBugCheck(FILE_SYSTEM); - *LargeVbn = 0; - *LargeLbn = 0; - *Index = 0; - return FALSE; -} - -/* - * @unimplemented - */ -BOOLEAN -NTAPI -FsRtlLookupLastLargeMcbEntry(IN PLARGE_MCB Mcb, - OUT PLONGLONG Vbn, - OUT PLONGLONG Lbn) -{ - KeBugCheck(FILE_SYSTEM); - return(FALSE); -} - /* * @implemented */ @@ -235,43 +1078,13 @@ FsRtlLookupMcbEntry(IN PMCB Mcb, */ ULONG NTAPI -FsRtlNumberOfRunsInLargeMcb(IN PLARGE_MCB Mcb) -{ - ULONG NumberOfRuns; - - /* Read the number of runs while holding the MCB lock */ - KeAcquireGuardedMutex(Mcb->GuardedMutex); - NumberOfRuns = Mcb->BaseMcb.PairCount; - KeReleaseGuardedMutex(Mcb->GuardedMutex); - - /* Return the count */ - return NumberOfRuns; -} - -/* - * @implemented - */ -ULONG -NTAPI -FsRtlNumberOfRunsInMcb (IN PMCB Mcb) +FsRtlNumberOfRunsInMcb(IN PMCB Mcb) { /* Call the newer function */ return FsRtlNumberOfRunsInLargeMcb( &Mcb->DummyFieldThatSizesThisStructureCorrectly); } -/* - * @unimplemented - */ -VOID -NTAPI -FsRtlRemoveLargeMcbEntry(IN PLARGE_MCB Mcb, - IN LONGLONG Vbn, - IN LONGLONG SectorCount) -{ - KeBugCheck(FILE_SYSTEM); -} - /* * @implemented */ @@ -287,64 +1100,19 @@ FsRtlRemoveMcbEntry(IN PMCB Mcb, (LONGLONG)SectorCount); } -/* - * @unimplemented - */ -VOID -NTAPI -FsRtlResetLargeMcb(IN PLARGE_MCB Mcb, - IN BOOLEAN SelfSynchronized) -{ - KeBugCheck(FILE_SYSTEM); -} - -/* - * @unimplemented - */ -BOOLEAN -NTAPI -FsRtlSplitLargeMcb(IN PLARGE_MCB Mcb, - IN LONGLONG Vbn, - IN LONGLONG Amount) -{ - KeBugCheck(FILE_SYSTEM); - return FALSE; -} - -/* - * @unimplemented - */ -VOID -NTAPI -FsRtlTruncateLargeMcb(IN PLARGE_MCB Mcb, - IN LONGLONG Vbn) -{ - KeBugCheck(FILE_SYSTEM); -} - /* * @implemented */ VOID NTAPI -FsRtlTruncateMcb (IN PMCB Mcb, - IN VBN Vbn) +FsRtlTruncateMcb(IN PMCB Mcb, + IN VBN Vbn) { /* Call the newer function */ FsRtlTruncateLargeMcb(&Mcb->DummyFieldThatSizesThisStructureCorrectly, (LONGLONG)Vbn); } -/* - * @unimplemented - */ -VOID -NTAPI -FsRtlUninitializeLargeMcb(IN PLARGE_MCB Mcb) -{ - KeBugCheck(FILE_SYSTEM); -} - /* * @implemented */ From ba16b2f1ee809e66d0524862637d4bc038550c61 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Wed, 23 Feb 2011 12:08:16 +0000 Subject: [PATCH 119/287] [NTOSKRNL] Reverted changes commited to largemcb.c They weren't intended to be commited svn path=/trunk/; revision=50874 --- reactos/ntoskrnl/fsrtl/largemcb.c | 1088 +++++------------------------ 1 file changed, 160 insertions(+), 928 deletions(-) diff --git a/reactos/ntoskrnl/fsrtl/largemcb.c b/reactos/ntoskrnl/fsrtl/largemcb.c index 0e53bff74fc..a9edfed2288 100644 --- a/reactos/ntoskrnl/fsrtl/largemcb.c +++ b/reactos/ntoskrnl/fsrtl/largemcb.c @@ -2,10 +2,8 @@ * PROJECT: ReactOS Kernel * LICENSE: GPL - See COPYING in the top level directory * FILE: ntoskrnl/fsrtl/largemcb.c - * PURPOSE: Large Mapped Control Block (MCB) support for File System Drivers + * PURPOSE: Mapping Control Block (MCB) support for File System Drivers * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org) - * Pierre Schweitzer (heis_spiter@hotmail.com) - * Art Yerkes (art.yerkes@gmail.com) */ /* INCLUDES ******************************************************************/ @@ -14,158 +12,10 @@ #define NDEBUG #include -/* GLOBALS *******************************************************************/ - -#define GET_LIST_HEAD(x) ((PLIST_ENTRY)(&((PRTL_GENERIC_TABLE)x)[1])) - -PAGED_LOOKASIDE_LIST FsRtlFirstMappingLookasideList; -NPAGED_LOOKASIDE_LIST FsRtlFastMutexLookasideList; - -typedef struct _LARGE_MCB_MAPPING_ENTRY -{ - LARGE_INTEGER RunStartVbn; - LARGE_INTEGER SectorCount; - LARGE_INTEGER StartingLbn; - LIST_ENTRY Sequence; -} LARGE_MCB_MAPPING_ENTRY, *PLARGE_MCB_MAPPING_ENTRY; - -static VOID McbPrintTree(PBASE_MCB Mcb) -{ - PLARGE_MCB_MAPPING_ENTRY Entry; - for (Entry = (PLARGE_MCB_MAPPING_ENTRY) - RtlEnumerateGenericTable(Mcb->Mapping, TRUE); - Entry; - Entry = (PLARGE_MCB_MAPPING_ENTRY) - RtlEnumerateGenericTable(Mcb->Mapping, FALSE)) - { - DPRINT1 - ("Vbn %x Lbn %x Count %x\n", - Entry->RunStartVbn.LowPart, - Entry->StartingLbn.LowPart, - Entry->SectorCount.LowPart); - } -} - -static PVOID NTAPI McbMappingAllocate(PRTL_GENERIC_TABLE Table, CLONG Bytes) -{ - PVOID Result; - PBASE_MCB Mcb = (PBASE_MCB)Table->TableContext; - Result = ExAllocatePoolWithTag(Mcb->PoolType, Bytes, 'LMCB'); - DPRINT("McbMappingAllocate(%d) => %p\n", Bytes, Result); - return Result; -} - -static VOID NTAPI McbMappingFree(PRTL_GENERIC_TABLE Table, PVOID Buffer) -{ - DPRINT("McbMappingFree(%p)\n", Buffer); - ExFreePoolWithTag(Buffer, 'LMCB'); -} - -static RTL_GENERIC_COMPARE_RESULTS NTAPI McbMappingCompare -(PRTL_GENERIC_TABLE Table, PVOID PtrA, PVOID PtrB) -{ - PLARGE_MCB_MAPPING_ENTRY A = PtrA, B = PtrB; - RTL_GENERIC_COMPARE_RESULTS Result; - DPRINT("Starting to compare element %x to element %x\n", PtrA, PtrB); - Result = - (A->RunStartVbn.QuadPart + A->SectorCount.QuadPart <= - B->RunStartVbn.QuadPart) ? GenericLessThan : - (A->RunStartVbn.QuadPart >= - B->RunStartVbn.QuadPart + B->SectorCount.QuadPart) ? - GenericGreaterThan : GenericEqual; - DPRINT("Compare(%x:%x): %x:%x to %x:%x => %d\n", - A,B, - A->RunStartVbn.LowPart, A->SectorCount.LowPart, - B->RunStartVbn.LowPart, B->SectorCount.LowPart, - Result); - return Result; -} - /* PUBLIC FUNCTIONS **********************************************************/ /* - * @implemented - */ -BOOLEAN -NTAPI -FsRtlAddBaseMcbEntry(IN PBASE_MCB Mcb, - IN LONGLONG Vbn, - IN LONGLONG Lbn, - IN LONGLONG SectorCount) -{ - LARGE_MCB_MAPPING_ENTRY Node; - PLARGE_MCB_MAPPING_ENTRY Existing = NULL; - BOOLEAN NewElement = FALSE; - - McbPrintTree(Mcb); - - Node.RunStartVbn.QuadPart = Vbn; - Node.StartingLbn.QuadPart = Lbn; - Node.SectorCount.QuadPart = SectorCount; - - DPRINT("RunStartVbn %x\n", Node.RunStartVbn.LowPart); - DPRINT("StartingLbn %x\n", Node.StartingLbn.LowPart); - DPRINT("SectorCount %x\n", Node.SectorCount.LowPart); - - while (!NewElement) - { - DPRINT("Inserting %x:%x\n", Node.RunStartVbn.LowPart, Node.SectorCount.LowPart); - Existing = RtlInsertElementGenericTable - (Mcb->Mapping, &Node, sizeof(Node), &NewElement); - DPRINT("Existing %x\n", Existing); - if (!Existing) break; - - DPRINT("NewElement %d\n", NewElement); - if (!NewElement) - { - // We merge the existing runs - LARGE_INTEGER StartVbn, FinalVbn; - DPRINT("Existing: %x:%x\n", - Existing->RunStartVbn.LowPart, Node.SectorCount.LowPart); - if (Existing->RunStartVbn.QuadPart < Node.RunStartVbn.QuadPart) - { - StartVbn = Existing->RunStartVbn; - Node.StartingLbn = Existing->StartingLbn; - } - else - { - StartVbn = Node.RunStartVbn; - } - DPRINT("StartVbn %x\n", StartVbn.LowPart); - if (Existing->RunStartVbn.QuadPart + Existing->SectorCount.QuadPart > - Node.RunStartVbn.QuadPart + Node.SectorCount.QuadPart) - { - FinalVbn.QuadPart = - Existing->RunStartVbn.QuadPart + Existing->SectorCount.QuadPart; - } - else - { - FinalVbn.QuadPart = - Node.RunStartVbn.QuadPart + Node.SectorCount.QuadPart; - } - DPRINT("FinalVbn %x\n", FinalVbn.LowPart); - Node.RunStartVbn.QuadPart = StartVbn.QuadPart; - Node.SectorCount.QuadPart = FinalVbn.QuadPart - StartVbn.QuadPart; - RemoveHeadList(&Existing->Sequence); - RtlDeleteElementGenericTable(Mcb->Mapping, Existing); - Mcb->PairCount--; - } - else - { - DPRINT("Mapping added %x\n", Existing); - Mcb->MaximumPairCount++; - Mcb->PairCount++; - InsertHeadList(GET_LIST_HEAD(Mcb->Mapping), &Existing->Sequence); - } - } - - DPRINT("!!Existing %d\n", !!Existing); - McbPrintTree(Mcb); - return !!Existing; -} - -/* - * @implemented + * @unimplemented */ BOOLEAN NTAPI @@ -174,781 +24,10 @@ FsRtlAddLargeMcbEntry(IN PLARGE_MCB Mcb, IN LONGLONG Lbn, IN LONGLONG SectorCount) { - BOOLEAN Result; - - DPRINT - ("Mcb %x Vbn %x Lbn %x SectorCount %x\n", - Mcb, (ULONG)Vbn, (ULONG)Lbn, (ULONG)SectorCount); - - KeAcquireGuardedMutex(Mcb->GuardedMutex); - Result = FsRtlAddBaseMcbEntry(&(Mcb->BaseMcb), - Vbn, - Lbn, - SectorCount); - KeReleaseGuardedMutex(Mcb->GuardedMutex); - - DPRINT("Done %d\n", Result); - - return Result; + KeBugCheck(FILE_SYSTEM); + return FALSE; } -/* - * @unimplemented - */ -BOOLEAN -NTAPI -FsRtlGetNextBaseMcbEntry(IN PBASE_MCB Mcb, - IN ULONG RunIndex, - OUT PLONGLONG Vbn, - OUT PLONGLONG Lbn, - OUT PLONGLONG SectorCount) -{ - ULONG i = 0; - BOOLEAN Result = FALSE; - PLARGE_MCB_MAPPING_ENTRY Entry; - for (Entry = (PLARGE_MCB_MAPPING_ENTRY) - RtlEnumerateGenericTable(Mcb->Mapping, TRUE); - Entry && i < RunIndex; - Entry = (PLARGE_MCB_MAPPING_ENTRY) - RtlEnumerateGenericTable(Mcb->Mapping, FALSE), i++); - if (Entry) - { - Result = TRUE; - if (Vbn) - *Vbn = Entry->RunStartVbn.QuadPart; - if (Lbn) - *Lbn = Entry->StartingLbn.QuadPart; - if (SectorCount) - *SectorCount = Entry->SectorCount.QuadPart; - } - - return Result; -} - -/* - * @implemented - */ -BOOLEAN -NTAPI -FsRtlGetNextLargeMcbEntry(IN PLARGE_MCB Mcb, - IN ULONG RunIndex, - OUT PLONGLONG Vbn, - OUT PLONGLONG Lbn, - OUT PLONGLONG SectorCount) -{ - BOOLEAN Result; - - DPRINT("FsRtlGetNextLargeMcbEntry Mcb %x RunIndex %x\n", Mcb, RunIndex); - - KeAcquireGuardedMutex(Mcb->GuardedMutex); - Result = FsRtlGetNextBaseMcbEntry(&(Mcb->BaseMcb), - RunIndex, - Vbn, - Lbn, - SectorCount); - KeReleaseGuardedMutex(Mcb->GuardedMutex); - - DPRINT("Done %d\n", Result); - - return Result; -} - -/* - * @implemented - */ -VOID -NTAPI -FsRtlInitializeBaseMcb(IN PBASE_MCB Mcb, - IN POOL_TYPE PoolType) -{ - Mcb->PairCount = 0; - - if (PoolType == PagedPool) - { - Mcb->Mapping = ExAllocateFromPagedLookasideList(&FsRtlFirstMappingLookasideList); - DPRINT("Get from lookaside list\n"); - } - else - { - Mcb->Mapping = ExAllocatePoolWithTag(PoolType | POOL_RAISE_IF_ALLOCATION_FAILURE, - sizeof(RTL_GENERIC_TABLE) + sizeof(LIST_ENTRY), - 'FSBC'); - DPRINT("Allocate\n"); - } - - DPRINT("Mcb->Mapping %x\n", Mcb->Mapping); - Mcb->PoolType = PoolType; - Mcb->MaximumPairCount = MAXIMUM_PAIR_COUNT; - RtlInitializeGenericTable - (Mcb->Mapping, - McbMappingCompare, - McbMappingAllocate, - McbMappingFree, - Mcb); - InitializeListHead(GET_LIST_HEAD(Mcb->Mapping)); -} - -/* - * @implemented - */ -VOID -NTAPI -FsRtlInitializeLargeMcb(IN PLARGE_MCB Mcb, - IN POOL_TYPE PoolType) -{ - Mcb->GuardedMutex = ExAllocateFromNPagedLookasideList(&FsRtlFastMutexLookasideList); - - KeInitializeGuardedMutex(Mcb->GuardedMutex); - - _SEH2_TRY - { - FsRtlInitializeBaseMcb(&(Mcb->BaseMcb), PoolType); - } - _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) - { - ExFreeToNPagedLookasideList(&FsRtlFastMutexLookasideList, - Mcb->GuardedMutex); - Mcb->GuardedMutex = NULL; - } - _SEH2_END; -} - -/* - * @implemented - */ -VOID -NTAPI -FsRtlInitializeLargeMcbs(VOID) -{ - /* Initialize the list for the MCB */ - ExInitializePagedLookasideList(&FsRtlFirstMappingLookasideList, - NULL, - NULL, - POOL_RAISE_IF_ALLOCATION_FAILURE, - sizeof(RTL_GENERIC_TABLE) + sizeof(LIST_ENTRY), - IFS_POOL_TAG, - 0); /* FIXME: Should be 4 */ - - /* Initialize the list for the guarded mutex */ - ExInitializeNPagedLookasideList(&FsRtlFastMutexLookasideList, - NULL, - NULL, - POOL_RAISE_IF_ALLOCATION_FAILURE, - sizeof(KGUARDED_MUTEX), - IFS_POOL_TAG, - 0); /* FIXME: Should be 32 */ -} - -/* - * @unimplemented - */ -BOOLEAN -NTAPI -FsRtlLookupBaseMcbEntry(IN PBASE_MCB Mcb, - IN LONGLONG Vbn, - OUT PLONGLONG Lbn OPTIONAL, - OUT PLONGLONG SectorCountFromLbn OPTIONAL, - OUT PLONGLONG StartingLbn OPTIONAL, - OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL, - OUT PULONG Index OPTIONAL) -{ - BOOLEAN Result = FALSE; - LARGE_MCB_MAPPING_ENTRY ToLookup; - PLARGE_MCB_MAPPING_ENTRY Entry; - - ToLookup.RunStartVbn.QuadPart = Vbn; - ToLookup.SectorCount.QuadPart = 1; - - Entry = RtlLookupElementGenericTable(Mcb->Mapping, &ToLookup); - if (!Entry) - { - // Find out if we have a following entry. The spec says we should return - // found with Lbn == -1 when we're beneath the largest map. - ToLookup.SectorCount.QuadPart = (1ull<<62) - ToLookup.RunStartVbn.QuadPart; - Entry = RtlLookupElementGenericTable(Mcb->Mapping, &ToLookup); - if (Entry) - { - Result = TRUE; - if (Lbn) *Lbn = ~0ull; - } - else - { - Result = FALSE; - } - } - else - { - LARGE_INTEGER Offset; - Offset.QuadPart = Vbn - Entry->RunStartVbn.QuadPart; - Result = TRUE; - if (Lbn) *Lbn = Entry->StartingLbn.QuadPart + Offset.QuadPart; - if (SectorCountFromLbn) *SectorCountFromLbn = Entry->SectorCount.QuadPart - Offset.QuadPart; - if (StartingLbn) *StartingLbn = Entry->StartingLbn.QuadPart; - if (SectorCountFromStartingLbn) *SectorCountFromStartingLbn = Entry->SectorCount.QuadPart; - } - - return Result; -} - -/* - * @implemented - */ -BOOLEAN -NTAPI -FsRtlLookupLargeMcbEntry(IN PLARGE_MCB Mcb, - IN LONGLONG Vbn, - OUT PLONGLONG Lbn OPTIONAL, - OUT PLONGLONG SectorCountFromLbn OPTIONAL, - OUT PLONGLONG StartingLbn OPTIONAL, - OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL, - OUT PULONG Index OPTIONAL) -{ - BOOLEAN Result; - - DPRINT("FsRtlLookupLargeMcbEntry Mcb %x Vbn %x\n", Mcb, (ULONG)Vbn); - - KeAcquireGuardedMutex(Mcb->GuardedMutex); - Result = FsRtlLookupBaseMcbEntry(&(Mcb->BaseMcb), - Vbn, - Lbn, - SectorCountFromLbn, - StartingLbn, - SectorCountFromStartingLbn, - Index); - KeReleaseGuardedMutex(Mcb->GuardedMutex); - - DPRINT("Done %d (%x)\n", Result, Lbn ? (ULONG)*Lbn : 0); - - return Result; -} - -/* - * @unimplemented - */ -BOOLEAN -NTAPI -FsRtlLookupLastBaseMcbEntryAndIndex(IN PBASE_MCB OpaqueMcb, - IN OUT PLONGLONG LargeVbn, - IN OUT PLONGLONG LargeLbn, - IN OUT PULONG Index) -{ - ULONG i = 0; - BOOLEAN Result = FALSE; - PLIST_ENTRY ListEntry; - PLARGE_MCB_MAPPING_ENTRY Entry; - PLARGE_MCB_MAPPING_ENTRY CountEntry; - - ListEntry = GET_LIST_HEAD(OpaqueMcb->Mapping); - if (!IsListEmpty(ListEntry)) - { - Entry = CONTAINING_RECORD(ListEntry->Flink, LARGE_MCB_MAPPING_ENTRY, Sequence); - Result = TRUE; - *LargeVbn = Entry->RunStartVbn.QuadPart; - *LargeLbn = Entry->StartingLbn.QuadPart; - - for (i = 0, CountEntry = RtlEnumerateGenericTable(OpaqueMcb->Mapping, TRUE); - CountEntry != Entry; - CountEntry = RtlEnumerateGenericTable(OpaqueMcb->Mapping, FALSE)); - - *Index = i; - } - - return Result; -} - -/* - * @implemented - */ -BOOLEAN -NTAPI -FsRtlLookupLastLargeMcbEntryAndIndex(IN PLARGE_MCB OpaqueMcb, - OUT PLONGLONG LargeVbn, - OUT PLONGLONG LargeLbn, - OUT PULONG Index) -{ - BOOLEAN Result; - - DPRINT("FsRtlLookupLastLargeMcbEntryAndIndex %x\n", OpaqueMcb); - - KeAcquireGuardedMutex(OpaqueMcb->GuardedMutex); - Result = FsRtlLookupLastBaseMcbEntryAndIndex(&(OpaqueMcb->BaseMcb), - LargeVbn, - LargeLbn, - Index); - KeReleaseGuardedMutex(OpaqueMcb->GuardedMutex); - - DPRINT("Done %d\n", Result); - - return Result; -} - -/* - * @unimplemented - */ -BOOLEAN -NTAPI -FsRtlLookupLastBaseMcbEntry(IN PBASE_MCB Mcb, - OUT PLONGLONG Vbn, - OUT PLONGLONG Lbn) -{ - BOOLEAN Result = FALSE; - PLIST_ENTRY ListEntry; - PLARGE_MCB_MAPPING_ENTRY Entry; - - ListEntry = GET_LIST_HEAD(Mcb->Mapping); - if (!IsListEmpty(ListEntry)) - { - Entry = CONTAINING_RECORD(ListEntry->Flink, LARGE_MCB_MAPPING_ENTRY, Sequence); - Result = TRUE; - *Vbn = Entry->RunStartVbn.QuadPart; - *Lbn = Entry->StartingLbn.QuadPart; - } - - return Result; -} - -/* - * @implemented - */ -BOOLEAN -NTAPI -FsRtlLookupLastLargeMcbEntry(IN PLARGE_MCB Mcb, - OUT PLONGLONG Vbn, - OUT PLONGLONG Lbn) -{ - BOOLEAN Result; - - DPRINT("FsRtlLookupLastLargeMcbEntry Mcb %x\n", Mcb); - - KeAcquireGuardedMutex(Mcb->GuardedMutex); - Result = FsRtlLookupLastBaseMcbEntry(&(Mcb->BaseMcb), - Vbn, - Lbn); - KeReleaseGuardedMutex(Mcb->GuardedMutex); - - DPRINT("Done %d\n", Result); - - return Result; -} - -/* - * @implemented - */ -ULONG -NTAPI -FsRtlNumberOfRunsInBaseMcb(IN PBASE_MCB Mcb) -{ - /* Return the count */ - return Mcb->PairCount; -} - -/* - * @implemented - */ -ULONG -NTAPI -FsRtlNumberOfRunsInLargeMcb(IN PLARGE_MCB Mcb) -{ - ULONG NumberOfRuns; - - DPRINT("FsRtlNumberOfRunsInLargeMcb Mcb %x\n", Mcb); - - /* Read the number of runs while holding the MCB lock */ - KeAcquireGuardedMutex(Mcb->GuardedMutex); - NumberOfRuns = Mcb->BaseMcb.PairCount; - KeReleaseGuardedMutex(Mcb->GuardedMutex); - - DPRINT("Done %d\n", NumberOfRuns); - - /* Return the count */ - return NumberOfRuns; -} - -/* - * @unimplemented - */ -VOID -NTAPI -FsRtlRemoveBaseMcbEntry(IN PBASE_MCB Mcb, - IN LONGLONG Vbn, - IN LONGLONG SectorCount) -{ - LARGE_MCB_MAPPING_ENTRY Node; - PLARGE_MCB_MAPPING_ENTRY Element; - - Node.RunStartVbn.QuadPart = Vbn; - Node.SectorCount.QuadPart = SectorCount; - - while ((Element = RtlLookupElementGenericTable(Mcb->Mapping, &Node))) - { - // Must split - if (Element->RunStartVbn.QuadPart < Node.RunStartVbn.QuadPart && - Element->SectorCount.QuadPart > Node.SectorCount.QuadPart) - { - LARGE_MCB_MAPPING_ENTRY Upper, Reinsert; - PLARGE_MCB_MAPPING_ENTRY Reinserted, Inserted; - LARGE_INTEGER StartHole = Node.RunStartVbn; - LARGE_INTEGER EndHole; - EndHole.QuadPart = Node.RunStartVbn.QuadPart + Node.SectorCount.QuadPart; - Upper.RunStartVbn.QuadPart = EndHole.QuadPart; - Upper.StartingLbn.QuadPart = - Element->StartingLbn.QuadPart + - EndHole.QuadPart - - Element->RunStartVbn.QuadPart; - Upper.SectorCount.QuadPart = - Element->SectorCount.QuadPart - - (EndHole.QuadPart - Element->RunStartVbn.QuadPart); - Reinsert = *Element; - Reinsert.SectorCount.QuadPart = - Element->RunStartVbn.QuadPart - StartHole.QuadPart; - RemoveEntryList(&Element->Sequence); - RtlDeleteElementGenericTable(Mcb->Mapping, Element); - Mcb->PairCount--; - - Reinserted = RtlInsertElementGenericTable - (Mcb->Mapping, &Reinsert, sizeof(Reinsert), NULL); - InsertHeadList(GET_LIST_HEAD(Mcb->Mapping), &Reinserted->Sequence); - Mcb->PairCount++; - - Inserted = RtlInsertElementGenericTable - (Mcb->Mapping, &Upper, sizeof(Upper), NULL); - InsertHeadList(GET_LIST_HEAD(Mcb->Mapping), &Inserted->Sequence); - Mcb->PairCount++; - } - else if (Element->RunStartVbn.QuadPart < Node.RunStartVbn.QuadPart) - { - LARGE_MCB_MAPPING_ENTRY NewElement; - PLARGE_MCB_MAPPING_ENTRY Reinserted; - LARGE_INTEGER StartHole = Node.RunStartVbn; - NewElement.RunStartVbn = Element->RunStartVbn; - NewElement.StartingLbn = Element->StartingLbn; - NewElement.SectorCount.QuadPart = StartHole.QuadPart - Element->StartingLbn.QuadPart; - - RemoveEntryList(&Element->Sequence); - RtlDeleteElementGenericTable(Mcb->Mapping, Element); - Mcb->PairCount--; - - Reinserted = RtlInsertElementGenericTable - (Mcb->Mapping, &NewElement, sizeof(NewElement), NULL); - InsertHeadList(GET_LIST_HEAD(Mcb->Mapping), &Reinserted->Sequence); - Mcb->PairCount++; - } - else - { - LARGE_MCB_MAPPING_ENTRY NewElement; - PLARGE_MCB_MAPPING_ENTRY Reinserted; - LARGE_INTEGER EndHole = Element->RunStartVbn; - LARGE_INTEGER EndRun; - EndRun.QuadPart = Element->RunStartVbn.QuadPart + Element->SectorCount.QuadPart; - NewElement.RunStartVbn = EndHole; - NewElement.StartingLbn.QuadPart = Element->StartingLbn.QuadPart + - (EndHole.QuadPart - Element->RunStartVbn.QuadPart); - NewElement.SectorCount.QuadPart = EndRun.QuadPart - EndHole.QuadPart; - - RemoveEntryList(&Element->Sequence); - RtlDeleteElementGenericTable(Mcb->Mapping, Element); - Mcb->PairCount--; - - Reinserted = RtlInsertElementGenericTable - (Mcb->Mapping, &NewElement, sizeof(NewElement), NULL); - InsertHeadList(GET_LIST_HEAD(Mcb->Mapping), &Reinserted->Sequence); - Mcb->PairCount++; - } - } -} - -/* - * @implemented - */ -VOID -NTAPI -FsRtlRemoveLargeMcbEntry(IN PLARGE_MCB Mcb, - IN LONGLONG Vbn, - IN LONGLONG SectorCount) -{ - DPRINT("FsRtlRemoveLargeMcbEntry Mcb %x, Vbn %x, SectorCount %x\n", Mcb, (ULONG)Vbn, (ULONG)SectorCount); - - KeAcquireGuardedMutex(Mcb->GuardedMutex); - FsRtlRemoveBaseMcbEntry(&(Mcb->BaseMcb), - Vbn, - SectorCount); - KeReleaseGuardedMutex(Mcb->GuardedMutex); - - DPRINT("Done\n"); -} - -/* - * @implemented - */ -VOID -NTAPI -FsRtlResetBaseMcb(IN PBASE_MCB Mcb) -{ - PLARGE_MCB_MAPPING_ENTRY Element; - - DPRINT("Reset MCB %x\n", Mcb); - while (RtlNumberGenericTableElements(Mcb->Mapping) && - (Element = (PLARGE_MCB_MAPPING_ENTRY)RtlGetElementGenericTable(Mcb->Mapping, 0))) - { - DPRINT("Deleting %x\n", Element); - RtlDeleteElementGenericTable(Mcb->Mapping, Element); - } - - Mcb->PairCount = 0; - Mcb->MaximumPairCount = 0; - DPRINT("Done\n"); -} - -/* - * @implemented - */ -VOID -NTAPI -FsRtlResetLargeMcb(IN PLARGE_MCB Mcb, - IN BOOLEAN SelfSynchronized) -{ - if (!SelfSynchronized) - { - KeAcquireGuardedMutex(Mcb->GuardedMutex); - } - - FsRtlResetBaseMcb(&Mcb->BaseMcb); - - - if (!SelfSynchronized) - { - KeReleaseGuardedMutex(Mcb->GuardedMutex); - } -} - -#define MCB_BUMP_NO_MORE 0 -#define MCB_BUMP_AGAIN 1 - -static ULONG NTAPI McbBump(PBASE_MCB Mcb, PLARGE_MCB_MAPPING_ENTRY FixedPart) -{ - LARGE_MCB_MAPPING_ENTRY Reimagined; - PLARGE_MCB_MAPPING_ENTRY Found = NULL; - - DPRINT("McbBump %x (%x:%x)\n", Mcb, FixedPart->RunStartVbn.LowPart, FixedPart->SectorCount.LowPart); - - Reimagined = *FixedPart; - while ((Found = RtlLookupElementGenericTable(Mcb->Mapping, &Reimagined))) - { - Reimagined = *Found; - Reimagined.RunStartVbn.QuadPart = - FixedPart->RunStartVbn.QuadPart + FixedPart->SectorCount.QuadPart; - DPRINT("Reimagined %x\n", Reimagined.RunStartVbn.LowPart); - } - - DPRINT("Found %x\n", Found); - if (!Found) return MCB_BUMP_NO_MORE; - DPRINT1 - ("Moving %x-%x to %x because %x-%x overlaps\n", - Found->RunStartVbn.LowPart, - Found->RunStartVbn.LowPart + Found->SectorCount.QuadPart, - Reimagined.RunStartVbn.LowPart + Reimagined.SectorCount.LowPart, - Reimagined.RunStartVbn.LowPart, - Reimagined.RunStartVbn.LowPart + Reimagined.SectorCount.LowPart); - Found->RunStartVbn.QuadPart = Reimagined.RunStartVbn.QuadPart + Reimagined.SectorCount.QuadPart; - Found->StartingLbn.QuadPart = Reimagined.StartingLbn.QuadPart + Reimagined.SectorCount.QuadPart; - - DPRINT("Again\n"); - return MCB_BUMP_AGAIN; -} - -/* - * @unimplemented - */ -BOOLEAN -NTAPI -FsRtlSplitBaseMcb(IN PBASE_MCB Mcb, - IN LONGLONG Vbn, - IN LONGLONG Amount) -{ - ULONG Result; - LARGE_MCB_MAPPING_ENTRY Node; - PLARGE_MCB_MAPPING_ENTRY Existing = NULL; - - Node.RunStartVbn.QuadPart = Vbn; - Node.SectorCount.QuadPart = 0; - - Existing = RtlLookupElementGenericTable(Mcb->Mapping, &Node); - - if (Existing) - { - // We're in the middle of a run - LARGE_MCB_MAPPING_ENTRY UpperPart; - LARGE_MCB_MAPPING_ENTRY LowerPart; - PLARGE_MCB_MAPPING_ENTRY InsertedUpper; - - UpperPart.RunStartVbn.QuadPart = Node.RunStartVbn.QuadPart + Amount; - UpperPart.SectorCount.QuadPart = Existing->RunStartVbn.QuadPart + - (Existing->SectorCount.QuadPart - Node.RunStartVbn.QuadPart); - UpperPart.StartingLbn.QuadPart = Existing->StartingLbn.QuadPart + - (Node.RunStartVbn.QuadPart - Existing->RunStartVbn.QuadPart); - LowerPart.RunStartVbn.QuadPart = Existing->RunStartVbn.QuadPart; - LowerPart.SectorCount.QuadPart = Node.RunStartVbn.QuadPart - Existing->RunStartVbn.QuadPart; - LowerPart.StartingLbn.QuadPart = Existing->StartingLbn.QuadPart; - - Node = UpperPart; - - DPRINT("Loop: %x\n", Node.RunStartVbn.LowPart); - while ((Result = McbBump(Mcb, &Node)) == MCB_BUMP_AGAIN) - { - DPRINT("Node: %x\n", Node.RunStartVbn.LowPart); - } - DPRINT("Done\n"); - - if (Result == MCB_BUMP_NO_MORE) - { - Node = *Existing; - RemoveHeadList(&Existing->Sequence); - RtlDeleteElementGenericTable(Mcb->Mapping, Existing); - Mcb->PairCount--; - - // Adjust the element we found. - Existing->SectorCount = LowerPart.SectorCount; - - InsertedUpper = RtlInsertElementGenericTable - (Mcb->Mapping, &UpperPart, sizeof(UpperPart), NULL); - if (!InsertedUpper) - { - // Just make it like it was - Existing->SectorCount = Node.SectorCount; - return FALSE; - } - InsertHeadList(GET_LIST_HEAD(Mcb->Mapping), &InsertedUpper->Sequence); - Mcb->PairCount++; - } - else - { - Node.RunStartVbn.QuadPart = Vbn; - Node.SectorCount.QuadPart = Amount; - while ((Result = McbBump(Mcb, &Node)) == MCB_BUMP_AGAIN); - return Result == MCB_BUMP_NO_MORE; - } - } - - DPRINT("Done\n"); - - return TRUE; -} - -/* - * @implemented - */ -BOOLEAN -NTAPI -FsRtlSplitLargeMcb(IN PLARGE_MCB Mcb, - IN LONGLONG Vbn, - IN LONGLONG Amount) -{ - BOOLEAN Result; - - DPRINT("FsRtlSplitLargeMcb %x, Vbn %x, Amount %x\n", Mcb, (ULONG)Vbn, (ULONG)Amount); - - KeAcquireGuardedMutex(Mcb->GuardedMutex); - Result = FsRtlSplitBaseMcb(&(Mcb->BaseMcb), - Vbn, - Amount); - KeReleaseGuardedMutex(Mcb->GuardedMutex); - - DPRINT("Done %d\n", Result); - - return Result; -} - -/* - * @unimplemented - */ -VOID -NTAPI -FsRtlTruncateBaseMcb(IN PBASE_MCB Mcb, - IN LONGLONG Vbn) -{ - DPRINT("FsRtlTruncateBaseMcb(%x,%x)\n", Mcb, (ULONG)Vbn); - if (!Vbn) - { - DPRINT("Resetting\n"); - FsRtlResetBaseMcb(Mcb); - } - else - { - LARGE_MCB_MAPPING_ENTRY Truncate; - PLARGE_MCB_MAPPING_ENTRY Found; - Truncate.RunStartVbn.QuadPart = Vbn; - Truncate.SectorCount.QuadPart = (1ull<<62) - Truncate.RunStartVbn.QuadPart; - while ((Found = RtlLookupElementGenericTable(Mcb->Mapping, &Truncate))) - { - DPRINT("Deleting %x\n", Found); - RemoveEntryList(&Found->Sequence); - RtlDeleteElementGenericTable(Mcb->Mapping, Found); - Mcb->PairCount--; - } - } - DPRINT("Done\n"); -} - -/* - * @implemented - */ -VOID -NTAPI -FsRtlTruncateLargeMcb(IN PLARGE_MCB Mcb, - IN LONGLONG Vbn) -{ - DPRINT("FsRtlTruncateLargeMcb %x Vbn %x\n", Mcb, (ULONG)Vbn); - KeAcquireGuardedMutex(Mcb->GuardedMutex); - FsRtlTruncateBaseMcb(&(Mcb->BaseMcb), - Vbn); - KeReleaseGuardedMutex(Mcb->GuardedMutex); - DPRINT("Done\n"); -} - -/* - * @implemented - */ -VOID -NTAPI -FsRtlUninitializeBaseMcb(IN PBASE_MCB Mcb) -{ - DPRINT("FsRtlUninitializeBaseMcb(%x)\n", Mcb); - FsRtlResetBaseMcb(Mcb); - - DPRINT("Mcb->Mapping %x\n", Mcb->Mapping); - if (Mcb->PoolType == PagedPool) - { - DPRINT("Deallocate to lookaside list\n"); - ExFreeToPagedLookasideList(&FsRtlFirstMappingLookasideList, - Mcb->Mapping); - } - else - { - DPRINT("Deallocate\n"); - ExFreePoolWithTag(Mcb->Mapping, 'FSBC'); - } - Mcb->Mapping = NULL; - DPRINT("Done\n"); -} - -/* - * @implemented - */ -VOID -NTAPI -FsRtlUninitializeLargeMcb(IN PLARGE_MCB Mcb) -{ - if (Mcb->GuardedMutex) - { - ExFreeToNPagedLookasideList(&FsRtlFastMutexLookasideList, - Mcb->GuardedMutex); - Mcb->GuardedMutex = NULL; - FsRtlUninitializeBaseMcb(&(Mcb->BaseMcb)); - } -} - -// MCB - /* * @implemented */ @@ -967,6 +46,24 @@ FsRtlAddMcbEntry(IN PMCB Mcb, (LONGLONG)SectorCount); } +/* + * @unimplemented + */ +BOOLEAN +NTAPI +FsRtlGetNextLargeMcbEntry(IN PLARGE_MCB Mcb, + IN ULONG RunIndex, + OUT PLONGLONG Vbn, + OUT PLONGLONG Lbn, + OUT PLONGLONG SectorCount) +{ + KeBugCheck(FILE_SYSTEM); + *Vbn = 0; + *Lbn = 0; + *SectorCount= 0; + return FALSE; +} + /* * @implemented */ @@ -1000,6 +97,17 @@ FsRtlGetNextMcbEntry(IN PMCB Mcb, return Return; } +/* + * @unimplemented + */ +VOID +NTAPI +FsRtlInitializeLargeMcb(IN PLARGE_MCB Mcb, + IN POOL_TYPE PoolType) +{ + KeBugCheck(FILE_SYSTEM); +} + /* * @implemented */ @@ -1013,6 +121,55 @@ FsRtlInitializeMcb(IN PMCB Mcb, PoolType); } +/* + * @unimplemented + */ +BOOLEAN +NTAPI +FsRtlLookupLargeMcbEntry(IN PLARGE_MCB Mcb, + IN LONGLONG Vbn, + OUT PLONGLONG Lbn OPTIONAL, + OUT PLONGLONG SectorCountFromLbn OPTIONAL, + OUT PLONGLONG StartingLbn OPTIONAL, + OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL, + OUT PULONG Index OPTIONAL) +{ + KeBugCheck(FILE_SYSTEM); + *Lbn = 0; + *SectorCountFromLbn = 0; + return FALSE; +} + +/* + * @unimplemented + */ +BOOLEAN +NTAPI +FsRtlLookupLastLargeMcbEntryAndIndex(IN PLARGE_MCB OpaqueMcb, + OUT PLONGLONG LargeVbn, + OUT PLONGLONG LargeLbn, + OUT PULONG Index) +{ + KeBugCheck(FILE_SYSTEM); + *LargeVbn = 0; + *LargeLbn = 0; + *Index = 0; + return FALSE; +} + +/* + * @unimplemented + */ +BOOLEAN +NTAPI +FsRtlLookupLastLargeMcbEntry(IN PLARGE_MCB Mcb, + OUT PLONGLONG Vbn, + OUT PLONGLONG Lbn) +{ + KeBugCheck(FILE_SYSTEM); + return(FALSE); +} + /* * @implemented */ @@ -1078,13 +235,43 @@ FsRtlLookupMcbEntry(IN PMCB Mcb, */ ULONG NTAPI -FsRtlNumberOfRunsInMcb(IN PMCB Mcb) +FsRtlNumberOfRunsInLargeMcb(IN PLARGE_MCB Mcb) +{ + ULONG NumberOfRuns; + + /* Read the number of runs while holding the MCB lock */ + KeAcquireGuardedMutex(Mcb->GuardedMutex); + NumberOfRuns = Mcb->BaseMcb.PairCount; + KeReleaseGuardedMutex(Mcb->GuardedMutex); + + /* Return the count */ + return NumberOfRuns; +} + +/* + * @implemented + */ +ULONG +NTAPI +FsRtlNumberOfRunsInMcb (IN PMCB Mcb) { /* Call the newer function */ return FsRtlNumberOfRunsInLargeMcb( &Mcb->DummyFieldThatSizesThisStructureCorrectly); } +/* + * @unimplemented + */ +VOID +NTAPI +FsRtlRemoveLargeMcbEntry(IN PLARGE_MCB Mcb, + IN LONGLONG Vbn, + IN LONGLONG SectorCount) +{ + KeBugCheck(FILE_SYSTEM); +} + /* * @implemented */ @@ -1100,19 +287,64 @@ FsRtlRemoveMcbEntry(IN PMCB Mcb, (LONGLONG)SectorCount); } +/* + * @unimplemented + */ +VOID +NTAPI +FsRtlResetLargeMcb(IN PLARGE_MCB Mcb, + IN BOOLEAN SelfSynchronized) +{ + KeBugCheck(FILE_SYSTEM); +} + +/* + * @unimplemented + */ +BOOLEAN +NTAPI +FsRtlSplitLargeMcb(IN PLARGE_MCB Mcb, + IN LONGLONG Vbn, + IN LONGLONG Amount) +{ + KeBugCheck(FILE_SYSTEM); + return FALSE; +} + +/* + * @unimplemented + */ +VOID +NTAPI +FsRtlTruncateLargeMcb(IN PLARGE_MCB Mcb, + IN LONGLONG Vbn) +{ + KeBugCheck(FILE_SYSTEM); +} + /* * @implemented */ VOID NTAPI -FsRtlTruncateMcb(IN PMCB Mcb, - IN VBN Vbn) +FsRtlTruncateMcb (IN PMCB Mcb, + IN VBN Vbn) { /* Call the newer function */ FsRtlTruncateLargeMcb(&Mcb->DummyFieldThatSizesThisStructureCorrectly, (LONGLONG)Vbn); } +/* + * @unimplemented + */ +VOID +NTAPI +FsRtlUninitializeLargeMcb(IN PLARGE_MCB Mcb) +{ + KeBugCheck(FILE_SYSTEM); +} + /* * @implemented */ From 54e7b58e770f5f3a8bd82ad10b744a89e2deb9e9 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Wed, 23 Feb 2011 12:09:07 +0000 Subject: [PATCH 120/287] [NTOSKRNL] Apply r50873 on FsRtlIsNameInExpression() svn path=/trunk/; revision=50875 --- reactos/ntoskrnl/fsrtl/name.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/reactos/ntoskrnl/fsrtl/name.c b/reactos/ntoskrnl/fsrtl/name.c index 29f6e90d76c..ecb2c3ff6a4 100644 --- a/reactos/ntoskrnl/fsrtl/name.c +++ b/reactos/ntoskrnl/fsrtl/name.c @@ -41,7 +41,7 @@ FsRtlIsNameInExpressionPrivate(IN PUNICODE_STRING Expression, switch (Expression->Buffer[ExpressionPosition]) { case L'*': - StarFound = ExpressionPosition++; + StarFound = MAXUSHORT; break; case L'?': @@ -88,6 +88,7 @@ FsRtlIsNameInExpressionPrivate(IN PUNICODE_STRING Expression, if (ExpressionPosition == Expression->Length / sizeof(WCHAR)) { NamePosition = Name->Length / sizeof(WCHAR); + break; } } else if (Expression->Buffer[ExpressionPosition] == DOS_STAR) @@ -109,14 +110,14 @@ FsRtlIsNameInExpressionPrivate(IN PUNICODE_STRING Expression, ExpressionPosition = StarFound + 1; while ((IgnoreCase ? UpcaseTable[Name->Buffer[NamePosition]] : Name->Buffer[NamePosition]) != Expression->Buffer[ExpressionPosition] && - NamePosition < Name->Length / sizeof(WCHAR)) + NamePosition < Name->Length / sizeof(WCHAR)) { NamePosition++; } } else { - NamePosition = Name->Length / sizeof(WCHAR); + break; } } if (ExpressionPosition + 1 == Expression->Length / sizeof(WCHAR) && NamePosition == Name->Length / sizeof(WCHAR) && From 39c815467ba3eccca09205b67b70ee1346c05505 Mon Sep 17 00:00:00 2001 From: Giannis Adamopoulos Date: Wed, 23 Feb 2011 14:24:57 +0000 Subject: [PATCH 121/287] [kernel32] - Add some debug prints - Fix some cases where we didn't check for the return value of CsrAllocateCaptureBuffer svn path=/trunk/; revision=50876 --- reactos/dll/win32/kernel32/misc/console.c | 34 +++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/reactos/dll/win32/kernel32/misc/console.c b/reactos/dll/win32/kernel32/misc/console.c index b608367b1c5..2b0d253b23e 100644 --- a/reactos/dll/win32/kernel32/misc/console.c +++ b/reactos/dll/win32/kernel32/misc/console.c @@ -384,6 +384,7 @@ IntExpungeConsoleCommandHistory(LPCVOID lpExeName, BOOL bUnicode) CaptureBuffer = CsrAllocateCaptureBuffer(1, IntStringSize(lpExeName, bUnicode)); if (!CaptureBuffer) { + DPRINT1("CsrAllocateCaptureBuffer failed!\n"); SetLastError(ERROR_NOT_ENOUGH_MEMORY); return FALSE; } @@ -466,6 +467,7 @@ GetConsoleAliasW(LPWSTR lpSource, CaptureBuffer = CsrAllocateCaptureBuffer(1, TargetBufferLength); if (!CaptureBuffer) { + DPRINT1("CsrAllocateCaptureBuffer failed!\n"); RtlFreeHeap(GetProcessHeap(), 0, Request); SetLastError(ERROR_NOT_ENOUGH_MEMORY); return 0; @@ -594,6 +596,7 @@ GetConsoleAliasExesW(LPWSTR lpExeNameBuffer, CaptureBuffer = CsrAllocateCaptureBuffer(1, ExeNameBufferLength); if (!CaptureBuffer) { + DPRINT1("CsrAllocateCaptureBuffer failed!\n"); SetLastError(ERROR_NOT_ENOUGH_MEMORY); return 0; } @@ -849,6 +852,7 @@ IntGetConsoleCommandHistory(LPVOID lpHistory, DWORD cbHistory, LPCVOID lpExeName HistoryLength); if (!CaptureBuffer) { + DPRINT1("CsrAllocateCaptureBuffer failed!\n"); SetLastError(ERROR_NOT_ENOUGH_MEMORY); return 0; } @@ -927,6 +931,7 @@ IntGetConsoleCommandHistoryLength(LPCVOID lpExeName, BOOL bUnicode) CaptureBuffer = CsrAllocateCaptureBuffer(1, IntStringSize(lpExeName, bUnicode)); if (!CaptureBuffer) { + DPRINT1("CsrAllocateCaptureBuffer failed!\n"); SetLastError(ERROR_NOT_ENOUGH_MEMORY); return 0; } @@ -1318,6 +1323,7 @@ IntSetConsoleNumberOfCommands(DWORD dwNumCommands, CaptureBuffer = CsrAllocateCaptureBuffer(1, IntStringSize(lpExeName, bUnicode)); if (!CaptureBuffer) { + DPRINT1("CsrAllocateCaptureBuffer failed!\n"); SetLastError(ERROR_NOT_ENOUGH_MEMORY); return FALSE; } @@ -1696,6 +1702,7 @@ IntReadConsole(HANDLE hConsoleInput, CaptureBuffer = CsrAllocateCaptureBuffer(1, nNumberOfCharsToRead * CharSize); if (CaptureBuffer == NULL) { + DPRINT1("CsrAllocateCaptureBuffer failed!\n"); SetLastError(ERROR_NOT_ENOUGH_MEMORY); return FALSE; } @@ -2052,6 +2059,12 @@ IntPeekConsoleInput(HANDLE hConsoleInput, /* Allocate a Capture Buffer */ DPRINT("IntPeekConsoleInput: %lx %p\n", Size, lpNumberOfEventsRead); CaptureBuffer = CsrAllocateCaptureBuffer(1, Size); + if (CaptureBuffer == NULL) + { + DPRINT1("CsrAllocateCaptureBuffer failed!\n"); + SetLastError(ERROR_NOT_ENOUGH_MEMORY); + return FALSE; + } /* Allocate space in the Buffer */ CsrCaptureMessageBuffer(CaptureBuffer, @@ -2281,6 +2294,12 @@ IntWriteConsoleInput(HANDLE hConsoleInput, /* Allocate a Capture Buffer */ DPRINT("IntWriteConsoleInput: %lx %p\n", Size, lpNumberOfEventsWritten); CaptureBuffer = CsrAllocateCaptureBuffer(1, Size); + if (CaptureBuffer == NULL) + { + DPRINT1("CsrAllocateCaptureBuffer failed!\n"); + SetLastError(ERROR_NOT_ENOUGH_MEMORY); + return FALSE; + } /* Allocate space in the Buffer */ CsrCaptureMessageBuffer(CaptureBuffer, @@ -2389,6 +2408,12 @@ IntReadConsoleOutput(HANDLE hConsoleOutput, /* Allocate a Capture Buffer */ DPRINT("IntReadConsoleOutput: %lx %p\n", Size, lpReadRegion); CaptureBuffer = CsrAllocateCaptureBuffer(1, Size); + if (CaptureBuffer == NULL) + { + DPRINT1("CsrAllocateCaptureBuffer failed with size 0x%x!\n", Size); + SetLastError(ERROR_NOT_ENOUGH_MEMORY); + return FALSE; + } /* Allocate space in the Buffer */ CsrCaptureMessageBuffer(CaptureBuffer, @@ -2505,6 +2530,12 @@ IntWriteConsoleOutput(HANDLE hConsoleOutput, /* Allocate a Capture Buffer */ DPRINT("IntWriteConsoleOutput: %lx %p\n", Size, lpWriteRegion); CaptureBuffer = CsrAllocateCaptureBuffer(1, Size); + if (CaptureBuffer == NULL) + { + DPRINT1("CsrAllocateCaptureBuffer failed!\n"); + SetLastError(ERROR_NOT_ENOUGH_MEMORY); + return FALSE; + } /* Allocate space in the Buffer */ CsrCaptureMessageBuffer(CaptureBuffer, @@ -3561,6 +3592,7 @@ IntGetConsoleTitle(LPVOID lpConsoleTitle, DWORD nSize, BOOL bUnicode) CaptureBuffer = CsrAllocateCaptureBuffer(1, Request.Data.GetTitleRequest.Length); if (CaptureBuffer == NULL) { + DPRINT1("CsrAllocateCaptureBuffer failed!\n"); SetLastError(ERROR_NOT_ENOUGH_MEMORY); return 0; } @@ -3652,6 +3684,7 @@ SetConsoleTitleW(LPCWSTR lpConsoleTitle) CaptureBuffer = CsrAllocateCaptureBuffer(1, Request.Data.SetTitleRequest.Length); if (CaptureBuffer == NULL) { + DPRINT1("CsrAllocateCaptureBuffer failed!\n"); SetLastError(ERROR_NOT_ENOUGH_MEMORY); return FALSE; } @@ -3866,6 +3899,7 @@ GetConsoleProcessList(LPDWORD lpdwProcessList, CaptureBuffer = CsrAllocateCaptureBuffer(1, dwProcessCount * sizeof(DWORD)); if (CaptureBuffer == NULL) { + DPRINT1("CsrAllocateCaptureBuffer failed!\n"); SetLastError(ERROR_NOT_ENOUGH_MEMORY); return FALSE; } From dfeb7b0d1c126ef78da1bd983891fc9eb4ab661e Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Wed, 23 Feb 2011 15:14:12 +0000 Subject: [PATCH 122/287] [PORTCLS] - Re-add the hack for gcc svn path=/trunk/; revision=50877 --- .../wdm/audio/backpln/portcls/dma_slave.cpp | 20 +++++ .../wdm/audio/backpln/portcls/interfaces.hpp | 73 ++++++++++++++++++- 2 files changed, 92 insertions(+), 1 deletion(-) diff --git a/reactos/drivers/wdm/audio/backpln/portcls/dma_slave.cpp b/reactos/drivers/wdm/audio/backpln/portcls/dma_slave.cpp index 35109f06685..7aefa8e531f 100644 --- a/reactos/drivers/wdm/audio/backpln/portcls/dma_slave.cpp +++ b/reactos/drivers/wdm/audio/backpln/portcls/dma_slave.cpp @@ -194,6 +194,8 @@ CDmaChannelInit::MaximumBufferSize() return m_MaximumBufferSize; } +#ifdef _MSC_VER + PHYSICAL_ADDRESS NTAPI CDmaChannelInit::PhysicalAddress() @@ -203,6 +205,24 @@ CDmaChannelInit::PhysicalAddress() return m_Address; } +#else + +PHYSICAL_ADDRESS +NTAPI +CDmaChannelInit::PhysicalAddress( + PPHYSICAL_ADDRESS Address) +{ + DPRINT("CDmaChannelInit_PhysicalAdress: this %p Virtuell %p Physical High %x Low %x%\n", this, m_Buffer, m_Address.HighPart, m_Address.LowPart); + + PHYSICAL_ADDRESS Result; + + Address->QuadPart = m_Address.QuadPart; + Result.QuadPart = (PtrToUlong(Address)); + return Result; +} + + +#endif VOID NTAPI diff --git a/reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp b/reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp index bec3ccd68b1..8e3f70522c5 100644 --- a/reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp +++ b/reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp @@ -106,7 +106,7 @@ DEFINE_GUID(IID_IIrpTargetFactory, 0xB4C90A62, 0x5791, 0x11D0, 0xF9, 0x86, 0x00, IN PDEVICE_OBJECT DeviceObject, \ IN PIRP Irp)PURE; \ \ - STDMETHOD_(NTSTATUS, Close)(THIS_ \ + virtual NTSTATUS Close( \ IN PDEVICE_OBJECT DeviceObject, \ IN PIRP Irp)PURE; \ \ @@ -888,6 +888,8 @@ typedef IPortPinDMus *PPORTPINDMUS; ***************************************************************************** */ +#ifdef _MSC_VER + #define IMP_IDmaChannelEx \ STDMETHODIMP_(NTSTATUS) AllocateBuffer( \ IN ULONG BufferSize, \ @@ -916,6 +918,42 @@ typedef IPortPinDMus *PPORTPINDMUS; IN PVOID Source, \ IN ULONG ByteCount) +#else + +#define IMP_IDmaChannelEx \ + STDMETHODIMP_(NTSTATUS) AllocateBuffer( \ + IN ULONG BufferSize, \ + IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \ + \ + STDMETHODIMP_(void) FreeBuffer(void); \ + STDMETHODIMP_(ULONG) TransferCount(void); \ + STDMETHODIMP_(ULONG) MaximumBufferSize(void); \ + STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \ + STDMETHODIMP_(ULONG) BufferSize(void); \ + \ + STDMETHODIMP_(void) SetBufferSize( \ + IN ULONG BufferSize); \ + \ + STDMETHODIMP_(PVOID) SystemAddress(void); \ + STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress( \ + IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \ + STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \ + \ + STDMETHODIMP_(void) CopyTo( \ + IN PVOID Destination, \ + IN PVOID Source, \ + IN ULONG ByteCount); \ + \ + STDMETHODIMP_(void) CopyFrom( \ + IN PVOID Destination, \ + IN PVOID Source, \ + IN ULONG ByteCount) + + + +#endif + + #define IMP_IDmaChannelSlaveEx \ IMP_IDmaChannelEx; \ STDMETHODIMP_(NTSTATUS) Start( \ @@ -934,6 +972,8 @@ typedef IPortPinDMus *PPORTPINDMUS; IN PDEVICE_DESCRIPTION DeviceDescription, \ IN PDEVICE_OBJECT DeviceObject) +#ifdef _MSC_VER + #define DEFINE_ABSTRACT_DMACHANNEL_EX() \ STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \ IN ULONG BufferSize, \ @@ -961,7 +1001,38 @@ typedef IPortPinDMus *PPORTPINDMUS; IN PVOID Destination, \ IN PVOID Source, \ IN ULONG ByteCount) PURE; +#else +#define DEFINE_ABSTRACT_DMACHANNEL_EX() \ + STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \ + IN ULONG BufferSize, \ + IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \ +\ + STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \ + STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \ + STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \ + STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \ + STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \ +\ + STDMETHOD_(void, SetBufferSize)( THIS_ \ + IN ULONG BufferSize) PURE; \ +\ + STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \ + STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS_ \ + IN PPHYSICAL_ADDRESS Address) PURE; \ + STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \ +\ + STDMETHOD_(void, CopyTo)( THIS_ \ + IN PVOID Destination, \ + IN PVOID Source, \ + IN ULONG ByteCount) PURE; \ +\ + STDMETHOD_(void, CopyFrom)( THIS_ \ + IN PVOID Destination, \ + IN PVOID Source, \ + IN ULONG ByteCount) PURE; + +#endif #undef INTERFACE #define INTERFACE IDmaChannelInit From 9c7dc2437e2b3c3ac80deebb793018d936752899 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Wed, 23 Feb 2011 17:15:13 +0000 Subject: [PATCH 123/287] - Fix build svn path=/trunk/; revision=50878 --- reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp b/reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp index 8e3f70522c5..ce924174852 100644 --- a/reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp +++ b/reactos/drivers/wdm/audio/backpln/portcls/interfaces.hpp @@ -106,7 +106,7 @@ DEFINE_GUID(IID_IIrpTargetFactory, 0xB4C90A62, 0x5791, 0x11D0, 0xF9, 0x86, 0x00, IN PDEVICE_OBJECT DeviceObject, \ IN PIRP Irp)PURE; \ \ - virtual NTSTATUS Close( \ + STDMETHOD_(NTSTATUS, Close)( \ IN PDEVICE_OBJECT DeviceObject, \ IN PIRP Irp)PURE; \ \ From d88c6cc49de1dd7ddcd4643fc13d75e9741b4921 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 23 Feb 2011 18:46:02 +0000 Subject: [PATCH 124/287] [WIN32K] add code to register pre/post systemcall hooks. Its #if 0'ed to avoid unneccessary overhead. Can be enabled for debugging puposes. svn path=/trunk/; revision=50879 --- reactos/subsystems/win32/win32k/main/dllmain.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/reactos/subsystems/win32/win32k/main/dllmain.c b/reactos/subsystems/win32/win32k/main/dllmain.c index 58afc05a97b..f78bf1940b9 100644 --- a/reactos/subsystems/win32/win32k/main/dllmain.c +++ b/reactos/subsystems/win32/win32k/main/dllmain.c @@ -460,6 +460,12 @@ DriverEntry( /* Register our per-process and per-thread structures. */ PsEstablishWin32Callouts((PWIN32_CALLOUTS_FPNS)&CalloutData); +#if 0 // DBG + /* Register service hook callbacks */ + KdSystemDebugControl('CsoR', DbgPreServiceHook, ID_Win32PreServiceHook, 0, 0, 0, 0); + KdSystemDebugControl('CsoR', DbgPostServiceHook, ID_Win32PostServiceHook, 0, 0, 0, 0); +#endif + /* Create the global USER heap */ GlobalUserHeap = UserCreateHeap(&GlobalUserHeapSection, &GlobalUserHeapBase, From b0e397de26f54eb3f1994ed416a7cbf6824f7aa7 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 23 Feb 2011 18:51:57 +0000 Subject: [PATCH 125/287] [WIN32K] Small readability improvement. svn path=/trunk/; revision=50880 --- reactos/subsystems/win32/win32k/objects/path.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/path.c b/reactos/subsystems/win32/win32k/objects/path.c index 801e8e598c8..f94c8d30087 100644 --- a/reactos/subsystems/win32/win32k/objects/path.c +++ b/reactos/subsystems/win32/win32k/objects/path.c @@ -2281,13 +2281,15 @@ NtGdiFillPath(HDC hDC) BOOL ret = FALSE; PPATH pPath; PDC_ATTR pdcattr; - PDC dc = DC_LockDc ( hDC ); + PDC dc; - if ( !dc ) + dc = DC_LockDc(hDC); + if (!dc) { EngSetLastError(ERROR_INVALID_PARAMETER); return FALSE; } + pPath = PATH_LockPath( dc->dclevel.hPath ); if (!pPath) { From ab7f1c1255194c1135789c7afc253f5bb3aed4d9 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 23 Feb 2011 19:10:42 +0000 Subject: [PATCH 126/287] =?UTF-8?q?[WIN32K]=20Patch=20by=20Rafa=C5=82=20Ha?= =?UTF-8?q?rabie=C5=84=20:=20-=20Create=20a=20new=20region=20covering=20th?= =?UTF-8?q?e=20full=20desktop=20in=20UserRedrawDesktop=20instead=20of=20us?= =?UTF-8?q?ing=20Window->hrgnUpdate.=20Fixes=20"IntGdiCombineRgn=20require?= =?UTF-8?q?s=20hSrc2=20=20!=3D=20NULL"=20messages=20and=20redrawing=20issu?= =?UTF-8?q?es=20on=20mode=20change.=20See=20issue=20#5949=20for=20more=20d?= =?UTF-8?q?etails.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit svn path=/trunk/; revision=50881 --- reactos/subsystems/win32/win32k/ntuser/desktop.c | 8 ++++++-- reactos/subsystems/win32/win32k/ntuser/painting.c | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/reactos/subsystems/win32/win32k/ntuser/desktop.c b/reactos/subsystems/win32/win32k/ntuser/desktop.c index b0b3c7ce803..1653bc21494 100644 --- a/reactos/subsystems/win32/win32k/ntuser/desktop.c +++ b/reactos/subsystems/win32/win32k/ntuser/desktop.c @@ -616,15 +616,19 @@ VOID APIENTRY UserRedrawDesktop() { PWND Window = NULL; - + HRGN hRgn; + Window = UserGetDesktopWindow(); + hRgn = IntSysCreateRectRgnIndirect(&Window->rcWindow); IntInvalidateWindows( Window, - Window->hrgnUpdate, + hRgn, RDW_FRAME | RDW_ERASE | RDW_INVALIDATE | RDW_ALLCHILDREN); + + REGION_FreeRgnByHandle(hRgn); } diff --git a/reactos/subsystems/win32/win32k/ntuser/painting.c b/reactos/subsystems/win32/win32k/ntuser/painting.c index c9bc3146a60..e74639180ce 100644 --- a/reactos/subsystems/win32/win32k/ntuser/painting.c +++ b/reactos/subsystems/win32/win32k/ntuser/painting.c @@ -307,9 +307,9 @@ co_IntPaintWindows(PWND Wnd, ULONG Flags, BOOL Recurse) /* * IntInvalidateWindows * - * Internal function used by IntRedrawWindow. + * Internal function used by IntRedrawWindow, UserRedrawDesktop, + * co_WinPosSetWindowPos, IntValidateParent, co_UserRedrawWindow. */ - VOID FASTCALL IntInvalidateWindows(PWND Wnd, HRGN hRgn, ULONG Flags) { From 70668524384eab423a41b1d68bfccfad43ff70fe Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 23 Feb 2011 19:21:33 +0000 Subject: [PATCH 127/287] =?UTF-8?q?[USER32]=20Patch=20by=20Rafa=C5=82=20Ha?= =?UTF-8?q?rabie=C5=84=20:=20-=20remove=20a=20hack=20in=20DrawMenuBar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See issue #5949 for more details. svn path=/trunk/; revision=50882 --- reactos/dll/win32/user32/windows/menu.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/reactos/dll/win32/user32/windows/menu.c b/reactos/dll/win32/user32/windows/menu.c index 4bdfce8e2af..768cf65c3f3 100644 --- a/reactos/dll/win32/user32/windows/menu.c +++ b/reactos/dll/win32/user32/windows/menu.c @@ -4068,13 +4068,9 @@ DrawMenuBar(HWND hWnd) MenuGetRosMenuInfo(&MenuInfo, hMenu); MenuInfo.Height = 0; // make sure to recalc size MenuSetRosMenuInfo(&MenuInfo); - /* The wine method doesn't work and I suspect it's more effort - then hackfix solution + SetWindowPos( hWnd, 0, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_FRAMECHANGED ); - return TRUE;*/ - // FIXME: hackfix - DefWndNCPaint(hWnd,(HRGN)-1,-1); return TRUE; } From c16c4ace2b47dc397904c5458034b0053a8105a7 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Wed, 23 Feb 2011 21:26:18 +0000 Subject: [PATCH 128/287] [PSDK] - Improve commctrl.h [CRT] - Update _mingw_mac.h from mingw-w64 and add _mingw_unicode.h svn path=/trunk/; revision=50883 --- reactos/include/crt/_mingw_mac.h | 24 +- reactos/include/crt/_mingw_unicode.h | 33 + reactos/include/psdk/commctrl.h | 1297 +++++++++----------------- 3 files changed, 505 insertions(+), 849 deletions(-) create mode 100644 reactos/include/crt/_mingw_unicode.h diff --git a/reactos/include/crt/_mingw_mac.h b/reactos/include/crt/_mingw_mac.h index de7351943f8..a3890f4b243 100644 --- a/reactos/include/crt/_mingw_mac.h +++ b/reactos/include/crt/_mingw_mac.h @@ -116,19 +116,31 @@ #define __WINT_TYPE__ unsigned short #endif +#undef __MINGW_EXTENSION #if defined(__GNUC__) || defined(__GNUG__) #define __MINGW_EXTENSION __extension__ #else #define __MINGW_EXTENSION #endif -#ifdef UNICODE -# define __MINGW_NAME_AW(func) func##W -#else -# define __MINGW_NAME_AW(func) func##A +/* Special case nameless struct/union. */ +#ifndef __C89_NAMELESS +#define __C89_NAMELESS __MINGW_EXTENSION + +#define __C89_NAMELESSSTRUCTNAME +#define __C89_NAMELESSUNIONNAME #endif -#define __MINGW_TYPEDEF_AW(type) \ - typedef __MINGW_NAME_AW(type) type; + +#ifndef __GNU_EXTENSION +#define __GNU_EXTENSION __MINGW_EXTENSION +#endif + +/* MinGW-w64 has some additional C99 printf/scanf feature support. + So we add some helper macros to ease recognition of them. */ +#define __MINGW_HAVE_ANSI_C99_PRINTF 1 +#define __MINGW_HAVE_WIDE_C99_PRINTF 1 +#define __MINGW_HAVE_ANSI_C99_SCANF 1 +#define __MINGW_HAVE_WIDE_C99_SCANF 1 #endif /* _INC_CRTDEFS_MACRO */ diff --git a/reactos/include/crt/_mingw_unicode.h b/reactos/include/crt/_mingw_unicode.h new file mode 100644 index 00000000000..38334bc71e4 --- /dev/null +++ b/reactos/include/crt/_mingw_unicode.h @@ -0,0 +1,33 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER.PD within this package. + */ + +#if !defined(_INC_CRT_UNICODE_MACROS) +/* _INC_CRT_UNICODE_MACROS defined based on UNICODE flag */ + +#if defined(UNICODE) +# define _INC_CRT_UNICODE_MACROS 1 +# define __MINGW_NAME_AW(func) func##W +# define __MINGW_NAME_AW_EXT(func,ext) func##W##ext +# define __MINGW_NAME_UAW(func) func##_W +# define __MINGW_NAME_UAW_EXT(func,ext) func##_W_##ext +# define __MINGW_STRING_AW(str) L##str /* same as TEXT() from winnt.h */ +# define __MINGW_PROCNAMEEXT_AW "W" +#else +# define _INC_CRT_UNICODE_MACROS 2 +# define __MINGW_NAME_AW(func) func##A +# define __MINGW_NAME_AW_EXT(func,ext) func##A##ext +# define __MINGW_NAME_UAW(func) func##_A +# define __MINGW_NAME_UAW_EXT(func,ext) func##_A_##ext +# define __MINGW_STRING_AW(str) str /* same as TEXT() from winnt.h */ +# define __MINGW_PROCNAMEEXT_AW "A" +#endif + +#define __MINGW_TYPEDEF_AW(type) \ + typedef __MINGW_NAME_AW(type) type; +#define __MINGW_TYPEDEF_UAW(type) \ + typedef __MINGW_NAME_UAW(type) type; + +#endif /* !defined(_INC_CRT_UNICODE_MACROS) */ diff --git a/reactos/include/psdk/commctrl.h b/reactos/include/psdk/commctrl.h index 0ed66f5355f..adda9fff124 100644 --- a/reactos/include/psdk/commctrl.h +++ b/reactos/include/psdk/commctrl.h @@ -6,6 +6,8 @@ #ifndef _INC_COMMCTRL #define _INC_COMMCTRL +#include <_mingw_unicode.h> + #ifndef _WINRESRC_ #ifndef _WIN32_IE #define _WIN32_IE 0x0501 @@ -336,6 +338,7 @@ extern "C" { WINCOMMCTRLAPI COLORREF WINAPI ImageList_SetBkColor(HIMAGELIST himl,COLORREF clrBk); WINCOMMCTRLAPI COLORREF WINAPI ImageList_GetBkColor(HIMAGELIST himl); WINCOMMCTRLAPI WINBOOL WINAPI ImageList_SetOverlayImage(HIMAGELIST himl,int iImage,int iOverlay); + WINCOMMCTRLAPI HRESULT WINAPI HIMAGELIST_QueryInterface(HIMAGELIST,REFIID,void **); #define ImageList_AddIcon(himl,hicon) ImageList_ReplaceIcon(himl,-1,hicon) #define ILD_NORMAL 0x0 @@ -372,11 +375,7 @@ extern "C" { WINCOMMCTRLAPI HIMAGELIST WINAPI ImageList_LoadImageA(HINSTANCE hi,LPCSTR lpbmp,int cx,int cGrow,COLORREF crMask,UINT uType,UINT uFlags); WINCOMMCTRLAPI HIMAGELIST WINAPI ImageList_LoadImageW(HINSTANCE hi,LPCWSTR lpbmp,int cx,int cGrow,COLORREF crMask,UINT uType,UINT uFlags); -#ifdef UNICODE -#define ImageList_LoadImage ImageList_LoadImageW -#else -#define ImageList_LoadImage ImageList_LoadImageA -#endif +#define ImageList_LoadImage __MINGW_NAME_AW(ImageList_LoadImage) #define ILCF_MOVE 0x0 #define ILCF_SWAP 0x1 @@ -417,8 +416,6 @@ extern "C" { WINCOMMCTRLAPI WINBOOL WINAPI ImageList_GetImageInfo(HIMAGELIST himl,int i,IMAGEINFO *pImageInfo); WINCOMMCTRLAPI HIMAGELIST WINAPI ImageList_Merge(HIMAGELIST himl1,int i1,HIMAGELIST himl2,int i2,int dx,int dy); WINCOMMCTRLAPI HIMAGELIST WINAPI ImageList_Duplicate(HIMAGELIST himl); - WINCOMMCTRLAPI HRESULT WINAPI HIMAGELIST_QueryInterface(HIMAGELIST himl, REFIID riid, void **ppv); - #endif #ifndef NOHEADER @@ -426,11 +423,7 @@ extern "C" { #define WC_HEADERA "SysHeader32" #define WC_HEADERW L"SysHeader32" -#ifdef UNICODE -#define WC_HEADER WC_HEADERW -#else -#define WC_HEADER WC_HEADERA -#endif +#define WC_HEADER __MINGW_NAME_AW(WC_HEADER) #define HDS_HORZ 0x0 #define HDS_BUTTONS 0x2 @@ -451,17 +444,10 @@ extern "C" { #define HDFT_HASNOVALUE 0x8000 -#ifdef UNICODE -#define HD_TEXTFILTER HD_TEXTFILTERW -#define HDTEXTFILTER HD_TEXTFILTERW -#define LPHD_TEXTFILTER LPHD_TEXTFILTERW -#define LPHDTEXTFILTER LPHD_TEXTFILTERW -#else -#define HD_TEXTFILTER HD_TEXTFILTERA -#define HDTEXTFILTER HD_TEXTFILTERA -#define LPHD_TEXTFILTER LPHD_TEXTFILTERA -#define LPHDTEXTFILTER LPHD_TEXTFILTERA -#endif +#define HD_TEXTFILTER __MINGW_NAME_AW(HD_TEXTFILTER) +#define HDTEXTFILTER __MINGW_NAME_AW(HD_TEXTFILTER) +#define LPHD_TEXTFILTER __MINGW_NAME_AW(LPHD_TEXTFILTER) +#define LPHDTEXTFILTER __MINGW_NAME_AW(LPHD_TEXTFILTER) typedef struct _HD_TEXTFILTERA { LPSTR pszText; @@ -508,15 +494,10 @@ extern "C" { void *pvFilter; } HDITEMW,*LPHDITEMW; -#ifdef UNICODE -#define HDITEM HDITEMW -#define LPHDITEM LPHDITEMW -#define HDITEM_V1_SIZE HDITEMW_V1_SIZE -#else -#define HDITEM HDITEMA -#define LPHDITEM LPHDITEMA -#define HDITEM_V1_SIZE HDITEMA_V1_SIZE -#endif +#define HDITEM __MINGW_NAME_AW(HDITEM) +#define LPHDITEM __MINGW_NAME_AW(LPHDITEM) + +#define HDITEM_V1_SIZE __MINGW_NAME_AW_EXT(HDITEM,_V1_SIZE) #define HDI_WIDTH 0x1 #define HDI_HEIGHT HDI_WIDTH @@ -555,11 +536,7 @@ extern "C" { #define HDM_INSERTITEMA (HDM_FIRST+1) #define HDM_INSERTITEMW (HDM_FIRST+10) -#ifdef UNICODE -#define HDM_INSERTITEM HDM_INSERTITEMW -#else -#define HDM_INSERTITEM HDM_INSERTITEMA -#endif +#define HDM_INSERTITEM __MINGW_NAME_AW(HDM_INSERTITEM) #define Header_InsertItem(hwndHD,i,phdi) (int)SNDMSG((hwndHD),HDM_INSERTITEM,(WPARAM)(int)(i),(LPARAM)(const HD_ITEM *)(phdi)) @@ -569,22 +546,14 @@ extern "C" { #define HDM_GETITEMA (HDM_FIRST+3) #define HDM_GETITEMW (HDM_FIRST+11) -#ifdef UNICODE -#define HDM_GETITEM HDM_GETITEMW -#else -#define HDM_GETITEM HDM_GETITEMA -#endif +#define HDM_GETITEM __MINGW_NAME_AW(HDM_GETITEM) #define Header_GetItem(hwndHD,i,phdi) (WINBOOL)SNDMSG((hwndHD),HDM_GETITEM,(WPARAM)(int)(i),(LPARAM)(HD_ITEM *)(phdi)) #define HDM_SETITEMA (HDM_FIRST+4) #define HDM_SETITEMW (HDM_FIRST+12) -#ifdef UNICODE -#define HDM_SETITEM HDM_SETITEMW -#else -#define HDM_SETITEM HDM_SETITEMA -#endif +#define HDM_SETITEM __MINGW_NAME_AW(HDM_SETITEM) #define Header_SetItem(hwndHD,i,phdi) (WINBOOL)SNDMSG((hwndHD),HDM_SETITEM,(WPARAM)(int)(i),(LPARAM)(const HD_ITEM *)(phdi)) @@ -688,27 +657,15 @@ extern "C" { #define HDN_FILTERCHANGE (HDN_FIRST-12) #define HDN_FILTERBTNCLICK (HDN_FIRST-13) -#ifdef UNICODE -#define HDN_ITEMCHANGING HDN_ITEMCHANGINGW -#define HDN_ITEMCHANGED HDN_ITEMCHANGEDW -#define HDN_ITEMCLICK HDN_ITEMCLICKW -#define HDN_ITEMDBLCLICK HDN_ITEMDBLCLICKW -#define HDN_DIVIDERDBLCLICK HDN_DIVIDERDBLCLICKW -#define HDN_BEGINTRACK HDN_BEGINTRACKW -#define HDN_ENDTRACK HDN_ENDTRACKW -#define HDN_TRACK HDN_TRACKW -#define HDN_GETDISPINFO HDN_GETDISPINFOW -#else -#define HDN_ITEMCHANGING HDN_ITEMCHANGINGA -#define HDN_ITEMCHANGED HDN_ITEMCHANGEDA -#define HDN_ITEMCLICK HDN_ITEMCLICKA -#define HDN_ITEMDBLCLICK HDN_ITEMDBLCLICKA -#define HDN_DIVIDERDBLCLICK HDN_DIVIDERDBLCLICKA -#define HDN_BEGINTRACK HDN_BEGINTRACKA -#define HDN_ENDTRACK HDN_ENDTRACKA -#define HDN_TRACK HDN_TRACKA -#define HDN_GETDISPINFO HDN_GETDISPINFOA -#endif +#define HDN_ITEMCHANGING __MINGW_NAME_AW(HDN_ITEMCHANGING) +#define HDN_ITEMCHANGED __MINGW_NAME_AW(HDN_ITEMCHANGED) +#define HDN_ITEMCLICK __MINGW_NAME_AW(HDN_ITEMCLICK) +#define HDN_ITEMDBLCLICK __MINGW_NAME_AW(HDN_ITEMDBLCLICK) +#define HDN_DIVIDERDBLCLICK __MINGW_NAME_AW(HDN_DIVIDERDBLCLICK) +#define HDN_BEGINTRACK __MINGW_NAME_AW(HDN_BEGINTRACK) +#define HDN_ENDTRACK __MINGW_NAME_AW(HDN_ENDTRACK) +#define HDN_TRACK __MINGW_NAME_AW(HDN_TRACK) +#define HDN_GETDISPINFO __MINGW_NAME_AW(HDN_GETDISPINFO) #define HD_NOTIFYA NMHEADERA #define HD_NOTIFYW NMHEADERW @@ -728,13 +685,8 @@ extern "C" { HDITEMW *pitem; } NMHEADERW,*LPNMHEADERW; -#ifdef UNICODE -#define NMHEADER NMHEADERW -#define LPNMHEADER LPNMHEADERW -#else -#define NMHEADER NMHEADERA -#define LPNMHEADER LPNMHEADERA -#endif +#define NMHEADER __MINGW_NAME_AW(NMHEADER) +#define LPNMHEADER __MINGW_NAME_AW(LPNMHEADER) typedef struct tagNMHDDISPINFOW { NMHDR hdr; @@ -756,13 +708,8 @@ extern "C" { LPARAM lParam; } NMHDDISPINFOA,*LPNMHDDISPINFOA; -#ifdef UNICODE -#define NMHDDISPINFO NMHDDISPINFOW -#define LPNMHDDISPINFO LPNMHDDISPINFOW -#else -#define NMHDDISPINFO NMHDDISPINFOA -#define LPNMHDDISPINFO LPNMHDDISPINFOA -#endif +#define NMHDDISPINFO __MINGW_NAME_AW(NMHDDISPINFO) +#define LPNMHDDISPINFO __MINGW_NAME_AW(LPNMHDDISPINFO) typedef struct tagNMHDFILTERBTNCLICK { NMHDR hdr; @@ -776,11 +723,7 @@ extern "C" { #define TOOLBARCLASSNAMEW L"ToolbarWindow32" #define TOOLBARCLASSNAMEA "ToolbarWindow32" -#ifdef UNICODE -#define TOOLBARCLASSNAME TOOLBARCLASSNAMEW -#else -#define TOOLBARCLASSNAME TOOLBARCLASSNAMEA -#endif +#define TOOLBARCLASSNAME __MINGW_NAME_AW(TOOLBARCLASSNAME) typedef struct _TBBUTTON { int iBitmap; @@ -957,13 +900,8 @@ extern "C" { LPCWSTR pszValueName; } TBSAVEPARAMSW,*LPTBSAVEPARAMW; -#ifdef UNICODE -#define TBSAVEPARAMS TBSAVEPARAMSW -#define LPTBSAVEPARAMS LPTBSAVEPARAMSW -#else -#define TBSAVEPARAMS TBSAVEPARAMSA -#define LPTBSAVEPARAMS LPTBSAVEPARAMSA -#endif +#define TBSAVEPARAMS __MINGW_NAME_AW(TBSAVEPARAMS) +#define LPTBSAVEPARAMS __MINGW_NAME_AW(LPTBSAVEPARAMS) #define TB_SAVERESTOREA (WM_USER+26) #define TB_SAVERESTOREW (WM_USER+76) @@ -1002,15 +940,10 @@ extern "C" { #define TB_SETMAXTEXTROWS (WM_USER+60) #define TB_GETTEXTROWS (WM_USER+61) -#ifdef UNICODE -#define TB_GETBUTTONTEXT TB_GETBUTTONTEXTW -#define TB_SAVERESTORE TB_SAVERESTOREW -#define TB_ADDSTRING TB_ADDSTRINGW -#else -#define TB_GETBUTTONTEXT TB_GETBUTTONTEXTA -#define TB_SAVERESTORE TB_SAVERESTOREA -#define TB_ADDSTRING TB_ADDSTRINGA -#endif +#define TB_GETBUTTONTEXT __MINGW_NAME_AW(TB_GETBUTTONTEXT) +#define TB_SAVERESTORE __MINGW_NAME_AW(TB_SAVERESTORE) +#define TB_ADDSTRING __MINGW_NAME_AW(TB_ADDSTRING) + #define TB_GETOBJECT (WM_USER+62) #define TB_GETHOTITEM (WM_USER+71) #define TB_SETHOTITEM (WM_USER+72) @@ -1044,11 +977,8 @@ extern "C" { #define TB_GETUNICODEFORMAT CCM_GETUNICODEFORMAT #define TB_MAPACCELERATORW (WM_USER+90) -#ifdef UNICODE -#define TB_MAPACCELERATOR TB_MAPACCELERATORW -#else -#define TB_MAPACCELERATOR TB_MAPACCELERATORA -#endif + +#define TB_MAPACCELERATOR __MINGW_NAME_AW(TB_MAPACCELERATOR) typedef struct { HINSTANCE hInstOld; @@ -1097,48 +1027,31 @@ extern "C" { int cchText; } TBBUTTONINFOW,*LPTBBUTTONINFOW; -#ifdef UNICODE -#define TBBUTTONINFO TBBUTTONINFOW -#define LPTBBUTTONINFO LPTBBUTTONINFOW -#else -#define TBBUTTONINFO TBBUTTONINFOA -#define LPTBBUTTONINFO LPTBBUTTONINFOA -#endif +#define TBBUTTONINFO __MINGW_NAME_AW(TBBUTTONINFO) +#define LPTBBUTTONINFO __MINGW_NAME_AW(LPTBBUTTONINFO) #define TB_GETBUTTONINFOW (WM_USER+63) #define TB_SETBUTTONINFOW (WM_USER+64) #define TB_GETBUTTONINFOA (WM_USER+65) #define TB_SETBUTTONINFOA (WM_USER+66) -#ifdef UNICODE -#define TB_GETBUTTONINFO TB_GETBUTTONINFOW -#define TB_SETBUTTONINFO TB_SETBUTTONINFOW -#else -#define TB_GETBUTTONINFO TB_GETBUTTONINFOA -#define TB_SETBUTTONINFO TB_SETBUTTONINFOA -#endif + +#define TB_GETBUTTONINFO __MINGW_NAME_AW(TB_GETBUTTONINFO) +#define TB_SETBUTTONINFO __MINGW_NAME_AW(TB_SETBUTTONINFO) #define TB_INSERTBUTTONW (WM_USER+67) #define TB_ADDBUTTONSW (WM_USER+68) #define TB_HITTEST (WM_USER+69) -#ifdef UNICODE -#define TB_INSERTBUTTON TB_INSERTBUTTONW -#define TB_ADDBUTTONS TB_ADDBUTTONSW -#else -#define TB_INSERTBUTTON TB_INSERTBUTTONA -#define TB_ADDBUTTONS TB_ADDBUTTONSA -#endif +#define TB_INSERTBUTTON __MINGW_NAME_AW(TB_INSERTBUTTON) +#define TB_ADDBUTTONS __MINGW_NAME_AW(TB_ADDBUTTONS) #define TB_SETDRAWTEXTFLAGS (WM_USER+70) #define TB_GETSTRINGW (WM_USER+91) #define TB_GETSTRINGA (WM_USER+92) -#ifdef UNICODE -#define TB_GETSTRING TB_GETSTRINGW -#else -#define TB_GETSTRING TB_GETSTRINGA -#endif + +#define TB_GETSTRING __MINGW_NAME_AW(TB_GETSTRING) #define TB_SETHOTITEM2 (WM_USER+94) #define TB_SETLISTGAP (WM_USER+96) @@ -1251,15 +1164,9 @@ extern "C" { LPARAM lParam; } NMTBGETINFOTIPW,*LPNMTBGETINFOTIPW; -#ifdef UNICODE -#define TBN_GETINFOTIP TBN_GETINFOTIPW -#define NMTBGETINFOTIP NMTBGETINFOTIPW -#define LPNMTBGETINFOTIP LPNMTBGETINFOTIPW -#else -#define TBN_GETINFOTIP TBN_GETINFOTIPA -#define NMTBGETINFOTIP NMTBGETINFOTIPA -#define LPNMTBGETINFOTIP LPNMTBGETINFOTIPA -#endif +#define TBN_GETINFOTIP __MINGW_NAME_AW(TBN_GETINFOTIP) +#define NMTBGETINFOTIP __MINGW_NAME_AW(NMTBGETINFOTIP) +#define LPNMTBGETINFOTIP __MINGW_NAME_AW(LPNMTBGETINFOTIP) #define TBNF_IMAGE 0x1 #define TBNF_TEXT 0x2 @@ -1285,25 +1192,15 @@ extern "C" { int cchText; } NMTBDISPINFOW,*LPNMTBDISPINFOW; -#ifdef UNICODE -#define TBN_GETDISPINFO TBN_GETDISPINFOW -#define NMTBDISPINFO NMTBDISPINFOW -#define LPNMTBDISPINFO LPNMTBDISPINFOW -#else -#define TBN_GETDISPINFO TBN_GETDISPINFOA -#define NMTBDISPINFO NMTBDISPINFOA -#define LPNMTBDISPINFO LPNMTBDISPINFOA -#endif +#define TBN_GETDISPINFO __MINGW_NAME_AW(TBN_GETDISPINFO) +#define NMTBDISPINFO __MINGW_NAME_AW(NMTBDISPINFO) +#define LPNMTBDISPINFO __MINGW_NAME_AW(LPNMTBDISPINFO) #define TBDDRET_DEFAULT 0 #define TBDDRET_NODEFAULT 1 #define TBDDRET_TREATPRESSED 2 -#ifdef UNICODE -#define TBN_GETBUTTONINFO TBN_GETBUTTONINFOW -#else -#define TBN_GETBUTTONINFO TBN_GETBUTTONINFOA -#endif +#define TBN_GETBUTTONINFO __MINGW_NAME_AW(TBN_GETBUTTONINFO) #define TBNOTIFYA NMTOOLBARA #define TBNOTIFYW NMTOOLBARW @@ -1331,13 +1228,9 @@ extern "C" { RECT rcButton; } NMTOOLBARW,*LPNMTOOLBARW; -#ifdef UNICODE -#define NMTOOLBAR NMTOOLBARW -#define LPNMTOOLBAR LPNMTOOLBARW -#else -#define NMTOOLBAR NMTOOLBARA -#define LPNMTOOLBAR LPNMTOOLBARA -#endif +#define NMTOOLBAR __MINGW_NAME_AW(NMTOOLBAR) +#define LPNMTOOLBAR __MINGW_NAME_AW(LPNMTOOLBAR) + #endif #ifndef NOREBAR @@ -1345,11 +1238,7 @@ extern "C" { #define REBARCLASSNAMEW L"ReBarWindow32" #define REBARCLASSNAMEA "ReBarWindow32" -#ifdef UNICODE -#define REBARCLASSNAME REBARCLASSNAMEW -#else -#define REBARCLASSNAME REBARCLASSNAMEA -#endif +#define REBARCLASSNAME __MINGW_NAME_AW(REBARCLASSNAME) #define RBIM_IMAGELIST 0x1 @@ -1449,19 +1338,14 @@ extern "C" { LPARAM lParam; UINT cxHeader; } REBARBANDINFOW,*LPREBARBANDINFOW; + typedef REBARBANDINFOW CONST *LPCREBARBANDINFOW; -#ifdef UNICODE -#define REBARBANDINFO REBARBANDINFOW -#define LPREBARBANDINFO LPREBARBANDINFOW -#define LPCREBARBANDINFO LPCREBARBANDINFOW -#define REBARBANDINFO_V3_SIZE REBARBANDINFOW_V3_SIZE -#else -#define REBARBANDINFO REBARBANDINFOA -#define LPREBARBANDINFO LPREBARBANDINFOA -#define LPCREBARBANDINFO LPCREBARBANDINFOA -#define REBARBANDINFO_V3_SIZE REBARBANDINFOA_V3_SIZE -#endif +#define REBARBANDINFO __MINGW_NAME_AW(REBARBANDINFO) +#define LPREBARBANDINFO __MINGW_NAME_AW(LPREBARBANDINFO) +#define LPCREBARBANDINFO __MINGW_NAME_AW(LPCREBARBANDINFO) + +#define REBARBANDINFO_V3_SIZE __MINGW_NAME_AW_EXT(REBARBANDINFO,_V3_SIZE) #define RB_INSERTBANDA (WM_USER+1) #define RB_DELETEBAND (WM_USER+2) @@ -1490,13 +1374,8 @@ extern "C" { #define RB_SETCOLORSCHEME CCM_SETCOLORSCHEME #define RB_GETCOLORSCHEME CCM_GETCOLORSCHEME -#ifdef UNICODE -#define RB_INSERTBAND RB_INSERTBANDW -#define RB_SETBANDINFO RB_SETBANDINFOW -#else -#define RB_INSERTBAND RB_INSERTBANDA -#define RB_SETBANDINFO RB_SETBANDINFOA -#endif +#define RB_INSERTBAND __MINGW_NAME_AW(RB_INSERTBAND) +#define RB_SETBANDINFO __MINGW_NAME_AW(RB_SETBANDINFO) #define RB_BEGINDRAG (WM_USER+24) #define RB_ENDDRAG (WM_USER+25) @@ -1505,11 +1384,7 @@ extern "C" { #define RB_GETBANDINFOW (WM_USER+28) #define RB_GETBANDINFOA (WM_USER+29) -#ifdef UNICODE -#define RB_GETBANDINFO RB_GETBANDINFOW -#else -#define RB_GETBANDINFO RB_GETBANDINFOA -#endif +#define RB_GETBANDINFO __MINGW_NAME_AW(RB_GETBANDINFO) #define RB_MINIMIZEBAND (WM_USER+30) #define RB_MAXIMIZEBAND (WM_USER+31) @@ -1605,11 +1480,8 @@ extern "C" { #define TOOLTIPS_CLASSW L"tooltips_class32" #define TOOLTIPS_CLASSA "tooltips_class32" -#ifdef UNICODE -#define TOOLTIPS_CLASS TOOLTIPS_CLASSW -#else -#define TOOLTIPS_CLASS TOOLTIPS_CLASSA -#endif + +#define TOOLTIPS_CLASS __MINGW_NAME_AW(TOOLTIPS_CLASS) #define LPTOOLINFOA LPTTTOOLINFOA #define LPTOOLINFOW LPTTTOOLINFOW @@ -1650,17 +1522,11 @@ extern "C" { void *lpReserved; } TTTOOLINFOW,NEAR *PTOOLINFOW,*LPTTTOOLINFOW; -#ifdef UNICODE -#define TTTOOLINFO TTTOOLINFOW -#define PTOOLINFO PTOOLINFOW -#define LPTTTOOLINFO LPTTTOOLINFOW -#define TTTOOLINFO_V1_SIZE TTTOOLINFOW_V1_SIZE -#else -#define PTOOLINFO PTOOLINFOA -#define TTTOOLINFO TTTOOLINFOA -#define LPTTTOOLINFO LPTTTOOLINFOA -#define TTTOOLINFO_V1_SIZE TTTOOLINFOA_V1_SIZE -#endif +#define TTTOOLINFO __MINGW_NAME_AW(TTTOOLINFO) +#define PTOOLINFO __MINGW_NAME_AW(PTOOLINFO) +#define LPTTTOOLINFO __MINGW_NAME_AW(LPTTTOOLINFO) + +#define TTTOOLINFO_V1_SIZE __MINGW_NAME_AW_EXT(TTTOOLINFO,_V1_SIZE) #define TTS_ALWAYSTIP 0x1 #define TTS_NOPREFIX 0x2 @@ -1744,31 +1610,18 @@ extern "C" { WCHAR *pszTitle; } TTGETTITLE,*PTTGETTITLE; -#ifdef UNICODE -#define TTM_ADDTOOL TTM_ADDTOOLW -#define TTM_DELTOOL TTM_DELTOOLW -#define TTM_NEWTOOLRECT TTM_NEWTOOLRECTW -#define TTM_GETTOOLINFO TTM_GETTOOLINFOW -#define TTM_SETTOOLINFO TTM_SETTOOLINFOW -#define TTM_HITTEST TTM_HITTESTW -#define TTM_GETTEXT TTM_GETTEXTW -#define TTM_UPDATETIPTEXT TTM_UPDATETIPTEXTW -#define TTM_ENUMTOOLS TTM_ENUMTOOLSW -#define TTM_GETCURRENTTOOL TTM_GETCURRENTTOOLW -#define TTM_SETTITLE TTM_SETTITLEW -#else -#define TTM_ADDTOOL TTM_ADDTOOLA -#define TTM_DELTOOL TTM_DELTOOLA -#define TTM_NEWTOOLRECT TTM_NEWTOOLRECTA -#define TTM_GETTOOLINFO TTM_GETTOOLINFOA -#define TTM_SETTOOLINFO TTM_SETTOOLINFOA -#define TTM_HITTEST TTM_HITTESTA -#define TTM_GETTEXT TTM_GETTEXTA -#define TTM_UPDATETIPTEXT TTM_UPDATETIPTEXTA -#define TTM_ENUMTOOLS TTM_ENUMTOOLSA -#define TTM_GETCURRENTTOOL TTM_GETCURRENTTOOLA -#define TTM_SETTITLE TTM_SETTITLEA -#endif +#define TTM_ADDTOOL __MINGW_NAME_AW(TTM_ADDTOOL) +#define TTM_DELTOOL __MINGW_NAME_AW(TTM_DELTOOL) +#define TTM_NEWTOOLRECT __MINGW_NAME_AW(TTM_NEWTOOLRECT) +#define TTM_GETTOOLINFO __MINGW_NAME_AW(TTM_GETTOOLINFO) +#define TTM_SETTOOLINFO __MINGW_NAME_AW(TTM_SETTOOLINFO) +#define TTM_HITTEST __MINGW_NAME_AW(TTM_HITTEST) +#define TTM_GETTEXT __MINGW_NAME_AW(TTM_GETTEXT) +#define TTM_UPDATETIPTEXT __MINGW_NAME_AW(TTM_UPDATETIPTEXT) +#define TTM_ENUMTOOLS __MINGW_NAME_AW(TTM_ENUMTOOLS) +#define TTM_GETCURRENTTOOL __MINGW_NAME_AW(TTM_GETCURRENTTOOL) +#define TTM_SETTITLE __MINGW_NAME_AW(TTM_SETTITLE) + #define TTM_SETWINDOWTHEME CCM_SETWINDOWTHEME #define LPHITTESTINFOW LPTTHITTESTINFOW @@ -1787,13 +1640,8 @@ extern "C" { TTTOOLINFOW ti; } TTHITTESTINFOW,*LPTTHITTESTINFOW; -#ifdef UNICODE -#define TTHITTESTINFO TTHITTESTINFOW -#define LPTTHITTESTINFO LPTTHITTESTINFOW -#else -#define TTHITTESTINFO TTHITTESTINFOA -#define LPTTHITTESTINFO LPTTHITTESTINFOA -#endif +#define TTHITTESTINFO __MINGW_NAME_AW(TTHITTESTINFO) +#define LPTTHITTESTINFO __MINGW_NAME_AW(LPTTHITTESTINFO) #define TTN_GETDISPINFOA (TTN_FIRST - 0) #define TTN_GETDISPINFOW (TTN_FIRST - 10) @@ -1801,11 +1649,7 @@ extern "C" { #define TTN_POP (TTN_FIRST - 2) #define TTN_LINKCLICK (TTN_FIRST - 3) -#ifdef UNICODE -#define TTN_GETDISPINFO TTN_GETDISPINFOW -#else -#define TTN_GETDISPINFO TTN_GETDISPINFOA -#endif +#define TTN_GETDISPINFO __MINGW_NAME_AW(TTN_GETDISPINFO) #define TTN_NEEDTEXT TTN_GETDISPINFO #define TTN_NEEDTEXTA TTN_GETDISPINFOA @@ -1840,15 +1684,11 @@ extern "C" { LPARAM lParam; } NMTTDISPINFOW,*LPNMTTDISPINFOW; -#ifdef UNICODE -#define NMTTDISPINFO NMTTDISPINFOW -#define LPNMTTDISPINFO LPNMTTDISPINFOW -#define NMTTDISPINFO_V1_SIZE NMTTDISPINFOW_V1_SIZE -#else -#define NMTTDISPINFO NMTTDISPINFOA -#define LPNMTTDISPINFO LPNMTTDISPINFOA -#define NMTTDISPINFO_V1_SIZE NMTTDISPINFOA_V1_SIZE -#endif + +#define NMTTDISPINFO __MINGW_NAME_AW(NMTTDISPINFO) +#define LPNMTTDISPINFO __MINGW_NAME_AW(LPNMTTDISPINFO) + +#define NMTTDISPINFO_V1_SIZE __MINGW_NAME_AW_EXT(NMTTDISPINFO,_V1_SIZE) #endif #ifndef NOSTATUSBAR @@ -1863,21 +1703,13 @@ extern "C" { WINCOMMCTRLAPI HWND WINAPI CreateStatusWindowA(LONG style,LPCSTR lpszText,HWND hwndParent,UINT wID); WINCOMMCTRLAPI HWND WINAPI CreateStatusWindowW(LONG style,LPCWSTR lpszText,HWND hwndParent,UINT wID); -#ifdef UNICODE -#define CreateStatusWindow CreateStatusWindowW -#define DrawStatusText DrawStatusTextW -#else -#define CreateStatusWindow CreateStatusWindowA -#define DrawStatusText DrawStatusTextA -#endif +#define CreateStatusWindow __MINGW_NAME_AW(CreateStatusWindow) +#define DrawStatusText __MINGW_NAME_AW(DrawStatusText) #define STATUSCLASSNAMEW L"msctls_statusbar32" #define STATUSCLASSNAMEA "msctls_statusbar32" -#ifdef UNICODE -#define STATUSCLASSNAME STATUSCLASSNAMEW -#else -#define STATUSCLASSNAME STATUSCLASSNAMEA -#endif + +#define STATUSCLASSNAME __MINGW_NAME_AW(STATUSCLASSNAME) #define SB_SETTEXTA (WM_USER+1) #define SB_SETTEXTW (WM_USER+11) @@ -1886,19 +1718,11 @@ extern "C" { #define SB_GETTEXTLENGTHA (WM_USER+3) #define SB_GETTEXTLENGTHW (WM_USER+12) -#ifdef UNICODE -#define SB_GETTEXT SB_GETTEXTW -#define SB_SETTEXT SB_SETTEXTW -#define SB_GETTEXTLENGTH SB_GETTEXTLENGTHW -#define SB_SETTIPTEXT SB_SETTIPTEXTW -#define SB_GETTIPTEXT SB_GETTIPTEXTW -#else -#define SB_GETTEXT SB_GETTEXTA -#define SB_SETTEXT SB_SETTEXTA -#define SB_GETTEXTLENGTH SB_GETTEXTLENGTHA -#define SB_SETTIPTEXT SB_SETTIPTEXTA -#define SB_GETTIPTEXT SB_GETTIPTEXTA -#endif +#define SB_GETTEXT __MINGW_NAME_AW(SB_GETTEXT) +#define SB_SETTEXT __MINGW_NAME_AW(SB_SETTEXT) +#define SB_GETTEXTLENGTH __MINGW_NAME_AW(SB_GETTEXTLENGTH) +#define SB_SETTIPTEXT __MINGW_NAME_AW(SB_SETTIPTEXT) +#define SB_GETTIPTEXT __MINGW_NAME_AW(SB_GETTIPTEXT) #define SB_SETPARTS (WM_USER+4) #define SB_GETPARTS (WM_USER+6) @@ -1942,11 +1766,8 @@ extern "C" { #define TRACKBAR_CLASSA "msctls_trackbar32" #define TRACKBAR_CLASSW L"msctls_trackbar32" -#ifdef UNICODE -#define TRACKBAR_CLASS TRACKBAR_CLASSW -#else -#define TRACKBAR_CLASS TRACKBAR_CLASSA -#endif + +#define TRACKBAR_CLASS __MINGW_NAME_AW(TRACKBAR_CLASS) #define TBS_AUTOTICKS 0x1 #define TBS_VERT 0x2 @@ -2051,11 +1872,8 @@ extern "C" { #define UPDOWN_CLASSA "msctls_updown32" #define UPDOWN_CLASSW L"msctls_updown32" -#ifdef UNICODE -#define UPDOWN_CLASS UPDOWN_CLASSW -#else -#define UPDOWN_CLASS UPDOWN_CLASSA -#endif + +#define UPDOWN_CLASS __MINGW_NAME_AW(UPDOWN_CLASS) typedef struct _UDACCEL { UINT nSec; @@ -2110,11 +1928,8 @@ extern "C" { #define PROGRESS_CLASSA "msctls_progress32" #define PROGRESS_CLASSW L"msctls_progress32" -#ifdef UNICODE -#define PROGRESS_CLASS PROGRESS_CLASSW -#else -#define PROGRESS_CLASS PROGRESS_CLASSA -#endif + +#define PROGRESS_CLASS __MINGW_NAME_AW(PROGRESS_CLASS) #define PBS_SMOOTH 0x1 #define PBS_VERTICAL 0x4 @@ -2173,11 +1988,8 @@ extern "C" { #define HOTKEY_CLASSA "msctls_hotkey32" #define HOTKEY_CLASSW L"msctls_hotkey32" -#ifdef UNICODE -#define HOTKEY_CLASS HOTKEY_CLASSW -#else -#define HOTKEY_CLASS HOTKEY_CLASSA -#endif + +#define HOTKEY_CLASS __MINGW_NAME_AW(HOTKEY_CLASS) #endif #define CCS_TOP 0x1L @@ -2196,11 +2008,8 @@ extern "C" { #define WC_LISTVIEWA "SysListView32" #define WC_LISTVIEWW L"SysListView32" -#ifdef UNICODE -#define WC_LISTVIEW WC_LISTVIEWW -#else -#define WC_LISTVIEW WC_LISTVIEWA -#endif + +#define WC_LISTVIEW __MINGW_NAME_AW(WC_LISTVIEW) #define LVS_ICON 0x0 #define LVS_REPORT 0x1 @@ -2239,9 +2048,9 @@ extern "C" { #define LVM_GETIMAGELIST (LVM_FIRST+2) #define ListView_GetImageList(hwnd,iImageList) (HIMAGELIST)SNDMSG((hwnd),LVM_GETIMAGELIST,(WPARAM)(INT)(iImageList),0L) -#define LVSIL_NORMAL 0 -#define LVSIL_SMALL 1 -#define LVSIL_STATE 2 +#define LVSIL_NORMAL 0 +#define LVSIL_SMALL 1 +#define LVSIL_STATE 2 #define LVSIL_GROUPHEADER 3 #define LVM_SETIMAGELIST (LVM_FIRST+3) @@ -2316,23 +2125,15 @@ extern "C" { PUINT puColumns; } LVITEMW,*LPLVITEMW; -#ifdef UNICODE -#define LVITEM LVITEMW -#define LPLVITEM LPLVITEMW -#define LVITEM_V1_SIZE LVITEMW_V1_SIZE -#else -#define LVITEM LVITEMA -#define LPLVITEM LPLVITEMA -#define LVITEM_V1_SIZE LVITEMA_V1_SIZE -#endif +#define LVITEM __MINGW_NAME_AW(LVITEM) +#define LPLVITEM __MINGW_NAME_AW(LPLVITEM) + +#define LVITEM_V1_SIZE __MINGW_NAME_AW_EXT(LVITEM,_V1_SIZE) #define LPSTR_TEXTCALLBACKW ((LPWSTR)-1L) #define LPSTR_TEXTCALLBACKA ((LPSTR)-1L) -#ifdef UNICODE -#define LPSTR_TEXTCALLBACK LPSTR_TEXTCALLBACKW -#else -#define LPSTR_TEXTCALLBACK LPSTR_TEXTCALLBACKA -#endif + +#define LPSTR_TEXTCALLBACK __MINGW_NAME_AW(LPSTR_TEXTCALLBACK) #define I_IMAGECALLBACK (-1) #define I_IMAGENONE (-2) @@ -2340,31 +2141,23 @@ extern "C" { #define LVM_GETITEMA (LVM_FIRST+5) #define LVM_GETITEMW (LVM_FIRST+75) -#ifdef UNICODE -#define LVM_GETITEM LVM_GETITEMW -#else -#define LVM_GETITEM LVM_GETITEMA -#endif + +#define LVM_GETITEM __MINGW_NAME_AW(LVM_GETITEM) #define ListView_GetItem(hwnd,pitem) (WINBOOL)SNDMSG((hwnd),LVM_GETITEM,0,(LPARAM)(LV_ITEM *)(pitem)) #define LVM_SETITEMA (LVM_FIRST+6) #define LVM_SETITEMW (LVM_FIRST+76) -#ifdef UNICODE -#define LVM_SETITEM LVM_SETITEMW -#else -#define LVM_SETITEM LVM_SETITEMA -#endif + +#define LVM_SETITEM __MINGW_NAME_AW(LVM_SETITEM) #define ListView_SetItem(hwnd,pitem) (WINBOOL)SNDMSG((hwnd),LVM_SETITEM,0,(LPARAM)(const LV_ITEM *)(pitem)) #define LVM_INSERTITEMA (LVM_FIRST+7) #define LVM_INSERTITEMW (LVM_FIRST+77) -#ifdef UNICODE -#define LVM_INSERTITEM LVM_INSERTITEMW -#else -#define LVM_INSERTITEM LVM_INSERTITEMA -#endif + +#define LVM_INSERTITEM __MINGW_NAME_AW(LVM_INSERTITEM) + #define ListView_InsertItem(hwnd,pitem) (int)SNDMSG((hwnd),LVM_INSERTITEM,0,(LPARAM)(const LV_ITEM *)(pitem)) #define LVM_DELETEITEM (LVM_FIRST+8) @@ -2393,12 +2186,12 @@ extern "C" { #define LVM_GETNEXTITEM (LVM_FIRST+12) #define ListView_GetNextItem(hwnd,i,flags) (int)SNDMSG((hwnd),LVM_GETNEXTITEM,(WPARAM)(int)(i),MAKELPARAM((flags),0)) -#define LVFI_PARAM 0x1 -#define LVFI_STRING 0x2 -#define LVFI_SUBSTRING 0x4 -#define LVFI_PARTIAL 0x8 -#define LVFI_WRAP 0x20 -#define LVFI_NEARESTXY 0x40 +#define LVFI_PARAM 0x0001 +#define LVFI_STRING 0x0002 +#define LVFI_SUBSTRING 0x0004 +#define LVFI_PARTIAL 0x0008 +#define LVFI_WRAP 0x0020 +#define LVFI_NEARESTXY 0x0040 #define LV_FINDINFOA LVFINDINFOA #define LV_FINDINFOW LVFINDINFOW @@ -2420,19 +2213,12 @@ extern "C" { UINT vkDirection; } LVFINDINFOW,*LPFINDINFOW; -#ifdef UNICODE -#define LVFINDINFO LVFINDINFOW -#else -#define LVFINDINFO LVFINDINFOA -#endif +#define LVFINDINFO __MINGW_NAME_AW(LVFINDINFO) #define LVM_FINDITEMA (LVM_FIRST+13) #define LVM_FINDITEMW (LVM_FIRST+83) -#ifdef UNICODE -#define LVM_FINDITEM LVM_FINDITEMW -#else -#define LVM_FINDITEM LVM_FINDITEMA -#endif + +#define LVM_FINDITEM __MINGW_NAME_AW(LVM_FINDITEM) #define ListView_FindItem(hwnd,iStart,plvfi) (int)SNDMSG((hwnd),LVM_FINDITEM,(WPARAM)(int)(iStart),(LPARAM)(const LV_FINDINFO *)(plvfi)) @@ -2452,11 +2238,8 @@ extern "C" { #define LVM_GETSTRINGWIDTHA (LVM_FIRST+17) #define LVM_GETSTRINGWIDTHW (LVM_FIRST+87) -#ifdef UNICODE -#define LVM_GETSTRINGWIDTH LVM_GETSTRINGWIDTHW -#else -#define LVM_GETSTRINGWIDTH LVM_GETSTRINGWIDTHA -#endif + +#define LVM_GETSTRINGWIDTH __MINGW_NAME_AW(LVM_GETSTRINGWIDTH) #define ListView_GetStringWidth(hwndLV,psz) (int)SNDMSG((hwndLV),LVM_GETSTRINGWIDTH,0,(LPARAM)(LPCTSTR)(psz)) @@ -2504,11 +2287,8 @@ extern "C" { #define LVM_EDITLABELA (LVM_FIRST+23) #define LVM_EDITLABELW (LVM_FIRST+118) -#ifdef UNICODE -#define LVM_EDITLABEL LVM_EDITLABELW -#else -#define LVM_EDITLABEL LVM_EDITLABELA -#endif + +#define LVM_EDITLABEL __MINGW_NAME_AW(LVM_EDITLABEL) #define ListView_EditLabel(hwndLV,i) (HWND)SNDMSG((hwndLV),LVM_EDITLABEL,(WPARAM)(int)(i),0L) @@ -2533,33 +2313,28 @@ extern "C" { int iOrder; } LVCOLUMNA,*LPLVCOLUMNA; - typedef struct tagLVCOLUMNW { - UINT mask; - int fmt; - int cx; - LPWSTR pszText; - int cchTextMax; - int iSubItem; - #if (_WIN32_IE >= 0x0300) - int iImage; - int iOrder; - #endif - #if (_WIN32_WINNT >= 0x0600) - int cxMin; - int cxDefault; - int cxIdeal; - #endif + typedef struct tagLVCOLUMNW { + UINT mask; + int fmt; + int cx; + LPWSTR pszText; + int cchTextMax; + int iSubItem; +# if (_WIN32_IE >= 0x0300) + int iImage; + int iOrder; +# endif +# if (_WIN32_WINNT >= 0x0600) + int cxMin; + int cxDefault; + int cxIdeal; +# endif } LVCOLUMNW,*LPLVCOLUMNW; -#ifdef UNICODE -#define LVCOLUMN LVCOLUMNW -#define LPLVCOLUMN LPLVCOLUMNW -#define LVCOLUMN_V1_SIZE LVCOLUMNW_V1_SIZE -#else -#define LVCOLUMN LVCOLUMNA -#define LPLVCOLUMN LPLVCOLUMNA -#define LVCOLUMN_V1_SIZE LVCOLUMNA_V1_SIZE -#endif +#define LVCOLUMN __MINGW_NAME_AW(LVCOLUMN) +#define LPLVCOLUMN __MINGW_NAME_AW(LPLVCOLUMN) + +#define LVCOLUMN_V1_SIZE __MINGW_NAME_AW_EXT(LVCOLUMN,_V1_SIZE) #define LVCF_FMT 0x1 #define LVCF_WIDTH 0x2 @@ -2594,31 +2369,22 @@ extern "C" { #define LVM_GETCOLUMNA (LVM_FIRST+25) #define LVM_GETCOLUMNW (LVM_FIRST+95) -#ifdef UNICODE -#define LVM_GETCOLUMN LVM_GETCOLUMNW -#else -#define LVM_GETCOLUMN LVM_GETCOLUMNA -#endif + +#define LVM_GETCOLUMN __MINGW_NAME_AW(LVM_GETCOLUMN) #define ListView_GetColumn(hwnd,iCol,pcol) (WINBOOL)SNDMSG((hwnd),LVM_GETCOLUMN,(WPARAM)(int)(iCol),(LPARAM)(LV_COLUMN *)(pcol)) #define LVM_SETCOLUMNA (LVM_FIRST+26) #define LVM_SETCOLUMNW (LVM_FIRST+96) -#ifdef UNICODE -#define LVM_SETCOLUMN LVM_SETCOLUMNW -#else -#define LVM_SETCOLUMN LVM_SETCOLUMNA -#endif + +#define LVM_SETCOLUMN __MINGW_NAME_AW(LVM_SETCOLUMN) #define ListView_SetColumn(hwnd,iCol,pcol) (WINBOOL)SNDMSG((hwnd),LVM_SETCOLUMN,(WPARAM)(int)(iCol),(LPARAM)(const LV_COLUMN *)(pcol)) #define LVM_INSERTCOLUMNA (LVM_FIRST+27) #define LVM_INSERTCOLUMNW (LVM_FIRST+97) -#ifdef UNICODE -#define LVM_INSERTCOLUMN LVM_INSERTCOLUMNW -#else -#define LVM_INSERTCOLUMN LVM_INSERTCOLUMNA -#endif + +#define LVM_INSERTCOLUMN __MINGW_NAME_AW(LVM_INSERTCOLUMN) #define ListView_InsertColumn(hwnd,iCol,pcol) (int)SNDMSG((hwnd),LVM_INSERTCOLUMN,(WPARAM)(int)(iCol),(LPARAM)(const LV_COLUMN *)(pcol)) @@ -2666,22 +2432,14 @@ extern "C" { #define LVM_GETITEMTEXTA (LVM_FIRST+45) #define LVM_GETITEMTEXTW (LVM_FIRST+115) -#ifdef UNICODE -#define LVM_GETITEMTEXT LVM_GETITEMTEXTW -#else -#define LVM_GETITEMTEXT LVM_GETITEMTEXTA -#endif +#define LVM_GETITEMTEXT __MINGW_NAME_AW(LVM_GETITEMTEXT) #define ListView_GetItemText(hwndLV,i,iSubItem_,pszText_,cchTextMax_) { LV_ITEM _ms_lvi; _ms_lvi.iSubItem = iSubItem_; _ms_lvi.cchTextMax = cchTextMax_; _ms_lvi.pszText = pszText_; SNDMSG((hwndLV),LVM_GETITEMTEXT,(WPARAM)(i),(LPARAM)(LV_ITEM *)&_ms_lvi);} #define LVM_SETITEMTEXTA (LVM_FIRST+46) #define LVM_SETITEMTEXTW (LVM_FIRST+116) -#ifdef UNICODE -#define LVM_SETITEMTEXT LVM_SETITEMTEXTW -#else -#define LVM_SETITEMTEXT LVM_SETITEMTEXTA -#endif +#define LVM_SETITEMTEXT __MINGW_NAME_AW(LVM_SETITEMTEXT) #define ListView_SetItemText(hwndLV,i,iSubItem_,pszText_) { LV_ITEM _ms_lvi; _ms_lvi.iSubItem = iSubItem_; _ms_lvi.pszText = pszText_; SNDMSG((hwndLV),LVM_SETITEMTEXT,(WPARAM)(i),(LPARAM)(LV_ITEM *)&_ms_lvi);} @@ -2709,11 +2467,7 @@ extern "C" { #define LVM_GETISEARCHSTRINGA (LVM_FIRST+52) #define LVM_GETISEARCHSTRINGW (LVM_FIRST+117) -#ifdef UNICODE -#define LVM_GETISEARCHSTRING LVM_GETISEARCHSTRINGW -#else -#define LVM_GETISEARCHSTRING LVM_GETISEARCHSTRINGA -#endif +#define LVM_GETISEARCHSTRING __MINGW_NAME_AW(LVM_GETISEARCHSTRING) #define ListView_GetISearchString(hwndLV,lpsz) (WINBOOL)SNDMSG((hwndLV),LVM_GETISEARCHSTRING,0,(LPARAM)(LPTSTR)(lpsz)) @@ -3017,17 +2771,10 @@ extern "C" { #define LVM_ISITEMVISIBLE (LVM_FIRST+182) #define ListView_IsItemVisible(hwnd,index) (UINT)SNDMSG((hwnd),LVM_ISITEMVISIBLE,(WPARAM)(index),(LPARAM)0) -#ifdef UNICODE -#define LVBKIMAGE LVBKIMAGEW -#define LPLVBKIMAGE LPLVBKIMAGEW -#define LVM_SETBKIMAGE LVM_SETBKIMAGEW -#define LVM_GETBKIMAGE LVM_GETBKIMAGEW -#else -#define LVBKIMAGE LVBKIMAGEA -#define LPLVBKIMAGE LPLVBKIMAGEA -#define LVM_SETBKIMAGE LVM_SETBKIMAGEA -#define LVM_GETBKIMAGE LVM_GETBKIMAGEA -#endif +#define LVBKIMAGE __MINGW_NAME_AW(LVBKIMAGE) +#define LPLVBKIMAGE __MINGW_NAME_AW(LPLVBKIMAGE) +#define LVM_SETBKIMAGE __MINGW_NAME_AW(LVM_SETBKIMAGE) +#define LVM_GETBKIMAGE __MINGW_NAME_AW(LVM_GETBKIMAGE) #define ListView_SetBkImage(hwnd,plvbki) (WINBOOL)SNDMSG((hwnd),LVM_SETBKIMAGE,0,(LPARAM)(plvbki)) #define ListView_GetBkImage(hwnd,plvbki) (WINBOOL)SNDMSG((hwnd),LVM_GETBKIMAGE,0,(LPARAM)(plvbki)) @@ -3115,19 +2862,11 @@ extern "C" { #define LPNM_FINDITEMW LPNMLVFINDITEMW #define NM_FINDITEMW NMLVFINDITEMW -#ifdef UNICODE -#define PNM_FINDITEM PNM_FINDITEMW -#define LPNM_FINDITEM LPNM_FINDITEMW -#define NM_FINDITEM NM_FINDITEMW -#define NMLVFINDITEM NMLVFINDITEMW -#define LPNMLVFINDITEM LPNMLVFINDITEMW -#else -#define PNM_FINDITEM PNM_FINDITEMA -#define LPNM_FINDITEM LPNM_FINDITEMA -#define NM_FINDITEM NM_FINDITEMA -#define NMLVFINDITEM NMLVFINDITEMA -#define LPNMLVFINDITEM LPNMLVFINDITEMA -#endif +#define PNM_FINDITEM __MINGW_NAME_AW(PNM_FINDITEM) +#define LPNM_FINDITEM __MINGW_NAME_AW(LPNM_FINDITEM) +#define NM_FINDITEM __MINGW_NAME_AW(NM_FINDITEM) +#define NMLVFINDITEM __MINGW_NAME_AW(NMLVFINDITEM) +#define LPNMLVFINDITEM __MINGW_NAME_AW(LPNMLVFINDITEM) typedef struct tagNMLVODSTATECHANGE { NMHDR hdr; @@ -3161,11 +2900,7 @@ extern "C" { #define LVN_ITEMACTIVATE (LVN_FIRST-14) #define LVN_ODSTATECHANGED (LVN_FIRST-15) -#ifdef UNICODE -#define LVN_ODFINDITEM LVN_ODFINDITEMW -#else -#define LVN_ODFINDITEM LVN_ODFINDITEMA -#endif +#define LVN_ODFINDITEM __MINGW_NAME_AW(LVN_ODFINDITEM) #define LVN_HOTTRACK (LVN_FIRST-21) #define LVN_GETDISPINFOA (LVN_FIRST-50) @@ -3173,17 +2908,10 @@ extern "C" { #define LVN_SETDISPINFOA (LVN_FIRST-51) #define LVN_SETDISPINFOW (LVN_FIRST-78) -#ifdef UNICODE -#define LVN_BEGINLABELEDIT LVN_BEGINLABELEDITW -#define LVN_ENDLABELEDIT LVN_ENDLABELEDITW -#define LVN_GETDISPINFO LVN_GETDISPINFOW -#define LVN_SETDISPINFO LVN_SETDISPINFOW -#else -#define LVN_BEGINLABELEDIT LVN_BEGINLABELEDITA -#define LVN_ENDLABELEDIT LVN_ENDLABELEDITA -#define LVN_GETDISPINFO LVN_GETDISPINFOA -#define LVN_SETDISPINFO LVN_SETDISPINFOA -#endif +#define LVN_BEGINLABELEDIT __MINGW_NAME_AW(LVN_BEGINLABELEDIT) +#define LVN_ENDLABELEDIT __MINGW_NAME_AW(LVN_ENDLABELEDIT) +#define LVN_GETDISPINFO __MINGW_NAME_AW(LVN_GETDISPINFO) +#define LVN_SETDISPINFO __MINGW_NAME_AW(LVN_SETDISPINFO) #define LVIF_DI_SETITEM 0x1000 @@ -3201,11 +2929,7 @@ extern "C" { LVITEMW item; } NMLVDISPINFOW,*LPNMLVDISPINFOW; -#ifdef UNICODE -#define NMLVDISPINFO NMLVDISPINFOW -#else -#define NMLVDISPINFO NMLVDISPINFOA -#endif +#define NMLVDISPINFO __MINGW_NAME_AW(NMLVDISPINFO) #define LVN_KEYDOWN (LVN_FIRST-55) @@ -3248,15 +2972,9 @@ extern "C" { #define LVN_GETINFOTIPA (LVN_FIRST-57) #define LVN_GETINFOTIPW (LVN_FIRST-58) -#ifdef UNICODE -#define LVN_GETINFOTIP LVN_GETINFOTIPW -#define NMLVGETINFOTIP NMLVGETINFOTIPW -#define LPNMLVGETINFOTIP LPNMLVGETINFOTIPW -#else -#define LVN_GETINFOTIP LVN_GETINFOTIPA -#define NMLVGETINFOTIP NMLVGETINFOTIPA -#define LPNMLVGETINFOTIP LPNMLVGETINFOTIPA -#endif +#define LVN_GETINFOTIP __MINGW_NAME_AW(LVN_GETINFOTIP) +#define NMLVGETINFOTIP __MINGW_NAME_AW(NMLVGETINFOTIP) +#define LPNMLVGETINFOTIP __MINGW_NAME_AW(LPNMLVGETINFOTIP) typedef struct tagNMLVSCROLL { NMHDR hdr; @@ -3272,11 +2990,8 @@ extern "C" { #define WC_TREEVIEWA "SysTreeView32" #define WC_TREEVIEWW L"SysTreeView32" -#ifdef UNICODE -#define WC_TREEVIEW WC_TREEVIEWW -#else -#define WC_TREEVIEW WC_TREEVIEWA -#endif + +#define WC_TREEVIEW __MINGW_NAME_AW(WC_TREEVIEW) #define TVS_HASBUTTONS 0x1 #define TVS_HASLINES 0x2 @@ -3304,10 +3019,13 @@ extern "C" { #define TVIF_HANDLE 0x10 #define TVIF_SELECTEDIMAGE 0x20 #define TVIF_CHILDREN 0x40 +#if(_WIN32_IE >= 0x0400) #define TVIF_INTEGRAL 0x80 -#define TVIF_STATEEX 0x100 +#endif +#if(_WIN32_IE >= 0x0600) +#define TVIF_STATEEX 0x100 #define TVIF_EXPANDEDIMAGE 0x200 -#define TVIF_DI_SETITEM 0x1000 +#endif #define TVIS_SELECTED 0x2 #define TVIS_CUT 0x4 #define TVIS_DROPHILITED 0x8 @@ -3368,37 +3086,33 @@ extern "C" { int iIntegral; } TVITEMEXA,*LPTVITEMEXA; -typedef struct tagTVITEMEXW { - UINT mask; - HTREEITEM hItem; - UINT state; - UINT stateMask; - LPWSTR pszText; - INT cchTextMax; - INT iImage; - INT iSelectedImage; - INT cChildren; - LPARAM lParam; - INT iIntegral; - UINT uStateEx; /* _WIN32_IE >= 0x600 */ - HWND hwnd; /* _WIN32_IE >= 0x600 */ - INT iExpandedImage; /* _WIN32_IE >= 0x600 */ -} TVITEMEXW, *LPTVITEMEXW; -#ifdef UNICODE - typedef TVITEMEXW TVITEMEX; - typedef LPTVITEMEXW LPTVITEMEX; -#else - typedef TVITEMEXA TVITEMEX; - typedef LPTVITEMEXA LPTVITEMEX; + typedef struct tagTVITEMEXW { + UINT mask; + HTREEITEM hItem; + UINT state; + UINT stateMask; + LPWSTR pszText; + int cchTextMax; + int iImage; + int iSelectedImage; + int cChildren; + LPARAM lParam; + int iIntegral; +#if(_WIN32_IE >= 0x0600) + UINT uStateEx; + HWND hwnd; + int iExpandedImage; #endif +#if(NTDDI_VERSION >= NTDDI_WIN7) + int iReserved; +#endif + } TVITEMEXW, *LPTVITEMEXW; -#ifdef UNICODE -#define TVITEM TVITEMW -#define LPTVITEM LPTVITEMW -#else -#define TVITEM TVITEMA -#define LPTVITEM LPTVITEMA -#endif + __MINGW_TYPEDEF_AW(TVITEMEX) + __MINGW_TYPEDEF_AW(LPTVITEMEX) + +#define TVITEM __MINGW_NAME_AW(TVITEM) +#define LPTVITEM __MINGW_NAME_AW(LPTVITEM) #define TVI_ROOT ((HTREEITEM)(ULONG_PTR)-0x10000) #define TVI_FIRST ((HTREEITEM)(ULONG_PTR)-0xffff) @@ -3418,7 +3132,7 @@ typedef struct tagTVITEMEXW { typedef struct tagTVINSERTSTRUCTA { HTREEITEM hParent; HTREEITEM hInsertAfter; - __MINGW_EXTENSION union { + __C89_NAMELESS union { TVITEMEXA itemex; TV_ITEMA item; } DUMMYUNIONNAME; @@ -3427,29 +3141,22 @@ typedef struct tagTVITEMEXW { typedef struct tagTVINSERTSTRUCTW { HTREEITEM hParent; HTREEITEM hInsertAfter; - __MINGW_EXTENSION union { + __C89_NAMELESS union { TVITEMEXW itemex; TV_ITEMW item; } DUMMYUNIONNAME; } TVINSERTSTRUCTW,*LPTVINSERTSTRUCTW; -#ifdef UNICODE -#define TVINSERTSTRUCT TVINSERTSTRUCTW -#define LPTVINSERTSTRUCT LPTVINSERTSTRUCTW -#define TVINSERTSTRUCT_V1_SIZE TVINSERTSTRUCTW_V1_SIZE -#else -#define TVINSERTSTRUCT TVINSERTSTRUCTA -#define LPTVINSERTSTRUCT LPTVINSERTSTRUCTA -#define TVINSERTSTRUCT_V1_SIZE TVINSERTSTRUCTA_V1_SIZE -#endif + +#define TVINSERTSTRUCT __MINGW_NAME_AW(TVINSERTSTRUCT) +#define LPTVINSERTSTRUCT __MINGW_NAME_AW(LPTVINSERTSTRUCT) + +#define TVINSERTSTRUCT_V1_SIZE __MINGW_NAME_AW_EXT(TVINSERTSTRUCT,_V1_SIZE) #define TVM_INSERTITEMA (TV_FIRST+0) #define TVM_INSERTITEMW (TV_FIRST+50) -#ifdef UNICODE -#define TVM_INSERTITEM TVM_INSERTITEMW -#else -#define TVM_INSERTITEM TVM_INSERTITEMA -#endif + +#define TVM_INSERTITEM __MINGW_NAME_AW(TVM_INSERTITEM) #define TreeView_InsertItem(hwnd,lpis) (HTREEITEM)SNDMSG((hwnd),TVM_INSERTITEM,0,(LPARAM)(LPTV_INSERTSTRUCT)(lpis)) @@ -3527,32 +3234,21 @@ typedef struct tagTVITEMEXW { #define TVM_GETITEMA (TV_FIRST+12) #define TVM_GETITEMW (TV_FIRST+62) -#ifdef UNICODE -#define TVM_GETITEM TVM_GETITEMW -#else -#define TVM_GETITEM TVM_GETITEMA -#endif +#define TVM_GETITEM __MINGW_NAME_AW(TVM_GETITEM) #define TreeView_GetItem(hwnd,pitem) (WINBOOL)SNDMSG((hwnd),TVM_GETITEM,0,(LPARAM)(TV_ITEM *)(pitem)) #define TVM_SETITEMA (TV_FIRST+13) #define TVM_SETITEMW (TV_FIRST+63) -#ifdef UNICODE -#define TVM_SETITEM TVM_SETITEMW -#else -#define TVM_SETITEM TVM_SETITEMA -#endif +#define TVM_SETITEM __MINGW_NAME_AW(TVM_SETITEM) #define TreeView_SetItem(hwnd,pitem) (WINBOOL)SNDMSG((hwnd),TVM_SETITEM,0,(LPARAM)(const TV_ITEM *)(pitem)) #define TVM_EDITLABELA (TV_FIRST+14) #define TVM_EDITLABELW (TV_FIRST+65) -#ifdef UNICODE -#define TVM_EDITLABEL TVM_EDITLABELW -#else -#define TVM_EDITLABEL TVM_EDITLABELA -#endif + +#define TVM_EDITLABEL __MINGW_NAME_AW(TVM_EDITLABEL) #define TreeView_EditLabel(hwnd,hitem) (HWND)SNDMSG((hwnd),TVM_EDITLABEL,0,(LPARAM)(HTREEITEM)(hitem)) @@ -3606,11 +3302,7 @@ typedef struct tagTVITEMEXW { #define TVM_GETISEARCHSTRINGA (TV_FIRST+23) #define TVM_GETISEARCHSTRINGW (TV_FIRST+64) -#ifdef UNICODE -#define TVM_GETISEARCHSTRING TVM_GETISEARCHSTRINGW -#else -#define TVM_GETISEARCHSTRING TVM_GETISEARCHSTRINGA -#endif +#define TVM_GETISEARCHSTRING __MINGW_NAME_AW(TVM_GETISEARCHSTRING) #define TVM_SETTOOLTIPS (TV_FIRST+24) #define TreeView_SetToolTips(hwnd,hwndTT) (HWND)SNDMSG((hwnd),TVM_SETTOOLTIPS,(WPARAM)(hwndTT),0) @@ -3696,13 +3388,8 @@ typedef struct tagTVITEMEXW { POINT ptDrag; } NMTREEVIEWW,*LPNMTREEVIEWW; -#ifdef UNICODE -#define NMTREEVIEW NMTREEVIEWW -#define LPNMTREEVIEW LPNMTREEVIEWW -#else -#define NMTREEVIEW NMTREEVIEWA -#define LPNMTREEVIEW LPNMTREEVIEWA -#endif +#define NMTREEVIEW __MINGW_NAME_AW(NMTREEVIEW) +#define LPNMTREEVIEW __MINGW_NAME_AW(LPNMTREEVIEW) #define TVN_SELCHANGINGA (TVN_FIRST-1) #define TVN_SELCHANGINGW (TVN_FIRST-50) @@ -3734,13 +3421,8 @@ typedef struct tagTVITEMEXW { TVITEMW item; } NMTVDISPINFOW,*LPNMTVDISPINFOW; -#ifdef UNICODE -#define NMTVDISPINFO NMTVDISPINFOW -#define LPNMTVDISPINFO LPNMTVDISPINFOW -#else -#define NMTVDISPINFO NMTVDISPINFOA -#define LPNMTVDISPINFO LPNMTVDISPINFOA -#endif +#define NMTVDISPINFO __MINGW_NAME_AW(NMTVDISPINFO) +#define LPNMTVDISPINFO __MINGW_NAME_AW(LPNMTVDISPINFO) #if (_WIN32_IE >= 0x0600) @@ -3754,13 +3436,8 @@ typedef struct tagTVDISPINFOEXW { TVITEMEXW item; } NMTVDISPINFOEXW, *LPNMTVDISPINFOEXW; -#ifdef UNICODE -#define NMTVDISPINFOEX NMTVDISPINFOEXW -#define LPNMTVDISPINFOEX LPNMTVDISPINFOEXW -#else -#define NMTVDISPINFOEX NMTVDISPINFOEXA -#define LPNMTVDISPINFOEX LPNMTVDISPINFOEXA -#endif /* UNICODE */ +#define NMTVDISPINFOEX __MINGW_NAME_AW(NMTVDISPINFOEX) +#define LPNMTVDISPINFOEX __MINGW_NAME_AW(LPNMTVDISPINFOEX) #define TV_DISPINFOEXA NMTVDISPINFOEXA #define TV_DISPINFOEXW NMTVDISPINFOEXW @@ -3803,31 +3480,17 @@ typedef struct tagTVDISPINFOEXW { #include -#ifdef UNICODE -#define TVN_SELCHANGING TVN_SELCHANGINGW -#define TVN_SELCHANGED TVN_SELCHANGEDW -#define TVN_GETDISPINFO TVN_GETDISPINFOW -#define TVN_SETDISPINFO TVN_SETDISPINFOW -#define TVN_ITEMEXPANDING TVN_ITEMEXPANDINGW -#define TVN_ITEMEXPANDED TVN_ITEMEXPANDEDW -#define TVN_BEGINDRAG TVN_BEGINDRAGW -#define TVN_BEGINRDRAG TVN_BEGINRDRAGW -#define TVN_DELETEITEM TVN_DELETEITEMW -#define TVN_BEGINLABELEDIT TVN_BEGINLABELEDITW -#define TVN_ENDLABELEDIT TVN_ENDLABELEDITW -#else -#define TVN_SELCHANGING TVN_SELCHANGINGA -#define TVN_SELCHANGED TVN_SELCHANGEDA -#define TVN_GETDISPINFO TVN_GETDISPINFOA -#define TVN_SETDISPINFO TVN_SETDISPINFOA -#define TVN_ITEMEXPANDING TVN_ITEMEXPANDINGA -#define TVN_ITEMEXPANDED TVN_ITEMEXPANDEDA -#define TVN_BEGINDRAG TVN_BEGINDRAGA -#define TVN_BEGINRDRAG TVN_BEGINRDRAGA -#define TVN_DELETEITEM TVN_DELETEITEMA -#define TVN_BEGINLABELEDIT TVN_BEGINLABELEDITA -#define TVN_ENDLABELEDIT TVN_ENDLABELEDITA -#endif +#define TVN_SELCHANGING __MINGW_NAME_AW(TVN_SELCHANGING) +#define TVN_SELCHANGED __MINGW_NAME_AW(TVN_SELCHANGED) +#define TVN_GETDISPINFO __MINGW_NAME_AW(TVN_GETDISPINFO) +#define TVN_SETDISPINFO __MINGW_NAME_AW(TVN_SETDISPINFO) +#define TVN_ITEMEXPANDING __MINGW_NAME_AW(TVN_ITEMEXPANDING) +#define TVN_ITEMEXPANDED __MINGW_NAME_AW(TVN_ITEMEXPANDED) +#define TVN_BEGINDRAG __MINGW_NAME_AW(TVN_BEGINDRAG) +#define TVN_BEGINRDRAG __MINGW_NAME_AW(TVN_BEGINRDRAG) +#define TVN_DELETEITEM __MINGW_NAME_AW(TVN_DELETEITEM) +#define TVN_BEGINLABELEDIT __MINGW_NAME_AW(TVN_BEGINLABELEDIT) +#define TVN_ENDLABELEDIT __MINGW_NAME_AW(TVN_ENDLABELEDIT) #define NMTVCUSTOMDRAW_V3_SIZE CCSIZEOF_STRUCT(NMTVCUSTOMDRAW,clrTextBk) @@ -3854,15 +3517,9 @@ typedef struct tagTVDISPINFOEXW { LPARAM lParam; } NMTVGETINFOTIPW,*LPNMTVGETINFOTIPW; -#ifdef UNICODE -#define TVN_GETINFOTIP TVN_GETINFOTIPW -#define NMTVGETINFOTIP NMTVGETINFOTIPW -#define LPNMTVGETINFOTIP LPNMTVGETINFOTIPW -#else -#define TVN_GETINFOTIP TVN_GETINFOTIPA -#define NMTVGETINFOTIP NMTVGETINFOTIPA -#define LPNMTVGETINFOTIP LPNMTVGETINFOTIPA -#endif +#define TVN_GETINFOTIP __MINGW_NAME_AW(TVN_GETINFOTIP) +#define NMTVGETINFOTIP __MINGW_NAME_AW(NMTVGETINFOTIP) +#define LPNMTVGETINFOTIP __MINGW_NAME_AW(LPNMTVGETINFOTIP) #define TVCDRF_NOIMAGES 0x10000 #endif @@ -3872,11 +3529,7 @@ typedef struct tagTVDISPINFOEXW { #define WC_COMBOBOXEXW L"ComboBoxEx32" #define WC_COMBOBOXEXA "ComboBoxEx32" -#ifdef UNICODE -#define WC_COMBOBOXEX WC_COMBOBOXEXW -#else -#define WC_COMBOBOXEX WC_COMBOBOXEXA -#endif +#define WC_COMBOBOXEX __MINGW_NAME_AW(WC_COMBOBOXEX) #define CBEIF_TEXT 0x1 #define CBEIF_IMAGE 0x2 @@ -3914,15 +3567,9 @@ typedef struct tagTVDISPINFOEXW { } COMBOBOXEXITEMW,*PCOMBOBOXEXITEMW; typedef COMBOBOXEXITEMW CONST *PCCOMBOEXITEMW; -#ifdef UNICODE -#define COMBOBOXEXITEM COMBOBOXEXITEMW -#define PCOMBOBOXEXITEM PCOMBOBOXEXITEMW -#define PCCOMBOBOXEXITEM PCCOMBOBOXEXITEMW -#else -#define COMBOBOXEXITEM COMBOBOXEXITEMA -#define PCOMBOBOXEXITEM PCOMBOBOXEXITEMA -#define PCCOMBOBOXEXITEM PCCOMBOBOXEXITEMA -#endif +#define COMBOBOXEXITEM __MINGW_NAME_AW(COMBOBOXEXITEM) +#define PCOMBOBOXEXITEM __MINGW_NAME_AW(PCOMBOBOXEXITEM) +#define PCCOMBOBOXEXITEM __MINGW_NAME_AW(PCCOMBOBOXEXITEM) #define CBEM_INSERTITEMA (WM_USER+1) #define CBEM_SETIMAGELIST (WM_USER+2) @@ -3943,15 +3590,9 @@ typedef struct tagTVDISPINFOEXW { #define CBEM_SETITEMW (WM_USER+12) #define CBEM_GETITEMW (WM_USER+13) -#ifdef UNICODE -#define CBEM_INSERTITEM CBEM_INSERTITEMW -#define CBEM_SETITEM CBEM_SETITEMW -#define CBEM_GETITEM CBEM_GETITEMW -#else -#define CBEM_INSERTITEM CBEM_INSERTITEMA -#define CBEM_SETITEM CBEM_SETITEMA -#define CBEM_GETITEM CBEM_GETITEMA -#endif +#define CBEM_INSERTITEM __MINGW_NAME_AW(CBEM_INSERTITEM) +#define CBEM_SETITEM __MINGW_NAME_AW(CBEM_SETITEM) +#define CBEM_GETITEM __MINGW_NAME_AW(CBEM_GETITEM) #define CBEM_SETWINDOWTHEME CCM_SETWINDOWTHEME @@ -3971,15 +3612,9 @@ typedef struct tagTVDISPINFOEXW { COMBOBOXEXITEMW ceItem; } NMCOMBOBOXEXW,*PNMCOMBOBOXEXW; -#ifdef UNICODE -#define NMCOMBOBOXEX NMCOMBOBOXEXW -#define PNMCOMBOBOXEX PNMCOMBOBOXEXW -#define CBEN_GETDISPINFO CBEN_GETDISPINFOW -#else -#define NMCOMBOBOXEX NMCOMBOBOXEXA -#define PNMCOMBOBOXEX PNMCOMBOBOXEXA -#define CBEN_GETDISPINFO CBEN_GETDISPINFOA -#endif +#define NMCOMBOBOXEX __MINGW_NAME_AW(NMCOMBOBOXEX) +#define PNMCOMBOBOXEX __MINGW_NAME_AW(PNMCOMBOBOXEX) +#define CBEN_GETDISPINFO __MINGW_NAME_AW(CBEN_GETDISPINFO) #define CBEN_GETDISPINFOA (CBEN_FIRST - 0) #define CBEN_INSERTITEM (CBEN_FIRST - 1) @@ -3993,17 +3628,9 @@ typedef struct tagTVDISPINFOEXW { #define CBEN_DRAGBEGINA (CBEN_FIRST - 8) #define CBEN_DRAGBEGINW (CBEN_FIRST - 9) -#ifdef UNICODE -#define CBEN_DRAGBEGIN CBEN_DRAGBEGINW -#else -#define CBEN_DRAGBEGIN CBEN_DRAGBEGINA -#endif +#define CBEN_DRAGBEGIN __MINGW_NAME_AW(CBEN_DRAGBEGIN) -#ifdef UNICODE -#define CBEN_ENDEDIT CBEN_ENDEDITW -#else -#define CBEN_ENDEDIT CBEN_ENDEDITA -#endif +#define CBEN_ENDEDIT __MINGW_NAME_AW(CBEN_ENDEDIT) #define CBENF_KILLFOCUS 1 #define CBENF_RETURN 2 @@ -4024,15 +3651,9 @@ typedef struct tagTVDISPINFOEXW { char szText[CBEMAXSTRLEN]; }NMCBEDRAGBEGINA,*LPNMCBEDRAGBEGINA,*PNMCBEDRAGBEGINA; -#ifdef UNICODE -#define NMCBEDRAGBEGIN NMCBEDRAGBEGINW -#define LPNMCBEDRAGBEGIN LPNMCBEDRAGBEGINW -#define PNMCBEDRAGBEGIN PNMCBEDRAGBEGINW -#else -#define NMCBEDRAGBEGIN NMCBEDRAGBEGINA -#define LPNMCBEDRAGBEGIN LPNMCBEDRAGBEGINA -#define PNMCBEDRAGBEGIN PNMCBEDRAGBEGINA -#endif +#define NMCBEDRAGBEGIN __MINGW_NAME_AW(NMCBEDRAGBEGIN) +#define LPNMCBEDRAGBEGIN __MINGW_NAME_AW(LPNMCBEDRAGBEGIN) +#define PNMCBEDRAGBEGIN __MINGW_NAME_AW(PNMCBEDRAGBEGIN) typedef struct { NMHDR hdr; @@ -4050,26 +3671,17 @@ typedef struct tagTVDISPINFOEXW { int iWhy; } NMCBEENDEDITA,*LPNMCBEENDEDITA,*PNMCBEENDEDITA; -#ifdef UNICODE -#define NMCBEENDEDIT NMCBEENDEDITW -#define LPNMCBEENDEDIT LPNMCBEENDEDITW -#define PNMCBEENDEDIT PNMCBEENDEDITW -#else -#define NMCBEENDEDIT NMCBEENDEDITA -#define LPNMCBEENDEDIT LPNMCBEENDEDITA -#define PNMCBEENDEDIT PNMCBEENDEDITA -#endif +#define NMCBEENDEDIT __MINGW_NAME_AW(NMCBEENDEDIT) +#define LPNMCBEENDEDIT __MINGW_NAME_AW(LPNMCBEENDEDIT) +#define PNMCBEENDEDIT __MINGW_NAME_AW(PNMCBEENDEDIT) + #endif #ifndef NOTABCONTROL #define WC_TABCONTROLA "SysTabControl32" #define WC_TABCONTROLW L"SysTabControl32" -#ifdef UNICODE -#define WC_TABCONTROL WC_TABCONTROLW -#else -#define WC_TABCONTROL WC_TABCONTROLA -#endif +#define WC_TABCONTROL __MINGW_NAME_AW(WC_TABCONTROL) #define TCS_SCROLLOPPOSITE 0x1 #define TCS_BOTTOM 0x2 @@ -4135,13 +3747,8 @@ typedef struct tagTVDISPINFOEXW { int iImage; } TCITEMHEADERW,*LPTCITEMHEADERW; -#ifdef UNICODE -#define TCITEMHEADER TCITEMHEADERW -#define LPTCITEMHEADER LPTCITEMHEADERW -#else -#define TCITEMHEADER TCITEMHEADERA -#define LPTCITEMHEADER LPTCITEMHEADERA -#endif +#define TCITEMHEADER __MINGW_NAME_AW(TCITEMHEADER) +#define LPTCITEMHEADER __MINGW_NAME_AW(LPTCITEMHEADER) #define TC_ITEMA TCITEMA #define TC_ITEMW TCITEMW @@ -4167,44 +3774,27 @@ typedef struct tagTVDISPINFOEXW { LPARAM lParam; } TCITEMW,*LPTCITEMW; -#ifdef UNICODE -#define TCITEM TCITEMW -#define LPTCITEM LPTCITEMW -#else -#define TCITEM TCITEMA -#define LPTCITEM LPTCITEMA -#endif +#define TCITEM __MINGW_NAME_AW(TCITEM) +#define LPTCITEM __MINGW_NAME_AW(LPTCITEM) #define TCM_GETITEMA (TCM_FIRST+5) #define TCM_GETITEMW (TCM_FIRST+60) -#ifdef UNICODE -#define TCM_GETITEM TCM_GETITEMW -#else -#define TCM_GETITEM TCM_GETITEMA -#endif +#define TCM_GETITEM __MINGW_NAME_AW(TCM_GETITEM) #define TabCtrl_GetItem(hwnd,iItem,pitem) (WINBOOL)SNDMSG((hwnd),TCM_GETITEM,(WPARAM)(int)(iItem),(LPARAM)(TC_ITEM *)(pitem)) #define TCM_SETITEMA (TCM_FIRST+6) #define TCM_SETITEMW (TCM_FIRST+61) -#ifdef UNICODE -#define TCM_SETITEM TCM_SETITEMW -#else -#define TCM_SETITEM TCM_SETITEMA -#endif +#define TCM_SETITEM __MINGW_NAME_AW(TCM_SETITEM) #define TabCtrl_SetItem(hwnd,iItem,pitem) (WINBOOL)SNDMSG((hwnd),TCM_SETITEM,(WPARAM)(int)(iItem),(LPARAM)(TC_ITEM *)(pitem)) #define TCM_INSERTITEMA (TCM_FIRST+7) #define TCM_INSERTITEMW (TCM_FIRST+62) -#ifdef UNICODE -#define TCM_INSERTITEM TCM_INSERTITEMW -#else -#define TCM_INSERTITEM TCM_INSERTITEMA -#endif +#define TCM_INSERTITEM __MINGW_NAME_AW(TCM_INSERTITEM) #define TabCtrl_InsertItem(hwnd,iItem,pitem) (int)SNDMSG((hwnd),TCM_INSERTITEM,(WPARAM)(int)(iItem),(LPARAM)(const TC_ITEM *)(pitem)) @@ -4297,11 +3887,8 @@ typedef struct tagTVDISPINFOEXW { #define ANIMATE_CLASSW L"SysAnimate32" #define ANIMATE_CLASSA "SysAnimate32" -#ifdef UNICODE -#define ANIMATE_CLASS ANIMATE_CLASSW -#else -#define ANIMATE_CLASS ANIMATE_CLASSA -#endif + +#define ANIMATE_CLASS __MINGW_NAME_AW(ANIMATE_CLASS) #define ACS_CENTER 0x1 #define ACS_TRANSPARENT 0x2 @@ -4310,11 +3897,8 @@ typedef struct tagTVDISPINFOEXW { #define ACM_OPENA (WM_USER+100) #define ACM_OPENW (WM_USER+103) -#ifdef UNICODE -#define ACM_OPEN ACM_OPENW -#else -#define ACM_OPEN ACM_OPENA -#endif + +#define ACM_OPEN __MINGW_NAME_AW(ACM_OPEN) #define ACM_PLAY (WM_USER+101) #define ACM_STOP (WM_USER+102) @@ -4335,11 +3919,8 @@ typedef struct tagTVDISPINFOEXW { #ifndef NOMONTHCAL #define MONTHCAL_CLASSW L"SysMonthCal32" #define MONTHCAL_CLASSA "SysMonthCal32" -#ifdef UNICODE -#define MONTHCAL_CLASS MONTHCAL_CLASSW -#else -#define MONTHCAL_CLASS MONTHCAL_CLASSA -#endif + +#define MONTHCAL_CLASS __MINGW_NAME_AW(MONTHCAL_CLASS) typedef DWORD MONTHDAYSTATE,*LPMONTHDAYSTATE; @@ -4382,13 +3963,18 @@ typedef struct tagTVDISPINFOEXW { #define MCM_HITTEST (MCM_FIRST+14) #define MonthCal_HitTest(hmc,pinfo) SNDMSG(hmc,MCM_HITTEST,0,(LPARAM)(PMCHITTESTINFO)(pinfo)) - typedef struct { - UINT cbSize; - POINT pt; - - UINT uHit; - SYSTEMTIME st; - } MCHITTESTINFO,*PMCHITTESTINFO; +typedef struct { + UINT cbSize; + POINT pt; + UINT uHit; + SYSTEMTIME st; +#if(NTDDI_VERSION >= NTDDI_VISTA) + RECT rc; + int iOffset; + int iRow; + int iCol; +#endif +} MCHITTESTINFO, *PMCHITTESTINFO; #define MCHITTESTINFO_V1_SIZE CCSIZEOF_STRUCT(MCHITTESTINFO, st) @@ -4455,16 +4041,12 @@ typedef struct tagTVDISPINFOEXW { #define MCN_SELECT (MCN_FIRST+4) -#define MCS_DAYSTATE 0x0001 -#define MCS_MULTISELECT 0x0002 -#define MCS_WEEKNUMBERS 0x0004 -#define MCS_NOTODAYCIRCLE 0x0008 -#define MCS_NOTODAY 0x0010 -#if (NTDDI_VERSION >= NTDDI_VISTA) -#define MCS_NOTRAILINGDATES 0x0040 -#define MCS_SHORTDAYSOFWEEK 0x0080 -#define MCS_NOSELCHANGEONNAV 0x0100 -#endif +#define MCS_DAYSTATE 0x0001 +#define MCS_MULTISELECT 0x0002 +#define MCS_WEEKNUMBERS 0x0004 +#define MCS_NOTODAYCIRCLE 0x0008 +#define MCS_NOTODAY 0x0010 +#define MCS_NOTRAILINGDATES 0x0040 #define GMR_VISIBLE 0 #define GMR_DAYSTATE 1 @@ -4473,11 +4055,9 @@ typedef struct tagTVDISPINFOEXW { #ifndef NODATETIMEPICK #define DATETIMEPICK_CLASSW L"SysDateTimePick32" #define DATETIMEPICK_CLASSA "SysDateTimePick32" -#ifdef UNICODE -#define DATETIMEPICK_CLASS DATETIMEPICK_CLASSW -#else -#define DATETIMEPICK_CLASS DATETIMEPICK_CLASSA -#endif + +#define DATETIMEPICK_CLASS __MINGW_NAME_AW(DATETIMEPICK_CLASS) + #define DTM_FIRST 0x1000 #define DTM_GETSYSTEMTIME (DTM_FIRST+1) @@ -4491,11 +4071,7 @@ typedef struct tagTVDISPINFOEXW { #define DTM_SETFORMATA (DTM_FIRST+5) #define DTM_SETFORMATW (DTM_FIRST+50) -#ifdef UNICODE -#define DTM_SETFORMAT DTM_SETFORMATW -#else -#define DTM_SETFORMAT DTM_SETFORMATA -#endif +#define DTM_SETFORMAT __MINGW_NAME_AW(DTM_SETFORMAT) #define DateTime_SetFormat(hdp,sz) (WINBOOL)SNDMSG(hdp,DTM_SETFORMAT,0,(LPARAM)(sz)) @@ -4542,15 +4118,9 @@ typedef struct tagTVDISPINFOEXW { DWORD dwFlags; } NMDATETIMESTRINGW,*LPNMDATETIMESTRINGW; -#ifdef UNICODE -#define DTN_USERSTRING DTN_USERSTRINGW -#define NMDATETIMESTRING NMDATETIMESTRINGW -#define LPNMDATETIMESTRING LPNMDATETIMESTRINGW -#else -#define DTN_USERSTRING DTN_USERSTRINGA -#define NMDATETIMESTRING NMDATETIMESTRINGA -#define LPNMDATETIMESTRING LPNMDATETIMESTRINGA -#endif +#define DTN_USERSTRING __MINGW_NAME_AW(DTN_USERSTRING) +#define NMDATETIMESTRING __MINGW_NAME_AW(NMDATETIMESTRING) +#define LPNMDATETIMESTRING __MINGW_NAME_AW(LPNMDATETIMESTRING) #define DTN_WMKEYDOWNA (DTN_FIRST+3) #define DTN_WMKEYDOWNW (DTN_FIRST+16) @@ -4568,15 +4138,9 @@ typedef struct tagTVDISPINFOEXW { SYSTEMTIME st; } NMDATETIMEWMKEYDOWNW,*LPNMDATETIMEWMKEYDOWNW; -#ifdef UNICODE -#define DTN_WMKEYDOWN DTN_WMKEYDOWNW -#define NMDATETIMEWMKEYDOWN NMDATETIMEWMKEYDOWNW -#define LPNMDATETIMEWMKEYDOWN LPNMDATETIMEWMKEYDOWNW -#else -#define DTN_WMKEYDOWN DTN_WMKEYDOWNA -#define NMDATETIMEWMKEYDOWN NMDATETIMEWMKEYDOWNA -#define LPNMDATETIMEWMKEYDOWN LPNMDATETIMEWMKEYDOWNA -#endif +#define DTN_WMKEYDOWN __MINGW_NAME_AW(DTN_WMKEYDOWN) +#define NMDATETIMEWMKEYDOWN __MINGW_NAME_AW(NMDATETIMEWMKEYDOWN) +#define LPNMDATETIMEWMKEYDOWN __MINGW_NAME_AW(LPNMDATETIMEWMKEYDOWN) #define DTN_FORMATA (DTN_FIRST+4) #define DTN_FORMATW (DTN_FIRST+17) @@ -4596,15 +4160,9 @@ typedef struct tagTVDISPINFOEXW { WCHAR szDisplay[64]; } NMDATETIMEFORMATW,*LPNMDATETIMEFORMATW; -#ifdef UNICODE -#define DTN_FORMAT DTN_FORMATW -#define NMDATETIMEFORMAT NMDATETIMEFORMATW -#define LPNMDATETIMEFORMAT LPNMDATETIMEFORMATW -#else -#define DTN_FORMAT DTN_FORMATA -#define NMDATETIMEFORMAT NMDATETIMEFORMATA -#define LPNMDATETIMEFORMAT LPNMDATETIMEFORMATA -#endif +#define DTN_FORMAT __MINGW_NAME_AW(DTN_FORMAT) +#define NMDATETIMEFORMAT __MINGW_NAME_AW(NMDATETIMEFORMAT) +#define LPNMDATETIMEFORMAT __MINGW_NAME_AW(LPNMDATETIMEFORMAT) #define DTN_FORMATQUERYA (DTN_FIRST+5) #define DTN_FORMATQUERYW (DTN_FIRST+18) @@ -4620,15 +4178,9 @@ typedef struct tagTVDISPINFOEXW { SIZE szMax; } NMDATETIMEFORMATQUERYW,*LPNMDATETIMEFORMATQUERYW; -#ifdef UNICODE -#define DTN_FORMATQUERY DTN_FORMATQUERYW -#define NMDATETIMEFORMATQUERY NMDATETIMEFORMATQUERYW -#define LPNMDATETIMEFORMATQUERY LPNMDATETIMEFORMATQUERYW -#else -#define DTN_FORMATQUERY DTN_FORMATQUERYA -#define NMDATETIMEFORMATQUERY NMDATETIMEFORMATQUERYA -#define LPNMDATETIMEFORMATQUERY LPNMDATETIMEFORMATQUERYA -#endif +#define DTN_FORMATQUERY __MINGW_NAME_AW(DTN_FORMATQUERY) +#define NMDATETIMEFORMATQUERY __MINGW_NAME_AW(NMDATETIMEFORMATQUERY) +#define LPNMDATETIMEFORMATQUERY __MINGW_NAME_AW(LPNMDATETIMEFORMATQUERY) #define DTN_DROPDOWN (DTN_FIRST+6) #define DTN_CLOSEUP (DTN_FIRST+7) @@ -4651,11 +4203,7 @@ typedef struct tagTVDISPINFOEXW { #define WC_IPADDRESSW L"SysIPAddress32" #define WC_IPADDRESSA "SysIPAddress32" -#ifdef UNICODE -#define WC_IPADDRESS WC_IPADDRESSW -#else -#define WC_IPADDRESS WC_IPADDRESSA -#endif +#define WC_IPADDRESS __MINGW_NAME_AW(WC_IPADDRESS) #define IPN_FIELDCHANGED (IPN_FIRST - 0) typedef struct tagNMIPADDRESS { @@ -4678,11 +4226,7 @@ typedef struct tagTVDISPINFOEXW { #define WC_PAGESCROLLERW L"SysPager" #define WC_PAGESCROLLERA "SysPager" -#ifdef UNICODE -#define WC_PAGESCROLLER WC_PAGESCROLLERW -#else -#define WC_PAGESCROLLER WC_PAGESCROLLERA -#endif +#define WC_PAGESCROLLER __MINGW_NAME_AW(WC_PAGESCROLLER) #define PGS_VERT 0x0 #define PGS_HORZ 0x1 @@ -4790,11 +4334,7 @@ typedef struct tagTVDISPINFOEXW { #define WC_NATIVEFONTCTLW L"NativeFontCtl" #define WC_NATIVEFONTCTLA "NativeFontCtl" -#ifdef UNICODE -#define WC_NATIVEFONTCTL WC_NATIVEFONTCTLW -#else -#define WC_NATIVEFONTCTL WC_NATIVEFONTCTLA -#endif +#define WC_NATIVEFONTCTL __MINGW_NAME_AW(WC_NATIVEFONTCTL) #define NFS_EDIT 0x1 #define NFS_STATIC 0x2 @@ -4807,11 +4347,8 @@ typedef struct tagTVDISPINFOEXW { #ifndef NOBUTTON #define WC_BUTTONA "Button" #define WC_BUTTONW L"Button" -#ifdef UNICODE -#define WC_BUTTON WC_BUTTONW -#else -#define WC_BUTTON WC_BUTTONA -#endif + +#define WC_BUTTON __MINGW_NAME_AW(WC_BUTTON) #define BUTTON_IMAGELIST_ALIGN_LEFT 0 #define BUTTON_IMAGELIST_ALIGN_RIGHT 1 @@ -4853,20 +4390,14 @@ typedef struct tagTVDISPINFOEXW { #ifndef NOSTATIC #define WC_STATICA "Static" #define WC_STATICW L"Static" -#ifdef UNICODE -#define WC_STATIC WC_STATICW -#else -#define WC_STATIC WC_STATICA -#endif + +#define WC_STATIC __MINGW_NAME_AW(WC_STATIC) #ifndef NOEDIT #define WC_EDITA "Edit" #define WC_EDITW L"Edit" -#ifdef UNICODE -#define WC_EDIT WC_EDITW -#else -#define WC_EDIT WC_EDITA -#endif + +#define WC_EDIT __MINGW_NAME_AW(WC_EDIT) #define EM_SETCUEBANNER (ECM_FIRST+1) #define Edit_SetCueBannerText(hwnd,lpcwText) (WINBOOL)SNDMSG((hwnd),EM_SETCUEBANNER,0,(LPARAM)(lpcwText)) @@ -4888,21 +4419,17 @@ typedef struct tagTVDISPINFOEXW { #ifndef NOLISTBOX #define WC_LISTBOXA "ListBox" #define WC_LISTBOXW L"ListBox" -#ifdef UNICODE -#define WC_LISTBOX WC_LISTBOXW -#else -#define WC_LISTBOX WC_LISTBOXA -#endif + +#define WC_LISTBOX __MINGW_NAME_AW(WC_LISTBOX) + #endif #ifndef NOCOMBOBOX #define WC_COMBOBOXA "ComboBox" #define WC_COMBOBOXW L"ComboBox" -#ifdef UNICODE -#define WC_COMBOBOX WC_COMBOBOXW -#else -#define WC_COMBOBOX WC_COMBOBOXA -#endif + +#define WC_COMBOBOX __MINGW_NAME_AW(WC_COMBOBOX) + #endif #define CB_SETMINVISIBLE (CBM_FIRST+1) @@ -4914,11 +4441,9 @@ typedef struct tagTVDISPINFOEXW { #ifndef NOSCROLLBAR #define WC_SCROLLBARA "ScrollBar" #define WC_SCROLLBARW L"ScrollBar" -#ifdef UNICODE -#define WC_SCROLLBAR WC_SCROLLBARW -#else -#define WC_SCROLLBAR WC_SCROLLBARA -#endif + +#define WC_SCROLLBAR __MINGW_NAME_AW(WC_SCROLLBAR) + #endif #define INVALID_LINK_INDEX (-1) @@ -5010,6 +4535,40 @@ typedef struct tagTVDISPINFOEXW { WINCOMMCTRLAPI int WINAPI DPA_Search(HDPA hdpa,void *pFind,int iStart,PFNDPACOMPARE pfnCompare,LPARAM lParam,UINT options); WINCOMMCTRLAPI WINBOOL WINAPI Str_SetPtrW(LPWSTR *ppsz,LPCWSTR psz); +typedef struct _DPASTREAMINFO { + int iPos; + void *pvItem; +} DPASTREAMINFO; + +struct IStream; +typedef HRESULT (CALLBACK *PFNDPASTREAM)(DPASTREAMINFO*, struct IStream*, void*); +typedef void* (CALLBACK *PFNDPAMERGE)(UINT, void*, void*, LPARAM); +typedef const void* (CALLBACK *PFNDPAMERGECONST)(UINT, const void*, const void*, LPARAM); + + WINCOMMCTRLAPI HRESULT WINAPI DPA_LoadStream(HDPA * phdpa, PFNDPASTREAM pfn, struct IStream * pstream, void *pvInstData); + WINCOMMCTRLAPI HRESULT WINAPI DPA_SaveStream(HDPA hdpa, PFNDPASTREAM pfn, struct IStream * pstream, void *pvInstData); + WINCOMMCTRLAPI WINBOOL WINAPI DPA_Grow(HDPA pdpa, int cp); + WINCOMMCTRLAPI int WINAPI DPA_InsertPtr(HDPA hdpa, int i, void *p); + WINCOMMCTRLAPI PVOID WINAPI DPA_GetPtr(HDPA hdpa, INT_PTR i); + WINCOMMCTRLAPI WINBOOL WINAPI DPA_SetPtr(HDPA hdpa, int i, void *p); + WINCOMMCTRLAPI int WINAPI DPA_GetPtrIndex(HDPA hdpa, const void *p); + +#define DPA_GetPtrCount(hdpa) (*(int *)(hdpa)) +#define DPA_SetPtrCount(hdpa, cItems) (*(int *)(hdpa) = (cItems)) +#define DPA_GetPtrPtr(hdpa) (*((void * **)((BYTE *)(hdpa) + sizeof(void *)))) +#define DPA_AppendPtr(hdpa, pitem) DPA_InsertPtr(hdpa, DA_LAST, pitem) +#define DPA_FastDeleteLastPtr(hdpa) (--*(int *)(hdpa)) +#define DPA_FastGetPtr(hdpa, i) (DPA_GetPtrPtr(hdpa)[i]) + +#define DPAM_SORTED 1 +#define DPAM_NORMAL 2 +#define DPAM_UNION 4 +#define DPAM_INTERSECT 8 + +#define DPAMM_MERGE 1 +#define DPAMM_DELETE 2 +#define DPAMM_INSERT 3 + #ifndef NOTRACKMOUSEEVENT #ifndef WM_MOUSEHOVER @@ -5088,39 +4647,91 @@ typedef struct tagTVDISPINFOEXW { LRESULT WINAPI DefSubclassProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam); int WINAPI DrawShadowText(HDC hdc,LPCWSTR pszText,UINT cch,RECT *prc,DWORD dwFlags,COLORREF crText,COLORREF crShadow,int ixOffset,int iyOffset); -typedef struct _DPASTREAMINFO { - int iPos; - void *pvItem; -} DPASTREAMINFO; +#ifndef NOTASKDIALOG -struct IStream; -typedef HRESULT (CALLBACK *PFNDPASTREAM)(DPASTREAMINFO*, struct IStream*, void*); -typedef void* (CALLBACK *PFNDPAMERGE)(UINT, void*, void*, LPARAM); -typedef const void* (CALLBACK *PFNDPAMERGECONST)(UINT, const void*, const void*, LPARAM); +#include - WINCOMMCTRLAPI HRESULT WINAPI DPA_LoadStream(HDPA * phdpa, PFNDPASTREAM pfn, struct IStream * pstream, void *pvInstData); - WINCOMMCTRLAPI HRESULT WINAPI DPA_SaveStream(HDPA hdpa, PFNDPASTREAM pfn, struct IStream * pstream, void *pvInstData); - WINCOMMCTRLAPI BOOL WINAPI DPA_Grow(HDPA pdpa, IN int cp); - WINCOMMCTRLAPI int WINAPI DPA_InsertPtr(HDPA hdpa, IN int i, void *p); - WINCOMMCTRLAPI PVOID WINAPI DPA_GetPtr(HDPA hdpa, INT_PTR i); - WINCOMMCTRLAPI BOOL WINAPI DPA_SetPtr(HDPA hdpa, IN int i, void *p); - WINCOMMCTRLAPI int WINAPI DPA_GetPtrIndex(HDPA hdpa, const void *p); +enum _TASKDIALOG_FLAGS +{ + TDF_ENABLE_HYPERLINKS = 0x0001, + TDF_USE_HICON_MAIN = 0x0002, + TDF_USE_HICON_FOOTER = 0x0004, + TDF_ALLOW_DIALOG_CANCELLATION = 0x0008, + TDF_USE_COMMAND_LINKS = 0x0010, + TDF_USE_COMMAND_LINKS_NO_ICON = 0x0020, + TDF_EXPAND_FOOTER_AREA = 0x0040, + TDF_EXPANDED_BY_DEFAULT = 0x0080, + TDF_VERIFICATION_FLAG_CHECKED = 0x0100, + TDF_SHOW_PROGRESS_BAR = 0x0200, + TDF_SHOW_MARQUEE_PROGRESS_BAR = 0x0400, + TDF_CALLBACK_TIMER = 0x0800, + TDF_POSITION_RELATIVE_TO_WINDOW = 0x1000, + TDF_RTL_LAYOUT = 0x2000, + TDF_NO_DEFAULT_RADIO_BUTTON = 0x4000, + TDF_CAN_BE_MINIMIZED = 0x8000 +}; +typedef int TASKDIALOG_FLAGS; -#define DPA_GetPtrCount(hdpa) (*(int *)(hdpa)) -#define DPA_SetPtrCount(hdpa, cItems) (*(int *)(hdpa) = (cItems)) -#define DPA_GetPtrPtr(hdpa) (*((void * **)((BYTE *)(hdpa) + sizeof(void *)))) -#define DPA_AppendPtr(hdpa, pitem) DPA_InsertPtr(hdpa, DA_LAST, pitem) -#define DPA_FastDeleteLastPtr(hdpa) (--*(int *)(hdpa)) -#define DPA_FastGetPtr(hdpa, i) (DPA_GetPtrPtr(hdpa)[i]) +enum _TASKDIALOG_COMMON_BUTTON_FLAGS +{ + TDCBF_OK_BUTTON = 0x0001, + TDCBF_YES_BUTTON = 0x0002, + TDCBF_NO_BUTTON = 0x0004, + TDCBF_CANCEL_BUTTON = 0x0008, + TDCBF_RETRY_BUTTON = 0x0010, + TDCBF_CLOSE_BUTTON = 0x0020 +}; +typedef int TASKDIALOG_COMMON_BUTTON_FLAGS; -#define DPAM_SORTED 1 -#define DPAM_NORMAL 2 -#define DPAM_UNION 4 -#define DPAM_INTERSECT 8 +typedef struct _TASKDIALOG_BUTTON +{ + int nButtonID; + PCWSTR pszButtonText; +} TASKDIALOG_BUTTON; -#define DPAMM_MERGE 1 -#define DPAMM_DELETE 2 -#define DPAMM_INSERT 3 +typedef HRESULT (CALLBACK *PFTASKDIALOGCALLBACK)(HWND, UINT, WPARAM, LPARAM, LONG_PTR); + +typedef struct _TASKDIALOGCONFIG +{ + UINT cbSize; + HWND hwndParent; + HINSTANCE hInstance; + TASKDIALOG_FLAGS dwFlags; + TASKDIALOG_COMMON_BUTTON_FLAGS dwCommonButtons; + PCWSTR pszWindowTitle; + union + { + HICON hMainIcon; + PCWSTR pszMainIcon; + } DUMMYUNIONNAME; + PCWSTR pszMainInstruction; + PCWSTR pszContent; + UINT cButtons; + const TASKDIALOG_BUTTON *pButtons; + int nDefaultButton; + UINT cRadioButtons; + const TASKDIALOG_BUTTON *pRadioButtons; + int nDefaultRadioButton; + PCWSTR pszVerificationText; + PCWSTR pszExpandedInformation; + PCWSTR pszExpandedControlText; + PCWSTR pszCollapsedControlText; + union + { + HICON hFooterIcon; + PCWSTR pszFooterIcon; + } DUMMYUNIONNAME2; + PCWSTR pszFooter; + PFTASKDIALOGCALLBACK pfCallback; + LONG_PTR lpCallbackData; + UINT cxWidth; +} TASKDIALOGCONFIG; + +HRESULT WINAPI TaskDialogIndirect(const TASKDIALOGCONFIG *, int *, int *, BOOL *); + +#include + +#endif /* NOTASKDIALOG */ #ifdef __cplusplus } From 55300c6ce045883974036bb6765f0e55d68e143e Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Wed, 23 Feb 2011 22:38:55 +0000 Subject: [PATCH 129/287] [NTDLL/LDR] - DPH could be selectively enabled for a specific application by means of Image File Execution options. Commit a rewrite of LdrQueryImageFileExecution* APIs based on a quite old patch by Alex Ionescu along with my fixes. - This is a forced measure to commit first step of an ntdll/ldr rewrite. This particular commit should not introduce any regressions, because previously that code part just barely worked. svn path=/trunk/; revision=50884 --- reactos/dll/ntdll/ldr/ldrinit.c | 320 ++++++++++++++++++++++++++++++++ reactos/dll/ntdll/ldr/utils.c | 156 ---------------- reactos/dll/ntdll/ntdll.rbuild | 1 + 3 files changed, 321 insertions(+), 156 deletions(-) create mode 100644 reactos/dll/ntdll/ldr/ldrinit.c diff --git a/reactos/dll/ntdll/ldr/ldrinit.c b/reactos/dll/ntdll/ldr/ldrinit.c new file mode 100644 index 00000000000..77baa0a5ed8 --- /dev/null +++ b/reactos/dll/ntdll/ldr/ldrinit.c @@ -0,0 +1,320 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS NT User-Mode Library + * FILE: dll/ntdll/ldr/ldrinit.c + * PURPOSE: User-Mode Process/Thread Startup + * PROGRAMMERS: Alex Ionescu (alex@relsoft.net) + * Aleksey Bragin (aleksey@reactos.org) + */ + +/* INCLUDES *****************************************************************/ + +#include +#define NDEBUG +#include + +/* GLOBALS *******************************************************************/ + +HKEY ImageExecOptionsKey; +HKEY Wow64ExecOptionsKey; +UNICODE_STRING ImageExecOptionsString = RTL_CONSTANT_STRING(L"\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options"); +UNICODE_STRING Wow64OptionsString = RTL_CONSTANT_STRING(L""); + +/* FUNCTIONS *****************************************************************/ + +/* + * @implemented + */ +NTSTATUS +NTAPI +LdrOpenImageFileOptionsKey(IN PUNICODE_STRING SubKey, + IN BOOLEAN Wow64, + OUT PHKEY NewKeyHandle) +{ + PHKEY RootKeyLocation; + HANDLE RootKey; + UNICODE_STRING SubKeyString; + OBJECT_ATTRIBUTES ObjectAttributes; + NTSTATUS Status; + PWCHAR p1; + + /* Check which root key to open */ + if (Wow64) + RootKeyLocation = &Wow64ExecOptionsKey; + else + RootKeyLocation = &ImageExecOptionsKey; + + /* Get the current key */ + RootKey = *RootKeyLocation; + + /* Setup the object attributes */ + InitializeObjectAttributes(&ObjectAttributes, + Wow64 ? + &Wow64OptionsString : &ImageExecOptionsString, + OBJ_CASE_INSENSITIVE, + NULL, + NULL); + + /* Open the root key */ + Status = ZwOpenKey(&RootKey, KEY_ENUMERATE_SUB_KEYS, &ObjectAttributes); + if (NT_SUCCESS(Status)) + { + /* Write the key handle */ + if (_InterlockedCompareExchange((LONG*)RootKeyLocation, (LONG)RootKey, 0) != 0) + { + /* Someone already opened it, use it instead */ + NtClose(RootKey); + RootKey = *RootKeyLocation; + } + + /* Extract the name */ + SubKeyString = *SubKey; + p1 = (PWCHAR)((ULONG_PTR)SubKeyString.Buffer + SubKeyString.Length); + while (SubKey->Length) + { + if (p1[-1] == L'\\') break; + p1--; + SubKeyString.Length -= sizeof(*p1); + } + SubKeyString.Buffer = p1; + SubKeyString.Length = SubKeyString.MaximumLength - SubKeyString.Length - sizeof(WCHAR); + + /* Setup the object attributes */ + InitializeObjectAttributes(&ObjectAttributes, + &SubKeyString, + OBJ_CASE_INSENSITIVE, + RootKey, + NULL); + + /* Open the setting key */ + Status = ZwOpenKey((PHANDLE)NewKeyHandle, GENERIC_READ, &ObjectAttributes); + } + + /* Return to caller */ + return Status; +} + +/* + * @implemented + */ +NTSTATUS +NTAPI +LdrQueryImageFileKeyOption(IN HKEY KeyHandle, + IN PCWSTR ValueName, + IN ULONG Type, + OUT PVOID Buffer, + IN ULONG BufferSize, + OUT PULONG ReturnedLength OPTIONAL) +{ + ULONG KeyInfo[256]; + UNICODE_STRING ValueNameString, IntegerString; + ULONG KeyInfoSize, ResultSize; + PKEY_VALUE_PARTIAL_INFORMATION KeyValueInformation = (PKEY_VALUE_PARTIAL_INFORMATION)&KeyInfo; + BOOLEAN FreeHeap = FALSE; + NTSTATUS Status; + + /* Build a string for the value name */ + Status = RtlInitUnicodeStringEx(&ValueNameString, ValueName); + if (!NT_SUCCESS(Status)) return Status; + + /* Query the value */ + Status = NtQueryValueKey(KeyHandle, + &ValueNameString, + KeyValuePartialInformation, + KeyValueInformation, + sizeof(KeyInfo), + &ResultSize); + if (Status == STATUS_BUFFER_OVERFLOW) + { + /* Our local buffer wasn't enough, allocate one */ + KeyInfoSize = sizeof(KEY_VALUE_PARTIAL_INFORMATION) + + KeyValueInformation->DataLength; + KeyValueInformation = RtlAllocateHeap(RtlGetProcessHeap(), + 0, + KeyInfoSize); + if (KeyInfo == NULL) + { + /* Give up this time */ + Status = STATUS_NO_MEMORY; + } + + /* Try again */ + Status = NtQueryValueKey(KeyHandle, + &ValueNameString, + KeyValuePartialInformation, + KeyValueInformation, + KeyInfoSize, + &ResultSize); + FreeHeap = TRUE; + } + + /* Check for success */ + if (NT_SUCCESS(Status)) + { + /* Handle binary data */ + if (KeyValueInformation->Type == REG_BINARY) + { + /* Check validity */ + if ((Buffer) && (KeyValueInformation->DataLength <= BufferSize)) + { + /* Copy into buffer */ + RtlMoveMemory(Buffer, + &KeyValueInformation->Data, + KeyValueInformation->DataLength); + } + else + { + Status = STATUS_BUFFER_OVERFLOW; + } + + /* Copy the result length */ + if (ReturnedLength) *ReturnedLength = KeyValueInformation->DataLength; + } + else if (KeyValueInformation->Type == REG_DWORD) + { + /* Check for valid type */ + if (KeyValueInformation->Type != Type) + { + /* Error */ + Status = STATUS_OBJECT_TYPE_MISMATCH; + } + else + { + /* Check validity */ + if ((Buffer) && + (BufferSize == sizeof(ULONG)) && + (KeyValueInformation->DataLength <= BufferSize)) + { + /* Copy into buffer */ + RtlMoveMemory(Buffer, + &KeyValueInformation->Data, + KeyValueInformation->DataLength); + } + else + { + Status = STATUS_BUFFER_OVERFLOW; + } + + /* Copy the result length */ + if (ReturnedLength) *ReturnedLength = KeyValueInformation->DataLength; + } + } + else if (KeyValueInformation->Type != REG_SZ) + { + /* We got something weird */ + Status = STATUS_OBJECT_TYPE_MISMATCH; + } + else + { + /* String, check what you requested */ + if (Type == REG_DWORD) + { + /* Validate */ + if (BufferSize != sizeof(ULONG)) + { + /* Invalid size */ + BufferSize = 0; + Status = STATUS_INFO_LENGTH_MISMATCH; + } + else + { + /* OK, we know what you want... */ + IntegerString.Buffer = (PWSTR)KeyValueInformation->Data; + IntegerString.Length = KeyValueInformation->DataLength - + sizeof(WCHAR); + IntegerString.MaximumLength = KeyValueInformation->DataLength; + Status = RtlUnicodeStringToInteger(&IntegerString, 0, (PULONG)Buffer); + } + } + else + { + /* Validate */ + if (KeyValueInformation->DataLength > BufferSize) + { + /* Invalid */ + Status = STATUS_BUFFER_OVERFLOW; + } + else + { + /* Set the size */ + BufferSize = KeyValueInformation->DataLength; + } + + /* Copy the string */ + RtlMoveMemory(Buffer, &KeyValueInformation->Data, BufferSize); + } + + /* Copy the result length */ + if (ReturnedLength) *ReturnedLength = KeyValueInformation->DataLength; + } + } + + /* Check if buffer was in heap */ + if (FreeHeap) RtlFreeHeap(RtlGetProcessHeap(), 0, KeyValueInformation); + + /* Close key and return */ + NtClose(KeyHandle); + return Status; +} + +/* + * @implemented + */ +NTSTATUS +NTAPI +LdrQueryImageFileExecutionOptionsEx(IN PUNICODE_STRING SubKey, + IN PCWSTR ValueName, + IN ULONG Type, + OUT PVOID Buffer, + IN ULONG BufferSize, + OUT PULONG ReturnedLength OPTIONAL, + IN BOOLEAN Wow64) +{ + NTSTATUS Status; + HKEY KeyHandle; + + /* Open a handle to the key */ + Status = LdrOpenImageFileOptionsKey(SubKey, Wow64, &KeyHandle); + + /* Check for success */ + if (NT_SUCCESS(Status)) + { + /* Query the data */ + Status = LdrQueryImageFileKeyOption(KeyHandle, + ValueName, + Type, + Buffer, + BufferSize, + ReturnedLength); + + /* Close the key */ + NtClose(KeyHandle); + } + + /* Return to caller */ + return Status; +} + +/* + * @implemented + */ +NTSTATUS +NTAPI +LdrQueryImageFileExecutionOptions(IN PUNICODE_STRING SubKey, + IN PCWSTR ValueName, + IN ULONG Type, + OUT PVOID Buffer, + IN ULONG BufferSize, + OUT PULONG ReturnedLength OPTIONAL) +{ + /* Call the newer function */ + return LdrQueryImageFileExecutionOptionsEx(SubKey, + ValueName, + Type, + Buffer, + BufferSize, + ReturnedLength, + FALSE); +} + +/* EOF */ diff --git a/reactos/dll/ntdll/ldr/utils.c b/reactos/dll/ntdll/ldr/utils.c index 4482f93fdf4..345d159eebf 100644 --- a/reactos/dll/ntdll/ldr/utils.c +++ b/reactos/dll/ntdll/ldr/utils.c @@ -3289,162 +3289,6 @@ LdrVerifyImageMatchesChecksum (IN HANDLE FileHandle, return Status; } - -/*************************************************************************** - * NAME EXPORTED - * LdrQueryImageFileExecutionOptions - * - * DESCRIPTION - * - * ARGUMENTS - * - * RETURN VALUE - * - * REVISIONS - * - * NOTE - * - * @implemented - */ -NTSTATUS NTAPI -LdrQueryImageFileExecutionOptions(IN PUNICODE_STRING SubKey, - IN PCWSTR ValueName, - IN ULONG Type, - OUT PVOID Buffer, - IN ULONG BufferSize, - OUT PULONG ReturnedLength OPTIONAL) -{ - PKEY_VALUE_PARTIAL_INFORMATION KeyInfo; - CHAR KeyInfoBuffer[sizeof(KEY_VALUE_PARTIAL_INFORMATION) + 32]; - OBJECT_ATTRIBUTES ObjectAttributes; - UNICODE_STRING ValueNameString; - UNICODE_STRING KeyName; - WCHAR NameBuffer[256]; - HANDLE KeyHandle; - ULONG KeyInfoSize; - ULONG ResultSize; - PWCHAR Ptr; - NTSTATUS Status; - - wcscpy (NameBuffer, - L"\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options\\"); - Ptr = wcsrchr (SubKey->Buffer, L'\\'); - if (Ptr == NULL) - { - Ptr = SubKey->Buffer; - } - else - { - Ptr++; - } - wcscat (NameBuffer, Ptr); - RtlInitUnicodeString (&KeyName, - NameBuffer); - - InitializeObjectAttributes(&ObjectAttributes, - &KeyName, - OBJ_CASE_INSENSITIVE, - NULL, - NULL); - - Status = NtOpenKey(&KeyHandle, - KEY_READ, - &ObjectAttributes); - if (!NT_SUCCESS(Status)) - { - DPRINT ("NtOpenKey() failed (Status %lx)\n", Status); - return Status; - } - - KeyInfoSize = sizeof(KeyInfoBuffer); - KeyInfo = (PKEY_VALUE_PARTIAL_INFORMATION)KeyInfoBuffer; - - RtlInitUnicodeString(&ValueNameString, - (PWSTR)ValueName); - Status = NtQueryValueKey(KeyHandle, - &ValueNameString, - KeyValuePartialInformation, - KeyInfo, - KeyInfoSize, - &ResultSize); - if (Status == STATUS_BUFFER_OVERFLOW) - { - /* We can allocate only if there is a process heap already */ - if (!RtlGetProcessHeap()) - { - NtClose (KeyHandle); - return STATUS_NO_MEMORY; - } - KeyInfoSize = sizeof(KEY_VALUE_PARTIAL_INFORMATION) + KeyInfo->DataLength; - KeyInfo = RtlAllocateHeap (RtlGetProcessHeap(), - HEAP_ZERO_MEMORY, - KeyInfoSize); - if (KeyInfo == NULL) - { - NtClose (KeyHandle); - return STATUS_INSUFFICIENT_RESOURCES; - } - - Status = NtQueryValueKey (KeyHandle, - &ValueNameString, - KeyValuePartialInformation, - KeyInfo, - KeyInfoSize, - &ResultSize); - } - NtClose (KeyHandle); - - if (!NT_SUCCESS(Status)) - { - if ((PCHAR)KeyInfo != KeyInfoBuffer) - { - RtlFreeHeap (RtlGetProcessHeap(), - 0, - KeyInfo); - } - return Status; - } - - if (KeyInfo->Type != Type) - { - if ((PCHAR)KeyInfo != KeyInfoBuffer) - { - RtlFreeHeap (RtlGetProcessHeap(), - 0, - KeyInfo); - } - return STATUS_OBJECT_TYPE_MISMATCH; - } - - ResultSize = BufferSize; - if (ResultSize < KeyInfo->DataLength) - { - Status = STATUS_BUFFER_OVERFLOW; - } - else - { - ResultSize = KeyInfo->DataLength; - } - RtlCopyMemory (Buffer, - &KeyInfo->Data, - ResultSize); - - if ((PCHAR)KeyInfo != KeyInfoBuffer) - { - RtlFreeHeap (RtlGetProcessHeap(), - 0, - KeyInfo); - } - - if (ReturnedLength != NULL) - { - *ReturnedLength = ResultSize; - } - - return Status; -} - - PIMAGE_BASE_RELOCATION NTAPI LdrProcessRelocationBlock( diff --git a/reactos/dll/ntdll/ntdll.rbuild b/reactos/dll/ntdll/ntdll.rbuild index 2a0b9101df3..30a97ef00cc 100644 --- a/reactos/dll/ntdll/ntdll.rbuild +++ b/reactos/dll/ntdll/ntdll.rbuild @@ -47,6 +47,7 @@ ntdll.h + ldrinit.c startup.c utils.c actctx.c From 4c4c630bf3463bf244c3d25574589e9b87831631 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 24 Feb 2011 00:48:01 +0000 Subject: [PATCH 130/287] =?UTF-8?q?[WIN32K]=20Patch=20by=20Rafa=C5=82=20Ha?= =?UTF-8?q?rabie=C5=84=20:=20-=20don't=20transform=20cordinates=20twice=20?= =?UTF-8?q?in=20GreExtTextOutW=20-=20Fixes=20AbiWord=20toolbar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See issue #4811 for more details. svn path=/trunk/; revision=50885 --- reactos/subsystems/win32/win32k/objects/freetype.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/freetype.c b/reactos/subsystems/win32/win32k/objects/freetype.c index 21a0883c2da..d67405bc12c 100644 --- a/reactos/subsystems/win32/win32k/objects/freetype.c +++ b/reactos/subsystems/win32/win32k/objects/freetype.c @@ -3248,8 +3248,6 @@ GreExtTextOutW( DestRect.right = lprc->right; DestRect.bottom = lprc->bottom; - IntLPtoDP(dc, (LPPOINT)&DestRect, 2); - DestRect.left += dc->ptlDCOrig.x; DestRect.top += dc->ptlDCOrig.y; DestRect.right += dc->ptlDCOrig.x; From 011bdfc3b5342e5ee8c9fe199c3ce89dfbc7ffcd Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Thu, 24 Feb 2011 01:26:34 +0000 Subject: [PATCH 131/287] [PSDK] - Improve some definitions. svn path=/trunk/; revision=50886 --- reactos/include/psdk/commctrl.h | 20 ++++++++++---------- reactos/include/psdk/winuser.h | 3 +++ 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/reactos/include/psdk/commctrl.h b/reactos/include/psdk/commctrl.h index adda9fff124..2b2bfd38bd7 100644 --- a/reactos/include/psdk/commctrl.h +++ b/reactos/include/psdk/commctrl.h @@ -3024,8 +3024,8 @@ extern "C" { #endif #if(_WIN32_IE >= 0x0600) #define TVIF_STATEEX 0x100 -#define TVIF_EXPANDEDIMAGE 0x200 #endif +#define TVIF_EXPANDEDIMAGE 0x200 #define TVIS_SELECTED 0x2 #define TVIS_CUT 0x4 #define TVIS_DROPHILITED 0x8 @@ -3084,7 +3084,10 @@ extern "C" { int cChildren; LPARAM lParam; int iIntegral; - } TVITEMEXA,*LPTVITEMEXA; + UINT uStateEx; /* _WIN32_IE >= 0x600 */ + HWND hwnd; /* _WIN32_IE >= 0x600 */ + int iExpandedImage; /* _WIN32_IE >= 0x600 */ + } TVITEMEXA, *LPTVITEMEXA; typedef struct tagTVITEMEXW { UINT mask; @@ -3098,14 +3101,9 @@ extern "C" { int cChildren; LPARAM lParam; int iIntegral; -#if(_WIN32_IE >= 0x0600) - UINT uStateEx; - HWND hwnd; - int iExpandedImage; -#endif -#if(NTDDI_VERSION >= NTDDI_WIN7) - int iReserved; -#endif + UINT uStateEx; /* _WIN32_IE >= 0x600 */ + HWND hwnd; /* _WIN32_IE >= 0x600 */ + int iExpandedImage; /* _WIN32_IE >= 0x600 */ } TVITEMEXW, *LPTVITEMEXW; __MINGW_TYPEDEF_AW(TVITEMEX) @@ -4018,6 +4016,8 @@ typedef struct { #define MonthCal_SetUnicodeFormat(hwnd,fUnicode) (WINBOOL)SNDMSG((hwnd),MCM_SETUNICODEFORMAT,(WPARAM)(fUnicode),0) #define MCM_GETUNICODEFORMAT CCM_GETUNICODEFORMAT #define MonthCal_GetUnicodeFormat(hwnd) (WINBOOL)SNDMSG((hwnd),MCM_GETUNICODEFORMAT,0,0) +#define MCM_SETCALENDARBORDER (MCM_FIRST + 30) +#define MCM_GETCALENDARBORDER (MCM_FIRST + 31) typedef struct tagNMSELCHANGE { NMHDR nmhdr; diff --git a/reactos/include/psdk/winuser.h b/reactos/include/psdk/winuser.h index c0d0ea295cb..f58684c0bb0 100644 --- a/reactos/include/psdk/winuser.h +++ b/reactos/include/psdk/winuser.h @@ -1735,6 +1735,9 @@ extern "C" { #define WM_XBUTTONUP 524 #define WM_XBUTTONDBLCLK 525 #endif +#if (_WIN32_WINNT >= 0x0600) +#define WM_MOUSEHWHEEL 526 +#endif #if (_WIN32_WINNT >= 0x0500) #define WM_MOUSELAST 525 #elif (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400) From 353147d2cc22342ee6c1d534e70a77a94be4e16e Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Thu, 24 Feb 2011 01:27:57 +0000 Subject: [PATCH 132/287] [COMCTL32] - Sync with wine 1.3.14 svn path=/trunk/; revision=50887 --- reactos/dll/win32/comctl32/comboex.c | 23 +- reactos/dll/win32/comctl32/comctl32.h | 7 +- reactos/dll/win32/comctl32/comctl32.spec | 57 +-- reactos/dll/win32/comctl32/comctl_Bg.rc | 21 - reactos/dll/win32/comctl32/comctl_Cs.rc | 21 - reactos/dll/win32/comctl32/comctl_Da.rc | 21 - reactos/dll/win32/comctl32/comctl_De.rc | 21 - reactos/dll/win32/comctl32/comctl_El.rc | 21 - reactos/dll/win32/comctl32/comctl_En.rc | 21 - reactos/dll/win32/comctl32/comctl_Eo.rc | 68 +++ reactos/dll/win32/comctl32/comctl_Es.rc | 21 - reactos/dll/win32/comctl32/comctl_Fr.rc | 21 - reactos/dll/win32/comctl32/comctl_He.rc | 74 ++++ reactos/dll/win32/comctl32/comctl_Hu.rc | 21 - reactos/dll/win32/comctl32/comctl_It.rc | 34 +- reactos/dll/win32/comctl32/comctl_Ja.rc | 21 - reactos/dll/win32/comctl32/comctl_Ko.rc | 69 ++- reactos/dll/win32/comctl32/comctl_Lt.rc | 21 - reactos/dll/win32/comctl32/comctl_Nl.rc | 21 - reactos/dll/win32/comctl32/comctl_No.rc | 27 +- reactos/dll/win32/comctl32/comctl_Pl.rc | 25 +- reactos/dll/win32/comctl32/comctl_Pt.rc | 21 - reactos/dll/win32/comctl32/comctl_Ro.rc | 21 - reactos/dll/win32/comctl32/comctl_Ru.rc | 21 - reactos/dll/win32/comctl32/comctl_Si.rc | 21 - reactos/dll/win32/comctl32/comctl_Sk.rc | 21 - reactos/dll/win32/comctl32/comctl_Sr.rc | 95 ++--- reactos/dll/win32/comctl32/comctl_Sv.rc | 21 - reactos/dll/win32/comctl32/comctl_Th.rc | 21 - reactos/dll/win32/comctl32/comctl_Tr.rc | 21 - reactos/dll/win32/comctl32/comctl_Uk.rc | 21 - reactos/dll/win32/comctl32/comctl_Zh.rc | 42 -- reactos/dll/win32/comctl32/commctrl.c | 14 + reactos/dll/win32/comctl32/datetime.c | 18 +- reactos/dll/win32/comctl32/header.c | 4 +- reactos/dll/win32/comctl32/imagelist.c | 87 ++-- reactos/dll/win32/comctl32/ipaddress.c | 11 +- reactos/dll/win32/comctl32/listview.c | 333 ++++++++------- reactos/dll/win32/comctl32/monthcal.c | 514 ++++++++++++----------- reactos/dll/win32/comctl32/pager.c | 6 +- reactos/dll/win32/comctl32/progress.c | 19 +- reactos/dll/win32/comctl32/propsheet.c | 84 ++-- reactos/dll/win32/comctl32/rebar.c | 217 ++++++++-- reactos/dll/win32/comctl32/rsrc.rc | 16 +- reactos/dll/win32/comctl32/status.c | 5 +- reactos/dll/win32/comctl32/tab.c | 55 ++- reactos/dll/win32/comctl32/toolbar.c | 30 +- reactos/dll/win32/comctl32/tooltips.c | 55 ++- reactos/dll/win32/comctl32/treeview.c | 205 +++++---- reactos/media/doc/README.WINE | 2 +- 50 files changed, 1230 insertions(+), 1407 deletions(-) create mode 100644 reactos/dll/win32/comctl32/comctl_Eo.rc create mode 100644 reactos/dll/win32/comctl32/comctl_He.rc diff --git a/reactos/dll/win32/comctl32/comboex.c b/reactos/dll/win32/comctl32/comboex.c index 4b5e079ac99..10d8b8727b8 100644 --- a/reactos/dll/win32/comctl32/comboex.c +++ b/reactos/dll/win32/comctl32/comboex.c @@ -431,18 +431,13 @@ static void COMBOEX_ReSize (const COMBOEX_INFO *infoPtr) if (infoPtr->hwndCombo) { SendMessageW (infoPtr->hwndCombo, CB_SETITEMHEIGHT, 0, cy); if ( !(infoPtr->flags & CBES_EX_NOSIZELIMIT)) { - RECT comboRect; - if (GetWindowRect(infoPtr->hwndCombo, &comboRect)) { - RECT ourRect; - if (GetWindowRect(infoPtr->hwndSelf, &ourRect)) { - if (comboRect.bottom > ourRect.bottom) { - POINT pt = { ourRect.left, ourRect.top }; - if (ScreenToClient(infoPtr->hwndSelf, &pt)) - MoveWindow( infoPtr->hwndSelf, pt.x, pt.y, ourRect.right - ourRect.left, - comboRect.bottom - comboRect.top, FALSE); - } - } - } + RECT comboRect, ourRect; + GetWindowRect(infoPtr->hwndCombo, &comboRect); + GetWindowRect(infoPtr->hwndSelf, &ourRect); + if (comboRect.bottom > ourRect.bottom) + SetWindowPos( infoPtr->hwndSelf, 0, 0, 0, ourRect.right - ourRect.left, + comboRect.bottom - comboRect.top, + SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOREDRAW ); } } } @@ -758,7 +753,7 @@ static HIMAGELIST COMBOEX_SetImageList (COMBOEX_INFO *infoPtr, HIMAGELIST himl) return himlTemp; } -static BOOL COMBOEX_SetItemW (const COMBOEX_INFO *infoPtr, COMBOBOXEXITEMW *cit) +static BOOL COMBOEX_SetItemW (const COMBOEX_INFO *infoPtr, const COMBOBOXEXITEMW *cit) { INT_PTR index = cit->iItem; CBE_ITEMDATA *item; @@ -1698,7 +1693,7 @@ static LRESULT COMBOEX_WindowPosChanging (const COMBOEX_INFO *infoPtr, WINDOWPOS height = (cb_wrect.bottom-cb_wrect.top) + (cbx_wrect.bottom-cbx_wrect.top) - (cbx_crect.bottom-cbx_crect.top); - if (wp->cy < height) wp->cy = height; + wp->cy = height; if (infoPtr->hwndEdit) { COMBOEX_AdjustEditPos (infoPtr); InvalidateRect (infoPtr->hwndCombo, 0, TRUE); diff --git a/reactos/dll/win32/comctl32/comctl32.h b/reactos/dll/win32/comctl32/comctl32.h index 3d172ae7605..401468883fd 100644 --- a/reactos/dll/win32/comctl32/comctl32.h +++ b/reactos/dll/win32/comctl32/comctl32.h @@ -101,16 +101,15 @@ extern HBRUSH COMCTL32_hPattern55AABrush; #define IDT_CHECK 401 -/* Header cursors */ +/* Cursors */ +#define IDC_MOVEBUTTON 102 +#define IDC_COPY 104 #define IDC_DIVIDER 106 #define IDC_DIVIDEROPEN 107 /* DragList resources */ #define IDI_DRAGARROW 501 -#define IDC_COPY 502 - -#define IDC_MOVEBUTTON 1 /* HOTKEY internal strings */ #define HKY_NONE 2048 diff --git a/reactos/dll/win32/comctl32/comctl32.spec b/reactos/dll/win32/comctl32/comctl32.spec index 60378c28513..1654d3ec903 100644 --- a/reactos/dll/win32/comctl32/comctl32.spec +++ b/reactos/dll/win32/comctl32/comctl32.spec @@ -38,27 +38,27 @@ 234 stdcall -noname Str_SetPtrA(str str) 235 stdcall -noname Str_GetPtrW(wstr wstr long) 236 stdcall -noname Str_SetPtrW(wstr wstr) -320 stdcall -noname DSA_Create(long long) -321 stdcall -noname DSA_Destroy(ptr) -322 stdcall -noname DSA_GetItem(ptr long long) -323 stdcall -noname DSA_GetItemPtr(ptr long) -324 stdcall -noname DSA_InsertItem(ptr long long) -325 stdcall -noname DSA_SetItem (ptr long long) -326 stdcall -noname DSA_DeleteItem(ptr long) -327 stdcall -noname DSA_DeleteAllItems(ptr) -328 stdcall -noname DPA_Create(long) -329 stdcall -noname DPA_Destroy(ptr) -330 stdcall -noname DPA_Grow(ptr long) -331 stdcall -noname DPA_Clone(ptr ptr) -332 stdcall -noname DPA_GetPtr(ptr long) -333 stdcall -noname DPA_GetPtrIndex(ptr ptr) -334 stdcall -noname DPA_InsertPtr(ptr long ptr) -335 stdcall -noname DPA_SetPtr(ptr long ptr) -336 stdcall -noname DPA_DeletePtr(ptr long) -337 stdcall -noname DPA_DeleteAllPtrs(ptr) -338 stdcall -noname DPA_Sort(ptr ptr long) -339 stdcall -noname DPA_Search(ptr ptr long ptr long long) -340 stdcall -noname DPA_CreateEx(long long) +320 stdcall -ordinal DSA_Create(long long) +321 stdcall -ordinal DSA_Destroy(ptr) +322 stdcall -ordinal DSA_GetItem(ptr long long) +323 stdcall -ordinal DSA_GetItemPtr(ptr long) +324 stdcall -ordinal DSA_InsertItem(ptr long long) +325 stdcall -ordinal DSA_SetItem (ptr long long) +326 stdcall -ordinal DSA_DeleteItem(ptr long) +327 stdcall -ordinal DSA_DeleteAllItems(ptr) +328 stdcall -ordinal DPA_Create(long) +329 stdcall -ordinal DPA_Destroy(ptr) +330 stdcall -ordinal DPA_Grow(ptr long) +331 stdcall -ordinal DPA_Clone(ptr ptr) +332 stdcall -ordinal DPA_GetPtr(ptr long) +333 stdcall -ordinal DPA_GetPtrIndex(ptr ptr) +334 stdcall -ordinal DPA_InsertPtr(ptr long ptr) +335 stdcall -ordinal DPA_SetPtr(ptr long ptr) +336 stdcall -ordinal DPA_DeletePtr(ptr long) +337 stdcall -ordinal DPA_DeleteAllPtrs(ptr) +338 stdcall -ordinal DPA_Sort(ptr ptr long) +339 stdcall -ordinal DPA_Search(ptr ptr long ptr long long) +340 stdcall -ordinal DPA_CreateEx(long long) 341 stdcall -noname SendNotify(long long long ptr) 342 stdcall -noname SendNotifyEx(long long long ptr long) 350 stdcall -noname StrChrA(str str) @@ -90,16 +90,16 @@ 382 stdcall -noname SmoothScrollWindow(ptr) 383 stdcall -noname DoReaderMode(ptr) 384 stdcall -noname SetPathWordBreakProc(ptr long) -385 stdcall -noname DPA_EnumCallback(long long long) -386 stdcall -noname DPA_DestroyCallback(ptr ptr long) -387 stdcall -noname DSA_EnumCallback(ptr ptr long) -388 stdcall -noname DSA_DestroyCallback(ptr ptr long) +385 stdcall -ordinal DPA_EnumCallback(long long long) +386 stdcall -ordinal DPA_DestroyCallback(ptr ptr long) +387 stdcall -ordinal DSA_EnumCallback(ptr ptr long) +388 stdcall -ordinal DSA_DestroyCallback(ptr ptr long) 389 stdcall -noname comctl32_389(long long) 390 stdcall -noname ImageList_SetColorTable(ptr long long ptr) -400 stdcall -noname CreateMRUListW(ptr) -401 stdcall -noname AddMRUStringW(long wstr) +400 stdcall -ordinal CreateMRUListW(ptr) +401 stdcall -ordinal AddMRUStringW(long wstr) 402 stdcall -noname FindMRUStringW(long wstr ptr) -403 stdcall -noname EnumMRUListW(long long ptr long) +403 stdcall -ordinal EnumMRUListW(long long ptr long) 404 stdcall -noname CreateMRUListLazyW(ptr long long long) 410 stdcall -ordinal SetWindowSubclass(long ptr long long) 411 stdcall -ordinal GetWindowSubclass(long ptr long ptr) @@ -188,5 +188,6 @@ @ stdcall PropertySheet(ptr) PropertySheetA @ stdcall PropertySheetA(ptr) @ stdcall PropertySheetW(ptr) +@ stdcall TaskDialogIndirect(ptr ptr ptr ptr) @ stdcall UninitializeFlatSB(long) @ stdcall _TrackMouseEvent(ptr) diff --git a/reactos/dll/win32/comctl32/comctl_Bg.rc b/reactos/dll/win32/comctl32/comctl_Bg.rc index a45bcd16f29..f44eda499fd 100644 --- a/reactos/dll/win32/comctl32/comctl_Bg.rc +++ b/reactos/dll/win32/comctl32/comctl_Bg.rc @@ -68,24 +68,3 @@ BEGIN LTEXT "& :", -1,192,5,78,10 /* 182 -> 192 ? */ LISTBOX IDC_TOOLBARBTN_LBOX, 192,17,120,100,LBS_NOTIFY | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP /* 182 -> 192 ? */ END - -STRINGTABLE -{ - IDS_CLOSE "" -} - -STRINGTABLE -{ - IDM_TODAY ":" - IDM_GOTODAY " " -} - -STRINGTABLE -{ - IDS_SEPARATOR "" -} - -STRINGTABLE -{ - HKY_NONE "" -} diff --git a/reactos/dll/win32/comctl32/comctl_Cs.rc b/reactos/dll/win32/comctl32/comctl_Cs.rc index d993c713a29..e75138f33ce 100644 --- a/reactos/dll/win32/comctl32/comctl_Cs.rc +++ b/reactos/dll/win32/comctl32/comctl_Cs.rc @@ -72,24 +72,3 @@ BEGIN LTEXT "&Tlatka panelu:", -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 -{ - IDS_CLOSE "Zavt" -} - -STRINGTABLE -{ - IDM_TODAY "Dnes:" - IDM_GOTODAY "Jdi na dneek" -} - -STRINGTABLE -{ - IDS_SEPARATOR "Oddlova" -} - -STRINGTABLE -{ - HKY_NONE "dn" -} diff --git a/reactos/dll/win32/comctl32/comctl_Da.rc b/reactos/dll/win32/comctl32/comctl_Da.rc index 0dc1068f83b..f49b522705f 100644 --- a/reactos/dll/win32/comctl32/comctl_Da.rc +++ b/reactos/dll/win32/comctl32/comctl_Da.rc @@ -69,24 +69,3 @@ BEGIN LTEXT "&Værktøjs knapper:", -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 -{ - IDS_CLOSE "Luk" -} - -STRINGTABLE -{ - IDM_TODAY "Idag:" - IDM_GOTODAY "Gå til i dag" -} - -STRINGTABLE -{ - IDS_SEPARATOR "Separator" -} - -STRINGTABLE -{ - HKY_NONE "Ingen" -} diff --git a/reactos/dll/win32/comctl32/comctl_De.rc b/reactos/dll/win32/comctl32/comctl_De.rc index afb2a844c1e..455fd458a1d 100644 --- a/reactos/dll/win32/comctl32/comctl_De.rc +++ b/reactos/dll/win32/comctl32/comctl_De.rc @@ -22,27 +22,6 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL -STRINGTABLE -{ - IDS_CLOSE "Schließen" -} - -STRINGTABLE -{ - IDM_TODAY "Heute:" - IDM_GOTODAY "Gehe zu Heute" -} - -STRINGTABLE -{ - IDS_SEPARATOR "Trennzeichen" -} - -STRINGTABLE -{ - HKY_NONE "Keiner" -} - IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE CAPTION "Eigenschaften für %s" diff --git a/reactos/dll/win32/comctl32/comctl_El.rc b/reactos/dll/win32/comctl32/comctl_El.rc index 284b3a287c4..d0227dd9ca5 100644 --- a/reactos/dll/win32/comctl32/comctl_El.rc +++ b/reactos/dll/win32/comctl32/comctl_El.rc @@ -66,24 +66,3 @@ BEGIN 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 -{ - IDS_CLOSE "" -} - -STRINGTABLE -{ - IDM_TODAY ":" - IDM_GOTODAY " " -} - -STRINGTABLE -{ - IDS_SEPARATOR "" -} - -STRINGTABLE -{ - HKY_NONE "" -} diff --git a/reactos/dll/win32/comctl32/comctl_En.rc b/reactos/dll/win32/comctl32/comctl_En.rc index c7ddc7a15c8..c9bd6849f85 100644 --- a/reactos/dll/win32/comctl32/comctl_En.rc +++ b/reactos/dll/win32/comctl32/comctl_En.rc @@ -66,24 +66,3 @@ BEGIN LTEXT "&Toolbar buttons:", -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 -{ - IDS_CLOSE "Close" -} - -STRINGTABLE -{ - IDM_TODAY "Today:" - IDM_GOTODAY "Go to today" -} - -STRINGTABLE -{ - IDS_SEPARATOR "Separator" -} - -STRINGTABLE -{ - HKY_NONE "None" -} diff --git a/reactos/dll/win32/comctl32/comctl_Eo.rc b/reactos/dll/win32/comctl32/comctl_Eo.rc new file mode 100644 index 00000000000..5d627aa2f3a --- /dev/null +++ b/reactos/dll/win32/comctl32/comctl_Eo.rc @@ -0,0 +1,68 @@ +/* Esperanto Language Support + * Copyright 2006 Antonio Codazzi + * + * 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 "comctl32.h" + +LANGUAGE LANG_ESPERANTO, SUBLANG_DEFAULT + +IDD_PROPSHEET DIALOG 0, 0, 220, 140 +STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE +CAPTION "Ecoj la %s" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Bone", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP + PUSHBUTTON "Rezigni", IDCANCEL,58,122,50,14 + PUSHBUTTON "&Apliku", IDC_APPLY_BUTTON,112,122,50,14,WS_DISABLED + PUSHBUTTON "Helpo", IDHELP,166,122,50,14,WS_TABSTOP|WS_GROUP + CONTROL "Langeto", IDC_TABCONTROL,"SysTabControl32",WS_CLIPSIBLINGS|WS_GROUP|WS_TABSTOP|TCS_MULTILINE,4,4,212,114 +END + + +IDD_WIZARD DIALOG 0, 0, 290, 159 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE +CAPTION "Estrita Proceduro" +FONT 8, "MS Shell Dlg" +BEGIN + PUSHBUTTON "< &Retro", IDC_BACK_BUTTON,71,138,50,14 + DEFPUSHBUTTON "&Antaen >", IDC_NEXT_BUTTON,121,138,50,14 + DEFPUSHBUTTON "Konkludi", IDC_FINISH_BUTTON,121,138,50,14 + PUSHBUTTON "Rezigni", IDCANCEL,178,138,50,14 + PUSHBUTTON "Helpo", IDHELP,235,138,50,14,WS_GROUP + LTEXT "", IDC_SUNKEN_LINE,7,129,278,1,SS_SUNKEN + CONTROL "Langeto", 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 +END + + +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Agordu stangon de la iloj" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Fermu", IDCANCEL,308,6,44,14 + PUSHBUTTON "R&ee agordu", IDC_RESET_BTN,308,23,44,14 + PUSHBUTTON "&Helpo", IDC_HELP_BTN,308,40,44,14 + PUSHBUTTON "&Supre forovu", IDC_MOVEUP_BTN,308,74,44,14 + PUSHBUTTON "Su&be forovu", IDC_MOVEDN_BTN,308,91,44,14 + LTEXT "&Disponeblaj butonoj:", -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 "&Aldonu ->", IDOK, 131, 42, 44, 14 + PUSHBUTTON "<- &Forigu", IDC_REMOVE_BTN,131,62,44,14 + LTEXT "Butonoj por stango de la &iloj", -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 diff --git a/reactos/dll/win32/comctl32/comctl_Es.rc b/reactos/dll/win32/comctl32/comctl_Es.rc index 34e6f6c0a5d..e026f54cb03 100644 --- a/reactos/dll/win32/comctl32/comctl_Es.rc +++ b/reactos/dll/win32/comctl32/comctl_Es.rc @@ -66,24 +66,3 @@ BEGIN LTEXT "B&otones de la barra:", -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 -{ - IDS_CLOSE "Cerrar" -} - -STRINGTABLE -{ - IDM_TODAY "Hoy:" - IDM_GOTODAY "Ir a hoy" -} - -STRINGTABLE -{ - IDS_SEPARATOR "Separador" -} - -STRINGTABLE -{ - HKY_NONE "Ninguno" -} diff --git a/reactos/dll/win32/comctl32/comctl_Fr.rc b/reactos/dll/win32/comctl32/comctl_Fr.rc index fd8aa10eb49..bab9a31b5a8 100644 --- a/reactos/dll/win32/comctl32/comctl_Fr.rc +++ b/reactos/dll/win32/comctl32/comctl_Fr.rc @@ -73,24 +73,3 @@ BEGIN LTEXT "&Boutons de la barre d'outils :", -1,182,5,93,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 -{ - IDS_CLOSE "Fermer" -} - -STRINGTABLE -{ - IDM_TODAY "Aujourd'hui :" - IDM_GOTODAY "Aller à aujourd'hui" -} - -STRINGTABLE -{ - IDS_SEPARATOR "Séparateur" -} - -STRINGTABLE -{ - HKY_NONE "Aucun" -} diff --git a/reactos/dll/win32/comctl32/comctl_He.rc b/reactos/dll/win32/comctl32/comctl_He.rc new file mode 100644 index 00000000000..cc052615732 --- /dev/null +++ b/reactos/dll/win32/comctl32/comctl_He.rc @@ -0,0 +1,74 @@ +/* + * Copyright 1999 Eric Kohl + * Copyright 2010 Yaron shahrabani + * + * 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 "comctl32.h" + +#pragma code_page(65001) + +LANGUAGE LANG_HEBREW, SUBLANG_DEFAULT + +IDD_PROPSHEET DIALOG 0, 0, 220, 140 +STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE +EXSTYLE WS_EX_LAYOUTRTL +CAPTION "המאפיינים של %s" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "אישור", 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 + CONTROL "Tab", IDC_TABCONTROL,"SysTabControl32",WS_CLIPSIBLINGS|WS_GROUP|WS_TABSTOP|TCS_MULTILINE,4,4,212,114 +END + + +IDD_WIZARD DIALOG 0, 0, 290, 159 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE +EXSTYLE WS_EX_LAYOUTRTL +CAPTION "Wizard" +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 + 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 +END + + +IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_LAYOUTRTL +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 + 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 + 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 diff --git a/reactos/dll/win32/comctl32/comctl_Hu.rc b/reactos/dll/win32/comctl32/comctl_Hu.rc index 87183c4038a..176e0d8731c 100644 --- a/reactos/dll/win32/comctl32/comctl_Hu.rc +++ b/reactos/dll/win32/comctl32/comctl_Hu.rc @@ -66,24 +66,3 @@ BEGIN LTEXT "E&szkztr gombok:", -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 -{ - IDS_CLOSE "Bezrs" -} - -STRINGTABLE -{ - IDM_TODAY "Ma:" - IDM_GOTODAY "Ugrs mra" -} - -STRINGTABLE -{ - IDS_SEPARATOR "Elvlaszt" -} - -STRINGTABLE -{ - HKY_NONE "Nincs" -} diff --git a/reactos/dll/win32/comctl32/comctl_It.rc b/reactos/dll/win32/comctl32/comctl_It.rc index 8253dab38ce..d6c7fad3d53 100644 --- a/reactos/dll/win32/comctl32/comctl_It.rc +++ b/reactos/dll/win32/comctl32/comctl_It.rc @@ -19,11 +19,14 @@ #include "comctl32.h" +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE -CAPTION "Propriet per %s" +CAPTION "Proprietà per %s" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP @@ -57,34 +60,13 @@ FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Chiudi", IDCANCEL,308,6,44,14 PUSHBUTTON "R&eimpostare", IDC_RESET_BTN,308,23,44,14 - PUSHBUTTON "&Aiuto", IDC_HELP_BTN,308,40,44,14 - PUSHBUTTON "Muovi &Su", IDC_MOVEUP_BTN,308,74,44,14 - PUSHBUTTON "Muovi &Gi", IDC_MOVEDN_BTN,308,91,44,14 + PUSHBUTTON "A&iuto", IDC_HELP_BTN,308,40,44,14 + PUSHBUTTON "Muovi &su", IDC_MOVEUP_BTN,308,74,44,14 + PUSHBUTTON "Muovi &giù", IDC_MOVEDN_BTN,308,91,44,14 LTEXT "&Tasti disponibili:", -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 "&Aggiungi ->", IDOK, 131, 42, 44, 14 PUSHBUTTON "<- &Rimuovi", IDC_REMOVE_BTN,131,62,44,14 - LTEXT "&Tasti della barra degli strumenti:", -1,182,5,78,10 + LTEXT "Tasti della &barra degli strumenti:", -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 -{ - IDS_CLOSE "Chiudi" -} - -STRINGTABLE -{ - IDM_TODAY "Oggi:" - IDM_GOTODAY "Vai a oggi" -} - -STRINGTABLE -{ - IDS_SEPARATOR "Separatore" -} - -STRINGTABLE -{ - HKY_NONE "Nessuno" -} diff --git a/reactos/dll/win32/comctl32/comctl_Ja.rc b/reactos/dll/win32/comctl32/comctl_Ja.rc index 156a00f60d0..c426497b5a2 100644 --- a/reactos/dll/win32/comctl32/comctl_Ja.rc +++ b/reactos/dll/win32/comctl32/comctl_Ja.rc @@ -69,24 +69,3 @@ BEGIN LTEXT "ツールバーのボタン(&T):", -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 -{ - IDS_CLOSE "閉じる" -} - -STRINGTABLE -{ - IDM_TODAY "今日:" - IDM_GOTODAY "今日へ移動" -} - -STRINGTABLE -{ - IDS_SEPARATOR "区切り" -} - -STRINGTABLE -{ - HKY_NONE "なし" -} diff --git a/reactos/dll/win32/comctl32/comctl_Ko.rc b/reactos/dll/win32/comctl32/comctl_Ko.rc index 31c625263bc..900663a325f 100644 --- a/reactos/dll/win32/comctl32/comctl_Ko.rc +++ b/reactos/dll/win32/comctl32/comctl_Ko.rc @@ -19,72 +19,53 @@ #include "comctl32.h" +#pragma code_page(65001) + LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE -CAPTION "%s Ӽ" +CAPTION "%s 속성" FONT 9, "MS Shell Dlg" BEGIN - DEFPUSHBUTTON "Ȯ", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP - PUSHBUTTON "", IDCANCEL,58,122,50,14 - PUSHBUTTON "(&A)", IDC_APPLY_BUTTON,112,122,50,14,WS_DISABLED - PUSHBUTTON "", IDHELP,166,122,50,14,WS_TABSTOP|WS_GROUP - CONTROL "", IDC_TABCONTROL,"SysTabControl32",WS_CLIPSIBLINGS|WS_GROUP|WS_TABSTOP|TCS_MULTILINE,4,4,212,114 + DEFPUSHBUTTON "확인", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP + PUSHBUTTON "취소", IDCANCEL,58,122,50,14 + PUSHBUTTON "적용(&A)", IDC_APPLY_BUTTON,112,122,50,14,WS_DISABLED + PUSHBUTTON "도움말", IDHELP,166,122,50,14,WS_TABSTOP|WS_GROUP + CONTROL "탭", IDC_TABCONTROL,"SysTabControl32",WS_CLIPSIBLINGS|WS_GROUP|WS_TABSTOP|TCS_MULTILINE,4,4,212,114 END IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE -CAPTION "" +CAPTION "마법사" FONT 9, "MS Shell Dlg" BEGIN - PUSHBUTTON "< (&B)", IDC_BACK_BUTTON,71,138,50,14 - DEFPUSHBUTTON "(&N) >", 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 "< 이전(&B)", IDC_BACK_BUTTON,71,138,50,14 + DEFPUSHBUTTON "다음(&N) >", 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 "", IDC_TABCONTROL,"SysTabControl32",WS_CLIPSIBLINGS | WS_DISABLED,7,7,258,5 + CONTROL "탭", 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 END IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION " " +CAPTION "도구바 사용자 정의" FONT 9, "MS Shell Dlg" BEGIN - DEFPUSHBUTTON "ݱ(&C)", IDCANCEL,308,6,44,14 - PUSHBUTTON "缳(&E)", IDC_RESET_BTN,308,23,44,14 - PUSHBUTTON "(&H)", IDC_HELP_BTN,308,40,44,14 - PUSHBUTTON " ̵(&U)", IDC_MOVEUP_BTN,308,74,44,14 - PUSHBUTTON "Ʒ ̵(&D)", IDC_MOVEDN_BTN,308,91,49,14 - LTEXT " ư(&V)", -1,4,5,84,10 + DEFPUSHBUTTON "닫기(&C)", IDCANCEL,308,6,44,14 + PUSHBUTTON "재설정(&E)", IDC_RESET_BTN,308,23,44,14 + PUSHBUTTON "도움말(&H)", IDC_HELP_BTN,308,40,44,14 + PUSHBUTTON "위로 이동(&U)", IDC_MOVEUP_BTN,308,74,44,14 + PUSHBUTTON "아래로 이동(&D)", IDC_MOVEDN_BTN,308,91,49,14 + LTEXT "가능한 버튼(&V)", -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 "ϱ(&A) ->", IDOK, 131, 42, 44, 14 - PUSHBUTTON "<-(&R)", IDC_REMOVE_BTN,131,62,44,14 - LTEXT " ư(&T):", -1,182,5,78,10 + PUSHBUTTON "더하기(&A) ->", IDOK, 131, 42, 44, 14 + PUSHBUTTON "<-지우기(&R)", IDC_REMOVE_BTN,131,62,44,14 + LTEXT "도구바 버튼(&T):", -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 -{ - IDS_CLOSE "ݱ" -} - -STRINGTABLE -{ - IDM_TODAY ":" - IDM_GOTODAY "÷ " -} - -STRINGTABLE -{ - IDS_SEPARATOR "и" -} - -STRINGTABLE -{ - HKY_NONE "" -} diff --git a/reactos/dll/win32/comctl32/comctl_Lt.rc b/reactos/dll/win32/comctl32/comctl_Lt.rc index b723d223155..ea1dc21e68a 100644 --- a/reactos/dll/win32/comctl32/comctl_Lt.rc +++ b/reactos/dll/win32/comctl32/comctl_Lt.rc @@ -69,24 +69,3 @@ BEGIN LTEXT "&Mygtukų juostos turinys:", -1,182,5,84,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 -{ - IDS_CLOSE "Užverti" -} - -STRINGTABLE -{ - IDM_TODAY "Šiandien:" - IDM_GOTODAY "Eiti į šiandien" -} - -STRINGTABLE -{ - IDS_SEPARATOR "Skirtukas" -} - -STRINGTABLE -{ - HKY_NONE "Joks" -} diff --git a/reactos/dll/win32/comctl32/comctl_Nl.rc b/reactos/dll/win32/comctl32/comctl_Nl.rc index 5e94680a2de..46d155f4fd4 100644 --- a/reactos/dll/win32/comctl32/comctl_Nl.rc +++ b/reactos/dll/win32/comctl32/comctl_Nl.rc @@ -68,24 +68,3 @@ BEGIN LTEXT "&Knoppen:", -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 -{ - IDS_CLOSE "Sluiten" -} - -STRINGTABLE -{ - IDM_TODAY "Vandaag:" - IDM_GOTODAY "Ga naar vandaag" -} - -STRINGTABLE -{ - IDS_SEPARATOR "Scheidingsteken" -} - -STRINGTABLE -{ - HKY_NONE "Geen" -} diff --git a/reactos/dll/win32/comctl32/comctl_No.rc b/reactos/dll/win32/comctl32/comctl_No.rc index ada1a47c4ca..770e57914d5 100644 --- a/reactos/dll/win32/comctl32/comctl_No.rc +++ b/reactos/dll/win32/comctl32/comctl_No.rc @@ -40,7 +40,7 @@ FONT 8, "MS Shell Dlg" BEGIN PUSHBUTTON "< Til&bake", IDC_BACK_BUTTON,71,138,50,14 DEFPUSHBUTTON "&Neste >", IDC_NEXT_BUTTON,121,138,50,14 - DEFPUSHBUTTON "Fullfr", IDC_FINISH_BUTTON,121,138,50,14 + DEFPUSHBUTTON "Fullfr", IDC_FINISH_BUTTON,121,138,50,14 PUSHBUTTON "Avbryt", IDCANCEL,178,138,50,14 PUSHBUTTON "Hjelp", IDHELP,235,138,50,14,WS_GROUP LTEXT "", IDC_SUNKEN_LINE,7,129,278,1,SS_SUNKEN @@ -51,7 +51,7 @@ END IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Tilpass verktylinje" +CAPTION "Tilpass verktylinje" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Lukk", IDCANCEL,308,6,44,14 @@ -63,27 +63,6 @@ BEGIN 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 "Le&gg til ->", IDOK, 131, 42, 44, 14 PUSHBUTTON "<- Fje&rn", IDC_REMOVE_BTN,131,62,44,14 - LTEXT "Verk&tylinje-knapper:", -1,182,5,78,10 + LTEXT "Verk&tylinje-knapper:", -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 -{ - IDS_CLOSE "Lukk" -} - -STRINGTABLE -{ - IDM_TODAY "Idag:" - IDM_GOTODAY "G til idag" -} - -STRINGTABLE -{ - IDS_SEPARATOR "Adskiller" -} - -STRINGTABLE -{ - HKY_NONE "Ingen" -} diff --git a/reactos/dll/win32/comctl32/comctl_Pl.rc b/reactos/dll/win32/comctl32/comctl_Pl.rc index f3317e00e27..4da65f15ba5 100644 --- a/reactos/dll/win32/comctl32/comctl_Pl.rc +++ b/reactos/dll/win32/comctl32/comctl_Pl.rc @@ -23,7 +23,7 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE -CAPTION "Waciwoci %s" +CAPTION "Waciwoci %s" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "OK", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP @@ -41,7 +41,7 @@ FONT 8, "MS Shell Dlg" BEGIN PUSHBUTTON "< &Wstecz", IDC_BACK_BUTTON,71,138,50,14 DEFPUSHBUTTON "&Dalej >", IDC_NEXT_BUTTON,121,138,50,14 - DEFPUSHBUTTON "Zakocz", IDC_FINISH_BUTTON,121,138,50,14 + DEFPUSHBUTTON "Zakocz", IDC_FINISH_BUTTON,121,138,50,14 PUSHBUTTON "Anuluj", IDCANCEL,178,138,50,14 PUSHBUTTON "Pomoc", IDHELP,235,138,50,14,WS_GROUP LTEXT "", IDC_SUNKEN_LINE,7,129,278,1,SS_SUNKEN @@ -67,24 +67,3 @@ BEGIN LTEXT "&Przyciski paska narzdzi:", -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 -{ - IDS_CLOSE "Zamknij" -} - -STRINGTABLE -{ - IDM_TODAY "Dzi:" - IDM_GOTODAY "Id do dzi" -} - -STRINGTABLE -{ - IDS_SEPARATOR "Odstp" -} - -STRINGTABLE -{ - HKY_NONE "Brak" -} diff --git a/reactos/dll/win32/comctl32/comctl_Pt.rc b/reactos/dll/win32/comctl32/comctl_Pt.rc index ca60a59f130..70dd367cd03 100644 --- a/reactos/dll/win32/comctl32/comctl_Pt.rc +++ b/reactos/dll/win32/comctl32/comctl_Pt.rc @@ -68,24 +68,3 @@ BEGIN LTEXT "&Botões da barra de ferramentas:", -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 -{ - IDS_CLOSE "Fechar" -} - -STRINGTABLE -{ - IDM_TODAY "Hoje:" - IDM_GOTODAY "Ir para hoje" -} - -STRINGTABLE -{ - IDS_SEPARATOR "Separador" -} - -STRINGTABLE -{ - HKY_NONE "Nenhum" -} diff --git a/reactos/dll/win32/comctl32/comctl_Ro.rc b/reactos/dll/win32/comctl32/comctl_Ro.rc index fd6b1161ec8..ab2873f4a60 100644 --- a/reactos/dll/win32/comctl32/comctl_Ro.rc +++ b/reactos/dll/win32/comctl32/comctl_Ro.rc @@ -69,24 +69,3 @@ BEGIN LTEXT "Butoane &toolbar:", -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 -{ - IDS_CLOSE "Închide" -} - -STRINGTABLE -{ - IDM_TODAY "Azi:" - IDM_GOTODAY "Mergi la Azi" -} - -STRINGTABLE -{ - IDS_SEPARATOR "Separator" -} - -STRINGTABLE -{ - HKY_NONE "Nimic" -} diff --git a/reactos/dll/win32/comctl32/comctl_Ru.rc b/reactos/dll/win32/comctl32/comctl_Ru.rc index ce330609db4..c75fb0d5af8 100644 --- a/reactos/dll/win32/comctl32/comctl_Ru.rc +++ b/reactos/dll/win32/comctl32/comctl_Ru.rc @@ -71,24 +71,3 @@ BEGIN 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 -{ - IDS_CLOSE "Закрыть" -} - -STRINGTABLE -{ - IDM_TODAY "Сегодня:" - IDM_GOTODAY "Текущая дата" -} - -STRINGTABLE -{ - IDS_SEPARATOR "Разделитель" -} - -STRINGTABLE -{ - HKY_NONE "Нет" -} diff --git a/reactos/dll/win32/comctl32/comctl_Si.rc b/reactos/dll/win32/comctl32/comctl_Si.rc index 9d1b1f22a62..dca3143390f 100644 --- a/reactos/dll/win32/comctl32/comctl_Si.rc +++ b/reactos/dll/win32/comctl32/comctl_Si.rc @@ -68,24 +68,3 @@ BEGIN LTEXT "G&umbi orodne vrstice:", -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 -{ - IDS_CLOSE "Zapri" -} - -STRINGTABLE -{ - IDM_TODAY "Danes:" - IDM_GOTODAY "Pojdi na danes" -} - -STRINGTABLE -{ - IDS_SEPARATOR "Ločilo" -} - -STRINGTABLE -{ - HKY_NONE "Brez" -} diff --git a/reactos/dll/win32/comctl32/comctl_Sk.rc b/reactos/dll/win32/comctl32/comctl_Sk.rc index 4acd84c5ac5..94cc7e937ec 100644 --- a/reactos/dll/win32/comctl32/comctl_Sk.rc +++ b/reactos/dll/win32/comctl32/comctl_Sk.rc @@ -69,24 +69,3 @@ BEGIN LTEXT "&Tlaidl panela:", -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 -{ - IDS_CLOSE "Zavrie" -} - -STRINGTABLE -{ - IDM_TODAY "Dnes:" - IDM_GOTODAY "Cho na dneok" -} - -STRINGTABLE -{ - IDS_SEPARATOR "Oddeova" -} - -STRINGTABLE -{ - HKY_NONE "iadne" -} diff --git a/reactos/dll/win32/comctl32/comctl_Sr.rc b/reactos/dll/win32/comctl32/comctl_Sr.rc index 8681ecbe629..390556fa8a1 100644 --- a/reactos/dll/win32/comctl32/comctl_Sr.rc +++ b/reactos/dll/win32/comctl32/comctl_Sr.rc @@ -1,6 +1,7 @@ /* * Copyright 2010 Nenad Vujic * Paul Vriens + * Copyright 2010 Đorđe Vasiljević * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -25,138 +26,96 @@ LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_LATIN IDD_PROPSHEET DIALOG 0, 0, 220, 140 STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE -CAPTION "Detalji za %s" +CAPTION "Svojstva za %s" FONT 8, "MS Shell Dlg" BEGIN - DEFPUSHBUTTON "OK", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP + DEFPUSHBUTTON "U redu", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP PUSHBUTTON "Otkaži", IDCANCEL,58,122,50,14 PUSHBUTTON "&Primeni", IDC_APPLY_BUTTON,112,122,50,14,WS_DISABLED PUSHBUTTON "Pomoć", 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 + CONTROL "Jezičak", IDC_TABCONTROL,"SysTabControl32",WS_CLIPSIBLINGS|WS_GROUP|WS_TABSTOP|TCS_MULTILINE,4,4,212,114 END IDD_WIZARD DIALOG 0, 0, 290, 159 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE -CAPTION "Čarobnjak" +CAPTION "Vodič" FONT 8, "MS Shell Dlg" BEGIN PUSHBUTTON "< &Nazad", IDC_BACK_BUTTON,71,138,50,14 - DEFPUSHBUTTON "&Sledeće >", IDC_NEXT_BUTTON,121,138,50,14 - DEFPUSHBUTTON "Završi", IDC_FINISH_BUTTON,121,138,50,14 + DEFPUSHBUTTON "&Napred >", IDC_NEXT_BUTTON,121,138,50,14 + DEFPUSHBUTTON "Kraj", IDC_FINISH_BUTTON,121,138,50,14 PUSHBUTTON "Otkaži", IDCANCEL,178,138,50,14 PUSHBUTTON "Pomoć", 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 + CONTROL "Jezičak", 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 END IDD_TBCUSTOMIZE DIALOG 10, 20, 357, 125 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Podesi Toolbar" +CAPTION "Prilagodi alatnicu" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Zatvori", IDCANCEL,308,6,44,14 - PUSHBUTTON "R&esetuj", IDC_RESET_BTN,308,23,44,14 + PUSHBUTTON "&Poništi", IDC_RESET_BTN,308,23,44,14 PUSHBUTTON "&Pomoć", IDC_HELP_BTN,308,40,44,14 - PUSHBUTTON "Pomeri &Gore", IDC_MOVEUP_BTN,308,74,44,14 - PUSHBUTTON "Pomeri &Dole", IDC_MOVEDN_BTN,308,91,44,14 - LTEXT "D&ostupni tasteri:", -1,4,5,84,10 + PUSHBUTTON "Pomeri na&gore", IDC_MOVEUP_BTN,308,74,44,14 + PUSHBUTTON "Pomeri na&dole", IDC_MOVEDN_BTN,308,91,44,14 + LTEXT "&Dostupni dugmići:", -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 "&Dodaj ->", IDOK, 131, 42, 44, 14 PUSHBUTTON "<- &Ukloni", IDC_REMOVE_BTN,131,62,44,14 - LTEXT "&Toolbar tasteri:", -1,182,5,78,10 + LTEXT "&Dugmići na alatnici:", -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 -{ - IDS_CLOSE "Zatvori" -} - -STRINGTABLE -{ - IDM_TODAY "Danas:" - IDM_GOTODAY "Idi na danas" -} - -STRINGTABLE -{ - IDS_SEPARATOR "Odvajanje" -} - -STRINGTABLE -{ - HKY_NONE "Ništa" -} - LANGUAGE LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC IDD_PROPSHEET DIALOG 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 "ОK", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP + DEFPUSHBUTTON "У реду", 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 - CONTROL "Таб", IDC_TABCONTROL,"SysTabControl32",WS_CLIPSIBLINGS|WS_GROUP|WS_TABSTOP|TCS_MULTILINE,4,4,212,114 + CONTROL "Језичак", IDC_TABCONTROL,"SysTabControl32",WS_CLIPSIBLINGS|WS_GROUP|WS_TABSTOP|TCS_MULTILINE,4,4,212,114 END IDD_WIZARD DIALOG 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 + 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 "Таб", IDC_TABCONTROL,"SysTabControl32",WS_CLIPSIBLINGS | WS_DISABLED,7,7,258,5 + CONTROL "Језичак", 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 END IDD_TBCUSTOMIZE DIALOG 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_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 + 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 + 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 -{ - IDS_CLOSE "Затвори" -} - -STRINGTABLE -{ - IDM_TODAY "Данас:" - IDM_GOTODAY "Иди на данас" -} - -STRINGTABLE -{ - IDS_SEPARATOR "Одвајање" -} - -STRINGTABLE -{ - HKY_NONE "Ништа" -} diff --git a/reactos/dll/win32/comctl32/comctl_Sv.rc b/reactos/dll/win32/comctl32/comctl_Sv.rc index e66b379217d..6dcadaf6867 100644 --- a/reactos/dll/win32/comctl32/comctl_Sv.rc +++ b/reactos/dll/win32/comctl32/comctl_Sv.rc @@ -66,24 +66,3 @@ BEGIN LTEXT "Knappar i v&erktygsfltet:", -1,182,5,85,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 -{ - IDS_CLOSE "Stng" -} - -STRINGTABLE -{ - IDM_TODAY "Idag:" - IDM_GOTODAY "G till idag" -} - -STRINGTABLE -{ - IDS_SEPARATOR "Separator" -} - -STRINGTABLE -{ - HKY_NONE "Ingen" -} diff --git a/reactos/dll/win32/comctl32/comctl_Th.rc b/reactos/dll/win32/comctl32/comctl_Th.rc index 915ecf4df8d..54b63356a05 100644 --- a/reactos/dll/win32/comctl32/comctl_Th.rc +++ b/reactos/dll/win32/comctl32/comctl_Th.rc @@ -66,24 +66,3 @@ BEGIN 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 -{ - IDS_CLOSE "մ" -} - -STRINGTABLE -{ - IDM_TODAY "ѹ:" - IDM_GOTODAY "件֧ѹ" -} - -STRINGTABLE -{ - IDS_SEPARATOR "Separator" -} - -STRINGTABLE -{ - HKY_NONE "" -} diff --git a/reactos/dll/win32/comctl32/comctl_Tr.rc b/reactos/dll/win32/comctl32/comctl_Tr.rc index cda21936f5c..a57ed789721 100644 --- a/reactos/dll/win32/comctl32/comctl_Tr.rc +++ b/reactos/dll/win32/comctl32/comctl_Tr.rc @@ -66,24 +66,3 @@ BEGIN LTEXT "&Ara ubuu butonlar:", -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 -{ - IDS_CLOSE "Kapat" -} - -STRINGTABLE -{ - IDM_TODAY "Bugn:" - IDM_GOTODAY "Bugne git" -} - -STRINGTABLE -{ - IDS_SEPARATOR "Ayra" -} - -STRINGTABLE -{ - HKY_NONE "Hibiri" -} diff --git a/reactos/dll/win32/comctl32/comctl_Uk.rc b/reactos/dll/win32/comctl32/comctl_Uk.rc index 3aa29f024f8..dde83f41c8d 100644 --- a/reactos/dll/win32/comctl32/comctl_Uk.rc +++ b/reactos/dll/win32/comctl32/comctl_Uk.rc @@ -70,24 +70,3 @@ BEGIN 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 -{ - IDS_CLOSE "" -} - -STRINGTABLE -{ - IDM_TODAY ":" - IDM_GOTODAY " " -} - -STRINGTABLE -{ - IDS_SEPARATOR "" -} - -STRINGTABLE -{ - HKY_NONE "" -} diff --git a/reactos/dll/win32/comctl32/comctl_Zh.rc b/reactos/dll/win32/comctl32/comctl_Zh.rc index 63f22e7aa16..8a80817b521 100644 --- a/reactos/dll/win32/comctl32/comctl_Zh.rc +++ b/reactos/dll/win32/comctl32/comctl_Zh.rc @@ -73,27 +73,6 @@ BEGIN 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 -{ - IDS_CLOSE "关闭" -} - -STRINGTABLE -{ - IDM_TODAY "今天:" - IDM_GOTODAY "转到今天" -} - -STRINGTABLE -{ - IDS_SEPARATOR "分隔符" -} - -STRINGTABLE -{ - HKY_NONE "无" -} - LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL IDD_PROPSHEET DIALOG 0, 0, 220, 140 @@ -142,24 +121,3 @@ BEGIN LTEXT "當前工具欄按鈕(&T):", -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 -{ - IDS_CLOSE "關閉" -} - -STRINGTABLE -{ - IDM_TODAY "今天:" - IDM_GOTODAY "轉到今天" -} - -STRINGTABLE -{ - IDS_SEPARATOR "分隔符" -} - -STRINGTABLE -{ - HKY_NONE "無" -} diff --git a/reactos/dll/win32/comctl32/commctrl.c b/reactos/dll/win32/comctl32/commctrl.c index eb0f6b5293e..a82b233c6d6 100644 --- a/reactos/dll/win32/comctl32/commctrl.c +++ b/reactos/dll/win32/comctl32/commctrl.c @@ -1689,3 +1689,17 @@ int WINAPI DrawShadowText(HDC hdc, LPCWSTR pszText, UINT cch, RECT *rect, DWORD crText, crShadow, ixOffset, iyOffset); return DrawTextW(hdc, pszText, cch, rect, DT_LEFT); } + +/*********************************************************************** + * TaskDialogIndirect [COMCTL32.@] + */ +HRESULT WINAPI TaskDialogIndirect(const TASKDIALOGCONFIG *pTaskConfig, int *pnButton, + int *pnRadioButton, BOOL *pfVerificationFlagChecked) +{ + FIXME("%p, %p, %p, %p\n", pTaskConfig, pnButton, pnRadioButton, pfVerificationFlagChecked); + + if (pnButton) *pnButton = IDYES; + if (pnRadioButton) *pnRadioButton = pTaskConfig->nDefaultButton; + if (pfVerificationFlagChecked) *pfVerificationFlagChecked = TRUE; + return S_OK; +} diff --git a/reactos/dll/win32/comctl32/datetime.c b/reactos/dll/win32/comctl32/datetime.c index 24189507d64..1ac6ba7ad36 100644 --- a/reactos/dll/win32/comctl32/datetime.c +++ b/reactos/dll/win32/comctl32/datetime.c @@ -787,6 +787,7 @@ DATETIME_LButtonDown (DATETIME_INFO *infoPtr, INT x, INT y) if (infoPtr->select == DTHT_MCPOPUP) { RECT rcMonthCal; + POINT pos; SendMessageW(infoPtr->hMonthCal, MCM_GETMINREQRECT, 0, (LPARAM)&rcMonthCal); /* FIXME: button actually is only depressed during dropdown of the */ @@ -795,17 +796,16 @@ DATETIME_LButtonDown (DATETIME_INFO *infoPtr, INT x, INT y) /* recalculate the position of the monthcal popup */ if(infoPtr->dwStyle & DTS_RIGHTALIGN) - infoPtr->monthcal_pos.x = infoPtr->calbutton.left - - (rcMonthCal.right - rcMonthCal.left); + pos.x = infoPtr->calbutton.left - (rcMonthCal.right - rcMonthCal.left); else /* FIXME: this should be after the area reserved for the checkbox */ - infoPtr->monthcal_pos.x = infoPtr->rcDraw.left; + pos.x = infoPtr->rcDraw.left; - infoPtr->monthcal_pos.y = infoPtr->rcClient.bottom; - ClientToScreen (infoPtr->hwndSelf, &(infoPtr->monthcal_pos)); - SetWindowPos(infoPtr->hMonthCal, 0, infoPtr->monthcal_pos.x, - infoPtr->monthcal_pos.y, rcMonthCal.right - rcMonthCal.left, - rcMonthCal.bottom - rcMonthCal.top, 0); + pos.y = infoPtr->rcClient.bottom; + OffsetRect( &rcMonthCal, pos.x, pos.y ); + MapWindowPoints( infoPtr->hwndSelf, 0, (POINT *)&rcMonthCal, 2 ); + SetWindowPos(infoPtr->hMonthCal, 0, rcMonthCal.left, rcMonthCal.top, + rcMonthCal.right - rcMonthCal.left, rcMonthCal.bottom - rcMonthCal.top, 0); if(IsWindowVisible(infoPtr->hMonthCal)) { ShowWindow(infoPtr->hMonthCal, SW_HIDE); @@ -1368,7 +1368,7 @@ DATETIME_Destroy (DATETIME_INFO *infoPtr) static INT -DATETIME_GetText (DATETIME_INFO *infoPtr, INT count, LPWSTR dst) +DATETIME_GetText (const DATETIME_INFO *infoPtr, INT count, LPWSTR dst) { WCHAR buf[80]; int i; diff --git a/reactos/dll/win32/comctl32/header.c b/reactos/dll/win32/comctl32/header.c index d916c7297d5..603d0a33e08 100644 --- a/reactos/dll/win32/comctl32/header.c +++ b/reactos/dll/win32/comctl32/header.c @@ -1215,7 +1215,7 @@ HEADER_GetOrderArray(const HEADER_INFO *infoPtr, INT size, LPINT order) /* Returns index of first duplicate 'value' from [0,to) range, or -1 if there isn't any */ -static INT has_duplicate(INT *array, INT to, INT value) +static INT has_duplicate(const INT *array, INT to, INT value) { INT i; for(i = 0; i < to; i++) @@ -1224,7 +1224,7 @@ static INT has_duplicate(INT *array, INT to, INT value) } /* returns next available value from [0,max] not to duplicate in [0,to) */ -static INT get_nextvalue(INT *array, INT to, INT max) +static INT get_nextvalue(const INT *array, INT to, INT max) { INT i; for(i = 0; i < max; i++) diff --git a/reactos/dll/win32/comctl32/imagelist.c b/reactos/dll/win32/comctl32/imagelist.c index 47279c9812a..66cd03d6eb4 100644 --- a/reactos/dll/win32/comctl32/imagelist.c +++ b/reactos/dll/win32/comctl32/imagelist.c @@ -694,6 +694,8 @@ ImageList_Create (INT cx, INT cy, UINT flags, TRACE("(%d %d 0x%x %d %d)\n", cx, cy, flags, cInitial, cGrow); + if (cx <= 0 || cy <= 0) return NULL; + /* Create the IImageList interface for the image list */ if (FAILED(ImageListImpl_CreateInstance(NULL, &IID_IImageList, (void **)&himl))) return NULL; @@ -1519,7 +1521,6 @@ ImageList_Duplicate (HIMAGELIST himlSrc) himlSrc->hdcMask, 0, 0, SRCCOPY); himlDst->cCurImage = himlSrc->cCurImage; - himlDst->cMaxImage = himlSrc->cMaxImage; if (himlSrc->has_alpha && himlDst->has_alpha) memcpy( himlDst->has_alpha, himlSrc->has_alpha, himlDst->cCurImage ); } @@ -1726,15 +1727,13 @@ ImageList_GetIcon (HIMAGELIST himl, INT i, UINT fStyle) BOOL WINAPI ImageList_GetIconSize (HIMAGELIST himl, INT *cx, INT *cy) { - if (!is_valid(himl)) + if (!is_valid(himl) || !cx || !cy) return FALSE; if ((himl->cx <= 0) || (himl->cy <= 0)) return FALSE; - if (cx) - *cx = himl->cx; - if (cy) - *cy = himl->cy; + *cx = himl->cx; + *cy = himl->cy; return TRUE; } @@ -1907,8 +1906,11 @@ ImageList_LoadImageW (HINSTANCE hi, LPCWSTR lpbmp, INT cx, INT cGrow, } if (uType == IMAGE_BITMAP) { - BITMAP bmp; - GetObjectW (handle, sizeof(BITMAP), &bmp); + DIBSECTION dib; + UINT color; + + if (GetObjectW (handle, sizeof(dib), &dib) == sizeof(BITMAP)) color = ILC_COLOR; + else color = dib.dsBm.bmBitsPixel; /* To match windows behavior, if cx is set to zero and the flag DI_DEFAULTSIZE is specified, cx becomes the @@ -1919,13 +1921,12 @@ ImageList_LoadImageW (HINSTANCE hi, LPCWSTR lpbmp, INT cx, INT cGrow, if (uFlags & DI_DEFAULTSIZE) cx = GetSystemMetrics (SM_CXICON); else - cx = bmp.bmHeight; + cx = dib.dsBm.bmHeight; } - nImageCount = bmp.bmWidth / cx; + nImageCount = dib.dsBm.bmWidth / cx; - himl = ImageList_Create (cx, bmp.bmHeight, ILC_MASK | ILC_COLOR, - nImageCount, cGrow); + himl = ImageList_Create (cx, dib.dsBm.bmHeight, ILC_MASK | color, nImageCount, cGrow); if (!himl) { DeleteObject (handle); return NULL; @@ -3298,11 +3299,8 @@ static HRESULT WINAPI ImageListImpl_Draw(IImageList *iface, IMAGELISTDRAWPARAMS *pimldp) { HIMAGELIST This = (HIMAGELIST) iface; - HIMAGELIST old_himl = 0; - int ret = 0; - - if (!pimldp) - return E_FAIL; + HIMAGELIST old_himl; + int ret; /* As far as I can tell, Windows simply ignores the contents of pimldp->himl so we shall simulate the same */ @@ -3312,12 +3310,12 @@ static HRESULT WINAPI ImageListImpl_Draw(IImageList *iface, ret = ImageList_DrawIndirect(pimldp); pimldp->himl = old_himl; - return ret ? S_OK : E_FAIL; + return ret ? S_OK : E_INVALIDARG; } static HRESULT WINAPI ImageListImpl_Remove(IImageList *iface, int i) { - return (ImageList_Remove((HIMAGELIST) iface, i) == 0) ? E_FAIL : S_OK; + return (ImageList_Remove((HIMAGELIST) iface, i) == 0) ? E_INVALIDARG : S_OK; } static HRESULT WINAPI ImageListImpl_GetIcon(IImageList *iface, int i, UINT flags, @@ -3368,15 +3366,14 @@ static HRESULT WINAPI ImageListImpl_Copy(IImageList *iface, int iDst, } static HRESULT WINAPI ImageListImpl_Merge(IImageList *iface, int i1, - IUnknown *punk2, int i2, int dx, int dy, REFIID riid, PVOID *ppv) + IUnknown *punk2, int i2, int dx, int dy, REFIID riid, void **ppv) { HIMAGELIST This = (HIMAGELIST) iface; IImageList *iml2 = NULL; HIMAGELIST hNew; HRESULT ret = E_FAIL; - if (!punk2 || !ppv) - return E_FAIL; + TRACE("(%p)->(%d %p %d %d %d %s %p)\n", iface, i1, punk2, i2, dx, dy, debugstr_guid(riid), ppv); /* TODO: Add test for IID_ImageList2 too */ if (FAILED(IImageList_QueryInterface(punk2, &IID_IImageList, @@ -3387,27 +3384,35 @@ static HRESULT WINAPI ImageListImpl_Merge(IImageList *iface, int i1, /* Get the interface for the new image list */ if (hNew) + { + IImageList *imerge = (IImageList*)hNew; + ret = HIMAGELIST_QueryInterface(hNew, riid, ppv); + IImageList_Release(imerge); + } IImageList_Release(iml2); return ret; } -static HRESULT WINAPI ImageListImpl_Clone(IImageList *iface, REFIID riid, - PVOID *ppv) +static HRESULT WINAPI ImageListImpl_Clone(IImageList *iface, REFIID riid, void **ppv) { HIMAGELIST This = (HIMAGELIST) iface; - HIMAGELIST hNew; + HIMAGELIST clone; HRESULT ret = E_FAIL; - if (!ppv) - return E_FAIL; + TRACE("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppv); - hNew = ImageList_Duplicate(This); + clone = ImageList_Duplicate(This); /* Get the interface for the new image list */ - if (hNew) - ret = HIMAGELIST_QueryInterface(hNew, riid, ppv); + if (clone) + { + IImageList *iclone = (IImageList*)clone; + + ret = HIMAGELIST_QueryInterface(clone, riid, ppv); + IImageList_Release(iclone); + } return ret; } @@ -3432,7 +3437,7 @@ static HRESULT WINAPI ImageListImpl_GetIconSize(IImageList *iface, int *cx, { HIMAGELIST This = (HIMAGELIST) iface; - return ImageList_GetIconSize(This, cx, cy) ? S_OK : E_FAIL; + return ImageList_GetIconSize(This, cx, cy) ? S_OK : E_INVALIDARG; } static HRESULT WINAPI ImageListImpl_SetIconSize(IImageList *iface, int cx, @@ -3443,9 +3448,6 @@ static HRESULT WINAPI ImageListImpl_SetIconSize(IImageList *iface, int cx, static HRESULT WINAPI ImageListImpl_GetImageCount(IImageList *iface, int *pi) { - if (!pi) - return E_FAIL; - *pi = ImageList_GetImageCount((HIMAGELIST) iface); return S_OK; } @@ -3459,18 +3461,12 @@ static HRESULT WINAPI ImageListImpl_SetImageCount(IImageList *iface, static HRESULT WINAPI ImageListImpl_SetBkColor(IImageList *iface, COLORREF clrBk, COLORREF *pclr) { - if (!pclr) - return E_FAIL; - *pclr = ImageList_SetBkColor((HIMAGELIST) iface, clrBk); - return *pclr == CLR_NONE ? E_FAIL : S_OK; + return S_OK; } static HRESULT WINAPI ImageListImpl_GetBkColor(IImageList *iface, COLORREF *pclr) { - if (!pclr) - return E_FAIL; - *pclr = ImageList_GetBkColor((HIMAGELIST) iface); return S_OK; } @@ -3543,7 +3539,12 @@ static HRESULT WINAPI ImageListImpl_GetDragImage(IImageList *iface, POINT *ppt, /* Get the interface for the new image list */ if (hNew) + { + IImageList *idrag = (IImageList*)hNew; + ret = HIMAGELIST_QueryInterface(hNew, riid, ppv); + IImageList_Release(idrag); + } return ret; } @@ -3650,11 +3651,9 @@ static HRESULT ImageListImpl_CreateInstance(const IUnknown *pUnkOuter, REFIID ii if (pUnkOuter) return CLASS_E_NOAGGREGATION; - This = HeapAlloc(GetProcessHeap(), 0, sizeof(struct _IMAGELIST)); + This = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(struct _IMAGELIST)); if (!This) return E_OUTOFMEMORY; - ZeroMemory(This, sizeof(struct _IMAGELIST)); - This->lpVtbl = &ImageListImpl_Vtbl; This->ref = 1; diff --git a/reactos/dll/win32/comctl32/ipaddress.c b/reactos/dll/win32/comctl32/ipaddress.c index 03b8d1c9ed3..1f41f91eac1 100644 --- a/reactos/dll/win32/comctl32/ipaddress.c +++ b/reactos/dll/win32/comctl32/ipaddress.c @@ -149,7 +149,6 @@ static LRESULT IPADDRESS_Draw (const IPADDRESS_INFO *infoPtr, HDC hdc) { static const WCHAR dotW[] = { '.', 0 }; RECT rect, rcPart; - POINT pt; COLORREF bgCol, fgCol; int i; @@ -173,13 +172,11 @@ static LRESULT IPADDRESS_Draw (const IPADDRESS_INFO *infoPtr, HDC hdc) for (i = 0; i < 3; i++) { GetWindowRect (infoPtr->Part[i].EditHwnd, &rcPart); - pt.x = rcPart.right; - ScreenToClient(infoPtr->Self, &pt); - rect.left = pt.x; + MapWindowPoints( 0, infoPtr->Self, (POINT *)&rcPart, 2 ); + rect.left = rcPart.right; GetWindowRect (infoPtr->Part[i+1].EditHwnd, &rcPart); - pt.x = rcPart.left; - ScreenToClient(infoPtr->Self, &pt); - rect.right = pt.x; + MapWindowPoints( 0, infoPtr->Self, (POINT *)&rcPart, 2 ); + rect.right = rcPart.left; DrawTextW(hdc, dotW, 1, &rect, DT_SINGLELINE | DT_CENTER | DT_BOTTOM); } diff --git a/reactos/dll/win32/comctl32/listview.c b/reactos/dll/win32/comctl32/listview.c index 4e13577b48f..dc96200ee35 100644 --- a/reactos/dll/win32/comctl32/listview.c +++ b/reactos/dll/win32/comctl32/listview.c @@ -6,7 +6,7 @@ * Copyright 2000 Jason Mawdsley * Copyright 2001 CodeWeavers Inc. * Copyright 2002 Dimitrie O. Paun - * Copyright 2009 Nikolay Sivov + * Copyright 2009-2011 Nikolay Sivov * Copyright 2009 Owen Rudge for CodeWeavers * * This library is free software; you can redistribute it and/or @@ -456,8 +456,8 @@ static INT LISTVIEW_GetStringWidthT(const LISTVIEW_INFO *, LPCWSTR, BOOL); static BOOL LISTVIEW_KeySelection(LISTVIEW_INFO *, INT, BOOL); static UINT LISTVIEW_GetItemState(const LISTVIEW_INFO *, INT, UINT); static BOOL LISTVIEW_SetItemState(LISTVIEW_INFO *, INT, const LVITEMW *); -static LRESULT LISTVIEW_VScroll(LISTVIEW_INFO *, INT, INT, HWND); -static LRESULT LISTVIEW_HScroll(LISTVIEW_INFO *, INT, INT, HWND); +static LRESULT LISTVIEW_VScroll(LISTVIEW_INFO *, INT, INT); +static LRESULT LISTVIEW_HScroll(LISTVIEW_INFO *, INT, INT); static BOOL LISTVIEW_EnsureVisible(LISTVIEW_INFO *, INT, BOOL); static HIMAGELIST LISTVIEW_SetImageList(LISTVIEW_INFO *, INT, HIMAGELIST); static INT LISTVIEW_HitTest(const LISTVIEW_INFO *, LPLVHITTESTINFO, BOOL, BOOL); @@ -474,20 +474,14 @@ static BOOL LISTVIEW_Scroll(LISTVIEW_INFO *, INT, INT); * W: Unicode, T: ANSI/Unicode - function of isW */ -static inline BOOL is_textW(LPCWSTR text) +static inline BOOL is_text(LPCWSTR text) { return text != NULL && text != LPSTR_TEXTCALLBACKW; } -static inline BOOL is_textT(LPCWSTR text, BOOL isW) -{ - /* we can ignore isW since LPSTR_TEXTCALLBACKW == LPSTR_TEXTCALLBACKA */ - return is_textW(text); -} - static inline int textlenT(LPCWSTR text, BOOL isW) { - return !is_textT(text, isW) ? 0 : + return !is_text(text) ? 0 : isW ? lstrlenW(text) : lstrlenA((LPCSTR)text); } @@ -505,7 +499,7 @@ static inline LPWSTR textdupTtoW(LPCWSTR text, BOOL isW) { LPWSTR wstr = (LPWSTR)text; - if (!isW && is_textT(text, isW)) + if (!isW && is_text(text)) { INT len = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)text, -1, NULL, 0); wstr = Alloc(len * sizeof(WCHAR)); @@ -517,7 +511,7 @@ static inline LPWSTR textdupTtoW(LPCWSTR text, BOOL isW) static inline void textfreeT(LPWSTR wstr, BOOL isW) { - if (!isW && is_textT(wstr, isW)) Free (wstr); + if (!isW && is_text(wstr)) Free (wstr); } /* @@ -530,7 +524,7 @@ static BOOL textsetptrT(LPWSTR *dest, LPCWSTR src, BOOL isW) if (src == LPSTR_TEXTCALLBACKW) { - if (is_textW(*dest)) Free(*dest); + if (is_text(*dest)) Free(*dest); *dest = LPSTR_TEXTCALLBACKW; } else @@ -623,7 +617,7 @@ static const char* debugscrollinfo(const SCROLLINFO *pScrollInfo) if (pScrollInfo->fMask & SIF_TRACKPOS) len = snprintf(buf, size, "nTrackPos=%d, ", pScrollInfo->nTrackPos); else len = 0; - if (len == -1) goto end; buf += len; size -= len; + if (len == -1) goto end; buf += len; goto undo; end: buf = text + strlen(text); @@ -668,7 +662,7 @@ static const char* debuglvitem_t(const LVITEMW *lpLVItem, BOOL isW) if (lpLVItem->mask & LVIF_INDENT) len = snprintf(buf, size, "iIndent=%d, ", lpLVItem->iIndent); else len = 0; - if (len == -1) goto end; buf += len; size -= len; + if (len == -1) goto end; buf += len; goto undo; end: buf = text + strlen(text); @@ -708,7 +702,7 @@ static const char* debuglvcolumn_t(const LVCOLUMNW *lpColumn, BOOL isW) if (lpColumn->mask & LVCF_ORDER) len = snprintf(buf, size, "iOrder=%d, ", lpColumn->iOrder); else len = 0; - if (len == -1) goto end; buf += len; size -= len; + if (len == -1) goto end; buf += len; goto undo; end: buf = text + strlen(text); @@ -934,74 +928,104 @@ static BOOL notify_deleteitem(const LISTVIEW_INFO *infoPtr, INT nItem) Send notification. depends on dispinfoW having same structure as dispinfoA. infoPtr : listview struct - notificationCode : *Unicode* notification code + code : *Unicode* notification code pdi : dispinfo structure (can be unicode or ansi) isW : TRUE if dispinfo is Unicode */ -static BOOL notify_dispinfoT(const LISTVIEW_INFO *infoPtr, UINT notificationCode, LPNMLVDISPINFOW pdi, BOOL isW) +static BOOL notify_dispinfoT(const LISTVIEW_INFO *infoPtr, UINT code, LPNMLVDISPINFOW pdi, BOOL isW) { - BOOL bResult = FALSE; - BOOL convertToAnsi = FALSE, convertToUnicode = FALSE; - INT cchTempBufMax = 0, savCchTextMax = 0; - UINT realNotifCode; - LPWSTR pszTempBuf = NULL, savPszText = NULL; + INT length = 0, ret_length; + LPWSTR buffer = NULL, ret_text; + BOOL return_ansi = FALSE; + BOOL return_unicode = FALSE; + BOOL ret; - if ((pdi->item.mask & LVIF_TEXT) && is_textT(pdi->item.pszText, isW)) + if ((pdi->item.mask & LVIF_TEXT) && is_text(pdi->item.pszText)) { - convertToAnsi = (isW && infoPtr->notifyFormat == NFR_ANSI); - convertToUnicode = (!isW && infoPtr->notifyFormat == NFR_UNICODE); + return_unicode = ( isW && infoPtr->notifyFormat == NFR_ANSI); + return_ansi = (!isW && infoPtr->notifyFormat == NFR_UNICODE); } - if (convertToAnsi || convertToUnicode) + ret_length = pdi->item.cchTextMax; + ret_text = pdi->item.pszText; + + if (return_unicode || return_ansi) { - if (notificationCode != LVN_GETDISPINFOW) - { - cchTempBufMax = convertToUnicode ? + if (code != LVN_GETDISPINFOW) + { + length = return_ansi ? MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pdi->item.pszText, -1, NULL, 0): WideCharToMultiByte(CP_ACP, 0, pdi->item.pszText, -1, NULL, 0, NULL, NULL); - } - else - { - cchTempBufMax = pdi->item.cchTextMax; - *pdi->item.pszText = 0; /* make sure we don't process garbage */ - } + } + else + { + length = pdi->item.cchTextMax; + *pdi->item.pszText = 0; /* make sure we don't process garbage */ + } - pszTempBuf = Alloc( (convertToUnicode ? sizeof(WCHAR) : sizeof(CHAR)) * cchTempBufMax); - if (!pszTempBuf) return FALSE; + buffer = Alloc( (return_ansi ? sizeof(WCHAR) : sizeof(CHAR)) * length); + if (!buffer) return FALSE; - if (convertToUnicode) - MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pdi->item.pszText, -1, - pszTempBuf, cchTempBufMax); - else - WideCharToMultiByte(CP_ACP, 0, pdi->item.pszText, -1, (LPSTR) pszTempBuf, - cchTempBufMax, NULL, NULL); + if (return_ansi) + MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pdi->item.pszText, -1, + buffer, length); + else + WideCharToMultiByte(CP_ACP, 0, pdi->item.pszText, -1, (LPSTR) buffer, + length, NULL, NULL); - savCchTextMax = pdi->item.cchTextMax; - savPszText = pdi->item.pszText; - pdi->item.pszText = pszTempBuf; - pdi->item.cchTextMax = cchTempBufMax; + pdi->item.pszText = buffer; + pdi->item.cchTextMax = length; } if (infoPtr->notifyFormat == NFR_ANSI) - realNotifCode = get_ansi_notification(notificationCode); - else - realNotifCode = notificationCode; - TRACE(" pdi->item=%s\n", debuglvitem_t(&pdi->item, infoPtr->notifyFormat != NFR_ANSI)); - bResult = notify_hdr(infoPtr, realNotifCode, &pdi->hdr); + code = get_ansi_notification(code); - if (convertToUnicode || convertToAnsi) + TRACE(" pdi->item=%s\n", debuglvitem_t(&pdi->item, infoPtr->notifyFormat != NFR_ANSI)); + ret = notify_hdr(infoPtr, code, &pdi->hdr); + TRACE(" resulting code=%d\n", pdi->hdr.code); + + if (return_ansi || return_unicode) { - if (convertToUnicode) /* note : pointer can be changed by app ! */ - WideCharToMultiByte(CP_ACP, 0, pdi->item.pszText, -1, (LPSTR) savPszText, - savCchTextMax, NULL, NULL); - else - MultiByteToWideChar(CP_ACP, 0, (LPSTR) pdi->item.pszText, -1, - savPszText, savCchTextMax); - pdi->item.pszText = savPszText; /* restores our buffer */ - pdi->item.cchTextMax = savCchTextMax; - Free (pszTempBuf); + if (return_ansi && (pdi->hdr.code == LVN_GETDISPINFOA)) + { + strcpy((char*)ret_text, (char*)pdi->item.pszText); + } + else if (return_unicode && (pdi->hdr.code == LVN_GETDISPINFOW)) + { + strcpyW(ret_text, pdi->item.pszText); + } + else if (return_ansi) /* note : pointer can be changed by app ! */ + { + WideCharToMultiByte(CP_ACP, 0, pdi->item.pszText, -1, (LPSTR) ret_text, + ret_length, NULL, NULL); + } + else + MultiByteToWideChar(CP_ACP, 0, (LPSTR) pdi->item.pszText, -1, + ret_text, ret_length); + + pdi->item.pszText = ret_text; /* restores our buffer */ + pdi->item.cchTextMax = ret_length; + + Free(buffer); + return ret; } - return bResult; + + /* if dipsinfo holder changed notification code then convert */ + if (!isW && (pdi->hdr.code == LVN_GETDISPINFOW) && (pdi->item.mask & LVIF_TEXT)) + { + length = WideCharToMultiByte(CP_ACP, 0, pdi->item.pszText, -1, NULL, 0, NULL, NULL); + + buffer = Alloc(length * sizeof(CHAR)); + if (!buffer) return FALSE; + + WideCharToMultiByte(CP_ACP, 0, pdi->item.pszText, -1, (LPSTR) buffer, + ret_length, NULL, NULL); + + strcpy((LPSTR)pdi->item.pszText, (LPSTR)buffer); + Free(buffer); + } + + return ret; } static void customdraw_fill(NMLVCUSTOMDRAW *lpnmlvcd, const LISTVIEW_INFO *infoPtr, HDC hdc, @@ -1789,8 +1813,6 @@ static INT LISTVIEW_ProcessLetterKeys(LISTVIEW_INFO *infoPtr, WPARAM charCode, L infoPtr->charCode = charCode; infoPtr->szSearchParam[0] = charCode; infoPtr->nSearchParamLength = 1; - /* redundant with the 1 char string */ - charCode = 0; } /* and search from the current position */ @@ -1855,8 +1877,9 @@ static INT LISTVIEW_ProcessLetterKeys(LISTVIEW_INFO *infoPtr, WPARAM charCode, L } } - /* found something or second search completed with any result */ - if (nItem != -1 || endidx != infoPtr->nItemCount) + if ( nItem != -1 || /* found something */ + endidx != infoPtr->nItemCount || /* second search done */ + (startidx == 0 && endidx == infoPtr->nItemCount) /* full range for first search */ ) break; }; } @@ -2325,7 +2348,7 @@ static void LISTVIEW_GetItemMetrics(const LISTVIEW_INFO *infoPtr, const LVITEMW /* we need the text in non owner draw mode */ assert(lpLVItem->mask & LVIF_TEXT); - if (is_textT(lpLVItem->pszText, TRUE)) + if (is_text(lpLVItem->pszText)) { HFONT hFont = infoPtr->hFont ? infoPtr->hFont : infoPtr->hDefaultFont; HDC hdc = GetDC(infoPtr->hwndSelf); @@ -3231,7 +3254,7 @@ static BOOL ranges_del(RANGES ranges, RANGE range) /* case 5: fully internal */ else { - RANGE tmprgn = *chkrgn, *newrgn; + RANGE *newrgn; if (!(newrgn = Alloc(sizeof(RANGE)))) goto fail; newrgn->lower = chkrgn->lower; @@ -3242,7 +3265,6 @@ static BOOL ranges_del(RANGES ranges, RANGE range) Free(newrgn); goto fail; } - chkrgn = &tmprgn; break; } @@ -3704,7 +3726,9 @@ static LRESULT LISTVIEW_MouseHover(LISTVIEW_INFO *infoPtr, INT x, INT y) * RETURN: * None. */ -static void LISTVIEW_MarqueeHighlight(LISTVIEW_INFO *infoPtr, LPPOINT coords_orig, LPPOINT coords_offs, LPPOINT offset, INT scroll) +static void LISTVIEW_MarqueeHighlight(LISTVIEW_INFO *infoPtr, const POINT *coords_orig, + const POINT *coords_offs, const POINT *offset, + INT scroll) { BOOL controlDown = FALSE; LVITEMW item; @@ -4318,7 +4342,7 @@ static BOOL LISTVIEW_SetItemT(LISTVIEW_INFO *infoPtr, LVITEMW *lpLVItem, BOOL is return FALSE; /* For efficiency, we transform the lpLVItem->pszText to Unicode here */ - if ((lpLVItem->mask & LVIF_TEXT) && is_textW(lpLVItem->pszText)) + if ((lpLVItem->mask & LVIF_TEXT) && is_text(lpLVItem->pszText)) { pszText = lpLVItem->pszText; lpLVItem->pszText = textdupTtoW(lpLVItem->pszText, isW); @@ -5060,8 +5084,6 @@ enddraw: static DWORD LISTVIEW_ApproximateViewRect(const LISTVIEW_INFO *infoPtr, INT nItemCount, WORD wWidth, WORD wHeight) { - INT nItemCountPerColumn = 1; - INT nColumnCount = 0; DWORD dwViewRect = 0; if (nItemCount == -1) @@ -5069,6 +5091,9 @@ static DWORD LISTVIEW_ApproximateViewRect(const LISTVIEW_INFO *infoPtr, INT nIte if (infoPtr->uView == LV_VIEW_LIST) { + INT nItemCountPerColumn = 1; + INT nColumnCount = 0; + if (wHeight == 0xFFFF) { /* use current height */ @@ -5129,9 +5154,6 @@ static DWORD LISTVIEW_ApproximateViewRect(const LISTVIEW_INFO *infoPtr, INT nIte nItemWidth = infoPtr->iconSpacing.cx; nItemHeight = infoPtr->iconSpacing.cy; - if (nItemCount == -1) - nItemCount = infoPtr->nItemCount; - if (wWidth == 0xffff) wWidth = infoPtr->rcList.right - infoPtr->rcList.left; @@ -5307,7 +5329,7 @@ static BOOL LISTVIEW_DeleteAllItems(LISTVIEW_INFO *infoPtr, BOOL destroy) for (j = 0; j < DPA_GetPtrCount(hdpaSubItems); j++) { hdrItem = DPA_GetPtr(hdpaSubItems, j); - if (is_textW(hdrItem->pszText)) Free(hdrItem->pszText); + if (is_text(hdrItem->pszText)) Free(hdrItem->pszText); Free(hdrItem); } DPA_Destroy(hdpaSubItems); @@ -5449,7 +5471,7 @@ static BOOL LISTVIEW_DeleteColumn(LISTVIEW_INFO *infoPtr, INT nColumn) if (nSubItem > 0) { /* free string */ - if (is_textW(lpDelItem->hdr.pszText)) + if (is_text(lpDelItem->hdr.pszText)) Free(lpDelItem->hdr.pszText); /* free item */ @@ -5598,7 +5620,7 @@ static BOOL LISTVIEW_DeleteItem(LISTVIEW_INFO *infoPtr, INT nItem) for (i = 0; i < DPA_GetPtrCount(hdpaSubItems); i++) { hdrItem = DPA_GetPtr(hdpaSubItems, i); - if (is_textW(hdrItem->pszText)) Free(hdrItem->pszText); + if (is_text(hdrItem->pszText)) Free(hdrItem->pszText); Free(hdrItem); } DPA_Destroy(hdpaSubItems); @@ -5843,7 +5865,7 @@ static HWND CreateEditLabelT(LISTVIEW_INFO *infoPtr, LPCWSTR text, BOOL isW) TRACE("(%p, text=%s, isW=%d)\n", infoPtr, debugtext_t(text, isW), isW); - /* Window will be resized and positioned after LVN_BEGINLABELEDIT */ + /* window will be resized and positioned after LVN_BEGINLABELEDIT */ if (isW) hedit = CreateWindowW(WC_EDITW, text, style, 0, 0, 0, 0, infoPtr->hwndSelf, 0, hinst, 0); else @@ -5875,21 +5897,21 @@ static HWND CreateEditLabelT(LISTVIEW_INFO *infoPtr, LPCWSTR text, BOOL isW) */ static HWND LISTVIEW_EditLabelT(LISTVIEW_INFO *infoPtr, INT nItem, BOOL isW) { - WCHAR szDispText[DISP_TEXT_SIZE] = { 0 }; + WCHAR disptextW[DISP_TEXT_SIZE] = { 0 }; + HWND hwndSelf = infoPtr->hwndSelf; NMLVDISPINFOW dispInfo; + HFONT hOldFont = NULL; + TEXTMETRICW tm; RECT rect; SIZE sz; - HWND hwndSelf = infoPtr->hwndSelf; HDC hdc; - HFONT hOldFont = NULL; - TEXTMETRICW textMetric; TRACE("(nItem=%d, isW=%d)\n", nItem, isW); if (~infoPtr->dwStyle & LVS_EDITLABELS) return 0; - /* Is the EditBox still there, if so remove it */ - if(infoPtr->hwndEdit != 0) + /* remove existing edit box */ + if (infoPtr->hwndEdit) { SetFocus(infoPtr->hwndSelf); infoPtr->hwndEdit = 0; @@ -5911,7 +5933,7 @@ static HWND LISTVIEW_EditLabelT(LISTVIEW_INFO *infoPtr, INT nItem, BOOL isW) dispInfo.item.iItem = nItem; dispInfo.item.iSubItem = 0; dispInfo.item.stateMask = ~0; - dispInfo.item.pszText = szDispText; + dispInfo.item.pszText = disptextW; dispInfo.item.cchTextMax = DISP_TEXT_SIZE; if (!LISTVIEW_GetItemT(infoPtr, &dispInfo.item, isW)) return 0; @@ -5927,27 +5949,36 @@ static HWND LISTVIEW_EditLabelT(LISTVIEW_INFO *infoPtr, INT nItem, BOOL isW) return 0; } - /* Now position and display edit box */ + TRACE("disp text=%s\n", debugtext_t(dispInfo.item.pszText, isW)); + + /* position and display edit box */ hdc = GetDC(infoPtr->hwndSelf); - /* Select the font to get appropriate metric dimensions */ - if(infoPtr->hFont != 0) + /* select the font to get appropriate metric dimensions */ + if (infoPtr->hFont) hOldFont = SelectObject(hdc, infoPtr->hFont); - /* Get String Length in pixels */ - GetTextExtentPoint32W(hdc, dispInfo.item.pszText, lstrlenW(dispInfo.item.pszText), &sz); + /* use real edit box content, it could be altered during LVN_BEGINLABELEDIT notification */ + GetWindowTextW(infoPtr->hwndEdit, disptextW, DISP_TEXT_SIZE); + TRACE("edit box text=%s\n", debugstr_w(disptextW)); - /* Add Extra spacing for the next character */ - GetTextMetricsW(hdc, &textMetric); - sz.cx += (textMetric.tmMaxCharWidth * 2); + /* get string length in pixels */ + GetTextExtentPoint32W(hdc, disptextW, lstrlenW(disptextW), &sz); - if(infoPtr->hFont != 0) + /* add extra spacing for the next character */ + GetTextMetricsW(hdc, &tm); + sz.cx += tm.tmMaxCharWidth * 2; + + if (infoPtr->hFont) SelectObject(hdc, hOldFont); ReleaseDC(infoPtr->hwndSelf, hdc); - MoveWindow(infoPtr->hwndEdit, rect.left - 2, rect.top - 1, sz.cx, - rect.bottom - rect.top + 2, FALSE); + sz.cy = rect.bottom - rect.top + 2; + rect.left -= 2; + rect.top -= 1; + TRACE("moving edit=(%d,%d)-(%d,%d)\n", rect.left, rect.top, sz.cx, sz.cy); + MoveWindow(infoPtr->hwndEdit, rect.left, rect.top, sz.cx, sz.cy, FALSE); ShowWindow(infoPtr->hwndEdit, SW_NORMAL); SetFocus(infoPtr->hwndEdit); SendMessageW(infoPtr->hwndEdit, EM_SETSEL, 0, -1); @@ -6029,14 +6060,14 @@ static BOOL LISTVIEW_EnsureVisible(LISTVIEW_INFO *infoPtr, INT nItem, BOOL bPart { INT diff = nHorzDiff / nScrollPosWidth; if (nHorzDiff % nScrollPosWidth) diff += nHorzAdjust; - LISTVIEW_HScroll(infoPtr, SB_INTERNAL, diff, 0); + LISTVIEW_HScroll(infoPtr, SB_INTERNAL, diff); } if (nScrollPosHeight) { INT diff = nVertDiff / nScrollPosHeight; if (nVertDiff % nScrollPosHeight) diff += nVertAdjust; - LISTVIEW_VScroll(infoPtr, SB_INTERNAL, diff, 0); + LISTVIEW_VScroll(infoPtr, SB_INTERNAL, diff); } return TRUE; @@ -6077,7 +6108,7 @@ static INT LISTVIEW_FindItemW(const LISTVIEW_INFO *infoPtr, INT nStart, } if (!lpFindInfo || nItem < 0) return -1; - + lvItem.mask = 0; if (lpFindInfo->flags & (LVFI_STRING | LVFI_PARTIAL) || lpFindInfo->flags & LVFI_SUBSTRING) @@ -6214,24 +6245,6 @@ static INT LISTVIEW_FindItemA(const LISTVIEW_INFO *infoPtr, INT nStart, return res; } -/*** - * DESCRIPTION: - * Retrieves the background image of the listview control. - * - * PARAMETER(S): - * [I] infoPtr : valid pointer to the listview structure - * [O] lpBkImage : background image attributes - * - * RETURN: - * SUCCESS : TRUE - * FAILURE : FALSE - */ -/* static BOOL LISTVIEW_GetBkImage(const LISTVIEW_INFO *infoPtr, LPLVBKIMAGE lpBkImage) */ -/* { */ -/* FIXME (listview, "empty stub!\n"); */ -/* return FALSE; */ -/* } */ - /*** * DESCRIPTION: * Retrieves column attributes. @@ -6454,6 +6467,7 @@ static BOOL LISTVIEW_GetItemT(const LISTVIEW_INFO *infoPtr, LPLVITEMW lpLVItem, return FALSE; if (lpLVItem->mask == 0) return TRUE; + TRACE("mask=%x\n", lpLVItem->mask); /* make a local copy */ isubitem = lpLVItem->iSubItem; @@ -6502,7 +6516,7 @@ static BOOL LISTVIEW_GetItemT(const LISTVIEW_INFO *infoPtr, LPLVITEMW lpLVItem, if (lpLVItem->mask & LVIF_STATE) dispInfo.item.stateMask = lpLVItem->stateMask & infoPtr->uCallbackMask; /* could be zeroed on LVIF_NORECOMPUTE case */ - if (dispInfo.item.mask != 0) + if (dispInfo.item.mask) { notify_dispinfoT(infoPtr, LVN_GETDISPINFOW, &dispInfo, isW); dispInfo.item.stateMask = lpLVItem->stateMask; @@ -6598,7 +6612,7 @@ static BOOL LISTVIEW_GetItemT(const LISTVIEW_INFO *infoPtr, LPLVITEMW lpLVItem, /* Apps depend on calling back for text if it is NULL or LPSTR_TEXTCALLBACKW */ if ((lpLVItem->mask & LVIF_TEXT) && !(lpLVItem->mask & LVIF_NORECOMPUTE) && - !is_textW(pItemHdr->pszText)) + !is_text(pItemHdr->pszText)) { dispInfo.item.mask |= LVIF_TEXT; dispInfo.item.pszText = lpLVItem->pszText; @@ -6608,7 +6622,7 @@ static BOOL LISTVIEW_GetItemT(const LISTVIEW_INFO *infoPtr, LPLVITEMW lpLVItem, } /* If we don't have all the requested info, query the application */ - if (dispInfo.item.mask != 0) + if (dispInfo.item.mask) { dispInfo.item.iItem = lpLVItem->iItem; dispInfo.item.iSubItem = lpLVItem->iSubItem; /* yes: the original subitem */ @@ -6646,7 +6660,7 @@ static BOOL LISTVIEW_GetItemT(const LISTVIEW_INFO *infoPtr, LPLVITEMW lpLVItem, else if (lpLVItem->mask & LVIF_TEXT) { /* if LVN_GETDISPINFO's disabled with LVIF_NORECOMPUTE return callback placeholder */ - if (isW || !is_textW(pItemHdr->pszText)) lpLVItem->pszText = pItemHdr->pszText; + if (isW || !is_text(pItemHdr->pszText)) lpLVItem->pszText = pItemHdr->pszText; else textcpynT(lpLVItem->pszText, isW, pItemHdr->pszText, TRUE, lpLVItem->cchTextMax); } @@ -7353,7 +7367,7 @@ static INT LISTVIEW_GetStringWidthT(const LISTVIEW_INFO *infoPtr, LPCWSTR lpszTe SIZE stringSize; stringSize.cx = 0; - if (is_textT(lpszText, isW)) + if (is_text(lpszText)) { HFONT hFont = infoPtr->hFont ? infoPtr->hFont : infoPtr->hDefaultFont; HDC hdc = GetDC(infoPtr->hwndSelf); @@ -7818,8 +7832,8 @@ static BOOL LISTVIEW_Scroll(LISTVIEW_INFO *infoPtr, INT dx, INT dy) break; } - if (dx != 0) LISTVIEW_HScroll(infoPtr, SB_INTERNAL, dx, 0); - if (dy != 0) LISTVIEW_VScroll(infoPtr, SB_INTERNAL, dy, 0); + if (dx != 0) LISTVIEW_HScroll(infoPtr, SB_INTERNAL, dx); + if (dy != 0) LISTVIEW_VScroll(infoPtr, SB_INTERNAL, dy); return TRUE; } @@ -8677,7 +8691,7 @@ static BOOL LISTVIEW_SetItemCount(LISTVIEW_INFO *infoPtr, INT nItems, DWORD dwFl * SUCCESS : TRUE * FAILURE : FALSE */ -static BOOL LISTVIEW_SetItemPosition(LISTVIEW_INFO *infoPtr, INT nItem, POINT *pt) +static BOOL LISTVIEW_SetItemPosition(LISTVIEW_INFO *infoPtr, INT nItem, const POINT *pt) { POINT Origin, Pt; @@ -8883,10 +8897,10 @@ static HWND LISTVIEW_SetToolTips( LISTVIEW_INFO *infoPtr, HWND hwndNewToolTip) * RETURN: * Old Unicode Format */ -static BOOL LISTVIEW_SetUnicodeFormat( LISTVIEW_INFO *infoPtr, BOOL fUnicode) +static BOOL LISTVIEW_SetUnicodeFormat( LISTVIEW_INFO *infoPtr, BOOL unicode) { SHORT rc = infoPtr->notifyFormat; - infoPtr->notifyFormat = (fUnicode) ? NFR_UNICODE : NFR_ANSI; + infoPtr->notifyFormat = (unicode) ? NFR_UNICODE : NFR_ANSI; return rc == NFR_UNICODE; } @@ -9304,6 +9318,7 @@ static LRESULT LISTVIEW_Create(HWND hwnd, const CREATESTRUCTW *lpcs) (WPARAM)infoPtr->hwndSelf, NF_QUERY); /* on error defaulting to ANSI notifications */ if (infoPtr->notifyFormat == 0) infoPtr->notifyFormat = NFR_ANSI; + TRACE("notify format=%d\n", infoPtr->notifyFormat); if ((infoPtr->uView == LV_VIEW_DETAILS) && (lpcs->style & WS_VISIBLE)) { @@ -9452,7 +9467,7 @@ static void scroll_list(LISTVIEW_INFO *infoPtr, INT dx, INT dy) * */ static LRESULT LISTVIEW_VScroll(LISTVIEW_INFO *infoPtr, INT nScrollCode, - INT nScrollDiff, HWND hScrollWnd) + INT nScrollDiff) { INT nOldScrollPos, nNewScrollPos; SCROLLINFO scrollInfo; @@ -9556,7 +9571,7 @@ static LRESULT LISTVIEW_VScroll(LISTVIEW_INFO *infoPtr, INT nScrollCode, * */ static LRESULT LISTVIEW_HScroll(LISTVIEW_INFO *infoPtr, INT nScrollCode, - INT nScrollDiff, HWND hScrollWnd) + INT nScrollDiff) { INT nOldScrollPos, nNewScrollPos; SCROLLINFO scrollInfo; @@ -9657,7 +9672,7 @@ static LRESULT LISTVIEW_MouseWheel(LISTVIEW_INFO *infoPtr, INT wheelDelta) * should be fixed in the future. */ LISTVIEW_VScroll(infoPtr, SB_INTERNAL, (gcWheelDelta < 0) ? - -LISTVIEW_SCROLL_ICON_LINE_SIZE : LISTVIEW_SCROLL_ICON_LINE_SIZE, 0); + -LISTVIEW_SCROLL_ICON_LINE_SIZE : LISTVIEW_SCROLL_ICON_LINE_SIZE); break; case LV_VIEW_DETAILS: @@ -9665,12 +9680,12 @@ static LRESULT LISTVIEW_MouseWheel(LISTVIEW_INFO *infoPtr, INT wheelDelta) { int cLineScroll = min(LISTVIEW_GetCountPerColumn(infoPtr), pulScrollLines); cLineScroll *= (gcWheelDelta / WHEEL_DELTA); - LISTVIEW_VScroll(infoPtr, SB_INTERNAL, cLineScroll, 0); + LISTVIEW_VScroll(infoPtr, SB_INTERNAL, cLineScroll); } break; case LV_VIEW_LIST: - LISTVIEW_HScroll(infoPtr, (gcWheelDelta < 0) ? SB_LINELEFT : SB_LINERIGHT, 0, 0); + LISTVIEW_HScroll(infoPtr, (gcWheelDelta < 0) ? SB_LINELEFT : SB_LINERIGHT, 0); break; } return 0; @@ -9845,7 +9860,7 @@ static LRESULT LISTVIEW_LButtonDblClk(LISTVIEW_INFO *infoPtr, WORD wKey, INT x, { LVHITTESTINFO htInfo; - TRACE("(key=%hu, X=%hu, Y=%hu)\n", wKey, x, y); + TRACE("(key=%hu, X=%u, Y=%u)\n", wKey, x, y); /* Cancel the item edition if any */ if (infoPtr->itemEdit.fEnabled) @@ -9889,7 +9904,7 @@ static LRESULT LISTVIEW_LButtonDown(LISTVIEW_INFO *infoPtr, WORD wKey, INT x, IN POINT pt = { x, y }; INT nItem; - TRACE("(key=%hu, X=%hu, Y=%hu)\n", wKey, x, y); + TRACE("(key=%hu, X=%u, Y=%u)\n", wKey, x, y); /* send NM_RELEASEDCAPTURE notification */ if (!notify(infoPtr, NM_RELEASEDCAPTURE)) return 0; @@ -10005,7 +10020,7 @@ static LRESULT LISTVIEW_LButtonUp(LISTVIEW_INFO *infoPtr, WORD wKey, INT x, INT { LVHITTESTINFO lvHitTestInfo; - TRACE("(key=%hu, X=%hu, Y=%hu)\n", wKey, x, y); + TRACE("(key=%hu, X=%u, Y=%u)\n", wKey, x, y); if (!infoPtr->bLButtonDown) return 0; @@ -10114,26 +10129,32 @@ static LRESULT LISTVIEW_NCDestroy(LISTVIEW_INFO *infoPtr) /*** * DESCRIPTION: - * Handles notifications from header. + * Handles notifications. * * PARAMETER(S): * [I] infoPtr : valid pointer to the listview structure - * [I] nCtrlId : control identifier - * [I] lpnmh : notification information + * [I] lpnmhdr : notification information * * RETURN: * Zero */ -static LRESULT LISTVIEW_HeaderNotification(LISTVIEW_INFO *infoPtr, const NMHEADERW *lpnmh) +static LRESULT LISTVIEW_Notify(LISTVIEW_INFO *infoPtr, const NMHDR *lpnmhdr) { HWND hwndSelf = infoPtr->hwndSelf; + const NMHEADERW *lpnmh; - TRACE("(lpnmh=%p)\n", lpnmh); + TRACE("(lpnmhdr=%p)\n", lpnmhdr); - if (!lpnmh || lpnmh->iItem < 0 || lpnmh->iItem >= DPA_GetPtrCount(infoPtr->hdpaColumns)) return 0; - - switch (lpnmh->hdr.code) - { + if (!lpnmhdr || lpnmhdr->hwndFrom != infoPtr->hwndHeader) return 0; + + /* remember: HDN_LAST < HDN_FIRST */ + if (lpnmhdr->code > HDN_FIRST || lpnmhdr->code < HDN_LAST) return 0; + lpnmh = (const NMHEADERW *)lpnmhdr; + + if (lpnmh->iItem < 0 || lpnmh->iItem >= DPA_GetPtrCount(infoPtr->hdpaColumns)) return 0; + + switch (lpnmhdr->code) + { case HDN_TRACKW: case HDN_TRACKA: { @@ -10465,7 +10486,7 @@ static LRESULT LISTVIEW_RButtonDblClk(const LISTVIEW_INFO *infoPtr, WORD wKey, I { LVHITTESTINFO lvHitTestInfo; - TRACE("(key=%hu,X=%hu,Y=%hu)\n", wKey, x, y); + TRACE("(key=%hu,X=%u,Y=%u)\n", wKey, x, y); /* send NM_RELEASEDCAPTURE notification */ if (!notify(infoPtr, NM_RELEASEDCAPTURE)) return 0; @@ -10496,7 +10517,7 @@ static LRESULT LISTVIEW_RButtonDown(LISTVIEW_INFO *infoPtr, WORD wKey, INT x, IN LVHITTESTINFO lvHitTestInfo; INT nItem; - TRACE("(key=%hu,X=%hu,Y=%hu)\n", wKey, x, y); + TRACE("(key=%hu,X=%u,Y=%u)\n", wKey, x, y); /* send NM_RELEASEDCAPTURE notification */ if (!notify(infoPtr, NM_RELEASEDCAPTURE)) return 0; @@ -10544,7 +10565,7 @@ static LRESULT LISTVIEW_RButtonUp(LISTVIEW_INFO *infoPtr, WORD wKey, INT x, INT LVHITTESTINFO lvHitTestInfo; POINT pt; - TRACE("(key=%hu,X=%hu,Y=%hu)\n", wKey, x, y); + TRACE("(key=%hu,X=%u,Y=%u)\n", wKey, x, y); if (!infoPtr->bRButtonDown) return 0; @@ -11411,7 +11432,7 @@ LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) return (LRESULT)infoPtr->hFont; case WM_HSCROLL: - return LISTVIEW_HScroll(infoPtr, (INT)LOWORD(wParam), 0, (HWND)lParam); + return LISTVIEW_HScroll(infoPtr, (INT)LOWORD(wParam), 0); case WM_KEYDOWN: return LISTVIEW_KeyDown(infoPtr, (INT)wParam, (LONG)lParam); @@ -11441,9 +11462,7 @@ LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) return LISTVIEW_NCPaint(infoPtr, (HRGN)wParam); case WM_NOTIFY: - if (lParam && ((LPNMHDR)lParam)->hwndFrom == infoPtr->hwndHeader) - return LISTVIEW_HeaderNotification(infoPtr, (LPNMHEADERW)lParam); - else return 0; + return LISTVIEW_Notify(infoPtr, (LPNMHDR)lParam); case WM_NOTIFYFORMAT: return LISTVIEW_NotifyFormat(infoPtr, (HWND)wParam, (INT)lParam); @@ -11496,7 +11515,7 @@ LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) return LISTVIEW_ThemeChanged(infoPtr); case WM_VSCROLL: - return LISTVIEW_VScroll(infoPtr, (INT)LOWORD(wParam), 0, (HWND)lParam); + return LISTVIEW_VScroll(infoPtr, (INT)LOWORD(wParam), 0); case WM_MOUSEWHEEL: if (wParam & (MK_SHIFT | MK_CONTROL)) diff --git a/reactos/dll/win32/comctl32/monthcal.c b/reactos/dll/win32/comctl32/monthcal.c index ded407eca10..1cc64dbd524 100644 --- a/reactos/dll/win32/comctl32/monthcal.c +++ b/reactos/dll/win32/comctl32/monthcal.c @@ -94,12 +94,9 @@ typedef struct { HWND hwndSelf; DWORD dwStyle; /* cached GWL_STYLE */ - COLORREF bk; - COLORREF txt; - COLORREF titlebk; - COLORREF titletxt; - COLORREF monthbk; - COLORREF trailingtxt; + + COLORREF colors[MCSC_TRAILINGTEXT+1]; + HFONT hFont; HFONT hBoldFont; int textHeight; @@ -122,9 +119,8 @@ typedef struct int status; /* See MC_SEL flags */ SYSTEMTIME firstSel; /* first selected day */ INT maxSelCount; - SYSTEMTIME minSel; + SYSTEMTIME minSel; /* contains single selection when used without MCS_MULTISELECT */ SYSTEMTIME maxSel; - SYSTEMTIME curSel; /* contains currently selected year, month and day */ SYSTEMTIME focusedSel; /* date currently focused with mouse movement */ DWORD rangeValid; SYSTEMTIME minDate; @@ -150,8 +146,12 @@ static const SYSTEMTIME st_null; static const SYSTEMTIME max_allowed_date = { .wYear = 9999, .wMonth = 12, .wDay = 31 }; static const SYSTEMTIME min_allowed_date = { .wYear = 1752, .wMonth = 9, .wDay = 14 }; - -#define MONTHCAL_GetInfoPtr(hwnd) ((MONTHCAL_INFO *)GetWindowLongPtrW(hwnd, 0)) +/* Prev/Next buttons */ +enum nav_direction +{ + DIRECTION_BACKWARD, + DIRECTION_FORWARD +}; /* helper functions */ @@ -449,26 +449,29 @@ int MONTHCAL_CalculateDayOfWeek(SYSTEMTIME *date, BOOL inplace) return st.wDayOfWeek; } +/* add/substract 'months' from date */ +static inline void MONTHCAL_GetMonth(SYSTEMTIME *date, INT months) +{ + INT length, m = date->wMonth + months; + + date->wYear += m > 0 ? (m - 1) / 12 : m / 12 - 1; + date->wMonth = m > 0 ? (m - 1) % 12 + 1 : 12 + m % 12; + /* fix moving from last day in a month */ + length = MONTHCAL_MonthLength(date->wMonth, date->wYear); + if(date->wDay > length) date->wDay = length; + MONTHCAL_CalculateDayOfWeek(date, TRUE); +} + /* properly updates date to point on next month */ static inline void MONTHCAL_GetNextMonth(SYSTEMTIME *date) { - if(++date->wMonth > 12) - { - date->wMonth = 1; - date->wYear++; - } - MONTHCAL_CalculateDayOfWeek(date, TRUE); + return MONTHCAL_GetMonth(date, 1); } /* properly updates date to point on prev month */ static inline void MONTHCAL_GetPrevMonth(SYSTEMTIME *date) { - if(--date->wMonth < 1) - { - date->wMonth = 12; - date->wYear--; - } - MONTHCAL_CalculateDayOfWeek(date, TRUE); + return MONTHCAL_GetMonth(date, -1); } /* Returns full date for a first currently visible day */ @@ -520,7 +523,7 @@ static int MONTHCAL_CalcDayFromPos(const MONTHCAL_INFO *infoPtr, int x, int y, { int retval, firstDay; RECT rcClient; - SYSTEMTIME st = infoPtr->curSel; + SYSTEMTIME st = infoPtr->minSel; GetClientRect(infoPtr->hwndSelf, &rcClient); @@ -548,20 +551,20 @@ static int MONTHCAL_CalcDayFromPos(const MONTHCAL_INFO *infoPtr, int x, int y, * [O] y : week column (zero based) */ static void MONTHCAL_CalcDayXY(const MONTHCAL_INFO *infoPtr, - const SYSTEMTIME *date, int *x, int *y) + const SYSTEMTIME *date, INT *x, INT *y) { - SYSTEMTIME st = infoPtr->curSel; + SYSTEMTIME st = infoPtr->minSel; LONG cmp; int first; st.wDay = 1; first = (MONTHCAL_CalculateDayOfWeek(&st, FALSE) + 6 - infoPtr->firstDay) % 7; - cmp = MONTHCAL_CompareMonths(date, &infoPtr->curSel); + cmp = MONTHCAL_CompareMonths(date, &infoPtr->minSel); /* previous month */ if(cmp == -1) { - *x = (first - MONTHCAL_MonthLength(date->wMonth, infoPtr->curSel.wYear) + date->wDay) % 7; + *x = (first - MONTHCAL_MonthLength(date->wMonth, infoPtr->minSel.wYear) + date->wDay) % 7; *y = 0; return; } @@ -569,7 +572,7 @@ static void MONTHCAL_CalcDayXY(const MONTHCAL_INFO *infoPtr, /* next month calculation is same as for current, just add current month length */ if(cmp == 1) { - first += MONTHCAL_MonthLength(infoPtr->curSel.wMonth, infoPtr->curSel.wYear); + first += MONTHCAL_MonthLength(infoPtr->minSel.wMonth, infoPtr->minSel.wYear); } *x = (date->wDay + first) % 7; @@ -681,8 +684,8 @@ static void MONTHCAL_DrawDay(const MONTHCAL_INFO *infoPtr, HDC hdc, const SYSTEM TRACE("%d %d %d\n", st->wDay, infoPtr->minSel.wDay, infoPtr->maxSel.wDay); TRACE("%s\n", wine_dbgstr_rect(&r)); - oldCol = SetTextColor(hdc, infoPtr->monthbk); - oldBk = SetBkColor(hdc, infoPtr->trailingtxt); + oldCol = SetTextColor(hdc, infoPtr->colors[MCSC_MONTHBK]); + oldBk = SetBkColor(hdc, infoPtr->colors[MCSC_TRAILINGTEXT]); hbr = GetSysColorBrush(COLOR_HIGHLIGHT); FillRect(hdc, &r, hbr); @@ -709,12 +712,12 @@ static void MONTHCAL_DrawDay(const MONTHCAL_INFO *infoPtr, HDC hdc, const SYSTEM } -static void MONTHCAL_PaintButton(MONTHCAL_INFO *infoPtr, HDC hdc, BOOL btnNext) +static void MONTHCAL_PaintButton(MONTHCAL_INFO *infoPtr, HDC hdc, enum nav_direction button) { HTHEME theme = GetWindowTheme (infoPtr->hwndSelf); - RECT *r = btnNext ? &infoPtr->titlebtnnext : &infoPtr->titlebtnprev; - BOOL pressed = btnNext ? (infoPtr->status & MC_NEXTPRESSED) : - (infoPtr->status & MC_PREVPRESSED); + RECT *r = button == DIRECTION_FORWARD ? &infoPtr->titlebtnnext : &infoPtr->titlebtnprev; + BOOL pressed = button == DIRECTION_FORWARD ? infoPtr->status & MC_NEXTPRESSED : + infoPtr->status & MC_PREVPRESSED; if (theme) { static const int states[] = { @@ -723,7 +726,7 @@ static void MONTHCAL_PaintButton(MONTHCAL_INFO *infoPtr, HDC hdc, BOOL btnNext) /* Next button */ ABS_RIGHTNORMAL, ABS_RIGHTPRESSED, ABS_RIGHTDISABLED }; - int stateNum = btnNext ? 3 : 0; + int stateNum = button == DIRECTION_FORWARD ? 3 : 0; if (pressed) stateNum += 1; else @@ -734,7 +737,7 @@ static void MONTHCAL_PaintButton(MONTHCAL_INFO *infoPtr, HDC hdc, BOOL btnNext) } else { - int style = btnNext ? DFCS_SCROLLRIGHT : DFCS_SCROLLLEFT; + int style = button == DIRECTION_FORWARD ? DFCS_SCROLLRIGHT : DFCS_SCROLLLEFT; if (pressed) style |= DFCS_PUSHED; else @@ -750,24 +753,25 @@ static void MONTHCAL_PaintTitle(MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRU { static const WCHAR fmt_monthW[] = { '%','s',' ','%','l','d',0 }; RECT *title = &infoPtr->calendars[calIdx].title; + const SYSTEMTIME *st = &infoPtr->calendars[calIdx].month; WCHAR buf_month[80], buf_fmt[80]; HBRUSH hbr; SIZE sz; /* fill header box */ - hbr = CreateSolidBrush(infoPtr->titlebk); + hbr = CreateSolidBrush(infoPtr->colors[MCSC_TITLEBK]); FillRect(hdc, title, hbr); DeleteObject(hbr); /* month/year string */ - SetBkColor(hdc, infoPtr->titlebk); - SetTextColor(hdc, infoPtr->titletxt); + SetBkColor(hdc, infoPtr->colors[MCSC_TITLEBK]); + SetTextColor(hdc, infoPtr->colors[MCSC_TITLETEXT]); SelectObject(hdc, infoPtr->hBoldFont); - GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SMONTHNAME1+infoPtr->curSel.wMonth-1, + GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SMONTHNAME1 + st->wMonth - 1, buf_month, countof(buf_month)); - wsprintfW(buf_fmt, fmt_monthW, buf_month, infoPtr->curSel.wYear); + wsprintfW(buf_fmt, fmt_monthW, buf_month, st->wYear); DrawTextW(hdc, buf_fmt, strlenW(buf_fmt), title, DT_CENTER | DT_VCENTER | DT_SINGLELINE); @@ -783,20 +787,22 @@ static void MONTHCAL_PaintTitle(MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRU static void MONTHCAL_PaintWeeknumbers(const MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRUCT *ps, INT calIdx) { + const SYSTEMTIME *date = &infoPtr->calendars[calIdx].month; static const WCHAR fmt_weekW[] = { '%','d',0 }; INT mindays, weeknum, weeknum1, startofprescal; - SYSTEMTIME st = infoPtr->curSel; - RECT r; - WCHAR buf[80]; INT i, prev_month; + SYSTEMTIME st; + WCHAR buf[80]; + HBRUSH hbr; + RECT r; if (!(infoPtr->dwStyle & MCS_WEEKNUMBERS)) return; MONTHCAL_GetMinDate(infoPtr, &st); startofprescal = st.wDay; - st = infoPtr->curSel; + st = *date; - prev_month = infoPtr->curSel.wMonth - 1; + prev_month = date->wMonth - 1; if(prev_month == 0) prev_month = 12; /* @@ -823,7 +829,7 @@ static void MONTHCAL_PaintWeeknumbers(const MONTHCAL_INFO *infoPtr, HDC hdc, con mindays = 0; } - if (infoPtr->curSel.wMonth == 1) + if (date->wMonth == 1) { /* calculate all those exceptions for january */ st.wDay = st.wMonth = 1; @@ -834,7 +840,7 @@ static void MONTHCAL_PaintWeeknumbers(const MONTHCAL_INFO *infoPtr, HDC hdc, con { weeknum = 0; for(i = 0; i < 11; i++) - weeknum += MONTHCAL_MonthLength(i+1, infoPtr->curSel.wYear - 1); + weeknum += MONTHCAL_MonthLength(i+1, date->wYear - 1); weeknum += startofprescal + 7; weeknum /= 7; @@ -847,7 +853,7 @@ static void MONTHCAL_PaintWeeknumbers(const MONTHCAL_INFO *infoPtr, HDC hdc, con { weeknum = 0; for(i = 0; i < prev_month - 1; i++) - weeknum += MONTHCAL_MonthLength(i+1, infoPtr->curSel.wYear); + weeknum += MONTHCAL_MonthLength(i+1, date->wYear); weeknum += startofprescal + 7; weeknum /= 7; @@ -857,6 +863,13 @@ static void MONTHCAL_PaintWeeknumbers(const MONTHCAL_INFO *infoPtr, HDC hdc, con } r = infoPtr->calendars[calIdx].weeknums; + + /* erase whole week numbers area */ + hbr = CreateSolidBrush(infoPtr->colors[MCSC_MONTHBK]); + FillRect(hdc, &r, hbr); + DeleteObject(hbr); + + /* reduce rectangle to one week number */ r.bottom = r.top + infoPtr->height_increment; for(i = 0; i < 6; i++) { @@ -919,8 +932,8 @@ static void MONTHCAL_PaintTodayTitle(const MONTHCAL_INFO *infoPtr, HDC hdc, cons /* today mark + focus */ static void MONTHCAL_PaintFocusAndCircle(const MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRUCT *ps) { - if((infoPtr->curSel.wMonth == infoPtr->todaysDate.wMonth) && - (infoPtr->curSel.wYear == infoPtr->todaysDate.wYear) && + if((infoPtr->minSel.wMonth == infoPtr->todaysDate.wMonth) && + (infoPtr->minSel.wYear == infoPtr->todaysDate.wYear) && !(infoPtr->dwStyle & MCS_NOTODAYCIRCLE)) { MONTHCAL_CircleDay(infoPtr, hdc, &infoPtr->todaysDate); @@ -937,19 +950,20 @@ static void MONTHCAL_PaintFocusAndCircle(const MONTHCAL_INFO *infoPtr, HDC hdc, /* paint a calendar area */ static void MONTHCAL_PaintCalendar(const MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRUCT *ps, INT calIdx) { - INT prev_month, i, j; + const SYSTEMTIME *date = &infoPtr->calendars[calIdx].month; + INT prev_month, i, j, length; + RECT r, fill_bk_rect; + SYSTEMTIME st; WCHAR buf[80]; HBRUSH hbr; - RECT r, fill_bk_rect; int mask; - SYSTEMTIME st; /* fill whole days area - from week days area to today note rectangle */ fill_bk_rect = infoPtr->calendars[calIdx].wdays; fill_bk_rect.bottom = infoPtr->calendars[calIdx].days.bottom + (infoPtr->todayrect.bottom - infoPtr->todayrect.top); - hbr = CreateSolidBrush(infoPtr->monthbk); + hbr = CreateSolidBrush(infoPtr->colors[MCSC_MONTHBK]); FillRect(hdc, &fill_bk_rect, hbr); DeleteObject(hbr); @@ -959,7 +973,7 @@ static void MONTHCAL_PaintCalendar(const MONTHCAL_INFO *infoPtr, HDC hdc, const LineTo(hdc, infoPtr->calendars[calIdx].days.right - 3, infoPtr->calendars[calIdx].title.bottom + infoPtr->textHeight + 1); - prev_month = infoPtr->curSel.wMonth - 1; + prev_month = date->wMonth - 1; if (prev_month == 0) prev_month = 12; infoPtr->calendars[calIdx].wdays.left = infoPtr->calendars[calIdx].days.left = @@ -967,8 +981,8 @@ static void MONTHCAL_PaintCalendar(const MONTHCAL_INFO *infoPtr, HDC hdc, const /* 1. draw day abbreviations */ SelectObject(hdc, infoPtr->hFont); - SetBkColor(hdc, infoPtr->monthbk); - SetTextColor(hdc, infoPtr->trailingtxt); + SetBkColor(hdc, infoPtr->colors[MCSC_MONTHBK]); + SetTextColor(hdc, infoPtr->colors[MCSC_TRAILINGTEXT]); /* rectangle to draw a single day abbreviation within */ r = infoPtr->calendars[calIdx].wdays; r.right = r.left + infoPtr->width_increment; @@ -985,15 +999,16 @@ static void MONTHCAL_PaintCalendar(const MONTHCAL_INFO *infoPtr, HDC hdc, const { SYSTEMTIME st_max; - SetTextColor(hdc, infoPtr->trailingtxt); + SetTextColor(hdc, infoPtr->colors[MCSC_TRAILINGTEXT]); /* draw prev month */ if (calIdx == 0) { MONTHCAL_GetMinDate(infoPtr, &st); mask = 1 << (st.wDay-1); + length = MONTHCAL_MonthLength(prev_month, date->wYear); - while(st.wDay <= MONTHCAL_MonthLength(prev_month, infoPtr->curSel.wYear)) + while(st.wDay <= length) { MONTHCAL_DrawDay(infoPtr, hdc, &st, infoPtr->monthdayState[0] & mask, ps); mask <<= 1; @@ -1004,7 +1019,7 @@ static void MONTHCAL_PaintCalendar(const MONTHCAL_INFO *infoPtr, HDC hdc, const /* draw next month */ if (calIdx == infoPtr->cal_num - 1) { - st = infoPtr->curSel; + st = *date; st.wDay = 1; MONTHCAL_GetNextMonth(&st); MONTHCAL_GetMaxDate(infoPtr, &st_max); @@ -1020,11 +1035,13 @@ static void MONTHCAL_PaintCalendar(const MONTHCAL_INFO *infoPtr, HDC hdc, const } /* 3. current month */ - SetTextColor(hdc, infoPtr->txt); - st = infoPtr->curSel; + SetTextColor(hdc, infoPtr->colors[MCSC_TEXT]); + st = *date; st.wDay = 1; mask = 1; - while(st.wDay <= MONTHCAL_MonthLength(infoPtr->curSel.wMonth, infoPtr->curSel.wYear)) { + length = MONTHCAL_MonthLength(date->wMonth, date->wYear); + while(st.wDay <= length) + { MONTHCAL_DrawDay(infoPtr, hdc, &st, infoPtr->monthdayState[1] & mask, ps); mask <<= 1; st.wDay++; @@ -1066,8 +1083,8 @@ static void MONTHCAL_Refresh(MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRUCT MONTHCAL_PaintTodayTitle(infoPtr, hdc, ps); /* navigation buttons */ - MONTHCAL_PaintButton(infoPtr, hdc, FALSE); - MONTHCAL_PaintButton(infoPtr, hdc, TRUE); + MONTHCAL_PaintButton(infoPtr, hdc, DIRECTION_BACKWARD); + MONTHCAL_PaintButton(infoPtr, hdc, DIRECTION_FORWARD); /* restore context */ SetBkColor(hdc, old_bk_clr); @@ -1076,91 +1093,51 @@ static void MONTHCAL_Refresh(MONTHCAL_INFO *infoPtr, HDC hdc, const PAINTSTRUCT } static LRESULT -MONTHCAL_GetMinReqRect(const MONTHCAL_INFO *infoPtr, LPRECT lpRect) +MONTHCAL_GetMinReqRect(const MONTHCAL_INFO *infoPtr, RECT *rect) { - TRACE("rect %p\n", lpRect); + TRACE("rect %p\n", rect); - if(!lpRect) return FALSE; + if(!rect) return FALSE; - lpRect->left = infoPtr->calendars[0].title.left; - lpRect->top = infoPtr->calendars[0].title.top; - lpRect->right = infoPtr->calendars[0].title.right; - lpRect->bottom = infoPtr->todayrect.bottom; + *rect = infoPtr->calendars[0].title; + rect->bottom = infoPtr->calendars[0].days.bottom + infoPtr->todayrect.bottom - + infoPtr->todayrect.top; - AdjustWindowRect(lpRect, infoPtr->dwStyle, FALSE); + AdjustWindowRect(rect, infoPtr->dwStyle, FALSE); /* minimal rectangle is zero based */ - OffsetRect(lpRect, -lpRect->left, -lpRect->top); + OffsetRect(rect, -rect->left, -rect->top); - TRACE("%s\n", wine_dbgstr_rect(lpRect)); + TRACE("%s\n", wine_dbgstr_rect(rect)); return TRUE; } - -static LRESULT -MONTHCAL_GetColor(const MONTHCAL_INFO *infoPtr, INT index) +static COLORREF +MONTHCAL_GetColor(const MONTHCAL_INFO *infoPtr, UINT index) { - TRACE("\n"); + TRACE("%p, %d\n", infoPtr, index); - switch(index) { - case MCSC_BACKGROUND: - return infoPtr->bk; - case MCSC_TEXT: - return infoPtr->txt; - case MCSC_TITLEBK: - return infoPtr->titlebk; - case MCSC_TITLETEXT: - return infoPtr->titletxt; - case MCSC_MONTHBK: - return infoPtr->monthbk; - case MCSC_TRAILINGTEXT: - return infoPtr->trailingtxt; - } - - return -1; + if (index > MCSC_TRAILINGTEXT) return -1; + return infoPtr->colors[index]; } - static LRESULT -MONTHCAL_SetColor(MONTHCAL_INFO *infoPtr, INT index, COLORREF color) +MONTHCAL_SetColor(MONTHCAL_INFO *infoPtr, UINT index, COLORREF color) { - COLORREF prev = -1; + COLORREF prev; - TRACE("%d: color %08x\n", index, color); + TRACE("%p, %d: color %08x\n", infoPtr, index, color); - switch(index) { - case MCSC_BACKGROUND: - prev = infoPtr->bk; - infoPtr->bk = color; - break; - case MCSC_TEXT: - prev = infoPtr->txt; - infoPtr->txt = color; - break; - case MCSC_TITLEBK: - prev = infoPtr->titlebk; - infoPtr->titlebk = color; - break; - case MCSC_TITLETEXT: - prev=infoPtr->titletxt; - infoPtr->titletxt = color; - break; - case MCSC_MONTHBK: - prev = infoPtr->monthbk; - infoPtr->monthbk = color; - break; - case MCSC_TRAILINGTEXT: - prev = infoPtr->trailingtxt; - infoPtr->trailingtxt = color; - break; - } + if (index > MCSC_TRAILINGTEXT) return -1; + + prev = infoPtr->colors[index]; + infoPtr->colors[index] = color; InvalidateRect(infoPtr->hwndSelf, NULL, index == MCSC_BACKGROUND ? TRUE : FALSE); return prev; } - static LRESULT MONTHCAL_GetMonthDelta(const MONTHCAL_INFO *infoPtr) { @@ -1399,7 +1376,7 @@ MONTHCAL_GetCurSel(const MONTHCAL_INFO *infoPtr, SYSTEMTIME *curSel) if(!curSel) return FALSE; if(infoPtr->dwStyle & MCS_MULTISELECT) return FALSE; - *curSel = infoPtr->curSel; + *curSel = infoPtr->minSel; TRACE("%d/%d/%d\n", curSel->wYear, curSel->wMonth, curSel->wDay); return TRUE; } @@ -1407,7 +1384,8 @@ MONTHCAL_GetCurSel(const MONTHCAL_INFO *infoPtr, SYSTEMTIME *curSel) static LRESULT MONTHCAL_SetCurSel(MONTHCAL_INFO *infoPtr, SYSTEMTIME *curSel) { - SYSTEMTIME prev = infoPtr->curSel; + SYSTEMTIME prev = infoPtr->minSel; + WORD day; TRACE("%p\n", curSel); if(!curSel) return FALSE; @@ -1415,21 +1393,23 @@ MONTHCAL_SetCurSel(MONTHCAL_INFO *infoPtr, SYSTEMTIME *curSel) if(!MONTHCAL_ValidateDate(curSel)) return FALSE; /* exit earlier if selection equals current */ - if (MONTHCAL_IsDateEqual(&infoPtr->curSel, curSel)) return TRUE; + if (MONTHCAL_IsDateEqual(&infoPtr->minSel, curSel)) return TRUE; if(!MONTHCAL_IsDateInValidRange(infoPtr, curSel, FALSE)) return FALSE; + infoPtr->calendars[0].month = *curSel; infoPtr->minSel = *curSel; infoPtr->maxSel = *curSel; /* if selection is still in current month, reduce rectangle */ + day = prev.wDay; prev.wDay = curSel->wDay; if (MONTHCAL_IsDateEqual(&prev, curSel)) { RECT r_prev, r_new; - /* note that infoPtr->curSel isn't updated yet */ - MONTHCAL_CalcPosFromDay(infoPtr, &infoPtr->curSel, &r_prev); + prev.wDay = day; + MONTHCAL_CalcPosFromDay(infoPtr, &prev, &r_prev); MONTHCAL_CalcPosFromDay(infoPtr, curSel, &r_new); InvalidateRect(infoPtr->hwndSelf, &r_prev, FALSE); @@ -1438,9 +1418,6 @@ MONTHCAL_SetCurSel(MONTHCAL_INFO *infoPtr, SYSTEMTIME *curSel) else InvalidateRect(infoPtr->hwndSelf, NULL, FALSE); - infoPtr->curSel = *curSel; - infoPtr->calendars[0].month = *curSel; - return TRUE; } @@ -1519,13 +1496,11 @@ MONTHCAL_SetSelRange(MONTHCAL_INFO *infoPtr, SYSTEMTIME *range) infoPtr->minSel = range[1]; infoPtr->maxSel = range[0]; } - infoPtr->curSel = infoPtr->minSel; infoPtr->calendars[0].month = infoPtr->minSel; /* update day of week */ MONTHCAL_CalculateDayOfWeek(&infoPtr->minSel, TRUE); MONTHCAL_CalculateDayOfWeek(&infoPtr->maxSel, TRUE); - MONTHCAL_CalculateDayOfWeek(&infoPtr->curSel, TRUE); /* redraw if bounds changed */ /* FIXME: no actual need to redraw everything */ @@ -1612,10 +1587,22 @@ static INT MONTHCAL_GetCalendarFromPoint(const MONTHCAL_INFO *infoPtr, const POI return -1; } +static inline UINT fill_hittest_info(const MCHITTESTINFO *src, MCHITTESTINFO *dest) +{ + dest->uHit = src->uHit; + dest->st = src->st; + + if (dest->cbSize == sizeof(MCHITTESTINFO)) + memcpy(&dest->rc, &src->rc, sizeof(MCHITTESTINFO) - MCHITTESTINFO_V1_SIZE); + + return src->uHit; +} + static LRESULT MONTHCAL_HitTest(const MONTHCAL_INFO *infoPtr, MCHITTESTINFO *lpht) { INT day, wday, wnum, calIdx; + MCHITTESTINFO htinfo; SYSTEMTIME ht_month; UINT x, y; @@ -1624,7 +1611,11 @@ MONTHCAL_HitTest(const MONTHCAL_INFO *infoPtr, MCHITTESTINFO *lpht) x = lpht->pt.x; y = lpht->pt.y; - memset(&lpht->st, 0, sizeof(lpht->st)); + htinfo.st = st_null; + + /* we should preserve passed fields if hit area doesn't need them */ + if (lpht->cbSize == sizeof(MCHITTESTINFO)) + memcpy(&htinfo.rc, &lpht->rc, sizeof(MCHITTESTINFO) - MCHITTESTINFO_V1_SIZE); /* Comment in for debugging... TRACE("%d %d wd[%d %d %d %d] d[%d %d %d %d] t[%d %d %d %d] wn[%d %d %d %d]\n", x, y, @@ -1643,12 +1634,15 @@ MONTHCAL_HitTest(const MONTHCAL_INFO *infoPtr, MCHITTESTINFO *lpht) if (calIdx == -1) { if (PtInRect(&infoPtr->todayrect, lpht->pt)) - lpht->uHit = MCHT_TODAYLINK; + { + htinfo.uHit = MCHT_TODAYLINK; + htinfo.rc = infoPtr->todayrect; + } else /* outside of calendar area? What's left must be background :-) */ - lpht->uHit = MCHT_CALENDARBK; + htinfo.uHit = MCHT_CALENDARBK; - return lpht->uHit; + return fill_hittest_info(&htinfo, lpht); } ht_month = infoPtr->calendars[calIdx].month; @@ -1659,85 +1653,101 @@ MONTHCAL_HitTest(const MONTHCAL_INFO *infoPtr, MCHITTESTINFO *lpht) two calendars have buttons */ if (calIdx == 0 && PtInRect(&infoPtr->titlebtnprev, lpht->pt)) { - lpht->uHit = MCHT_TITLEBTNPREV; + htinfo.uHit = MCHT_TITLEBTNPREV; + htinfo.rc = infoPtr->titlebtnprev; } else if (PtInRect(&infoPtr->titlebtnnext, lpht->pt)) { - lpht->uHit = MCHT_TITLEBTNNEXT; + htinfo.uHit = MCHT_TITLEBTNNEXT; + htinfo.rc = infoPtr->titlebtnnext; } else if (PtInRect(&infoPtr->calendars[calIdx].titlemonth, lpht->pt)) { - lpht->uHit = MCHT_TITLEMONTH; + htinfo.uHit = MCHT_TITLEMONTH; + htinfo.rc = infoPtr->calendars[calIdx].titlemonth; + htinfo.iOffset = calIdx; } else if (PtInRect(&infoPtr->calendars[calIdx].titleyear, lpht->pt)) { - lpht->uHit = MCHT_TITLEYEAR; + htinfo.uHit = MCHT_TITLEYEAR; + htinfo.rc = infoPtr->calendars[calIdx].titleyear; + htinfo.iOffset = calIdx; } else - lpht->uHit = MCHT_TITLE; + { + htinfo.uHit = MCHT_TITLE; + htinfo.rc = infoPtr->calendars[calIdx].title; + htinfo.iOffset = calIdx; + } - return lpht->uHit; + return fill_hittest_info(&htinfo, lpht); } /* days area (including week days and week numbers */ day = MONTHCAL_CalcDayFromPos(infoPtr, x, y, &wday, &wnum); if (PtInRect(&infoPtr->calendars[calIdx].wdays, lpht->pt)) { - lpht->uHit = MCHT_CALENDARDAY; - lpht->st.wYear = ht_month.wYear; - lpht->st.wMonth = (day < 1) ? ht_month.wMonth -1 : ht_month.wMonth; - lpht->st.wDay = (day < 1) ? + htinfo.uHit = MCHT_CALENDARDAY; + htinfo.iOffset = calIdx; + htinfo.st.wYear = ht_month.wYear; + htinfo.st.wMonth = (day < 1) ? ht_month.wMonth -1 : ht_month.wMonth; + htinfo.st.wDay = (day < 1) ? MONTHCAL_MonthLength(ht_month.wMonth-1, ht_month.wYear) - day : day; + + MONTHCAL_CalcDayXY(infoPtr, &htinfo.st, &htinfo.iCol, &htinfo.iRow); } else if(PtInRect(&infoPtr->calendars[calIdx].weeknums, lpht->pt)) { - lpht->uHit = MCHT_CALENDARWEEKNUM; - lpht->st.wYear = ht_month.wYear; + htinfo.uHit = MCHT_CALENDARWEEKNUM; + htinfo.st.wYear = ht_month.wYear; + htinfo.iOffset = calIdx; - if (day < 1) { - lpht->st.wMonth = ht_month.wMonth - 1; + if (day < 1) + { + htinfo.st.wMonth = ht_month.wMonth - 1; + htinfo.st.wDay = MONTHCAL_MonthLength(ht_month.wMonth-1, ht_month.wYear) - day; } - else if (day > MONTHCAL_MonthLength(ht_month.wMonth, ht_month.wYear)) { - lpht->st.wMonth = ht_month.wMonth + 1; + else if (day > MONTHCAL_MonthLength(ht_month.wMonth, ht_month.wYear)) + { + htinfo.st.wMonth = ht_month.wMonth + 1; + htinfo.st.wDay = day - MONTHCAL_MonthLength(ht_month.wMonth, ht_month.wYear); } else - lpht->st.wMonth = ht_month.wMonth; - - if (day < 1) { - lpht->st.wDay = MONTHCAL_MonthLength(ht_month.wMonth-1, ht_month.wYear) - day; + { + htinfo.st.wMonth = ht_month.wMonth; + htinfo.st.wDay = day; } - else if (day > MONTHCAL_MonthLength(ht_month.wMonth, ht_month.wYear)) { - lpht->st.wDay = day - MONTHCAL_MonthLength(ht_month.wMonth, ht_month.wYear); - } - else - lpht->st.wDay = day; } else if(PtInRect(&infoPtr->calendars[calIdx].days, lpht->pt)) { - lpht->st.wYear = ht_month.wYear; - lpht->st.wMonth = ht_month.wMonth; + htinfo.iOffset = calIdx; + htinfo.st.wYear = ht_month.wYear; + htinfo.st.wMonth = ht_month.wMonth; if (day < 1) { - lpht->uHit = MCHT_CALENDARDATEPREV; - MONTHCAL_GetPrevMonth(&lpht->st); - lpht->st.wDay = MONTHCAL_MonthLength(lpht->st.wMonth, lpht->st.wYear) + day; + htinfo.uHit = MCHT_CALENDARDATEPREV; + MONTHCAL_GetPrevMonth(&htinfo.st); + htinfo.st.wDay = MONTHCAL_MonthLength(lpht->st.wMonth, lpht->st.wYear) + day; } else if (day > MONTHCAL_MonthLength(ht_month.wMonth, ht_month.wYear)) { - lpht->uHit = MCHT_CALENDARDATENEXT; - MONTHCAL_GetNextMonth(&lpht->st); - lpht->st.wDay = day - MONTHCAL_MonthLength(ht_month.wMonth, ht_month.wYear); + htinfo.uHit = MCHT_CALENDARDATENEXT; + MONTHCAL_GetNextMonth(&htinfo.st); + htinfo.st.wDay = day - MONTHCAL_MonthLength(ht_month.wMonth, ht_month.wYear); } - else { - lpht->uHit = MCHT_CALENDARDATE; - lpht->st.wDay = day; + else + { + htinfo.uHit = MCHT_CALENDARDATE; + htinfo.st.wDay = day; } + MONTHCAL_CalcDayXY(infoPtr, &htinfo.st, &htinfo.iCol, &htinfo.iRow); + MONTHCAL_CalcDayRect(infoPtr, &htinfo.rc, htinfo.iCol, htinfo.iRow); /* always update day of week */ - MONTHCAL_CalculateDayOfWeek(&lpht->st, TRUE); + MONTHCAL_CalculateDayOfWeek(&htinfo.st, TRUE); } - return lpht->uHit; + return fill_hittest_info(&htinfo, lpht); } /* MCN_GETDAYSTATE notification helper */ @@ -1753,8 +1763,8 @@ static void MONTHCAL_NotifyDayState(MONTHCAL_INFO *infoPtr) nmds.prgDayState = Alloc(infoPtr->monthRange * sizeof(MONTHDAYSTATE)); nmds.stStart = infoPtr->todaysDate; - nmds.stStart.wYear = infoPtr->curSel.wYear; - nmds.stStart.wMonth = infoPtr->curSel.wMonth; + nmds.stStart.wYear = infoPtr->minSel.wYear; + nmds.stStart.wMonth = infoPtr->minSel.wMonth; nmds.stStart.wDay = 1; SendMessageW(infoPtr->hwndNotify, WM_NOTIFY, nmds.nmhdr.idFrom, (LPARAM)&nmds); @@ -1764,41 +1774,62 @@ static void MONTHCAL_NotifyDayState(MONTHCAL_INFO *infoPtr) } } -static void MONTHCAL_GoToPrevNextMonth(MONTHCAL_INFO *infoPtr, BOOL prev) +/* no valid range check performed */ +static void MONTHCAL_Scroll(MONTHCAL_INFO *infoPtr, INT delta) { - SYSTEMTIME st = infoPtr->curSel; + INT i, selIdx = -1; - TRACE("%s\n", prev ? "prev" : "next"); + for(i = 0; i < infoPtr->cal_num; i++) + { + /* save selection position to shift it later */ + if (selIdx == -1 && MONTHCAL_CompareMonths(&infoPtr->minSel, &infoPtr->calendars[i].month) == 0) + selIdx = i; - if(prev) MONTHCAL_GetPrevMonth(&st); else MONTHCAL_GetNextMonth(&st); - - if(!MONTHCAL_IsDateInValidRange(infoPtr, &st, FALSE)) return; + MONTHCAL_GetMonth(&infoPtr->calendars[i].month, delta); + } + /* selection is always shifted to first calendar */ if(infoPtr->dwStyle & MCS_MULTISELECT) { SYSTEMTIME range[2]; - range[0] = infoPtr->minSel; - range[1] = infoPtr->maxSel; - - if(prev) - { - MONTHCAL_GetPrevMonth(&range[0]); - MONTHCAL_GetPrevMonth(&range[1]); - } - else - { - MONTHCAL_GetNextMonth(&range[0]); - MONTHCAL_GetNextMonth(&range[1]); - } - + MONTHCAL_GetSelRange(infoPtr, range); + MONTHCAL_GetMonth(&range[0], delta - selIdx); + MONTHCAL_GetMonth(&range[1], delta - selIdx); MONTHCAL_SetSelRange(infoPtr, range); } else + { + SYSTEMTIME st = infoPtr->minSel; + + MONTHCAL_GetMonth(&st, delta - selIdx); MONTHCAL_SetCurSel(infoPtr, &st); + } +} +static void MONTHCAL_GoToMonth(MONTHCAL_INFO *infoPtr, enum nav_direction direction) +{ + INT delta = infoPtr->delta ? infoPtr->delta : infoPtr->cal_num; + SYSTEMTIME st; + + TRACE("%s\n", direction == DIRECTION_BACKWARD ? "back" : "fwd"); + + /* check if change allowed by range set */ + if(direction == DIRECTION_BACKWARD) + { + st = infoPtr->calendars[0].month; + MONTHCAL_GetMonth(&st, -delta); + } + else + { + st = infoPtr->calendars[infoPtr->cal_num-1].month; + MONTHCAL_GetMonth(&st, delta); + } + + if(!MONTHCAL_IsDateInValidRange(infoPtr, &st, FALSE)) return; + + MONTHCAL_Scroll(infoPtr, direction == DIRECTION_BACKWARD ? -delta : delta); MONTHCAL_NotifyDayState(infoPtr); - MONTHCAL_NotifySelectionChange(infoPtr); } @@ -1823,7 +1854,6 @@ MONTHCAL_RButtonUp(MONTHCAL_INFO *infoPtr, LPARAM lParam) if( TrackPopupMenu(hMenu, TPM_RIGHTBUTTON | TPM_NONOTIFY | TPM_RETURNCMD, menupoint.x, menupoint.y, 0, infoPtr->hwndSelf, NULL)) { - infoPtr->curSel = infoPtr->todaysDate; infoPtr->calendars[0].month = infoPtr->todaysDate; infoPtr->minSel = infoPtr->todaysDate; infoPtr->maxSel = infoPtr->todaysDate; @@ -1881,12 +1911,15 @@ static LRESULT CALLBACK EditWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM } /* creates updown control and edit box */ -static void MONTHCAL_EditYear(MONTHCAL_INFO *infoPtr) +static void MONTHCAL_EditYear(MONTHCAL_INFO *infoPtr, INT calIdx) { + RECT *rc = &infoPtr->calendars[calIdx].titleyear; + RECT *title = &infoPtr->calendars[calIdx].title; + infoPtr->hWndYearEdit = CreateWindowExW(0, WC_EDITW, 0, WS_VISIBLE | WS_CHILD | ES_READONLY, - infoPtr->calendars[0].titleyear.left + 3, infoPtr->titlebtnnext.top, - infoPtr->calendars[0].titleyear.right - infoPtr->calendars[0].titleyear.left + 4, + rc->left + 3, (title->bottom + title->top - infoPtr->textHeight) / 2, + rc->right - rc->left + 4, infoPtr->textHeight, infoPtr->hwndSelf, NULL, NULL, NULL); @@ -1895,7 +1928,7 @@ static void MONTHCAL_EditYear(MONTHCAL_INFO *infoPtr) infoPtr->hWndYearUpDown = CreateWindowExW(0, UPDOWN_CLASSW, 0, WS_VISIBLE | WS_CHILD | UDS_SETBUDDYINT | UDS_NOTHOUSANDS | UDS_ARROWKEYS, - infoPtr->calendars[0].titleyear.right + 7, infoPtr->titlebtnnext.top, + rc->right + 7, (title->bottom + title->top - infoPtr->textHeight) / 2, 18, infoPtr->textHeight, infoPtr->hwndSelf, NULL, NULL, NULL); @@ -1903,7 +1936,7 @@ static void MONTHCAL_EditYear(MONTHCAL_INFO *infoPtr) SendMessageW(infoPtr->hWndYearUpDown, UDM_SETRANGE, 0, MAKELONG(max_allowed_date.wYear, min_allowed_date.wYear)); SendMessageW(infoPtr->hWndYearUpDown, UDM_SETBUDDY, (WPARAM)infoPtr->hWndYearEdit, 0); - SendMessageW(infoPtr->hWndYearUpDown, UDM_SETPOS, 0, infoPtr->curSel.wYear); + SendMessageW(infoPtr->hWndYearUpDown, UDM_SETPOS, 0, infoPtr->calendars[calIdx].month.wYear); /* subclass edit box */ infoPtr->EditWndProc = (WNDPROC)SetWindowLongPtrW(infoPtr->hWndYearEdit, @@ -1939,14 +1972,14 @@ MONTHCAL_LButtonDown(MONTHCAL_INFO *infoPtr, LPARAM lParam) switch(hit) { case MCHT_TITLEBTNNEXT: - MONTHCAL_GoToPrevNextMonth(infoPtr, FALSE); + MONTHCAL_GoToMonth(infoPtr, DIRECTION_FORWARD); infoPtr->status = MC_NEXTPRESSED; SetTimer(infoPtr->hwndSelf, MC_PREVNEXTMONTHTIMER, MC_PREVNEXTMONTHDELAY, 0); InvalidateRect(infoPtr->hwndSelf, NULL, FALSE); return 0; case MCHT_TITLEBTNPREV: - MONTHCAL_GoToPrevNextMonth(infoPtr, TRUE); + MONTHCAL_GoToMonth(infoPtr, DIRECTION_BACKWARD); infoPtr->status = MC_PREVPRESSED; SetTimer(infoPtr->hwndSelf, MC_PREVNEXTMONTHTIMER, MC_PREVNEXTMONTHDELAY, 0); InvalidateRect(infoPtr->hwndSelf, NULL, FALSE); @@ -1970,22 +2003,33 @@ MONTHCAL_LButtonDown(MONTHCAL_INFO *infoPtr, LPARAM lParam) i = TrackPopupMenu(hMenu,TPM_LEFTALIGN | TPM_NONOTIFY | TPM_RIGHTBUTTON | TPM_RETURNCMD, menupoint.x, menupoint.y, 0, infoPtr->hwndSelf, NULL); - if ((i > 0) && (i < 13) && infoPtr->curSel.wMonth != i) + if ((i > 0) && (i < 13) && infoPtr->calendars[ht.iOffset].month.wMonth != i) { - infoPtr->curSel.wMonth = i; - MONTHCAL_IsDateInValidRange(infoPtr, &infoPtr->curSel, TRUE); - InvalidateRect(infoPtr->hwndSelf, NULL, FALSE); + INT delta = i - infoPtr->calendars[ht.iOffset].month.wMonth; + SYSTEMTIME st; + + /* check if change allowed by range set */ + st = delta < 0 ? infoPtr->calendars[0].month : + infoPtr->calendars[infoPtr->cal_num-1].month; + MONTHCAL_GetMonth(&st, delta); + + if (MONTHCAL_IsDateInValidRange(infoPtr, &st, FALSE)) + { + MONTHCAL_Scroll(infoPtr, delta); + MONTHCAL_NotifyDayState(infoPtr); + MONTHCAL_NotifySelectionChange(infoPtr); + InvalidateRect(infoPtr->hwndSelf, NULL, FALSE); + } } return 0; } case MCHT_TITLEYEAR: { - MONTHCAL_EditYear(infoPtr); + MONTHCAL_EditYear(infoPtr, ht.iOffset); return 0; } case MCHT_TODAYLINK: { - infoPtr->curSel = infoPtr->todaysDate; infoPtr->calendars[0].month = infoPtr->todaysDate; infoPtr->minSel = infoPtr->todaysDate; infoPtr->maxSel = infoPtr->todaysDate; @@ -2058,7 +2102,7 @@ MONTHCAL_LButtonUp(MONTHCAL_INFO *infoPtr, LPARAM lParam) if((hit & MCHT_CALENDARDATE) == MCHT_CALENDARDATE) { - SYSTEMTIME sel = infoPtr->curSel; + SYSTEMTIME sel = infoPtr->minSel; /* will be invalidated here */ MONTHCAL_SetCurSel(infoPtr, &ht.st); @@ -2081,8 +2125,8 @@ MONTHCAL_Timer(MONTHCAL_INFO *infoPtr, WPARAM id) switch(id) { case MC_PREVNEXTMONTHTIMER: - if(infoPtr->status & MC_NEXTPRESSED) MONTHCAL_GoToPrevNextMonth(infoPtr, FALSE); - if(infoPtr->status & MC_PREVPRESSED) MONTHCAL_GoToPrevNextMonth(infoPtr, TRUE); + if(infoPtr->status & MC_NEXTPRESSED) MONTHCAL_GoToMonth(infoPtr, DIRECTION_FORWARD); + if(infoPtr->status & MC_PREVPRESSED) MONTHCAL_GoToMonth(infoPtr, DIRECTION_BACKWARD); InvalidateRect(infoPtr->hwndSelf, NULL, FALSE); break; case MC_TODAYUPDATETIMER: @@ -2199,7 +2243,7 @@ MONTHCAL_EraseBkgnd(const MONTHCAL_INFO *infoPtr, HDC hdc) if (!GetClipBox(hdc, &rc)) return FALSE; /* fill background */ - hbr = CreateSolidBrush (infoPtr->bk); + hbr = CreateSolidBrush (infoPtr->colors[MCSC_BACKGROUND]); FillRect(hdc, &rc, hbr); DeleteObject(hbr); @@ -2374,8 +2418,6 @@ static LRESULT MONTHCAL_Size(MONTHCAL_INFO *infoPtr, int Width, int Height) TRACE("(width=%d, height=%d)\n", Width, Height); MONTHCAL_UpdateSize(infoPtr); - - /* invalidate client area and erase background */ InvalidateRect(infoPtr->hwndSelf, NULL, TRUE); return 0; @@ -2489,16 +2531,15 @@ MONTHCAL_Create(HWND hwnd, LPCREATESTRUCTW lpcs) infoPtr->monthdayState = Alloc(infoPtr->monthRange * sizeof(MONTHDAYSTATE)); if (!infoPtr->monthdayState) goto fail; - infoPtr->titlebk = comctl32_color.clrActiveCaption; - infoPtr->titletxt = comctl32_color.clrWindow; - infoPtr->monthbk = comctl32_color.clrWindow; - infoPtr->trailingtxt = comctl32_color.clrGrayText; - infoPtr->bk = comctl32_color.clrWindow; - infoPtr->txt = comctl32_color.clrWindowText; + infoPtr->colors[MCSC_BACKGROUND] = comctl32_color.clrWindow; + infoPtr->colors[MCSC_TEXT] = comctl32_color.clrWindowText; + infoPtr->colors[MCSC_TITLEBK] = comctl32_color.clrActiveCaption; + infoPtr->colors[MCSC_TITLETEXT] = comctl32_color.clrWindow; + infoPtr->colors[MCSC_MONTHBK] = comctl32_color.clrWindow; + infoPtr->colors[MCSC_TRAILINGTEXT] = comctl32_color.clrGrayText; infoPtr->minSel = infoPtr->todaysDate; infoPtr->maxSel = infoPtr->todaysDate; - infoPtr->curSel = infoPtr->todaysDate; infoPtr->calendars[0].month = infoPtr->todaysDate; infoPtr->isUnicode = TRUE; @@ -2545,16 +2586,12 @@ MONTHCAL_Notify(MONTHCAL_INFO *infoPtr, NMHDR *hdr) { NMUPDOWN *nmud = (NMUPDOWN*)hdr; - if (hdr->hwndFrom == infoPtr->hWndYearUpDown) + if (hdr->hwndFrom == infoPtr->hWndYearUpDown && nmud->iDelta) { /* year value limits are set up explicitly after updown creation */ - if ((nmud->iDelta + nmud->iPos) != infoPtr->curSel.wYear) - { - SYSTEMTIME new_date = infoPtr->curSel; - - new_date.wYear = nmud->iDelta + nmud->iPos; - MONTHCAL_SetCurSel(infoPtr, &new_date); - } + MONTHCAL_Scroll(infoPtr, 12 * nmud->iDelta); + MONTHCAL_NotifyDayState(infoPtr); + MONTHCAL_NotifySelectionChange(infoPtr); } } return 0; @@ -2577,11 +2614,10 @@ MONTHCAL_GetUnicodeFormat(const MONTHCAL_INFO *infoPtr) static LRESULT WINAPI MONTHCAL_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { - MONTHCAL_INFO *infoPtr; + MONTHCAL_INFO *infoPtr = (MONTHCAL_INFO *)GetWindowLongPtrW(hwnd, 0); TRACE("hwnd=%p msg=%x wparam=%lx lparam=%lx\n", hwnd, uMsg, wParam, lParam); - infoPtr = MONTHCAL_GetInfoPtr(hwnd); if (!infoPtr && (uMsg != WM_CREATE)) return DefWindowProcW(hwnd, uMsg, wParam, lParam); switch(uMsg) diff --git a/reactos/dll/win32/comctl32/pager.c b/reactos/dll/win32/comctl32/pager.c index f3461fde88d..e1420e06ab5 100644 --- a/reactos/dll/win32/comctl32/pager.c +++ b/reactos/dll/win32/comctl32/pager.c @@ -99,11 +99,7 @@ PAGER_GetButtonRects(const PAGER_INFO* infoPtr, RECT* prcTopLeft, RECT* prcBotto GetWindowRect (infoPtr->hwndSelf, &rcWindow); if (bClientCoords) - { - POINT pt = {rcWindow.left, rcWindow.top}; - ScreenToClient(infoPtr->hwndSelf, &pt); - OffsetRect(&rcWindow, -(rcWindow.left-pt.x), -(rcWindow.top-pt.y)); - } + MapWindowPoints( 0, infoPtr->hwndSelf, (POINT *)&rcWindow, 2 ); else OffsetRect(&rcWindow, -rcWindow.left, -rcWindow.top); diff --git a/reactos/dll/win32/comctl32/progress.c b/reactos/dll/win32/comctl32/progress.c index c44b816a2b8..71fba9d4c05 100644 --- a/reactos/dll/win32/comctl32/progress.c +++ b/reactos/dll/win32/comctl32/progress.c @@ -29,11 +29,6 @@ * * TODO: * - * Messages: - * -- PBM_GETSTEP - * -- PBM_SETSTATE - * -- PBM_GETSTATE - * * Styles: * -- PBS_SMOOTHREVERSE * @@ -380,8 +375,7 @@ static LRESULT PROGRESS_Draw (PROGRESS_INFO *infoPtr, HDC hdc) if (pdi.theme) { GetWindowRect( infoPtr->Self, &pdi.bgRect ); - ScreenToClient( infoPtr->Self, (POINT*)&pdi.bgRect ); - ScreenToClient( infoPtr->Self, (POINT*)&pdi.bgRect.right ); + MapWindowPoints( infoPtr->Self, 0, (POINT*)&pdi.bgRect, 2 ); } if (!barSmooth) @@ -663,6 +657,9 @@ static LRESULT WINAPI ProgressWindowProc(HWND hwnd, UINT message, return oldStep; } + case PBM_GETSTEP: + return infoPtr->Step; + case PBM_STEPIT: { INT oldVal; @@ -708,6 +705,14 @@ static LRESULT WINAPI ProgressWindowProc(HWND hwnd, UINT message, case PBM_GETBKCOLOR: return infoPtr->ColorBk; + case PBM_SETSTATE: + if(wParam != PBST_NORMAL) + FIXME("state %04lx not yet handled\n", wParam); + return PBST_NORMAL; + + case PBM_GETSTATE: + return PBST_NORMAL; + case PBM_SETMARQUEE: if(wParam != 0) { diff --git a/reactos/dll/win32/comctl32/propsheet.c b/reactos/dll/win32/comctl32/propsheet.c index 3e313bad59e..2172a8507ad 100644 --- a/reactos/dll/win32/comctl32/propsheet.c +++ b/reactos/dll/win32/comctl32/propsheet.c @@ -613,7 +613,7 @@ static INT_PTR PROPSHEET_CreateDialog(PropSheetInfo* psInfo) DWORD resSize; WORD resID = IDD_PROPSHEET; - TRACE("\n"); + TRACE("(%p)\n", psInfo); if (psInfo->ppshheader.dwFlags & INTRNL_ANY_WIZARD) resID = IDD_WIZARD; @@ -1074,18 +1074,13 @@ static PADDING_INFO PROPSHEET_GetPaddingInfo(HWND hwndDlg) { HWND hwndTab = GetDlgItem(hwndDlg, IDC_TABCONTROL); RECT rcTab; - POINT tl; PADDING_INFO padding; GetWindowRect(hwndTab, &rcTab); + MapWindowPoints( 0, hwndDlg, (POINT *)&rcTab, 2 ); - tl.x = rcTab.left; - tl.y = rcTab.top; - - ScreenToClient(hwndDlg, &tl); - - padding.x = tl.x; - padding.y = tl.y; + padding.x = rcTab.left; + padding.y = rcTab.top; return padding; } @@ -1131,21 +1126,17 @@ static PADDING_INFO PROPSHEET_GetPaddingInfoWizard(HWND hwndDlg, const PropSheet hwndControl = GetDlgItem(hwndDlg, idButton); GetWindowRect(hwndControl, &rc); - + MapWindowPoints( 0, hwndDlg, (POINT *)&rc, 2 ); ptButton.x = rc.left; ptButton.y = rc.top; - ScreenToClient(hwndDlg, &ptButton); - /* Line */ hwndControl = GetDlgItem(hwndDlg, IDC_SUNKEN_LINE); GetWindowRect(hwndControl, &rc); - + MapWindowPoints( 0, hwndDlg, (POINT *)&rc, 2 ); ptLine.x = rc.left; ptLine.y = rc.bottom; - ScreenToClient(hwndDlg, &ptLine); - padding.y = ptButton.y - ptLine.y; if (padding.y < 0) @@ -2421,6 +2412,28 @@ static BOOL PROPSHEET_RemovePage(HWND hwndDlg, return FALSE; } +BOOL CALLBACK +EnumChildProc(HWND hwnd, LPARAM lParam) +{ + WCHAR szType[20]; + RealGetWindowClassW(hwnd, szType, 20); + + if (strcmpW(szType, WC_EDITW) == 0) + { + if (IsWindowEnabled(hwnd) && IsWindowVisible(hwnd)) + { + SetFocus(hwnd); + return FALSE; + } + } + else + { + EnumChildWindows(hwnd, EnumChildProc, 0); + } + + return TRUE; +} + /****************************************************************************** * PROPSHEET_SetWizButtons * @@ -2442,17 +2455,6 @@ static void PROPSHEET_SetWizButtons(HWND hwndDlg, DWORD dwFlags) EnableWindow(hwndNext, FALSE); EnableWindow(hwndFinish, FALSE); - /* set the default pushbutton to an enabled button */ - if (((dwFlags & PSWIZB_FINISH) || psInfo->hasFinish) && !(dwFlags & PSWIZB_DISABLEDFINISH)) - SendMessageW(hwndDlg, DM_SETDEFID, IDC_FINISH_BUTTON, 0); - else if (dwFlags & PSWIZB_NEXT) - SendMessageW(hwndDlg, DM_SETDEFID, IDC_NEXT_BUTTON, 0); - else if (dwFlags & PSWIZB_BACK) - SendMessageW(hwndDlg, DM_SETDEFID, IDC_BACK_BUTTON, 0); - else - SendMessageW(hwndDlg, DM_SETDEFID, IDCANCEL, 0); - - if (dwFlags & PSWIZB_BACK) EnableWindow(hwndBack, TRUE); @@ -2482,6 +2484,31 @@ static void PROPSHEET_SetWizButtons(HWND hwndDlg, DWORD dwFlags) } else if (!(dwFlags & PSWIZB_DISABLEDFINISH)) EnableWindow(hwndFinish, TRUE); + + /* set the default pushbutton to an enabled button and give it focus */ + if (((dwFlags & PSWIZB_FINISH) || psInfo->hasFinish) && !(dwFlags & PSWIZB_DISABLEDFINISH)) + { + SendMessageW(hwndDlg, DM_SETDEFID, IDC_FINISH_BUTTON, 0); + SetFocus(hwndFinish); + } + else if (dwFlags & PSWIZB_NEXT) + { + SendMessageW(hwndDlg, DM_SETDEFID, IDC_NEXT_BUTTON, 0); + SetFocus(hwndNext); + } + else if (dwFlags & PSWIZB_BACK) + { + SendMessageW(hwndDlg, DM_SETDEFID, IDC_BACK_BUTTON, 0); + SetFocus(hwndBack); + } + else + { + SendMessageW(hwndDlg, DM_SETDEFID, IDCANCEL, 0); + SetFocus(GetDlgItem(hwndDlg, IDCANCEL)); + } + + /* Now try to find an edit control that deserves focus */ + EnumChildWindows(PropSheet_GetCurrentPageHwnd(hwndDlg), EnumChildProc, 0); } /****************************************************************************** @@ -3415,10 +3442,7 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { /* set up the Next and Back buttons by default */ PROPSHEET_SetWizButtons(hwnd, PSWIZB_BACK|PSWIZB_NEXT); - SetFocus(GetDlgItem(hwnd, IDC_NEXT_BUTTON)); } - else - SetFocus(GetDlgItem(hwnd, IDOK)); /* Set up fonts */ SystemParametersInfoW (SPI_GETICONTITLELOGFONT, 0, &logFont, 0); @@ -3464,6 +3488,7 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) ShowWindow(hwndTabCtrl, SW_HIDE); PROPSHEET_AdjustSizeWizard(hwnd, psInfo); PROPSHEET_AdjustButtonsWizard(hwnd, psInfo); + SetFocus(GetDlgItem(hwnd, IDC_NEXT_BUTTON)); } else { @@ -3472,6 +3497,7 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) PROPSHEET_AdjustSize(hwnd, psInfo); PROPSHEET_AdjustButtons(hwnd, psInfo); } + SetFocus(GetDlgItem(hwnd, IDOK)); } if (IS_INTRESOURCE(psInfo->ppshheader.pszCaption) && diff --git a/reactos/dll/win32/comctl32/rebar.c b/reactos/dll/win32/comctl32/rebar.c index c254e34d8df..8e9c38b7a79 100644 --- a/reactos/dll/win32/comctl32/rebar.c +++ b/reactos/dll/win32/comctl32/rebar.c @@ -1180,8 +1180,6 @@ static void REBAR_SetRowRectsX(const REBAR_INFO *infoPtr, INT iBeginBand, INT iE for (i = iBeginBand; i < iEndBand; i = next_visible(infoPtr, i)) { REBAR_BAND *lpBand = REBAR_GetBand(infoPtr, i); - - lpBand = REBAR_GetBand(infoPtr, i); if (lpBand->rcBand.left != xPos || lpBand->rcBand.right != xPos + lpBand->cxEffective) { lpBand->fDraw |= NTF_INVALIDATE; TRACE("Setting rect %d to %d,%d\n", i, xPos, xPos + lpBand->cxEffective); @@ -1264,6 +1262,57 @@ static int REBAR_ShrinkBandsLTR(const REBAR_INFO *infoPtr, INT iBeginBand, INT i return cxShrink; } +/* Tries to move a band to a given offset within a row. */ +static int REBAR_MoveBandToRowOffset(REBAR_INFO *infoPtr, INT iBand, INT iFirstBand, + INT iLastBand, INT xOff, BOOL reorder) +{ + REBAR_BAND *insertBand = REBAR_GetBand(infoPtr, iBand); + int xPos = 0, i; + const BOOL setBreak = REBAR_GetBand(infoPtr, iFirstBand)->fStyle & RBBS_BREAK; + + /* Find the band's new position */ + if(reorder) + { + /* Used during an LR band reorder drag */ + for (i = iFirstBand; i < iLastBand; i = next_visible(infoPtr, i)) + { + if(xPos > xOff) + break; + xPos += REBAR_GetBand(infoPtr, i)->cxEffective + SEP_WIDTH; + } + } + else + { + /* Used during a UD band insertion drag */ + for (i = iFirstBand; i < iLastBand; i = next_visible(infoPtr, i)) + { + const REBAR_BAND *band = REBAR_GetBand(infoPtr, i); + if(xPos + band->cxMinBand / 2 > xOff) + break; + xPos += band->cxEffective + SEP_WIDTH; + } + } + + /* Move the band to its new position */ + DPA_DeletePtr(infoPtr->bands, iBand); + if(i > iBand) + i--; + DPA_InsertPtr(infoPtr->bands, i, insertBand); + + /* Ensure only the last band has the RBBS_BREAK flag set */ + insertBand->fStyle &= ~RBBS_BREAK; + if(setBreak) + REBAR_GetBand(infoPtr, iFirstBand)->fStyle |= RBBS_BREAK; + + /* Return the currently grabbed band */ + if(infoPtr->iGrabbedBand == iBand) + { + infoPtr->iGrabbedBand = i; + return i; + } + else return -1; +} + /* Set the heights of the visible bands in [iBeginBand; iEndBand) to the max height. iBeginBand must be visible */ static int REBAR_SetBandsHeight(const REBAR_INFO *infoPtr, INT iBeginBand, INT iEndBand, INT yStart) { @@ -2002,26 +2051,11 @@ REBAR_HandleLRDrag (REBAR_INFO *infoPtr, const POINT *ptsmove) /* Gripper drag within a row. It will not implement "out- */ /* of-row" drags. (They are detected and handled in */ /* REBAR_MouseMove.) */ - /* **** FIXME Switching order of bands in a row not **** */ - /* **** yet implemented. **** */ { REBAR_BAND *hitBand; INT iHitBand, iRowBegin, iRowEnd; - INT movement, xBand; - - /* on first significant mouse movement, issue notify */ - if (!(infoPtr->fStatus & BEGIN_DRAG_ISSUED)) { - if (REBAR_Notify_NMREBAR (infoPtr, -1, RBN_BEGINDRAG)) { - /* Notify returned TRUE - abort drag */ - infoPtr->dragStart.x = 0; - infoPtr->dragStart.y = 0; - infoPtr->dragNow = infoPtr->dragStart; - infoPtr->iGrabbedBand = -1; - ReleaseCapture (); - return ; - } - infoPtr->fStatus |= BEGIN_DRAG_ISSUED; - } + INT movement, xBand, cxLeft = 0; + BOOL shrunkBands = FALSE; iHitBand = infoPtr->iGrabbedBand; iRowBegin = get_row_begin_for_band(infoPtr, iHitBand); @@ -2032,21 +2066,44 @@ REBAR_HandleLRDrag (REBAR_INFO *infoPtr, const POINT *ptsmove) movement = (infoPtr->dwStyle&CCS_VERT ? ptsmove->y : ptsmove->x) - (xBand + REBAR_PRE_GRIPPER - infoPtr->ihitoffset); - if (movement < 0) { - INT cxLeft = REBAR_ShrinkBandsRTL(infoPtr, iRowBegin, iHitBand, -movement, TRUE); - hitBand->cxEffective += -movement - cxLeft; - hitBand->cx = hitBand->cxEffective; - } else if (movement > 0) { - INT prev; + /* Dragging the first band in a row cannot cause shrinking */ + if(iHitBand != iRowBegin) + { + if (movement < 0) { + cxLeft = REBAR_ShrinkBandsRTL(infoPtr, iRowBegin, iHitBand, -movement, TRUE); + + if(cxLeft < -movement) + { + hitBand->cxEffective += -movement - cxLeft; + hitBand->cx = hitBand->cxEffective; + shrunkBands = TRUE; + } + + } else if (movement > 0) { + + cxLeft = movement; + if (prev_visible(infoPtr, iHitBand) >= 0) + cxLeft = REBAR_ShrinkBandsLTR(infoPtr, iHitBand, iRowEnd, movement, TRUE); + + if(cxLeft < movement) + { + REBAR_BAND *lpPrev = REBAR_GetBand(infoPtr, prev_visible(infoPtr, iHitBand)); + lpPrev->cxEffective += movement - cxLeft; + lpPrev->cx = hitBand->cxEffective; + shrunkBands = TRUE; + } - if ((prev = prev_visible(infoPtr, iHitBand)) >= 0) { - INT cxLeft = REBAR_ShrinkBandsLTR(infoPtr, iHitBand, iRowEnd, movement, TRUE); - REBAR_BAND *lpPrev = REBAR_GetBand(infoPtr, prev_visible(infoPtr, iHitBand)); - lpPrev->cxEffective += movement - cxLeft; - lpPrev->cx = lpPrev->cxEffective; } } + if(!shrunkBands) + { + /* It was not possible to move the band by shrinking bands. + * Try relocating the band instead. */ + REBAR_MoveBandToRowOffset(infoPtr, iHitBand, iRowBegin, + iRowEnd, xBand + movement, TRUE); + } + REBAR_SetRowRectsX(infoPtr, iRowBegin, iRowEnd); if (infoPtr->dwStyle & CCS_VERT) REBAR_CalcVertBand(infoPtr, 0, infoPtr->uNumBands); @@ -2055,6 +2112,71 @@ REBAR_HandleLRDrag (REBAR_INFO *infoPtr, const POINT *ptsmove) REBAR_MoveChildWindows(infoPtr, iRowBegin, iRowEnd); } +static void +REBAR_HandleUDDrag (REBAR_INFO *infoPtr, const POINT *ptsmove) +{ + INT yOff = (infoPtr->dwStyle & CCS_VERT) ? ptsmove->x : ptsmove->y; + INT iHitBand, iRowBegin, iNextRowBegin; + REBAR_BAND *hitBand, *rowBeginBand; + + if(infoPtr->uNumBands <= 0) + ERR("There are no bands in this rebar"); + + /* Up/down dragging can only occur when there is more than one + * band in the rebar */ + if(infoPtr->uNumBands <= 1) + return; + + iHitBand = infoPtr->iGrabbedBand; + hitBand = REBAR_GetBand(infoPtr, iHitBand); + + /* If we're taking a band that has the RBBS_BREAK style set, this + * style needs to be reapplied to the band that is going to become + * the new start of the row. */ + if((hitBand->fStyle & RBBS_BREAK) && + (iHitBand < infoPtr->uNumBands - 1)) + REBAR_GetBand(infoPtr, iHitBand + 1)->fStyle |= RBBS_BREAK; + + if(yOff < 0) + { + /* Place the band above the current top row */ + DPA_DeletePtr(infoPtr->bands, iHitBand); + hitBand->fStyle &= RBBS_BREAK; + REBAR_GetBand(infoPtr, 0)->fStyle |= RBBS_BREAK; + infoPtr->iGrabbedBand = DPA_InsertPtr( + infoPtr->bands, 0, hitBand); + } + else if(yOff > REBAR_GetBand(infoPtr, infoPtr->uNumBands - 1)->rcBand.bottom) + { + /* Place the band below the current bottom row */ + DPA_DeletePtr(infoPtr->bands, iHitBand); + hitBand->fStyle |= RBBS_BREAK; + infoPtr->iGrabbedBand = DPA_InsertPtr( + infoPtr->bands, infoPtr->uNumBands - 1, hitBand); + } + else + { + /* Place the band in the prexisting row the mouse is hovering over */ + iRowBegin = first_visible(infoPtr); + while(iRowBegin < infoPtr->uNumBands) + { + iNextRowBegin = get_row_end_for_band(infoPtr, iRowBegin); + rowBeginBand = REBAR_GetBand(infoPtr, iRowBegin); + if(rowBeginBand->rcBand.bottom > yOff) + { + REBAR_MoveBandToRowOffset( + infoPtr, iHitBand, iRowBegin, iNextRowBegin, + ((infoPtr->dwStyle & CCS_VERT) ? ptsmove->y : ptsmove->x) + - REBAR_PRE_GRIPPER - infoPtr->ihitoffset, FALSE); + break; + } + + iRowBegin = iNextRowBegin; + } + } + + REBAR_Layout(infoPtr); +} /* << REBAR_BeginDrag >> */ @@ -2397,7 +2519,7 @@ REBAR_IdToIndex (const REBAR_INFO *infoPtr, UINT uId) static LRESULT -REBAR_InsertBandT(REBAR_INFO *infoPtr, INT iIndex, LPREBARBANDINFOW lprbbi, BOOL bUnicode) +REBAR_InsertBandT(REBAR_INFO *infoPtr, INT iIndex, const REBARBANDINFOW *lprbbi, BOOL bUnicode) { REBAR_BAND *lpBand; @@ -2613,7 +2735,7 @@ REBAR_strdifW( LPCWSTR a, LPCWSTR b ) } static LRESULT -REBAR_SetBandInfoT(REBAR_INFO *infoPtr, INT iBand, LPREBARBANDINFOW lprbbi, BOOL bUnicode) +REBAR_SetBandInfoT(REBAR_INFO *infoPtr, INT iBand, const REBARBANDINFOW *lprbbi, BOOL bUnicode) { REBAR_BAND *lpBand; UINT uChanged; @@ -2661,7 +2783,7 @@ REBAR_SetBandInfoT(REBAR_INFO *infoPtr, INT iBand, LPREBARBANDINFOW lprbbi, BOOL static LRESULT -REBAR_SetBarInfo (REBAR_INFO *infoPtr, LPREBARINFO lpInfo) +REBAR_SetBarInfo (REBAR_INFO *infoPtr, const REBARINFO *lpInfo) { REBAR_BAND *lpBand; UINT i; @@ -3025,25 +3147,36 @@ REBAR_MouseMove (REBAR_INFO *infoPtr, LPARAM lParam) /* if we are currently dragging a band */ if (infoPtr->iGrabbedBand >= 0) { - REBAR_BAND *band1 = NULL, *band2; + REBAR_BAND *band; int yPtMove = (infoPtr->dwStyle & CCS_VERT ? ptMove.x : ptMove.y); if (GetCapture() != infoPtr->hwndSelf) ERR("We are dragging but haven't got capture?!?\n"); - if (infoPtr->iGrabbedBand > 0) - band1 = REBAR_GetBand(infoPtr, infoPtr->iGrabbedBand - 1); - band2 = REBAR_GetBand(infoPtr, infoPtr->iGrabbedBand); + band = REBAR_GetBand(infoPtr, infoPtr->iGrabbedBand); /* if mouse did not move much, exit */ if ((abs(ptMove.x - infoPtr->dragNow.x) <= mindragx) && (abs(ptMove.y - infoPtr->dragNow.y) <= mindragy)) return 0; + /* on first significant mouse movement, issue notify */ + if (!(infoPtr->fStatus & BEGIN_DRAG_ISSUED)) { + if (REBAR_Notify_NMREBAR (infoPtr, -1, RBN_BEGINDRAG)) { + /* Notify returned TRUE - abort drag */ + infoPtr->dragStart.x = 0; + infoPtr->dragStart.y = 0; + infoPtr->dragNow = infoPtr->dragStart; + infoPtr->iGrabbedBand = -1; + ReleaseCapture (); + return 0; + } + infoPtr->fStatus |= BEGIN_DRAG_ISSUED; + } + /* Test for valid drag case - must not be first band in row */ - if ((yPtMove < band2->rcBand.top) || - (yPtMove > band2->rcBand.bottom) || - ((infoPtr->iGrabbedBand > 0) && (band1->iRow != band2->iRow))) { - FIXME("Cannot drag to other rows yet!!\n"); + if ((yPtMove < band->rcBand.top) || + (yPtMove > band->rcBand.bottom)) { + REBAR_HandleUDDrag (infoPtr, &ptMove); } else { REBAR_HandleLRDrag (infoPtr, &ptMove); @@ -3126,7 +3259,7 @@ REBAR_NCCalcSize (const REBAR_INFO *infoPtr, RECT *rect) static LRESULT -REBAR_NCCreate (HWND hwnd, LPCREATESTRUCTW cs) +REBAR_NCCreate (HWND hwnd, const CREATESTRUCTW *cs) { REBAR_INFO *infoPtr = REBAR_GetInfoPtr (hwnd); RECT wnrc1, clrc1; diff --git a/reactos/dll/win32/comctl32/rsrc.rc b/reactos/dll/win32/comctl32/rsrc.rc index a95d0fb531c..350834fded7 100644 --- a/reactos/dll/win32/comctl32/rsrc.rc +++ b/reactos/dll/win32/comctl32/rsrc.rc @@ -98,14 +98,14 @@ IDI_TT_ERROR_SM ICON idi_tt_error_sm.ico #include "comctl_Hu.rc" #include "comctl_It.rc" #include "comctl_Ko.rc" -#include "comctl_Nl.rc" -#include "comctl_No.rc" -#include "comctl_Pl.rc" -#include "comctl_Sk.rc" -#include "comctl_Sv.rc" -#include "comctl_Th.rc" -#include "comctl_Tr.rc" -#include "comctl_Uk.rc" +//#include "comctl_Nl.rc" +//#include "comctl_No.rc" +//#include "comctl_Pl.rc" +//#include "comctl_Sk.rc" +//#include "comctl_Sv.rc" +//#include "comctl_Th.rc" +//#include "comctl_Tr.rc" +//#include "comctl_Uk.rc" /* UTF-8 */ #include "comctl_Da.rc" diff --git a/reactos/dll/win32/comctl32/status.c b/reactos/dll/win32/comctl32/status.c index 1b69ef2d053..eeaf299f6b3 100644 --- a/reactos/dll/win32/comctl32/status.c +++ b/reactos/dll/win32/comctl32/status.c @@ -1047,7 +1047,10 @@ STATUSBAR_WMNCHitTest (const STATUS_INFO *infoPtr, INT x, INT y) rect.top += 2; if (PtInRect (&rect, pt)) - return HTBOTTOMRIGHT; + { + if (GetWindowLongW( infoPtr->Self, GWL_EXSTYLE ) & WS_EX_LAYOUTRTL) return HTBOTTOMLEFT; + else return HTBOTTOMRIGHT; + } } return HTERROR; diff --git a/reactos/dll/win32/comctl32/tab.c b/reactos/dll/win32/comctl32/tab.c index c99153eea31..fe82d59e90f 100644 --- a/reactos/dll/win32/comctl32/tab.c +++ b/reactos/dll/win32/comctl32/tab.c @@ -83,8 +83,10 @@ typedef struct BYTE extra[1]; /* Space for caller supplied info, variable size */ } TAB_ITEM; -/* The size of a tab item depends on how much extra data is requested */ -#define TAB_ITEM_SIZE(infoPtr) (FIELD_OFFSET(TAB_ITEM, extra[(infoPtr)->cbInfo])) +/* The size of a tab item depends on how much extra data is requested. + TCM_INSERTITEM always stores at least LPARAM sized data. */ +#define EXTRA_ITEM_SIZE(infoPtr) (max((infoPtr)->cbInfo, sizeof(LPARAM))) +#define TAB_ITEM_SIZE(infoPtr) FIELD_OFFSET(TAB_ITEM, extra[EXTRA_ITEM_SIZE(infoPtr)]) typedef struct { @@ -1163,14 +1165,14 @@ static void TAB_SetItemBounds (TAB_INFO *infoPtr) if (!(infoPtr->fHeightSet)) { int item_height; - int icon_height = 0; + INT icon_height = 0, cx; /* Use the current font to determine the height of a tab. */ GetTextMetricsW(hdc, &fontMetrics); /* Get the icon height */ if (infoPtr->himl) - ImageList_GetIconSize(infoPtr->himl, 0, &icon_height); + ImageList_GetIconSize(infoPtr->himl, &cx, &icon_height); /* Take the highest between font or icon */ if (fontMetrics.tmHeight > icon_height) @@ -1195,7 +1197,9 @@ static void TAB_SetItemBounds (TAB_INFO *infoPtr) /* Get the icon width */ if (infoPtr->himl) { - ImageList_GetIconSize(infoPtr->himl, &icon_width, 0); + INT cy; + + ImageList_GetIconSize(infoPtr->himl, &icon_width, &cy); if (infoPtr->dwStyle & TCS_FIXEDWIDTH) icon_width += 4; @@ -1726,7 +1730,7 @@ TAB_DrawItemInterior(const TAB_INFO *infoPtr, HDC hdc, INT iItem, RECT *drawRect /* * if owner draw, tell the owner to draw */ - if ((infoPtr->dwStyle & TCS_OWNERDRAWFIXED) && GetParent(infoPtr->hwnd)) + if ((infoPtr->dwStyle & TCS_OWNERDRAWFIXED) && IsWindow(infoPtr->hwndNotify)) { DRAWITEMSTRUCT dis; UINT id; @@ -1739,14 +1743,9 @@ TAB_DrawItemInterior(const TAB_INFO *infoPtr, HDC hdc, INT iItem, RECT *drawRect drawRect->left += 1; } - /* - * get the control id - */ id = (UINT)GetWindowLongPtrW( infoPtr->hwnd, GWLP_ID ); - /* - * put together the DRAWITEMSTRUCT - */ + /* fill DRAWITEMSTRUCT */ dis.CtlType = ODT_TAB; dis.CtlID = id; dis.itemID = iItem; @@ -1759,11 +1758,18 @@ TAB_DrawItemInterior(const TAB_INFO *infoPtr, HDC hdc, INT iItem, RECT *drawRect dis.hwndItem = infoPtr->hwnd; dis.hDC = hdc; CopyRect(&dis.rcItem,drawRect); - dis.itemData = (ULONG_PTR)TAB_GetItem(infoPtr, iItem)->extra; - /* - * send the draw message - */ + /* when extra data fits ULONG_PTR, store it directly */ + if (infoPtr->cbInfo > sizeof(LPARAM)) + dis.itemData = (ULONG_PTR) TAB_GetItem(infoPtr, iItem)->extra; + else + { + /* this could be considered broken on 64 bit, but that's how it works - + only first 4 bytes are copied */ + memcpy(&dis.itemData, (ULONG_PTR*)TAB_GetItem(infoPtr, iItem)->extra, 4); + } + + /* draw notification */ SendMessageW( infoPtr->hwndNotify, WM_DRAWITEM, id, (LPARAM)&dis ); } else @@ -2620,7 +2626,7 @@ static inline LRESULT TAB_Paint (TAB_INFO *infoPtr, HDC hdcPaint) } static LRESULT -TAB_InsertItemT (TAB_INFO *infoPtr, INT iItem, TCITEMW *pti, BOOL bUnicode) +TAB_InsertItemT (TAB_INFO *infoPtr, INT iItem, const TCITEMW *pti, BOOL bUnicode) { TAB_ITEM *item; RECT rect; @@ -2684,10 +2690,10 @@ TAB_InsertItemT (TAB_INFO *infoPtr, INT iItem, TCITEMW *pti, BOOL bUnicode) item->iImage = -1; if (pti->mask & TCIF_PARAM) - memcpy(item->extra, &pti->lParam, infoPtr->cbInfo); + memcpy(item->extra, &pti->lParam, EXTRA_ITEM_SIZE(infoPtr)); else - memset(item->extra, 0, infoPtr->cbInfo); - + memset(item->extra, 0, EXTRA_ITEM_SIZE(infoPtr)); + TAB_SetItemBounds(infoPtr); if (infoPtr->uNumItem > 1) TAB_InvalidateTabArea(infoPtr); @@ -3188,15 +3194,8 @@ TAB_SetItemExtra (TAB_INFO *infoPtr, INT cbInfo) { TRACE("(%p %d)\n", infoPtr, cbInfo); - if (cbInfo <= 0) - return FALSE; + if (cbInfo < 0 || infoPtr->uNumItem) return FALSE; - if (infoPtr->uNumItem) - { - /* FIXME: MSDN says this is not allowed, but this hasn't been verified */ - return FALSE; - } - infoPtr->cbInfo = cbInfo; return TRUE; } diff --git a/reactos/dll/win32/comctl32/toolbar.c b/reactos/dll/win32/comctl32/toolbar.c index 9b41732c289..0b9dec24ee0 100644 --- a/reactos/dll/win32/comctl32/toolbar.c +++ b/reactos/dll/win32/comctl32/toolbar.c @@ -2900,13 +2900,27 @@ TOOLBAR_AddStringW (TOOLBAR_INFO *infoPtr, HINSTANCE hInstance, LPARAM lParam) BOOL fFirstString = (infoPtr->nNumStrings == 0); INT nIndex = infoPtr->nNumStrings; - if (hInstance && IS_INTRESOURCE(lParam)) { + TRACE("%p, %lx\n", hInstance, lParam); + + if (IS_INTRESOURCE(lParam)) { WCHAR szString[MAX_RESOURCE_STRING_LENGTH]; WCHAR delimiter; WCHAR *next_delim; + HRSRC hrsrc; WCHAR *p; INT len; - TRACE("adding string from resource!\n"); + + TRACE("adding string from resource\n"); + + if (!hInstance) return -1; + + hrsrc = FindResourceW( hInstance, MAKEINTRESOURCEW((LOWORD(lParam) >> 4) + 1), + (LPWSTR)RT_STRING ); + if (!hrsrc) + { + TRACE("string not found in resources\n"); + return -1; + } len = LoadStringW (hInstance, (UINT)lParam, szString, MAX_RESOURCE_STRING_LENGTH); @@ -2915,7 +2929,7 @@ TOOLBAR_AddStringW (TOOLBAR_INFO *infoPtr, HINSTANCE hInstance, LPARAM lParam) if (len == 0 || len == 1) return nIndex; - TRACE("Delimiter: 0x%x\n", *szString); + TRACE("delimiter: 0x%x\n", *szString); delimiter = *szString; p = szString + 1; @@ -2941,7 +2955,7 @@ TOOLBAR_AddStringW (TOOLBAR_INFO *infoPtr, HINSTANCE hInstance, LPARAM lParam) if (p == NULL) return -1; - TRACE("adding string(s) from array!\n"); + TRACE("adding string(s) from array\n"); while (*p) { len = strlenW (p); @@ -2968,14 +2982,16 @@ TOOLBAR_AddStringA (TOOLBAR_INFO *infoPtr, HINSTANCE hInstance, LPARAM lParam) INT nIndex; INT len; - if (hInstance && IS_INTRESOURCE(lParam)) /* load from resources */ + TRACE("%p, %lx\n", hInstance, lParam); + + if (IS_INTRESOURCE(lParam)) /* load from resources */ return TOOLBAR_AddStringW(infoPtr, hInstance, lParam); p = (LPSTR)lParam; if (p == NULL) return -1; - TRACE("adding string(s) from array!\n"); + TRACE("adding string(s) from array\n"); nIndex = infoPtr->nNumStrings; while (*p) { len = strlen (p); @@ -3033,7 +3049,7 @@ TOOLBAR_AutoSize (TOOLBAR_INFO *infoPtr) if ((infoPtr->dwStyle & CCS_BOTTOM) == CCS_NOMOVEY) { GetWindowRect(infoPtr->hwndSelf, &window_rect); - ScreenToClient(parent, (LPPOINT)&window_rect.left); + MapWindowPoints( 0, parent, (POINT *)&window_rect, 2 ); y = window_rect.top; } if ((infoPtr->dwStyle & CCS_BOTTOM) == CCS_BOTTOM) diff --git a/reactos/dll/win32/comctl32/tooltips.c b/reactos/dll/win32/comctl32/tooltips.c index 688d3b5ec44..49e20cf3515 100644 --- a/reactos/dll/win32/comctl32/tooltips.c +++ b/reactos/dll/win32/comctl32/tooltips.c @@ -636,7 +636,8 @@ TOOLTIPS_Show (TOOLTIPS_INFO *infoPtr, BOOL track_activate) if (!(style & TTS_BALLOON)) rect.top -= (size.cy / 2); } - infoPtr->bToolBelow = TRUE; + if (!(infoPtr->bToolBelow = (infoPtr->yTrackPos + size.cy <= GetSystemMetrics(SM_CYSCREEN)))) + rect.top -= size.cy; if (!(toolPtr->uFlags & TTF_ABSOLUTE)) { @@ -1430,7 +1431,7 @@ TOOLTIPS_HitTestT (const TOOLTIPS_INFO *infoPtr, LPTTHITTESTINFOW lptthit, static LRESULT -TOOLTIPS_NewToolRectT (TOOLTIPS_INFO *infoPtr, const TTTOOLINFOW *ti, BOOL isW) +TOOLTIPS_NewToolRectT (TOOLTIPS_INFO *infoPtr, const TTTOOLINFOW *ti) { INT nTool; @@ -1840,15 +1841,7 @@ TOOLTIPS_UpdateTipTextT (TOOLTIPS_INFO *infoPtr, const TTTOOLINFOW *ti, BOOL isW static LRESULT -TOOLTIPS_WindowFromPoint (HWND hwnd, WPARAM wParam, LPARAM lParam) -{ - return (LRESULT)WindowFromPoint (*((LPPOINT)lParam)); -} - - - -static LRESULT -TOOLTIPS_Create (HWND hwnd, const CREATESTRUCTW *lpcs) +TOOLTIPS_Create (HWND hwnd) { TOOLTIPS_INFO *infoPtr; @@ -1944,7 +1937,7 @@ TOOLTIPS_MouseMessage (TOOLTIPS_INFO *infoPtr) static LRESULT -TOOLTIPS_NCCreate (HWND hwnd, const CREATESTRUCTW *lpcs) +TOOLTIPS_NCCreate (HWND hwnd) { DWORD dwStyle = GetWindowLongW (hwnd, GWL_STYLE); DWORD dwExStyle = GetWindowLongW (hwnd, GWL_EXSTYLE); @@ -1986,7 +1979,32 @@ TOOLTIPS_NCHitTest (const TOOLTIPS_INFO *infoPtr, WPARAM wParam, LPARAM lParam) static LRESULT TOOLTIPS_NotifyFormat (TOOLTIPS_INFO *infoPtr, WPARAM wParam, LPARAM lParam) { - FIXME ("hwnd=%p wParam=%lx lParam=%lx\n", infoPtr->hwndSelf, wParam, lParam); + TTTOOL_INFO *toolPtr = infoPtr->tools; + LRESULT nResult; + + TRACE("infoPtr=%p wParam=%lx lParam=%p\n", infoPtr, wParam, (PVOID)lParam); + + if (lParam == NF_QUERY) { + if (toolPtr->bNotifyUnicode) { + return NFR_UNICODE; + } else { + return NFR_ANSI; + } + } + else if (lParam == NF_REQUERY) { + nResult = SendMessageW (toolPtr->hwnd, WM_NOTIFYFORMAT, + (WPARAM)infoPtr->hwndSelf, (LPARAM)NF_QUERY); + if (nResult == NFR_ANSI) { + toolPtr->bNotifyUnicode = FALSE; + TRACE(" -- WM_NOTIFYFORMAT returns: NFR_ANSI\n"); + } else if (nResult == NFR_UNICODE) { + toolPtr->bNotifyUnicode = TRUE; + TRACE(" -- WM_NOTIFYFORMAT returns: NFR_UNICODE\n"); + } else { + TRACE (" -- WM_NOTIFYFORMAT returns: error!\n"); + } + return nResult; + } return 0; } @@ -2220,8 +2238,8 @@ TOOLTIPS_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) uMsg == TTM_HITTESTW); case TTM_NEWTOOLRECTA: case TTM_NEWTOOLRECTW: - return TOOLTIPS_NewToolRectT (infoPtr, (LPTTTOOLINFOW)lParam, - uMsg == TTM_NEWTOOLRECTW); + return TOOLTIPS_NewToolRectT (infoPtr, (LPTTTOOLINFOW)lParam); + case TTM_POP: return TOOLTIPS_Pop (infoPtr); @@ -2268,11 +2286,10 @@ TOOLTIPS_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) uMsg == TTM_UPDATETIPTEXTW); case TTM_WINDOWFROMPOINT: - return TOOLTIPS_WindowFromPoint (hwnd, wParam, lParam); - + return (LRESULT)WindowFromPoint (*((LPPOINT)lParam)); case WM_CREATE: - return TOOLTIPS_Create (hwnd, (LPCREATESTRUCTW)lParam); + return TOOLTIPS_Create (hwnd); case WM_DESTROY: return TOOLTIPS_Destroy (infoPtr); @@ -2300,7 +2317,7 @@ TOOLTIPS_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) return TOOLTIPS_MouseMessage (infoPtr); case WM_NCCREATE: - return TOOLTIPS_NCCreate (hwnd, (LPCREATESTRUCTW)lParam); + return TOOLTIPS_NCCreate (hwnd); case WM_NCHITTEST: return TOOLTIPS_NCHitTest (infoPtr, wParam, lParam); diff --git a/reactos/dll/win32/comctl32/treeview.c b/reactos/dll/win32/comctl32/treeview.c index c3b43c4ad13..de692bc1674 100644 --- a/reactos/dll/win32/comctl32/treeview.c +++ b/reactos/dll/win32/comctl32/treeview.c @@ -33,7 +33,8 @@ * * missing styles: TVS_FULLROWSELECT, TVS_INFOTIP, TVS_RTLREADING, * - * missing item styles: TVIS_CUT, TVIS_EXPANDPARTIAL + * missing item styles: TVIS_CUT, TVIS_EXPANDPARTIAL, TVIS_EX_FLAT, + * TVIS_EX_DISABLED * * Make the insertion mark look right. * Scroll (instead of repaint) as much as possible. @@ -69,6 +70,10 @@ WINE_DEFAULT_DEBUG_CHANNEL(treeview); typedef struct _TREEITEM /* HTREEITEM is a _TREEINFO *. */ { + HTREEITEM parent; /* handle to parent or 0 if at root */ + HTREEITEM nextSibling; /* handle to next item in list, 0 if last */ + HTREEITEM firstChild; /* handle to first child or 0 if no child */ + UINT callbackMask; UINT state; UINT stateMask; @@ -81,11 +86,8 @@ typedef struct _TREEITEM /* HTREEITEM is a _TREEINFO *. */ LPARAM lParam; int iIntegral; /* item height multiplier (1 is normal) */ int iLevel; /* indentation level:0=root level */ - HTREEITEM parent; /* handle to parent or 0 if at root */ - HTREEITEM firstChild; /* handle to first child or 0 if no child */ HTREEITEM lastChild; HTREEITEM prevSibling; /* handle to prev item in list, 0 if first */ - HTREEITEM nextSibling; /* handle to next item in list, 0 if last */ RECT rect; LONG linesOffset; LONG stateOffset; @@ -488,10 +490,10 @@ static INT get_notifycode(const TREEVIEW_INFO *infoPtr, INT code) } static inline BOOL -TREEVIEW_SendRealNotify(const TREEVIEW_INFO *infoPtr, WPARAM wParam, LPARAM lParam) +TREEVIEW_SendRealNotify(const TREEVIEW_INFO *infoPtr, WPARAM wParam, LPNMHDR pnmh) { - TRACE("wParam=%ld, lParam=%ld\n", wParam, lParam); - return SendMessageW(infoPtr->hwndNotify, WM_NOTIFY, wParam, lParam); + TRACE("wParam=%ld, lParam=%p\n", wParam, pnmh); + return SendMessageW(infoPtr->hwndNotify, WM_NOTIFY, wParam, (LPARAM)pnmh); } static BOOL @@ -505,7 +507,7 @@ TREEVIEW_SendSimpleNotify(const TREEVIEW_INFO *infoPtr, UINT code) nmhdr.idFrom = GetWindowLongPtrW(hwnd, GWLP_ID); nmhdr.code = get_notifycode(infoPtr, code); - return TREEVIEW_SendRealNotify(infoPtr, nmhdr.idFrom, (LPARAM)&nmhdr); + return TREEVIEW_SendRealNotify(infoPtr, nmhdr.idFrom, &nmhdr); } static VOID @@ -568,7 +570,7 @@ TREEVIEW_SendTreeviewNotify(const TREEVIEW_INFO *infoPtr, UINT code, UINT action nmhdr.ptDrag.x = 0; nmhdr.ptDrag.y = 0; - ret = TREEVIEW_SendRealNotify(infoPtr, nmhdr.hdr.idFrom, (LPARAM)&nmhdr); + ret = TREEVIEW_SendRealNotify(infoPtr, nmhdr.hdr.idFrom, &nmhdr.hdr); if (!infoPtr->bNtfUnicode) { Free(nmhdr.itemOld.pszText); @@ -598,7 +600,7 @@ TREEVIEW_SendTreeviewDnDNotify(const TREEVIEW_INFO *infoPtr, UINT code, nmhdr.ptDrag.x = pt.x; nmhdr.ptDrag.y = pt.y; - return TREEVIEW_SendRealNotify(infoPtr, nmhdr.hdr.idFrom, (LPARAM)&nmhdr); + return TREEVIEW_SendRealNotify(infoPtr, nmhdr.hdr.idFrom, &nmhdr.hdr); } @@ -626,7 +628,7 @@ TREEVIEW_SendCustomDrawNotify(const TREEVIEW_INFO *infoPtr, DWORD dwDrawStage, nmcdhdr.clrTextBk = infoPtr->clrBk; nmcdhdr.iLevel = 0; - return TREEVIEW_SendRealNotify(infoPtr, nmcd->hdr.idFrom, (LPARAM)&nmcdhdr); + return TREEVIEW_SendRealNotify(infoPtr, nmcd->hdr.idFrom, &nmcdhdr.nmcd.hdr); } @@ -670,7 +672,7 @@ TREEVIEW_SendCustomDrawItemNotify(const TREEVIEW_INFO *infoPtr, HDC hdc, nmcd->dwDrawStage, nmcd->hdc, nmcd->dwItemSpec, nmcd->uItemState, nmcd->lItemlParam); - return TREEVIEW_SendRealNotify(infoPtr, nmcd->hdr.idFrom, (LPARAM)nmcdhdr); + return TREEVIEW_SendRealNotify(infoPtr, nmcd->hdr.idFrom, &nmcdhdr->nmcd.hdr); } static BOOL @@ -687,7 +689,7 @@ TREEVIEW_BeginLabelEditNotify(const TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *editI TREEVIEW_TVItemFromItem(infoPtr, TVIF_HANDLE | TVIF_STATE | TVIF_PARAM | TVIF_TEXT, &tvdi.item, editItem); - ret = TREEVIEW_SendRealNotify(infoPtr, tvdi.hdr.idFrom, (LPARAM)&tvdi); + ret = TREEVIEW_SendRealNotify(infoPtr, tvdi.hdr.idFrom, &tvdi.hdr); if (!infoPtr->bNtfUnicode) Free(tvdi.item.pszText); @@ -725,7 +727,8 @@ TREEVIEW_UpdateDispInfo(const TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *wineItem, if (mask & TVIF_TEXT) wineItem->textWidth = 0; - TREEVIEW_SendRealNotify(infoPtr, callback.hdr.idFrom, (LPARAM)&callback); + TREEVIEW_SendRealNotify(infoPtr, callback.hdr.idFrom, &callback.hdr); + TRACE("resulting code 0x%08x\n", callback.hdr.code); /* It may have changed due to a call to SetItem. */ mask &= wineItem->callbackMask; @@ -733,7 +736,7 @@ TREEVIEW_UpdateDispInfo(const TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *wineItem, if ((mask & TVIF_TEXT) && callback.item.pszText != wineItem->pszText) { /* Instead of copying text into our buffer user specified its own */ - if (!infoPtr->bNtfUnicode) { + if (!infoPtr->bNtfUnicode && (callback.hdr.code == TVN_GETDISPINFOA)) { LPWSTR newText; int buflen; int len = MultiByteToWideChar( CP_ACP, 0, @@ -774,7 +777,7 @@ TREEVIEW_UpdateDispInfo(const TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *wineItem, } else if (mask & TVIF_TEXT) { /* User put text into our buffer, that is ok unless A string */ - if (!infoPtr->bNtfUnicode) { + if (!infoPtr->bNtfUnicode && (callback.hdr.code == TVN_GETDISPINFOA)) { LPWSTR newText; LPWSTR oldText = NULL; int buflen; @@ -1005,7 +1008,7 @@ TREEVIEW_AllocateItem(const TREEVIEW_INFO *infoPtr) * inc/dec to toggle the images. */ newItem->iImage = 0; newItem->iSelectedImage = 0; - newItem->iExpandedImage = 0; + newItem->iExpandedImage = (WORD)I_IMAGENONE; if (DPA_InsertPtr(infoPtr->items, INT_MAX, newItem) == -1) { @@ -1478,12 +1481,12 @@ TREEVIEW_RemoveItem(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *wineItem) { TRACE("%p, (%s)\n", wineItem, TREEVIEW_ItemName(wineItem)); - TREEVIEW_SendTreeviewNotify(infoPtr, TVN_DELETEITEMW, TVC_UNKNOWN, - TVIF_HANDLE | TVIF_PARAM, wineItem, 0); - if (wineItem->firstChild) TREEVIEW_RemoveAllChildren(infoPtr, wineItem); + TREEVIEW_SendTreeviewNotify(infoPtr, TVN_DELETEITEMW, TVC_UNKNOWN, + TVIF_HANDLE | TVIF_PARAM, wineItem, 0); + TREEVIEW_UnlinkItem(wineItem); infoPtr->uNumItems--; @@ -1512,7 +1515,7 @@ TREEVIEW_DeleteItem(TREEVIEW_INFO *infoPtr, HTREEITEM wineItem) TREEVIEW_ITEM *parent, *prev = NULL; BOOL visible = FALSE; - if (wineItem == TVI_ROOT) + if (wineItem == TVI_ROOT || !wineItem) { TRACE("TVI_ROOT\n"); parent = infoPtr->root; @@ -1827,7 +1830,7 @@ TREEVIEW_SetItemHeight(TREEVIEW_INFO *infoPtr, INT newHeight) { INT prevHeight = infoPtr->uItemHeight; - TRACE("%d\n", newHeight); + TRACE("new=%d, old=%d\n", newHeight, prevHeight); if (newHeight == -1) { infoPtr->uItemHeight = TREEVIEW_NaturalHeight(infoPtr); @@ -1835,13 +1838,17 @@ TREEVIEW_SetItemHeight(TREEVIEW_INFO *infoPtr, INT newHeight) } else { - infoPtr->uItemHeight = newHeight; - infoPtr->bHeightSet = TRUE; + if (newHeight == 0) newHeight = 1; + infoPtr->uItemHeight = newHeight; + infoPtr->bHeightSet = TRUE; } /* Round down, unless we support odd ("non even") heights. */ - if (!(infoPtr->dwStyle & TVS_NONEVENHEIGHT)) - infoPtr->uItemHeight &= ~1; + if (!(infoPtr->dwStyle & TVS_NONEVENHEIGHT) && infoPtr->uItemHeight != 1) + { + infoPtr->uItemHeight &= ~1; + TRACE("after rounding=%d\n", infoPtr->uItemHeight); + } if (infoPtr->uItemHeight != prevHeight) { @@ -2061,6 +2068,7 @@ static inline LRESULT TREEVIEW_GetVisibleCount(const TREEVIEW_INFO *infoPtr) { /* Surprise! This does not take integral height into account. */ + TRACE("client=%d, item=%d\n", infoPtr->clientHeight, infoPtr->uItemHeight); return infoPtr->clientHeight / infoPtr->uItemHeight; } @@ -2142,6 +2150,13 @@ TREEVIEW_GetItemT(const TREEVIEW_INFO *infoPtr, LPTVITEMEXW tvItem, BOOL isW) } } } + + if (tvItem->mask & TVIF_STATEEX) + { + FIXME("Extended item state not supported, returning 0.\n"); + tvItem->uStateEx = 0; + } + TRACE("item <%p>, txt %p, img %p, mask %x\n", wineItem, tvItem->pszText, &tvItem->iImage, tvItem->mask); @@ -2575,7 +2590,7 @@ TREEVIEW_DrawItem(const TREEVIEW_INFO *infoPtr, HDC hdc, TREEVIEW_ITEM *wineItem /* The item is currently selected */ imageIndex = wineItem->iSelectedImage; } - else if ((wineItem->state & TVIS_EXPANDED) && (wineItem->iExpandedImage >= 0)) + else if ((wineItem->state & TVIS_EXPANDED) && (wineItem->iExpandedImage != (WORD)I_IMAGENONE)) { /* The item is currently not selected but expanded */ imageIndex = wineItem->iExpandedImage; @@ -2878,6 +2893,7 @@ TREEVIEW_Refresh(TREEVIEW_INFO *infoPtr, HDC hdc, const RECT *rc) } } + // // This is correct, but is causes and infinite loop of WM_PAINT messages, resulting // in continuous painting of the scroll bar in reactos. Comment out until the real // bug is found @@ -2917,6 +2933,7 @@ TREEVIEW_Paint(TREEVIEW_INFO *infoPtr, HDC hdc_ref) { hdc = hdc_ref; GetClientRect(infoPtr->hwnd, &rc); + TREEVIEW_FillBkgnd(infoPtr, hdc, &rc); } else { @@ -3309,7 +3326,7 @@ TREEVIEW_Collapse(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *wineItem, static BOOL TREEVIEW_Expand(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *wineItem, - BOOL bExpandPartial, BOOL bUser) + BOOL partial, BOOL user) { LONG scrollDist; LONG orgNextTop = 0; @@ -3317,7 +3334,7 @@ TREEVIEW_Expand(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *wineItem, TREEVIEW_ITEM *nextItem, *tmpItem; BOOL sendsNotifications; - TRACE("(%p, %p, partial=%d, %d\n", infoPtr, wineItem, bExpandPartial, bUser); + TRACE("(%p, %p, partial=%d, %d\n", infoPtr, wineItem, partial, user); if (wineItem->state & TVIS_EXPANDED) return TRUE; @@ -3338,7 +3355,7 @@ TREEVIEW_Expand(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *wineItem, TRACE("TVE_EXPAND %p %s\n", wineItem, TREEVIEW_ItemName(wineItem)); - sendsNotifications = bUser || ((wineItem->cChildren != 0) && + sendsNotifications = user || ((wineItem->cChildren != 0) && !(wineItem->state & TVIS_EXPANDEDONCE)); if (sendsNotifications) { @@ -3353,7 +3370,7 @@ TREEVIEW_Expand(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *wineItem, wineItem->state |= TVIS_EXPANDED; - if (bExpandPartial) + if (partial) FIXME("TVE_EXPANDPARTIAL not implemented\n"); if (ISVISIBLE(wineItem)) @@ -3419,6 +3436,58 @@ TREEVIEW_Expand(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *wineItem, return TRUE; } +/* Handler for TVS_SINGLEEXPAND behaviour. Used on response + to mouse messages and TVM_SELECTITEM. + + selection - previously selected item, used to collapse a part of a tree + item - new selected item +*/ +static void TREEVIEW_SingleExpand(TREEVIEW_INFO *infoPtr, + HTREEITEM selection, HTREEITEM item) +{ + TREEVIEW_ITEM *SelItem; + + if ((infoPtr->dwStyle & TVS_SINGLEEXPAND) == 0 || infoPtr->hwndEdit || !item) return; + + TREEVIEW_SendTreeviewNotify(infoPtr, TVN_SINGLEEXPAND, TVC_UNKNOWN, TVIF_HANDLE | TVIF_PARAM, item, 0); + + /* + * Close the previous selection all the way to the root + * as long as the new selection is not a child + */ + if(selection && (selection != item)) + { + BOOL closeit = TRUE; + SelItem = item; + + /* determine if the hitItem is a child of the currently selected item */ + while(closeit && SelItem && TREEVIEW_ValidItem(infoPtr, SelItem) && + (SelItem->parent != infoPtr->root)) + { + closeit = (SelItem != selection); + SelItem = SelItem->parent; + } + + if(closeit) + { + if(TREEVIEW_ValidItem(infoPtr, selection)) + SelItem = selection; + + while(SelItem && (SelItem != item) && TREEVIEW_ValidItem(infoPtr, SelItem) && + SelItem->parent != infoPtr->root) + { + TREEVIEW_Collapse(infoPtr, SelItem, FALSE, FALSE); + SelItem = SelItem->parent; + } + } + } + + /* + * Expand the current item + */ + TREEVIEW_Expand(infoPtr, item, FALSE, FALSE); +} + static BOOL TREEVIEW_Toggle(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *wineItem, BOOL bUser) { @@ -3865,7 +3934,7 @@ TREEVIEW_EndEditLabelNow(TREEVIEW_INFO *infoPtr, BOOL bCancel) tvdi.item.cchTextMax = 0; } - bCommit = TREEVIEW_SendRealNotify(infoPtr, tvdi.hdr.idFrom, (LPARAM)&tvdi); + bCommit = TREEVIEW_SendRealNotify(infoPtr, tvdi.hdr.idFrom, &tvdi.hdr); if (!bCancel && bCommit) /* Apply the changes */ { @@ -4136,58 +4205,11 @@ TREEVIEW_LButtonDown(TREEVIEW_INFO *infoPtr, LPARAM lParam) } else if (ht.flags & (TVHT_ONITEMICON|TVHT_ONITEMLABEL)) /* select the item if the hit was inside of the icon or text */ { - /* - * if we are TVS_SINGLEEXPAND then we want this single click to - * do a bunch of things. - */ - if((infoPtr->dwStyle & TVS_SINGLEEXPAND) && - (infoPtr->hwndEdit == 0)) - { - TREEVIEW_ITEM *SelItem; - - /* - * Send the notification - */ - TREEVIEW_SendTreeviewNotify(infoPtr, TVN_SINGLEEXPAND, TVC_UNKNOWN, TVIF_HANDLE | TVIF_PARAM, ht.hItem, 0); - - /* - * Close the previous selection all the way to the root - * as long as the new selection is not a child - */ - if((infoPtr->selectedItem) - && (infoPtr->selectedItem != ht.hItem)) - { - BOOL closeit = TRUE; - SelItem = ht.hItem; - - /* determine if the hitItem is a child of the currently selected item */ - while(closeit && SelItem && TREEVIEW_ValidItem(infoPtr, SelItem) && (SelItem != infoPtr->root)) - { - closeit = (SelItem != infoPtr->selectedItem); - SelItem = SelItem->parent; - } - - if(closeit) - { - if(TREEVIEW_ValidItem(infoPtr, infoPtr->selectedItem)) - SelItem = infoPtr->selectedItem; - - while(SelItem && (SelItem != ht.hItem) && TREEVIEW_ValidItem(infoPtr, SelItem) && (SelItem != infoPtr->root)) - { - TREEVIEW_Collapse(infoPtr, SelItem, FALSE, FALSE); - SelItem = SelItem->parent; - } - } - } - - /* - * Expand the current item - */ - TREEVIEW_Expand(infoPtr, ht.hItem, TVE_TOGGLE, FALSE); - } + TREEVIEW_ITEM *selection = infoPtr->selectedItem; /* Select the current item */ TREEVIEW_DoSelectItem(infoPtr, TVGN_CARET, ht.hItem, TVC_BYMOUSE); + TREEVIEW_SingleExpand(infoPtr, selection, ht.hItem); } else if (ht.flags & TVHT_ONITEMSTATEICON) { @@ -4350,6 +4372,9 @@ TREEVIEW_DoSelectItem(TREEVIEW_INFO *infoPtr, INT action, HTREEITEM newSelect, switch (action) { + case TVGN_CARET|TVSI_NOSINGLEEXPAND: + FIXME("TVSI_NOSINGLEEXPAND specified.\n"); + /* Fall through */ case TVGN_CARET: prevSelect = infoPtr->selectedItem; @@ -4419,7 +4444,9 @@ TREEVIEW_DoSelectItem(TREEVIEW_INFO *infoPtr, INT action, HTREEITEM newSelect, static LRESULT TREEVIEW_SelectItem(TREEVIEW_INFO *infoPtr, INT wParam, HTREEITEM item) { - if (item != NULL && !TREEVIEW_ValidItem(infoPtr, item)) + TREEVIEW_ITEM *selection = infoPtr->selectedItem; + + if (item && !TREEVIEW_ValidItem(infoPtr, item)) return FALSE; TRACE("%p (%s) %d\n", item, TREEVIEW_ItemName(item), wParam); @@ -4427,6 +4454,8 @@ TREEVIEW_SelectItem(TREEVIEW_INFO *infoPtr, INT wParam, HTREEITEM item) if (!TREEVIEW_DoSelectItem(infoPtr, wParam, item, TVC_UNKNOWN)) return FALSE; + TREEVIEW_SingleExpand(infoPtr, selection, item); + return TRUE; } @@ -5474,7 +5503,7 @@ TREEVIEW_SetCursor(const TREEVIEW_INFO *infoPtr, WPARAM wParam, LPARAM lParam) nmmouse.pt.x = 0; nmmouse.pt.y = 0; nmmouse.dwHitInfo = lParam; - if (TREEVIEW_SendRealNotify(infoPtr, nmmouse.hdr.idFrom, (LPARAM)&nmmouse)) + if (TREEVIEW_SendRealNotify(infoPtr, nmmouse.hdr.idFrom, &nmmouse.hdr)) return 0; if (item && (infoPtr->dwStyle & TVS_TRACKSELECT)) @@ -5824,10 +5853,10 @@ TREEVIEW_Unregister(void) /* Tree Verification ****************************************************/ static inline void -TREEVIEW_VerifyChildren(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *item); +TREEVIEW_VerifyChildren(TREEVIEW_INFO *infoPtr, const TREEVIEW_ITEM *item); static inline void TREEVIEW_VerifyItemCommon(TREEVIEW_INFO *infoPtr, - TREEVIEW_ITEM *item) + const TREEVIEW_ITEM *item) { assert(infoPtr != NULL); assert(item != NULL); @@ -5866,7 +5895,7 @@ static inline void TREEVIEW_VerifyItemCommon(TREEVIEW_INFO *infoPtr, } static inline void -TREEVIEW_VerifyItem(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *item) +TREEVIEW_VerifyItem(TREEVIEW_INFO *infoPtr, const TREEVIEW_ITEM *item) { assert(item != NULL); @@ -5882,9 +5911,9 @@ TREEVIEW_VerifyItem(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *item) } static inline void -TREEVIEW_VerifyChildren(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *item) +TREEVIEW_VerifyChildren(TREEVIEW_INFO *infoPtr, const TREEVIEW_ITEM *item) { - TREEVIEW_ITEM *child; + const TREEVIEW_ITEM *child; assert(item != NULL); for (child = item->firstChild; child != NULL; child = child->nextSibling) diff --git a/reactos/media/doc/README.WINE b/reactos/media/doc/README.WINE index adaff2f0e71..1385a5967a6 100644 --- a/reactos/media/doc/README.WINE +++ b/reactos/media/doc/README.WINE @@ -48,7 +48,7 @@ reactos/dll/win32/browseui # Out of sync reactos/dll/win32/cabinet # Autosync reactos/dll/win32/clusapi # Autosync reactos/dll/win32/comcat # Autosync -reactos/dll/win32/comctl32 # Autosync +reactos/dll/win32/comctl32 # Synced to Wine 1.3.14 reactos/dll/win32/comdlg32 # Autosync reactos/dll/win32/compstui # Autosync reactos/dll/win32/credui # Autosync From 947127151c4845b9694050da195816a3b89f12c8 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Thu, 24 Feb 2011 09:40:07 +0000 Subject: [PATCH 133/287] [RTL/DPH] - Implement user flags/values and HeapSize APIs in debug page heap (nearly the same code in all three functions). With these done, DPH core features are complete. Some debugging is still needed. svn path=/trunk/; revision=50888 --- reactos/lib/rtl/heappage.c | 143 ++++++++++++++++++++++++++++++++++--- 1 file changed, 133 insertions(+), 10 deletions(-) diff --git a/reactos/lib/rtl/heappage.c b/reactos/lib/rtl/heappage.c index 7631833ac51..15b3431a7cc 100644 --- a/reactos/lib/rtl/heappage.c +++ b/reactos/lib/rtl/heappage.c @@ -2066,8 +2066,39 @@ RtlpPageHeapGetUserInfo(PVOID HeapHandle, PVOID *UserValue, PULONG UserFlags) { - UNIMPLEMENTED; - return FALSE; + PDPH_HEAP_ROOT DphRoot; + PDPH_HEAP_BLOCK Node; + + /* Get a pointer to the heap root */ + DphRoot = RtlpDphPointerFromHandle(HeapHandle); + if (!DphRoot) return FALSE; + + /* Add heap flags */ + Flags |= DphRoot->HeapFlags; + + /* Acquire the heap lock */ + RtlpDphPreProcessing(DphRoot, Flags); + + /* Find busy memory */ + Node = RtlpDphFindBusyMemory(DphRoot, BaseAddress); + + if (!Node) + { + /* This block was not found in page heap, try a normal heap instead */ + //RtlpDphNormalHeapGetUserInfo(); + ASSERT(FALSE); + return FALSE; + } + + /* Get user values and flags and store them in user provided pointers */ + if (UserValue) *UserValue = Node->UserValue; + if (UserFlags) *UserFlags = Node->UserFlags; + + /* Leave the heap lock */ + RtlpDphPostProcessing(DphRoot); + + /* Return success */ + return TRUE; } BOOLEAN NTAPI @@ -2076,8 +2107,38 @@ RtlpPageHeapSetUserValue(PVOID HeapHandle, PVOID BaseAddress, PVOID UserValue) { - UNIMPLEMENTED; - return FALSE; + PDPH_HEAP_ROOT DphRoot; + PDPH_HEAP_BLOCK Node; + + /* Get a pointer to the heap root */ + DphRoot = RtlpDphPointerFromHandle(HeapHandle); + if (!DphRoot) return FALSE; + + /* Add heap flags */ + Flags |= DphRoot->HeapFlags; + + /* Acquire the heap lock */ + RtlpDphPreProcessing(DphRoot, Flags); + + /* Find busy memory */ + Node = RtlpDphFindBusyMemory(DphRoot, BaseAddress); + + if (!Node) + { + /* This block was not found in page heap, try a normal heap instead */ + //RtlpDphNormalHeapSetUserValue(); + ASSERT(FALSE); + return FALSE; + } + + /* Get user values and flags and store them in user provided pointers */ + Node->UserValue = UserValue; + + /* Leave the heap lock */ + RtlpDphPostProcessing(DphRoot); + + /* Return success */ + return TRUE; } BOOLEAN @@ -2088,17 +2149,79 @@ RtlpPageHeapSetUserFlags(PVOID HeapHandle, ULONG UserFlagsReset, ULONG UserFlagsSet) { - UNIMPLEMENTED; - return FALSE; + PDPH_HEAP_ROOT DphRoot; + PDPH_HEAP_BLOCK Node; + + /* Get a pointer to the heap root */ + DphRoot = RtlpDphPointerFromHandle(HeapHandle); + if (!DphRoot) return FALSE; + + /* Add heap flags */ + Flags |= DphRoot->HeapFlags; + + /* Acquire the heap lock */ + RtlpDphPreProcessing(DphRoot, Flags); + + /* Find busy memory */ + Node = RtlpDphFindBusyMemory(DphRoot, BaseAddress); + + if (!Node) + { + /* This block was not found in page heap, try a normal heap instead */ + //RtlpDphNormalHeapSetUserFlags(); + ASSERT(FALSE); + return FALSE; + } + + /* Get user values and flags and store them in user provided pointers */ + Node->UserFlags &= ~(UserFlagsReset); + Node->UserFlags |= UserFlagsSet; + + /* Leave the heap lock */ + RtlpDphPostProcessing(DphRoot); + + /* Return success */ + return TRUE; } SIZE_T NTAPI -RtlpPageHeapSize(HANDLE HeapPtr, +RtlpPageHeapSize(HANDLE HeapHandle, ULONG Flags, - PVOID Ptr) + PVOID BaseAddress) { - UNIMPLEMENTED; - return 0; + PDPH_HEAP_ROOT DphRoot; + PDPH_HEAP_BLOCK Node; + SIZE_T Size; + + /* Get a pointer to the heap root */ + DphRoot = RtlpDphPointerFromHandle(HeapHandle); + if (!DphRoot) return -1; + + /* Add heap flags */ + Flags |= DphRoot->HeapFlags; + + /* Acquire the heap lock */ + RtlpDphPreProcessing(DphRoot, Flags); + + /* Find busy memory */ + Node = RtlpDphFindBusyMemory(DphRoot, BaseAddress); + + if (!Node) + { + /* This block was not found in page heap, try a normal heap instead */ + //RtlpDphNormalHeapSize(); + ASSERT(FALSE); + return -1; + } + + /* Get heap block size */ + Size = Node->nUserRequestedSize; + + /* Leave the heap lock */ + RtlpDphPostProcessing(DphRoot); + + /* Return user requested size */ + return Size; } /* EOF */ From ec00eda9bf05cc706b9417ddca0879f411abb985 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 24 Feb 2011 12:34:59 +0000 Subject: [PATCH 134/287] [COMCTL32] - Fix include order of resources. - remove comctl_Cn.rc, it contains and outdated simplified chineese translation, that wine has in comctl_Zh.rc svn path=/trunk/; revision=50890 --- reactos/dll/win32/comctl32/comctl_Cn.rc | 90 ------------------------- reactos/dll/win32/comctl32/rsrc.rc | 22 +++--- 2 files changed, 12 insertions(+), 100 deletions(-) delete mode 100644 reactos/dll/win32/comctl32/comctl_Cn.rc diff --git a/reactos/dll/win32/comctl32/comctl_Cn.rc b/reactos/dll/win32/comctl32/comctl_Cn.rc deleted file mode 100644 index a9fa9979bed..00000000000 --- a/reactos/dll/win32/comctl32/comctl_Cn.rc +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2002 Tisheng Chen - * - * 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 - */ - -LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED -#pragma code_page(936) - -IDD_PROPSHEET DIALOG DISCARDABLE 0, 0, 220, 140 -STYLE DS_CONTEXTHELP | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE -CAPTION " %s" -FONT 8, "MS Shell Dlg" -BEGIN - DEFPUSHBUTTON "ȷ", IDOK,4,122,50,14, WS_TABSTOP | WS_GROUP - PUSHBUTTON "ȡ", IDCANCEL,58,122,50,14 - PUSHBUTTON "Ӧ(&A)", 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 "Wizard" -FONT 8, "MS Shell Dlg" -BEGIN - PUSHBUTTON "< һ(&B)", IDC_BACK_BUTTON,71,138,50,14 - DEFPUSHBUTTON "һ(&N) >", 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 -END - - -IDD_TBCUSTOMIZE DIALOG DISCARDABLE 10, 20, 357, 125 -STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Զ幤" -FONT 8, "MS Shell Dlg" -BEGIN - DEFPUSHBUTTON "ر(&C)", IDCANCEL,308,6,44,14 - PUSHBUTTON "(&e)", IDC_RESET_BTN,308,23,44,14 - PUSHBUTTON "(&H)", IDC_HELP_BTN,308,40,44,14 - PUSHBUTTON "(&U)", IDC_MOVEUP_BTN,308,74,44,14 - PUSHBUTTON "(&D)", IDC_MOVEDN_BTN,308,91,44,14 - LTEXT "ùť(&V):", -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 "(&A) ->", IDOK, 131, 42, 44, 14 - PUSHBUTTON "<- ɾ(&R)", IDC_REMOVE_BTN,131,62,44,14 - LTEXT "ǰť(&T):", -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 "ر" -} - -STRINGTABLE DISCARDABLE -{ - IDM_TODAY "Today:" - IDM_GOTODAY "Go to today" -} - -STRINGTABLE DISCARDABLE -{ - IDS_SEPARATOR "ָ" -} - -STRINGTABLE DISCARDABLE -{ - HKY_NONE "None" -} - -#pragma code_page(default) diff --git a/reactos/dll/win32/comctl32/rsrc.rc b/reactos/dll/win32/comctl32/rsrc.rc index 350834fded7..903c147bf55 100644 --- a/reactos/dll/win32/comctl32/rsrc.rc +++ b/reactos/dll/win32/comctl32/rsrc.rc @@ -94,24 +94,26 @@ IDI_TT_ERROR_SM ICON idi_tt_error_sm.ico #include "comctl_Cs.rc" #include "comctl_El.rc" #include "comctl_En.rc" +#include "comctl_Eo.rc" #include "comctl_Es.rc" #include "comctl_Hu.rc" -#include "comctl_It.rc" -#include "comctl_Ko.rc" -//#include "comctl_Nl.rc" -//#include "comctl_No.rc" -//#include "comctl_Pl.rc" -//#include "comctl_Sk.rc" -//#include "comctl_Sv.rc" -//#include "comctl_Th.rc" -//#include "comctl_Tr.rc" -//#include "comctl_Uk.rc" +#include "comctl_Nl.rc" +#include "comctl_No.rc" +#include "comctl_Pl.rc" +#include "comctl_Sk.rc" +#include "comctl_Sv.rc" +#include "comctl_Th.rc" +#include "comctl_Tr.rc" +#include "comctl_Uk.rc" /* UTF-8 */ #include "comctl_Da.rc" #include "comctl_De.rc" #include "comctl_Fr.rc" +#include "comctl_He.rc" +#include "comctl_It.rc" #include "comctl_Ja.rc" +#include "comctl_Ko.rc" #include "comctl_Lt.rc" #include "comctl_Pt.rc" #include "comctl_Ro.rc" From 098228ac32db96d64bdb3589bd697af9bbc8cfe1 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Thu, 24 Feb 2011 12:35:44 +0000 Subject: [PATCH 135/287] [PING] - Add Ukrainian translation by Eugene Sakara. svn path=/trunk/; revision=50891 --- .../applications/network/ping/lang/uk-UA.rc | 43 +++++++++++++++++++ .../base/applications/network/ping/ping.rc | 1 + 2 files changed, 44 insertions(+) create mode 100644 reactos/base/applications/network/ping/lang/uk-UA.rc diff --git a/reactos/base/applications/network/ping/lang/uk-UA.rc b/reactos/base/applications/network/ping/lang/uk-UA.rc new file mode 100644 index 00000000000..18cd3e6acd8 --- /dev/null +++ b/reactos/base/applications/network/ping/lang/uk-UA.rc @@ -0,0 +1,43 @@ +/* + * PROJECT: Ping for ReactOS + * LICENSE: GPL - See COPYING in the top level directory + * FILE: base/applications/network/ping/lang/uk-UA.rc + * PURPOSE: Ukraianian Language File for Ping + * TRANSLATORS: Sakara Eugene + */ + +LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT + +STRINGTABLE DISCARDABLE +BEGIN + IDS_USAGE "\n: ping [-t] [-n count] [-l size] [-w timeout] \n\n\ +:\n\ + -t ϳ .\n\ + Control-C.\n\ + -n count , .\n\ + -l size .\n\ + -w timeout .\n\n\0" + + IDS_PING_WITH_BYTES "\n %1 [%2] %3!d! :\n\n\0" + IDS_PING_STATISTICS "\n Ping %1:\n\0" + IDS_PACKETS_SENT_RECEIVED_LOST " : = %1!d!, = %2!d!, = %3!d! (%4!d!%% ),\n\0" + IDS_APPROXIMATE_ROUND_TRIP " -:\n\0" + IDS_MIN_MAX_AVERAGE " ̳ = %1, = %2, = %3\n\0" + IDS_NOT_ENOUGH_RESOURCES " .\n\0" + IDS_UNKNOWN_HOST " %1.\n\0" + IDS_SETSOCKOPT_FAILED "setsockopt (%1!d!).\n\0" + IDS_COULD_NOT_CREATE_SOCKET " (#%1!d!).\n\0" + IDS_COULD_NOT_INIT_WINSOCK " winsock dll.\n\0" + IDS_DEST_MUST_BE_SPECIFIED "' IP- .\n\0" + IDS_BAD_PARAMETER " %1.\n\0" + IDS_BAD_OPTION_FORMAT " %1.\n\0" + IDS_BAD_OPTION " %1.\n\0" + IDS_BAD_VALUE_OPTION_L " -l, 0 %1!d!.\n\0" + IDS_REPLY_FROM "³ %1: =%2!d! %3%4 TTL=%5!d!\n\0" + IDS_DEST_UNREACHABLE " .\n\0" + IDS_COULD_NOT_TRANSMIT " (%1!d!).\n\0" + IDS_COULD_NOT_RECV " (%1!d!).\n\0" + IDS_REQUEST_TIMEOUT " .\n\0" + IDS_MS "\0" + IDS_1MS "1\0" +END diff --git a/reactos/base/applications/network/ping/ping.rc b/reactos/base/applications/network/ping/ping.rc index 0cc7ddf1792..3f25d017260 100644 --- a/reactos/base/applications/network/ping/ping.rc +++ b/reactos/base/applications/network/ping/ping.rc @@ -13,3 +13,4 @@ #include "lang/fr-FR.rc" #include "lang/pl-PL.rc" #include "lang/it-IT.rc" +#include "lang/uk-UA.rc" From 8383b6b33ddd6ef4c72bc3c684f6fdedc7f24a7a Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Thu, 24 Feb 2011 12:59:52 +0000 Subject: [PATCH 136/287] [RTL/DPH] - Implement ValidateHeap API for DPH. Fixes attempts to validate DPH as a normal heap. svn path=/trunk/; revision=50892 --- reactos/lib/rtl/heap.c | 4 ++- reactos/lib/rtl/heap.h | 6 ++++ reactos/lib/rtl/heappage.c | 68 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+), 1 deletion(-) diff --git a/reactos/lib/rtl/heap.c b/reactos/lib/rtl/heap.c index 9b0a6f7e8f4..31bab04c095 100644 --- a/reactos/lib/rtl/heap.c +++ b/reactos/lib/rtl/heap.c @@ -3707,7 +3707,9 @@ BOOLEAN NTAPI RtlValidateHeap( BOOLEAN HeapLocked = FALSE; BOOLEAN HeapValid; - // FIXME Check for special heap + /* Check for page heap */ + if (Heap->ForceFlags & HEAP_FLAG_PAGE_ALLOCS) + return RtlpDebugPageHeapValidate(HeapPtr, Flags, Block); /* Check signature */ if (Heap->Signature != HEAP_SIGNATURE) diff --git a/reactos/lib/rtl/heap.h b/reactos/lib/rtl/heap.h index 4ea5f098620..8038ed8642e 100644 --- a/reactos/lib/rtl/heap.h +++ b/reactos/lib/rtl/heap.h @@ -435,6 +435,12 @@ RtlpPageHeapSetUserFlags(PVOID HeapHandle, ULONG UserFlagsReset, ULONG UserFlagsSet); +BOOLEAN +NTAPI +RtlpDebugPageHeapValidate(PVOID HeapPtr, + ULONG Flags, + PVOID Block); + SIZE_T NTAPI RtlpPageHeapSize(HANDLE HeapPtr, ULONG Flags, diff --git a/reactos/lib/rtl/heappage.c b/reactos/lib/rtl/heappage.c index 15b3431a7cc..19b536e6885 100644 --- a/reactos/lib/rtl/heappage.c +++ b/reactos/lib/rtl/heappage.c @@ -191,6 +191,10 @@ RtlpDphIsNormalFreeHeapBlock(PVOID Block, PULONG ValidationInformation, BOOLEAN VOID NTAPI RtlpDphReportCorruptedBlock(PDPH_HEAP_ROOT DphRoot, ULONG Reserved, PVOID Block, ULONG ValidationInfo); +BOOLEAN NTAPI +RtlpDphNormalHeapValidate(PDPH_HEAP_ROOT DphRoot, ULONG Flags, PVOID BaseAddress); + + VOID NTAPI RtlpDphRaiseException(NTSTATUS Status) { @@ -2224,4 +2228,68 @@ RtlpPageHeapSize(HANDLE HeapHandle, return Size; } +BOOLEAN +NTAPI +RtlpDebugPageHeapValidate(PVOID HeapHandle, + ULONG Flags, + PVOID BaseAddress) +{ + PDPH_HEAP_ROOT DphRoot; + PDPH_HEAP_BLOCK Node = NULL; + BOOLEAN Valid = FALSE; + + /* Get a pointer to the heap root */ + DphRoot = RtlpDphPointerFromHandle(HeapHandle); + if (!DphRoot) return -1; + + /* Add heap flags */ + Flags |= DphRoot->HeapFlags; + + /* Acquire the heap lock */ + RtlpDphPreProcessing(DphRoot, Flags); + + /* Find busy memory */ + if (BaseAddress) + Node = RtlpDphFindBusyMemory(DphRoot, BaseAddress); + + if (!Node) + { + /* This block was not found in page heap, or the request is to validate all normal heap */ + Valid = RtlpDphNormalHeapValidate(DphRoot, Flags, BaseAddress); + } + + /* Leave the heap lock */ + RtlpDphPostProcessing(DphRoot); + + /* Return result of a normal heap validation */ + if (BaseAddress && !Node) + return Valid; + + /* Otherwise return our own result */ + if (!BaseAddress || Node) Valid = TRUE; + + return Valid; +} + +BOOLEAN +NTAPI +RtlpDphNormalHeapValidate(PDPH_HEAP_ROOT DphRoot, + ULONG Flags, + PVOID BaseAddress) +{ + PDPH_BLOCK_INFORMATION BlockInfo = (PDPH_BLOCK_INFORMATION)BaseAddress - 1; + if (!BaseAddress) + { + /* Validate all normal heap */ + return RtlValidateHeap(DphRoot->NormalHeap, Flags, NULL); + } + + // FIXME: Check is this a normal heap block + /*if (!RtlpDphIsNormalHeapBlock(DphRoot, BaseAddress, &ValidationInfo)) + { + }*/ + + return RtlValidateHeap(DphRoot->NormalHeap, Flags, BlockInfo); +} + /* EOF */ From d7df20df47bc3023a19d350e8886306e73be7630 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 24 Feb 2011 14:18:55 +0000 Subject: [PATCH 137/287] [WIN32K] Fix possible lock leak in failure case of NtGdiSetBoundsRect. Fixes a failed assertion spotted by r3ddr4g0n. svn path=/trunk/; revision=50893 --- reactos/subsystems/win32/win32k/objects/dcutil.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/reactos/subsystems/win32/win32k/objects/dcutil.c b/reactos/subsystems/win32/win32k/objects/dcutil.c index 4b172c01892..ba220929134 100644 --- a/reactos/subsystems/win32/win32k/objects/dcutil.c +++ b/reactos/subsystems/win32/win32k/objects/dcutil.c @@ -540,6 +540,7 @@ NtGdiSetBoundsRect( } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { + DC_UnlockDc(pdc); _SEH2_YIELD(return 0;) } _SEH2_END; @@ -550,6 +551,6 @@ NtGdiSetBoundsRect( if (flags & DCB_ENABLE) pdc->fs |= DC_ACCUM_APP; if (flags & DCB_DISABLE) pdc->fs &= ~DC_ACCUM_APP; - DC_UnlockDc( pdc ); + DC_UnlockDc(pdc); return ret; } From 753b99d8a5022437f146acd52a38ab5542f88184 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Thu, 24 Feb 2011 14:38:16 +0000 Subject: [PATCH 138/287] [WDMAUD.DRV] - Set wave in pins into run state - Fixes hang of ReactOS sndrec32, though it crashes then instantly. Needs more investigation svn path=/trunk/; revision=50894 --- reactos/dll/win32/wdmaud.drv/legacy.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/reactos/dll/win32/wdmaud.drv/legacy.c b/reactos/dll/win32/wdmaud.drv/legacy.c index 0c05fabbb0e..f1d01e795ba 100644 --- a/reactos/dll/win32/wdmaud.drv/legacy.c +++ b/reactos/dll/win32/wdmaud.drv/legacy.c @@ -528,18 +528,18 @@ WdmAudSetWaveDeviceFormatByLegacy( Instance->BufferCount = 100; } - if (DeviceType == WAVE_OUT_DEVICE_TYPE) - { - /* Now start the stream */ - DeviceInfo.u.State = KSSTATE_RUN; - SyncOverlappedDeviceIoControl(KernelHandle, - IOCTL_SETDEVICE_STATE, - (LPVOID) &DeviceInfo, - sizeof(WDMAUD_DEVICE_INFO), - (LPVOID) &DeviceInfo, - sizeof(WDMAUD_DEVICE_INFO), - NULL); - } + /* Now acquire resources */ + DeviceInfo.u.State = KSSTATE_ACQUIRE; + SyncOverlappedDeviceIoControl(KernelHandle, IOCTL_SETDEVICE_STATE, (LPVOID) &DeviceInfo, sizeof(WDMAUD_DEVICE_INFO), (LPVOID) &DeviceInfo, sizeof(WDMAUD_DEVICE_INFO), NULL); + + /* pause the pin */ + DeviceInfo.u.State = KSSTATE_PAUSE; + SyncOverlappedDeviceIoControl(KernelHandle, IOCTL_SETDEVICE_STATE, (LPVOID) &DeviceInfo, sizeof(WDMAUD_DEVICE_INFO), (LPVOID) &DeviceInfo, sizeof(WDMAUD_DEVICE_INFO), NULL); + + /* start the pin */ + DeviceInfo.u.State = KSSTATE_RUN; + SyncOverlappedDeviceIoControl(KernelHandle, IOCTL_SETDEVICE_STATE, (LPVOID) &DeviceInfo, sizeof(WDMAUD_DEVICE_INFO), (LPVOID) &DeviceInfo, sizeof(WDMAUD_DEVICE_INFO), NULL); + return MMSYSERR_NOERROR; } From 5b6ab375ee9a3e50b2e68f21d24d0213d61e45b6 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Thu, 24 Feb 2011 22:50:00 +0000 Subject: [PATCH 139/287] [SECUR32] - Don't leave packageinfo uninitialized. Even though it's not the way it should work, wine's rpcrt4 doesn't really expect that function to return no packages at all. Should prevent freeing an unitialized pointer. See issue #5778 for more details. svn path=/trunk/; revision=50895 --- reactos/dll/win32/secur32/sspi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/dll/win32/secur32/sspi.c b/reactos/dll/win32/secur32/sspi.c index 4bbc757630f..af4cdc28bb1 100644 --- a/reactos/dll/win32/secur32/sspi.c +++ b/reactos/dll/win32/secur32/sspi.c @@ -80,7 +80,7 @@ EnumerateSecurityPackagesW ( SECURITY_STATUS ret = SEC_E_OK; *pcPackages = 0; - + *ppPackageInfo = NULL; /* if (packageTable) { @@ -113,7 +113,7 @@ EnumerateSecurityPackagesA( } */ FreeContextBuffer(info); } - + *ppPackageInfo = NULL; UNIMPLEMENTED; return ret; From e1d7a14438f33a873c53d0d696f0e2737483f92c Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 25 Feb 2011 00:01:35 +0000 Subject: [PATCH 140/287] =?UTF-8?q?[[WIN32K]=20Fix=20biCompression=20filed?= =?UTF-8?q?=20in=20the=20DIBSECTION=20structure,=20returned=20by=20BITMAP?= =?UTF-8?q?=5FGetObject.=20Fixes=20K-Meleon=20toobar.=20Kudos=20for=20the?= =?UTF-8?q?=20fix=20go=20to=20Rafa=C5=82=20Harabie=C5=84.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See issue #5940 for more details. svn path=/trunk/; revision=50896 --- .../subsystems/win32/win32k/objects/bitmaps.c | 70 +++++++++++-------- 1 file changed, 40 insertions(+), 30 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/bitmaps.c b/reactos/subsystems/win32/win32k/objects/bitmaps.c index 0b3f56e7d6f..583b9514f4d 100644 --- a/reactos/subsystems/win32/win32k/objects/bitmaps.c +++ b/reactos/subsystems/win32/win32k/objects/bitmaps.c @@ -920,36 +920,46 @@ BITMAP_GetObject(SURFACE *psurf, INT Count, LPVOID buffer) pds->dsBmih.biHeight = pds->dsBm.bmHeight; pds->dsBmih.biPlanes = pds->dsBm.bmPlanes; pds->dsBmih.biBitCount = pds->dsBm.bmBitsPixel; - if(psurf->ppal->flFlags & PAL_BITFIELDS) - { - pds->dsBmih.biCompression = BI_BITFIELDS; - } - else - { - switch (psurf->SurfObj.iBitmapFormat) - { - case BMF_1BPP: - case BMF_4BPP: - case BMF_8BPP: - case BMF_16BPP: - case BMF_24BPP: - case BMF_32BPP: - pds->dsBmih.biCompression = BI_RGB; - break; - case BMF_4RLE: - pds->dsBmih.biCompression = BI_RLE4; - break; - case BMF_8RLE: - pds->dsBmih.biCompression = BI_RLE8; - break; - case BMF_JPEG: - pds->dsBmih.biCompression = BI_JPEG; - break; - case BMF_PNG: - pds->dsBmih.biCompression = BI_PNG; - break; - } - } + + switch (psurf->SurfObj.iBitmapFormat) + { + case BMF_1BPP: + case BMF_4BPP: + case BMF_8BPP: + case BMF_24BPP: + pds->dsBmih.biCompression = BI_RGB; + break; + + case BMF_16BPP: + if (psurf->ppal->flFlags & PAL_RGB16_555) + pds->dsBmih.biCompression = BI_RGB; + else + pds->dsBmih.biCompression = BI_BITFIELDS; + break; + + case BMF_32BPP: + if (psurf->ppal->flFlags & PAL_RGB) + pds->dsBmih.biCompression = BI_RGB; + else + pds->dsBmih.biCompression = BI_BITFIELDS; + break; + + case BMF_4RLE: + pds->dsBmih.biCompression = BI_RLE4; + break; + case BMF_8RLE: + pds->dsBmih.biCompression = BI_RLE8; + break; + case BMF_JPEG: + pds->dsBmih.biCompression = BI_JPEG; + break; + case BMF_PNG: + pds->dsBmih.biCompression = BI_PNG; + break; + default: + ASSERT(FALSE); /* this shouldn't happen */ + } + pds->dsBmih.biSizeImage = psurf->SurfObj.cjBits; pds->dsBmih.biXPelsPerMeter = 0; pds->dsBmih.biYPelsPerMeter = 0; From c50e27e4bf38a54462da36e479872e0878d706f6 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Fri, 25 Feb 2011 14:10:31 +0000 Subject: [PATCH 141/287] [MMEBUDDY] - Store the internal state if an audio stream has been stopped - Construct a thread when WODM_RESTART is received. This thread then triggers performs a callback to the wave thread, which finally restarts playback - Only start the wave thread when playback is active (not paused by WODM_PAUSE) - Fixes playback in Winamp 5.601 despite graphical issues - Tested in Vbox 4.0 + 512MB RAM + Winamp 5.601 svn path=/trunk/; revision=50897 --- reactos/include/reactos/libs/sound/mmebuddy.h | 4 +++ reactos/lib/drivers/sound/mmebuddy/mmewrap.c | 15 ++++++++ .../lib/drivers/sound/mmebuddy/wave/header.c | 12 +++++-- .../drivers/sound/mmebuddy/wave/streaming.c | 34 +++++++++++++++++++ 4 files changed, 63 insertions(+), 2 deletions(-) diff --git a/reactos/include/reactos/libs/sound/mmebuddy.h b/reactos/include/reactos/libs/sound/mmebuddy.h index 90b89ef1198..d1139c7d867 100644 --- a/reactos/include/reactos/libs/sound/mmebuddy.h +++ b/reactos/include/reactos/libs/sound/mmebuddy.h @@ -366,6 +366,7 @@ typedef struct _SOUND_DEVICE_INSTANCE HANDLE hStopEvent; HANDLE hResetEvent; BOOL ResetInProgress; + BOOL bPaused; } SOUND_DEVICE_INSTANCE, *PSOUND_DEVICE_INSTANCE; /* This lives in WAVEHDR.reserved */ @@ -702,6 +703,9 @@ MMRESULT StopStreaming( IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance); +VOID +InitiateSoundStreaming( + IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance); /* kernel.c diff --git a/reactos/lib/drivers/sound/mmebuddy/mmewrap.c b/reactos/lib/drivers/sound/mmebuddy/mmewrap.c index 9e03770c175..5b651540bde 100644 --- a/reactos/lib/drivers/sound/mmebuddy/mmewrap.c +++ b/reactos/lib/drivers/sound/mmebuddy/mmewrap.c @@ -29,6 +29,7 @@ MmeSetState( PMMFUNCTION_TABLE FunctionTable; PSOUND_DEVICE SoundDevice; PSOUND_DEVICE_INSTANCE SoundDeviceInstance; + BOOL OldState; VALIDATE_MMSYS_PARAMETER( PrivateHandle ); SoundDeviceInstance = (PSOUND_DEVICE_INSTANCE) PrivateHandle; @@ -53,6 +54,20 @@ MmeSetState( /* Try change state */ Result = FunctionTable->SetState(SoundDeviceInstance, bStart); + if ( MMSUCCESS(Result) ) + { + /* Get old audio stream state */ + OldState = SoundDeviceInstance->bPaused; + + /* Store audio stream pause state */ + SoundDeviceInstance->bPaused = !bStart; + + if (SoundDeviceInstance->bPaused == FALSE && OldState == TRUE) + { + InitiateSoundStreaming(SoundDeviceInstance); + } + } + return Result; } diff --git a/reactos/lib/drivers/sound/mmebuddy/wave/header.c b/reactos/lib/drivers/sound/mmebuddy/wave/header.c index b4d7fdcf119..998edef57af 100644 --- a/reactos/lib/drivers/sound/mmebuddy/wave/header.c +++ b/reactos/lib/drivers/sound/mmebuddy/wave/header.c @@ -242,7 +242,11 @@ EnqueueWaveHeader( SoundDeviceInstance->HeadWaveHeader = WaveHeader; SoundDeviceInstance->TailWaveHeader = WaveHeader; - DoWaveStreaming(SoundDeviceInstance); + /* Only do wave streaming when the stream has not been paused */ + if (SoundDeviceInstance->bPaused == FALSE) + { + DoWaveStreaming(SoundDeviceInstance); + } } else { @@ -258,7 +262,11 @@ EnqueueWaveHeader( SoundDeviceInstance->TailWaveHeader = WaveHeader; DUMP_WAVEHDR_QUEUE(SoundDeviceInstance); - DoWaveStreaming(SoundDeviceInstance); + /* Only do wave streaming when the stream has not been paused */ + if ( SoundDeviceInstance->bPaused == FALSE ) + { + DoWaveStreaming(SoundDeviceInstance); + } } } diff --git a/reactos/lib/drivers/sound/mmebuddy/wave/streaming.c b/reactos/lib/drivers/sound/mmebuddy/wave/streaming.c index 320ac398238..d892f2d1f36 100644 --- a/reactos/lib/drivers/sound/mmebuddy/wave/streaming.c +++ b/reactos/lib/drivers/sound/mmebuddy/wave/streaming.c @@ -361,3 +361,37 @@ StopStreaming( StopStreamingInSoundThread, NULL); } + +MMRESULT +PerformWaveStreaming( + IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance, + IN PVOID Parameter) +{ + DoWaveStreaming(SoundDeviceInstance); + + return MMSYSERR_NOERROR; +} + +DWORD +WINAPI +WaveActivateSoundStreaming( + IN PVOID lpParameter) +{ + CallSoundThread((PSOUND_DEVICE_INSTANCE)lpParameter, + PerformWaveStreaming, + NULL); + + ExitThread(0); +} + +VOID +InitiateSoundStreaming( + IN PSOUND_DEVICE_INSTANCE SoundDeviceInstance) +{ + HANDLE hThread; + + hThread = CreateThread(NULL, 0, WaveActivateSoundStreaming, (PVOID)SoundDeviceInstance, 0, NULL); + + if (hThread != NULL) + CloseHandle(hThread); +} From 66707243f05cb958fd616b551988b47b36031142 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Fri, 25 Feb 2011 14:13:10 +0000 Subject: [PATCH 142/287] [RTL/DPH] - Fix wrong pointer comparison in RtlpDebugPageHeapFree(). Should check for NULL pointer freeing, instead of checking for NULL heap pointer. svn path=/trunk/; revision=50898 --- reactos/lib/rtl/heappage.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/lib/rtl/heappage.c b/reactos/lib/rtl/heappage.c index 19b536e6885..a4a6307dd70 100644 --- a/reactos/lib/rtl/heappage.c +++ b/reactos/lib/rtl/heappage.c @@ -1813,7 +1813,7 @@ RtlpPageHeapFree(HANDLE HeapPtr, PDPH_BLOCK_INFORMATION Info; /* Check for a NULL pointer freeing */ - if (!HeapPtr) + if (!Ptr) { if (RtlpDphBreakOptions & DPH_BREAK_ON_NULL_FREE) { From 9f699ffaca0d7c9fab7a3c690a377e0578e484ea Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Fri, 25 Feb 2011 15:11:51 +0000 Subject: [PATCH 143/287] [SHELL32] - Check the correct pidl instead of the free one - Found by the amazing DPH! svn path=/trunk/; revision=50899 --- reactos/dll/win32/shell32/she_ocmenu.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/dll/win32/shell32/she_ocmenu.c b/reactos/dll/win32/shell32/she_ocmenu.c index 1b6adec94aa..c2e9c05ede5 100644 --- a/reactos/dll/win32/shell32/she_ocmenu.c +++ b/reactos/dll/win32/shell32/she_ocmenu.c @@ -1219,8 +1219,8 @@ SHEOW_LoadOpenWithItems(SHEOWImpl *This, IDataObject *pdtobj) ERR("no mem\n"); return E_OUTOFMEMORY; } - if (_ILIsDesktop(pidl_child) || _ILIsMyDocuments(pidl_child) || _ILIsControlPanel(pidl_child) || _ILIsNetHood(pidl_child) || - _ILIsBitBucket(pidl_child) || _ILIsDrive(pidl_child) || _ILIsCPanelStruct(pidl_child) || _ILIsFolder(pidl_child) || _ILIsControlPanel(pidl_folder)) + if (_ILIsDesktop(pidl) || _ILIsMyDocuments(pidl) || _ILIsControlPanel(pidl) || _ILIsNetHood(pidl) || + _ILIsBitBucket(pidl) || _ILIsDrive(pidl) || _ILIsCPanelStruct(pidl) || _ILIsFolder(pidl) || _ILIsControlPanel(pidl)) { TRACE("pidl is a folder\n"); SHFree((void*)pidl); From 666446bfaa7378918c8bf917cab1ca7555c0d4aa Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Fri, 25 Feb 2011 16:00:26 +0000 Subject: [PATCH 144/287] [WDMAUD.DRV] - Check if the provided waveformat is at least size of WAVEFORMAT - Compute extra details such as the size or wBitsPerSample from the provided members - Backup i/o completion handle before commiting the audio buffer as the struct might have already been released - Fixes playback of mmsys cpl - Found by DPH! svn path=/trunk/; revision=50900 --- reactos/dll/win32/wdmaud.drv/legacy.c | 29 +++++++++++++++------------ 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/reactos/dll/win32/wdmaud.drv/legacy.c b/reactos/dll/win32/wdmaud.drv/legacy.c index f1d01e795ba..55189178572 100644 --- a/reactos/dll/win32/wdmaud.drv/legacy.c +++ b/reactos/dll/win32/wdmaud.drv/legacy.c @@ -476,7 +476,7 @@ WdmAudSetWaveDeviceFormatByLegacy( DeviceInfo.u.WaveFormatEx.nSamplesPerSec = WaveFormat->nSamplesPerSec; DeviceInfo.u.WaveFormatEx.nBlockAlign = WaveFormat->nBlockAlign; DeviceInfo.u.WaveFormatEx.nAvgBytesPerSec = WaveFormat->nAvgBytesPerSec; - DeviceInfo.u.WaveFormatEx.wBitsPerSample = WaveFormat->wBitsPerSample; + DeviceInfo.u.WaveFormatEx.wBitsPerSample = (DeviceInfo.u.WaveFormatEx.nAvgBytesPerSec * 8) / (DeviceInfo.u.WaveFormatEx.nSamplesPerSec * DeviceInfo.u.WaveFormatEx.nChannels); #endif Result = SyncOverlappedDeviceIoControl(KernelHandle, @@ -492,14 +492,19 @@ WdmAudSetWaveDeviceFormatByLegacy( return TranslateInternalMmResult(Result); } - /* Store format */ - Instance->WaveFormatEx.cbSize = WaveFormat->cbSize; - Instance->WaveFormatEx.wFormatTag = WaveFormat->wFormatTag; - Instance->WaveFormatEx.nChannels = WaveFormat->nChannels; - Instance->WaveFormatEx.nSamplesPerSec = WaveFormat->nSamplesPerSec; - Instance->WaveFormatEx.nBlockAlign = WaveFormat->nBlockAlign; - Instance->WaveFormatEx.nAvgBytesPerSec = WaveFormat->nAvgBytesPerSec; - Instance->WaveFormatEx.wBitsPerSample = WaveFormat->wBitsPerSample; + if (WaveFormatSize >= sizeof(WAVEFORMAT)) + { + /* Store format */ + Instance->WaveFormatEx.wFormatTag = WaveFormat->wFormatTag; + Instance->WaveFormatEx.nChannels = WaveFormat->nChannels; + Instance->WaveFormatEx.nSamplesPerSec = WaveFormat->nSamplesPerSec; + Instance->WaveFormatEx.nBlockAlign = WaveFormat->nBlockAlign; + Instance->WaveFormatEx.nAvgBytesPerSec = WaveFormat->nAvgBytesPerSec; + } + + /* store details */ + Instance->WaveFormatEx.cbSize = sizeof(WAVEFORMATEX); + Instance->WaveFormatEx.wBitsPerSample = (DeviceInfo.u.WaveFormatEx.nAvgBytesPerSec * 8) / (DeviceInfo.u.WaveFormatEx.nSamplesPerSec * DeviceInfo.u.WaveFormatEx.nChannels); /* Store sound device handle instance handle */ Instance->Handle = (PVOID)DeviceInfo.hDevice; @@ -617,7 +622,7 @@ WdmAudCommitWaveBufferByLegacy( // create completion event - Overlap->Standard.hEvent = CreateEventW(NULL, FALSE, FALSE, NULL); + Overlap->Standard.hEvent = Handle = CreateEventW(NULL, FALSE, FALSE, NULL); if (Overlap->Standard.hEvent == NULL) { // no memory @@ -641,13 +646,11 @@ WdmAudCommitWaveBufferByLegacy( } // close event handle - CloseHandle(Overlap->Standard.hEvent); + CloseHandle(Handle); return MMSYSERR_NOERROR; } - - MMRESULT WdmAudSetWaveStateByLegacy( IN struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance, From 0fcd8261f2ee747c3b6eeb557b386cb9b873d5e7 Mon Sep 17 00:00:00 2001 From: Sylvain Petreolle Date: Fri, 25 Feb 2011 16:21:04 +0000 Subject: [PATCH 145/287] [ROSTESTS] Bug 5957 Disable test_shell_window() in user32:win test. Allow to run previously disabled tests in WINE_INTERACTIVE mode. svn path=/trunk/; revision=50901 --- rostests/winetests/user32/msg.c | 12 ++++++++---- rostests/winetests/user32/win.c | 11 ++++++++--- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/rostests/winetests/user32/msg.c b/rostests/winetests/user32/msg.c index 1a595c77c5f..aef282018f1 100755 --- a/rostests/winetests/user32/msg.c +++ b/rostests/winetests/user32/msg.c @@ -12572,8 +12572,10 @@ START_TEST(msg) test_paint_messages(); test_interthread_messages(); test_message_conversion(); - skip("skipping test_accelerators, that hangs on reactos\n"); - //test_accelerators(); + if(!winetest_interactive) + skip("skipping test_accelerators, that hangs on reactos\n"); + else + test_accelerators(); test_timers(); test_timers_no_wnd(); if (hCBT_hook) test_set_hook(); @@ -12594,8 +12596,10 @@ START_TEST(msg) test_dialog_messages(); test_nullCallback(); test_dbcs_wm_char(); - skip("skipping test_menu_messages, that hangs on reactos\n"); - //test_menu_messages(); + if(!winetest_interactive) + skip("skipping test_menu_messages, that hangs on reactos\n"); + else + test_menu_messages(); test_paintingloop(); test_defwinproc(); test_clipboard_viewers(); diff --git a/rostests/winetests/user32/win.c b/rostests/winetests/user32/win.c index af048515ef9..668399caeef 100644 --- a/rostests/winetests/user32/win.c +++ b/rostests/winetests/user32/win.c @@ -6059,8 +6059,10 @@ START_TEST(win) test_capture_2(); test_capture_3(hwndMain, hwndMain2); - skip("skipping test_capture_4, that hangs on reactos\n"); - //test_capture_4(); + if(!winetest_interactive) + skip("skipping test_capture_4, that hangs on reactos\n"); + else + test_capture_4(); test_CreateWindow(); test_parent_owner(); @@ -6101,7 +6103,10 @@ START_TEST(win) test_layered_window(); test_SetForegroundWindow(hwndMain); - test_shell_window(); + if(!winetest_interactive) + skip("bug 5957: skipping test_shell_window, it crashes ros/win7 explorer\n"); + else + test_shell_window(); test_handles( hwndMain ); test_winregion(); From 25a9c6fb4948afe90b771b2b3d218ebf4d2ff332 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 25 Feb 2011 17:37:25 +0000 Subject: [PATCH 146/287] [WIN32K] - In BITMAP_CopyBitmap, also "copy" the palette of the source bitmap, instead of assuming the one created by GreCreateBitmapEx matches the bitmap bits we have copied. Fixes broken colors on the firefox firstrun page See issue #5902 for more details. svn path=/trunk/; revision=50902 --- reactos/subsystems/win32/win32k/objects/bitmaps.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/bitmaps.c b/reactos/subsystems/win32/win32k/objects/bitmaps.c index 583b9514f4d..75e1b1c2be6 100644 --- a/reactos/subsystems/win32/win32k/objects/bitmaps.c +++ b/reactos/subsystems/win32/win32k/objects/bitmaps.c @@ -842,7 +842,7 @@ BITMAP_CopyBitmap(HBITMAP hBitmap) return 0; } - Bitmap = SURFACE_LockSurface(hBitmap); + Bitmap = SURFACE_ShareLockSurface(hBitmap); if (Bitmap == NULL) { return 0; @@ -867,11 +867,14 @@ BITMAP_CopyBitmap(HBITMAP hBitmap) if (res) { - resBitmap = SURFACE_LockSurface(res); + resBitmap = SURFACE_ShareLockSurface(res); if (resBitmap) { IntSetBitmapBits(resBitmap, Bitmap->SurfObj.cjBits, Bitmap->SurfObj.pvBits); - SURFACE_UnlockSurface(resBitmap); + GDIOBJ_IncrementShareCount(&Bitmap->ppal->BaseObject); + GDIOBJ_ShareUnlockObjByPtr(&resBitmap->ppal->BaseObject); + resBitmap->ppal = Bitmap->ppal; + SURFACE_ShareUnlockSurface(resBitmap); } else { @@ -880,7 +883,7 @@ BITMAP_CopyBitmap(HBITMAP hBitmap) } } - SURFACE_UnlockSurface(Bitmap); + SURFACE_ShareUnlockSurface(Bitmap); return res; } From cd34e7ee1e353f0d0b9cb70a58b84a0a23abc6a5 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 25 Feb 2011 18:44:20 +0000 Subject: [PATCH 147/287] [WININET] Revert part of r47411. The revision was a wine sync, but no wine code was reverted, only the use of zlib is disabled. Fixes downloading audiograbber with rapps. See issue #5663 for more details. svn path=/trunk/; revision=50903 --- reactos/dll/win32/wininet/wininet.rbuild | 2 -- reactos/include/reactos/wine/config.h | 6 ------ 2 files changed, 8 deletions(-) diff --git a/reactos/dll/win32/wininet/wininet.rbuild b/reactos/dll/win32/wininet/wininet.rbuild index ac2c43f7945..45b87b18665 100644 --- a/reactos/dll/win32/wininet/wininet.rbuild +++ b/reactos/dll/win32/wininet/wininet.rbuild @@ -6,7 +6,6 @@ . include/reactos/wine - . @@ -23,7 +22,6 @@ secur32 crypt32 ws2_32 - zlib pseh cookie.c dialogs.c diff --git a/reactos/include/reactos/wine/config.h b/reactos/include/reactos/wine/config.h index cc682661373..fb5f73814bb 100644 --- a/reactos/include/reactos/wine/config.h +++ b/reactos/include/reactos/wine/config.h @@ -457,12 +457,6 @@ /* Define to 1 if you have the header file. */ /* #undef HAVE_OPENSSL_SSL_H */ -/* Define to 1 if you have the `z' library (-lz). */ -#define HAVE_ZLIB 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_ZLIB_H 1 - /* Define to 1 if you have the `pclose' function. */ #define HAVE_PCLOSE 1 From d6f4155e391dec67bb9163b618fc6efbbcaf1659 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Fri, 25 Feb 2011 20:15:51 +0000 Subject: [PATCH 148/287] [NTOSKNRL] For both FsRtlIsNameInExpression() & FsRtlIsDbcsInExpression(): As both UNICODE_STRING & ANSI_STRING might not be NULL-termined, don't attempt to read null char. This fixes potential buffer overruns. Then it fixes some (all?) 'TempPte.u.Long != 0' assertion failure. See issue #5923 for more details. svn path=/trunk/; revision=50904 --- reactos/ntoskrnl/fsrtl/dbcsname.c | 17 +++++++++++------ reactos/ntoskrnl/fsrtl/name.c | 23 ++++++++++++++--------- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/reactos/ntoskrnl/fsrtl/dbcsname.c b/reactos/ntoskrnl/fsrtl/dbcsname.c index 202c2a3faca..2bf4af91b37 100644 --- a/reactos/ntoskrnl/fsrtl/dbcsname.c +++ b/reactos/ntoskrnl/fsrtl/dbcsname.c @@ -185,10 +185,15 @@ FsRtlIsDbcsInExpression(IN PANSI_STRING Expression, break; case '?': - ExpressionPosition++; + if (++ExpressionPosition == Expression->Length) + { + NamePosition = Name->Length; + break; + } + MatchingChars = NamePosition; - while (Name->Buffer[NamePosition] != Expression->Buffer[ExpressionPosition] && - NamePosition < Name->Length) + while (NamePosition < Name->Length && + Name->Buffer[NamePosition] != Expression->Buffer[ExpressionPosition]) { NamePosition++; } @@ -200,7 +205,7 @@ FsRtlIsDbcsInExpression(IN PANSI_STRING Expression, break; case ANSI_DOS_DOT: - while (Name->Buffer[NamePosition] != '.' && NamePosition < Name->Length) + while (NamePosition < Name->Length && Name->Buffer[NamePosition] != '.') { NamePosition++; } @@ -246,8 +251,8 @@ FsRtlIsDbcsInExpression(IN PANSI_STRING Expression, else if (StarFound != MAXUSHORT) { ExpressionPosition = StarFound + 1; - while (Name->Buffer[NamePosition] != Expression->Buffer[ExpressionPosition] && - NamePosition < Name->Length) + while (NamePosition < Name->Length && + Name->Buffer[NamePosition] != Expression->Buffer[ExpressionPosition]) { NamePosition++; } diff --git a/reactos/ntoskrnl/fsrtl/name.c b/reactos/ntoskrnl/fsrtl/name.c index ecb2c3ff6a4..8ed32a34b4b 100644 --- a/reactos/ntoskrnl/fsrtl/name.c +++ b/reactos/ntoskrnl/fsrtl/name.c @@ -45,11 +45,16 @@ FsRtlIsNameInExpressionPrivate(IN PUNICODE_STRING Expression, break; case L'?': - ExpressionPosition++; + if (++ExpressionPosition == Expression->Length / sizeof(WCHAR)) + { + NamePosition = Name->Length / sizeof(WCHAR); + break; + } + MatchingChars = NamePosition; - while ((IgnoreCase ? UpcaseTable[Name->Buffer[NamePosition]] : - Name->Buffer[NamePosition]) != Expression->Buffer[ExpressionPosition] && - NamePosition < Name->Length / sizeof(WCHAR)) + while (NamePosition < Name->Length / sizeof(WCHAR) && + (IgnoreCase ? UpcaseTable[Name->Buffer[NamePosition]] : + Name->Buffer[NamePosition]) != Expression->Buffer[ExpressionPosition]) { NamePosition++; } @@ -61,8 +66,8 @@ FsRtlIsNameInExpressionPrivate(IN PUNICODE_STRING Expression, break; case DOS_DOT: - while (Name->Buffer[NamePosition] != L'.' && - NamePosition < Name->Length / sizeof(WCHAR)) + while (NamePosition < Name->Length / sizeof(WCHAR) && + Name->Buffer[NamePosition] != L'.') { NamePosition++; } @@ -108,9 +113,9 @@ FsRtlIsNameInExpressionPrivate(IN PUNICODE_STRING Expression, else if (StarFound != MAXUSHORT) { ExpressionPosition = StarFound + 1; - while ((IgnoreCase ? UpcaseTable[Name->Buffer[NamePosition]] : - Name->Buffer[NamePosition]) != Expression->Buffer[ExpressionPosition] && - NamePosition < Name->Length / sizeof(WCHAR)) + while (NamePosition < Name->Length / sizeof(WCHAR) && + (IgnoreCase ? UpcaseTable[Name->Buffer[NamePosition]] : + Name->Buffer[NamePosition]) != Expression->Buffer[ExpressionPosition]) { NamePosition++; } From 75d6f0438bb0bce834d74a29ef827ac90ea81c0b Mon Sep 17 00:00:00 2001 From: Sylvain Petreolle Date: Fri, 25 Feb 2011 23:34:52 +0000 Subject: [PATCH 149/287] [ROSTESTS] Bug 5778: Disable part of rpcrt4:rpc test, it needs unimplemented functionality in current rpcrt4 version. svn path=/trunk/; revision=50905 --- rostests/winetests/rpcrt4/rpc.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/rostests/winetests/rpcrt4/rpc.c b/rostests/winetests/rpcrt4/rpc.c index cb732797c61..eb882b4273e 100644 --- a/rostests/winetests/rpcrt4/rpc.c +++ b/rostests/winetests/rpcrt4/rpc.c @@ -277,6 +277,10 @@ todo_wine { RPC_C_AUTHN_WINNT, NULL, RPC_C_AUTHZ_NAME); ok(status == RPC_S_OK, "RpcBindingSetAuthInfo failed (%u)\n", status); +if(1) + skip("bug 5778: this test part needs rpcrt4 sync >= 1.2rc6\n"); +else +{ level = authnsvc = authzsvc = 0; principal = (unsigned char *)0xdeadbeef; identity = (RPC_AUTH_IDENTITY_HANDLE *)0xdeadbeef; @@ -291,7 +295,7 @@ todo_wine { todo_wine ok(authzsvc == RPC_C_AUTHZ_NAME, "expected RPC_C_AUTHZ_NAME\n"); RpcStringFree(&principal); - +} status = RpcMgmtStopServerListening(NULL); ok(status == RPC_S_OK, "RpcMgmtStopServerListening failed (%u)\n", status); From 363e880789c1b6a3bf2d5663068896d44ad2c3aa Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sat, 26 Feb 2011 13:12:36 +0000 Subject: [PATCH 150/287] [USRMGR] French translation by Jason Toscano Corrections/adjustements by me See issue #5921 for more details. svn path=/trunk/; revision=50906 --- reactos/dll/cpl/usrmgr/lang/fr-FR.rc | 219 +++++++++++++++++++++++++++ reactos/dll/cpl/usrmgr/rsrc.rc | 1 + 2 files changed, 220 insertions(+) create mode 100644 reactos/dll/cpl/usrmgr/lang/fr-FR.rc diff --git a/reactos/dll/cpl/usrmgr/lang/fr-FR.rc b/reactos/dll/cpl/usrmgr/lang/fr-FR.rc new file mode 100644 index 00000000000..0838bade389 --- /dev/null +++ b/reactos/dll/cpl/usrmgr/lang/fr-FR.rc @@ -0,0 +1,219 @@ +LANGUAGE LANG_FRENCH, SUBLANG_ NEUTRAL + + +/* Dialogs */ + +IDD_USERS DIALOGEX DISCARDABLE 0, 0, 252, 223 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Utilisateurs" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDC_USERS_LIST, "SysListView32", LVS_REPORT | LVS_EDITLABELS | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | WS_BORDER | WS_TABSTOP, + 7, 7, 238, 85, WS_EX_CLIENTEDGE +END + + +IDD_GROUPS DIALOGEX DISCARDABLE 0, 0, 252, 223 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Groupes" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDC_GROUPS_LIST, "SysListView32", LVS_REPORT | LVS_EDITLABELS | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | WS_BORDER | WS_TABSTOP, + 7, 7, 238, 85, WS_EX_CLIENTEDGE +END + + +IDD_EXTRA DIALOGEX DISCARDABLE 0, 0, 252, 223 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Extra" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Cet espace est intentionnellement laissé vide", IDC_STATIC, 66, 90, 112, 8 +END + + +IDD_USER_GENERAL DIALOGEX DISCARDABLE 0, 0, 252, 223 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Général" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDC_USER_GENERAL_NAME, 7, 12, 112, 8 + LTEXT "Nom complet :", -1, 7, 46, 63, 8 + EDITTEXT IDC_USER_GENERAL_FULL_NAME,77,43,168,13,ES_AUTOHSCROLL + LTEXT "Description :", -1, 7, 64, 63, 8 + EDITTEXT IDC_USER_GENERAL_DESCRIPTION,77,61,168,13,ES_AUTOHSCROLL + AUTOCHECKBOX "L'utilisateur doit changer son mot de passe après sa première connexion",IDC_USER_GENERAL_FORCE_CHANGE,7,82,210,10 + AUTOCHECKBOX "L'utilisateur ne peut pas changer le mot de passe",IDC_USER_GENERAL_CANNOT_CHANGE,7,95,210,10 + AUTOCHECKBOX "Le mot de passe n'expire jamais",IDC_USER_GENERAL_NEVER_EXPIRES,7,108,210,10 + AUTOCHECKBOX "Compte désactivé",IDC_USER_GENERAL_DISABLED,7,121,210,10 + AUTOCHECKBOX "Compte bloqué",IDC_USER_GENERAL_LOCKED,7,134,210,10 +END + + +IDD_USER_MEMBERSHIP DIALOGEX DISCARDABLE 0, 0, 252, 223 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Appartenance" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Menbre de :", -1, 7, 7, 56, 8 + CONTROL "", IDC_USER_MEMBERSHIP_LIST, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER | LVS_SORTASCENDING | WS_BORDER | WS_TABSTOP, + 7, 18, 238, 173, WS_EX_CLIENTEDGE + PUSHBUTTON "Ajouter...", IDC_USER_MEMBERSHIP_ADD, 7, 197, 50, 14 + PUSHBUTTON "Enlever", IDC_USER_MEMBERSHIP_REMOVE, 61, 197, 50, 14, WS_DISABLED +END + + +IDD_USER_PROFILE DIALOGEX DISCARDABLE 0, 0, 252, 223 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Profil" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Profil d'utilisateur", -1, 7, 7, 238, 54 + LTEXT "Chemin d'accès au profil :", -1, 16, 22, 55, 8 + EDITTEXT IDC_USER_PROFILE_PATH, 78, 19, 160, 13, ES_AUTOHSCROLL + LTEXT "Script d'ouverture de session :", -1, 16, 40, 55, 8 + EDITTEXT IDC_USER_PROFILE_SCRIPT, 78, 37, 160, 13, ES_AUTOHSCROLL + + GROUPBOX "Répertoire personnel", -1, 7, 68, 238, 54 + AUTORADIOBUTTON "Chemin d'accès local :", IDC_USER_PROFILE_LOCAL, 16, 83, 60, 10 + AUTORADIOBUTTON "Connecter :", IDC_USER_PROFILE_REMOTE, 16, 100, 60, 10 + EDITTEXT IDC_USER_PROFILE_LOCAL_PATH, 78, 81, 160, 13, ES_AUTOHSCROLL + COMBOBOX IDC_USER_PROFILE_DRIVE, 78, 99, 26, 160, CBS_DROPDOWNLIST | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "à :", -1, 112, 101, 12, 8 + EDITTEXT IDC_USER_PROFILE_REMOTE_PATH, 130, 99, 108, 13, ES_AUTOHSCROLL +END + + +IDD_GROUP_GENERAL DIALOGEX DISCARDABLE 0, 0, 252, 223 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Général" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", IDC_GROUP_GENERAL_NAME, 7, 12, 112, 8 + LTEXT "Description :", -1, 7, 45, 46, 8 + EDITTEXT IDC_GROUP_GENERAL_DESCRIPTION,65,42,180,13,ES_AUTOHSCROLL + LTEXT "Membres :", -1, 7, 63, 45, 8 + CONTROL "", IDC_GROUP_GENERAL_MEMBERS, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER | LVS_SORTASCENDING | WS_BORDER | WS_TABSTOP, + 7, 74, 238, 117, WS_EX_CLIENTEDGE + PUSHBUTTON "Ajouter...", IDC_GROUP_GENERAL_ADD, 7, 197, 50, 14 + PUSHBUTTON "Enlever", IDC_GROUP_GENERAL_REMOVE, 61, 197, 50, 14, WS_DISABLED +END + + +IDD_CHANGE_PASSWORD DIALOGEX DISCARDABLE 0, 0, 267, 74 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SHELLFONT +CAPTION "Changer le mot de passe" +FONT 8, "MS Shell Dlg" +BEGIN + EDITTEXT IDC_EDIT_PASSWORD1,107,7,153,14,ES_AUTOHSCROLL | ES_PASSWORD + RTEXT "Nouveau mot de passe :", -1,7,10,96,8 + EDITTEXT IDC_EDIT_PASSWORD2,107,25,153,14,ES_AUTOHSCROLL | ES_PASSWORD + RTEXT "Répéter le mot de passe :", -1,7,28,96,8 + DEFPUSHBUTTON "Accepter",IDOK,156,53,50,14 + PUSHBUTTON "Annuler",IDCANCEL,210,53,50,14 +END + + +IDD_USER_NEW DIALOGEX DISCARDABLE 0, 0, 267, 200 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SHELLFONT +CAPTION "Nouvel utilisateur" +FONT 8, "MS Shell Dlg" +BEGIN + EDITTEXT IDC_USER_NEW_NAME,107,7,153,14,ES_AUTOHSCROLL + RTEXT "Nom d'utilisateur :", -1,7,10,96,8 + EDITTEXT IDC_USER_NEW_FULL_NAME,107,25,153,14,ES_AUTOHSCROLL + RTEXT "Nom complet de l'utilisateur :", -1,7,28,96,8 + EDITTEXT IDC_USER_NEW_DESCRIPTION,107,43,153,14,ES_AUTOHSCROLL + RTEXT "Description :", -1,7,46,96,8 + EDITTEXT IDC_USER_NEW_PASSWORD1,107,67,153,14,ES_AUTOHSCROLL | ES_PASSWORD + RTEXT "Mot de passe :", -1,7,70,96,8 + EDITTEXT IDC_USER_NEW_PASSWORD2,107,85,153,14,ES_AUTOHSCROLL | ES_PASSWORD + RTEXT "Répéter le mot de passe :", -1,7,88,96,8 + AUTOCHECKBOX "L'utilisateur doit changer son mot de passe après sa première connexion",IDC_USER_NEW_FORCE_CHANGE,7,109,200,10 + AUTOCHECKBOX "L'utilisateur ne peut pas changer le mot de passe",IDC_USER_NEW_CANNOT_CHANGE,7,123,200,10,WS_DISABLED + AUTOCHECKBOX "Le mot de passe n'expire jamais",IDC_USER_NEW_NEVER_EXPIRES,7,137,200,10,WS_DISABLED + AUTOCHECKBOX "Compte désactivé",IDC_USER_NEW_DISABLED,7,151,200,10 + DEFPUSHBUTTON "Accepter",IDOK,156,179,50,14,WS_DISABLED + PUSHBUTTON "Annuler",IDCANCEL,210,179,50,14 +END + + +IDD_GROUP_NEW DIALOGEX DISCARDABLE 0, 0, 267, 74 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SHELLFONT +CAPTION "Nouveau groupe" +FONT 8, "MS Shell Dlg" +BEGIN + EDITTEXT IDC_GROUP_NEW_NAME,107,7,153,14,ES_AUTOHSCROLL + RTEXT "Nom du groupe :", -1,7,10,96,8 + EDITTEXT IDC_GROUP_NEW_DESCRIPTION,107,25,153,14,ES_AUTOHSCROLL + RTEXT "Description :", -1,7,28,96,8 + DEFPUSHBUTTON "Accepter",IDOK,156,53,50,14,WS_DISABLED + PUSHBUTTON "Annuler",IDCANCEL,210,53,50,14 +END + + +IDD_USER_ADD_MEMBERSHIP DIALOGEX DISCARDABLE 0, 0, 252, 223 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SHELLFONT +CAPTION "Appartenance à un groupe" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Membre de :", -1, 7, 7, 56, 8 + CONTROL "", IDC_USER_ADD_MEMBERSHIP_LIST, "SysListView32", LVS_REPORT | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | WS_BORDER | WS_TABSTOP, + 7, 18, 238, 173, WS_EX_CLIENTEDGE + DEFPUSHBUTTON "Accepter",IDOK,141,197,50,14 + PUSHBUTTON "Annuler",IDCANCEL,195,197,50,14 +END + + +/* Menus */ + +IDM_POPUP_GROUP MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "Nouveau groupe...", IDM_GROUP_NEW + END + POPUP "" + BEGIN + MENUITEM "Ajouter membre", IDM_GROUP_ADD_MEMBER, GRAYED + MENUITEM SEPARATOR + MENUITEM "Supprimer", IDM_GROUP_DELETE + MENUITEM "Renommer", IDM_GROUP_RENAME + MENUITEM SEPARATOR + MENUITEM "Propriétés", IDM_GROUP_PROPERTIES + END +END + + +IDM_POPUP_USER MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "Nouvel utilisateur...", IDM_USER_NEW + END + POPUP "" + BEGIN + MENUITEM "Changer le mot de passe", IDM_USER_CHANGE_PASSWORD + MENUITEM SEPARATOR + MENUITEM "Supprimer", IDM_USER_DELETE + MENUITEM "Renommer", IDM_USER_RENAME + MENUITEM SEPARATOR + MENUITEM "Propriétés", IDM_USER_PROPERTIES + END +END + + +/* Strings */ + +STRINGTABLE +BEGIN + IDS_CPLNAME "Comptes d'utilisateur" + IDS_CPLDESCRIPTION "Gestion des utilisateurs et des groupes." +END + +STRINGTABLE +BEGIN + IDS_NAME "Nom" + IDS_FULLNAME "Nom complet" + IDS_DESCRIPTION "Description" +END diff --git a/reactos/dll/cpl/usrmgr/rsrc.rc b/reactos/dll/cpl/usrmgr/rsrc.rc index 3c5ab7370fe..7f2108c7e81 100644 --- a/reactos/dll/cpl/usrmgr/rsrc.rc +++ b/reactos/dll/cpl/usrmgr/rsrc.rc @@ -4,5 +4,6 @@ #include "lang/de-DE.rc" #include "lang/en-US.rc" #include "lang/es-ES.rc" +#include "lang/fr-FR.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" From c1dc1d5ef0e235bc615ec9be424a3b28b3ae7b75 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sat, 26 Feb 2011 13:26:02 +0000 Subject: [PATCH 151/287] [KERNEL32] Remove unused .def file. We're using .pspec here svn path=/trunk/; revision=50907 --- reactos/dll/win32/kernel32/kernel32.def | 1459 ----------------------- 1 file changed, 1459 deletions(-) delete mode 100644 reactos/dll/win32/kernel32/kernel32.def diff --git a/reactos/dll/win32/kernel32/kernel32.def b/reactos/dll/win32/kernel32/kernel32.def deleted file mode 100644 index d06c4178bde..00000000000 --- a/reactos/dll/win32/kernel32/kernel32.def +++ /dev/null @@ -1,1459 +0,0 @@ -#undef i386 - -@ stdcall AcquireSRWLockExclusive(ptr) ntdll.RtlAcquireSRWLockExclusive -@ stdcall AcquireSRWLockShared(ptr) ntdll.RtlAcquireSRWLockShared -@ stdcall ActivateActCtx(ptr ptr) -@ stdcall AddAtomA(str) -@ stdcall AddAtomW(wstr) -@ stdcall AddConsoleAliasA(str str str) ;check -@ stdcall AddConsoleAliasW(wstr wstr wstr) ;check -;@ stdcall -arch=x86_64 AddIntegrityLabelToBoundaryDescriptor ; Win 7 -@ stdcall AddLocalAlternateComputerNameA(str ptr) -@ stdcall AddLocalAlternateComputerNameW(wstr ptr) -@ stdcall AddRefActCtx(ptr) -;@ stdcall AddSIDToBoundaryDescriptor ; Win 7 -;@ stdcall AddSecureMemoryCacheCallback ; Win 7 -@ stdcall AddVectoredContinueHandler(long ptr) ntdll.RtlAddVectoredContinueHandler -@ stdcall AddVectoredExceptionHandler(long ptr) ntdll.RtlAddVectoredExceptionHandler -;@ stdcall AdjustCalendarDate ; Win 7 -@ stdcall AllocConsole() -@ stub AllocLSCallback ; missing in XP SP3 and 2003 R2 and Win 7 -@ stdcall AllocateUserPhysicalPages(long ptr ptr) -;@ stdcall AllocateUserPhysicalPagesNuma ; Win 7 -;@ stdcall ApplicationRecoveryFinished ; Win 7 -;@ stdcall ApplicationRecoveryInProgress ; Win 7 -@ stdcall AreFileApisANSI() -@ stdcall AssignProcessToJobObject(ptr ptr) -@ stdcall AttachConsole(long) -@ stdcall BackupRead(ptr ptr long ptr long long ptr) -@ stdcall BackupSeek(ptr long long ptr ptr ptr) -@ stdcall BackupWrite(ptr ptr long ptr long long ptr) -@ stdcall BaseCheckAppcompatCache(long long long ptr) ;check -;@ stdcall BaseCheckAppcompatCacheEx ; Win7 -@ stub BaseCheckRunApp -@ stdcall BaseCleanupAppcompatCache() ; missing in Win 7 -@ stdcall BaseCleanupAppcompatCacheSupport(ptr) -;@ stdcall BaseDllReadWriteIniFile ; Win 7 -@ stdcall BaseDumpAppcompatCache() -@ stdcall BaseFlushAppcompatCache() -;@ stdcall BaseFormatObjectAttributes ; Win 7 -;@ stdcall BaseFormatTimeOut ; Win 7 -;@ stdcall BaseGenerateAppCompatData ; Win 7 -;@ stdcall BaseGetNamedObjectDirectory ; Win 7 -@ stdcall BaseInitAppcompatCache() ; missing in Win 7 -@ stdcall BaseInitAppcompatCacheSupport() -;@ stdcall BaseIsAppcompatInfrastructureDisabled ; Win 7 -@ stdcall BaseProcessInitPostImport() ; missing in Win 7 -@ stdcall BaseQueryModuleData(str str ptr ptr ptr) ;check -;@ stdcall BaseThreadInitThunk ; Win 7 -;@ stdcall BaseSetLastNTError ; Win 7, not 64 bit (present on w2k3 but not exported) -@ stdcall BaseUpdateAppcompatCache(long long long) -;@ stdcall BaseVerifyUnicodeString ; Win 7 -;@ stdcall Basep8BitStringToDynamicUnicodeString ; Win 7 -;@ stdcall BasepAllocateActivationContextActivationBlock ; Win 7 -;@ stdcall BasepAnsiStringToDynamicUnicodeString ; Win 7 -;@ stdcall BasepCheckAppCompat ; Win 7 -;@ stdcall BasepCheckBadapp ; Win 7 -@ stub BasepCheckWinSaferRestrictions -@ stub BasepDebugDump ; missing in XP SP3 and Win 7 -;@ stdcall BasepFreeActivationContextActivationBlock ; Win 7 -;@ stdcall BasepFreeAppCompatData ; Win 7 -;@ stdcall BasepMapModuleHandle ; Win 7 -@ stdcall Beep(long long) -@ stdcall BeginUpdateResourceA(str long) -@ stdcall BeginUpdateResourceW(wstr long) -@ stdcall BindIoCompletionCallback(long ptr long) -@ stdcall BuildCommDCBA(str ptr) -@ stdcall BuildCommDCBAndTimeoutsA(str ptr ptr) -@ stdcall BuildCommDCBAndTimeoutsW(wstr ptr ptr) -@ stdcall BuildCommDCBW(wstr ptr) -@ stdcall CallNamedPipeA(str ptr long ptr long ptr long) -@ stdcall CallNamedPipeW(wstr ptr long ptr long ptr long) -;@ stdcall CallbackMayRunLong ; Win 7 -@ stdcall CancelDeviceWakeupRequest(long) -@ stdcall CancelIo(long) -@ stdcall CancelIoEx(long ptr) -@ stdcall CancelSynchronousIo(long) -;@ stdcall CancelThreadpoolIo(ptr) ntdll.TpCancelAsyncIoOperation; Win 7 -@ stdcall CancelTimerQueueTimer(long long) -@ stdcall CancelWaitableTimer(long) -@ stdcall ChangeTimerQueueTimer(ptr ptr long long) -;@ stdcall CheckElevation ; Win 7 -;@ stdcall CheckElevationEnabled ; Win 7 -;@ stdcall CheckForReadOnlyResource ; Win 7 -@ stdcall CheckNameLegalDOS8Dot3A(str str long long long) -@ stdcall CheckNameLegalDOS8Dot3W(wstr str long long long) -@ stdcall CheckRemoteDebuggerPresent(long ptr) -@ stdcall ClearCommBreak(long) -@ stdcall ClearCommError(long ptr ptr) -@ stdcall CloseConsoleHandle(long) -@ stdcall CloseHandle(long) -;@ stdcall ClosePrivateNamespace ; Win 7 -@ stdcall CloseProfileUserMapping() -@ stub CloseSystemHandle ; missing in XP SP3 and Win 7 -;@ stdcall CloseThreadpool(ptr) ntdll.TpReleasePool ; Win 7 -;@ stdcall CloseThreadpoolCleanupGroup(ptr) ntdll.TpReleaseCleanupGroup ; Win 7 -;@ stdcall CloseThreadpoolCleanupGroupMembers(ptr long ptr) ntdll.TpReleaseCleanupGroupMembers ; Win 7 -;@ stdcall CloseThreadpoolIo ntdll.TpReleaseIoCompletion ; Win 7 -;@ stdcall CloseThreadpoolTimer ntdll.TpReleaseTimer ; Win 7 -;@ stdcall CloseThreadpoolWait ntdll.TpReleaseWait ; Win 7 -;@ stdcall CloseThreadpoolWork ntdll.TpReleaseWork ; Win 7 -@ stdcall CmdBatNotification(long) -@ stdcall CommConfigDialogA(str long ptr) -@ stdcall CommConfigDialogW(wstr long ptr) -;@ stdcall CompareCalendarDates ; Win 7 -@ stdcall CompareFileTime(ptr ptr) -@ stdcall CompareStringA(long long str long str long) -;@ stdcall CompareStringEx ; Win 7 -;@ stdcall CompareStringOrdinal ; Win 7 -@ stdcall CompareStringW(long long wstr long wstr long) -@ stdcall ConnectNamedPipe(long ptr) -@ stdcall ConsoleMenuControl(long long long) -@ stub ConsoleSubst ; missing in XP SP3 and Win 7 -@ stdcall ContinueDebugEvent(long long long) -;@ stdcall ConvertCalDateTimeToSystemTime ; Win 7 -@ stdcall ConvertDefaultLocale (long) -@ stdcall ConvertFiberToThread() -;@ stdcall ConvertNLSDayOfWeekToWin32DayOfWeek ; Win 7 -;@ stdcall ConvertSystemTimeToCalDateTime ; Win 7 -@ stdcall ConvertThreadToFiber(ptr) -@ stdcall ConvertThreadToFiberEx(ptr long) -;@ stdcall CopyExtendedContext ; Win 7 -@ stdcall CopyFileA(str str long) -@ stdcall CopyFileExA (str str ptr ptr ptr long) -@ stdcall CopyFileExW (wstr wstr ptr ptr ptr long) -;@ stdcall CopyFileTransactedA ; Win 7 -;@ stdcall CopyFileTransactedW ; Win 7 -@ stdcall CopyFileW(wstr wstr long) -@ stdcall CopyLZFile(long long) LZCopy -@ stdcall CreateActCtxA(ptr) -@ stdcall CreateActCtxW(ptr) -;@ stdcall CreateBoundaryDescriptorA ; Win 7 -;@ stdcall CreateBoundaryDescriptorW ; Win 7 -@ stdcall CreateConsoleScreenBuffer(long long ptr long ptr) -@ stdcall CreateDirectoryA(str ptr) -@ stdcall CreateDirectoryExA(str str ptr) -@ stdcall CreateDirectoryExW(wstr wstr ptr) -;@ stdcall CreateDirectoryTransactedA ; Win 7 -;@ stdcall CreateDirectoryTransactedW ; Win 7 -@ stdcall CreateDirectoryW(wstr ptr) -@ stdcall CreateEventA(ptr long long str) -@ stdcall CreateEventExA(ptr str long long) -@ stdcall CreateEventExW(ptr wstr long long) -@ stdcall CreateEventW(ptr long long wstr) -@ stdcall CreateFiber(long ptr ptr) -@ stdcall CreateFiberEx(long long long ptr ptr) -@ stdcall CreateFileA(str long long ptr long long long) -@ stdcall CreateFileMappingA(long ptr long long long str) -;@ stdcall CreateFileMappingNumaA ; Win 7 -;@ stdcall CreateFileMappingNumaW ; Win 7 -@ stdcall CreateFileMappingW(long ptr long long long wstr) -;@ stdcall CreateFileTransactedA ; Win 7 -;@ stdcall CreateFileTransactedW ; Win 7 -@ stdcall CreateFileW(wstr long long ptr long long long) -@ stdcall CreateHardLinkA(str str ptr) -;@ stdcall CreateHardLinkTransactedA ; Win 7 -;@ stdcall CreateHardLinkTransactedW ; Win 7 -@ stdcall CreateHardLinkW(wstr wstr ptr) -@ stdcall CreateIoCompletionPort(long long long long) -@ stdcall CreateJobObjectA(ptr str) -@ stdcall CreateJobObjectW(ptr wstr) -@ stdcall CreateJobSet(long ptr long) -@ stub CreateKernelThread ; missing in XP SP3 and Win 7 -@ stdcall CreateMailslotA(ptr long long ptr) -@ stdcall CreateMailslotW(ptr long long ptr) -@ stdcall CreateMemoryResourceNotification(long) -@ stdcall CreateMutexA(ptr long str) -@ stdcall CreateMutexExA(ptr str long long) -@ stdcall CreateMutexExW(ptr wstr long long) -@ stdcall CreateMutexW(ptr long wstr) -@ stdcall CreateNamedPipeA(str long long long long long long ptr) -@ stdcall CreateNamedPipeW(wstr long long long long long long ptr) -@ stdcall CreateNlsSecurityDescriptor(ptr long long) ; missing in Win 7 -@ stdcall CreatePipe(ptr ptr ptr long) -;@ stdcall CreatePrivateNamespaceA ; Win 7 -;@ stdcall CreatePrivateNamespaceW ; Win 7 -@ stdcall CreateProcessA(str str ptr ptr long long ptr str ptr ptr) -;@ stdcall CreateProcessAsUserW ; Win 7 -@ stdcall CreateProcessInternalA(ptr str str ptr ptr long long ptr str ptr ptr long) -@ stdcall CreateProcessInternalW(ptr wstr wstr ptr ptr long long ptr wstr ptr ptr long) -@ stdcall CreateProcessInternalWSecure() ; missing in Win 7 -@ stdcall CreateProcessW(wstr wstr ptr ptr long long ptr wstr ptr ptr) -@ stdcall CreateRemoteThread(long ptr long ptr long long ptr) -;@ stdcall CreateRemoteThreadEx api-ms-win-core-processthreads-l1-1-0.CreateRemoteThreadEx ; Win 7 -@ stdcall CreateSemaphoreA(ptr long long str) -@ stdcall CreateSemaphoreExA(ptr long long str long long) -@ stdcall CreateSemaphoreExW(ptr long long wstr long long) -@ stdcall CreateSemaphoreW(ptr long long wstr) -@ stdcall CreateSocketHandle() -@ stdcall CreateSymbolicLinkA(str str long) -;@ stdcall CreateSymbolicLinkTransactedA ; Win 7 -;@ stdcall CreateSymbolicLinkTransactedW ; Win 7 -@ stdcall CreateSymbolicLinkW(wstr wstr long) -@ stdcall CreateTapePartition(long long long long) -@ stdcall CreateThread(ptr long ptr long long ptr) -;@ stdcall CreateThreadpool ; Win 7 -;@ stdcall CreateThreadpoolCleanupGroup ; Win 7 -;@ stdcall CreateThreadpoolIo ; Win 7 -;@ stdcall CreateThreadpoolTimer ; Win 7 -;@ stdcall CreateThreadpoolWait ; Win 7 -;@ stdcall CreateThreadpoolWork ; Win 7 -@ stdcall CreateTimerQueue () -@ stdcall CreateTimerQueueTimer(ptr long ptr ptr long long long) -@ stdcall CreateToolhelp32Snapshot(long long) -;@ stdcall arch=x86_64 CreateUmsCompletionList -;@ stdcall arch=x86_64 CreateUmsThreadContext -@ stdcall CreateVirtualBuffer(long long long) ; missing in Win 7 -@ stdcall CreateWaitableTimerA(ptr long str) -@ stdcall CreateWaitableTimerExA(ptr str long long) -@ stdcall CreateWaitableTimerExW(ptr wstr long long) -@ stdcall CreateWaitableTimerW(ptr long wstr) -@ stdcall DeactivateActCtx(long ptr) -@ stdcall DebugActiveProcess(long) -@ stdcall DebugActiveProcessStop(long) -@ stdcall DebugBreak() ntdll.DbgBreakPoint -@ stdcall DebugBreakProcess(long) -@ stdcall DebugSetProcessKillOnExit(long) -@ stdcall DecodePointer(ptr) ntdll.RtlDecodePointer -@ stdcall DecodeSystemPointer(ptr) ntdll.RtlDecodeSystemPointer -@ stdcall DefineDosDeviceA(long str str) -@ stdcall DefineDosDeviceW(long wstr wstr) -@ stdcall DelayLoadFailureHook(str str) -@ stdcall DeleteAtom(long) -;@ stdcall DeleteBoundaryDescriptor ntdll.RtlDeleteBoundaryDescriptor ; Win 7 -@ stdcall DeleteCriticalSection(ptr) ntdll.RtlDeleteCriticalSection -@ stdcall DeleteFiber(ptr) -@ stdcall DeleteFileA(str) -;@ stdcall DeleteFileTransactedA ; Win 7 -;@ stdcall DeleteFileTransactedW ; Win 7 -@ stdcall DeleteFileW(wstr) -;@ stdcall DeleteProcThreadAttributeList api-ms-win-core-processthreads-l1-1-0.DeleteProcThreadAttributeList ; Win 7 -@ stdcall DeleteTimerQueue(long) -@ stdcall DeleteTimerQueueEx (long long) -@ stdcall DeleteTimerQueueTimer(long long long) -;@ stdcall -arch=x86_64 DeleteUmsCompletionList -;@ stdcall -arch=x86_64 DeleteUmsThreadContext -@ stdcall DeleteVolumeMountPointA(str) ;check -@ stdcall DeleteVolumeMountPointW(wstr) ;check -;@ stdcall -arch=x86_64 DequeueUmsCompletionListItems -@ stdcall DeviceIoControl(long long ptr long ptr long ptr ptr) -@ stdcall DisableThreadLibraryCalls(long) -;@ stdcall DisableThreadProfiling ; Win 7 -;@ stdcall DisassociateCurrentThreadFromCallback ntdll.TpDisassociateCallback ; Win 7 -@ stdcall DisconnectNamedPipe(long) -@ stdcall DnsHostnameToComputerNameA (str ptr ptr) -@ stdcall DnsHostnameToComputerNameW (wstr ptr ptr) -@ stdcall DosDateTimeToFileTime(long long ptr) -@ stdcall DosPathToSessionPathA(long str str) -@ stdcall DosPathToSessionPathW(long wstr wstr) -@ stdcall DuplicateConsoleHandle(long long long long) -@ stdcall DuplicateHandle(long long long ptr long long long) -;@ stdcall EnableThreadProfiling ; Win 7 -@ stdcall EncodePointer(ptr) ntdll.RtlEncodePointer -@ stdcall EncodeSystemPointer(ptr) ntdll.RtlEncodeSystemPointer -@ stdcall EndUpdateResourceA(long long) -@ stdcall EndUpdateResourceW(long long) -@ stdcall EnterCriticalSection(ptr) ntdll.RtlEnterCriticalSection -;@ stdcall -arch=x86_64 EnterUmsSchedulingMode -@ stdcall EnumCalendarInfoA(ptr long long long) -@ stdcall EnumCalendarInfoExA(ptr long long long) -;@ stdcall EnumCalendarInfoExEx ; Win 7 -@ stdcall EnumCalendarInfoExW(ptr long long long) -@ stdcall EnumCalendarInfoW(ptr long long long) -@ stdcall EnumDateFormatsA(ptr long long) -@ stdcall EnumDateFormatsExA(ptr long long) -;@ stdcall EnumDateFormatsExEx ; Win 7 -@ stdcall EnumDateFormatsExW(ptr long long) -@ stdcall EnumDateFormatsW(ptr long long) -@ stdcall EnumLanguageGroupLocalesA(ptr long long ptr) -@ stdcall EnumLanguageGroupLocalesW(ptr long long ptr) -@ stdcall EnumResourceLanguagesA(long str str ptr long) -;@ stdcall EnumResourceLanguagesExA ; Win 7 -;@ stdcall EnumResourceLanguagesExW ; Win 7 -@ stdcall EnumResourceLanguagesW(long wstr wstr ptr long) -@ stdcall EnumResourceNamesA(long str ptr long) -;@ stdcall EnumResourceNamesExA ; Win 7 -;@ stdcall EnumResourceNamesExW ; Win 7 -@ stdcall EnumResourceNamesW(long wstr ptr long) -@ stdcall EnumResourceTypesA(long ptr long) -;@ stdcall EnumResourceTypesExA ; Win 7 -;@ stdcall EnumResourceTypesExW ; Win 7 -@ stdcall EnumResourceTypesW(long ptr long) -@ stdcall EnumSystemCodePagesA(ptr long) -@ stdcall EnumSystemCodePagesW(ptr long) -;@ stdcall EnumSystemFirmwareTables ; Win 7 -@ stdcall EnumSystemGeoID(long long ptr) -@ stdcall EnumSystemLanguageGroupsA(ptr long ptr) -@ stdcall EnumSystemLanguageGroupsW(ptr long ptr) -@ stdcall EnumSystemLocalesA(ptr long) -;@ stdcall EnumSystemLocalesEx ; Win 7 -@ stdcall EnumSystemLocalesW(ptr long) -@ stdcall EnumTimeFormatsA(ptr long long) -;@ stdcall EnumTimeFormatsEx ; Win 7 -@ stdcall EnumTimeFormatsW(ptr long long) -@ stdcall EnumUILanguagesA(ptr long long) -@ stdcall EnumUILanguagesW(ptr long long) -@ stdcall EnumerateLocalComputerNamesA(ptr long str ptr) -@ stdcall EnumerateLocalComputerNamesW(ptr long wstr ptr) -@ stdcall EraseTape(ptr long long) -@ stdcall EscapeCommFunction(long long) -@ stdcall ExitProcess(long) ; FIXME: ntdll.RtlExitUserProcess -@ stdcall ExitThread(long) ; FIXME: ntdll.RtlExitUserThread -@ stdcall ExitVDM(long long) -@ stdcall ExpandEnvironmentStringsA(str ptr long) -@ stdcall ExpandEnvironmentStringsW(wstr ptr long) -@ stdcall ExpungeConsoleCommandHistoryA(long) -@ stdcall ExpungeConsoleCommandHistoryW(long) -@ stdcall ExtendVirtualBuffer(long long) ; missing in Win 7 -@ stdcall FatalAppExitA(long str) -@ stdcall FatalAppExitW(long wstr) -@ stdcall FatalExit(long) -@ stdcall FileTimeToDosDateTime(ptr ptr ptr) -@ stdcall FileTimeToLocalFileTime(ptr ptr) -@ stdcall FileTimeToSystemTime(ptr ptr) -@ stdcall FillConsoleOutputAttribute(long long long long ptr) -@ stdcall FillConsoleOutputCharacterA(long long long long ptr) -@ stdcall FillConsoleOutputCharacterW(long long long long ptr) -@ stdcall FindActCtxSectionGuid(long ptr long ptr ptr) -@ stdcall FindActCtxSectionStringA(long ptr long str ptr) -@ stdcall FindActCtxSectionStringW(long ptr long wstr ptr) -@ stdcall FindAtomA(str) -@ stdcall FindAtomW(wstr) -@ stdcall FindClose(long) -@ stdcall FindCloseChangeNotification(long) -@ stdcall FindFirstChangeNotificationA(str long long) -@ stdcall FindFirstChangeNotificationW(wstr long long) -@ stdcall FindFirstFileA(str ptr) -@ stdcall FindFirstFileExA(str long ptr long ptr long) -@ stdcall FindFirstFileExW(wstr long ptr long ptr long) -;@ stdcall FindFirstFileNameTransactedW ; Win 7 -;@ stdcall FindFirstFileNameW ; Win 7 -;@ stdcall FindFirstFileTransactedA ; Win 7 -;@ stdcall FindFirstFileTransactedW ; Win 7 -@ stdcall FindFirstFileW(wstr ptr) -;@ stdcall FindFirstStreamTransactedW ; Win 7 -@ stdcall FindFirstStreamW(wstr ptr ptr long) -@ stdcall FindFirstVolumeA(ptr long) -@ stdcall FindFirstVolumeMountPointA(str ptr long) -@ stdcall FindFirstVolumeMountPointW(wstr ptr long) -@ stdcall FindFirstVolumeW(ptr long) -;@ stdcall FindNLSString ; Win 7 -;@ stdcall FindNLSStringEx ; Win 7 -@ stdcall FindNextChangeNotification(long) -@ stdcall FindNextFileA(long ptr) -;@ stdcall FindNextFileNameW ; Win 7 -@ stdcall FindNextFileW(long ptr) -;@ stdcall FindNextStreamW ; Win 7 -@ stdcall FindNextVolumeA(long ptr long) -@ stdcall FindNextVolumeMountPointA(long str long) -@ stdcall FindNextVolumeMountPointW(long wstr long) -@ stdcall FindNextVolumeW(long ptr long) -@ stdcall FindResourceA(long str str) -@ stdcall FindResourceExA(long str str long) -@ stdcall FindResourceExW(long wstr wstr long) -@ stdcall FindResourceW(long wstr wstr) -;@ stdcall FindStringOrdinal ; Win 7 -@ stdcall FindVolumeClose(ptr) -@ stdcall FindVolumeMountPointClose(ptr) -;@ stdcall FlsAlloc(ptr) ; missing in XP SP3 -;@ stdcall FlsFree(long) ; missing in XP SP3 -;@ stdcall FlsGetValue(long) ; missing in XP SP3 -;@ stdcall FlsSetValue(long ptr) ; missing in XP SP3 -@ stdcall FlushConsoleInputBuffer(long) -@ stdcall FlushFileBuffers(long) -@ stdcall FlushInstructionCache(long long long) -;@ stdcall FlushProcessWriteBuffers ntdll.NtFlushProcessWriteBuffers ; Win 7 -@ stdcall FlushViewOfFile(ptr long) -@ stdcall FoldStringA(long str long ptr long) -@ stdcall FoldStringW(long wstr long ptr long) -@ stdcall FormatMessageA(long ptr long long ptr long ptr) -@ stdcall FormatMessageW(long ptr long long ptr long ptr) -@ stdcall FreeConsole() -@ stdcall FreeEnvironmentStringsA(ptr) -@ stdcall FreeEnvironmentStringsW(ptr) -@ stdcall FreeLibrary(long) -@ stdcall FreeLibraryAndExitThread(long long) -;@ stdcall FreeLibraryWhenCallbackReturns ntdll.TpCallbackUnloadDllOnCompletion ; Win 7 -@ stdcall FreeResource(long) -@ stdcall FreeUserPhysicalPages(long long long) -@ stdcall FreeVirtualBuffer(ptr) ; missing in Win 7 -@ stdcall GenerateConsoleCtrlEvent(long long) -@ stdcall GetACP() -;@ stdcall GetActiveProcessorCount ; Win 7 -;@ stdcall GetActiveProcessorGroupCount ; Win 7 -;@ stdcall GetApplicationRecoveryCallback ; Win 7 -;@ stdcall GetApplicationRestartSettings ; Win 7 -@ stdcall GetAtomNameA(long ptr long) -@ stdcall GetAtomNameW(long ptr long) -@ stdcall GetBinaryType(str ptr) GetBinaryTypeA -@ stdcall GetBinaryTypeA(str ptr) -@ stdcall GetBinaryTypeW(wstr ptr) -@ stdcall GetCPFileNameFromRegistry(long wstr long) ;check missing in Win 7 -@ stdcall GetCPInfo(long ptr) -@ stdcall GetCPInfoExA(long long ptr) -@ stdcall GetCPInfoExW(long long ptr) -;@ stdcall GetCalendarDateFormat ; Win 7 -;@ stdcall GetCalendarDateFormatEx ; Win 7 -;@ stdcall GetCalendarDaysInMonth ; Win 7 -;@ stdcall GetCalendarDifferenceInDays ; Win 7 -@ stdcall GetCalendarInfoA(long long long ptr long ptr) -;@ stdcall GetCalendarInfoEx ; Win 7 -@ stdcall GetCalendarInfoW(long long long ptr long ptr) -;@ stdcall GetCalendarMonthsInYear ; Win 7 -;@ stdcall GetCalendarSupportedDateRange ; Win 7 -;@ stdcall GetCalendarWeekNumber ; Win 7 -@ stdcall GetComPlusPackageInstallStatus() -@ stdcall GetCommConfig(long ptr long) -@ stdcall GetCommMask(long ptr) -@ stdcall GetCommModemStatus(long ptr) -@ stdcall GetCommProperties(long ptr) -@ stdcall GetCommState(long ptr) -@ stdcall GetCommTimeouts(long ptr) -@ stdcall GetCommandLineA() -@ stdcall GetCommandLineW() -@ stdcall GetCompressedFileSizeA(long ptr) -;@ stdcall GetCompressedFileSizeTransactedA ; Win 7 -;@ stdcall GetCompressedFileSizeTransactedW ; Win 7 -@ stdcall GetCompressedFileSizeW(long ptr) -@ stdcall GetComputerNameA(ptr ptr) -@ stdcall GetComputerNameExA(long ptr ptr) -@ stdcall GetComputerNameExW(long ptr ptr) -@ stdcall GetComputerNameW(ptr ptr) -@ stdcall GetConsoleAliasA(str str long str) -@ stdcall GetConsoleAliasExesA(str long) -@ stdcall GetConsoleAliasExesLengthA() -@ stdcall GetConsoleAliasExesLengthW() -@ stdcall GetConsoleAliasExesW(wstr long) -@ stdcall GetConsoleAliasW(wstr ptr long wstr) -@ stdcall GetConsoleAliasesA(str long str) -@ stdcall GetConsoleAliasesLengthA(str) -@ stdcall GetConsoleAliasesLengthW(wstr) -@ stdcall GetConsoleAliasesW(wstr long wstr) -@ stdcall GetConsoleCP() -@ stdcall GetConsoleCharType(long long ptr) -@ stdcall GetConsoleCommandHistoryA(long long long) -@ stdcall GetConsoleCommandHistoryLengthA(long) -@ stdcall GetConsoleCommandHistoryLengthW(long) -@ stdcall GetConsoleCommandHistoryW(long long long) -@ stdcall GetConsoleCursorInfo(long ptr) -@ stdcall GetConsoleCursorMode(long ptr ptr) -@ stdcall GetConsoleDisplayMode(ptr) -@ stdcall GetConsoleFontInfo(long long long ptr) -@ stdcall GetConsoleFontSize(long long) -@ stdcall GetConsoleHardwareState(long long ptr) -@ stdcall GetConsoleHistoryInfo(ptr) -@ stdcall GetConsoleInputExeNameA(long ptr) -@ stdcall GetConsoleInputExeNameW(long ptr) -@ stdcall GetConsoleInputWaitHandle() -@ stdcall GetConsoleKeyboardLayoutNameA(ptr) -@ stdcall GetConsoleKeyboardLayoutNameW(ptr) -@ stdcall GetConsoleMode(long ptr) -@ stdcall GetConsoleNlsMode(long ptr) -;@ stdcall GetConsoleOriginalTitleA ; Win 7 -;@ stdcall GetConsoleOriginalTitleW ; Win 7 -@ stdcall GetConsoleOutputCP() -@ stdcall GetConsoleProcessList(ptr long) ; missing in XP SP3 -@ stdcall GetConsoleScreenBufferInfo(long ptr) -;@ stdcall GetConsoleScreenBufferInfoEx ; Win 7 -@ stdcall GetConsoleSelectionInfo(ptr) -@ stdcall GetConsoleTitleA(ptr long) -@ stdcall GetConsoleTitleW(ptr long) -@ stdcall GetConsoleWindow() -@ stdcall GetCurrencyFormatA(long long str ptr str long) -;@ stdcall GetCurrencyFormatEx ; Win 7 -@ stdcall GetCurrencyFormatW(long long str ptr str long) -@ stdcall GetCurrentActCtx(ptr) -@ stdcall GetCurrentConsoleFont(long long ptr) -;@ stdcall GetCurrentConsoleFontEx ; Win 7 -@ stdcall GetCurrentDirectoryA(long ptr) -@ stdcall GetCurrentDirectoryW(long ptr) -@ stdcall GetCurrentProcess() -@ stdcall GetCurrentProcessId() -@ stdcall GetCurrentProcessorNumber() ntdll.RtlGetCurrentProcessorNumber -;@ stdcall GetCurrentProcessorNumberEx ntdll.RtlGetCurrentProcessorNumberEx ; Win 7 -@ stdcall GetCurrentThread() -@ stdcall GetCurrentThreadId() -;@ stdcall GetCurrentUmsThread -@ stdcall GetDateFormatA(long long ptr str ptr long) -;@ stdcall GetDateFormatEx ; Win 7 -@ stdcall GetDateFormatW(long long ptr wstr ptr long) -@ stub GetDaylightFlag ; missing in XP SP3 and Win 7 -@ stdcall GetDefaultCommConfigA(str ptr long) -@ stdcall GetDefaultCommConfigW(wstr ptr long) -@ stdcall GetDefaultSortkeySize(ptr) ; missing in Win 7 -@ stdcall GetDevicePowerState(long ptr) -@ stdcall GetDiskFreeSpaceA(str ptr ptr ptr ptr) -@ stdcall GetDiskFreeSpaceExA (str ptr ptr ptr) -@ stdcall GetDiskFreeSpaceExW (wstr ptr ptr ptr) -@ stdcall GetDiskFreeSpaceW(wstr ptr ptr ptr ptr) -@ stdcall GetDllDirectoryA(long ptr) -@ stdcall GetDllDirectoryW(long ptr) -@ stdcall GetDriveTypeA(str) -@ stdcall GetDriveTypeW(wstr) -;@ stdcall GetDurationFormat ; Win 7 -;@ stdcall GetDurationFormatEx ; Win 7 -;@ stdcall GetDynamicTimeZoneInformation ; Win 7 -;@ stdcall GetEnabledExtendedFeatures api-ms-win-core-xstate-l1-1-0.RtlGetEnabledExtendedFeatures ; Win 7 -@ stdcall GetEnvironmentStrings() -@ stdcall GetEnvironmentStringsA() GetEnvironmentStrings -@ stdcall GetEnvironmentStringsW() -@ stdcall GetEnvironmentVariableA(str ptr long) -@ stdcall GetEnvironmentVariableW(wstr ptr long) -;@ stdcall GetEraNameCountedString ; Win 7 -@ stdcall GetErrorMode() -@ stdcall GetExitCodeProcess(long ptr) -@ stdcall GetExitCodeThread(long ptr) -@ stdcall GetExpandedNameA(str ptr) -@ stdcall GetExpandedNameW(wstr ptr) -;@ stdcall GetExtendedContextLength ; Win 7 -;@ stdcall GetExtendedFeaturesMask api-ms-win-core-xstate-l1-1-0.RtlGetExtendedFeaturesMask ; Win 7 -@ stdcall GetFileAttributesA(str) -@ stdcall GetFileAttributesByHandle(long ptr long) ; missing in Win 7 -@ stdcall GetFileAttributesExA(str long ptr) -@ stdcall GetFileAttributesExW(wstr long ptr) -;@ stdcall GetFileAttributesTransactedA ; Win 7 -;@ stdcall GetFileAttributesTransactedW ; Win 7 -@ stdcall GetFileAttributesW(wstr) -@ stdcall GetFileBandwidthReservation(long ptr ptr ptr ptr ptr) -@ stdcall GetFileInformationByHandle(long ptr) -;@ stdcall GetFileInformationByHandleEx ; Win 7 -;@ stdcall GetFileMUIInfo ; Win 7 -;@ stdcall GetFileMUIPath ; Win 7 -@ stdcall GetFileSize(long ptr) -@ stdcall GetFileSizeEx(long ptr) -@ stdcall GetFileTime(long ptr ptr ptr) -@ stdcall GetFileType(long) -@ stdcall GetFinalPathNameByHandleA(long str long long) -@ stdcall GetFinalPathNameByHandleW(long wstr long long) -@ stdcall GetFirmwareEnvironmentVariableA(str str ptr long) -@ stdcall GetFirmwareEnvironmentVariableW(wstr wstr ptr long) -@ stdcall GetFullPathNameA(str long ptr ptr) -;@ stdcall GetFullPathNameTransactedA ; Win 7 -;@ stdcall GetFullPathNameTransactedW ; Win 7 -@ stdcall GetFullPathNameW(wstr long ptr ptr) -@ stdcall GetGeoInfoA(long long ptr long long) -@ stdcall GetGeoInfoW(long long ptr long long) -@ stdcall GetHandleContext(long) ; missing on x64 -@ stdcall GetHandleInformation(long ptr) -@ stub GetSCallbackTarget ; missing in XP SP3 and Win 7 -@ stub GetSCallbackTemplate ; missing in XP SP3 and Win 7 -@ stdcall GetLargePageMinimum() -@ stdcall GetLargestConsoleWindowSize(long) -@ stdcall GetLastError() -@ stdcall GetLinguistLangSize(ptr) ; missing in Win 7 -@ stdcall GetLocalTime(ptr) -@ stdcall GetLocaleInfoA(long long ptr long) -@ stdcall GetLocaleInfoEx(wstr long wstr long) ; Vista+ -@ stdcall GetLocaleInfoW(long long ptr long) -@ stdcall GetLogicalDriveStringsA(long ptr) -@ stdcall GetLogicalDriveStringsW(long ptr) -@ stdcall GetLogicalDrives() -@ stdcall GetLogicalProcessorInformation(ptr ptr) -;@ stdcall GetLogicalProcessorInformationEx api-ms-win-core-sysinfo-l1-1-0.GetLogicalProcessorInformationEx ; Win 7 -@ stdcall GetLongPathNameA (str long long) -;@ stdcall GetLongPathNameTransactedA ; Win 7 -;@ stdcall GetLongPathNameTransactedW ; Win 7 -@ stdcall GetLongPathNameW (wstr long long) -@ stdcall GetMailslotInfo(long ptr ptr ptr ptr) -;@ stdcall GetMaximumProcessorCount ; Win 7 -;@ stdcall GetMaximumProcessorGroupCount ; Win 7 -@ stdcall GetModuleFileNameA(long ptr long) -@ stdcall GetModuleFileNameW(long ptr long) -@ stdcall GetModuleHandleA(str) -@ stdcall GetModuleHandleExA(long ptr ptr) -@ stdcall GetModuleHandleExW(long ptr ptr) -@ stdcall GetModuleHandleW(wstr) -;@ stdcall GetNLSVersion ; Win 7 -;@ stdcall GetNLSVersionEx ; Win 7 -;@ stdcall GetNamedPipeAttribute ; Win 7 -;@ stdcall GetNamedPipeClientComputerNameA ; Win 7 -;@ stdcall GetNamedPipeClientComputerNameW ; Win 7 -;@ stdcall GetNamedPipeClientProcessId ; Win 7 -;@ stdcall GetNamedPipeClientSessionId ; Win 7 -@ stdcall GetNamedPipeHandleStateA(long ptr ptr ptr ptr str long) -@ stdcall GetNamedPipeHandleStateW(long ptr ptr ptr ptr wstr long) -@ stdcall GetNamedPipeInfo(long ptr ptr ptr ptr) -;@ stdcall GetNamedPipeServerProcessId ; Win 7 -;@ stdcall GetNamedPipeServerSessionId ; Win 7 -@ stdcall GetNativeSystemInfo(ptr) -;@ stdcall -arch=x86_64 GetNextUmsListItem -@ stdcall GetNextVDMCommand(long) -@ stdcall GetNlsSectionName(long long double str str double) ; missing in Win 7 -@ stdcall GetNumaAvailableMemory(ptr double ptr) ; missing in Win 7 -@ stdcall GetNumaAvailableMemoryNode(double ptr) -;@ stdcall GetNumaAvailableMemoryNodeEx ; Win 7 -@ stdcall GetNumaHighestNodeNumber(ptr) -;@ stdcall GetNumaNodeNumberFromHandle ; Win 7 -@ stdcall GetNumaNodeProcessorMask(double ptr) -;@ stdcall GetNumaNodeProcessorMaskEx ; Win 7 -@ stdcall GetNumaProcessorMap(ptr double ptr) ; missing in Win 7 -@ stdcall GetNumaProcessorNode(double ptr) -;@ stdcall GetNumaProcessorNodeEx ; Win 7 -;@ stdcall GetNumaProximityNode ; Win 7 -;@ stdcall GetNumaProximityNodeEx ; Win 7 -@ stdcall GetNumberFormatA(long long str ptr ptr long) -;@ stdcall GetNumberFormatEx ; Win 7 -@ stdcall GetNumberFormatW(long long wstr ptr ptr long) -@ stdcall GetNumberOfConsoleFonts() -@ stdcall GetNumberOfConsoleInputEvents(long ptr) -@ stdcall GetNumberOfConsoleMouseButtons(ptr) -@ stdcall GetOEMCP() -@ stdcall GetOverlappedResult(long ptr ptr long) -;@ stdcall GetPhysicallyInstalledSystemMemory ; Win 7 -@ stdcall GetPriorityClass(long) -@ stdcall GetPrivateProfileIntA(str str long str) -@ stdcall GetPrivateProfileIntW(wstr wstr long wstr) -@ stdcall GetPrivateProfileSectionA(str ptr long str) -@ stdcall GetPrivateProfileSectionNamesA(ptr long str) -@ stdcall GetPrivateProfileSectionNamesW(ptr long wstr) -@ stdcall GetPrivateProfileSectionW(wstr ptr long wstr) -@ stdcall GetPrivateProfileStringA(str str str ptr long str) -@ stdcall GetPrivateProfileStringW(wstr wstr wstr ptr long wstr) -@ stdcall GetPrivateProfileStructA (str str ptr long str) -@ stdcall GetPrivateProfileStructW(wstr wstr ptr long wstr) -@ stdcall GetProcAddress(long str) -@ stdcall GetProcessAffinityMask(long ptr ptr) -@ stdcall GetProcessFlags(long) -;@ stdcall GetProcessDEPPolicy ; Win 7 -;@ stdcall GetProcessGroupAffinity ; Win 7 -@ stdcall GetProcessHandleCount(long ptr) -@ stdcall GetProcessHeap() -@ stdcall GetProcessHeaps(long ptr) -@ stdcall GetProcessId(long) -;@ stdcall GetProcessIdOfThread ; Win 7 -@ stdcall GetProcessIoCounters(long ptr) -;@ stdcall GetProcessPreferredUILanguages ; Win 7 -@ stdcall GetProcessPriorityBoost(long ptr) -@ stdcall GetProcessShutdownParameters(ptr ptr) -@ stdcall GetProcessTimes(long ptr ptr ptr ptr) -@ stdcall GetProcessVersion(long) -@ stdcall GetProcessWorkingSetSize(long ptr ptr) -;@ stdcall GetProcessWorkingSetSizeEx ; Win 7 -;@ stdcall GetProcessorSystemCycleTime ; Win 7 -@ stdcall GetProductInfo(long long long long ptr) -@ stub GetProductName -@ stdcall GetProfileIntA(str str long) -@ stdcall GetProfileIntW(wstr wstr long) -@ stdcall GetProfileSectionA(str ptr long) -@ stdcall GetProfileSectionW(wstr ptr long) -@ stdcall GetProfileStringA(str str str ptr long) -@ stdcall GetProfileStringW(wstr wstr wstr ptr long) -@ stdcall GetQueuedCompletionStatus(long ptr ptr ptr long) -;@ stdcall GetQueuedCompletionStatusEx ; Win 7 -@ stub GetLSCallbackTarget ; missing in XP SP3 and Win 7 -@ stub GetLSCallbackTemplate ; missing in XP SP3 and Win 7 -@ stdcall GetShortPathNameA(str ptr long) -@ stdcall GetShortPathNameW(wstr ptr long) -@ stdcall GetStartupInfoA(ptr) -@ stdcall GetStartupInfoW(ptr) -@ stdcall GetStdHandle(long) -;@ stdcall GetStringScripts ; Win 7 -@ stdcall GetStringTypeA(long long str long ptr) -@ stdcall GetStringTypeExA(long long str long ptr) -@ stdcall GetStringTypeExW(long long wstr long ptr) -@ stdcall GetStringTypeW(long wstr long ptr) -;@ stdcall GetSystemDEPPolicy ; Win 7 -@ stdcall GetSystemDefaultLCID() -@ stdcall GetSystemDefaultLangID() -;@ stdcall GetSystemDefaultLocaleName ; Win 7 -@ stdcall GetSystemDefaultUILanguage() -@ stdcall GetSystemDirectoryA(ptr long) -@ stdcall GetSystemDirectoryW(ptr long) -;@ stdcall GetSystemFileCacheSize ; Win 7 -;@ stdcall GetSystemFirmwareTable ; Win 7 -@ stdcall GetSystemInfo(ptr) -@ stdcall GetSystemPowerStatus(ptr) -;@ stdcall GetSystemPreferredUILanguages ; Win 7 -@ stdcall GetSystemRegistryQuota(ptr ptr) -@ stdcall GetSystemTime(ptr) -@ stdcall GetSystemTimeAdjustment(ptr ptr ptr) -@ stdcall GetSystemTimeAsFileTime(ptr) -@ stdcall GetSystemTimes(ptr ptr ptr) -@ stdcall GetSystemWindowsDirectoryA(ptr long) -@ stdcall GetSystemWindowsDirectoryW(ptr long) -@ stdcall GetSystemWow64DirectoryA(ptr long) -@ stdcall GetSystemWow64DirectoryW(ptr long) -@ stdcall GetTapeParameters(ptr long ptr ptr) -@ stdcall GetTapePosition(ptr long ptr ptr ptr) -@ stdcall GetTapeStatus(ptr) -@ stdcall GetTempFileNameA(str str long ptr) -@ stdcall GetTempFileNameW(wstr wstr long ptr) -@ stdcall GetTempPathA(long ptr) -@ stdcall GetTempPathW(long ptr) -@ stdcall GetThreadContext(long ptr) -@ stdcall GetThreadErrorMode() -;@ stdcall GetThreadGroupAffinity ; Win 7 -@ stdcall GetThreadIOPendingFlag(long ptr) -@ stdcall GetThreadId(ptr) -;@ stdcall GetThreadIdealProcessorEx ; Win 7 -@ stdcall GetThreadLocale() -;@ stdcall GetThreadPreferredUILanguages ; Win 7 -@ stdcall GetThreadPriority(long) -@ stdcall GetThreadPriorityBoost(long ptr) -@ stdcall GetThreadSelectorEntry(long long ptr) -@ stdcall GetThreadTimes(long ptr ptr ptr ptr) -;@ stdcall GetThreadUILanguage ; Win 7 -@ stdcall GetTickCount() -@ stdcall -ret64 GetTickCount64() -@ stdcall GetTimeFormatA(long long ptr str ptr long) -;@ stdcall GetTimeFormatEx ; Win 7 -@ stdcall GetTimeFormatW(long long ptr wstr ptr long) -@ stdcall GetTimeZoneInformation(ptr) -;@ stdcall GetTimeZoneInformationForYear ; Win 7 -;@ stdcall GetUILanguageInfo ; Win 7 -;@ stdcall -arch=x86_64 GetUmsCompletionListEvent -@ stdcall GetUserDefaultLCID() -@ stdcall GetUserDefaultLangID() -;@ stdcall GetUserDefaultLocaleName ; Win 7 -@ stdcall GetUserDefaultUILanguage() -@ stdcall GetUserGeoID(long) -;@ stdcall GetUserPreferredUILanguages ; Win 7 -@ stdcall GetVDMCurrentDirectories(long long) -@ stdcall GetVersion() -@ stdcall GetVersionExA(ptr) -@ stdcall GetVersionExW(ptr) -@ stdcall GetVolumeInformationA(str ptr long ptr ptr ptr ptr long) -;@ stdcall GetVolumeInformationByHandleW ; Win 7 -@ stdcall GetVolumeInformationW(wstr ptr long ptr ptr ptr ptr long) -@ stdcall GetVolumeNameForVolumeMountPointA(str ptr long) -@ stdcall GetVolumeNameForVolumeMountPointW(wstr ptr long) -@ stdcall GetVolumePathNameA(str ptr long) -@ stdcall GetVolumePathNameW(wstr ptr long) -@ stdcall GetVolumePathNamesForVolumeNameA(str str long ptr) -@ stdcall GetVolumePathNamesForVolumeNameW(wstr wstr long ptr) -@ stdcall GetWindowsDirectoryA(ptr long) -@ stdcall GetWindowsDirectoryW(ptr long) -@ stdcall GetWriteWatch(long ptr long ptr ptr ptr) -@ stdcall GlobalAddAtomA(str) -@ stdcall GlobalAddAtomW(wstr) -@ stdcall GlobalAlloc(long long) -@ stdcall GlobalCompact(long) -@ stdcall GlobalDeleteAtom(long) -@ stdcall GlobalFindAtomA(str) -@ stdcall GlobalFindAtomW(wstr) -@ stdcall GlobalFix(long) -@ stdcall GlobalFlags(long) -@ stdcall GlobalFree(long) -@ stdcall GlobalGetAtomNameA(long ptr long) -@ stdcall GlobalGetAtomNameW(long ptr long) -@ stdcall GlobalHandle(ptr) -@ stdcall GlobalLock(long) -@ stdcall GlobalMemoryStatus(ptr) -@ stdcall GlobalMemoryStatusEx(ptr) -@ stdcall GlobalReAlloc(long long long) -@ stdcall GlobalSize(long) -@ stdcall GlobalUnWire(long) -@ stdcall GlobalUnfix(long) -@ stdcall GlobalUnlock(long) -@ stdcall GlobalWire(long) -@ stdcall Heap32First(ptr long long) -@ stdcall Heap32ListFirst(long ptr) -@ stdcall Heap32ListNext(long ptr) -@ stdcall Heap32Next(ptr) -@ stdcall HeapAlloc(long long long) ntdll.RtlAllocateHeap -@ stdcall HeapCompact(long long) -@ stdcall HeapCreate(long long long) -@ stdcall HeapCreateTagsW(long long wstr wstr) ; missing in Win 7 -@ stdcall HeapDestroy(long) -@ stdcall HeapExtend(long long ptr long) ; missing in Win 7 -@ stdcall HeapFree(long long long) ntdll.RtlFreeHeap -@ stdcall HeapLock(long) -@ stdcall HeapQueryInformation(long long ptr long ptr) -@ stdcall HeapQueryTagW(long long long long ptr) ; missing in Win 7 -@ stdcall HeapReAlloc(long long ptr long) ntdll.RtlReAllocateHeap -@ stub HeapSetFlags ; missing in XP SP3 and Win 7 -@ stdcall HeapSetInformation(ptr long ptr long) -@ stdcall HeapSize(long long ptr) ntdll.RtlSizeHeap -@ stdcall HeapSummary(long long ptr) -@ stdcall HeapUnlock(long) -@ stdcall HeapUsage(long long long long ptr) ; missing in Win 7 -@ stdcall HeapValidate(long long ptr) -@ stdcall HeapWalk(long ptr) -;@ stdcall IdnToAscii ; Win 7 -;@ stdcall IdnToNameprepUnicode ; Win 7 -;@ stdcall IdnToUnicode ; Win 7 -@ stdcall InitAtomTable(long) -;@ stdcall InitOnceBeginInitialize ; Win 7 -;@ stdcall InitOnceComplete ; Win 7 -;@ stdcall InitOnceExecuteOnce ; Win 7 -;@ stdcall InitOnceInitialize ntdll.RtlRunOnceInitialize ; Win 7 -;@ stdcall InitializeConditionVariable ntdll.RtlInitializeConditionVariable ; Win 7 -@ stdcall InitializeCriticalSection(ptr) ; FIXME: ntdll.RtlInitializeCriticalSection -@ stdcall InitializeCriticalSectionAndSpinCount(ptr long) -@ stdcall InitializeCriticalSectionEx(ptr long long) -;@ stdcall InitializeExtendedContext ; Win 7 -;@ stdcall InitializeProcThreadAttributeList api-ms-win-core-processthreads-l1-1-0.InitializeProcThreadAttributeList ; Win 7 -@ stdcall InitializeSListHead(ptr) ntdll.RtlInitializeSListHead -@ stdcall InitializeSRWLock(ptr) ntdll.RtlInitializeSRWLock -@ stdcall -arch=i386 InterlockedCompareExchange (ptr long long) -@ stdcall -arch=i386 -ret64 InterlockedCompareExchange64(ptr double double) ntdll.RtlInterlockedCompareExchange64 -@ stdcall -arch=i386 InterlockedDecrement(ptr) -@ stdcall -arch=i386 InterlockedExchange(ptr long) -@ stdcall -arch=i386 InterlockedExchangeAdd (ptr long ) -@ stdcall InterlockedFlushSList(ptr) ntdll.RtlInterlockedFlushSList -@ stdcall -arch=i386 InterlockedIncrement(ptr) -@ stdcall InterlockedPopEntrySList(ptr) ntdll.RtlInterlockedPopEntrySList -@ stdcall InterlockedPushEntrySList(ptr ptr) ntdll.RtlInterlockedPushEntrySList -;@ stdcall InterlockedPushListSList ntdll.RtlInterlockedPushListSList ; Win 7 -@ stdcall InvalidateConsoleDIBits(long long) -@ stub InvalidateNSCache ; missing in XP SP3 and Win 7 -@ stdcall IsBadCodePtr(ptr) -@ stdcall IsBadHugeReadPtr(ptr long) -@ stdcall IsBadHugeWritePtr(ptr long) -@ stdcall IsBadReadPtr(ptr long) -@ stdcall IsBadStringPtrA(ptr long) -@ stdcall IsBadStringPtrW(ptr long) -@ stdcall IsBadWritePtr(ptr long) -;@ stdcall IsCalendarLeapDay ; Win 7 -;@ stdcall IsCalendarLeapMonth ; Win 7 -;@ stdcall IsCalendarLeapYear ; Win 7 -@ stdcall IsDBCSLeadByte(long) -@ stdcall IsDBCSLeadByteEx(long long) -@ stdcall IsDebuggerPresent() -;@ stdcall IsNLSDefinedString ; Win 7 -;@ stdcall IsNormalizedString ; Win 7 -@ stdcall IsProcessInJob(long long ptr) -@ stdcall IsProcessorFeaturePresent(long) -@ stdcall IsSystemResumeAutomatic() -@ stdcall IsThreadAFiber() -;@ stdcall IsThreadAFiber ; Win 7 -;@ stdcall IsThreadpoolTimerSet ntdll.TpIsTimerSet ; Win 7 -;@ stdcall IsTimeZoneRedirectionEnabled ; Win 7 -;@ stdcall IsValidCalDateTime ; Win 7 -@ stdcall IsValidCodePage(long) -@ stdcall IsValidLanguageGroup(long long) -@ stdcall IsValidLocale(long long) -;@ stdcall IsValidLocaleName ; Win 7 -@ stdcall IsValidUILanguage(long) ; missing in Win 7 -@ stdcall IsWow64Process(ptr ptr) -;@ stdcall K32EmptyWorkingSet ; Win 7 -;@ stdcall K32EnumDeviceDrivers ; Win 7 -;@ stdcall K32EnumPageFilesA ; Win 7 -;@ stdcall K32EnumPageFilesW ; Win 7 -;@ stdcall K32EnumProcessModules ; Win 7 -;@ stdcall K32EnumProcessModulesEx ; Win 7 -;@ stdcall K32EnumProcesses ; Win 7 -;@ stdcall K32GetDeviceDriverBaseNameA ; Win 7 -;@ stdcall K32GetDeviceDriverBaseNameW ; Win 7 -;@ stdcall K32GetDeviceDriverFileNameA ; Win 7 -;@ stdcall K32GetDeviceDriverFileNameW ; Win 7 -;@ stdcall K32GetMappedFileNameA ; Win 7 -;@ stdcall K32GetMappedFileNameW ; Win 7 -;@ stdcall K32GetModuleBaseNameA ; Win 7 -;@ stdcall K32GetModuleBaseNameW ; Win 7 -;@ stdcall K32GetModuleFileNameExA ; Win 7 -;@ stdcall K32GetModuleFileNameExW ; Win 7 -;@ stdcall K32GetModuleInformation ; Win 7 -;@ stdcall K32GetPerformanceInfo ; Win 7 -;@ stdcall K32GetProcessImageFileNameA ; Win 7 -;@ stdcall K32GetProcessImageFileNameW ; Win 7 -;@ stdcall K32GetProcessMemoryInfo ; Win 7 -;@ stdcall K32GetWsChanges ; Win 7 -;@ stdcall K32GetWsChangesEx ; Win 7 -;@ stdcall K32InitializeProcessForWsWatch ; Win 7 -;@ stdcall K32QueryWorkingSet ; Win 7 -;@ stdcall K32QueryWorkingSetEx ; Win 7 -@ stdcall LCIDToLocaleName(long wstr long long) ; needed for wine gecko; missing in XP SP3 -@ stdcall LCMapStringA(long long str long ptr long) -;@ stdcall LCMapStringEx ; Win 7 -@ stdcall LCMapStringW(long long wstr long ptr long) -@ stdcall LZClose(long) -;@ stdcall LZCloseFile ; Win 7 -@ stdcall LZCopy(long long) -;@ stdcall LZCreateFileW ; Win 7 -@ stdcall LZDone() -@ stdcall LZInit(long) -@ stdcall LZOpenFileA(str ptr long) -@ stdcall LZOpenFileW(wstr ptr long) -@ stdcall LZRead(long str long) -@ stdcall LZSeek(long long long) -@ stdcall LZStart() -@ stdcall LeaveCriticalSection(ptr) ntdll.RtlLeaveCriticalSection -;@ stdcall LeaveCriticalSectionWhenCallbackReturns ntdll.TpCallbackLeaveCriticalSectionOnCompletion ; Win 7 -;@ stdcall LoadAppInitDlls ; Win 7 -@ stdcall LoadLibraryA(str) -@ stdcall LoadLibraryExA( str long long) -@ stdcall LoadLibraryExW(wstr long long) -@ stdcall LoadLibraryW(wstr) -@ stdcall LoadModule(str ptr) -@ stdcall LoadResource(long long) -;@ stdcall LoadStringBaseExW ; Win 7 -;@ stdcall LoadStringBaseW ; Win 7 -@ stdcall LocalAlloc(long long) -@ stdcall LocalCompact(long) -@ stdcall LocalFileTimeToFileTime(ptr ptr) -@ stdcall LocalFlags(long) -@ stdcall LocalFree(long) -@ stdcall LocalHandle(ptr) -@ stdcall LocalLock(long) -@ stdcall LocalReAlloc(long long long) -@ stdcall LocalShrink(long long) -@ stdcall LocalSize(long) -@ stdcall LocalUnlock(long) -;@ stub LocaleNameToLCID ; missing in XP SP3 -;@ stdcall LocateExtendedFeature api-ms-win-core-xstate-l1-1-0.RtlLocateExtendedFeature ; Win 7 -;@ stdcall LocateLegacyContext api-ms-win-core-xstate-l1-1-0.RtlLocateLegacyContext ; Win 7 -@ stdcall LockFile(long long long long long) -@ stdcall LockFileEx(long long long long long ptr) -@ stdcall LockResource(long) -@ stdcall MakeCriticalSectionGlobal(ptr) - -@ stdcall MapUserPhysicalPages(ptr long ptr) -@ stdcall MapUserPhysicalPagesScatter(ptr long ptr) -@ stdcall MapViewOfFile(long long long long long) -@ stdcall MapViewOfFileEx(long long long long long ptr) -;@ stdcall MapViewOfFileExNuma ; Win 7 -@ stdcall Module32First(long ptr) -@ stdcall Module32FirstW(long ptr) -@ stdcall Module32Next(long ptr) -@ stdcall Module32NextW(long ptr) -@ stdcall MoveFileA(str str) -@ stdcall MoveFileExA(str str long) -@ stdcall MoveFileExW(wstr wstr long) -;@ stdcall MoveFileTransactedA ; Win 7 -;@ stdcall MoveFileTransactedW ; Win 7 -@ stdcall MoveFileW(wstr wstr) -@ stdcall MoveFileWithProgressA(str str ptr ptr long) -@ stdcall MoveFileWithProgressW(wstr wstr ptr ptr long) -@ stdcall MulDiv(long long long) -@ stdcall MultiByteToWideChar(long long str long ptr long) -@ stdcall NeedCurrentDirectoryForExePathA(str) -@ stdcall NeedCurrentDirectoryForExePathW(wstr) -;@ stdcall NlsCheckPolicy ; Win 7 -@ stdcall NlsConvertIntegerToString(double double double wstr double) ; missing in Win 7 -;@ stdcall NlsEventDataDescCreate ; Win 7 -@ stdcall NlsGetCacheUpdateCount() -@ stub NlsResetProcessLocale ; missing in XP SP3 and Win 7 -;@ stdcall NlsUpdateLocale ; Win 7 -;@ stdcall NlsUpdateSystemLocale ; Win 7 -;@ stdcall NlsWriteEtwEvent ; Win 7 -;@ stdcall NormalizeString ; Win 7 -;@ stdcall NotifyMountMgr ; Win 7 -@ stub NotifyNLSUserCache ; missing in XP SP3 and win 7 -;@ stdcall NotifyUILanguageChange ; Win 7 -@ stdcall NumaVirtualQueryNode(long long long long) ; missing in win 7 -@ stdcall OpenConsoleW(wstr long long long) -@ stdcall OpenDataFile(long long) ; missing in Win 7 -@ stdcall OpenEventA(long long str) -@ stdcall OpenEventW(long long wstr) -@ stdcall OpenFile(str ptr long) -;@ stdcall OpenFileById ; Win 7 -@ stdcall OpenFileMappingA(long long str) -@ stdcall OpenFileMappingW(long long wstr) -@ stdcall OpenJobObjectA(long long str) -@ stdcall OpenJobObjectW(long long wstr) -@ stdcall OpenMutexA(long long str) -@ stdcall OpenMutexW(long long wstr) -;@ stdcall OpenPrivateNamespaceA ; Win 7 -;@ stdcall OpenPrivateNamespaceW ; Win 7 -@ stdcall OpenProcess(long long long) -;@ stdcall OpenProcessToken api-ms-win-core-processthreads-l1-1-0.OpenProcessToken ; Win 7 -@ stdcall OpenProfileUserMapping() -@ stdcall OpenSemaphoreA(long long str) -@ stdcall OpenSemaphoreW(long long wstr) -@ stdcall OpenThread(long long long) -;@ stdcall OpenThreadToken api-ms-win-core-processthreads-l1-1-0.OpenThreadToken ; win 7 -@ stdcall OpenWaitableTimerA(long long str) -@ stdcall OpenWaitableTimerW(long long wstr) -@ stdcall OutputDebugStringA(str) -@ stdcall OutputDebugStringW(wstr) -@ stdcall PeekConsoleInputA(ptr ptr long ptr) -@ stdcall PeekConsoleInputW(ptr ptr long ptr) -@ stdcall PeekNamedPipe(long ptr long ptr ptr ptr) -@ stdcall PostQueuedCompletionStatus(long long ptr ptr) -;@ stdcall PowerClearRequest ; Win 7 -;@ stdcall PowerCreateRequest ; Win 7 -;@ stdcall PowerSetRequest ; Win 7 -@ stdcall PrepareTape(ptr long long) -@ stdcall PrivCopyFileExW(wstr wstr ptr ptr long long) -@ stdcall PrivMoveFileIdentityW(long long long) -@ stdcall Process32First (ptr ptr) -@ stdcall Process32FirstW (ptr ptr) -@ stdcall Process32Next (ptr ptr) -@ stdcall Process32NextW (ptr ptr) -@ stdcall ProcessIdToSessionId(long ptr) -@ stdcall PulseEvent(long) -@ stdcall PurgeComm(long long) -;@ stdcall QueryActCtxSettingsW ; Win 7 -;@ stdcall QueryActCtxW(long ptr ptr long ptr long ptr) -@ stdcall QueryActCtxW(long ptr ptr long ptr long ptr) -@ stdcall QueryDepthSList(ptr) ntdll.RtlQueryDepthSList -@ stdcall QueryDosDeviceA(str ptr long) -@ stdcall QueryDosDeviceW(wstr ptr long) -@ stdcall QueryFullProcessImageNameA(ptr long str ptr) ; Vista and later -@ stdcall QueryFullProcessImageNameW(ptr long wstr ptr) ; Vista and later -;@ stdcall QueryIdleProcessorCycleTime ; Win 7 -;@ stdcall QueryIdleProcessorCycleTimeEx ; Win 7 -@ stdcall QueryInformationJobObject(long long ptr long ptr) -@ stdcall QueryMemoryResourceNotification(ptr ptr) -@ stub QueryNumberOfEventLogRecords ; missing in XP SP3 and Win 7 -@ stub QueryOldestEventLogRecord ; missing in XP SP3 and Win 7 -@ stdcall QueryPerformanceCounter(ptr) -@ stdcall QueryPerformanceFrequency(ptr) -;@ stdcall QueryProcessAffinityUpdateMode ; Win 7 -;@ stdcall QueryProcessCycleTime ; Win 7 -;@ stdcall QueryThreadCycleTime ; Win 7 -;@ stdcall QueryThreadProfiling ; Win 7 -;@ stdcall QueryThreadpoolStackInformation ; Win 7 -;@ stdcall -arch=x86_64 QueryUmsThreadInformation -;@ stdcall QueryUnbiasedInterruptTime ; Win 7 -@ stdcall QueryWin31IniFilesMappedToRegistry(long long long long) ; missing in Win 7 -@ stdcall QueueUserAPC(ptr long long) -@ stdcall QueueUserWorkItem(ptr ptr long) -@ stdcall RaiseException(long long long ptr) -;@ stdcall RaiseFailFastException ; Win 7 -@ stub ReOpenFile ;@ stdcall ReOpenFile(ptr long long long) -@ stdcall ReadConsoleA(long ptr long ptr ptr) -@ stdcall ReadConsoleInputA(long ptr long ptr) -@ stdcall ReadConsoleInputExA(long ptr long ptr long) -@ stdcall ReadConsoleInputExW(long ptr long ptr long) -@ stdcall ReadConsoleInputW(long ptr long ptr) -@ stdcall ReadConsoleOutputA(long ptr long long ptr) -@ stdcall ReadConsoleOutputAttribute(long ptr long long ptr) -@ stdcall ReadConsoleOutputCharacterA(long ptr long long ptr) -@ stdcall ReadConsoleOutputCharacterW(long ptr long long ptr) -@ stdcall ReadConsoleOutputW(long ptr long long ptr) -@ stdcall ReadConsoleW(long ptr long ptr ptr) -@ stdcall ReadDirectoryChangesW(long ptr long long long ptr ptr ptr) -@ stdcall ReadFile(long ptr long ptr ptr) -@ stdcall ReadFileEx(long ptr long ptr ptr) -@ stdcall ReadFileScatter(long ptr long ptr ptr) -@ stdcall ReadProcessMemory(long ptr ptr long ptr) -;@ stdcall ReadThreadProfilingData ; Win 7 -;@ stdcall RegCloseKey ; Win 7 -;@ stdcall RegCreateKeyExA ; Win 7 -;@ stdcall RegCreateKeyExW ; Win 7 -;@ stdcall RegDeleteKeyExA ; Win 7 -;@ stdcall RegDeleteKeyExW ; Win 7 -;@ stdcall RegDeleteTreeA ; Win 7 -;@ stdcall RegDeleteTreeW ; Win 7 -;@ stdcall RegDeleteValueA ; Win 7 -;@ stdcall RegDeleteValueW ; Win 7 -;@ stdcall RegDisablePredefinedCacheEx ; Win 7 -;@ stdcall RegEnumKeyExA ; Win 7 -;@ stdcall RegEnumKeyExW ; Win 7 -;@ stdcall RegEnumValueA ; Win 7 -;@ stdcall RegEnumValueW ; Win 7 -;@ stdcall RegFlushKey ; Win 7 -;@ stdcall RegGetKeySecurity ; Win 7 -;@ stdcall RegGetValueA ; Win 7 -;@ stdcall RegGetValueW ; Win 7 -;@ stdcall RegKrnGetGlobalState ; Win 7 -;@ stdcall RegKrnInitialize ; Win 7 -;@ stdcall RegLoadKeyA ; Win 7 -;@ stdcall RegLoadKeyW ; Win 7 -;@ stdcall RegLoadMUIStringA ; Win 7 -;@ stdcall RegLoadMUIStringW ; Win 7 -;@ stdcall RegNotifyChangeKeyValue ; Win 7 -;@ stdcall RegOpenCurrentUser ; Win 7 -;@ stdcall RegOpenKeyExA ; Win 7 -;@ stdcall RegOpenKeyExW ; Win 7 -;@ stdcall RegOpenUserClassesRoot ; Win 7 -;@ stdcall RegQueryInfoKeyA ; Win 7 -;@ stdcall RegQueryInfoKeyW ; Win 7 -;@ stdcall RegQueryValueExA ; Win 7 -;@ stdcall RegQueryValueExW ; Win 7 -;@ stdcall RegRestoreKeyA ; Win 7 -;@ stdcall RegRestoreKeyW ; Win 7 -;@ stdcall RegSaveKeyExA ; Win 7 -;@ stdcall RegSaveKeyExW ; Win 7 -;@ stdcall RegSetKeySecurity ; Win 7 -;@ stdcall RegSetValueExA ; Win 7 -;@ stdcall RegSetValueExW ; Win 7 -;@ stdcall RegUnLoadKeyA ; Win 7 -;@ stdcall RegUnLoadKeyW ; Win 7 -;@ stdcall RegisterApplicationRecoveryCallback ; Win 7 -@ stdcall RegisterApplicationRestart(wstr long) -@ stdcall RegisterConsoleIME(ptr ptr) -@ stdcall RegisterConsoleOS2(long) -@ stdcall RegisterConsoleVDM(long long long long long long long long long long long) -;@ stub RegisterServiceProcess ; missing in XP SP3 and Win 7 -@ stub RegisterSysMsgHandler ; missing in XP SP3 and win 7 -@ stdcall RegisterWaitForInputIdle(ptr) -@ stdcall RegisterWaitForSingleObject(ptr long ptr ptr long long) -@ stdcall RegisterWaitForSingleObjectEx(long ptr ptr long long) -@ stdcall RegisterWowBaseHandlers(long) -@ stdcall RegisterWowExec(long) -@ stdcall ReinitializeCriticalSection(ptr) -@ stdcall ReleaseActCtx(ptr) -@ stdcall ReleaseMutex(long) -;@ stdcall ReleaseMutexWhenCallbackReturns ntdll.TpCallbackReleaseMutexOnCompletion ; Win 7 -@ stdcall ReleaseSRWLockExclusive(ptr) ntdll.RtlReleaseSRWLockExclusive -@ stdcall ReleaseSRWLockShared(ptr) ntdll.RtlReleaseSRWLockShared -@ stdcall ReleaseSemaphore(long long ptr) -;@ stdcall ReleaseSemaphoreWhenCallbackReturns ntdll.TpCallbackReleaseSemaphoreOnCompletion ; Win 7 -@ stdcall RemoveDirectoryA(str) -;@ stdcall RemoveDirectoryTransactedA ; Win 7 -;@ stdcall RemoveDirectoryTransactedW ; Win 7 -@ stdcall RemoveDirectoryW(wstr) -@ stdcall RemoveLocalAlternateComputerNameA(str long) -@ stdcall RemoveLocalAlternateComputerNameW(wstr long) -;@ stdcall RemoveSecureMemoryCacheCallback ; Win 7 -@ stdcall RemoveVectoredContinueHandler(ptr) ntdll.RtlRemoveVectoredContinueHandler -@ stdcall RemoveVectoredExceptionHandler(ptr) ntdll.RtlRemoveVectoredExceptionHandler -@ stdcall ReplaceFile(wstr wstr wstr long ptr ptr) ReplaceFileW -@ stdcall ReplaceFileA(str str str long ptr ptr) -@ stdcall ReplaceFileW(wstr wstr wstr long ptr ptr) -;@ stdcall ReplacePartitionUnit ; Win 7 -@ stdcall RequestDeviceWakeup(long) -@ stdcall RequestWakeupLatency(long) -@ stdcall ResetEvent(long) -@ stdcall ResetWriteWatch(ptr long) -;@ stdcall ResolveLocaleName ; Win 7 -@ stdcall RestoreLastError(long) ntdll.RtlRestoreLastWin32Error -@ stdcall ResumeThread(long) -@ cdecl -arch=x86_64 RtlAddFunctionTable(ptr long long) ntdll.RtlAddFunctionTable -@ stdcall -register RtlCaptureContext(ptr) ntdll.RtlCaptureContext -@ stdcall RtlCaptureStackBackTrace(long long ptr ptr) ntdll.RtlCaptureStackBackTrace -@ stdcall -arch=x86_64 RtlCompareMemory(ptr ptr ptr) -@ stdcall -arch=x86_64 RtlCopyMemory(ptr ptr ptr) -@ stdcall -arch=x86_64 RtlDeleteFunctionTable(ptr) -@ stdcall RtlFillMemory(ptr long long) ntdll.RtlFillMemory -@ stdcall -arch=x86_64 RtlInstallFunctionTableCallback(double double long ptr ptr ptr) -@ stdcall -arch=x86_64 RtlLookupFunctionEntry(ptr ptr ptr) ntdll.RtlLookupFunctionEntry -@ stdcall RtlMoveMemory(ptr ptr long) ntdll.RtlMoveMemory -@ stdcall -arch=x86_64 RtlPcToFileHeader(ptr ptr) ntdll.RtlPcToFileHeader -@ stdcall -arch=x86_64 RtlRaiseException(ptr) ntdll.RtlRaiseException -@ stdcall -arch=x86_64 RtlRestoreContext(ptr ptr) ntdll.RtlRestoreContext -@ stdcall RtlUnwind(ptr ptr ptr long) ntdll.RtlUnwind -@ stdcall -arch=x86_64 RtlUnwindEx(ptr ptr ptr ptr ptr ptr) ntdll.RtlUnwindEx -@ stdcall -arch=x86_64 RtlVirtualUnwind(ptr ptr ptr long) ntdll.RtlVirtualUnwind -@ stdcall RtlZeroMemory(ptr long) ntdll.RtlZeroMemory -@ stdcall ScrollConsoleScreenBufferA(long ptr ptr ptr ptr) -@ stdcall ScrollConsoleScreenBufferW(long ptr ptr ptr ptr) -@ stdcall SearchPathA(str str str long ptr ptr) -@ stdcall SearchPathW(wstr wstr wstr long ptr ptr) -@ stdcall SetCPGlobal(long) ; missing in Win 7 -@ stdcall SetCalendarInfoA(long long long str) -@ stdcall SetCalendarInfoW(long long long wstr) -@ stdcall SetClientTimeZoneInformation(ptr) -@ stdcall SetComPlusPackageInstallStatus(ptr) -@ stdcall SetCommBreak(long) -@ stdcall SetCommConfig(long ptr long) -@ stdcall SetCommMask(long ptr) -@ stdcall SetCommState(long ptr) -@ stdcall SetCommTimeouts(long ptr) -@ stdcall SetComputerNameA(str) -@ stdcall SetComputerNameExA(long str) -@ stdcall SetComputerNameExW(long wstr) -@ stdcall SetComputerNameW(wstr) -@ stdcall SetConsoleActiveScreenBuffer(long) -@ stdcall SetConsoleCP(long) -@ stdcall SetConsoleCommandHistoryMode(long) ; missing in win 7 -@ stdcall SetConsoleCtrlHandler(ptr long) -@ stdcall SetConsoleCursor(long long) -@ stdcall SetConsoleCursorInfo(long ptr) -@ stdcall SetConsoleCursorMode(long long long) -@ stdcall SetConsoleCursorPosition(long long) -@ stdcall SetConsoleDisplayMode(long long ptr) -@ stdcall SetConsoleFont(long long) -@ stdcall SetConsoleHardwareState(long long long) -@ stdcall SetConsoleHistoryInfo(ptr) -@ stdcall SetConsoleIcon(ptr) -@ stdcall SetConsoleInputExeNameA(ptr) -@ stdcall SetConsoleInputExeNameW(ptr) -@ stdcall SetConsoleKeyShortcuts(long long long long) -@ stdcall SetConsoleLocalEUDC(long long long long) -@ stdcall SetConsoleMaximumWindowSize(long long) -@ stdcall SetConsoleMenuClose(long) -@ stdcall SetConsoleMode(long long) -@ stdcall SetConsoleNlsMode(long long) -@ stdcall SetConsoleNumberOfCommandsA(long long) -@ stdcall SetConsoleNumberOfCommandsW(long long) -@ stdcall SetConsoleOS2OemFormat(long) -@ stdcall SetConsoleOutputCP(long) -@ stdcall SetConsolePalette(long long long) -;@ stdcall SetConsoleScreenBufferInfoEx ; Win 7 -@ stdcall SetConsoleScreenBufferSize(long long) -@ stdcall SetConsoleTextAttribute(long long) -@ stdcall SetConsoleTitleA(str) -@ stdcall SetConsoleTitleW(wstr) -@ stdcall SetConsoleWindowInfo(long long ptr) -@ stdcall SetCriticalSectionSpinCount(ptr long) ntdll.RtlSetCriticalSectionSpinCount -;@ stdcall SetCurrentConsoleFontEx ; Win 7 -@ stdcall SetCurrentDirectoryA(str) -@ stdcall SetCurrentDirectoryW(wstr) -@ stub SetDaylightFlag ; missing in XP SP3 and Win 7 -@ stdcall SetDefaultCommConfigA(str ptr long) -@ stdcall SetDefaultCommConfigW(wstr ptr long) -@ stdcall SetDllDirectoryA(str) -@ stdcall SetDllDirectoryW(wstr) -;@ stdcall SetDynamicTimeZoneInformation ; Win 7 -@ stdcall SetEndOfFile(long) -;@ stdcall SetEnvironmentStringsA ; Win 7 -;@ stdcall SetEnvironmentStringsW ; Win 7 -@ stdcall SetEnvironmentVariableA(str str) -@ stdcall SetEnvironmentVariableW(wstr wstr) -@ stdcall SetErrorMode(long) -@ stdcall SetEvent(long) -;@ stdcall SetEventWhenCallbackReturns ntdll.TpCallbackSetEventOnCompletion ; Win 7 -;@ stdcall SetExtendedFeaturesMask api-ms-win-core-xstate-l1-1-0.RtlSetExtendedFeaturesMask ; Win 7 -@ stdcall SetFileApisToANSI() -@ stdcall SetFileApisToOEM() -@ stdcall SetFileAttributesA(str long) -;@ stdcall SetFileAttributesTransactedA ; Win 7 -;@ stdcall SetFileAttributesTransactedW ; Win 7 -@ stdcall SetFileAttributesW(wstr long) -;@ stdcall SetFileBandwidthReservation ; Win 7 -;@ stdcall SetFileCompletionNotificationModes ; Win 7 -;@ stdcall SetFileInformationByHandle ; Win 7 -;@ stdcall SetFileIoOverlappedRange ; Win 7 -@ stdcall SetFilePointer(long long ptr long) -@ stdcall SetFilePointerEx(long double ptr long) -@ stdcall SetFileShortNameA(long str) -@ stdcall SetFileShortNameW(long wstr) -@ stdcall SetFileTime(long ptr ptr ptr) -@ stdcall SetFileValidData(long double) -@ stdcall SetFirmwareEnvironmentVariableA(str str ptr long) -@ stdcall SetFirmwareEnvironmentVariableW(wstr wstr ptr long) -@ stdcall SetHandleContext(long long) ; missing in Win 7 x64 -@ stdcall SetHandleCount(long) -@ stdcall SetHandleInformation(long long long) -@ stdcall SetInformationJobObject(long long ptr long) -@ stub SetLastConsoleEventActive ; missing in XP SP3 -@ stdcall SetLastError(long) -@ stub SetLocalPrimaryComputerNameA ; missing in XP SP3 -@ stub SetLocalPrimaryComputerNameW ; missing in XP SP3 -@ stdcall SetLocalTime(ptr) -@ stdcall SetLocaleInfoA(long long str) -@ stdcall SetLocaleInfoW(long long wstr) -@ stdcall SetMailslotInfo(long long) -@ stdcall SetMessageWaitingIndicator(long double) -;@ stdcall SetNamedPipeAttribute ; Win 7 -@ stdcall SetNamedPipeHandleState(long ptr ptr ptr) -@ stdcall SetPriorityClass(long long) -@ stdcall SetProcessAffinityMask(long long) -;@ stdcall SetProcessAffinityUpdateMode ; Win 7 -;@ stdcall SetProcessDEPPolicy ; Win 7 -;@ stdcall SetProcessPreferredUILanguages ; Win 7 -@ stdcall SetProcessPriorityBoost(long long) -@ stdcall SetProcessShutdownParameters(long long) -@ stdcall SetProcessWorkingSetSize(long long long) -;@ stdcall SetProcessWorkingSetSizeEx ; Win 7 -;@ stdcall SetSearchPathMode ; Win 7 -@ stdcall SetStdHandle(long long) -;@ stdcall SetStdHandleEx ; Win 7 -;@ stdcall SetSystemFileCacheSize ; Win 7 -@ stdcall SetSystemPowerState(long long) -@ stdcall SetSystemTime(ptr) -@ stdcall SetSystemTimeAdjustment(long long) -@ stdcall SetTapeParameters(ptr long ptr) -@ stdcall SetTapePosition(ptr long long long long long) -@ stdcall SetTermsrvAppInstallMode(long) -@ stdcall SetThreadAffinityMask(long long) -@ stdcall SetThreadContext(long ptr) -@ stdcall SetThreadErrorMode(long ptr) -@ stdcall SetThreadExecutionState(long) -;@ stdcall SetThreadGroupAffinity ; Win 7 -@ stdcall SetThreadIdealProcessor(long long) -;@ stdcall SetThreadIdealProcessorEx ; Win 7 -@ stdcall SetThreadLocale(long) -;@ stdcall SetThreadPreferredUILanguages ; Win 7 -@ stdcall SetThreadPriority(long long) -@ stdcall SetThreadPriorityBoost(long long) -;@ stdcall SetThreadStackGuarantee ; Win 7 -;@ stdcall SetThreadToken api-ms-win-core-processthreads-l1-1-0.SetThreadToken ; Win 7 -@ stdcall SetThreadUILanguage(long) -;@ stdcall SetThreadpoolStackInformation ; Win 7 -;@ stdcall SetThreadpoolThreadMaximum ntdll.TpSetPoolMaxThreads ; Win 7 -;@ stdcall SetThreadpoolThreadMinimum ; Win 7 -;@ stdcall SetThreadpoolTimer ntdll.TpSetTimer ; Win 7 -;@ stdcall SetThreadpoolWait ntdll.TpSetWait ; Win 7 -@ stdcall SetTimeZoneInformation(ptr) -@ stdcall SetTimerQueueTimer(long ptr ptr long long long) -;@ stdcall -arch?x86_64 SetUmsThreadInformation -@ stdcall SetUnhandledExceptionFilter(ptr) -@ stdcall SetUserGeoID(long) -@ stdcall SetVDMCurrentDirectories(long long) -@ stdcall SetVolumeLabelA(str str) -@ stdcall SetVolumeLabelW(wstr wstr) -@ stdcall SetVolumeMountPointA(str str) -@ stdcall SetVolumeMountPointW(wstr wstr) -@ stdcall SetWaitableTimer(long ptr long ptr ptr long) -;@ stdcall SetWaitableTimerEx api-ms-win-core-threadpool-l1-1-0.SetWaitableTimerEx ; Win 7 -@ stdcall SetupComm(long long long) -@ stdcall ShowConsoleCursor(long long) -@ stdcall SignalObjectAndWait(long long long long) -@ stdcall SizeofResource(long long) -@ stdcall Sleep(long) -;@ stdcall SleepConditionVariableCS ; Win 7 -;@ stdcall SleepConditionVariableSRW ; Win 7 -@ stdcall SleepEx(long long) -;@ stdcall SortCloseHandle ; Win 7 -;@ stdcall SortGetHandle ; Win 7 -;@ stdcall StartThreadpoolIo ntdll.TpStartAsyncIoOperation ; Win 7 -;@ stdcall SubmitThreadpoolWork ntdll.TpPostWork ; Win 7 -@ stdcall SuspendThread(long) -@ stdcall SwitchToFiber(ptr) -@ stdcall SwitchToThread() -@ stdcall SystemTimeToFileTime(ptr ptr) -@ stdcall SystemTimeToTzSpecificLocalTime (ptr ptr ptr) -@ stdcall TerminateJobObject(long long) -@ stdcall TerminateProcess(long long) -@ stdcall TerminateThread(long long) -@ stdcall TermsrvAppInstallMode() -@ stdcall Thread32First(long ptr) -@ stdcall Thread32Next(long ptr) -@ stdcall TlsAlloc() -@ stub TlsAllocInternal ; missing in XP SP3 and Win 7 -@ stdcall TlsFree(long) -@ stub TlsFreeInternal ; missing in XP SP3 and Win 7 -@ stdcall TlsGetValue(long) -@ stdcall TlsSetValue(long ptr) -@ stdcall Toolhelp32ReadProcessMemory(long ptr ptr long ptr) -@ stdcall TransactNamedPipe(long ptr long ptr long ptr ptr) -@ stdcall TransmitCommChar(long long) -@ stdcall TrimVirtualBuffer(ptr) ; missing in Win 7 -;@ stdcall TryAcquireSRWLockExclusive ntdll.RtlTryAcquireSRWLockExclusive ; Win 7 -;@ stdcall TryAcquireSRWLockShared ntdll.RtlTryAcquireSRWLockShared ; Win 7 -@ stdcall TryEnterCriticalSection(ptr) ntdll.RtlTryEnterCriticalSection -;@ stdcall TrySubmitThreadpoolCallback ; Win 7 -@ stdcall TzSpecificLocalTimeToSystemTime(ptr ptr ptr) -@ stdcall UTRegister(long str str str ptr ptr ptr) -@ stdcall UTUnRegister(long) -;@ stdcall -arch=x86_64 UmsThreadYield -@ stdcall UnhandledExceptionFilter(ptr) -@ stdcall UninitializeCriticalSection(ptr) -@ stdcall UnlockFile(long long long long long) -@ stdcall UnlockFileEx(long long long long ptr) -@ stdcall UnmapViewOfFile(ptr) -;@ stdcall UnregisterApplicationRecoveryCallback ; Win 7 -;@ stdcall UnregisterApplicationRestart ; Win 7 -@ stdcall UnregisterConsoleIME() -@ stdcall UnregisterWait(long) -@ stdcall UnregisterWaitEx(long long) -;@ stdcall UpdateCalendarDayOfWeek ; Win 7 -;@ stdcall UpdateProcThreadAttribute api-ms-win-core-processthreads-l1-1-0.UpdateProcThreadAttribute ; Win 7 -@ stdcall UpdateResourceA(long str str long ptr long) -@ stdcall UpdateResourceW(long wstr wstr long ptr long) -@ stdcall VDMConsoleOperation(long long) -@ stdcall VDMOperationStarted(long) -@ stub ValidateCType ; missing in XP SP3 and Win 7 -@ stub ValidateLocale ; missing in XP SP3 and Win 7 -@ stdcall VerLanguageNameA(long str long) -@ stdcall VerLanguageNameW(long wstr long) -@ stdcall -ret64 VerSetConditionMask(long long long long) ntdll.VerSetConditionMask -@ stdcall VerifyConsoleIoHandle(long) -;@ stdcall VerifyScripts ; Win 7 -@ stdcall VerifyVersionInfoA(long long double) -@ stdcall VerifyVersionInfoW(long long double) -@ stdcall VirtualAlloc(ptr long long long) -@ stdcall VirtualAllocEx(long ptr long long long) -;@ stdcall VirtualAllocExNuma ; Win 7 -@ stdcall VirtualBufferExceptionHandler(long long long) ; missing in Win 7 -@ stdcall VirtualFree(ptr long long) -@ stdcall VirtualFreeEx(long ptr long long) -@ stdcall VirtualLock(ptr long) -@ stdcall VirtualProtect(ptr long long ptr) -@ stdcall VirtualProtectEx(long ptr long long ptr) -@ stdcall VirtualQuery(ptr ptr long) -@ stdcall VirtualQueryEx(long ptr ptr long) -@ stdcall VirtualUnlock(ptr long) -;@ stdcall WTSGetActiveConsoleSessionId ; Win 7 -@ stdcall WaitCommEvent(long ptr ptr) -@ stdcall WaitForDebugEvent(ptr long) -@ stdcall WaitForMultipleObjects(long ptr long long) -@ stdcall WaitForMultipleObjectsEx(long ptr long long long) -@ stdcall WaitForSingleObject(long long) -@ stdcall WaitForSingleObjectEx(long long long) -;@ stdcall WaitForThreadpoolIoCallbacks ntdll.TpWaitForIoCompletion ; Win 7 -;@ stdcall WaitForThreadpoolTimerCallbacks ntdll.TpWaitForTimer ; Win 7 -;@ stdcall WaitForThreadpoolWaitCallbacks ntdll.TpWaitForWait ; Win 7 -;@ stdcall WaitForThreadpoolWorkCallbacks ntdll.TpWaitForWork ; Win 7 -@ stdcall WaitNamedPipeA (str long) -@ stdcall WaitNamedPipeW (wstr long) -@ stdcall WakeAllConditionVariable(ptr) ntdll.RtlWakeAllConditionVariable -@ stdcall WakeConditionVariable(ptr) ntdll.RtlWakeConditionVariable -;@ stdcall WerGetFlags ; Win 7 -;@ stdcall WerRegisterFile ; Win 7 -;@ stdcall WerRegisterMemoryBlock ; Win 7 -;@ stdcall WerRegisterRuntimeExceptionModule ; Win 7 -;@ stdcall WerSetFlags ; Win 7 -;@ stdcall WerUnregisterFile ; Win 7 -;@ stdcall WerUnregisterMemoryBlock ; Win 7 -;@ stdcall WerUnregisterRuntimeExceptionModule ; Win 7 -;@ stdcall WerpCleanupMessageMapping ; Win 7 -;@ stdcall WerpInitiateRemoteRecovery ; Win 7 -;@ stdcall WerpNotifyLoadStringResource ; Win 7 -;@ stdcall WerpNotifyLoadStringResourceEx ; Win 7 -;@ stdcall WerpNotifyUseStringResource ; Win 7 -;@ stdcall WerpStringLookup ; Win 7 -@ stdcall WideCharToMultiByte(long long wstr long ptr long ptr ptr) -@ stdcall WinExec(str long) -@ stdcall Wow64DisableWow64FsRedirection(ptr) -@ stdcall Wow64EnableWow64FsRedirection(long) -;@ stdcall Wow64GetThreadContext ; Win 7 -;@ stdcall Wow64GetThreadSelectorEntry ; Win 7 -@ stdcall Wow64RevertWow64FsRedirection(ptr) -;@ stdcall Wow64SetThreadContext ; Win 7 -;@ stdcall Wow64SuspendThread ; Win 7 -@ stdcall WriteConsoleA(long ptr long ptr ptr) -@ stdcall WriteConsoleInputA(long ptr long ptr) -@ stdcall WriteConsoleInputVDMA(long long long long) -@ stdcall WriteConsoleInputVDMW(long long long long) -@ stdcall WriteConsoleInputW(long ptr long ptr) -@ stdcall WriteConsoleOutputA(long ptr long long ptr) -@ stdcall WriteConsoleOutputAttribute(long ptr long long ptr) -@ stdcall WriteConsoleOutputCharacterA(long ptr long long ptr) -@ stdcall WriteConsoleOutputCharacterW(long ptr long long ptr) -@ stdcall WriteConsoleOutputW(long ptr long long ptr) -@ stdcall WriteConsoleW(long ptr long ptr ptr) -@ stdcall WriteFile(long ptr long ptr ptr) -@ stdcall WriteFileEx(long ptr long ptr ptr) -@ stdcall WriteFileGather(long ptr long ptr ptr) -@ stdcall WritePrivateProfileSectionA(str str str) -@ stdcall WritePrivateProfileSectionW(wstr wstr wstr) -@ stdcall WritePrivateProfileStringA(str str str str) -@ stdcall WritePrivateProfileStringW(wstr wstr wstr wstr) -@ stdcall WritePrivateProfileStructA (str str ptr long str) -@ stdcall WritePrivateProfileStructW(wstr wstr ptr long wstr) -@ stdcall WriteProcessMemory(long ptr ptr long ptr) -@ stdcall WriteProfileSectionA(str str) -@ stdcall WriteProfileSectionW(str str) -@ stdcall WriteProfileStringA(str str str) -@ stdcall WriteProfileStringW(wstr wstr wstr) -@ stdcall WriteTapemark(ptr long long long) -@ stdcall WTSGetActiveConsoleSessionId() ; missing in win 7 -@ stdcall ZombifyActCtx(ptr) -;@ stdcall -arch=x86_64 __C_specific_handler ntdll.__C_specific_handler -;@ stdcall -arch=x86_64 __chkstk ntdll.__chkstk -;@ stdcall -arch=x86_64 __misaligned_access ntdll.__misaligned_access -@ stub _DebugOut ; missing in XP SP3 and Win 7 -@ stub _DebugPrintf ; missing in XP SP3 and Win 7 -@ stdcall _hread(long ptr long) -@ stdcall _hwrite(long ptr long) -@ stdcall _lclose(long) -@ stdcall _lcreat(str long) -@ stdcall _llseek(long long long) -;@ stdcall -arch=x86_64 _local_unwind ntdll._local_unwind; Win 7 -@ stdcall _lopen(str long) -@ stdcall _lread(long ptr long) _hread -@ stdcall _lwrite(long ptr long) _hwrite -@ stub dprintf ; missing in XP SP3 and Win 7 -@ stdcall lstrcat(str str) lstrcatA -@ stdcall lstrcatA(str str) -@ stdcall lstrcatW(wstr wstr) -@ stdcall lstrcmp(str str) lstrcmpA -@ stdcall lstrcmpA(str str) -@ stdcall lstrcmpW(wstr wstr) -@ stdcall lstrcmpi(str str) lstrcmpiA -@ stdcall lstrcmpiA(str str) -@ stdcall lstrcmpiW(wstr wstr) -@ stdcall lstrcpy(ptr str) lstrcpyA -@ stdcall lstrcpyA(ptr str) -@ stdcall lstrcpyW(ptr wstr) -@ stdcall lstrcpyn(ptr str long) lstrcpynA -@ stdcall lstrcpynA(ptr str long) -@ stdcall lstrcpynW(ptr wstr long) -@ stdcall lstrlen(str) lstrlenA -@ stdcall lstrlenA(str) -@ stdcall lstrlenW(wstr) -;@ stdcall -arch=x86_64 uaw_lstrcmpW ; Win 7 -;@ stdcall -arch=x86_64 uaw_lstrcmpiW ; Win 7 -;@ stdcall -arch=x86_64 uaw_lstrlenW ; Win 7 -;@ stdcall -arch=x86_64 uaw_wcschr ; Win 7 -;@ stdcall -arch=x86_64 uaw_wcscpy ; Win 7 -;@ stdcall -arch=x86_64 uaw_wcsicmp ; Win 7 -;@ stdcall -arch=x86_64 uaw_wcslen ; Win 7 -;@ stdcall -arch=x86_64 uaw_wcsrchr ; Win 7 - From b49f53a6a5dc675b94dee240344d639cd0ee8a45 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sat, 26 Feb 2011 13:31:58 +0000 Subject: [PATCH 152/287] - Don't free an invalid handle. Suggested by Johannes. Test failure remains in the log, so it's easy to spot the function misbehaves. - P.S. Not much of an issue if it's lost during the next tests sync, as it would be a clearly visible change. See issue #5771 for more details. svn path=/trunk/; revision=50908 --- rostests/winetests/kernel32/volume.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rostests/winetests/kernel32/volume.c b/rostests/winetests/kernel32/volume.c index f94d9cb29ed..14c3330ff31 100644 --- a/rostests/winetests/kernel32/volume.c +++ b/rostests/winetests/kernel32/volume.c @@ -427,7 +427,7 @@ static void test_enum_vols(void) hFind = pFindFirstVolumeA( Volume_2, MAX_PATH ); ok(hFind != INVALID_HANDLE_VALUE, "FindFirstVolume failed, err=%u\n", GetLastError()); - + if (hFind != INVALID_HANDLE_VALUE) { do { /* validate correct length of unique volume name */ @@ -440,6 +440,7 @@ static void test_enum_vols(void) } while (pFindNextVolumeA( hFind, Volume_2, MAX_PATH )); ok(found, "volume name %s not found by Find[First/Next]Volume\n", Volume_1); pFindVolumeClose( hFind ); + } } START_TEST(volume) From 49516d954552cd325fdb2e57a6b5fed9aa916967 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sat, 26 Feb 2011 13:49:00 +0000 Subject: [PATCH 153/287] [USRMGR] Fix build Blame rbuild ~ svn path=/trunk/; revision=50909 --- reactos/dll/cpl/usrmgr/lang/fr-FR.rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/dll/cpl/usrmgr/lang/fr-FR.rc b/reactos/dll/cpl/usrmgr/lang/fr-FR.rc index 0838bade389..d98b04dd671 100644 --- a/reactos/dll/cpl/usrmgr/lang/fr-FR.rc +++ b/reactos/dll/cpl/usrmgr/lang/fr-FR.rc @@ -1,4 +1,4 @@ -LANGUAGE LANG_FRENCH, SUBLANG_ NEUTRAL +LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL /* Dialogs */ From ac818869156e0c0dd365d1818d547f5971bab01e Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sat, 26 Feb 2011 14:12:55 +0000 Subject: [PATCH 154/287] [NTDLL/LDR] - Don't try to free a pointer allocated on stack. See issue #4751 for more details. svn path=/trunk/; revision=50910 --- reactos/dll/ntdll/ldr/utils.c | 1 - 1 file changed, 1 deletion(-) diff --git a/reactos/dll/ntdll/ldr/utils.c b/reactos/dll/ntdll/ldr/utils.c index 345d159eebf..e7213b3df07 100644 --- a/reactos/dll/ntdll/ldr/utils.c +++ b/reactos/dll/ntdll/ldr/utils.c @@ -2394,7 +2394,6 @@ LdrpLoadModule(IN PWSTR SearchPath OPTIONAL, RtlFreeUnicodeString (&(*Module)->FullDllName); RtlFreeUnicodeString (&(*Module)->BaseDllName); RemoveEntryList (&(*Module)->InLoadOrderLinks); - RtlFreeHeap (RtlGetProcessHeap (), 0, Module); return Status; } From 2119a3b3095c82c7dc055b4130e778b137f5f264 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sat, 26 Feb 2011 14:27:09 +0000 Subject: [PATCH 155/287] [ROSTESTS] - Skip test_apm to prevent the oleaut_winetest:olepicture crash. See issue #5000 for more details. svn path=/trunk/; revision=50911 --- rostests/winetests/oleaut32/olepicture.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rostests/winetests/oleaut32/olepicture.c b/rostests/winetests/oleaut32/olepicture.c index f00055ef036..af0fe57c5b0 100644 --- a/rostests/winetests/oleaut32/olepicture.c +++ b/rostests/winetests/oleaut32/olepicture.c @@ -517,6 +517,11 @@ static void test_apm(void) BOOL keep; short type; + if(!winetest_interactive) { + skip("Bug 5000: oleaut_winetest:olepicture crashes with Page Fault.\n"); + return; + } + hglob = GlobalAlloc (0, sizeof(apmdata)); data = GlobalLock(hglob); memcpy(data, apmdata, sizeof(apmdata)); From 90f36847bc98107db737689aa4bd81eb8804bc4c Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sat, 26 Feb 2011 16:50:20 +0000 Subject: [PATCH 156/287] [KERNEL32] - Fix buffer overwrite in GetModuleFileName(). Spotted by DPH. See issue #5964 for more details. svn path=/trunk/; revision=50912 --- reactos/dll/win32/kernel32/misc/ldr.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/reactos/dll/win32/kernel32/misc/ldr.c b/reactos/dll/win32/kernel32/misc/ldr.c index da2f5821255..6a954ae802c 100644 --- a/reactos/dll/win32/kernel32/misc/ldr.c +++ b/reactos/dll/win32/kernel32/misc/ldr.c @@ -431,10 +431,10 @@ GetModuleFileNameA ( &Module->FullDllName, FALSE); - if (nSize < Length) - SetLastErrorByStatus (STATUS_BUFFER_TOO_SMALL); - else + if (Length < nSize) lpFilename[Length] = '\0'; + else + SetLastErrorByStatus (STATUS_BUFFER_TOO_SMALL); RtlLeaveCriticalSection (Peb->LoaderLock); return Length; @@ -489,10 +489,10 @@ GetModuleFileNameW ( RtlCopyUnicodeString (&FileName, &Module->FullDllName); - if (nSize < Length) - SetLastErrorByStatus (STATUS_BUFFER_TOO_SMALL); - else + if (Length < nSize) lpFilename[Length] = L'\0'; + else + SetLastErrorByStatus (STATUS_BUFFER_TOO_SMALL); RtlLeaveCriticalSection (Peb->LoaderLock); From f154358da92f3a8e3d384324ad780510ec97b7e1 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sat, 26 Feb 2011 17:18:21 +0000 Subject: [PATCH 157/287] [KERNEL32] Start unifying kernel32 Find* functions. All calls end in same methods that are working only in unicode now. Next step would be to unify stream & files using only one struct. svn path=/trunk/; revision=50913 --- reactos/dll/win32/kernel32/file/find.c | 355 ++++++++++++------------- 1 file changed, 168 insertions(+), 187 deletions(-) diff --git a/reactos/dll/win32/kernel32/file/find.c b/reactos/dll/win32/kernel32/file/find.c index 967d94c3df5..0060e662889 100644 --- a/reactos/dll/win32/kernel32/file/find.c +++ b/reactos/dll/win32/kernel32/file/find.c @@ -5,6 +5,7 @@ * FILE: lib/kernel32/file/find.c * PURPOSE: Find functions * PROGRAMMER: Ariadne ( ariadne@xs4all.nl) + * Pierre Schweitzer (pierre.schweitzer@reactos.org) * UPDATE HISTORY: * Created 01/11/98 */ @@ -73,34 +74,6 @@ InternalCopyDeviceFindDataW(LPWIN32_FIND_DATAW lpFindFileData, DeviceName.Length); } -static VOID -InternalCopyDeviceFindDataA(LPWIN32_FIND_DATAA lpFindFileData, - PUNICODE_STRING FileName, - ULONG DeviceNameInfo) -{ - UNICODE_STRING DeviceName; - ANSI_STRING BufferA; - CHAR Buffer[MAX_PATH]; - - DeviceName.Length = DeviceName.MaximumLength = (USHORT)(DeviceNameInfo & 0xFFFF); - DeviceName.Buffer = (LPWSTR)((ULONG_PTR)FileName->Buffer + (DeviceNameInfo >> 16)); - - BufferA.MaximumLength = sizeof(Buffer) - sizeof(Buffer[0]); - BufferA.Buffer = Buffer; - if (bIsFileApiAnsi) - RtlUnicodeStringToAnsiString (&BufferA, &DeviceName, FALSE); - else - RtlUnicodeStringToOemString (&BufferA, &DeviceName, FALSE); - - /* Return the data */ - RtlZeroMemory(lpFindFileData, - sizeof(*lpFindFileData)); - lpFindFileData->dwFileAttributes = FILE_ATTRIBUTE_ARCHIVE; - RtlCopyMemory(lpFindFileData->cFileName, - BufferA.Buffer, - BufferA.Length); -} - static VOID InternalCopyFindDataW(LPWIN32_FIND_DATAW lpFindFileData, PFILE_BOTH_DIR_INFORMATION lpFileInfo) @@ -126,57 +99,6 @@ InternalCopyFindDataW(LPWIN32_FIND_DATAW lpFindFileData, lpFindFileData->cAlternateFileName[lpFileInfo->ShortNameLength / sizeof(WCHAR)] = 0; } -static VOID -InternalCopyFindDataA(LPWIN32_FIND_DATAA lpFindFileData, - PFILE_BOTH_DIR_INFORMATION lpFileInfo) -{ - UNICODE_STRING FileNameU; - ANSI_STRING FileNameA; - - lpFindFileData->dwFileAttributes = lpFileInfo->FileAttributes; - - lpFindFileData->ftCreationTime.dwHighDateTime = lpFileInfo->CreationTime.u.HighPart; - lpFindFileData->ftCreationTime.dwLowDateTime = lpFileInfo->CreationTime.u.LowPart; - - lpFindFileData->ftLastAccessTime.dwHighDateTime = lpFileInfo->LastAccessTime.u.HighPart; - lpFindFileData->ftLastAccessTime.dwLowDateTime = lpFileInfo->LastAccessTime.u.LowPart; - - lpFindFileData->ftLastWriteTime.dwHighDateTime = lpFileInfo->LastWriteTime.u.HighPart; - lpFindFileData->ftLastWriteTime.dwLowDateTime = lpFileInfo->LastWriteTime.u.LowPart; - - lpFindFileData->nFileSizeHigh = lpFileInfo->EndOfFile.u.HighPart; - lpFindFileData->nFileSizeLow = lpFileInfo->EndOfFile.u.LowPart; - - FileNameU.Length = FileNameU.MaximumLength = (USHORT)lpFileInfo->FileNameLength; - FileNameU.Buffer = lpFileInfo->FileName; - - FileNameA.MaximumLength = sizeof(lpFindFileData->cFileName) - sizeof(CHAR); - FileNameA.Buffer = lpFindFileData->cFileName; - - /* convert unicode string to ansi (or oem) */ - if (bIsFileApiAnsi) - RtlUnicodeStringToAnsiString (&FileNameA, &FileNameU, FALSE); - else - RtlUnicodeStringToOemString (&FileNameA, &FileNameU, FALSE); - - FileNameA.Buffer[FileNameA.Length] = 0; - - TRACE("lpFileInfo->ShortNameLength %d\n", lpFileInfo->ShortNameLength); - - FileNameU.Length = FileNameU.MaximumLength = lpFileInfo->ShortNameLength; - FileNameU.Buffer = lpFileInfo->ShortName; - - FileNameA.MaximumLength = sizeof(lpFindFileData->cAlternateFileName) - sizeof(CHAR); - FileNameA.Buffer = lpFindFileData->cAlternateFileName; - - /* convert unicode string to ansi (or oem) */ - if (bIsFileApiAnsi) - RtlUnicodeStringToAnsiString (&FileNameA, &FileNameU, FALSE); - else - RtlUnicodeStringToOemString (&FileNameA, &FileNameU, FALSE); - - FileNameA.Buffer[FileNameA.Length] = 0; -} /* * @implemented @@ -186,8 +108,7 @@ WINAPI InternalFindNextFile ( HANDLE hFindFile, PUNICODE_STRING SearchPattern, - PVOID lpFindFileData, - BOOL bUnicode + PVOID lpFindFileData ) { PKERNEL32_FIND_DATA_HEADER IHeader; @@ -290,16 +211,8 @@ NeedMoreData: { _SEH2_TRY { - if (bUnicode) - { - InternalCopyFindDataW(lpFindFileData, - FoundFile); - } - else - { - InternalCopyFindDataA(lpFindFileData, - FoundFile); - } + InternalCopyFindDataW(lpFindFileData, + FoundFile); } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { @@ -334,8 +247,7 @@ WINAPI InternalFindFirstFile ( LPCWSTR lpFileName, BOOLEAN DirectoryOnly, - PVOID lpFindFileData, - BOOL bUnicode + PVOID lpFindFileData ) { OBJECT_ATTRIBUTES ObjectAttributes; @@ -460,18 +372,9 @@ InternalFindFirstFile ( DeviceNameInfo = RtlIsDosDeviceName_U((PWSTR)((ULONG_PTR)lpFileName)); if (DeviceNameInfo != 0) { - if (bUnicode) - { - InternalCopyDeviceFindDataW(lpFindFileData, - lpFileName, - DeviceNameInfo); - } - else - { - InternalCopyDeviceFindDataA(lpFindFileData, - &FileName, - DeviceNameInfo); - } + InternalCopyDeviceFindDataW(lpFindFileData, + lpFileName, + DeviceNameInfo); return FIND_DEVICE_HANDLE; } @@ -526,8 +429,7 @@ InternalFindFirstFile ( bResult = InternalFindNextFile((HANDLE)IHeader, &PathFileName, - lpFindFileData, - bUnicode); + lpFindFileData); RtlFreeHeap (hProcessHeap, 0, @@ -551,17 +453,59 @@ InternalFindFirstFile ( */ HANDLE WINAPI -FindFirstFileA ( - LPCSTR lpFileName, - LPWIN32_FIND_DATAA lpFindFileData - ) +FindFirstFileA(IN LPCSTR lpFileName, + OUT LPWIN32_FIND_DATAA lpFindFileData) { - return FindFirstFileExA (lpFileName, - FindExInfoStandard, - (LPVOID)lpFindFileData, - FindExSearchNameMatch, - NULL, - 0); + HANDLE hSearch; + NTSTATUS Status; + ANSI_STRING Ansi; + UNICODE_STRING UTF8; + PUNICODE_STRING lpFileNameW; + WIN32_FIND_DATAW FindFileDataW; + + lpFileNameW = Basep8BitStringToStaticUnicodeString(lpFileName); + if (!lpFileNameW) + { + return INVALID_HANDLE_VALUE; + } + + hSearch = FindFirstFileExW(lpFileNameW->Buffer, + FindExInfoStandard, + &FindFileDataW, + FindExSearchNameMatch, + NULL, 0); + if (hSearch == INVALID_HANDLE_VALUE) + { + return INVALID_HANDLE_VALUE; + } + + memcpy(lpFindFileData, &FindFileDataW, FIELD_OFFSET(WIN32_FIND_DATA, cFileName)); + + RtlInitUnicodeString(&UTF8, FindFileDataW.cFileName); + Ansi.Buffer = lpFindFileData->cFileName; + Ansi.Length = 0; + Ansi.MaximumLength = MAX_PATH; + Status = BasepUnicodeStringTo8BitString(&Ansi, &UTF8, FALSE); + if (!NT_SUCCESS(Status)) + { + FindClose(hSearch); + BaseSetLastNTError(Status); + return INVALID_HANDLE_VALUE; + } + + RtlInitUnicodeString(&UTF8, FindFileDataW.cAlternateFileName); + Ansi.Buffer = lpFindFileData->cAlternateFileName; + Ansi.Length = 0; + Ansi.MaximumLength = 14; + Status = BasepUnicodeStringTo8BitString(&Ansi, &UTF8, FALSE); + if (!NT_SUCCESS(Status)) + { + FindClose(hSearch); + BaseSetLastNTError(Status); + return INVALID_HANDLE_VALUE; + } + + return hSearch; } @@ -570,14 +514,44 @@ FindFirstFileA ( */ BOOL WINAPI -FindNextFileA ( - HANDLE hFindFile, - LPWIN32_FIND_DATAA lpFindFileData) +FindNextFileA(IN HANDLE hFindFile, + OUT LPWIN32_FIND_DATAA lpFindFileData) { - return InternalFindNextFile (hFindFile, - NULL, - lpFindFileData, - FALSE); + NTSTATUS Status; + ANSI_STRING Ansi; + UNICODE_STRING UTF8; + WIN32_FIND_DATAW FindFileDataW; + + if (!FindNextFileW(hFindFile, &FindFileDataW)) + { + return FALSE; + } + + memcpy(lpFindFileData, &FindFileDataW, FIELD_OFFSET(WIN32_FIND_DATA, cFileName)); + + RtlInitUnicodeString(&UTF8, FindFileDataW.cFileName); + Ansi.Buffer = lpFindFileData->cFileName; + Ansi.Length = 0; + Ansi.MaximumLength = MAX_PATH; + Status = BasepUnicodeStringTo8BitString(&Ansi, &UTF8, FALSE); + if (!NT_SUCCESS(Status)) + { + BaseSetLastNTError(Status); + return FALSE; + } + + RtlInitUnicodeString(&UTF8, FindFileDataW.cAlternateFileName); + Ansi.Buffer = lpFindFileData->cAlternateFileName; + Ansi.Length = 0; + Ansi.MaximumLength = 14; + Status = BasepUnicodeStringTo8BitString(&Ansi, &UTF8, FALSE); + if (!NT_SUCCESS(Status)) + { + BaseSetLastNTError(Status); + return FALSE; + } + + return TRUE; } @@ -643,17 +617,15 @@ FindClose ( */ HANDLE WINAPI -FindFirstFileW ( - LPCWSTR lpFileName, - LPWIN32_FIND_DATAW lpFindFileData - ) +FindFirstFileW(IN LPCWSTR lpFileName, + OUT LPWIN32_FIND_DATAW lpFindFileData) { - return FindFirstFileExW (lpFileName, - FindExInfoStandard, - (LPVOID)lpFindFileData, - FindExSearchNameMatch, - NULL, - 0); + return FindFirstFileExW(lpFileName, + FindExInfoStandard, + lpFindFileData, + FindExSearchNameMatch, + NULL, + 0); } /* @@ -661,15 +633,12 @@ FindFirstFileW ( */ BOOL WINAPI -FindNextFileW ( - HANDLE hFindFile, - LPWIN32_FIND_DATAW lpFindFileData - ) +FindNextFileW(IN HANDLE hFindFile, + OUT LPWIN32_FIND_DATAW lpFindFileData) { - return InternalFindNextFile (hFindFile, - NULL, - lpFindFileData, - TRUE); + return InternalFindNextFile(hFindFile, + NULL, + lpFindFileData); } @@ -678,12 +647,12 @@ FindNextFileW ( */ HANDLE WINAPI -FindFirstFileExW (LPCWSTR lpFileName, - FINDEX_INFO_LEVELS fInfoLevelId, - LPVOID lpFindFileData, - FINDEX_SEARCH_OPS fSearchOp, - LPVOID lpSearchFilter, - DWORD dwAdditionalFlags) +FindFirstFileExW(IN LPCWSTR lpFileName, + IN FINDEX_INFO_LEVELS fInfoLevelId, + OUT LPVOID lpFindFileData, + IN FINDEX_SEARCH_OPS fSearchOp, + LPVOID lpSearchFilter, + IN DWORD dwAdditionalFlags) { if (fInfoLevelId != FindExInfoStandard) { @@ -701,8 +670,7 @@ FindFirstFileExW (LPCWSTR lpFileName, return InternalFindFirstFile (lpFileName, fSearchOp == FindExSearchLimitToDirectories, - lpFindFileData, - TRUE); + lpFindFileData); } SetLastError(ERROR_INVALID_PARAMETER); @@ -714,51 +682,64 @@ FindFirstFileExW (LPCWSTR lpFileName, */ HANDLE WINAPI -FindFirstFileExA ( - LPCSTR lpFileName, - FINDEX_INFO_LEVELS fInfoLevelId, - LPVOID lpFindFileData, - FINDEX_SEARCH_OPS fSearchOp, - LPVOID lpSearchFilter, - DWORD dwAdditionalFlags - ) +FindFirstFileExA(IN LPCSTR lpFileName, + IN FINDEX_INFO_LEVELS fInfoLevelId, + OUT LPVOID lpFindFileData, + IN FINDEX_SEARCH_OPS fSearchOp, + LPVOID lpSearchFilter, + IN DWORD dwAdditionalFlags) { - UNICODE_STRING FileNameU; - ANSI_STRING FileNameA; - HANDLE Handle; + HANDLE hSearch; + NTSTATUS Status; + ANSI_STRING Ansi; + UNICODE_STRING UTF8; + PUNICODE_STRING lpFileNameW; + WIN32_FIND_DATAW FindFileDataW; - if (fInfoLevelId != FindExInfoStandard) + lpFileNameW = Basep8BitStringToStaticUnicodeString(lpFileName); + if (!lpFileNameW) { - SetLastError(ERROR_INVALID_PARAMETER); return INVALID_HANDLE_VALUE; } - if (fSearchOp == FindExSearchNameMatch || fSearchOp == FindExSearchLimitToDirectories) + + hSearch = FindFirstFileExW(lpFileNameW->Buffer, + fInfoLevelId, + &FindFileDataW, + fSearchOp, + lpSearchFilter, + dwAdditionalFlags); + if (hSearch == INVALID_HANDLE_VALUE) { - if (lpSearchFilter) - { - SetLastError(ERROR_INVALID_PARAMETER); - return INVALID_HANDLE_VALUE; - } - - RtlInitAnsiString (&FileNameA, (LPSTR)lpFileName); - - /* convert ansi (or oem) string to unicode */ - if (bIsFileApiAnsi) - RtlAnsiStringToUnicodeString (&FileNameU, &FileNameA, TRUE); - else - RtlOemStringToUnicodeString (&FileNameU, &FileNameA, TRUE); - - Handle = InternalFindFirstFile (FileNameU.Buffer, - fSearchOp == FindExSearchLimitToDirectories, - lpFindFileData, - FALSE); - - RtlFreeUnicodeString (&FileNameU); - return Handle; + return INVALID_HANDLE_VALUE; } - SetLastError(ERROR_INVALID_PARAMETER); - return INVALID_HANDLE_VALUE; + memcpy(lpFindFileData, &FindFileDataW, FIELD_OFFSET(WIN32_FIND_DATA, cFileName)); + + RtlInitUnicodeString(&UTF8, FindFileDataW.cFileName); + Ansi.Buffer = ((LPWIN32_FIND_DATAA)lpFindFileData)->cFileName; + Ansi.Length = 0; + Ansi.MaximumLength = MAX_PATH; + Status = BasepUnicodeStringTo8BitString(&Ansi, &UTF8, FALSE); + if (!NT_SUCCESS(Status)) + { + FindClose(hSearch); + BaseSetLastNTError(Status); + return INVALID_HANDLE_VALUE; + } + + RtlInitUnicodeString(&UTF8, FindFileDataW.cAlternateFileName); + Ansi.Buffer = ((LPWIN32_FIND_DATAA)lpFindFileData)->cAlternateFileName; + Ansi.Length = 0; + Ansi.MaximumLength = 14; + Status = BasepUnicodeStringTo8BitString(&Ansi, &UTF8, FALSE); + if (!NT_SUCCESS(Status)) + { + FindClose(hSearch); + BaseSetLastNTError(Status); + return INVALID_HANDLE_VALUE; + } + + return hSearch; } From 38a3cf6ee42d02cb5e0093ad3dc5963d864daf6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 26 Feb 2011 20:00:08 +0000 Subject: [PATCH 158/287] [ntoskrnl] Fix compilation with _WINKD_=1 svn path=/trunk/; revision=50914 --- reactos/ntoskrnl/ke/i386/traphdlr.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/reactos/ntoskrnl/ke/i386/traphdlr.c b/reactos/ntoskrnl/ke/i386/traphdlr.c index 1d3b098504a..c3f5893d1e8 100644 --- a/reactos/ntoskrnl/ke/i386/traphdlr.c +++ b/reactos/ntoskrnl/ke/i386/traphdlr.c @@ -46,7 +46,7 @@ UCHAR KiTrapIoTable[] = }; PFAST_SYSTEM_CALL_EXIT KiFastCallExitHandler; -#if DBG +#if DBG && !defined(_WINKD_) PKDBG_PRESERVICEHOOK KeWin32PreServiceHook = NULL; PKDBG_POSTSERVICEHOOK KeWin32PostServiceHook = NULL; #endif @@ -1452,7 +1452,7 @@ FORCEINLINE VOID KiDbgPreServiceHook(ULONG SystemCallNumber, PULONG_PTR Arguments) { -#if DBG +#if DBG && !defined(_WINKD_) if (SystemCallNumber >= 0x1000 && KeWin32PreServiceHook) KeWin32PreServiceHook(SystemCallNumber, Arguments); #endif @@ -1462,7 +1462,7 @@ FORCEINLINE ULONG_PTR KiDbgPostServiceHook(ULONG SystemCallNumber, ULONG_PTR Result) { -#if DBG +#if DBG && !defined(_WINKD_) if (SystemCallNumber >= 0x1000 && KeWin32PostServiceHook) return KeWin32PostServiceHook(SystemCallNumber, Result); #endif From 66feb11cfeaa912e52678c4452d9f05be0a7f316 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 26 Feb 2011 21:40:17 +0000 Subject: [PATCH 159/287] [SETUPAPI] Rename functions according to the new naming scheme: CaptureAndConvertAnsiArg --> pSetupCaptureAndConvertAnsiArg CenterWindowRelativeToParent --> pSetupCenterWindowRelativeToParent ConcatenatePaths --> pSetupConcatenatePaths DuplicateString --> pSetupDuplicateString EnablePrivilege --> pSetupEnablePrivilege GetVersionInfoFromImage --> pSetupGetVersionInfoFromImage IsUserAdmin --> pSetupIsUserAdmin MultiByteToUnicode --> pSetupMultiByteToUnicode MyGetFileTitle --> pSetupGetFileTitle OpenAndMapForRead --> pSetupOpenAndMapForRead RegistryDelnode --> pSetupRegistryDelnode UnicodeToMultiByte --> pSetupUnicodeToMultiByte UnmapAndCloseFile --> pSetupUnmapAndCloseFile svn path=/trunk/; revision=50915 --- reactos/dll/win32/setupapi/cfgmgr.c | 40 ++++++------ reactos/dll/win32/setupapi/devclass.c | 2 +- reactos/dll/win32/setupapi/devinst.c | 40 ++++++------ reactos/dll/win32/setupapi/install.c | 6 +- reactos/dll/win32/setupapi/misc.c | 80 ++++++++++++------------ reactos/dll/win32/setupapi/parser.c | 4 +- reactos/dll/win32/setupapi/setupapi.spec | 30 ++++----- reactos/dll/win32/setupapi/stubs.c | 4 +- reactos/include/psdk/setupapi.h | 28 ++++++--- 9 files changed, 121 insertions(+), 113 deletions(-) diff --git a/reactos/dll/win32/setupapi/cfgmgr.c b/reactos/dll/win32/setupapi/cfgmgr.c index 7763c0e2f1b..a324ce5a5e5 100644 --- a/reactos/dll/win32/setupapi/cfgmgr.c +++ b/reactos/dll/win32/setupapi/cfgmgr.c @@ -153,7 +153,7 @@ CONFIGRET WINAPI CMP_Report_LogOn( if (!PnpGetLocalHandles(&BindingHandle, NULL)) return CR_FAILURE; - bAdmin = IsUserAdmin(); + bAdmin = pSetupIsUserAdmin(); for (i = 0; i < 30; i++) { @@ -237,7 +237,7 @@ CONFIGRET WINAPI CM_Add_Empty_Log_Conf_Ex( FIXME("%p %p %lu %lx %p\n", plcLogConf, dnDevInst, Priority, ulFlags, hMachine); - if (!IsUserAdmin()) + if (!pSetupIsUserAdmin()) return CR_ACCESS_DENIED; if (plcLogConf == NULL) @@ -340,7 +340,7 @@ CONFIGRET WINAPI CM_Add_ID_ExA( TRACE("%p %s %lx %p\n", dnDevInst, pszID, ulFlags, hMachine); - if (CaptureAndConvertAnsiArg(pszID, &pszIDW)) + if (pSetupCaptureAndConvertAnsiArg(pszID, &pszIDW)) return CR_INVALID_DATA; ret = CM_Add_ID_ExW(dnDevInst, pszIDW, ulFlags, hMachine); @@ -364,7 +364,7 @@ CONFIGRET WINAPI CM_Add_ID_ExW( TRACE("%p %s %lx %p\n", dnDevInst, debugstr_w(pszID), ulFlags, hMachine); - if (!IsUserAdmin()) + if (!pSetupIsUserAdmin()) return CR_ACCESS_DENIED; if (dnDevInst == 0) @@ -455,7 +455,7 @@ CONFIGRET WINAPI CM_Connect_MachineA( if (UNCServerName == NULL || *UNCServerName == 0) return CM_Connect_MachineW(NULL, phMachine); - if (CaptureAndConvertAnsiArg(UNCServerName, &pServerNameW)) + if (pSetupCaptureAndConvertAnsiArg(UNCServerName, &pServerNameW)) return CR_INVALID_DATA; ret = CM_Connect_MachineW(pServerNameW, phMachine); @@ -572,7 +572,7 @@ CONFIGRET WINAPI CM_Create_DevNode_ExA( TRACE("%p %s %p %lx %p\n", pdnDevInst, debugstr_a(pDeviceID), dnParent, ulFlags, hMachine); - if (CaptureAndConvertAnsiArg(pDeviceID, &pDeviceIDW)) + if (pSetupCaptureAndConvertAnsiArg(pDeviceID, &pDeviceIDW)) return CR_INVALID_DATA; ret = CM_Create_DevNode_ExW(pdnDevInst, pDeviceIDW, dnParent, ulFlags, @@ -599,7 +599,7 @@ CONFIGRET WINAPI CM_Create_DevNode_ExW( FIXME("%p %s %p %lx %p\n", pdnDevInst, debugstr_w(pDeviceID), dnParent, ulFlags, hMachine); - if (!IsUserAdmin()) + if (!pSetupIsUserAdmin()) return CR_ACCESS_DENIED; if (pdnDevInst == NULL) @@ -769,7 +769,7 @@ CONFIGRET WINAPI CM_Disable_DevNode_Ex( FIXME("%p %lx %p\n", dnDevInst, ulFlags, hMachine); - if (!IsUserAdmin()) + if (!pSetupIsUserAdmin()) return CR_ACCESS_DENIED; if (dnDevInst == 0) @@ -868,7 +868,7 @@ CONFIGRET WINAPI CM_Enable_DevNode_Ex( TRACE("%p %lx %p\n", dnDevInst, ulFlags, hMachine); - if (!IsUserAdmin()) + if (!pSetupIsUserAdmin()) return CR_ACCESS_DENIED; if (dnDevInst == 0) @@ -1135,7 +1135,7 @@ CONFIGRET WINAPI CM_Free_Log_Conf_Ex( TRACE("%lx %lx %lx\n", lcLogConfToBeFreed, ulFlags, hMachine); - if (!IsUserAdmin()) + if (!pSetupIsUserAdmin()) return CR_ACCESS_DENIED; pLogConfInfo = (PLOG_CONF_INFO)lcLogConfToBeFreed; @@ -2040,7 +2040,7 @@ CONFIGRET WINAPI CM_Get_Device_ID_List_ExA( } else { - if (CaptureAndConvertAnsiArg(pszFilter, &pszFilterW)) + if (pSetupCaptureAndConvertAnsiArg(pszFilter, &pszFilterW)) { ret = CR_INVALID_DEVICE_ID; goto Done; @@ -2165,7 +2165,7 @@ CONFIGRET WINAPI CM_Get_Device_ID_List_Size_ExA( } else { - if (CaptureAndConvertAnsiArg(pszFilter, &pszFilterW)) + if (pSetupCaptureAndConvertAnsiArg(pszFilter, &pszFilterW)) return CR_INVALID_DEVICE_ID; ret = CM_Get_Device_ID_List_Size_ExW(pulLen, @@ -2576,7 +2576,7 @@ CONFIGRET WINAPI CM_Get_HW_Prof_Flags_ExA( if (szDevInstName != NULL) { - if (CaptureAndConvertAnsiArg(szDevInstName, &pszDevIdW)) + if (pSetupCaptureAndConvertAnsiArg(szDevInstName, &pszDevIdW)) return CR_INVALID_DEVICE_ID; } @@ -3356,7 +3356,7 @@ CONFIGRET WINAPI CM_Locate_DevNode_ExA( if (pDeviceID != NULL) { - if (CaptureAndConvertAnsiArg(pDeviceID, &pDevIdW)) + if (pSetupCaptureAndConvertAnsiArg(pDeviceID, &pDevIdW)) return CR_INVALID_DEVICE_ID; } @@ -3506,7 +3506,7 @@ CONFIGRET WINAPI CM_Move_DevNode_Ex( FIXME("%lx %lx %lx %lx\n", dnFromDevInst, dnToDevInst, ulFlags, hMachine); - if (!IsUserAdmin()) + if (!pSetupIsUserAdmin()) return CR_ACCESS_DENIED; if (dnFromDevInst == 0 || dnToDevInst == 0) @@ -3606,7 +3606,7 @@ CONFIGRET WINAPI CM_Open_Class_Key_ExA( if (pszClassName != NULL) { - if (CaptureAndConvertAnsiArg(pszClassName, &pszClassNameW)) + if (pSetupCaptureAndConvertAnsiArg(pszClassName, &pszClassNameW)) return CR_INVALID_DATA; } @@ -4201,7 +4201,7 @@ CONFIGRET WINAPI CM_Run_Detection_Ex( TRACE("%lx %lx\n", ulFlags, hMachine); - if (!IsUserAdmin()) + if (!pSetupIsUserAdmin()) return CR_ACCESS_DENIED; if (ulFlags & ~CM_DETECT_BITS) @@ -4612,7 +4612,7 @@ CONFIGRET WINAPI CM_Set_HW_Prof_Ex( TRACE("%lu %lu %lx\n", ulHardwareProfile, ulFlags, hMachine); - if (!IsUserAdmin()) + if (!pSetupIsUserAdmin()) return CR_ACCESS_DENIED; if (ulFlags != 0) @@ -4687,7 +4687,7 @@ CONFIGRET WINAPI CM_Set_HW_Prof_Flags_ExA( if (szDevInstName != NULL) { - if (CaptureAndConvertAnsiArg(szDevInstName, &pszDevIdW)) + if (pSetupCaptureAndConvertAnsiArg(szDevInstName, &pszDevIdW)) return CR_INVALID_DEVICE_ID; } @@ -4773,7 +4773,7 @@ CONFIGRET WINAPI CM_Setup_DevNode_Ex( FIXME("%lx %lx %lx\n", dnDevInst, ulFlags, hMachine); - if (!IsUserAdmin()) + if (!pSetupIsUserAdmin()) return CR_ACCESS_DENIED; if (dnDevInst == 0) diff --git a/reactos/dll/win32/setupapi/devclass.c b/reactos/dll/win32/setupapi/devclass.c index f636e66c740..61a9be49276 100644 --- a/reactos/dll/win32/setupapi/devclass.c +++ b/reactos/dll/win32/setupapi/devclass.c @@ -446,7 +446,7 @@ SetupDiGetClassImageListExA( if (MachineName) { - MachineNameW = MultiByteToUnicode(MachineName, CP_ACP); + MachineNameW = pSetupMultiByteToUnicode(MachineName, CP_ACP); if (MachineNameW == NULL) return FALSE; } diff --git a/reactos/dll/win32/setupapi/devinst.c b/reactos/dll/win32/setupapi/devinst.c index 6ab6184cca9..c87811f669f 100644 --- a/reactos/dll/win32/setupapi/devinst.c +++ b/reactos/dll/win32/setupapi/devinst.c @@ -156,10 +156,10 @@ CheckSectionValid( *ScorePlatform = *ScoreMajorVersion = *ScoreMinorVersion = *ScoreProductType = *ScoreSuiteMask = 0; - Section = DuplicateString(SectionName); + Section = pSetupDuplicateString(SectionName); if (!Section) { - TRACE("DuplicateString() failed\n"); + TRACE("pSetupDuplicateString() failed\n"); goto cleanup; } @@ -687,7 +687,7 @@ BOOL WINAPI SetupDiBuildClassInfoListExA( if (MachineName) { - MachineNameW = MultiByteToUnicode(MachineName, CP_ACP); + MachineNameW = pSetupMultiByteToUnicode(MachineName, CP_ACP); if (MachineNameW == NULL) return FALSE; } @@ -910,13 +910,13 @@ BOOL WINAPI SetupDiClassGuidsFromNameExA( return FALSE; } - ClassNameW = MultiByteToUnicode(ClassName, CP_ACP); + ClassNameW = pSetupMultiByteToUnicode(ClassName, CP_ACP); if (ClassNameW == NULL) return FALSE; if (MachineName) { - MachineNameW = MultiByteToUnicode(MachineName, CP_ACP); + MachineNameW = pSetupMultiByteToUnicode(MachineName, CP_ACP); if (MachineNameW == NULL) { MyFree(ClassNameW); @@ -1101,7 +1101,7 @@ BOOL WINAPI SetupDiClassNameFromGuidExA( BOOL ret; if (MachineName) - MachineNameW = MultiByteToUnicode(MachineName, CP_ACP); + MachineNameW = pSetupMultiByteToUnicode(MachineName, CP_ACP); ret = SetupDiClassNameFromGuidExW(ClassGuid, ClassNameW, MAX_CLASS_NAME_LEN, RequiredSize, MachineNameW, Reserved); if (ret) @@ -1235,7 +1235,7 @@ SetupDiCreateDeviceInfoListExA(const GUID *ClassGuid, if (MachineName) { - MachineNameW = MultiByteToUnicode(MachineName, CP_ACP); + MachineNameW = pSetupMultiByteToUnicode(MachineName, CP_ACP); if (MachineNameW == NULL) return INVALID_HANDLE_VALUE; } @@ -1381,7 +1381,7 @@ HKEY WINAPI SetupDiCreateDevRegKeyA( } else { - InfSectionNameW = MultiByteToUnicode(InfSectionName, CP_ACP); + InfSectionNameW = pSetupMultiByteToUnicode(InfSectionName, CP_ACP); if (InfSectionNameW == NULL) return INVALID_HANDLE_VALUE; } } @@ -1635,12 +1635,12 @@ BOOL WINAPI SetupDiCreateDeviceInfoA( if (DeviceName) { - DeviceNameW = MultiByteToUnicode(DeviceName, CP_ACP); + DeviceNameW = pSetupMultiByteToUnicode(DeviceName, CP_ACP); if (DeviceNameW == NULL) return FALSE; } if (DeviceDescription) { - DeviceDescriptionW = MultiByteToUnicode(DeviceDescription, CP_ACP); + DeviceDescriptionW = pSetupMultiByteToUnicode(DeviceDescription, CP_ACP); if (DeviceDescriptionW == NULL) { MyFree(DeviceNameW); @@ -2038,7 +2038,7 @@ SetupDiGetActualSectionToInstallExA( if (InfSectionName) { - InfSectionNameW = MultiByteToUnicode(InfSectionName, CP_ACP); + InfSectionNameW = pSetupMultiByteToUnicode(InfSectionName, CP_ACP); if (InfSectionNameW == NULL) goto cleanup; } @@ -2135,7 +2135,7 @@ BOOL WINAPI SetupDiGetClassDescriptionExA( if (MachineName) { - MachineNameW = MultiByteToUnicode(MachineName, CP_ACP); + MachineNameW = pSetupMultiByteToUnicode(MachineName, CP_ACP); if (!MachineNameW) { SetLastError(ERROR_NOT_ENOUGH_MEMORY); @@ -2285,7 +2285,7 @@ HDEVINFO WINAPI SetupDiGetClassDevsExA( if (enumstr) { - enumstrW = MultiByteToUnicode(enumstr, CP_ACP); + enumstrW = pSetupMultiByteToUnicode(enumstr, CP_ACP); if (!enumstrW) { ret = INVALID_HANDLE_VALUE; @@ -2294,7 +2294,7 @@ HDEVINFO WINAPI SetupDiGetClassDevsExA( } if (machine) { - machineW = MultiByteToUnicode(machine, CP_ACP); + machineW = pSetupMultiByteToUnicode(machine, CP_ACP); if (!machineW) { MyFree(enumstrW); @@ -2540,7 +2540,7 @@ BOOL WINAPI SetupDiCreateDeviceInterfaceA( if (ReferenceString) { - ReferenceStringW = MultiByteToUnicode(ReferenceString, CP_ACP); + ReferenceStringW = pSetupMultiByteToUnicode(ReferenceString, CP_ACP); if (ReferenceStringW == NULL) return FALSE; } @@ -2621,7 +2621,7 @@ HKEY WINAPI SetupDiCreateDeviceInterfaceRegKeyA( SetLastError(ERROR_INVALID_PARAMETER); return INVALID_HANDLE_VALUE; } - InfSectionNameW = MultiByteToUnicode(InfSectionName, CP_ACP); + InfSectionNameW = pSetupMultiByteToUnicode(InfSectionName, CP_ACP); if (!InfSectionNameW) return INVALID_HANDLE_VALUE; } @@ -3462,7 +3462,7 @@ SetupDiInstallClassExA( } else { - InfFileNameW = MultiByteToUnicode(InfFileName, CP_ACP); + InfFileNameW = pSetupMultiByteToUnicode(InfFileName, CP_ACP); if (InfFileNameW == NULL) { SetLastError(ERROR_NOT_ENOUGH_MEMORY); @@ -3592,7 +3592,7 @@ HKEY WINAPI SetupDiOpenClassRegKeyExA( if (MachineName) { - MachineNameW = MultiByteToUnicode(MachineName, CP_ACP); + MachineNameW = pSetupMultiByteToUnicode(MachineName, CP_ACP); if (MachineNameW == NULL) return INVALID_HANDLE_VALUE; } @@ -3934,7 +3934,7 @@ BOOL WINAPI SetupDiOpenDeviceInterfaceA( TRACE("%p %s %08lx %p\n", DeviceInfoSet, debugstr_a(DevicePath), OpenFlags, DeviceInterfaceData); - DevicePathW = MultiByteToUnicode(DevicePath, CP_ACP); + DevicePathW = pSetupMultiByteToUnicode(DevicePath, CP_ACP); if (DevicePathW == NULL) return FALSE; @@ -4667,7 +4667,7 @@ SetupDiOpenDeviceInfoA( TRACE("%p %s %p %lx %p\n", DeviceInfoSet, DeviceInstanceId, hwndParent, OpenFlags, DeviceInfoData); - DeviceInstanceIdW = MultiByteToUnicode(DeviceInstanceId, CP_ACP); + DeviceInstanceIdW = pSetupMultiByteToUnicode(DeviceInstanceId, CP_ACP); if (DeviceInstanceIdW == NULL) return FALSE; diff --git a/reactos/dll/win32/setupapi/install.c b/reactos/dll/win32/setupapi/install.c index 0d1fd062321..5a6ad6c0e0c 100644 --- a/reactos/dll/win32/setupapi/install.c +++ b/reactos/dll/win32/setupapi/install.c @@ -998,7 +998,7 @@ profile_items_callback( } else { - FullIconName = DuplicateString(FullFileName); + FullIconName = pSetupDuplicateString(FullFileName); if (!FullIconName) goto cleanup; } @@ -2177,9 +2177,9 @@ BOOL WINAPI SetupCopyOEMInfA( if (!DestinationInfFileName && DestinationInfFileNameSize > 0) SetLastError(ERROR_INVALID_PARAMETER); - else if (!(SourceInfFileNameW = MultiByteToUnicode(SourceInfFileName, CP_ACP))) + else if (!(SourceInfFileNameW = pSetupMultiByteToUnicode(SourceInfFileName, CP_ACP))) SetLastError(ERROR_INVALID_PARAMETER); - else if (OEMSourceMediaType != SPOST_NONE && !(OEMSourceMediaLocationW = MultiByteToUnicode(OEMSourceMediaLocation, CP_ACP))) + else if (OEMSourceMediaType != SPOST_NONE && !(OEMSourceMediaLocationW = pSetupMultiByteToUnicode(OEMSourceMediaLocation, CP_ACP))) SetLastError(ERROR_INVALID_PARAMETER); else { diff --git a/reactos/dll/win32/setupapi/misc.c b/reactos/dll/win32/setupapi/misc.c index 7f764723f2f..fa35e3640fa 100644 --- a/reactos/dll/win32/setupapi/misc.c +++ b/reactos/dll/win32/setupapi/misc.c @@ -63,7 +63,7 @@ GetFunctionPointer( Comma++; /* W->A conversion for function name */ - FunctionNameA = UnicodeToMultiByte(Comma, CP_ACP); + FunctionNameA = pSetupUnicodeToMultiByte(Comma, CP_ACP); if (!FunctionNameA) { rc = GetLastError(); @@ -168,7 +168,7 @@ LPVOID WINAPI MyRealloc(LPVOID lpSrc, DWORD dwSize) /************************************************************************** - * DuplicateString [SETUPAPI.@] + * pSetupDuplicateString [SETUPAPI.@] * * Duplicates a unicode string. * @@ -182,7 +182,7 @@ LPVOID WINAPI MyRealloc(LPVOID lpSrc, DWORD dwSize) * NOTES * Call MyFree() to release the duplicated string. */ -LPWSTR WINAPI DuplicateString(LPCWSTR lpSrc) +LPWSTR WINAPI pSetupDuplicateString(LPCWSTR lpSrc) { LPWSTR lpDst; @@ -250,7 +250,7 @@ LONG WINAPI QueryRegistryValue(HKEY hKey, /************************************************************************** - * MultiByteToUnicode [SETUPAPI.@] + * pSetupMultiByteToUnicode [SETUPAPI.@] * * Converts a multi-byte string to a Unicode string. * @@ -265,7 +265,7 @@ LONG WINAPI QueryRegistryValue(HKEY hKey, * NOTE * Use MyFree to release the returned Unicode string. */ -LPWSTR WINAPI MultiByteToUnicode(LPCSTR lpMultiByteStr, UINT uCodePage) +LPWSTR WINAPI pSetupMultiByteToUnicode(LPCSTR lpMultiByteStr, UINT uCodePage) { LPWSTR lpUnicodeStr; int nLength; @@ -296,7 +296,7 @@ LPWSTR WINAPI MultiByteToUnicode(LPCSTR lpMultiByteStr, UINT uCodePage) /************************************************************************** - * UnicodeToMultiByte [SETUPAPI.@] + * pSetupUnicodeToMultiByte [SETUPAPI.@] * * Converts a Unicode string to a multi-byte string. * @@ -311,7 +311,7 @@ LPWSTR WINAPI MultiByteToUnicode(LPCSTR lpMultiByteStr, UINT uCodePage) * NOTE * Use MyFree to release the returned multi-byte string. */ -LPSTR WINAPI UnicodeToMultiByte(LPCWSTR lpUnicodeStr, UINT uCodePage) +LPSTR WINAPI pSetupUnicodeToMultiByte(LPCWSTR lpUnicodeStr, UINT uCodePage) { LPSTR lpMultiByteStr; int nLength; @@ -411,7 +411,7 @@ BOOL WINAPI DoesUserHavePrivilege(LPCWSTR lpPrivilegeName) /************************************************************************** - * EnablePrivilege [SETUPAPI.@] + * pSetupEnablePrivilege [SETUPAPI.@] * * Enables or disables one of the current users privileges. * @@ -424,7 +424,7 @@ BOOL WINAPI DoesUserHavePrivilege(LPCWSTR lpPrivilegeName) * Success: TRUE * Failure: FALSE */ -BOOL WINAPI EnablePrivilege(LPCWSTR lpPrivilegeName, BOOL bEnable) +BOOL WINAPI pSetupEnablePrivilege(LPCWSTR lpPrivilegeName, BOOL bEnable) { TOKEN_PRIVILEGES Privileges; HANDLE hToken; @@ -536,14 +536,14 @@ DWORD WINAPI CaptureStringArg(LPCWSTR pSrc, LPWSTR *pDst) if (pDst == NULL) return ERROR_INVALID_PARAMETER; - *pDst = DuplicateString(pSrc); + *pDst = pSetupDuplicateString(pSrc); return ERROR_SUCCESS; } /************************************************************************** - * CaptureAndConvertAnsiArg [SETUPAPI.@] + * pSetupCaptureAndConvertAnsiArg [SETUPAPI.@] * * Captures an ANSI string and converts it to a UNICODE string. * @@ -558,19 +558,19 @@ DWORD WINAPI CaptureStringArg(LPCWSTR pSrc, LPWSTR *pDst) * NOTE * Call MyFree to release the captured UNICODE string. */ -DWORD WINAPI CaptureAndConvertAnsiArg(LPCSTR pSrc, LPWSTR *pDst) +DWORD WINAPI pSetupCaptureAndConvertAnsiArg(LPCSTR pSrc, LPWSTR *pDst) { if (pDst == NULL) return ERROR_INVALID_PARAMETER; - *pDst = MultiByteToUnicode(pSrc, CP_ACP); + *pDst = pSetupMultiByteToUnicode(pSrc, CP_ACP); return ERROR_SUCCESS; } /************************************************************************** - * OpenAndMapFileForRead [SETUPAPI.@] + * pSetupOpenAndMapFileForRead [SETUPAPI.@] * * Open and map a file to a buffer. * @@ -588,11 +588,11 @@ DWORD WINAPI CaptureAndConvertAnsiArg(LPCSTR pSrc, LPWSTR *pDst) * NOTE * Call UnmapAndCloseFile to release the file. */ -DWORD WINAPI OpenAndMapFileForRead(LPCWSTR lpFileName, - LPDWORD lpSize, - LPHANDLE lpFile, - LPHANDLE lpMapping, - LPVOID *lpBuffer) +DWORD WINAPI pSetupOpenAndMapFileForRead(LPCWSTR lpFileName, + LPDWORD lpSize, + LPHANDLE lpFile, + LPHANDLE lpMapping, + LPVOID *lpBuffer) { DWORD dwError; @@ -635,7 +635,7 @@ DWORD WINAPI OpenAndMapFileForRead(LPCWSTR lpFileName, /************************************************************************** - * UnmapAndCloseFile [SETUPAPI.@] + * pSetupUnmapAndCloseFile [SETUPAPI.@] * * Unmap and close a mapped file. * @@ -648,7 +648,7 @@ DWORD WINAPI OpenAndMapFileForRead(LPCWSTR lpFileName, * Success: TRUE * Failure: FALSE */ -BOOL WINAPI UnmapAndCloseFile(HANDLE hFile, HANDLE hMapping, LPVOID lpBuffer) +BOOL WINAPI pSetupUnmapAndCloseFile(HANDLE hFile, HANDLE hMapping, LPVOID lpBuffer) { TRACE("%p %p %p\n", hFile, hMapping, lpBuffer); @@ -938,7 +938,7 @@ DWORD WINAPI GetSetFileTimestamp(LPCWSTR lpFileName, /************************************************************************** - * MyGetFileTitle [SETUPAPI.@] + * pSetupGetFileTitle [SETUPAPI.@] * * Returns a pointer to the last part of a fully qualified file name. * @@ -949,7 +949,7 @@ DWORD WINAPI GetSetFileTimestamp(LPCWSTR lpFileName, * Pointer to a files name. */ LPWSTR WINAPI -MyGetFileTitle(LPCWSTR lpFileName) +pSetupGetFileTitle(LPCWSTR lpFileName) { LPWSTR ptr; LPWSTR ret; @@ -976,7 +976,7 @@ MyGetFileTitle(LPCWSTR lpFileName) /************************************************************************** - * ConcatenatePaths [SETUPAPI.@] + * pSetupConcatenatePaths [SETUPAPI.@] * * Concatenates two paths. * @@ -991,10 +991,10 @@ MyGetFileTitle(LPCWSTR lpFileName) * Failure: FALSE */ BOOL WINAPI -ConcatenatePaths(LPWSTR lpPath, - LPCWSTR lpAppend, - DWORD dwBufferSize, - LPDWORD lpRequiredSize) +pSetupConcatenatePaths(LPWSTR lpPath, + LPCWSTR lpAppend, + DWORD dwBufferSize, + LPDWORD lpRequiredSize) { DWORD dwPathSize; DWORD dwAppendSize; @@ -1048,7 +1048,7 @@ ConcatenatePaths(LPWSTR lpPath, /************************************************************************** - * CenterWindowRelativeToParent [SETUPAPI.@] + * pSetupCenterWindowRelativeToParent [SETUPAPI.@] * * Centers a window relative to its parent. * @@ -1059,7 +1059,7 @@ ConcatenatePaths(LPWSTR lpPath, * None */ VOID WINAPI -CenterWindowRelativeToParent(HWND hwnd) +pSetupCenterWindowRelativeToParent(HWND hwnd) { HWND hwndOwner; POINT ptOrigin; @@ -1094,7 +1094,7 @@ CenterWindowRelativeToParent(HWND hwnd) /************************************************************************** - * GetVersionInfoFromImage [SETUPAPI.@] + * pSetupGetVersionInfoFromImage [SETUPAPI.@] * * Retrieves version information for a given file. * @@ -1109,9 +1109,9 @@ CenterWindowRelativeToParent(HWND hwnd) * Failure: FALSE */ BOOL WINAPI -GetVersionInfoFromImage(LPWSTR lpFileName, - PULARGE_INTEGER lpFileVersion, - LPWORD lpVersionVarSize) +pSetupGetVersionInfoFromImage(LPWSTR lpFileName, + PULARGE_INTEGER lpFileVersion, + LPWORD lpVersionVarSize) { DWORD dwHandle; DWORD dwSize; @@ -1345,7 +1345,7 @@ BOOL WINAPI SetupGetFileCompressionInfoExA( PCSTR source, PSTR name, DWORD len, TRACE("%s, %p, %d, %p, %p, %p, %p\n", debugstr_a(source), name, len, required, source_size, target_size, type); - if (!source || !(sourceW = MultiByteToUnicode( source, CP_ACP ))) return FALSE; + if (!source || !(sourceW = pSetupMultiByteToUnicode( source, CP_ACP ))) return FALSE; if (name) { @@ -1359,7 +1359,7 @@ BOOL WINAPI SetupGetFileCompressionInfoExA( PCSTR source, PSTR name, DWORD len, ret = SetupGetFileCompressionInfoExW( sourceW, nameW, nb_chars, &nb_chars, source_size, target_size, type ); if (ret) { - if ((nameA = UnicodeToMultiByte( nameW, CP_ACP ))) + if ((nameA = pSetupUnicodeToMultiByte( nameW, CP_ACP ))) { if (name && len >= nb_chars) lstrcpyA( name, nameA ); else @@ -1580,8 +1580,8 @@ DWORD WINAPI SetupDecompressOrCopyFileA( PCSTR source, PCSTR target, PUINT type DWORD ret = FALSE; WCHAR *sourceW = NULL, *targetW = NULL; - if (source && !(sourceW = MultiByteToUnicode( source, CP_ACP ))) return FALSE; - if (target && !(targetW = MultiByteToUnicode( target, CP_ACP ))) + if (source && !(sourceW = pSetupMultiByteToUnicode( source, CP_ACP ))) return FALSE; + if (target && !(targetW = pSetupMultiByteToUnicode( target, CP_ACP ))) { MyFree( sourceW ); return ERROR_NOT_ENOUGH_MEMORY; @@ -1736,7 +1736,7 @@ pSetupIsGuidNull(LPGUID lpGUID) */ BOOL WINAPI -IsUserAdmin(VOID) +pSetupIsUserAdmin(VOID) { SID_IDENTIFIER_AUTHORITY Authority = {SECURITY_NT_AUTHORITY}; BOOL bResult = FALSE; @@ -1773,7 +1773,7 @@ HSPFILELOG WINAPI SetupInitializeFileLogW(LPCWSTR LogFileName, DWORD Flags) if (Flags & SPFILELOG_SYSTEMLOG) { - if (!IsUserAdmin() && !(Flags & SPFILELOG_QUERYONLY)) + if (!pSetupIsUserAdmin() && !(Flags & SPFILELOG_QUERYONLY)) { /* insufficient privileges */ SetLastError(ERROR_ACCESS_DENIED); diff --git a/reactos/dll/win32/setupapi/parser.c b/reactos/dll/win32/setupapi/parser.c index e1b693ddaec..0271d179da9 100644 --- a/reactos/dll/win32/setupapi/parser.c +++ b/reactos/dll/win32/setupapi/parser.c @@ -2243,7 +2243,7 @@ SetupGetInfFileListA( if (DirectoryPath != NULL) { - DirectoryPathW = MultiByteToUnicode(DirectoryPath, CP_ACP); + DirectoryPathW = pSetupMultiByteToUnicode(DirectoryPath, CP_ACP); if (DirectoryPathW == NULL) goto Cleanup; } @@ -2318,7 +2318,7 @@ BOOL WINAPI SetupDiGetINFClassA( if (InfName != NULL) { - InfNameW = MultiByteToUnicode(InfName, CP_ACP); + InfNameW = pSetupMultiByteToUnicode(InfName, CP_ACP); if (InfNameW == NULL) goto Cleanup; } diff --git a/reactos/dll/win32/setupapi/setupapi.spec b/reactos/dll/win32/setupapi/setupapi.spec index 79bf3aad5c2..1bff6b03d49 100644 --- a/reactos/dll/win32/setupapi/setupapi.spec +++ b/reactos/dll/win32/setupapi/setupapi.spec @@ -213,7 +213,7 @@ @ stdcall InstallHinfSection(long long str long) InstallHinfSectionA @ stdcall InstallHinfSectionA(long long str long) @ stdcall InstallHinfSectionW(long long wstr long) -@ stdcall IsUserAdmin() +@ stdcall IsUserAdmin() pSetupIsUserAdmin @ stdcall MyFree(ptr) @ stdcall MyMalloc(long) @ stdcall MyRealloc(ptr long) @@ -532,32 +532,32 @@ @ stdcall SetupUninstallOEMInfW(wstr long ptr) @ stub SetupVerifyInfFileA @ stub SetupVerifyInfFileW -@ stdcall UnicodeToMultiByte(wstr long) +@ stdcall UnicodeToMultiByte(wstr long) pSetupUnicodeToMultiByte @ stub VerifyCatalogFile @ stub pSetupAccessRunOnceNodeList @ stub pSetupAcquireSCMLock @ stub pSetupAddMiniIconToList @ stub pSetupAddTagToGroupOrderListEntry @ stub pSetupAppendStringToMultiSz -@ stdcall pSetupCaptureAndConvertAnsiArg(str ptr) CaptureAndConvertAnsiArg -@ stdcall pSetupCenterWindowRelativeToParent(long) CenterWindowRelativeToParent -@ stdcall pSetupConcatenatePaths(wstr wstr long ptr) ConcatenatePaths +@ stdcall pSetupCaptureAndConvertAnsiArg(str ptr) +@ stdcall pSetupCenterWindowRelativeToParent(long) +@ stdcall pSetupConcatenatePaths(wstr wstr long ptr) @ stub pSetupDestroyRunOnceNodeList @ stub pSetupDiGetDeviceInfoContext @ stub pSetupDiSetDeviceInfoContext @ stub pSetupDoesUserHavePrivilege -@ stdcall pSetupDuplicateString(wstr) DuplicateString -@ stdcall pSetupEnablePrivilege(wstr long) EnablePrivilege +@ stdcall pSetupDuplicateString(wstr) +@ stdcall pSetupEnablePrivilege(wstr long) @ stub pSetupFree @ stub pSetupFreeStringArray @ stub pSetupGetCurrentDriverSigningPolicy @ stdcall pSetupGetField(ptr long) -@ stdcall pSetupGetFileTitle(wstr) MyGetFileTitle +@ stdcall pSetupGetFileTitle(wstr) @ stdcall pSetupGetGlobalFlags() @ stub pSetupGetInfSections @ stdcall pSetupGetQueueFlags(ptr) @ stub pSetupGetRealSystemTime -@ stdcall pSetupGetVersionInfoFromImage(wstr ptr ptr) GetVersionInfoFromImage +@ stdcall pSetupGetVersionInfoFromImage(wstr ptr ptr) @ stdcall pSetupGuidFromString(wstr ptr) @ stub pSetupHandleFailedVerification @ stub pSetupInfCacheBuild @@ -566,16 +566,16 @@ @ stub pSetupInstallStopEx @ stdcall pSetupIsGuidNull(ptr) @ stub pSetupIsLocalSystem -@ stdcall pSetupIsUserAdmin() IsUserAdmin +@ stdcall pSetupIsUserAdmin() @ stub pSetupMakeSurePathExists @ stub pSetupMalloc @ stub pSetupModifyGlobalFlags -@ stdcall pSetupMultiByteToUnicode(str long) MultiByteToUnicode -@ stdcall pSetupOpenAndMapFileForRead(wstr ptr ptr ptr ptr) OpenAndMapFileForRead +@ stdcall pSetupMultiByteToUnicode(str long) +@ stdcall pSetupOpenAndMapFileForRead(wstr ptr ptr ptr ptr) @ stub pSetupOutOfMemory @ stub pSetupQueryMultiSzValueToArray @ stub pSetupRealloc -@ stdcall pSetupRegistryDelnode(long long) RegistryDelnode +@ stdcall pSetupRegistryDelnode(long long) @ stub pSetupRetrieveServiceConfig @ stub pSetupSetArrayToMultiSzValue @ stdcall pSetupSetGlobalFlags(long) @@ -597,8 +597,8 @@ @ stdcall pSetupStringTableSetExtraData(ptr long ptr long) @ stdcall pSetupStringTableStringFromId(ptr long) @ stdcall pSetupStringTableStringFromIdEx(ptr long ptr ptr) -@ stdcall pSetupUnicodeToMultiByte(wstr long) UnicodeToMultiByte -@ stdcall pSetupUnmapAndCloseFile(long long ptr) UnmapAndCloseFile +@ stdcall pSetupUnicodeToMultiByte(wstr long) +@ stdcall pSetupUnmapAndCloseFile(long long ptr) @ stub pSetupVerifyCatalogFile @ stub pSetupVerifyFile @ stub pSetupVerifyQueuedCatalogs diff --git a/reactos/dll/win32/setupapi/stubs.c b/reactos/dll/win32/setupapi/stubs.c index 2ea74984bef..99ef8d15eb8 100644 --- a/reactos/dll/win32/setupapi/stubs.c +++ b/reactos/dll/win32/setupapi/stubs.c @@ -42,9 +42,9 @@ DWORD WINAPI suErrorToIds16( WORD w1, WORD w2 ) } /*********************************************************************** - * RegistryDelnode(SETUPAPI.@) + * pSetupRegistryDelnode(SETUPAPI.@) */ -BOOL WINAPI RegistryDelnode(DWORD x, DWORD y) +BOOL WINAPI pSetupRegistryDelnode(DWORD x, DWORD y) { FIXME("%08x %08x: stub\n", x, y); return FALSE; diff --git a/reactos/include/psdk/setupapi.h b/reactos/include/psdk/setupapi.h index 1f998c46f6c..066d78d477e 100644 --- a/reactos/include/psdk/setupapi.h +++ b/reactos/include/psdk/setupapi.h @@ -1116,24 +1116,15 @@ typedef SP_REGISTER_CONTROL_STATUSA SP_REGISTER_CONTROL_STATUS, *PSP_REGISTER_CO WINSETUPAPI LONG WINAPI AddTagToGroupOrderList(PCWSTR, DWORD, DWORD); WINSETUPAPI VOID WINAPI AssertFail(LPSTR, UINT, LPSTR); -WINSETUPAPI DWORD WINAPI CaptureAndConvertAnsiArg(PCSTR, PWSTR*); WINSETUPAPI DWORD WINAPI CaptureStringArg(PCWSTR, PWSTR*); -WINSETUPAPI VOID WINAPI CenterWindowRelativeToParent(HWND); -WINSETUPAPI BOOL WINAPI ConcatenatePaths(LPWSTR, LPCWSTR, DWORD, LPDWORD); WINSETUPAPI BOOL WINAPI DelayedMove(PCWSTR, PCWSTR); WINSETUPAPI BOOL WINAPI DoesUserHavePrivilege(PCWSTR); -WINSETUPAPI PWSTR WINAPI DuplicateString(PCWSTR); -WINSETUPAPI BOOL WINAPI EnablePrivilege(PCWSTR, BOOL); WINSETUPAPI BOOL WINAPI FileExists(PCWSTR, PWIN32_FIND_DATAW); WINSETUPAPI DWORD WINAPI GetSetFileTimestamp(PCWSTR, PFILETIME, PFILETIME, PFILETIME, BOOLEAN); -WINSETUPAPI BOOL WINAPI GetVersionInfoFromImage(LPWSTR, PULARGE_INTEGER, LPWORD); WINSETUPAPI BOOL WINAPI IsUserAdmin(VOID); -WINSETUPAPI PWSTR WINAPI MultiByteToUnicode(PCSTR, UINT); WINSETUPAPI VOID WINAPI MyFree(PVOID); -WINSETUPAPI PWSTR WINAPI MyGetFileTitle(PCWSTR); WINSETUPAPI PVOID WINAPI MyMalloc(DWORD); WINSETUPAPI PVOID WINAPI MyRealloc(PVOID, DWORD); -WINSETUPAPI DWORD WINAPI OpenAndMapForRead(PCWSTR, PDWORD, PHANDLE, PHANDLE, PVOID*); WINSETUPAPI LONG WINAPI QueryRegistryValue(HKEY, PCWSTR, PBYTE*, PDWORD, PDWORD); WINSETUPAPI DWORD WINAPI RetreiveFileSecurity(PCWSTR, PSECURITY_DESCRIPTOR*); @@ -1430,6 +1421,20 @@ WINSETUPAPI BOOL WINAPI SetupTerminateFileLog(HSPFILELOG); WINSETUPAPI DWORD WINAPI StampFileSecurity(PCWSTR, PSECURITY_DESCRIPTOR); + +WINSETUPAPI DWORD WINAPI pSetupCaptureAndConvertAnsiArg(PCSTR, PWSTR*); +WINSETUPAPI VOID WINAPI pSetupCenterWindowRelativeToParent(HWND); +WINSETUPAPI BOOL WINAPI pSetupConcatenatePaths(LPWSTR, LPCWSTR, DWORD, LPDWORD); +WINSETUPAPI PWSTR WINAPI pSetupDuplicateString(PCWSTR); +WINSETUPAPI BOOL WINAPI pSetupEnablePrivilege(PCWSTR, BOOL); +WINSETUPAPI PWSTR WINAPI pSetupGetFileTitle(PCWSTR); +WINSETUPAPI BOOL WINAPI pSetupGetVersionInfoFromImage(LPWSTR, PULARGE_INTEGER, LPWORD); +WINSETUPAPI BOOL WINAPI pSetupIsUserAdmin(VOID); +WINSETUPAPI PWSTR WINAPI pSetupMultiByteToUnicode(PCSTR, UINT); +WINSETUPAPI DWORD WINAPI pSetupOpenAndMapForRead(PCWSTR, PDWORD, PHANDLE, PHANDLE, PVOID*); + + + WINSETUPAPI DWORD WINAPI pSetupStringTableAddString(HSTRING_TABLE, LPWSTR, DWORD); WINSETUPAPI DWORD WINAPI pSetupStringTableAddStringEx(HSTRING_TABLE, LPWSTR, DWORD, LPVOID, DWORD); WINSETUPAPI VOID WINAPI pSetupStringTableDestroy(HSTRING_TABLE); @@ -1443,9 +1448,12 @@ WINSETUPAPI BOOL WINAPI pSetupStringTableSetExtraData(HSTRING_TABLE, DWORD, LP WINSETUPAPI LPWSTR WINAPI pSetupStringTableStringFromId(HSTRING_TABLE, DWORD); WINSETUPAPI BOOL WINAPI pSetupStringTableStringFromIdEx(HSTRING_TABLE, DWORD, LPWSTR, LPDWORD); +WINSETUPAPI PSTR WINAPI pSetupUnicodeToMultiByte(PCWSTR lpUnicodeStr, UINT uCodePage); +WINSETUPAPI BOOL WINAPI pSetupUnmapAndCloseFile(HANDLE, HANDLE, PVOID); + + WINSETUPAPI DWORD WINAPI TakeOwnershipOfFile(PCWSTR); WINSETUPAPI PSTR WINAPI UnicodeToMultiByte(PCWSTR lpUnicodeStr, UINT uCodePage); -WINSETUPAPI BOOL WINAPI UnmapAndCloseFile(HANDLE, HANDLE, PVOID); /* for backward compatability */ From d3b52209a4cc3191634f5d67c65fea64c2f6f1fa Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 26 Feb 2011 22:23:03 +0000 Subject: [PATCH 160/287] [URLCACHE] Do not initialize the URL-Cache for a system process. Patch will be submitted to WINE. See issue #5372 for more details. svn path=/trunk/; revision=50916 --- reactos/dll/win32/wininet/urlcache.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/reactos/dll/win32/wininet/urlcache.c b/reactos/dll/win32/wininet/urlcache.c index 2129f42e734..63a160d4a29 100644 --- a/reactos/dll/win32/wininet/urlcache.c +++ b/reactos/dll/win32/wininet/urlcache.c @@ -527,6 +527,7 @@ void URLCacheContainers_CreateDefaults(void) static const WCHAR HistoryPrefix[] = {'V','i','s','i','t','e','d',':',0}; static const WCHAR CookieSuffix[] = {0}; static const WCHAR CookiePrefix[] = {'C','o','o','k','i','e',':',0}; + static const WCHAR UserProfile[] = {'U','S','E','R','P','R','O','F','I','L','E',0}; static const struct { int nFolder; /* CSIDL_* constant */ @@ -540,6 +541,12 @@ void URLCacheContainers_CreateDefaults(void) }; DWORD i; + if (GetEnvironmentVariableW(UserProfile, NULL, 0) == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND) + { + TRACE("Environment variable 'USERPROFILE' does not exist!\n"); + return; + } + for (i = 0; i < sizeof(DefaultContainerData) / sizeof(DefaultContainerData[0]); i++) { WCHAR wszCachePath[MAX_PATH]; From 3a61fab955404037923329ac7981cf0ef5dca25b Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 27 Feb 2011 15:16:00 +0000 Subject: [PATCH 161/287] [NTOSKRNL] Fix a serious bug, where NtAllocateVirtualMemory could allocate memory user mode memory above MmHighestUserAddress up to MmSystemRangeStart - 1, which is a no-access area. svn path=/trunk/; revision=50917 --- reactos/ntoskrnl/mm/marea.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/mm/marea.c b/reactos/ntoskrnl/mm/marea.c index cacf2ae667e..dc50d13f723 100644 --- a/reactos/ntoskrnl/mm/marea.c +++ b/reactos/ntoskrnl/mm/marea.c @@ -458,7 +458,7 @@ MmFindGapBottomUp( { PVOID LowestAddress = MmGetAddressSpaceOwner(AddressSpace) ? MM_LOWEST_USER_ADDRESS : MmSystemRangeStart; PVOID HighestAddress = MmGetAddressSpaceOwner(AddressSpace) ? - (PVOID)((ULONG_PTR)MmSystemRangeStart - 1) : (PVOID)MAXULONG_PTR; + MmHighestUserAddress : (PVOID)MAXULONG_PTR; PVOID AlignedAddress; PMEMORY_AREA Node; PMEMORY_AREA FirstNode; From 6c10c052afe0258aa3ddf7d283704bc445361eba Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 27 Feb 2011 17:20:02 +0000 Subject: [PATCH 162/287] [GDI32] In GetDIBits convert a BITMAPCOREHEADER to a BITMAPINFOHEADER before calling win32k, like done in other places. Convert it back after. This allows to simplify NtGdiGetDIBitsInternal (not done yet) svn path=/trunk/; revision=50918 --- reactos/dll/win32/gdi32/objects/bitmap.c | 76 ++++++++++++++++++------ 1 file changed, 58 insertions(+), 18 deletions(-) diff --git a/reactos/dll/win32/gdi32/objects/bitmap.c b/reactos/dll/win32/gdi32/objects/bitmap.c index 969beb6ad44..6788a9da6fd 100644 --- a/reactos/dll/win32/gdi32/objects/bitmap.c +++ b/reactos/dll/win32/gdi32/objects/bitmap.c @@ -410,6 +410,33 @@ CreateCompatibleBitmap( return CreateDIBSection(hDC, (CONST BITMAPINFO *)&dibs.dsBmih, 0, NULL, NULL, 0); } +void +ConvertBackBitmapInfo(PBITMAPINFO pbmi, PBITMAPINFO pbmiConverted) +{ + /* Check if we converted from PBITMAPCOREINFO */ + if (pbmiConverted != pbmi) + { + PBITMAPCOREINFO pbci = (PBITMAPCOREINFO)pbmi; + + /* Convert back header */ + pbci->bmciHeader.biSize = sizeof(BITMAPCOREHEADER); + pbci->bmciHeader.bcWidth = pbmiConverted->bmiHeader.biWidth; + pbci->bmciHeader.bcHeight = pbmiConverted->bmiHeader.biHeight; + pbci->bmciHeader.bcPlanes = 1; + pbci->bmciHeader.bcBitCount = pbmiConverted->bmiHeader.biBitCount; + + /* Convert back colors */ + for (i = 0; i < pbmiConverted->bmiHeader.biClrUsed; i++) + { + pbci->bmciColors.rgbtRed = pbmiConverted->bmiColors.rgbRed; + pbci->bmciColors.rgbtGreen = pbmiConverted->bmiColors.rgbGreen; + pbci->bmciColors.rgbtBlue = pbmiConverted->bmiColors.rgbBlue; + } + + /* Free memory */ + RtlFreeHeap(RtlGetProcessHeap(), 0, pbmiConverted); + } +} INT WINAPI @@ -422,8 +449,9 @@ GetDIBits( LPBITMAPINFO lpbmi, UINT uUsage) { - UINT cjBmpScanSize; - UINT cjInfoSize; + PBITMAPINFO pbmiConverted; + UINT cjBmpScanSize, cjInfoSize; + INT iResult; if (!hDC || !GdiIsHandleValid((HGDIOBJ)hDC) || !lpbmi) { @@ -431,15 +459,22 @@ GetDIBits( return 0; } - cjBmpScanSize = DIB_BitmapMaxBitsSize(lpbmi, cScanLines); - cjInfoSize = DIB_BitmapInfoSize(lpbmi, uUsage); - - if ( lpvBits ) + /* Convert BITMAPINFO to a proper format */ + pbmiConverted = ConvertBitmapInfo(lpbmi, uUsage, &cjInfoSize, FALSE); + if (!pbmiConverted) { - if ( lpbmi->bmiHeader.biSize >= sizeof(BITMAPINFOHEADER) ) + GdiSetLastError(ERROR_INVALID_PARAMETER); + return 0; + } + + cjBmpScanSize = DIB_BitmapMaxBitsSize(lpbmi, cScanLines); + + if (lpvBits) + { + if (lpbmi->bmiHeader.biSize >= sizeof(BITMAPINFOHEADER)) { - if ( lpbmi->bmiHeader.biCompression == BI_JPEG || - lpbmi->bmiHeader.biCompression == BI_PNG ) + if (lpbmi->bmiHeader.biCompression == BI_JPEG || + lpbmi->bmiHeader.biCompression == BI_PNG) { SetLastError(ERROR_INVALID_PARAMETER); return 0; @@ -447,17 +482,22 @@ GetDIBits( } } - return NtGdiGetDIBitsInternal(hDC, - hbmp, - uStartScan, - cScanLines, - lpvBits, - lpbmi, - uUsage, - cjBmpScanSize, - cjInfoSize); + iResult = NtGdiGetDIBitsInternal(hDC, + hbmp, + uStartScan, + cScanLines, + lpvBits, + pbmiConverted, + uUsage, + cjBmpScanSize, + cjInfoSize); + + ConvertBackBitmapInfo(lpbmi, pbmiConverted); + + return iResult; } + /* * @implemented */ From eb7b3a6e70cbae13afed74604dea14327905f13c Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 27 Feb 2011 17:31:54 +0000 Subject: [PATCH 163/287] Fix build svn path=/trunk/; revision=50919 --- reactos/dll/win32/gdi32/objects/bitmap.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/reactos/dll/win32/gdi32/objects/bitmap.c b/reactos/dll/win32/gdi32/objects/bitmap.c index 6788a9da6fd..9ba298068e1 100644 --- a/reactos/dll/win32/gdi32/objects/bitmap.c +++ b/reactos/dll/win32/gdi32/objects/bitmap.c @@ -413,13 +413,15 @@ CreateCompatibleBitmap( void ConvertBackBitmapInfo(PBITMAPINFO pbmi, PBITMAPINFO pbmiConverted) { + INT i; + /* Check if we converted from PBITMAPCOREINFO */ if (pbmiConverted != pbmi) { PBITMAPCOREINFO pbci = (PBITMAPCOREINFO)pbmi; /* Convert back header */ - pbci->bmciHeader.biSize = sizeof(BITMAPCOREHEADER); + pbci->bmciHeader.bcSize = sizeof(BITMAPCOREHEADER); pbci->bmciHeader.bcWidth = pbmiConverted->bmiHeader.biWidth; pbci->bmciHeader.bcHeight = pbmiConverted->bmiHeader.biHeight; pbci->bmciHeader.bcPlanes = 1; @@ -428,9 +430,9 @@ ConvertBackBitmapInfo(PBITMAPINFO pbmi, PBITMAPINFO pbmiConverted) /* Convert back colors */ for (i = 0; i < pbmiConverted->bmiHeader.biClrUsed; i++) { - pbci->bmciColors.rgbtRed = pbmiConverted->bmiColors.rgbRed; - pbci->bmciColors.rgbtGreen = pbmiConverted->bmiColors.rgbGreen; - pbci->bmciColors.rgbtBlue = pbmiConverted->bmiColors.rgbBlue; + pbci->bmciColors[i].rgbtRed = pbmiConverted->bmiColors[i].rgbRed; + pbci->bmciColors[i].rgbtGreen = pbmiConverted->bmiColors[i].rgbGreen; + pbci->bmciColors[i].rgbtBlue = pbmiConverted->bmiColors[i].rgbBlue; } /* Free memory */ From 760940d0bd2de1ebdcc15675d5ba2ab893a6d05d Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 27 Feb 2011 17:38:18 +0000 Subject: [PATCH 164/287] [WIN32K] - In NtGdiGetDIBitsInternal use a shared lock for the bitmaps and provide background colors when initializing the XLATEOBJ. This fixes mono bitmaps passed to GetDIBits. (no it does not fix pink icons in VLC) - In BuildDIBPalette don't handle 15bpp, its not valid. and 16 bpp is 555, this is documented in MSDN. svn path=/trunk/; revision=50920 --- .../subsystems/win32/win32k/objects/dibobj.c | 23 ++++++++----------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/dibobj.c b/reactos/subsystems/win32/win32k/objects/dibobj.c index f33a8bc4ab5..a0e29d92b19 100644 --- a/reactos/subsystems/win32/win32k/objects/dibobj.c +++ b/reactos/subsystems/win32/win32k/objects/dibobj.c @@ -649,7 +649,7 @@ NtGdiGetDIBitsInternal( } /* Get a pointer to the source bitmap object */ - psurf = SURFACE_LockSurface(hBitmap); + psurf = SURFACE_ShareLockSurface(hBitmap); if (psurf == NULL) { ScanLines = 0; @@ -944,7 +944,7 @@ NtGdiGetDIBitsInternal( goto done ; } - psurfDest = SURFACE_LockSurface(hBmpDest); + psurfDest = SURFACE_ShareLockSurface(hBmpDest); rcDest.left = 0; rcDest.top = 0; @@ -955,7 +955,7 @@ NtGdiGetDIBitsInternal( srcPoint.y = height < 0 ? psurf->SurfObj.sizlBitmap.cy - (StartScan + ScanLines) : StartScan; - EXLATEOBJ_vInitialize(&exlo, psurf->ppal, psurfDest->ppal, 0, 0, 0); + EXLATEOBJ_vInitialize(&exlo, psurf->ppal, psurfDest->ppal, 0xffffff, 0xffffff, 0); ret = IntEngCopyBits(&psurfDest->SurfObj, &psurf->SurfObj, @@ -964,6 +964,8 @@ NtGdiGetDIBitsInternal( &rcDest, &srcPoint); + SURFACE_ShareUnlockSurface(psurfDest); + if(!ret) ScanLines = 0; else @@ -994,7 +996,7 @@ NtGdiGetDIBitsInternal( done: if(pDC) DC_UnlockDc(pDC); - if(psurf) SURFACE_UnlockSurface(psurf); + if(psurf) SURFACE_ShareUnlockSurface(psurf); if(pbmci) DIB_FreeConvertedBitmapInfo(Info, (BITMAPINFO*)pbmci); return ScanLines; @@ -1101,14 +1103,14 @@ NtGdiStretchDIBitsInternal( hBitmap = DIB_CreateDIBSection(pdc, BitsInfo, Usage, &pvBits, NULL, 0, 0); DC_UnlockDc(pdc); - hdcMem = NtGdiCreateCompatibleDC(hDC); if(!hBitmap) { DPRINT1("Error, failed to create a DIB section\n"); - NtGdiDeleteObjectApp(hdcMem); goto cleanup; } + hdcMem = NtGdiCreateCompatibleDC(hDC); + RtlCopyMemory(pvBits, safeBits, cjMaxBits); hOldBitmap = NtGdiSelectBitmap(hdcMem, hBitmap); @@ -1771,20 +1773,13 @@ BuildDIBPalette(CONST BITMAPINFO *bmi) paletteType = PAL_BITFIELDS; switch (bits) { - case 15: + case 16: paletteType |= PAL_RGB16_555; RedMask = 0x7C00; GreenMask = 0x03E0; BlueMask = 0x001F; break; - case 16: - paletteType |= PAL_RGB16_565; - RedMask = 0xF800; - GreenMask = 0x07E0; - BlueMask = 0x001F; - break; - case 24: case 32: paletteType |= PAL_BGR; From 736733be4d488d3215f953111ed445fc62078573 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 27 Feb 2011 17:51:37 +0000 Subject: [PATCH 165/287] [WIN32K] - mark surface as not selected in DC_vSelectSurface when its released from a DC NtGdiSelectBitmap: - Don't allow selecting a bitmap into a dc that is already selected! - Use DC_vSelectSurface instead of manually selecting - set the DC size based on bitmap size svn path=/trunk/; revision=50921 --- reactos/subsystems/win32/win32k/eng/bitblt.c | 4 +- reactos/subsystems/win32/win32k/include/dc.h | 3 ++ .../subsystems/win32/win32k/objects/dcobjs.c | 46 +++++++++---------- 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/reactos/subsystems/win32/win32k/eng/bitblt.c b/reactos/subsystems/win32/win32k/eng/bitblt.c index 3525a2caf2a..029f55e1832 100644 --- a/reactos/subsystems/win32/win32k/eng/bitblt.c +++ b/reactos/subsystems/win32/win32k/eng/bitblt.c @@ -541,8 +541,6 @@ IntEngBitBlt( BOOL bResult; RECTL rclClipped; RECTL rclSrc; -// INTENG_ENTER_LEAVE EnterLeaveSource; -// INTENG_ENTER_LEAVE EnterLeaveDest; PFN_DrvBitBlt pfnBitBlt; ASSERT(psoTrg); @@ -552,9 +550,9 @@ IntEngBitBlt( rclClipped = *prclTrg; RECTL_vMakeWellOrdered(&rclClipped); - /* Clip target rect against the bounds of the clipping region */ if (pco) { + /* Clip target rect against the bounds of the clipping region */ if (!RECTL_bIntersectRect(&rclClipped, &rclClipped, &pco->rclBounds)) { /* Nothing left */ diff --git a/reactos/subsystems/win32/win32k/include/dc.h b/reactos/subsystems/win32/win32k/include/dc.h index 2d94c245ca3..07f412b6f34 100644 --- a/reactos/subsystems/win32/win32k/include/dc.h +++ b/reactos/subsystems/win32/win32k/include/dc.h @@ -213,7 +213,10 @@ DC_vSelectSurface(PDC pdc, PSURFACE psurfNew) { PSURFACE psurfOld = pdc->dclevel.pSurface; if (psurfOld) + { + psurfOld->hdc = NULL; SURFACE_ShareUnlockSurface(psurfOld); + } if (psurfNew) GDIOBJ_IncrementShareCount((POBJ)psurfNew); pdc->dclevel.pSurface = psurfNew; diff --git a/reactos/subsystems/win32/win32k/objects/dcobjs.c b/reactos/subsystems/win32/win32k/objects/dcobjs.c index 25e54cb36c7..6975b60146f 100644 --- a/reactos/subsystems/win32/win32k/objects/dcobjs.c +++ b/reactos/subsystems/win32/win32k/objects/dcobjs.c @@ -257,9 +257,10 @@ NtGdiSelectBitmap( PDC pdc; PDC_ATTR pdcattr; HBITMAP hbmpOld; - PSURFACE psurfNew, psurfOld; + PSURFACE psurfNew; HRGN hVisRgn; SIZEL sizlBitmap = {1, 1}; + HDC hdcOld; ASSERT_NOGDILOCKS(); /* Verify parameters */ @@ -280,8 +281,17 @@ NtGdiSelectBitmap( return NULL; } - /* Save the old bitmap */ - psurfOld = pdc->dclevel.pSurface; + /* Check if there was a bitmap selected before */ + if (pdc->dclevel.pSurface) + { + /* Return its handle */ + hbmpOld = pdc->dclevel.pSurface->BaseObject.hHmgr; + } + else + { + /* Return default bitmap */ + hbmpOld = StockObjects[DEFAULT_BITMAP]; + } /* Check if the default bitmap was passed */ if (hbmp == StockObjects[DEFAULT_BITMAP]) @@ -300,16 +310,17 @@ NtGdiSelectBitmap( DC_UnlockDc(pdc); return NULL; } -#if 0 // FIXME: bug bug, causes problems + /* Set the bitmp's hdc */ - if (InterlockedCompareExchangePointer((PVOID*)&psurfNew->hdc, hdc, 0)) + hdcOld = InterlockedCompareExchangePointer((PVOID*)&psurfNew->hdc, hdc, 0); + if (hdcOld != NULL && hdcOld != hdc) { /* The bitmap is already selected, fail */ SURFACE_ShareUnlockSurface(psurfNew); DC_UnlockDc(pdc); return NULL; } -#endif + /* Get the bitmap size */ sizlBitmap = psurfNew->SurfObj.sizlBitmap; @@ -325,25 +336,14 @@ NtGdiSelectBitmap( } } - /* Select the new bitmap */ - pdc->dclevel.pSurface = psurfNew; + /* Select the new surface, release the old */ + DC_vSelectSurface(pdc, psurfNew); - /* Check if there was a bitmap selected before */ - if (psurfOld) - { - hbmpOld = psurfOld->BaseObject.hHmgr; + /* Set the new size */ + pdc->dclevel.sizl = sizlBitmap; - /* Reset hdc of old bitmap, this surface isn't selected anymore */ - psurfOld->hdc = NULL; - - /* Release the old bitmap */ - SURFACE_ShareUnlockSurface(psurfOld); - } - else - { - /* Return default bitmap */ - hbmpOld = StockObjects[DEFAULT_BITMAP]; - } + /* Release one reference we added */ + SURFACE_ShareUnlockSurface(psurfNew); /* Mark the dc brushes invalid */ pdcattr->ulDirty_ |= DIRTY_FILL | DIRTY_LINE; From 2f6bcbb66c8d361934f0adf54fbddc095ce1097b Mon Sep 17 00:00:00 2001 From: Christoph von Wittich Date: Sun, 27 Feb 2011 18:30:50 +0000 Subject: [PATCH 166/287] [imagehlp_winetest] -add imagehlp_winetest svn path=/trunk/; revision=50922 --- rostests/winetests/directory.rbuild | 3 + rostests/winetests/imagehlp/image.c | 353 ++++++++++++++++++++ rostests/winetests/imagehlp/imagehlp.rbuild | 16 + rostests/winetests/imagehlp/integrity.c | 294 ++++++++++++++++ rostests/winetests/imagehlp/testlist.c | 17 + 5 files changed, 683 insertions(+) create mode 100644 rostests/winetests/imagehlp/image.c create mode 100644 rostests/winetests/imagehlp/imagehlp.rbuild create mode 100644 rostests/winetests/imagehlp/integrity.c create mode 100644 rostests/winetests/imagehlp/testlist.c diff --git a/rostests/winetests/directory.rbuild b/rostests/winetests/directory.rbuild index 3a345e3a608..76eab73420d 100644 --- a/rostests/winetests/directory.rbuild +++ b/rostests/winetests/directory.rbuild @@ -67,6 +67,9 @@ + + + diff --git a/rostests/winetests/imagehlp/image.c b/rostests/winetests/imagehlp/image.c new file mode 100644 index 00000000000..e008b0b4618 --- /dev/null +++ b/rostests/winetests/imagehlp/image.c @@ -0,0 +1,353 @@ +/* + * Copyright 2008 Juan Lang + * Copyright 2010 Andrey Turkin + * + * 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 +#include + +#define NONAMELESSUNION +#include +#include +#include +#include +#include + +#include "wine/test.h" + +static HMODULE hImageHlp; + +static BOOL (WINAPI *pImageGetDigestStream)(HANDLE, DWORD, DIGEST_FUNCTION, DIGEST_HANDLE); + +/* minimal PE file image */ +#define VA_START 0x400000 +#define FILE_PE_START 0x50 +#define NUM_SECTIONS 3 +#define FILE_TEXT 0x200 +#define RVA_TEXT 0x1000 +#define RVA_BSS 0x2000 +#define FILE_IDATA 0x400 +#define RVA_IDATA 0x3000 +#define FILE_TOTAL 0x600 +#define RVA_TOTAL 0x4000 +#include +struct Imports { + IMAGE_IMPORT_DESCRIPTOR descriptors[2]; + IMAGE_THUNK_DATA32 original_thunks[2]; + IMAGE_THUNK_DATA32 thunks[2]; + struct __IMPORT_BY_NAME { + WORD hint; + char funcname[0x20]; + } ibn; + char dllname[0x10]; +}; +#define EXIT_PROCESS (VA_START+RVA_IDATA+FIELD_OFFSET(struct Imports, thunks[0])) + +static struct _PeImage { + IMAGE_DOS_HEADER dos_header; + char __alignment1[FILE_PE_START - sizeof(IMAGE_DOS_HEADER)]; + IMAGE_NT_HEADERS32 nt_headers; + IMAGE_SECTION_HEADER sections[NUM_SECTIONS]; + char __alignment2[FILE_TEXT - FILE_PE_START - sizeof(IMAGE_NT_HEADERS32) - + NUM_SECTIONS * sizeof(IMAGE_SECTION_HEADER)]; + unsigned char text_section[FILE_IDATA-FILE_TEXT]; + struct Imports idata_section; + char __alignment3[FILE_TOTAL-FILE_IDATA-sizeof(struct Imports)]; +} bin = { + /* dos header */ + {IMAGE_DOS_SIGNATURE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, 0, 0, {}, FILE_PE_START}, + /* alignment before PE header */ + {}, + /* nt headers */ + {IMAGE_NT_SIGNATURE, + /* basic headers - 3 sections, no symbols, EXE file */ + {IMAGE_FILE_MACHINE_I386, NUM_SECTIONS, 0, 0, 0, sizeof(IMAGE_OPTIONAL_HEADER32), + IMAGE_FILE_32BIT_MACHINE | IMAGE_FILE_EXECUTABLE_IMAGE}, + /* optional header */ + {IMAGE_NT_OPTIONAL_HDR32_MAGIC, 4, 0, FILE_IDATA-FILE_TEXT, + FILE_TOTAL-FILE_IDATA + FILE_IDATA-FILE_TEXT, 0x400, + RVA_TEXT, RVA_TEXT, RVA_BSS, VA_START, 0x1000, 0x200, 4, 0, 1, 0, 4, 0, 0, + RVA_TOTAL, FILE_TEXT, 0, IMAGE_SUBSYSTEM_WINDOWS_GUI, 0, + 0x200000, 0x1000, 0x100000, 0x1000, 0, 0x10, + {{0, 0}, + {RVA_IDATA, sizeof(struct Imports)} + } + } + }, + /* sections */ + { + {".text", {0x100}, RVA_TEXT, FILE_IDATA-FILE_TEXT, FILE_TEXT, + 0, 0, 0, 0, IMAGE_SCN_CNT_CODE | IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_READ}, + {".bss", {0x400}, RVA_BSS, 0, 0, 0, 0, 0, 0, + IMAGE_SCN_CNT_UNINITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE}, + {".idata", {sizeof(struct Imports)}, RVA_IDATA, FILE_TOTAL-FILE_IDATA, FILE_IDATA, 0, + 0, 0, 0, IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE} + }, + /* alignment before first section */ + {}, + /* .text section */ + { + 0x31, 0xC0, /* xor eax, eax */ + 0xFF, 0x25, EXIT_PROCESS&0xFF, (EXIT_PROCESS>>8)&0xFF, (EXIT_PROCESS>>16)&0xFF, + (EXIT_PROCESS>>24)&0xFF, /* jmp ExitProcess */ + 0 + }, + /* .idata section */ + { + { + {{RVA_IDATA + FIELD_OFFSET(struct Imports, original_thunks)}, 0, 0, + RVA_IDATA + FIELD_OFFSET(struct Imports, dllname), + RVA_IDATA + FIELD_OFFSET(struct Imports, thunks) + }, + {{0}, 0, 0, 0, 0} + }, + {{{RVA_IDATA+FIELD_OFFSET(struct Imports, ibn)}}, {{0}}}, + {{{RVA_IDATA+FIELD_OFFSET(struct Imports, ibn)}}, {{0}}}, + {0,"ExitProcess"}, + "KERNEL32.DLL" + }, + /* final alignment */ + {} +}; +#include + +struct blob +{ + DWORD cb; + BYTE *pb; +}; + +struct expected_blob +{ + DWORD cb; + const void *pb; +}; + +struct update_accum +{ + DWORD cUpdates; + struct blob *updates; +}; + +struct expected_update_accum +{ + DWORD cUpdates; + const struct expected_blob *updates; + BOOL todo; +}; + +static BOOL WINAPI accumulating_stream_output(DIGEST_HANDLE handle, BYTE *pb, + DWORD cb) +{ + struct update_accum *accum = (struct update_accum *)handle; + BOOL ret = FALSE; + + if (accum->cUpdates) + accum->updates = HeapReAlloc(GetProcessHeap(), 0, accum->updates, + (accum->cUpdates + 1) * sizeof(struct blob)); + else + accum->updates = HeapAlloc(GetProcessHeap(), 0, sizeof(struct blob)); + if (accum->updates) + { + struct blob *blob = &accum->updates[accum->cUpdates]; + + blob->pb = HeapAlloc(GetProcessHeap(), 0, cb); + if (blob->pb) + { + memcpy(blob->pb, pb, cb); + blob->cb = cb; + ret = TRUE; + } + accum->cUpdates++; + } + return ret; +} + +static void check_updates(LPCSTR header, const struct expected_update_accum *expected, + const struct update_accum *got) +{ + DWORD i; + + if (expected->todo) + todo_wine ok(expected->cUpdates == got->cUpdates, "%s: expected %d updates, got %d\n", + header, expected->cUpdates, got->cUpdates); + else + ok(expected->cUpdates == got->cUpdates, "%s: expected %d updates, got %d\n", + header, expected->cUpdates, got->cUpdates); + for (i = 0; i < min(expected->cUpdates, got->cUpdates); i++) + { + ok(expected->updates[i].cb == got->updates[i].cb, "%s, update %d: expected %d bytes, got %d\n", + header, i, expected->updates[i].cb, got->updates[i].cb); + if (expected->updates[i].cb && expected->updates[i].cb == got->updates[i].cb) + ok(!memcmp(expected->updates[i].pb, got->updates[i].pb, got->updates[i].cb), + "%s, update %d: unexpected value\n", header, i); + } +} + +/* Frees the updates stored in accum */ +static void free_updates(struct update_accum *accum) +{ + DWORD i; + + for (i = 0; i < accum->cUpdates; i++) + HeapFree(GetProcessHeap(), 0, accum->updates[i].pb); + HeapFree(GetProcessHeap(), 0, accum->updates); + accum->updates = NULL; + accum->cUpdates = 0; +} + +static const struct expected_blob b1[] = { + {FILE_PE_START, &bin}, + /* with zeroed Checksum/SizeOfInitializedData/SizeOfImage fields */ + {sizeof(bin.nt_headers), &bin.nt_headers}, + {sizeof(bin.sections), &bin.sections}, + {FILE_IDATA-FILE_TEXT, &bin.text_section}, + {sizeof(bin.idata_section.descriptors[0].u.OriginalFirstThunk), + &bin.idata_section.descriptors[0].u.OriginalFirstThunk}, + {FIELD_OFFSET(struct Imports, thunks)-FIELD_OFFSET(struct Imports, descriptors[0].Name), + &bin.idata_section.descriptors[0].Name}, + {FILE_TOTAL-FILE_IDATA-FIELD_OFFSET(struct Imports, ibn), + &bin.idata_section.ibn} +}; +static const struct expected_update_accum a1 = { sizeof(b1) / sizeof(b1[0]), b1, TRUE }; + +static const struct expected_blob b2[] = { + {FILE_PE_START, &bin}, + /* with zeroed Checksum/SizeOfInitializedData/SizeOfImage fields */ + {sizeof(bin.nt_headers), &bin.nt_headers}, + {sizeof(bin.sections), &bin.sections}, + {FILE_IDATA-FILE_TEXT, &bin.text_section}, + {FILE_TOTAL-FILE_IDATA, &bin.idata_section} +}; +static const struct expected_update_accum a2 = { sizeof(b2) / sizeof(b2[0]), b2, FALSE }; + +/* Creates a test file and returns a handle to it. The file's path is returned + * in temp_file, which must be at least MAX_PATH characters in length. + */ +static HANDLE create_temp_file(char *temp_file) +{ + HANDLE file = INVALID_HANDLE_VALUE; + char temp_path[MAX_PATH]; + + if (GetTempPathA(sizeof(temp_path), temp_path)) + { + if (GetTempFileNameA(temp_path, "img", 0, temp_file)) + file = CreateFileA(temp_file, GENERIC_READ | GENERIC_WRITE, 0, NULL, + CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + } + return file; +} + +static void update_checksum(void) +{ + WORD const * ptr; + DWORD size; + DWORD sum = 0; + + bin.nt_headers.OptionalHeader.CheckSum = 0; + + for(ptr = (WORD const *)&bin, size = (sizeof(bin)+1)/sizeof(WORD); size > 0; ptr++, size--) + { + sum += *ptr; + if (HIWORD(sum) != 0) + { + sum = LOWORD(sum) + HIWORD(sum); + } + } + sum = (WORD)(LOWORD(sum) + HIWORD(sum)); + sum += sizeof(bin); + + bin.nt_headers.OptionalHeader.CheckSum = sum; +} + +static void test_get_digest_stream(void) +{ + BOOL ret; + HANDLE file; + char temp_file[MAX_PATH]; + DWORD count; + struct update_accum accum = { 0, NULL }; + + SetLastError(0xdeadbeef); + ret = pImageGetDigestStream(NULL, 0, NULL, NULL); + ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, + "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); + file = create_temp_file(temp_file); + if (file == INVALID_HANDLE_VALUE) + { + skip("couldn't create temp file\n"); + return; + } + SetLastError(0xdeadbeef); + ret = pImageGetDigestStream(file, 0, NULL, NULL); + ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, + "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); + SetLastError(0xdeadbeef); + ret = pImageGetDigestStream(NULL, 0, accumulating_stream_output, &accum); + ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, + "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); + /* Even with "valid" parameters, it fails with an empty file */ + SetLastError(0xdeadbeef); + ret = pImageGetDigestStream(file, 0, accumulating_stream_output, &accum); + ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER, + "expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError()); + /* Finally, with a valid executable in the file, it succeeds. Note that + * the file pointer need not be positioned at the beginning. + */ + update_checksum(); + WriteFile(file, &bin, sizeof(bin), &count, NULL); + FlushFileBuffers(file); + + /* zero out some fields ImageGetDigestStream would zero out */ + bin.nt_headers.OptionalHeader.CheckSum = 0; + bin.nt_headers.OptionalHeader.SizeOfInitializedData = 0; + bin.nt_headers.OptionalHeader.SizeOfImage = 0; + + ret = pImageGetDigestStream(file, 0, accumulating_stream_output, &accum); + ok(ret, "ImageGetDigestStream failed: %d\n", GetLastError()); + check_updates("flags = 0", &a1, &accum); + free_updates(&accum); + ret = pImageGetDigestStream(file, CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO, + accumulating_stream_output, &accum); + ok(ret, "ImageGetDigestStream failed: %d\n", GetLastError()); + check_updates("flags = CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO", &a2, &accum); + free_updates(&accum); + CloseHandle(file); + DeleteFileA(temp_file); +} + +START_TEST(image) +{ + hImageHlp = LoadLibraryA("imagehlp.dll"); + + if (!hImageHlp) + { + win_skip("ImageHlp unavailable\n"); + return; + } + + pImageGetDigestStream = (void *) GetProcAddress(hImageHlp, "ImageGetDigestStream"); + + if (!pImageGetDigestStream) + { + win_skip("ImageGetDigestStream function is not available\n"); + } else + { + test_get_digest_stream(); + } + + FreeLibrary(hImageHlp); +} diff --git a/rostests/winetests/imagehlp/imagehlp.rbuild b/rostests/winetests/imagehlp/imagehlp.rbuild new file mode 100644 index 00000000000..fc757e01d58 --- /dev/null +++ b/rostests/winetests/imagehlp/imagehlp.rbuild @@ -0,0 +1,16 @@ + + + + + . + + image.c + integrity.c + testlist.c + wine + user32 + ole32 + oleaut32 + ntdll + + diff --git a/rostests/winetests/imagehlp/integrity.c b/rostests/winetests/imagehlp/integrity.c new file mode 100644 index 00000000000..6f297dc07dd --- /dev/null +++ b/rostests/winetests/imagehlp/integrity.c @@ -0,0 +1,294 @@ +/* + * Test suite for imagehlp integrity functions + * + * Copyright 2009 Owen Rudge for CodeWeavers + * + * 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 + */ + +#define COBJMACROS +#include "wine/test.h" +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "winerror.h" +#include "winnt.h" +#include "imagehlp.h" + +static HMODULE hImageHlp; +static char test_dll_path[MAX_PATH]; + +static BOOL (WINAPI *pImageAddCertificate)(HANDLE, LPWIN_CERTIFICATE, PDWORD); +static BOOL (WINAPI *pImageEnumerateCertificates)(HANDLE, WORD, PDWORD, PDWORD, DWORD); +static BOOL (WINAPI *pImageGetCertificateData)(HANDLE, DWORD, LPWIN_CERTIFICATE, PDWORD); +static BOOL (WINAPI *pImageGetCertificateHeader)(HANDLE, DWORD, LPWIN_CERTIFICATE); +static BOOL (WINAPI *pImageRemoveCertificate)(HANDLE, DWORD); + +static char test_cert_data[] = +{0x30,0x82,0x02,0xE1,0x06,0x09,0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x07,0x02 +,0xA0,0x82,0x02,0xD2,0x30,0x82,0x02,0xCE,0x02,0x01,0x01,0x31,0x00,0x30,0x0B +,0x06,0x09,0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x07,0x01,0xA0,0x82,0x02,0xB4 +,0x30,0x82,0x02,0xB0,0x30,0x82,0x02,0x19,0xA0,0x03,0x02,0x01,0x02,0x02,0x09 +,0x00,0xE2,0x59,0x17,0xA5,0x87,0x0F,0x88,0x89,0x30,0x0D,0x06,0x09,0x2A,0x86 +,0x48,0x86,0xF7,0x0D,0x01,0x01,0x05,0x05,0x00,0x30,0x45,0x31,0x0B,0x30,0x09 +,0x06,0x03,0x55,0x04,0x06,0x13,0x02,0x41,0x55,0x31,0x13,0x30,0x11,0x06,0x03 +,0x55,0x04,0x08,0x13,0x0A,0x53,0x6F,0x6D,0x65,0x2D,0x53,0x74,0x61,0x74,0x65 +,0x31,0x21,0x30,0x1F,0x06,0x03,0x55,0x04,0x0A,0x13,0x18,0x49,0x6E,0x74,0x65 +,0x72,0x6E,0x65,0x74,0x20,0x57,0x69,0x64,0x67,0x69,0x74,0x73,0x20,0x50,0x74 +,0x79,0x20,0x4C,0x74,0x64,0x30,0x1E,0x17,0x0D,0x30,0x39,0x31,0x31,0x32,0x30 +,0x31,0x37,0x33,0x38,0x31,0x32,0x5A,0x17,0x0D,0x31,0x30,0x31,0x31,0x32,0x30 +,0x31,0x37,0x33,0x38,0x31,0x32,0x5A,0x30,0x45,0x31,0x0B,0x30,0x09,0x06,0x03 +,0x55,0x04,0x06,0x13,0x02,0x41,0x55,0x31,0x13,0x30,0x11,0x06,0x03,0x55,0x04 +,0x08,0x13,0x0A,0x53,0x6F,0x6D,0x65,0x2D,0x53,0x74,0x61,0x74,0x65,0x31,0x21 +,0x30,0x1F,0x06,0x03,0x55,0x04,0x0A,0x13,0x18,0x49,0x6E,0x74,0x65,0x72,0x6E +,0x65,0x74,0x20,0x57,0x69,0x64,0x67,0x69,0x74,0x73,0x20,0x50,0x74,0x79,0x20 +,0x4C,0x74,0x64,0x30,0x81,0x9F,0x30,0x0D,0x06,0x09,0x2A,0x86,0x48,0x86,0xF7 +,0x0D,0x01,0x01,0x01,0x05,0x00,0x03,0x81,0x8D,0x00,0x30,0x81,0x89,0x02,0x81 +,0x81,0x00,0x9B,0xC1,0x5E,0x28,0x70,0x32,0x81,0xEF,0x41,0x5C,0xCA,0x29,0x4A +,0xB0,0x12,0xF7,0xAE,0x1E,0x30,0x93,0x14,0x3E,0x54,0x7C,0xC3,0x60,0x8C,0xB2 +,0x2F,0xC4,0x1F,0x20,0xEE,0x76,0xAC,0x83,0xD9,0xD4,0xC0,0x3C,0x78,0x6B,0xAA +,0xA2,0x35,0x08,0x72,0x4A,0x5F,0xAE,0xD6,0x7D,0x5A,0xD8,0x27,0xEC,0xE0,0x24 +,0xBE,0xBE,0x62,0x86,0xF9,0x83,0x66,0x20,0xBC,0xF6,0x4B,0xC8,0x2D,0x1B,0x4C +,0x5C,0xFA,0x0C,0x42,0x9F,0x57,0x49,0xDC,0xB9,0xC7,0x88,0x53,0xFA,0x26,0x21 +,0xC3,0xAB,0x4D,0x93,0x83,0x48,0x88,0xF1,0x14,0xB8,0x64,0x03,0x46,0x58,0x35 +,0xAC,0xD2,0xD2,0x9C,0xD4,0x6F,0xA4,0xE4,0x88,0x83,0x1C,0xD8,0x98,0xEE,0x2C +,0xA3,0xEC,0x0C,0x4B,0xFB,0x1D,0x6E,0xBE,0xD9,0x77,0x02,0x03,0x01,0x00,0x01 +,0xA3,0x81,0xA7,0x30,0x81,0xA4,0x30,0x1D,0x06,0x03,0x55,0x1D,0x0E,0x04,0x16 +,0x04,0x14,0x3F,0xB3,0xC8,0x15,0x12,0xC7,0xD8,0xC0,0x13,0x3D,0xBE,0xF1,0x2F +,0x5A,0xB3,0x51,0x59,0x79,0x89,0xF8,0x30,0x75,0x06,0x03,0x55,0x1D,0x23,0x04 +,0x6E,0x30,0x6C,0x80,0x14,0x3F,0xB3,0xC8,0x15,0x12,0xC7,0xD8,0xC0,0x13,0x3D +,0xBE,0xF1,0x2F,0x5A,0xB3,0x51,0x59,0x79,0x89,0xF8,0xA1,0x49,0xA4,0x47,0x30 +,0x45,0x31,0x0B,0x30,0x09,0x06,0x03,0x55,0x04,0x06,0x13,0x02,0x41,0x55,0x31 +,0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x08,0x13,0x0A,0x53,0x6F,0x6D,0x65,0x2D +,0x53,0x74,0x61,0x74,0x65,0x31,0x21,0x30,0x1F,0x06,0x03,0x55,0x04,0x0A,0x13 +,0x18,0x49,0x6E,0x74,0x65,0x72,0x6E,0x65,0x74,0x20,0x57,0x69,0x64,0x67,0x69 +,0x74,0x73,0x20,0x50,0x74,0x79,0x20,0x4C,0x74,0x64,0x82,0x09,0x00,0xE2,0x59 +,0x17,0xA5,0x87,0x0F,0x88,0x89,0x30,0x0C,0x06,0x03,0x55,0x1D,0x13,0x04,0x05 +,0x30,0x03,0x01,0x01,0xFF,0x30,0x0D,0x06,0x09,0x2A,0x86,0x48,0x86,0xF7,0x0D +,0x01,0x01,0x05,0x05,0x00,0x03,0x81,0x81,0x00,0x52,0x09,0xA5,0x81,0x63,0xEF +,0xF7,0x76,0x65,0x2B,0xA5,0x48,0xC1,0xC5,0xE0,0x73,0x60,0x9B,0x66,0x2E,0x21 +,0xCF,0xF2,0xBD,0xFF,0x81,0xC4,0x99,0x39,0xD0,0x5D,0x1B,0x12,0xFD,0xAE,0x30 +,0x5D,0x9C,0x1A,0xD4,0x76,0x8A,0x25,0x10,0x0A,0x7E,0x5D,0x78,0xB5,0x94,0xD8 +,0x97,0xBD,0x9A,0x5A,0xD6,0x23,0xCA,0x5C,0x46,0x8C,0xC7,0x30,0x45,0xB4,0x77 +,0x44,0x6F,0x16,0xDD,0xC6,0x58,0xFE,0x16,0x15,0xAD,0xB8,0x58,0x49,0x9A,0xFE +,0x6B,0x87,0x78,0xEE,0x13,0xFF,0x29,0x26,0x8E,0x13,0x83,0x0D,0x18,0xCA,0x9F +,0xA9,0x3E,0x6E,0x3C,0xA6,0x50,0x4A,0x04,0x71,0x9F,0x2E,0xCF,0x25,0xA6,0x03 +,0x46,0xCA,0xEB,0xEA,0x67,0x89,0x49,0x7C,0x43,0xA2,0x52,0xD9,0x41,0xCC,0x65 +,0xED,0x2D,0xA1,0x00,0x31,0x00}; + +static char test_cert_data_2[] = {0xDE,0xAD,0xBE,0xEF,0x01,0x02,0x03}; + +static BOOL copy_dll_file(void) +{ + char sys_dir[MAX_PATH+15]; + char temp_path[MAX_PATH]; + + if (GetSystemDirectoryA(sys_dir, MAX_PATH) == 0) + { + skip("Failed to get system directory. Skipping certificate/PE image tests.\n"); + return FALSE; + } + + if (sys_dir[lstrlenA(sys_dir) - 1] != '\\') + lstrcatA(sys_dir, "\\"); + + lstrcatA(sys_dir, "imagehlp.dll"); + + /* Copy DLL to a temp file */ + GetTempPath(MAX_PATH, temp_path); + GetTempFileName(temp_path, "img", 0, test_dll_path); + + if (CopyFile(sys_dir, test_dll_path, FALSE) == 0) + { + skip("Unable to create copy of imagehlp.dll for tests.\n"); + return FALSE; + } + + return TRUE; +} + +static DWORD get_file_size(void) +{ + HANDLE file; + DWORD filesize = 0; + + file = CreateFileA(test_dll_path, GENERIC_READ, FILE_SHARE_READ, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (file == INVALID_HANDLE_VALUE) + return 0; + + filesize = GetFileSize(file, NULL); + CloseHandle(file); + + return filesize; +} + +static void test_add_certificate(char *cert_data, int len) +{ + HANDLE hFile; + LPWIN_CERTIFICATE cert; + DWORD cert_len; + DWORD index; + + hFile = CreateFileA(test_dll_path, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + + if (hFile == INVALID_HANDLE_VALUE) + { + skip("Unable to open %s, skipping test\n", test_dll_path); + return; + } + + cert_len = sizeof(WIN_CERTIFICATE) + len; + cert = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, cert_len); + + if (!cert) + { + skip("Unable to allocate memory, skipping test\n"); + CloseHandle(hFile); + return; + } + + cert->dwLength = cert_len; + cert->wRevision = WIN_CERT_REVISION_1_0; + cert->wCertificateType = WIN_CERT_TYPE_PKCS_SIGNED_DATA; + CopyMemory(cert->bCertificate, cert_data, len); + + ok(pImageAddCertificate(hFile, cert, &index), "Unable to add certificate to image, error %x\n", GetLastError()); + + HeapFree(GetProcessHeap(), 0, cert); + CloseHandle(hFile); +} + +static void test_get_certificate(char *cert_data, int index) +{ + HANDLE hFile; + LPWIN_CERTIFICATE cert; + DWORD cert_len = 0; + DWORD err, ret; + + hFile = CreateFileA(test_dll_path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + + if (hFile == INVALID_HANDLE_VALUE) + { + skip("Unable to open %s, skipping test\n", test_dll_path); + return; + } + + ret = pImageGetCertificateData(hFile, index, NULL, &cert_len); + err = GetLastError(); + + ok ((ret == FALSE) && (err == ERROR_INSUFFICIENT_BUFFER), "ImageGetCertificateData gave unexpected result; ret=%d / err=%x\n", ret, err); + + cert = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, cert_len); + + if (!cert) + { + skip("Unable to allocate memory, skipping test\n"); + CloseHandle(hFile); + return; + } + + ok(ret = pImageGetCertificateData(hFile, index, cert, &cert_len), "Unable to retrieve certificate; err=%x\n", GetLastError()); + ok(memcmp(cert->bCertificate, cert_data, cert_len - sizeof(WIN_CERTIFICATE)) == 0, "Certificate retrieved did not match original\n"); + + HeapFree(GetProcessHeap(), 0, cert); + CloseHandle(hFile); +} + +static void test_remove_certificate(int index) +{ + DWORD orig_count = 0, count = 0; + HANDLE hFile; + + hFile = CreateFileA(test_dll_path, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + + if (hFile == INVALID_HANDLE_VALUE) + { + skip("Unable to open %s, skipping test\n", test_dll_path); + return; + } + + ok (pImageEnumerateCertificates(hFile, CERT_SECTION_TYPE_ANY, &orig_count, NULL, 0), "Unable to enumerate certificates in file; err=%x\n", GetLastError()); + + ok (pImageRemoveCertificate(hFile, index), "Unable to remove certificate from file; err=%x\n", GetLastError()); + + /* Test to see if the certificate has actually been removed */ + pImageEnumerateCertificates(hFile, CERT_SECTION_TYPE_ANY, &count, NULL, 0); + ok (count == orig_count - 1, "Certificate count mismatch; orig=%d new=%d\n", orig_count, count); + + CloseHandle(hFile); +} + +START_TEST(integrity) +{ + DWORD file_size, file_size_orig; + + hImageHlp = LoadLibraryA("imagehlp.dll"); + + if (!hImageHlp) + { + win_skip("ImageHlp unavailable\n"); + return; + } + + if (!copy_dll_file()) + { + FreeLibrary(hImageHlp); + return; + } + + file_size_orig = get_file_size(); + /* + * Align file_size_orig to an 8-byte boundary. This avoids tests failures where + * the original dll is not correctly aligned (but when written to it will be). + */ + if (file_size_orig % 8 != 0) + { + skip("We need to align to an 8-byte boundary\n"); + file_size_orig = (file_size_orig + 7) & ~7; + } + + pImageAddCertificate = (void *) GetProcAddress(hImageHlp, "ImageAddCertificate"); + pImageEnumerateCertificates = (void *) GetProcAddress(hImageHlp, "ImageEnumerateCertificates"); + pImageGetCertificateData = (void *) GetProcAddress(hImageHlp, "ImageGetCertificateData"); + pImageGetCertificateHeader = (void *) GetProcAddress(hImageHlp, "ImageGetCertificateHeader"); + pImageRemoveCertificate = (void *) GetProcAddress(hImageHlp, "ImageRemoveCertificate"); + + test_add_certificate(test_cert_data, sizeof(test_cert_data)); + test_get_certificate(test_cert_data, 0); + test_remove_certificate(0); + + file_size = get_file_size(); + ok(file_size == file_size_orig, "File size different after add and remove (old: %d; new: %d)\n", file_size_orig, file_size); + + /* Try adding multiple certificates */ + test_add_certificate(test_cert_data, sizeof(test_cert_data)); + test_add_certificate(test_cert_data_2, sizeof(test_cert_data_2)); + + test_get_certificate(test_cert_data, 0); + test_get_certificate(test_cert_data_2, 1); + + /* Remove the first one and verify the second certificate is intact */ + test_remove_certificate(0); + test_get_certificate(test_cert_data_2, 0); + + test_remove_certificate(0); + + file_size = get_file_size(); + ok(file_size == file_size_orig, "File size different after add and remove (old: %d; new: %d)\n", file_size_orig, file_size); + + FreeLibrary(hImageHlp); + DeleteFile(test_dll_path); +} diff --git a/rostests/winetests/imagehlp/testlist.c b/rostests/winetests/imagehlp/testlist.c new file mode 100644 index 00000000000..665ea1d5efe --- /dev/null +++ b/rostests/winetests/imagehlp/testlist.c @@ -0,0 +1,17 @@ +/* Automatically generated file; DO NOT EDIT!! */ + +#define WIN32_LEAN_AND_MEAN +#include + +#define STANDALONE +#include "wine/test.h" + +extern void func_image(void); +extern void func_integrity(void); + +const struct test winetest_testlist[] = +{ + { "image", func_image }, + { "integrity", func_integrity }, + { 0, 0 } +}; From 5e0cafbbda7425e3c3f2b7f30b04ea2f63fd73e7 Mon Sep 17 00:00:00 2001 From: Christoph von Wittich Date: Sun, 27 Feb 2011 18:49:27 +0000 Subject: [PATCH 167/287] [imagehlp] -partial winesync svn path=/trunk/; revision=50923 --- reactos/dll/win32/imagehlp/integrity.c | 252 ++++++++++++++++++++++++- 1 file changed, 246 insertions(+), 6 deletions(-) diff --git a/reactos/dll/win32/imagehlp/integrity.c b/reactos/dll/win32/imagehlp/integrity.c index 72bf1552eff..99402788007 100644 --- a/reactos/dll/win32/imagehlp/integrity.c +++ b/reactos/dll/win32/imagehlp/integrity.c @@ -4,6 +4,8 @@ * Copyright 1998 Patrik Stridvall * Copyright 2003 Mike McCormack * Copyright 2009 Owen Rudge for CodeWeavers + * Copyright 2010 Juan Lang + * Copyright 2010 Andrey Turkin * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -461,9 +463,10 @@ BOOL WINAPI ImageAddCertificate( if (Certificate->dwLength % 8) { char null[8]; + DWORD dwBytesWritten; ZeroMemory(null, 8); - WriteFile(FileHandle, null, 8 - (Certificate->dwLength % 8), NULL, NULL); + WriteFile(FileHandle, null, 8 - (Certificate->dwLength % 8), &dwBytesWritten, NULL); size += 8 - (Certificate->dwLength % 8); } @@ -630,18 +633,255 @@ BOOL WINAPI ImageGetCertificateHeader( return TRUE; } +/* Finds the section named section in the array of IMAGE_SECTION_HEADERs hdr. If + * found, returns the offset to the section. Otherwise returns 0. If the section + * is found, optionally returns the size of the section (in size) and the base + * address of the section (in base.) + */ +static DWORD IMAGEHLP_GetSectionOffset( IMAGE_SECTION_HEADER *hdr, + DWORD num_sections, LPCSTR section, PDWORD size, PDWORD base ) +{ + DWORD i, offset = 0; + + for( i = 0; !offset && i < num_sections; i++, hdr++ ) + { + if( !memcmp( hdr->Name, section, strlen(section) ) ) + { + offset = hdr->PointerToRawData; + if( size ) + *size = hdr->SizeOfRawData; + if( base ) + *base = hdr->VirtualAddress; + } + } + return offset; +} + +/* Calls DigestFunction e bytes at offset offset from the file mapped at map. + * Returns the return value of DigestFunction, or FALSE if the data is not available. + */ +static BOOL IMAGEHLP_ReportSectionFromOffset( DWORD offset, DWORD size, + BYTE *map, DWORD fileSize, DIGEST_FUNCTION DigestFunction, DIGEST_HANDLE DigestHandle ) +{ + if( offset + size > fileSize ) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + return DigestFunction( DigestHandle, map + offset, size ); +} + +/* Finds the section named section among the IMAGE_SECTION_HEADERs in + * section_headers and calls DigestFunction for this section. Returns + * the return value from DigestFunction, or FALSE if the data could not be read. + */ +static BOOL IMAGEHLP_ReportSection( IMAGE_SECTION_HEADER *section_headers, + DWORD num_sections, LPCSTR section, BYTE *map, DWORD fileSize, + DIGEST_FUNCTION DigestFunction, DIGEST_HANDLE DigestHandle ) +{ + DWORD offset, size = 0; + + offset = IMAGEHLP_GetSectionOffset( section_headers, num_sections, section, + &size, NULL ); + if( !offset ) + return FALSE; + return IMAGEHLP_ReportSectionFromOffset( offset, size, map, fileSize, + DigestFunction, DigestHandle ); +} + +/* Calls DigestFunction for all sections with the IMAGE_SCN_CNT_CODE flag set. + * Returns the return value from * DigestFunction, or FALSE if a section could not be read. + */ +static BOOL IMAGEHLP_ReportCodeSections( IMAGE_SECTION_HEADER *hdr, DWORD num_sections, + BYTE *map, DWORD fileSize, DIGEST_FUNCTION DigestFunction, DIGEST_HANDLE DigestHandle ) +{ + DWORD i; + BOOL ret = TRUE; + + for( i = 0; ret && i < num_sections; i++, hdr++ ) + { + if( hdr->Characteristics & IMAGE_SCN_CNT_CODE ) + ret = IMAGEHLP_ReportSectionFromOffset( hdr->PointerToRawData, + hdr->SizeOfRawData, map, fileSize, DigestFunction, DigestHandle ); + } + return ret; +} + +/* Reports the import section from the file FileHandle. If + * CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO is set in DigestLevel, reports the entire + * import section. + * FIXME: if it's not set, the function currently fails. + */ +static BOOL IMAGEHLP_ReportImportSection( IMAGE_SECTION_HEADER *hdr, + DWORD num_sections, BYTE *map, DWORD fileSize, DWORD DigestLevel, + DIGEST_FUNCTION DigestFunction, DIGEST_HANDLE DigestHandle ) +{ + BOOL ret = FALSE; + DWORD offset, size, base; + + /* Get import data */ + offset = IMAGEHLP_GetSectionOffset( hdr, num_sections, ".idata", &size, + &base ); + if( !offset ) + return FALSE; + + /* If CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO is set, the entire + * section is reported. Otherwise, the debug info section is + * decoded and reported piecemeal. See tests. However, I haven't been + * able to figure out how the native implementation decides which values + * to report. Either it's buggy or my understanding is flawed. + */ + if( DigestLevel & CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO ) + ret = IMAGEHLP_ReportSectionFromOffset( offset, size, map, fileSize, + DigestFunction, DigestHandle ); + else + { + FIXME("not supported except for CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO\n"); + SetLastError(ERROR_INVALID_PARAMETER); + ret = FALSE; + } + + return ret; +} + /*********************************************************************** * ImageGetDigestStream (IMAGEHLP.@) + * + * Gets a stream of bytes from a PE file overwhich a hash might be computed to + * verify that the image has not changed. Useful for creating a certificate to + * be added to the file with ImageAddCertificate. + * + * PARAMS + * FileHandle [In] File for which to return a stream. + * DigestLevel [In] Flags to control which portions of the file to return. + * 0 is allowed, as is any combination of: + * CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO: reports the entire + * import section rather than selected portions of it. + * CERT_PE_IMAGE_DIGEST_DEBUG_INFO: reports the debug section. + * CERT_PE_IMAGE_DIGEST_RESOURCES: reports the resources + section. + * DigestFunction [In] Callback function. + * DigestHandle [In] Handle passed as first parameter to DigestFunction. + * + * RETURNS + * TRUE if successful. + * FALSE if unsuccessful. GetLastError returns more about the error. + * + * NOTES + * Only supports 32-bit PE files, not tested with any other format. + * Reports data in the following order: + * 1. The file headers are reported first + * 2. Any code sections are reported next. + * 3. The data (".data" and ".rdata") sections are reported next. + * 4. The import section is reported next. + * 5. If CERT_PE_IMAGE_DIGEST_DEBUG_INFO is set in DigestLevel, the debug section is + * reported next. + * 6. If CERT_PE_IMAGE_DIGEST_RESOURCES is set in DigestLevel, the resources section + * is reported next. + * + * BUGS + * CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO must be specified, returns an error if not. */ BOOL WINAPI ImageGetDigestStream( HANDLE FileHandle, DWORD DigestLevel, DIGEST_FUNCTION DigestFunction, DIGEST_HANDLE DigestHandle) { - FIXME("(%p, %d, %p, %p): stub\n", - FileHandle, DigestLevel, DigestFunction, DigestHandle - ); - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return FALSE; + DWORD error = 0; + BOOL ret = FALSE; + DWORD offset, size, num_sections, fileSize; + HANDLE hMap = INVALID_HANDLE_VALUE; + BYTE *map = NULL; + IMAGE_DOS_HEADER *dos_hdr; + IMAGE_NT_HEADERS *nt_hdr; + IMAGE_SECTION_HEADER *section_headers; + + TRACE("(%p, %d, %p, %p)\n", FileHandle, DigestLevel, DigestFunction, + DigestHandle); + + /* Get the file size */ + if( !FileHandle ) + goto invalid_parameter; + fileSize = GetFileSize( FileHandle, NULL ); + if(fileSize == INVALID_FILE_SIZE ) + goto invalid_parameter; + + /* map file */ + hMap = CreateFileMappingW( FileHandle, NULL, PAGE_READONLY, 0, 0, NULL ); + if( hMap == INVALID_HANDLE_VALUE ) + goto invalid_parameter; + map = MapViewOfFile( hMap, FILE_MAP_COPY, 0, 0, 0 ); + if( !map ) + goto invalid_parameter; + + /* Read the file header */ + if( fileSize < sizeof(IMAGE_DOS_HEADER) ) + goto invalid_parameter; + dos_hdr = (IMAGE_DOS_HEADER *)map; + + if( dos_hdr->e_magic != IMAGE_DOS_SIGNATURE ) + goto invalid_parameter; + offset = dos_hdr->e_lfanew; + if( !offset || offset > fileSize ) + goto invalid_parameter; + ret = DigestFunction( DigestHandle, map, offset ); + if( !ret ) + goto end; + + /* Read the NT header */ + if( offset + sizeof(IMAGE_NT_HEADERS) > fileSize ) + goto invalid_parameter; + nt_hdr = (IMAGE_NT_HEADERS *)(map + offset); + if( nt_hdr->Signature != IMAGE_NT_SIGNATURE ) + goto invalid_parameter; + /* It's clear why the checksum is cleared, but why only these size headers? + */ + nt_hdr->OptionalHeader.SizeOfInitializedData = 0; + nt_hdr->OptionalHeader.SizeOfImage = 0; + nt_hdr->OptionalHeader.CheckSum = 0; + size = sizeof(nt_hdr->Signature) + sizeof(nt_hdr->FileHeader) + + nt_hdr->FileHeader.SizeOfOptionalHeader; + ret = DigestFunction( DigestHandle, map + offset, size ); + if( !ret ) + goto end; + + /* Read the section headers */ + offset += size; + num_sections = nt_hdr->FileHeader.NumberOfSections; + size = num_sections * sizeof(IMAGE_SECTION_HEADER); + if( offset + size > fileSize ) + goto invalid_parameter; + ret = DigestFunction( DigestHandle, map + offset, size ); + if( !ret ) + goto end; + + section_headers = (IMAGE_SECTION_HEADER *)(map + offset); + IMAGEHLP_ReportCodeSections( section_headers, num_sections, + map, fileSize, DigestFunction, DigestHandle ); + IMAGEHLP_ReportSection( section_headers, num_sections, ".data", + map, fileSize, DigestFunction, DigestHandle ); + IMAGEHLP_ReportSection( section_headers, num_sections, ".rdata", + map, fileSize, DigestFunction, DigestHandle ); + IMAGEHLP_ReportImportSection( section_headers, num_sections, + map, fileSize, DigestLevel, DigestFunction, DigestHandle ); + if( DigestLevel & CERT_PE_IMAGE_DIGEST_DEBUG_INFO ) + IMAGEHLP_ReportSection( section_headers, num_sections, ".debug", + map, fileSize, DigestFunction, DigestHandle ); + if( DigestLevel & CERT_PE_IMAGE_DIGEST_RESOURCES ) + IMAGEHLP_ReportSection( section_headers, num_sections, ".rsrc", + map, fileSize, DigestFunction, DigestHandle ); + +end: + if( map ) + UnmapViewOfFile( map ); + if( hMap != INVALID_HANDLE_VALUE ) + CloseHandle( hMap ); + if( error ) + SetLastError(error); + return ret; + +invalid_parameter: + error = ERROR_INVALID_PARAMETER; + goto end; } /*********************************************************************** From 69d9838266e5cc009000ccdf8345e539f65b59b4 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 27 Feb 2011 19:03:12 +0000 Subject: [PATCH 168/287] [NTOSKRNL] Fix aborting of backtraces svn path=/trunk/; revision=50924 --- reactos/ntoskrnl/kdbg/kdb_cli.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/reactos/ntoskrnl/kdbg/kdb_cli.c b/reactos/ntoskrnl/kdbg/kdb_cli.c index ba20dc401ff..a0d5135f929 100644 --- a/reactos/ntoskrnl/kdbg/kdb_cli.c +++ b/reactos/ntoskrnl/kdbg/kdb_cli.c @@ -877,6 +877,8 @@ KdbpCmdBackTrace( else KdbpPrint("\n"); + if (KdbOutputAborted) break; + if (Address == 0) break; @@ -2707,6 +2709,7 @@ KdbpCliMainLoop( /* Call the command */ Continue = KdbpDoCommand(Command); + KdbOutputAborted = FALSE; } while (Continue); } From 061ec721f9a49acfcc42e639d4c7f1365eb9058c Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sun, 27 Feb 2011 19:09:45 +0000 Subject: [PATCH 169/287] - Promote service start failures from TRACE to ERR. See issue #5924 for more details. svn path=/trunk/; revision=50925 --- reactos/dll/win32/advapi32/service/scm.c | 4 ++-- reactos/dll/win32/syssetup/install.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/reactos/dll/win32/advapi32/service/scm.c b/reactos/dll/win32/advapi32/service/scm.c index c3a05da4bf9..ccd3e677986 100644 --- a/reactos/dll/win32/advapi32/service/scm.c +++ b/reactos/dll/win32/advapi32/service/scm.c @@ -2372,7 +2372,7 @@ StartServiceA(SC_HANDLE hService, if (dwError != ERROR_SUCCESS) { - TRACE("RStartServiceA() failed (Error %lu)\n", dwError); + ERR("RStartServiceA() failed (Error %lu)\n", dwError); SetLastError(dwError); return FALSE; } @@ -2407,7 +2407,7 @@ StartServiceW(SC_HANDLE hService, if (dwError != ERROR_SUCCESS) { - TRACE("RStartServiceW() failed (Error %lu)\n", dwError); + ERR("RStartServiceW() failed (Error %lu)\n", dwError); SetLastError(dwError); return FALSE; } diff --git a/reactos/dll/win32/syssetup/install.c b/reactos/dll/win32/syssetup/install.c index feb2136abf8..6ec7285ab2d 100644 --- a/reactos/dll/win32/syssetup/install.c +++ b/reactos/dll/win32/syssetup/install.c @@ -508,7 +508,7 @@ EnableUserModePnpManager(VOID) ret = StartServiceW(hService, 0, NULL); if (!ret) { - DPRINT("Unable to start service\n"); + DPRINT1("Unable to start service\n"); goto cleanup; } From a328e318a1c0f3a84c8c2eb008e4fe01ca631f1b Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 27 Feb 2011 19:25:14 +0000 Subject: [PATCH 170/287] [SERVICES] Protect the service start and sending of control packages by critical sections. This way, services will be started one by one and control packages will also be sent one by one. Please test if this fixes bug #5924. svn path=/trunk/; revision=50926 --- reactos/base/system/services/database.c | 32 +++++++++++++++++++++++++ reactos/base/system/services/services.c | 4 ++++ reactos/base/system/services/services.h | 3 +++ 3 files changed, 39 insertions(+) diff --git a/reactos/base/system/services/database.c b/reactos/base/system/services/database.c index 7a9819e4c8b..ed0bdcb61d6 100644 --- a/reactos/base/system/services/database.c +++ b/reactos/base/system/services/database.c @@ -30,6 +30,8 @@ LIST_ENTRY ServiceListHead; static RTL_RESOURCE DatabaseLock; static DWORD dwResumeCount = 1; +static CRITICAL_SECTION NamedPipeCriticalSection; +static CRITICAL_SECTION StartServiceCriticalSection; /* FUNCTIONS *****************************************************************/ @@ -704,6 +706,8 @@ ScmControlService(PSERVICE Service, ControlPacket->hServiceStatus = (SERVICE_STATUS_HANDLE)Service; wcscpy(&ControlPacket->szArguments[0], Service->lpServiceName); + EnterCriticalSection(&NamedPipeCriticalSection); + /* Send the control packet */ WriteFile(Service->ControlPipeHandle, ControlPacket, @@ -718,6 +722,8 @@ ScmControlService(PSERVICE Service, &dwReadCount, NULL); + LeaveCriticalSection(&NamedPipeCriticalSection); + /* Release the contol packet */ HeapFree(GetProcessHeap(), 0, @@ -795,6 +801,8 @@ ScmSendStartCommand(PSERVICE Service, /* Terminate the argument list */ *Ptr = 0; + EnterCriticalSection(&NamedPipeCriticalSection); + /* Send the start command */ WriteFile(Service->ControlPipeHandle, ControlPacket, @@ -809,6 +817,8 @@ ScmSendStartCommand(PSERVICE Service, &dwReadCount, NULL); + LeaveCriticalSection(&NamedPipeCriticalSection); + /* Release the contol packet */ HeapFree(GetProcessHeap(), 0, @@ -912,6 +922,8 @@ ScmStartUserModeService(PSERVICE Service, return Status; } + EnterCriticalSection(&StartServiceCriticalSection); + /* Create '\\.\pipe\net\NtControlPipeXXX' instance */ swprintf(NtControlPipeName, L"\\\\.\\pipe\\net\\NtControlPipe%u", ServiceCurrent); Service->ControlPipeHandle = CreateNamedPipeW(NtControlPipeName, @@ -926,6 +938,7 @@ ScmStartUserModeService(PSERVICE Service, if (Service->ControlPipeHandle == INVALID_HANDLE_VALUE) { DPRINT1("Failed to create control pipe!\n"); + LeaveCriticalSection(&StartServiceCriticalSection); return GetLastError(); } @@ -957,6 +970,7 @@ ScmStartUserModeService(PSERVICE Service, Service->ControlPipeHandle = INVALID_HANDLE_VALUE; DPRINT1("Starting '%S' failed!\n", Service->lpServiceName); + LeaveCriticalSection(&StartServiceCriticalSection); return dwError; } @@ -1016,6 +1030,8 @@ ScmStartUserModeService(PSERVICE Service, CloseHandle(ProcessInformation.hThread); CloseHandle(ProcessInformation.hProcess); + LeaveCriticalSection(&StartServiceCriticalSection); + return dwError; } @@ -1257,4 +1273,20 @@ ScmUnlockDatabase(VOID) RtlReleaseResource(&DatabaseLock); } + +VOID +ScmInitNamedPipeCriticalSection(VOID) +{ + InitializeCriticalSection(&NamedPipeCriticalSection); + InitializeCriticalSection(&StartServiceCriticalSection); +} + + +VOID +ScmDeleteNamedPipeCriticalSection(VOID) +{ + DeleteCriticalSection(&StartServiceCriticalSection); + DeleteCriticalSection(&NamedPipeCriticalSection); +} + /* EOF */ diff --git a/reactos/base/system/services/services.c b/reactos/base/system/services/services.c index 96aecd2a77b..e5a00411259 100644 --- a/reactos/base/system/services/services.c +++ b/reactos/base/system/services/services.c @@ -385,6 +385,8 @@ wWinMain(HINSTANCE hInstance, /* Acquire privileges to load drivers */ AcquireLoadDriverPrivilege(); + ScmInitNamedPipeCriticalSection(); + /* Start auto-start services */ ScmAutoStartServices(); @@ -404,6 +406,8 @@ wWinMain(HINSTANCE hInstance, } #endif + ScmDeleteNamedPipeCriticalSection(); + CloseHandle(hScmStartEvent); DPRINT("SERVICES: Finished.\n"); diff --git a/reactos/base/system/services/services.h b/reactos/base/system/services/services.h index 8371ad18b71..673edbf115d 100644 --- a/reactos/base/system/services/services.h +++ b/reactos/base/system/services/services.h @@ -123,6 +123,9 @@ BOOL ScmLockDatabaseExclusive(VOID); BOOL ScmLockDatabaseShared(VOID); VOID ScmUnlockDatabase(VOID); +VOID ScmInitNamedPipeCriticalSection(VOID); +VOID ScmDeleteNamedPipeCriticalSection(VOID); + /* driver.c */ From ccebf72731283b41c4063c6fcd1055b97948d7e6 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sun, 27 Feb 2011 19:36:46 +0000 Subject: [PATCH 171/287] [RTL/HEAP] - A few comments, and a new structure definition (currently unused). Absolutely no changes to the actual code. svn path=/trunk/; revision=50927 --- reactos/lib/rtl/heap.h | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/reactos/lib/rtl/heap.h b/reactos/lib/rtl/heap.h index 8038ed8642e..f00a8daedea 100644 --- a/reactos/lib/rtl/heap.h +++ b/reactos/lib/rtl/heap.h @@ -182,6 +182,19 @@ typedef struct _HEAP_TUNING_PARAMETERS ULONG MaxPreCommittThreshold; } HEAP_TUNING_PARAMETERS, *PHEAP_TUNING_PARAMETERS; +typedef struct _HEAP_LIST_LOOKUP +{ + struct _HEAP_LIST_LOOKUP *ExtendedLookup; + ULONG ArraySize; + ULONG ExtraItem; + ULONG ItemCount; + ULONG OutOfRangeItems; + ULONG BaseIndex; + PLIST_ENTRY ListHead; + PULONG ListsInUseUlong; + PLIST_ENTRY *ListHints; +} HEAP_LIST_LOOKUP, *PHEAP_LIST_LOOKUP; + typedef struct _HEAP { HEAP_ENTRY Entry; @@ -229,10 +242,11 @@ typedef struct _HEAP struct _HEAP_SEGMENT *Segments[HEAP_SEGMENTS]; //FIXME: non-Vista USHORT AllocatorBackTraceIndex; ULONG NonDedicatedListLength; - PVOID BlocksIndex; + PVOID BlocksIndex; // HEAP_LIST_LOOKUP PVOID UCRIndex; PHEAP_PSEUDO_TAG_ENTRY PseudoTagEntries; LIST_ENTRY FreeLists[HEAP_FREELISTS]; //FIXME: non-Vista + //LIST_ENTRY FreeLists; union { ULONG FreeListsInUseUlong[HEAP_FREELISTS / (sizeof(ULONG) * 8)]; //FIXME: non-Vista From 5de8339cd196e2bc01ac631e677010a939b2d083 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Sun, 27 Feb 2011 21:45:43 +0000 Subject: [PATCH 172/287] [WIN32K] - remove duplicate prototype - use RGB macro where possible - we create BGR palette for RGB DIB sections, let's do the other way around - simplify overcomplicated IntGetDIBColorTable - Add a first implementation of IntRealizePalette No, it's not the VLC icons bugfix svn path=/trunk/; revision=50928 --- .../subsystems/win32/win32k/include/intgdi.h | 2 - .../subsystems/win32/win32k/objects/bitblt.c | 8 +-- .../subsystems/win32/win32k/objects/bitmaps.c | 2 +- .../subsystems/win32/win32k/objects/dibobj.c | 30 +++----- .../subsystems/win32/win32k/objects/palette.c | 71 +++++++------------ 5 files changed, 40 insertions(+), 73 deletions(-) diff --git a/reactos/subsystems/win32/win32k/include/intgdi.h b/reactos/subsystems/win32/win32k/include/intgdi.h index fcbb7a08e10..5e7ca97d68f 100644 --- a/reactos/subsystems/win32/win32k/include/intgdi.h +++ b/reactos/subsystems/win32/win32k/include/intgdi.h @@ -232,8 +232,6 @@ IntGetSystemPaletteEntries(HDC hDC, UINT StartIndex, UINT Entries, LPPALETTEENTRY pe); -UINT APIENTRY -IntGetDIBColorTable(HDC hDC, UINT StartIndex, UINT Entries, RGBQUAD *Colors); UINT APIENTRY IntSetDIBColorTable(HDC hDC, UINT StartIndex, UINT Entries, CONST RGBQUAD *Colors); diff --git a/reactos/subsystems/win32/win32k/objects/bitblt.c b/reactos/subsystems/win32/win32k/objects/bitblt.c index f4843c2c0b2..0f7753728ba 100644 --- a/reactos/subsystems/win32/win32k/objects/bitblt.c +++ b/reactos/subsystems/win32/win32k/objects/bitblt.c @@ -562,8 +562,8 @@ NtGdiMaskBlt( NtGdiBitBlt(hdcBack, 0, 0, nWidth, nHeight, hdcDest, nXDest, nYDest, BKGND_ROP3(dwRop), 0, 0); /* 2.4 Erase the foreground pixels */ - IntGdiSetBkColor(hdcBack, 0xffffffff); - IntGdiSetTextColor(hdcBack, 0); + IntGdiSetBkColor(hdcBack, RGB(0xFF, 0xFF, 0xFF)); + IntGdiSetTextColor(hdcBack, RGB(0, 0, 0)); NtGdiBitBlt(hdcBack, 0, 0, nWidth, nHeight, hdcMask, xMask, yMask, SRCAND, 0, 0); /* 3. Create masked Foreground bitmap */ @@ -583,8 +583,8 @@ NtGdiMaskBlt( NtGdiBitBlt(hdcFore, 0, 0, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, FRGND_ROP3(dwRop), 0,0); /* 2.4 Erase the background pixels */ - IntGdiSetBkColor(hdcFore, 0); - IntGdiSetTextColor(hdcFore, 0xffffffff); + IntGdiSetBkColor(hdcFore, RGB(0, 0, 0)); + IntGdiSetTextColor(hdcFore, RGB(0xFF, 0xFF, 0xFF)); NtGdiBitBlt(hdcFore, 0, 0, nWidth, nHeight, hdcMask, xMask, yMask, SRCAND, 0, 0); /* 3. Combine the fore and background into the background bitmap */ diff --git a/reactos/subsystems/win32/win32k/objects/bitmaps.c b/reactos/subsystems/win32/win32k/objects/bitmaps.c index 75e1b1c2be6..eb4d37653f9 100644 --- a/reactos/subsystems/win32/win32k/objects/bitmaps.c +++ b/reactos/subsystems/win32/win32k/objects/bitmaps.c @@ -941,7 +941,7 @@ BITMAP_GetObject(SURFACE *psurf, INT Count, LPVOID buffer) break; case BMF_32BPP: - if (psurf->ppal->flFlags & PAL_RGB) + if (psurf->ppal->flFlags & (PAL_RGB|PAL_BGR)) pds->dsBmih.biCompression = BI_RGB; else pds->dsBmih.biCompression = BI_BITFIELDS; diff --git a/reactos/subsystems/win32/win32k/objects/dibobj.c b/reactos/subsystems/win32/win32k/objects/dibobj.c index a0e29d92b19..963f152acbd 100644 --- a/reactos/subsystems/win32/win32k/objects/dibobj.c +++ b/reactos/subsystems/win32/win32k/objects/dibobj.c @@ -193,9 +193,8 @@ IntGetDIBColorTable( { PDC dc; PSURFACE psurf; - PPALETTE PalGDI; + PPALETTE ppal; UINT Index, Count = 0; - ULONG biBitCount; if (!(dc = DC_LockDc(hDC))) return 0; if (dc->dctype == DC_TYPE_INFO) @@ -219,33 +218,22 @@ IntGetDIBColorTable( return 0; } - biBitCount = BitsPerFormat(psurf->SurfObj.iBitmapFormat); - if (biBitCount <= 8 && - StartIndex < (1 << biBitCount)) + ppal = psurf->ppal; + ASSERT(ppal); + + if (ppal->flFlags & PAL_INDEXED) { - if (StartIndex + Entries > (1 << biBitCount)) - Entries = (1 << biBitCount) - StartIndex; - - if (psurf->ppal == NULL) - { - DC_UnlockDc(dc); - EngSetLastError(ERROR_INVALID_HANDLE); - return 0; - } - - PalGDI = PALETTE_LockPalette(psurf->ppal->BaseObject.hHmgr); for (Index = StartIndex; - Index < StartIndex + Entries && Index < PalGDI->NumColors; + Index < StartIndex + Entries && Index < ppal->NumColors; Index++) { - Colors[Index - StartIndex].rgbRed = PalGDI->IndexedColors[Index].peRed; - Colors[Index - StartIndex].rgbGreen = PalGDI->IndexedColors[Index].peGreen; - Colors[Index - StartIndex].rgbBlue = PalGDI->IndexedColors[Index].peBlue; + Colors[Index - StartIndex].rgbRed = ppal->IndexedColors[Index].peRed; + Colors[Index - StartIndex].rgbGreen = ppal->IndexedColors[Index].peGreen; + Colors[Index - StartIndex].rgbBlue = ppal->IndexedColors[Index].peBlue; Colors[Index - StartIndex].rgbReserved = 0; Count++; } - PALETTE_UnlockPalette(PalGDI); } DC_UnlockDc(dc); diff --git a/reactos/subsystems/win32/win32k/objects/palette.c b/reactos/subsystems/win32/win32k/objects/palette.c index 38a4532f417..c7656e03d1c 100644 --- a/reactos/subsystems/win32/win32k/objects/palette.c +++ b/reactos/subsystems/win32/win32k/objects/palette.c @@ -725,58 +725,39 @@ UINT FASTCALL IntGdiRealizePalette(HDC hDC) { - /* - * This function doesn't do any real work now and there's plenty - * of bugs in it. - */ + UINT i, realize = 0; + PDC pdc; + PALETTE *ppalSurf, *ppalDC; - PPALETTE palGDI, sysGDI; - int realized = 0; - PDC dc; - HPALETTE systemPalette; + pdc = DC_LockDc(hDC); + if(!pdc) + { + EngSetLastError(ERROR_INVALID_HANDLE); + return 0; + } - dc = DC_LockDc(hDC); - if (!dc) return 0; + ppalSurf = pdc->dclevel.pSurface->ppal; + ppalDC = pdc->dclevel.ppal; - systemPalette = NtGdiGetStockObject(DEFAULT_PALETTE); - palGDI = PALETTE_LockPalette(dc->dclevel.hpal); + if(!(ppalSurf->flFlags & PAL_INDEXED)) + { + // FIXME : set error? + goto cleanup; + } - if (palGDI == NULL) - { - DPRINT1("IntGdiRealizePalette(): palGDI is NULL, exiting\n"); - DC_UnlockDc(dc); - return 0; - } + ASSERT(ppalDC->flFlags & PAL_INDEXED); - sysGDI = PALETTE_LockPalette(systemPalette); + // FIXME : should we resize ppalSurf if it's too small? + realize = (ppalDC->NumColors < ppalSurf->NumColors) ? ppalDC->NumColors : ppalSurf->NumColors; - if (sysGDI == NULL) - { - DPRINT1("IntGdiRealizePalette(): sysGDI is NULL, exiting\n"); - PALETTE_UnlockPalette(palGDI); - DC_UnlockDc(dc); - return 0; - } + for(i=0; iIndexedColors[i], *(LONG*)&ppalDC->IndexedColors[i]); + } - // The RealizePalette function modifies the palette for the device associated with the specified device context. If the - // device context is a memory DC, the color table for the bitmap selected into the DC is modified. If the device - // context is a display DC, the physical palette for that device is modified. - if(dc->dctype == DC_TYPE_MEMORY) - { - // Memory managed DC - DPRINT1("RealizePalette unimplemented for memory managed DCs\n"); - } else - { - DPRINT1("RealizePalette unimplemented for device DCs\n"); - } - - // need to pass this to IntEngCreateXlate with palettes unlocked - PALETTE_UnlockPalette(sysGDI); - PALETTE_UnlockPalette(palGDI); - - DC_UnlockDc(dc); - - return realized; +cleanup: + DC_UnlockDc(pdc); + return realize; } UINT APIENTRY From 27b33c3045beaeda3cd8ebfb18bd4660b4ab733f Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 27 Feb 2011 22:00:13 +0000 Subject: [PATCH 173/287] [GDI32_APITEST] More testcases for SelectObject and GetDIBits svn path=/trunk/; revision=50929 --- rostests/apitests/gdi32/GetDIBits.c | 172 +++++++++++++------ rostests/apitests/gdi32/SelectObject.c | 218 +++++++++++++++---------- 2 files changed, 253 insertions(+), 137 deletions(-) diff --git a/rostests/apitests/gdi32/GetDIBits.c b/rostests/apitests/gdi32/GetDIBits.c index 3f9f35da04c..887581ddbcb 100644 --- a/rostests/apitests/gdi32/GetDIBits.c +++ b/rostests/apitests/gdi32/GetDIBits.c @@ -9,93 +9,161 @@ #include #include -#define TEST(x) ok(x, #x"\n") -#define RTEST(x) ok(x, #x"\n") +#define ok_err(dwErr) ok(GetLastError() == dwErr, "LastError is wrong, expected %d, got %ld\n", dwErr, GetLastError()) void Test_GetDIBits() { - HDC hDCScreen; - HBITMAP hBitmap; - BITMAPINFO bi; - INT ScreenBpp; + HDC hdcScreen, hdcMem; + HBITMAP hbmp; + PBITMAPINFO pbi; + INT ret, ScreenBpp; + DWORD ajBits[10] = {0xff, 0x00, 0xcc, 0xf0, 0x0f}; - hDCScreen = GetDC(NULL); - ok(hDCScreen != 0, "GetDC failed, skipping tests\n"); - if (hDCScreen == NULL) return; + pbi = malloc(sizeof(BITMAPV5HEADER) + 256 * sizeof(DWORD)); - hBitmap = CreateCompatibleBitmap(hDCScreen, 16, 16); - RTEST(hBitmap != NULL); + hdcScreen = GetDC(NULL); + ok(hdcScreen != 0, "GetDC failed, skipping tests\n"); + if (hdcScreen == NULL) return; + + hdcMem = CreateCompatibleDC(0); + ok(hdcMem != 0, "CreateCompatibleDC failed, skipping tests\n"); + if (hdcMem == NULL) return; + + hbmp = CreateCompatibleBitmap(hdcScreen, 16, 16); + ok(hbmp != NULL, "CreateCompatibleBitmap failed\n"); /* misc */ SetLastError(ERROR_SUCCESS); - RTEST(GetDIBits(0, 0, 0, 0, NULL, NULL, 0) == 0); - RTEST(GetLastError() == ERROR_INVALID_PARAMETER); + ok(GetDIBits(0, 0, 0, 0, NULL, NULL, 0) == 0, "\n"); + ok_err(ERROR_INVALID_PARAMETER); SetLastError(ERROR_SUCCESS); - RTEST(GetDIBits((HDC)2345, 0, 0, 0, NULL, NULL, 0) == 0); - RTEST(GetLastError() == ERROR_INVALID_PARAMETER); + ok(GetDIBits((HDC)2345, 0, 0, 0, NULL, NULL, 0) == 0, "\n"); + ok_err(ERROR_INVALID_PARAMETER); SetLastError(ERROR_SUCCESS); - RTEST(GetDIBits((HDC)2345, hBitmap, 0, 0, NULL, NULL, 0) == 0); - RTEST(GetLastError() == ERROR_INVALID_PARAMETER); + ok(GetDIBits((HDC)2345, hbmp, 0, 0, NULL, NULL, 0) == 0, "\n"); + ok_err(ERROR_INVALID_PARAMETER); SetLastError(ERROR_SUCCESS); - RTEST(GetDIBits((HDC)2345, hBitmap, 0, 15, NULL, &bi, 0) == 0); - RTEST(GetLastError() == ERROR_INVALID_PARAMETER); + ok(GetDIBits((HDC)2345, hbmp, 0, 15, NULL, pbi, 0) == 0, "\n"); + ok_err(ERROR_INVALID_PARAMETER); /* null hdc */ SetLastError(ERROR_SUCCESS); - ZeroMemory(&bi, sizeof(BITMAPINFO)); - bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - RTEST(GetDIBits(NULL, hBitmap, 0, 15, NULL, &bi, DIB_RGB_COLORS) == 0); - RTEST(GetLastError() == ERROR_INVALID_PARAMETER); + ZeroMemory(pbi, sizeof(BITMAPINFO)); + pbi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + ok(GetDIBits(NULL, hbmp, 0, 15, NULL, pbi, DIB_RGB_COLORS) == 0, "\n"); + ok_err(ERROR_INVALID_PARAMETER); /* null bitmap */ SetLastError(ERROR_SUCCESS); - ZeroMemory(&bi, sizeof(BITMAPINFO)); - bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - RTEST(GetDIBits(hDCScreen, NULL, 0, 15, NULL, &bi, DIB_RGB_COLORS) == 0); - RTEST(GetLastError() == ERROR_SUCCESS); + ZeroMemory(pbi, sizeof(BITMAPINFO)); + pbi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + ok(GetDIBits(hdcScreen, NULL, 0, 15, NULL, pbi, DIB_RGB_COLORS) == 0, "\n"); + ok_err(ERROR_SUCCESS); /* 0 scan lines */ SetLastError(ERROR_SUCCESS); - ZeroMemory(&bi, sizeof(BITMAPINFO)); - bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - RTEST(GetDIBits(hDCScreen, hBitmap, 0, 0, NULL, &bi, DIB_RGB_COLORS) > 0); - RTEST(GetLastError() == ERROR_SUCCESS); + ZeroMemory(pbi, sizeof(BITMAPINFO)); + pbi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + ok(GetDIBits(hdcScreen, hbmp, 0, 0, NULL, pbi, DIB_RGB_COLORS) > 0, "\n"); + ok_err(ERROR_SUCCESS); /* null bitmap info - crashes XP*/ //SetLastError(ERROR_SUCCESS); - //RTEST(GetDIBits(hDCScreen, NULL, 0, 15, NULL, NULL, DIB_RGB_COLORS) == 0); - //RTEST(GetLastError() == ERROR_INVALID_PARAMETER); + //ok(GetDIBits(hdcScreen, NULL, 0, 15, NULL, NULL, DIB_RGB_COLORS) == 0); + //ok(GetLastError() == ERROR_INVALID_PARAMETER); /* bad bmi colours (uUsage) */ SetLastError(ERROR_SUCCESS); - ZeroMemory(&bi, sizeof(BITMAPINFO)); - bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - RTEST(GetDIBits(hDCScreen, hBitmap, 0, 15, NULL, &bi, 100) == 0); - RTEST(GetLastError() == ERROR_SUCCESS); - RTEST(bi.bmiHeader.biWidth == 0); - RTEST(bi.bmiHeader.biHeight == 0); - RTEST(bi.bmiHeader.biBitCount == 0); - RTEST(bi.bmiHeader.biSizeImage == 0); + ZeroMemory(pbi, sizeof(BITMAPINFO)); + pbi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + ok(GetDIBits(hdcScreen, hbmp, 0, 15, NULL, pbi, 100) == 0, "\n"); + ok_err(ERROR_SUCCESS); + ok(pbi->bmiHeader.biWidth == 0, "\n"); + ok(pbi->bmiHeader.biHeight == 0, "\n"); + ok(pbi->bmiHeader.biBitCount == 0, "\n"); + ok(pbi->bmiHeader.biSizeImage == 0, "\n"); /* basic call */ SetLastError(ERROR_SUCCESS); - ZeroMemory(&bi, sizeof(BITMAPINFO)); - bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - RTEST(GetDIBits(hDCScreen, hBitmap, 0, 15, NULL, &bi, DIB_RGB_COLORS) > 0); - RTEST(GetLastError() == ERROR_SUCCESS); - ScreenBpp = GetDeviceCaps(hDCScreen, BITSPIXEL); - RTEST(bi.bmiHeader.biWidth == 16); - RTEST(bi.bmiHeader.biHeight == 16); - RTEST(bi.bmiHeader.biBitCount == ScreenBpp); - RTEST(bi.bmiHeader.biSizeImage == (16 * 16) * (ScreenBpp / 8)); + ZeroMemory(pbi, sizeof(BITMAPINFO)); + pbi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + ok(GetDIBits(hdcScreen, hbmp, 0, 15, NULL, pbi, DIB_RGB_COLORS) > 0, "\n"); + ok_err(ERROR_SUCCESS); + ScreenBpp = GetDeviceCaps(hdcScreen, BITSPIXEL); + ok(pbi->bmiHeader.biWidth == 16, "\n"); + ok(pbi->bmiHeader.biHeight == 16, "\n"); + ok(pbi->bmiHeader.biBitCount == ScreenBpp, "\n"); + ok(pbi->bmiHeader.biSizeImage == (16 * 16) * (ScreenBpp / 8), "\n"); - DeleteObject(hBitmap); - ReleaseDC(NULL, hDCScreen); + /* Test if COREHEADER is supported */ + pbi->bmiHeader.biSize = sizeof(BITMAPCOREHEADER); + ok(GetDIBits(hdcScreen, hbmp, 0, 15, NULL, pbi, DIB_RGB_COLORS) > 0, "\n"); + ok(pbi->bmiHeader.biSize == sizeof(BITMAPCOREHEADER), "\n"); + + /* Test different header sizes */ + pbi->bmiHeader.biSize = sizeof(BITMAPCOREHEADER) + 4; + ok(GetDIBits(hdcScreen, hbmp, 0, 15, NULL, pbi, DIB_RGB_COLORS) == 0, "should fail.\n"); + pbi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER) + 4; + ok(GetDIBits(hdcScreen, hbmp, 0, 15, NULL, pbi, DIB_RGB_COLORS) == 0, "should fail.\n"); + pbi->bmiHeader.biSize = sizeof(BITMAPV5HEADER); + ok(GetDIBits(hdcScreen, hbmp, 0, 15, NULL, pbi, DIB_RGB_COLORS) > 0, "should not fail.\n"); + pbi->bmiHeader.biSize = sizeof(BITMAPV5HEADER) + 4; + ok(GetDIBits(hdcScreen, hbmp, 0, 15, NULL, pbi, DIB_RGB_COLORS) > 0, "should not fail.\n"); + + + DeleteObject(hbmp); + + /* Test a mono bitmap */ + hbmp = CreateBitmap(13, 7, 1, 1, ajBits); + ok(hbmp != 0, "failed to create bitmap\n"); + ZeroMemory(pbi, sizeof(BITMAPINFO)); + pbi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + ret = GetDIBits(hdcScreen, hbmp, 0, 0, NULL, pbi, DIB_RGB_COLORS); + ok(ret == 1, "%d\n", ret); + ok(pbi->bmiHeader.biWidth == 13, "pbi->bmiHeader.biWidth = %ld\n", pbi->bmiHeader.biWidth); + ok(pbi->bmiHeader.biHeight == 7, "pbi->bmiHeader.biHeight = %ld\n", pbi->bmiHeader.biHeight); + ok(pbi->bmiHeader.biBitCount == 1, "pbi->bmiHeader.biBitCount = %d\n", pbi->bmiHeader.biBitCount); + ok(pbi->bmiHeader.biSizeImage == 28, "pbi->bmiHeader.biSizeImage = %ld\n", pbi->bmiHeader.biSizeImage); + + /* Test a mono bitmap with values set */ + ZeroMemory(pbi, sizeof(BITMAPINFO)); + pbi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + pbi->bmiHeader.biWidth = 12; + pbi->bmiHeader.biHeight = 9; + pbi->bmiHeader.biPlanes = 1; + pbi->bmiHeader.biBitCount = 32; + pbi->bmiHeader.biCompression = BI_RGB; + pbi->bmiHeader.biSizeImage = 123; + ret = GetDIBits(hdcScreen, hbmp, 0, 5, NULL, pbi, DIB_RGB_COLORS); + ok(ret == 1, "%d\n", ret); + ok(pbi->bmiHeader.biWidth == 12, "pbi->bmiHeader.biWidth = %ld\n", pbi->bmiHeader.biWidth); + ok(pbi->bmiHeader.biHeight == 9, "pbi->bmiHeader.biHeight = %ld\n", pbi->bmiHeader.biHeight); + ok(pbi->bmiHeader.biBitCount == 32, "pbi->bmiHeader.biBitCount = %d\n", pbi->bmiHeader.biBitCount); + ok(pbi->bmiHeader.biSizeImage == 432, "pbi->bmiHeader.biSizeImage = %ld\n", pbi->bmiHeader.biSizeImage); + + /* Set individual values */ + ZeroMemory(pbi, sizeof(BITMAPINFO)); + pbi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + pbi->bmiHeader.biWidth = 12; + ret = GetDIBits(hdcScreen, hbmp, 0, 5, NULL, pbi, DIB_RGB_COLORS); + ok(ret == 1, "%d\n", ret); + pbi->bmiHeader.biWidth = 0; + pbi->bmiHeader.biSizeImage = 123; + ret = GetDIBits(hdcScreen, hbmp, 0, 5, NULL, pbi, DIB_RGB_COLORS); + ok(ret == 0, "%d\n", ret); + pbi->bmiHeader.biSizeImage = 0; + pbi->bmiHeader.biCompression = BI_RGB; + ret = GetDIBits(hdcScreen, hbmp, 0, 5, NULL, pbi, DIB_RGB_COLORS); + ok(ret == 0, "%d\n", ret); + + DeleteObject(hbmp); + DeleteDC(hdcMem); + ReleaseDC(NULL, hdcScreen); } START_TEST(GetDIBits) diff --git a/rostests/apitests/gdi32/SelectObject.c b/rostests/apitests/gdi32/SelectObject.c index 54bbdc73a82..582176c7723 100644 --- a/rostests/apitests/gdi32/SelectObject.c +++ b/rostests/apitests/gdi32/SelectObject.c @@ -15,24 +15,20 @@ #define TEST(x) ok(x, #x"\n") #define RTEST(x) ok(x, #x"\n") -void Test_SelectObject() +#define ok_err(dwErr) ok(GetLastError() == dwErr, "Wrong LastError, expected %d, got %ld\n", dwErr, GetLastError()) + +HDC hdc1, hdc2; + +static void +Test_SelectObject() { HGDIOBJ hOldObj, hNewObj; - HDC hScreenDC, hDC, hDC2; // PGDI_TABLE_ENTRY pEntry; // PDC_ATTR pDc_Attr; // HANDLE hcmXform; - BYTE bmBits[4] = {0}; - - hScreenDC = GetDC(NULL); - ok(hScreenDC != NULL, "GetDC failed. Skipping tests.\n"); - if (hScreenDC == NULL) return; - hDC = CreateCompatibleDC(hScreenDC); - ok(hDC != NULL, "CreateCompatibleDC failed. Skipping tests.\n"); - if (hDC == NULL) return; /* Get the Dc_Attr for later testing */ -// pEntry = &GdiHandleTable[GDI_HANDLE_GET_INDEX(hDC)]; +// pEntry = &GdiHandleTable[GDI_HANDLE_GET_INDEX(hdc1)]; // pDc_Attr = pEntry->UserData; // ok(pDc_Attr != NULL, "Skipping tests.\n"); // if (pDc_Attr == NULL) return; @@ -40,27 +36,27 @@ void Test_SelectObject() /* Test incomplete dc handle doesn't work */ SetLastError(ERROR_SUCCESS); hNewObj = GetStockObject(GRAY_BRUSH); - hOldObj = SelectObject((HDC)GDI_HANDLE_GET_INDEX(hDC), hNewObj); - RTEST(GetLastError() == ERROR_INVALID_HANDLE); - RTEST(hOldObj == NULL); -// RTEST(pDc_Attr->hbrush == GetStockObject(WHITE_BRUSH)); - SelectObject(hDC, hOldObj); + hOldObj = SelectObject((HDC)GDI_HANDLE_GET_INDEX(hdc1), hNewObj); + ok_err(ERROR_INVALID_HANDLE); + ok(hOldObj == NULL, "\n"); +// ok(pDc_Attr->hbrush == GetStockObject(WHITE_BRUSH), "\n"); + SelectObject(hdc1, hOldObj); /* Test incomplete hobj handle works */ hNewObj = GetStockObject(GRAY_BRUSH); - hOldObj = SelectObject(hDC, (HGDIOBJ)GDI_HANDLE_GET_INDEX(hNewObj)); - RTEST(hOldObj == GetStockObject(WHITE_BRUSH)); -// RTEST(pDc_Attr->hbrush == hNewObj); - SelectObject(hDC, hOldObj); + hOldObj = SelectObject(hdc1, (HGDIOBJ)GDI_HANDLE_GET_INDEX(hNewObj)); + ok(hOldObj == GetStockObject(WHITE_BRUSH), "\n"); +// ok(pDc_Attr->hbrush == hNewObj, "\n"); + SelectObject(hdc1, hOldObj); /* Test wrong hDC handle type */ SetLastError(ERROR_SUCCESS); hNewObj = GetStockObject(GRAY_BRUSH); - hDC2 = (HDC)((UINT_PTR)hDC & ~GDI_HANDLE_TYPE_MASK); - hDC2 = (HDC)((UINT_PTR)hDC2 | GDI_OBJECT_TYPE_PEN); - hOldObj = SelectObject(hDC2, hNewObj); - RTEST(GetLastError() == ERROR_INVALID_HANDLE); - RTEST(hOldObj == NULL); + hdc2 = (HDC)((UINT_PTR)hdc1 & ~GDI_HANDLE_TYPE_MASK); + hdc2 = (HDC)((UINT_PTR)hdc2 | GDI_OBJECT_TYPE_PEN); + hOldObj = SelectObject(hdc2, hNewObj); + ok_err(ERROR_INVALID_HANDLE); + ok(hOldObj == NULL, "\n"); // RTEST(pDc_Attr->hbrush == GetStockObject(WHITE_BRUSH)); /* Test wrong hobj handle type */ @@ -68,57 +64,24 @@ void Test_SelectObject() hNewObj = GetStockObject(GRAY_BRUSH); hNewObj = (HGDIOBJ)((UINT_PTR)hNewObj & ~GDI_HANDLE_TYPE_MASK); hNewObj = (HGDIOBJ)((UINT_PTR)hNewObj | GDI_OBJECT_TYPE_PEN); - hOldObj = SelectObject(hDC, hNewObj); - RTEST(GetLastError() == ERROR_SUCCESS); - RTEST(hOldObj == NULL); + hOldObj = SelectObject(hdc1, hNewObj); + ok_err(ERROR_SUCCESS); + ok(hOldObj == NULL, "\n"); // RTEST(pDc_Attr->hbrush == GetStockObject(WHITE_BRUSH)); SetLastError(ERROR_SUCCESS); hNewObj = (HGDIOBJ)0x00761234; - hOldObj = SelectObject(hDC, hNewObj); - RTEST(hOldObj == NULL); - RTEST(GetLastError() == ERROR_SUCCESS); - SelectObject(hDC, hOldObj); + hOldObj = SelectObject(hdc1, hNewObj); + ok(hOldObj == NULL, "\n"); + ok_err(ERROR_SUCCESS); + SelectObject(hdc1, hOldObj); /* Test DC */ SetLastError(ERROR_SUCCESS); - hOldObj = SelectObject(hDC, hScreenDC); - RTEST(hOldObj == NULL); - TEST(GetLastError() == ERROR_SUCCESS); + hOldObj = SelectObject(hdc1, GetDC(NULL)); + ok(hOldObj == NULL, "\n"); + ok_err(ERROR_SUCCESS); - /* Test REGION */ - SetLastError(ERROR_SUCCESS); - hNewObj = CreateRectRgn(0,0,0,0); - hOldObj = SelectObject(hDC, hNewObj); - RTEST((UINT_PTR)hOldObj == NULLREGION); - DeleteObject(hNewObj); - - hNewObj = CreateRectRgn(0,0,10,10); - RTEST((UINT_PTR)SelectObject(hDC, hNewObj) == SIMPLEREGION); - hOldObj = CreateRectRgn(5,5,20,20); - RTEST(CombineRgn(hNewObj, hNewObj, hOldObj, RGN_OR) == COMPLEXREGION); - DeleteObject(hOldObj); - RTEST((UINT_PTR)SelectObject(hDC, hNewObj) == SIMPLEREGION); // ??? Why this? - DeleteObject(hNewObj); -// TEST(IsHandleValid(hNewObj) == TRUE); - - RTEST(GetLastError() == ERROR_SUCCESS); - - /* Test BITMAP */ - hNewObj = CreateBitmap(2, 2, 1, 1, &bmBits); - ok(hNewObj != NULL, "CreateBitmap failed. Skipping tests.\n"); - if (hNewObj == NULL) return; - hOldObj = SelectObject(hDC, hNewObj); - RTEST(GDI_HANDLE_GET_TYPE(hOldObj) == GDI_OBJECT_TYPE_BITMAP); - hOldObj = SelectObject(hDC, hOldObj); - RTEST(hOldObj == hNewObj); - - /* Test invalid BITMAP */ - hNewObj = CreateBitmap(2, 2, 1, 4, &bmBits); - ok(hNewObj != NULL, "CreateBitmap failed. Skipping tests.\n"); - if (hNewObj == NULL) return; - hOldObj = SelectObject(hDC, hNewObj); - ok(hOldObj == NULL, "should fail\n"); /* Test CLIOBJ */ @@ -127,9 +90,9 @@ void Test_SelectObject() /* Test PALETTE */ SetLastError(ERROR_SUCCESS); hNewObj = GetStockObject(DEFAULT_PALETTE); - hOldObj = SelectObject(hDC, hNewObj); + hOldObj = SelectObject(hdc1, hNewObj); RTEST(hOldObj == NULL); - RTEST(GetLastError() == ERROR_INVALID_FUNCTION); + ok_err(ERROR_INVALID_FUNCTION); /* Test COLORSPACE */ @@ -139,17 +102,17 @@ void Test_SelectObject() /* Test BRUSH */ hNewObj = GetStockObject(GRAY_BRUSH); - hOldObj = SelectObject(hDC, hNewObj); + hOldObj = SelectObject(hdc1, hNewObj); RTEST(hOldObj == GetStockObject(WHITE_BRUSH)); // RTEST(pDc_Attr->hbrush == hNewObj); RTEST(GDI_HANDLE_GET_TYPE(hOldObj) == GDI_OBJECT_TYPE_BRUSH); - SelectObject(hDC, hOldObj); + SelectObject(hdc1, hOldObj); /* Test DC_BRUSH */ hNewObj = GetStockObject(DC_BRUSH); - hOldObj = SelectObject(hDC, hNewObj); + hOldObj = SelectObject(hdc1, hNewObj); // RTEST(pDc_Attr->hbrush == hNewObj); - SelectObject(hDC, hOldObj); + SelectObject(hdc1, hOldObj); /* Test BRUSH color xform */ // hcmXform = (HANDLE)pDc_Attr->hcmXform; @@ -161,22 +124,107 @@ void Test_SelectObject() /* Test ENHMETAFILE */ - /* Test PEN */ - hNewObj = GetStockObject(GRAY_BRUSH); - hOldObj = SelectObject(hDC, hNewObj); - RTEST(hOldObj == GetStockObject(WHITE_BRUSH)); -// RTEST(pDc_Attr->hbrush == hNewObj); - RTEST(GDI_HANDLE_GET_TYPE(hOldObj) == GDI_OBJECT_TYPE_BRUSH); - SelectObject(hDC, hOldObj); - - /* Test EXTPEN */ /* Test METADC */ } -START_TEST(SelectObject) +static void +Test_Bitmap() { - Test_SelectObject(); + HBITMAP hbmp, hbmpInvalid, hbmpOld; + BYTE bmBits[4] = {0}; + HDC hdcTmp; + + hbmp = CreateBitmap(2, 2, 1, 1, &bmBits); + hbmpInvalid = CreateBitmap(2, 2, 1, 4, &bmBits); + if (!hbmp || !hbmpInvalid) + { + printf("couldn't create bitmaps, skipping\n"); + return; + } + + hbmpOld = SelectObject(hdc1, hbmp); + ok(GDI_HANDLE_GET_TYPE(hbmpOld) == GDI_OBJECT_TYPE_BITMAP, "wrong type\n"); + + /* Test invalid BITMAP */ + ok(SelectObject(hdc1, hbmpInvalid) == NULL, "should fail\n"); + + /* Test if we get the right bitmap back */ + hbmpOld = SelectObject(hdc1, hbmpOld); + ok(hbmpOld == hbmp, "didn't get the right bitmap back.\n"); + + /* Test selecting bitmap into 2 DCs */ + hbmpOld = SelectObject(hdc1, hbmp); + ok(SelectObject(hdc2, hbmp) == NULL, "Should fail.\n"); + + /* Test selecting same bitmap twice */ + hbmpOld = SelectObject(hdc1, hbmp); + ok(hbmpOld == hbmp, "didn't get the right bitmap back.\n"); + SelectObject(hdc1, GetStockObject(DEFAULT_BITMAP)); + + /* Test selecting and then deleting the DC */ + hdcTmp = CreateCompatibleDC(NULL); + hbmpOld = SelectObject(hdcTmp, hbmp); + ok(hbmpOld == GetStockObject(DEFAULT_BITMAP), "didn't get the right bitmap back.\n"); + DeleteDC(hdcTmp); + hbmpOld = SelectObject(hdc1, hbmp); + ok(hbmpOld == GetStockObject(DEFAULT_BITMAP), "didn't get the right bitmap back.\n"); + + DeleteObject(hbmp); + DeleteObject(hbmpInvalid); +} + +static void +Test_Pen() +{ + HPEN hpen, hpenOld; + + /* Test PEN */ + hpen = GetStockObject(GRAY_BRUSH); + hpenOld = SelectObject(hdc1, hpen); + ok(hpenOld == GetStockObject(WHITE_BRUSH), "Got wrong pen.\n"); +// RTEST(pDc_Attr->hbrush == hpen); + ok(GDI_HANDLE_GET_TYPE(hpenOld) == GDI_OBJECT_TYPE_BRUSH, "wrong type.\n"); + SelectObject(hdc1, hpenOld); +} + +static void +Test_Region() +{ + HRGN hrgn, hrgnOld; + + /* Test REGION */ + SetLastError(ERROR_SUCCESS); + hrgn = CreateRectRgn(0,0,0,0); + hrgnOld = SelectObject(hdc1, hrgn); + ok((UINT_PTR)hrgnOld == NULLREGION, "\n"); + DeleteObject(hrgn); + + hrgn = CreateRectRgn(0,0,10,10); + ok((UINT_PTR)SelectObject(hdc1, hrgn) == SIMPLEREGION, "\n"); + hrgnOld = CreateRectRgn(5,5,20,20); + ok(CombineRgn(hrgn, hrgn, hrgnOld, RGN_OR) == COMPLEXREGION, "\n"); + DeleteObject(hrgnOld); + ok((UINT_PTR)SelectObject(hdc1, hrgn) == SIMPLEREGION, "\n"); // ??? Why this? + DeleteObject(hrgn); +// ok(IsHandleValid(hrgn) == TRUE, "\n"); + ok_err(ERROR_SUCCESS); +} + +START_TEST(SelectObject) +{ + hdc1 = CreateCompatibleDC(NULL); + hdc2 = CreateCompatibleDC(NULL); + if (!hdc1 || !hdc2) + { + printf("couldn't create DCs, skipping all tests\n"); + return; + } + + Test_SelectObject(); + Test_Bitmap(); + Test_Pen(); + Test_Region(); } From 62de69219afec2bd407c34ee0228d0e1d983512c Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sun, 27 Feb 2011 23:07:04 +0000 Subject: [PATCH 174/287] [SERVICES] - Protect whole contents of ScmStartService() with a critical section instead of just a few parts of ScmStartUserModeService(). Seems to fix the comment #8 issue of bug #5924. svn path=/trunk/; revision=50930 --- reactos/base/system/services/database.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/reactos/base/system/services/database.c b/reactos/base/system/services/database.c index ed0bdcb61d6..9a332a096d1 100644 --- a/reactos/base/system/services/database.c +++ b/reactos/base/system/services/database.c @@ -922,8 +922,6 @@ ScmStartUserModeService(PSERVICE Service, return Status; } - EnterCriticalSection(&StartServiceCriticalSection); - /* Create '\\.\pipe\net\NtControlPipeXXX' instance */ swprintf(NtControlPipeName, L"\\\\.\\pipe\\net\\NtControlPipe%u", ServiceCurrent); Service->ControlPipeHandle = CreateNamedPipeW(NtControlPipeName, @@ -938,7 +936,6 @@ ScmStartUserModeService(PSERVICE Service, if (Service->ControlPipeHandle == INVALID_HANDLE_VALUE) { DPRINT1("Failed to create control pipe!\n"); - LeaveCriticalSection(&StartServiceCriticalSection); return GetLastError(); } @@ -970,7 +967,6 @@ ScmStartUserModeService(PSERVICE Service, Service->ControlPipeHandle = INVALID_HANDLE_VALUE; DPRINT1("Starting '%S' failed!\n", Service->lpServiceName); - LeaveCriticalSection(&StartServiceCriticalSection); return dwError; } @@ -1030,8 +1026,6 @@ ScmStartUserModeService(PSERVICE Service, CloseHandle(ProcessInformation.hThread); CloseHandle(ProcessInformation.hProcess); - LeaveCriticalSection(&StartServiceCriticalSection); - return dwError; } @@ -1042,6 +1036,8 @@ ScmStartService(PSERVICE Service, DWORD argc, LPWSTR *argv) PSERVICE_GROUP Group = Service->lpGroup; DWORD dwError = ERROR_SUCCESS; + EnterCriticalSection(&StartServiceCriticalSection); + DPRINT("ScmStartService() called\n"); Service->ControlPipeHandle = INVALID_HANDLE_VALUE; @@ -1072,6 +1068,7 @@ ScmStartService(PSERVICE Service, DWORD argc, LPWSTR *argv) } DPRINT("ScmStartService() done (Error %lu)\n", dwError); + LeaveCriticalSection(&StartServiceCriticalSection); if (dwError == ERROR_SUCCESS) { From 04e49a00e3d3075f6151443a12611f2a9af7f731 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 28 Feb 2011 00:19:32 +0000 Subject: [PATCH 175/287] [GDI32] Revert r50519 and r50519 svn path=/trunk/; revision=50931 --- reactos/dll/win32/gdi32/objects/bitmap.c | 74 +++++------------------- 1 file changed, 16 insertions(+), 58 deletions(-) diff --git a/reactos/dll/win32/gdi32/objects/bitmap.c b/reactos/dll/win32/gdi32/objects/bitmap.c index 9ba298068e1..969beb6ad44 100644 --- a/reactos/dll/win32/gdi32/objects/bitmap.c +++ b/reactos/dll/win32/gdi32/objects/bitmap.c @@ -410,35 +410,6 @@ CreateCompatibleBitmap( return CreateDIBSection(hDC, (CONST BITMAPINFO *)&dibs.dsBmih, 0, NULL, NULL, 0); } -void -ConvertBackBitmapInfo(PBITMAPINFO pbmi, PBITMAPINFO pbmiConverted) -{ - INT i; - - /* Check if we converted from PBITMAPCOREINFO */ - if (pbmiConverted != pbmi) - { - PBITMAPCOREINFO pbci = (PBITMAPCOREINFO)pbmi; - - /* Convert back header */ - pbci->bmciHeader.bcSize = sizeof(BITMAPCOREHEADER); - pbci->bmciHeader.bcWidth = pbmiConverted->bmiHeader.biWidth; - pbci->bmciHeader.bcHeight = pbmiConverted->bmiHeader.biHeight; - pbci->bmciHeader.bcPlanes = 1; - pbci->bmciHeader.bcBitCount = pbmiConverted->bmiHeader.biBitCount; - - /* Convert back colors */ - for (i = 0; i < pbmiConverted->bmiHeader.biClrUsed; i++) - { - pbci->bmciColors[i].rgbtRed = pbmiConverted->bmiColors[i].rgbRed; - pbci->bmciColors[i].rgbtGreen = pbmiConverted->bmiColors[i].rgbGreen; - pbci->bmciColors[i].rgbtBlue = pbmiConverted->bmiColors[i].rgbBlue; - } - - /* Free memory */ - RtlFreeHeap(RtlGetProcessHeap(), 0, pbmiConverted); - } -} INT WINAPI @@ -451,9 +422,8 @@ GetDIBits( LPBITMAPINFO lpbmi, UINT uUsage) { - PBITMAPINFO pbmiConverted; - UINT cjBmpScanSize, cjInfoSize; - INT iResult; + UINT cjBmpScanSize; + UINT cjInfoSize; if (!hDC || !GdiIsHandleValid((HGDIOBJ)hDC) || !lpbmi) { @@ -461,22 +431,15 @@ GetDIBits( return 0; } - /* Convert BITMAPINFO to a proper format */ - pbmiConverted = ConvertBitmapInfo(lpbmi, uUsage, &cjInfoSize, FALSE); - if (!pbmiConverted) - { - GdiSetLastError(ERROR_INVALID_PARAMETER); - return 0; - } - cjBmpScanSize = DIB_BitmapMaxBitsSize(lpbmi, cScanLines); + cjInfoSize = DIB_BitmapInfoSize(lpbmi, uUsage); - if (lpvBits) + if ( lpvBits ) { - if (lpbmi->bmiHeader.biSize >= sizeof(BITMAPINFOHEADER)) + if ( lpbmi->bmiHeader.biSize >= sizeof(BITMAPINFOHEADER) ) { - if (lpbmi->bmiHeader.biCompression == BI_JPEG || - lpbmi->bmiHeader.biCompression == BI_PNG) + if ( lpbmi->bmiHeader.biCompression == BI_JPEG || + lpbmi->bmiHeader.biCompression == BI_PNG ) { SetLastError(ERROR_INVALID_PARAMETER); return 0; @@ -484,22 +447,17 @@ GetDIBits( } } - iResult = NtGdiGetDIBitsInternal(hDC, - hbmp, - uStartScan, - cScanLines, - lpvBits, - pbmiConverted, - uUsage, - cjBmpScanSize, - cjInfoSize); - - ConvertBackBitmapInfo(lpbmi, pbmiConverted); - - return iResult; + return NtGdiGetDIBitsInternal(hDC, + hbmp, + uStartScan, + cScanLines, + lpvBits, + lpbmi, + uUsage, + cjBmpScanSize, + cjInfoSize); } - /* * @implemented */ From efd76a4a9c7b23bb55a2e61c6102cd9a54fc5aca Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 28 Feb 2011 00:48:19 +0000 Subject: [PATCH 176/287] [WIN32K] addendum to r50928: 24 and 32bpp BI_RGB bitmaps are BGR svn path=/trunk/; revision=50932 --- reactos/subsystems/win32/win32k/objects/bitmaps.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/bitmaps.c b/reactos/subsystems/win32/win32k/objects/bitmaps.c index eb4d37653f9..96b75bbdc5c 100644 --- a/reactos/subsystems/win32/win32k/objects/bitmaps.c +++ b/reactos/subsystems/win32/win32k/objects/bitmaps.c @@ -929,7 +929,6 @@ BITMAP_GetObject(SURFACE *psurf, INT Count, LPVOID buffer) case BMF_1BPP: case BMF_4BPP: case BMF_8BPP: - case BMF_24BPP: pds->dsBmih.biCompression = BI_RGB; break; @@ -940,8 +939,10 @@ BITMAP_GetObject(SURFACE *psurf, INT Count, LPVOID buffer) pds->dsBmih.biCompression = BI_BITFIELDS; break; + case BMF_24BPP: case BMF_32BPP: - if (psurf->ppal->flFlags & (PAL_RGB|PAL_BGR)) + /* 24/32bpp BI_RGB is actually BGR format */ + if (psurf->ppal->flFlags & PAL_BGR) pds->dsBmih.biCompression = BI_RGB; else pds->dsBmih.biCompression = BI_BITFIELDS; From 823118e08a2fb64882ac30912217f31c35e2b0e0 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Mon, 28 Feb 2011 06:31:44 +0000 Subject: [PATCH 177/287] [Win32k|User32] - Clarify the meaning and the use of 0, 1 and 2 for user window regions, wine never did. Noticing patches not corresponding in correctness and understanding, leaving potential crashes in the DCE code, which depend on these types. - Patch based on Rafal Harabien patch, fixes wine msg SetWindowRgn test, see also bug 5959. svn path=/trunk/; revision=50933 --- reactos/dll/win32/user32/windows/defwnd.c | 6 ++--- reactos/dll/win32/user32/windows/nonclient.c | 5 ++-- reactos/dll/win32/user32/windows/window.c | 4 +-- reactos/include/reactos/win32k/ntuser.h | 4 +++ .../subsystems/win32/win32k/ntuser/painting.c | 10 ++++---- .../subsystems/win32/win32k/ntuser/windc.c | 2 +- .../subsystems/win32/win32k/ntuser/window.c | 25 +++++++++++-------- .../subsystems/win32/win32k/ntuser/winpos.c | 2 +- 8 files changed, 33 insertions(+), 25 deletions(-) diff --git a/reactos/dll/win32/user32/windows/defwnd.c b/reactos/dll/win32/user32/windows/defwnd.c index 774b74552ca..edee49dac73 100644 --- a/reactos/dll/win32/user32/windows/defwnd.c +++ b/reactos/dll/win32/user32/windows/defwnd.c @@ -1189,7 +1189,7 @@ User32DefWindowProc(HWND hWnd, case WM_SYSCOLORCHANGE: { /* force to redraw non-client area */ - DefWndNCPaint(hWnd, (HRGN)1, -1); + DefWndNCPaint(hWnd, HRGN_WINDOW, -1); /* Use InvalidateRect to redraw client area, enable * erase to redraw all subcontrols otherwise send the * WM_SYSCOLORCHANGE to child windows/controls is required @@ -1966,7 +1966,7 @@ RealDefWindowProcA(HWND hWnd, if ((GetWindowLongPtrW(hWnd, GWL_STYLE) & WS_CAPTION) == WS_CAPTION) { - DefWndNCPaint(hWnd, (HRGN)1, -1); + DefWndNCPaint(hWnd, HRGN_WINDOW, -1); } Result = 1; break; @@ -2112,7 +2112,7 @@ RealDefWindowProcW(HWND hWnd, if ((GetWindowLongPtrW(hWnd, GWL_STYLE) & WS_CAPTION) == WS_CAPTION) { - DefWndNCPaint(hWnd, (HRGN)1, -1); + DefWndNCPaint(hWnd, HRGN_WINDOW, -1); } Result = 1; break; diff --git a/reactos/dll/win32/user32/windows/nonclient.c b/reactos/dll/win32/user32/windows/nonclient.c index b9df4425149..1d825b978df 100644 --- a/reactos/dll/win32/user32/windows/nonclient.c +++ b/reactos/dll/win32/user32/windows/nonclient.c @@ -489,7 +489,8 @@ DefWndNCPaint(HWND hWnd, HRGN hRgn, BOOL Active) } ReleaseDC(hWnd, hDC); - DeleteObject(hRgn); // We use DCX_KEEPCLIPRGN + if (hRgn != HRGN_WINDOW) + DeleteObject(hRgn); // We use DCX_KEEPCLIPRGN return 0; } @@ -650,7 +651,7 @@ DefWndNCCalcSize(HWND hWnd, BOOL CalcSizeStruct, RECT *Rect) LRESULT DefWndNCActivate(HWND hWnd, WPARAM wParam) { - DefWndNCPaint(hWnd, (HRGN)1, wParam); + DefWndNCPaint(hWnd, HRGN_WINDOW, wParam); return TRUE; } diff --git a/reactos/dll/win32/user32/windows/window.c b/reactos/dll/win32/user32/windows/window.c index d2a7bb9ee97..2025d815617 100644 --- a/reactos/dll/win32/user32/windows/window.c +++ b/reactos/dll/win32/user32/windows/window.c @@ -1727,7 +1727,7 @@ SetWindowTextA(HWND hWnd, if ((GetWindowLongPtrW(hWnd, GWL_STYLE) & WS_CAPTION) == WS_CAPTION) { - DefWndNCPaint(hWnd, (HRGN)1, -1); + DefWndNCPaint(hWnd, HRGN_WINDOW, -1); } return TRUE; } @@ -1757,7 +1757,7 @@ SetWindowTextW(HWND hWnd, if ((GetWindowLongPtrW(hWnd, GWL_STYLE) & WS_CAPTION) == WS_CAPTION) { - DefWndNCPaint(hWnd, (HRGN)1, -1); + DefWndNCPaint(hWnd, HRGN_WINDOW, -1); } return TRUE; } diff --git a/reactos/include/reactos/win32k/ntuser.h b/reactos/include/reactos/win32k/ntuser.h index a334a04ff30..0b4f587a34a 100644 --- a/reactos/include/reactos/win32k/ntuser.h +++ b/reactos/include/reactos/win32k/ntuser.h @@ -231,6 +231,10 @@ C_ASSERT(sizeof(CLIENTINFO) <= sizeof(((PTEB)0)->Win32ClientInfo)); #define GetWin32ClientInfo() ((PCLIENTINFO)(NtCurrentTeb()->Win32ClientInfo)) +#define HRGN_NULL ( (HRGN) 0) // NULL empty region +#define HRGN_WINDOW ( (HRGN) 1) // region from window rcWindow +#define HRGN_MONITOR ( (HRGN) 2) // region from monitor region. + /* Menu Item fType. */ #define MFT_RTOL 0x6000 diff --git a/reactos/subsystems/win32/win32k/ntuser/painting.c b/reactos/subsystems/win32/win32k/ntuser/painting.c index e74639180ce..beedd93cfb8 100644 --- a/reactos/subsystems/win32/win32k/ntuser/painting.c +++ b/reactos/subsystems/win32/win32k/ntuser/painting.c @@ -141,7 +141,7 @@ IntGetNCUpdateRgn(PWND Window, BOOL Validate) UINT RgnType; if (Window->hrgnUpdate != NULL && - Window->hrgnUpdate != (HRGN)1) + Window->hrgnUpdate != HRGN_WINDOW) { hRgnNonClient = IntCalcWindowRgn(Window, FALSE); @@ -151,14 +151,14 @@ IntGetNCUpdateRgn(PWND Window, BOOL Validate) */ if (hRgnNonClient == NULL) { - return (HRGN)1; + return HRGN_WINDOW; } hRgnWindow = IntCalcWindowRgn(Window, TRUE); if (hRgnWindow == NULL) { REGION_FreeRgnByHandle(hRgnNonClient); - return (HRGN)1; + return HRGN_WINDOW; } RgnType = NtGdiCombineRgn(hRgnNonClient, hRgnNonClient, @@ -167,7 +167,7 @@ IntGetNCUpdateRgn(PWND Window, BOOL Validate) { REGION_FreeRgnByHandle(hRgnWindow); REGION_FreeRgnByHandle(hRgnNonClient); - return (HRGN)1; + return HRGN_WINDOW; } else if (RgnType == NULLREGION) { @@ -1049,7 +1049,7 @@ NtUserGetUpdateRect(HWND hWnd, LPRECT UnsafeRect, BOOL bErase) else { /* Get the update region bounding box. */ - if (Window->hrgnUpdate == (HRGN)1) + if (Window->hrgnUpdate == HRGN_WINDOW) { Rect = Window->rcClient; } diff --git a/reactos/subsystems/win32/win32k/ntuser/windc.c b/reactos/subsystems/win32/win32k/ntuser/windc.c index 89f44f76fe0..619f94b430a 100644 --- a/reactos/subsystems/win32/win32k/ntuser/windc.c +++ b/reactos/subsystems/win32/win32k/ntuser/windc.c @@ -551,7 +551,7 @@ UserGetDCEx(PWND Wnd OPTIONAL, HANDLE ClipRegion, ULONG Flags) ClipRegion = Wnd->hrgnUpdate; } - if (ClipRegion == (HRGN) 1) + if (ClipRegion == HRGN_WINDOW) { if (!(Flags & DCX_WINDOW)) { diff --git a/reactos/subsystems/win32/win32k/ntuser/window.c b/reactos/subsystems/win32/win32k/ntuser/window.c index 892ef7ac979..cb431f21000 100644 --- a/reactos/subsystems/win32/win32k/ntuser/window.c +++ b/reactos/subsystems/win32/win32k/ntuser/window.c @@ -4017,6 +4017,7 @@ CLEANUP: } +// This should be in user32! INT FASTCALL IntGetWindowRgn(PWND Window, HRGN hRgn) { @@ -4055,6 +4056,7 @@ IntGetWindowRgn(PWND Window, HRGN hRgn) return Ret; } +// This should be in user32! INT FASTCALL IntGetWindowRgnBox(PWND Window, RECTL *Rect) { @@ -4104,6 +4106,8 @@ NtUserSetWindowRgn( { HRGN hrgnCopy; PWND Window; + INT flags = (SWP_NOCLIENTSIZE|SWP_NOCLIENTMOVE|SWP_NOACTIVATE|SWP_FRAMECHANGED|SWP_NOSIZE|SWP_NOMOVE); + BOOLEAN Ret = FALSE; DECLARE_RETURN(INT); DPRINT("Enter NtUserSetWindowRgn\n"); @@ -4119,32 +4123,31 @@ NtUserSetWindowRgn( if (GDIOBJ_ValidateHandle(hRgn, GDI_OBJECT_TYPE_REGION)) { hrgnCopy = IntSysCreateRectRgn(0, 0, 0, 0); + + /* Set public ownership */ + IntGdiSetRegionOwner(hrgnCopy, GDI_OBJ_HMGR_PUBLIC); + NtGdiCombineRgn(hrgnCopy, hRgn, 0, RGN_COPY); } else RETURN( 0); } else - hrgnCopy = (HRGN) 1; + { + hrgnCopy = IntSysCreateRectRgnIndirect(&Window->rcWindow); //HRGN_WINDOW; + } if (Window->hrgnClip) { /* Delete no longer needed region handle */ GreDeleteObject(Window->hrgnClip); } + Window->hrgnClip = hrgnCopy; - /* FIXME - send WM_WINDOWPOSCHANGING and WM_WINDOWPOSCHANGED messages to the window */ + Ret = co_WinPosSetWindowPos(Window, HWND_TOP, 0, 0, 0, 0, bRedraw ? flags : (flags|SWP_NOREDRAW) ); - if(bRedraw) - { - USER_REFERENCE_ENTRY Ref; - UserRefObjectCo(Window, &Ref); - co_UserRedrawWindow(Window, NULL, NULL, RDW_INVALIDATE); - UserDerefObjectCo(Window); - } - - RETURN( (INT)hRgn); + RETURN( (INT)Ret); CLEANUP: DPRINT("Leave NtUserSetWindowRgn, ret=%i\n",_ret_); diff --git a/reactos/subsystems/win32/win32k/ntuser/winpos.c b/reactos/subsystems/win32/win32k/ntuser/winpos.c index 3099bee17ef..6a9dfd2b169 100644 --- a/reactos/subsystems/win32/win32k/ntuser/winpos.c +++ b/reactos/subsystems/win32/win32k/ntuser/winpos.c @@ -1120,7 +1120,7 @@ co_WinPosSetWindowPos( Window->style |= WS_VISIBLE; } - if (Window->hrgnUpdate != NULL && Window->hrgnUpdate != (HRGN)1) + if (Window->hrgnUpdate != NULL && Window->hrgnUpdate != HRGN_WINDOW) { NtGdiOffsetRgn(Window->hrgnUpdate, NewWindowRect.left - OldWindowRect.left, From c6182beb15c73ff8c24367ebdb51c2eab53613e6 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Mon, 28 Feb 2011 09:10:43 +0000 Subject: [PATCH 178/287] [Win32k|User32] - Use User32 GetWindowRgnBox, still passing both wine msg SetWindowRgn and win winregion tests, see bug 5959. svn path=/trunk/; revision=50934 --- reactos/dll/win32/user32/windows/paint.c | 10 ++--- reactos/include/reactos/win32k/ntuser.h | 1 - .../win32/win32k/ntuser/simplecall.c | 17 ------- .../subsystems/win32/win32k/ntuser/window.c | 45 +++---------------- 4 files changed, 10 insertions(+), 63 deletions(-) diff --git a/reactos/dll/win32/user32/windows/paint.c b/reactos/dll/win32/user32/windows/paint.c index 982cc5cfb06..6ea4a478c71 100644 --- a/reactos/dll/win32/user32/windows/paint.c +++ b/reactos/dll/win32/user32/windows/paint.c @@ -278,7 +278,7 @@ GetWindowRgn( pWnd = ValidateHwnd(hWnd); - if (!pWnd) // || !pwnd->hrgnClip || pwnd->state2 & WNDS2_MAXIMIZEDMONITORREGION) + if (!pWnd) // || !pWnd->hrgnClip || pWnd->state2 & WNDS2_MAXIMIZEDMONITORREGION) return ERROR; /* Ret = CombineRgn(hRgn, pWnd->hrgnClip, NULL, RGN_COPY); @@ -314,21 +314,19 @@ GetWindowRgnBox( pWnd = ValidateHwnd(hWnd); - if (!pWnd) // || !pwnd->hrgnClip || pwnd->state2 & WNDS2_MAXIMIZEDMONITORREGION) + if (!pWnd || !pWnd->hrgnClip || pWnd->state2 & WNDS2_MAXIMIZEDMONITORREGION) return ERROR; -/* + Ret = GetRgnBox(pWnd->hrgnClip, lprc); if (!Ret) return ERROR; if (pWnd->fnid != FNID_DESKTOP) - Ret = OffsetRect(lprc, -pWnd->rcWindow.left, -pWnd->rcWindow.top); + OffsetRect(lprc, -pWnd->rcWindow.left, -pWnd->rcWindow.top); if (pWnd->ExStyle & WS_EX_LAYOUTRTL) MirrorWindowRect(pWnd, lprc); -*/ - Ret = (int)NtUserCallTwoParam((DWORD_PTR)hWnd, (DWORD_PTR)lprc, TWOPARAM_ROUTINE_GETWINDOWRGNBOX); return Ret; } diff --git a/reactos/include/reactos/win32k/ntuser.h b/reactos/include/reactos/win32k/ntuser.h index 0b4f587a34a..5610bf94e7f 100644 --- a/reactos/include/reactos/win32k/ntuser.h +++ b/reactos/include/reactos/win32k/ntuser.h @@ -3130,7 +3130,6 @@ typedef struct tagKMDDELPARAM #define ONEPARAM_ROUTINE_ENABLEPROCWNDGHSTING 0xfffe000d #define ONEPARAM_ROUTINE_GETDESKTOPMAPPING 0xfffe000e #define ONEPARAM_ROUTINE_GETCURSORPOSITION 0xfffe0048 // use ONEPARAM_ or TWOPARAM routine ? -#define TWOPARAM_ROUTINE_GETWINDOWRGNBOX 0xfffd0048 // user mode #define TWOPARAM_ROUTINE_GETWINDOWRGN 0xfffd0049 // user mode #define TWOPARAM_ROUTINE_SETMENUBARHEIGHT 0xfffd0050 #define TWOPARAM_ROUTINE_SETGUITHRDHANDLE 0xfffd0052 diff --git a/reactos/subsystems/win32/win32k/ntuser/simplecall.c b/reactos/subsystems/win32/win32k/ntuser/simplecall.c index f31b44296a1..155feeda3fc 100644 --- a/reactos/subsystems/win32/win32k/ntuser/simplecall.c +++ b/reactos/subsystems/win32/win32k/ntuser/simplecall.c @@ -367,7 +367,6 @@ NtUserCallTwoParam( DWORD_PTR Param2, DWORD Routine) { - NTSTATUS Status; PWND Window; DECLARE_RETURN(DWORD_PTR); @@ -376,22 +375,6 @@ NtUserCallTwoParam( switch(Routine) { - case TWOPARAM_ROUTINE_GETWINDOWRGNBOX: - { - DWORD_PTR Ret; - RECTL rcRect; - Window = UserGetWindowObject((HWND)Param1); - if (!Window) RETURN(ERROR); - - Ret = (DWORD_PTR)IntGetWindowRgnBox(Window, &rcRect); - Status = MmCopyToCaller((PVOID)Param2, &rcRect, sizeof(RECT)); - if(!NT_SUCCESS(Status)) - { - SetLastNtError(Status); - RETURN( ERROR); - } - RETURN( Ret); - } case TWOPARAM_ROUTINE_GETWINDOWRGN: { Window = UserGetWindowObject((HWND)Param1); diff --git a/reactos/subsystems/win32/win32k/ntuser/window.c b/reactos/subsystems/win32/win32k/ntuser/window.c index cb431f21000..321666e362f 100644 --- a/reactos/subsystems/win32/win32k/ntuser/window.c +++ b/reactos/subsystems/win32/win32k/ntuser/window.c @@ -4056,45 +4056,6 @@ IntGetWindowRgn(PWND Window, HRGN hRgn) return Ret; } -// This should be in user32! -INT FASTCALL -IntGetWindowRgnBox(PWND Window, RECTL *Rect) -{ - INT Ret; - HRGN VisRgn; - ROSRGNDATA *pRgn; - - if(!Window) - { - return ERROR; - } - if(!Rect) - { - return ERROR; - } - - /* Create a new window region using the window rectangle */ - VisRgn = IntSysCreateRectRgnIndirect(&Window->rcWindow); - NtGdiOffsetRgn(VisRgn, -Window->rcWindow.left, -Window->rcWindow.top); - /* if there's a region assigned to the window, combine them both */ - if(Window->hrgnClip && !(Window->style & WS_MINIMIZE)) - NtGdiCombineRgn(VisRgn, VisRgn, Window->hrgnClip, RGN_AND); - - if((pRgn = RGNOBJAPI_Lock(VisRgn, NULL))) - { - Ret = REGION_Complexity(pRgn); - *Rect = pRgn->rdh.rcBound; - RGNOBJAPI_Unlock(pRgn); - } - else - Ret = ERROR; - - REGION_FreeRgnByHandle(VisRgn); - - return Ret; -} - - /* * @implemented */ @@ -4143,6 +4104,12 @@ NtUserSetWindowRgn( GreDeleteObject(Window->hrgnClip); } + if (Window->fnid != FNID_DESKTOP) + NtGdiOffsetRgn(hrgnCopy, Window->rcWindow.left, Window->rcWindow.top); + + /* Set public ownership */ + IntGdiSetRegionOwner(hrgnCopy, GDI_OBJ_HMGR_PUBLIC); + Window->hrgnClip = hrgnCopy; Ret = co_WinPosSetWindowPos(Window, HWND_TOP, 0, 0, 0, 0, bRedraw ? flags : (flags|SWP_NOREDRAW) ); From 9fb8200d9b935c394ceaba30585474055d3c77b2 Mon Sep 17 00:00:00 2001 From: Kamil Hornicek Date: Mon, 28 Feb 2011 12:47:01 +0000 Subject: [PATCH 179/287] [WIN32K] Fix calculating of ScanLines and source point in NtGdiGetDIBitsInternal for top-down bitmaps to more closely mimic win xp behavior. (Timo - high five for your test app) See issue #5524 for more details. svn path=/trunk/; revision=50935 --- .../subsystems/win32/win32k/objects/dibobj.c | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/dibobj.c b/reactos/subsystems/win32/win32k/objects/dibobj.c index 963f152acbd..1a26cd6f49f 100644 --- a/reactos/subsystems/win32/win32k/objects/dibobj.c +++ b/reactos/subsystems/win32/win32k/objects/dibobj.c @@ -939,9 +939,26 @@ NtGdiGetDIBitsInternal( rcDest.bottom = ScanLines; rcDest.right = psurf->SurfObj.sizlBitmap.cx; - srcPoint.x = 0; - srcPoint.y = height < 0 ? - psurf->SurfObj.sizlBitmap.cy - (StartScan + ScanLines) : StartScan; + srcPoint.x = 0; + + if(height < 0) + { + srcPoint.y = 0; + + if(ScanLines <= StartScan) + { + ScanLines = 1; + SURFACE_ShareUnlockSurface(psurfDest); + GreDeleteObject(hBmpDest); + goto done; + } + + ScanLines -= StartScan; + } + else + { + srcPoint.y = StartScan; + } EXLATEOBJ_vInitialize(&exlo, psurf->ppal, psurfDest->ppal, 0xffffff, 0xffffff, 0); From edda07b8ac9c245816d0201e6009a68a18568bed Mon Sep 17 00:00:00 2001 From: James Tabor Date: Mon, 28 Feb 2011 16:45:57 +0000 Subject: [PATCH 180/287] [Win32k|User32] - Use User32 GetWindowRgnBox, still passing both wine msg SetWindowRgn and win winregion tests, see bug 5959. svn path=/trunk/; revision=50936 --- reactos/dll/win32/user32/windows/paint.c | 6 +-- reactos/include/reactos/win32k/ntuser.h | 1 - .../win32/win32k/ntuser/simplecall.c | 7 --- .../subsystems/win32/win32k/ntuser/window.c | 43 ------------------- 4 files changed, 2 insertions(+), 55 deletions(-) diff --git a/reactos/dll/win32/user32/windows/paint.c b/reactos/dll/win32/user32/windows/paint.c index 6ea4a478c71..433577eedf5 100644 --- a/reactos/dll/win32/user32/windows/paint.c +++ b/reactos/dll/win32/user32/windows/paint.c @@ -278,9 +278,9 @@ GetWindowRgn( pWnd = ValidateHwnd(hWnd); - if (!pWnd) // || !pWnd->hrgnClip || pWnd->state2 & WNDS2_MAXIMIZEDMONITORREGION) + if (!pWnd || !pWnd->hrgnClip || pWnd->state2 & WNDS2_MAXIMIZEDMONITORREGION) return ERROR; -/* + Ret = CombineRgn(hRgn, pWnd->hrgnClip, NULL, RGN_COPY); if (!Ret) @@ -291,8 +291,6 @@ GetWindowRgn( if (pWnd->ExStyle & WS_EX_LAYOUTRTL) MirrorRgn(hWnd, hRgn); -*/ - Ret = (int)NtUserCallTwoParam((DWORD_PTR)hWnd, (DWORD_PTR)hRgn, TWOPARAM_ROUTINE_GETWINDOWRGN); return Ret; } diff --git a/reactos/include/reactos/win32k/ntuser.h b/reactos/include/reactos/win32k/ntuser.h index 5610bf94e7f..b0e800bacdb 100644 --- a/reactos/include/reactos/win32k/ntuser.h +++ b/reactos/include/reactos/win32k/ntuser.h @@ -3130,7 +3130,6 @@ typedef struct tagKMDDELPARAM #define ONEPARAM_ROUTINE_ENABLEPROCWNDGHSTING 0xfffe000d #define ONEPARAM_ROUTINE_GETDESKTOPMAPPING 0xfffe000e #define ONEPARAM_ROUTINE_GETCURSORPOSITION 0xfffe0048 // use ONEPARAM_ or TWOPARAM routine ? -#define TWOPARAM_ROUTINE_GETWINDOWRGN 0xfffd0049 // user mode #define TWOPARAM_ROUTINE_SETMENUBARHEIGHT 0xfffd0050 #define TWOPARAM_ROUTINE_SETGUITHRDHANDLE 0xfffd0052 #define MSQ_STATE_CAPTURE 0x1 diff --git a/reactos/subsystems/win32/win32k/ntuser/simplecall.c b/reactos/subsystems/win32/win32k/ntuser/simplecall.c index 155feeda3fc..dd152672e01 100644 --- a/reactos/subsystems/win32/win32k/ntuser/simplecall.c +++ b/reactos/subsystems/win32/win32k/ntuser/simplecall.c @@ -375,13 +375,6 @@ NtUserCallTwoParam( switch(Routine) { - case TWOPARAM_ROUTINE_GETWINDOWRGN: - { - Window = UserGetWindowObject((HWND)Param1); - if (!Window) RETURN(ERROR); - - RETURN( (DWORD_PTR)IntGetWindowRgn(Window, (HRGN)Param2)); - } case TWOPARAM_ROUTINE_SETMENUBARHEIGHT: { DWORD_PTR Ret; diff --git a/reactos/subsystems/win32/win32k/ntuser/window.c b/reactos/subsystems/win32/win32k/ntuser/window.c index 321666e362f..981d446786d 100644 --- a/reactos/subsystems/win32/win32k/ntuser/window.c +++ b/reactos/subsystems/win32/win32k/ntuser/window.c @@ -4016,46 +4016,6 @@ CLEANUP: END_CLEANUP; } - -// This should be in user32! -INT FASTCALL -IntGetWindowRgn(PWND Window, HRGN hRgn) -{ - INT Ret; - HRGN VisRgn; - ROSRGNDATA *pRgn; - - if(!Window) - { - return ERROR; - } - if(!hRgn) - { - return ERROR; - } - - /* Create a new window region using the window rectangle */ - VisRgn = IntSysCreateRectRgnIndirect(&Window->rcWindow); - NtGdiOffsetRgn(VisRgn, -Window->rcWindow.left, -Window->rcWindow.top); - /* if there's a region assigned to the window, combine them both */ - if(Window->hrgnClip && !(Window->style & WS_MINIMIZE)) - NtGdiCombineRgn(VisRgn, VisRgn, Window->hrgnClip, RGN_AND); - /* Copy the region into hRgn */ - NtGdiCombineRgn(hRgn, VisRgn, NULL, RGN_COPY); - - if((pRgn = RGNOBJAPI_Lock(hRgn, NULL))) - { - Ret = REGION_Complexity(pRgn); - RGNOBJAPI_Unlock(pRgn); - } - else - Ret = ERROR; - - REGION_FreeRgnByHandle(VisRgn); - - return Ret; -} - /* * @implemented */ @@ -4085,9 +4045,6 @@ NtUserSetWindowRgn( { hrgnCopy = IntSysCreateRectRgn(0, 0, 0, 0); - /* Set public ownership */ - IntGdiSetRegionOwner(hrgnCopy, GDI_OBJ_HMGR_PUBLIC); - NtGdiCombineRgn(hrgnCopy, hRgn, 0, RGN_COPY); } else From e9b7bf6df2abbca44fa1f45868eaf81d8bcab012 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 28 Feb 2011 18:01:12 +0000 Subject: [PATCH 181/287] [GDI32_APITEST] More tests for MaskBlt svn path=/trunk/; revision=50937 --- rostests/apitests/gdi32/MaskBlt.c | 85 +++++++++++++++++++++++++------ 1 file changed, 69 insertions(+), 16 deletions(-) diff --git a/rostests/apitests/gdi32/MaskBlt.c b/rostests/apitests/gdi32/MaskBlt.c index 2b85594e921..1103a5a2d50 100644 --- a/rostests/apitests/gdi32/MaskBlt.c +++ b/rostests/apitests/gdi32/MaskBlt.c @@ -45,51 +45,104 @@ void Test_MaskBlt_1bpp() ok(ret == 1, "MaskBlt failed (%d)\n", ret); ok (pjBitsDst[0] == 0xF0, "pjBitsDst[0] == 0x%x\n", pjBitsDst[0]); - - } -void Test_MaskBlt_RGBA() +void Test_MaskBlt_16bpp() +{ + HDC hdcDst, hdcSrc; + BITMAPINFO bmi1 = {{sizeof(BITMAPINFOHEADER), 8, 1, 1, 1, BI_RGB, 0, 10, 10, 0,0}}; + BITMAPINFO bmi32 = {{sizeof(BITMAPINFOHEADER), 8, 1, 1, 16, BI_RGB, 0, 10, 10, 0,0}}; + HBITMAP hbmDst, hbmSrc, hbmMsk; + PUCHAR pjBitsMsk; + PUSHORT pusBitsDst, pusBitsSrc; + BOOL ret; + + /* Create a dest dc and bitmap */ + hdcDst = CreateCompatibleDC(NULL); + hbmDst = CreateDIBSection(hdcDst, &bmi32, DIB_RGB_COLORS, (PVOID*)&pusBitsDst, NULL, 0); + SelectObject(hdcDst, hbmDst); + + /* Create a source dc and bitmap */ + hdcSrc = CreateCompatibleDC(NULL); + hbmSrc = CreateDIBSection(hdcSrc, &bmi32, DIB_RGB_COLORS, (PVOID*)&pusBitsSrc, NULL, 0); + SelectObject(hdcSrc, hbmSrc); + ok(hdcSrc && hbmSrc, "\n"); + + /* Create a 1 bpp mask bitmap */ + hbmMsk = CreateDIBSection(hdcDst, &bmi1, DIB_RGB_COLORS, (PVOID*)&pjBitsMsk, NULL, 0); + ok(hbmMsk != 0, "CreateDIBSection failed\n"); + + /* Do the masking */ + pusBitsDst[0] = 0x1234; + pusBitsDst[1] = 0x5678; + pusBitsSrc[0] = 0x4321; + pusBitsSrc[1] = 0x8765; + pjBitsMsk[0] = 0x80; + ret = MaskBlt(hdcDst, 0, 0, 8, 1, hdcSrc, 0, 0, hbmMsk, 0, 0, MAKEROP4(SRCCOPY, 0xAA0000)); + ok(ret == 1, "MaskBlt failed (%d)\n", ret); + ok (pusBitsDst[0] == 0x4321, "pusBitsDst[0] == 0x%x\n", pusBitsDst[0]); + ok (pusBitsDst[1] == 0x5678, "pusBitsDst[0] == 0x%x\n", pusBitsDst[1]); + + pusBitsDst[0] = 0x1234; + pusBitsDst[1] = 0x5678; + ret = MaskBlt(hdcDst, 0, 0, 8, 1, hdcSrc, 0, 0, hbmMsk, 0, 0, MAKEROP4(SRCPAINT, MERGEPAINT)); + ok(ret == 1, "MaskBlt failed (%d)\n", ret); + ok (pusBitsDst[0] == 0x5335, "pusBitsDst[0] == 0x%x\n", pusBitsDst[0]); + ok (pusBitsDst[1] == 0x7efa, "pusBitsDst[0] == 0x%x\n", pusBitsDst[1]); +} + +void Test_MaskBlt_32bpp() { HDC hdcDst, hdcSrc; BITMAPINFO bmi1 = {{sizeof(BITMAPINFOHEADER), 8, 1, 1, 1, BI_RGB, 0, 10, 10, 0,0}}; BITMAPINFO bmi32 = {{sizeof(BITMAPINFOHEADER), 8, 1, 1, 32, BI_RGB, 0, 10, 10, 0,0}}; HBITMAP hbmDst, hbmSrc, hbmMsk; - PUCHAR pjBitsDst, pjBitsSrc, pjBitsMsk; + PUCHAR pjBitsMsk; + PULONG pulBitsDst, pulBitsSrc; BOOL ret; /* Create a dest dc and bitmap */ hdcDst = CreateCompatibleDC(NULL); - hbmDst = CreateDIBSection(hdcDst, &bmi32, DIB_RGB_COLORS, (PVOID*)&pjBitsDst, NULL, 0); + hbmDst = CreateDIBSection(hdcDst, &bmi32, DIB_RGB_COLORS, (PVOID*)&pulBitsDst, NULL, 0); SelectObject(hdcDst, hbmDst); /* Create a source dc and bitmap */ hdcSrc = CreateCompatibleDC(NULL); - hbmSrc = CreateDIBSection(hdcSrc, &bmi32, DIB_RGB_COLORS, (PVOID*)&pjBitsSrc, NULL, 0); + hbmSrc = CreateDIBSection(hdcSrc, &bmi32, DIB_RGB_COLORS, (PVOID*)&pulBitsSrc, NULL, 0); SelectObject(hdcSrc, hbmSrc); + ok(hdcSrc && hbmSrc, "\n"); /* Create a 1 bpp mask bitmap */ hbmMsk = CreateDIBSection(hdcDst, &bmi1, DIB_RGB_COLORS, (PVOID*)&pjBitsMsk, NULL, 0); + ok(hbmMsk != 0, "CreateDIBSection failed\n"); /* Do the masking */ - pjBitsDst[0] = 0xAA; - pjBitsSrc[0] = 0xCC; - pjBitsMsk[0] = 0xF0; + pulBitsDst[0] = 0x12345678; + pulBitsDst[1] = 0x9abcdef0; + pulBitsSrc[0] = 0x87684321; + pulBitsSrc[1] = 0x0fedcba9; + pjBitsMsk[0] = 0x80; ret = MaskBlt(hdcDst, 0, 0, 8, 1, hdcSrc, 0, 0, hbmMsk, 0, 0, MAKEROP4(SRCCOPY, 0xAA0000)); ok(ret == 1, "MaskBlt failed (%d)\n", ret); - ok (pjBitsDst[0] == 0xCA, "pjBitsDst[0] == 0x%x\n", pjBitsDst[0]); + ok (pulBitsDst[0] == 0x87684321, "pulBitsDst[0] == 0x%lx\n", pulBitsDst[0]); + ok (pulBitsDst[1] == 0x9abcdef0, "pulBitsDst[0] == 0x%lx\n", pulBitsDst[1]); - pjBitsDst[0] = 0x00; - pjBitsSrc[0] = 0xFF; - pjBitsMsk[0] = 0xF0; - ret = MaskBlt(hdcDst, 0, 0, 8, 1, hdcSrc, 0, 0, hbmMsk, 0, 0, MAKEROP4(SRCCOPY, 0xAA0000)); + pulBitsDst[0] = 0x12345678; + pulBitsDst[1] = 0x9abcdef0; + ret = MaskBlt(hdcDst, 0, 0, 8, 1, hdcSrc, 0, 0, hbmMsk, 0, 0, MAKEROP4(SRCPAINT, MERGEPAINT)); ok(ret == 1, "MaskBlt failed (%d)\n", ret); - ok (pjBitsDst[0] == 0xF0, "pjBitsDst[0] == 0x%x\n", pjBitsDst[0]); - + ok (pulBitsDst[0] == 0x977c5779, "pulBitsDst[0] == 0x%lx\n", pulBitsDst[0]); + ok (pulBitsDst[1] == 0xfabefef6, "pulBitsDst[0] == 0x%lx\n", pulBitsDst[1]); } START_TEST(MaskBlt) { Test_MaskBlt_1bpp(); + switch (GetDeviceCaps(GetDC(NULL), BITSPIXEL)) + { + case 16: Test_MaskBlt_16bpp(); + case 32: Test_MaskBlt_32bpp(); + } + } From 962c0688f53eecda112e81ba35861892d8659fcf Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 28 Feb 2011 20:04:10 +0000 Subject: [PATCH 182/287] [GDI32_APITEST] Fix a bug svn path=/trunk/; revision=50938 --- rostests/apitests/gdi32/MaskBlt.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rostests/apitests/gdi32/MaskBlt.c b/rostests/apitests/gdi32/MaskBlt.c index 1103a5a2d50..3226664ff53 100644 --- a/rostests/apitests/gdi32/MaskBlt.c +++ b/rostests/apitests/gdi32/MaskBlt.c @@ -140,8 +140,8 @@ START_TEST(MaskBlt) Test_MaskBlt_1bpp(); switch (GetDeviceCaps(GetDC(NULL), BITSPIXEL)) { - case 16: Test_MaskBlt_16bpp(); - case 32: Test_MaskBlt_32bpp(); + case 16: Test_MaskBlt_16bpp(); break; + case 32: Test_MaskBlt_32bpp(); break; } } From 58967308292d3366729fdfa075432e8ba042f707 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Mon, 28 Feb 2011 23:29:36 +0000 Subject: [PATCH 183/287] [FORMATTING] fix formatting. No code change svn path=/trunk/; revision=50939 --- .../subsystems/win32/win32k/objects/drawing.c | 2119 +++++++++-------- 1 file changed, 1087 insertions(+), 1032 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/drawing.c b/reactos/subsystems/win32/win32k/objects/drawing.c index 351c081731a..86ab4c3a8c3 100755 --- a/reactos/subsystems/win32/win32k/objects/drawing.c +++ b/reactos/subsystems/win32/win32k/objects/drawing.c @@ -61,8 +61,8 @@ SUCH DAMAGE. typedef struct _Rect { - int x, y; /* top-left point inside rect */ - int width, height; /* width and height of rect */ + int x, y; /* top-left point inside rect */ + int width, height; /* width and height of rect */ } Rect, *PRect; int FASTCALL IntFillRect(DC *dc, INT XLeft, INT YLeft, INT Width, INT Height, PBRUSH pbrush, BOOL Pen); @@ -73,10 +73,10 @@ POINT INTERNAL_CALL app_new_point(int x, int y) { - POINT p; - p.x = x; - p.y = y; - return p; + POINT p; + p.x = x; + p.y = y; + return p; } #define pt(x,y) app_new_point((x),(y)) @@ -85,12 +85,12 @@ Rect INTERNAL_CALL rect(int x, int y, int width, int height) { - Rect r; - r.x = x; - r.y = y; - r.width = width; - r.height = height; - return r; + Rect r; + r.x = x; + r.y = y; + r.width = width; + r.height = height; + return r; } @@ -125,202 +125,214 @@ int INTERNAL_CALL app_draw_ellipse(DC *g, Rect r, PBRUSH pbrush) { - /* Outer ellipse: e(x,y) = b*b*x*x + a*a*y*y - a*a*b*b */ + /* Outer ellipse: e(x,y) = b*b*x*x + a*a*y*y - a*a*b*b */ - int a = r.width / 2; - int b = r.height / 2; - int x = 0; - int y = b; - long a2 = a*a; - long b2 = b*b; - long xcrit = (3 * a2 / 4) + 1; - long ycrit = (3 * b2 / 4) + 1; - long t = b2 + a2 - 2*a2*b; /* t = e(x+1,y-1) */ - long dxt = b2*(3+x+x); - long dyt = a2*(3-y-y); - int d2xt = b2+b2; - int d2yt = a2+a2; + int a = r.width / 2; + int b = r.height / 2; + int x = 0; + int y = b; + long a2 = a*a; + long b2 = b*b; + long xcrit = (3 * a2 / 4) + 1; + long ycrit = (3 * b2 / 4) + 1; + long t = b2 + a2 - 2*a2*b; /* t = e(x+1,y-1) */ + long dxt = b2*(3+x+x); + long dyt = a2*(3-y-y); + int d2xt = b2+b2; + int d2yt = a2+a2; - int w = pbrush->ptPenWidth.x; + int w = pbrush->ptPenWidth.x; - /* Inner ellipse: E(X,Y) = B*B*X*X + A*A*Y*Y - A*A*B*B */ + /* Inner ellipse: E(X,Y) = B*B*X*X + A*A*Y*Y - A*A*B*B */ - int A = a-w > 0 ? a-w : 0; - int B = b-w > 0 ? b-w : 0; - int X = 0; - int Y = B; - long A2 = A*A; - long B2 = B*B; - long XCRIT = (3 * A2 / 4) + 1; - long YCRIT = (3 * B2 / 4) + 1; - long T = B2 + A2 - 2*A2*B; /* T = E(X+1,Y-1) */ - long DXT = B2*(3+X+X); - long DYT = A2*(3-Y-Y); - int D2XT = B2+B2; - int D2YT = A2+A2; + int A = a-w > 0 ? a-w : 0; + int B = b-w > 0 ? b-w : 0; + int X = 0; + int Y = B; + long A2 = A*A; + long B2 = B*B; + long XCRIT = (3 * A2 / 4) + 1; + long YCRIT = (3 * B2 / 4) + 1; + long T = B2 + A2 - 2*A2*B; /* T = E(X+1,Y-1) */ + long DXT = B2*(3+X+X); + long DYT = A2*(3-Y-Y); + int D2XT = B2+B2; + int D2YT = A2+A2; - int movedown, moveout; - int innerX = 0, prevx, prevy, W; - Rect r1, r2; - int result = 1; + int movedown, moveout; + int innerX = 0, prevx, prevy, W; + Rect r1, r2; + int result = 1; // START_DEBUG(); - if ((r.width <= 2) || (r.height <= 2)) - return app_fill_rect(g, r, pbrush, TRUE); + if ((r.width <= 2) || (r.height <= 2)) + return app_fill_rect(g, r, pbrush, TRUE); - r1.x = r.x + a; - r1.y = r.y; - r1.width = r.width & 1; /* i.e. if width is odd */ - r1.height = 1; + r1.x = r.x + a; + r1.y = r.y; + r1.width = r.width & 1; /* i.e. if width is odd */ + r1.height = 1; - r2 = r1; - r2.y = r.y + r.height - 1; + r2 = r1; + r2.y = r.y + r.height - 1; - prevx = r1.x; - prevy = r1.y; + prevx = r1.x; + prevy = r1.y; - while (y > 0) - { - while (Y == y) - { - innerX = X; + while (y > 0) + { + while (Y == y) + { + innerX = X; - if (T + A2*Y < XCRIT) /* E(X+1,Y-1/2) <= 0 */ - { - /* move outwards to encounter edge */ - X += 1; - T += DXT; - DXT += D2XT; - } - else if (T - B2*X >= YCRIT) /* e(x+1/2,y-1) > 0 */ - { - /* drop down one line */ - Y -= 1; - T += DYT; - DYT += D2YT; - } - else { - /* drop diagonally down and out */ - X += 1; - Y -= 1; - T += DXT + DYT; - DXT += D2XT; - DYT += D2YT; - } - } + if (T + A2*Y < XCRIT) /* E(X+1,Y-1/2) <= 0 */ + { + /* move outwards to encounter edge */ + X += 1; + T += DXT; + DXT += D2XT; + } + else if (T - B2*X >= YCRIT) /* e(x+1/2,y-1) > 0 */ + { + /* drop down one line */ + Y -= 1; + T += DYT; + DYT += D2YT; + } + else + { + /* drop diagonally down and out */ + X += 1; + Y -= 1; + T += DXT + DYT; + DXT += D2XT; + DYT += D2YT; + } + } - movedown = moveout = 0; + movedown = moveout = 0; - W = x - innerX; - if (r1.x + W < prevx) - W = prevx - r1.x; - if (W < w) - W = w; + W = x - innerX; + if (r1.x + W < prevx) + W = prevx - r1.x; + if (W < w) + W = w; - if (t + a2*y < xcrit) /* e(x+1,y-1/2) <= 0 */ - { - /* move outwards to encounter edge */ - x += 1; - t += dxt; - dxt += d2xt; + if (t + a2*y < xcrit) /* e(x+1,y-1/2) <= 0 */ + { + /* move outwards to encounter edge */ + x += 1; + t += dxt; + dxt += d2xt; - moveout = 1; - } - else if (t - b2*x >= ycrit) /* e(x+1/2,y-1) > 0 */ - { - /* drop down one line */ - y -= 1; - t += dyt; - dyt += d2yt; + moveout = 1; + } + else if (t - b2*x >= ycrit) /* e(x+1/2,y-1) > 0 */ + { + /* drop down one line */ + y -= 1; + t += dyt; + dyt += d2yt; - movedown = 1; - } - else { - /* drop diagonally down and out */ - x += 1; - y -= 1; - t += dxt + dyt; - dxt += d2xt; - dyt += d2yt; + movedown = 1; + } + else + { + /* drop diagonally down and out */ + x += 1; + y -= 1; + t += dxt + dyt; + dxt += d2xt; + dyt += d2yt; - movedown = 1; - moveout = 1; - } + movedown = 1; + moveout = 1; + } - if (movedown) { - if (r1.width == 0) { - r1.x -= 1; r1.width += 2; - r2.x -= 1; r2.width += 2; - moveout = 0; - } + if (movedown) + { + if (r1.width == 0) + { + r1.x -= 1; + r1.width += 2; + r2.x -= 1; + r2.width += 2; + moveout = 0; + } - if (r1.x < r.x) - r1.x = r2.x = r.x; - if (r1.width > r.width) - r1.width = r2.width = r.width; - if (r1.y == r2.y-1) { - r1.x = r2.x = r.x; - r1.width = r2.width = r.width; - } + if (r1.x < r.x) + r1.x = r2.x = r.x; + if (r1.width > r.width) + r1.width = r2.width = r.width; + if (r1.y == r2.y-1) + { + r1.x = r2.x = r.x; + r1.width = r2.width = r.width; + } - if ((r1.y < r.y+w) || (r1.x+W >= r1.x+r1.width-W)) - { - result &= app_fill_rect(g, r1, pbrush, TRUE); - result &= app_fill_rect(g, r2, pbrush, TRUE); + if ((r1.y < r.y+w) || (r1.x+W >= r1.x+r1.width-W)) + { + result &= app_fill_rect(g, r1, pbrush, TRUE); + result &= app_fill_rect(g, r2, pbrush, TRUE); - prevx = r1.x; - prevy = r1.y; - } - else if (r1.y+r1.height < r2.y) - { - /* draw distinct rectangles */ - result &= app_fill_rect(g, rect(r1.x,r1.y, - W,1), pbrush, TRUE); - result &= app_fill_rect(g, rect( - r1.x+r1.width-W,r1.y,W,1), pbrush, TRUE); - result &= app_fill_rect(g, rect(r2.x, - r2.y,W,1), pbrush, TRUE); - result &= app_fill_rect(g, rect( - r2.x+r2.width-W,r2.y,W,1), pbrush, TRUE); + prevx = r1.x; + prevy = r1.y; + } + else if (r1.y+r1.height < r2.y) + { + /* draw distinct rectangles */ + result &= app_fill_rect(g, rect(r1.x,r1.y, + W,1), pbrush, TRUE); + result &= app_fill_rect(g, rect( + r1.x+r1.width-W,r1.y,W,1), pbrush, TRUE); + result &= app_fill_rect(g, rect(r2.x, + r2.y,W,1), pbrush, TRUE); + result &= app_fill_rect(g, rect( + r2.x+r2.width-W,r2.y,W,1), pbrush, TRUE); - prevx = r1.x; - prevy = r1.y; - } + prevx = r1.x; + prevy = r1.y; + } - /* move down */ - r1.y += 1; - r2.y -= 1; - } + /* move down */ + r1.y += 1; + r2.y -= 1; + } - if (moveout) { - /* move outwards */ - r1.x -= 1; r1.width += 2; - r2.x -= 1; r2.width += 2; - } - } - if ((x <= a) && (prevy < r2.y)) { - /* draw final line */ - r1.height = r1.y+r1.height-r2.y; - r1.y = r2.y; + if (moveout) + { + /* move outwards */ + r1.x -= 1; + r1.width += 2; + r2.x -= 1; + r2.width += 2; + } + } + if ((x <= a) && (prevy < r2.y)) + { + /* draw final line */ + r1.height = r1.y+r1.height-r2.y; + r1.y = r2.y; - W = w; - if (r.x + W != prevx) - W = prevx - r.x; - if (W < w) - W = w; + W = w; + if (r.x + W != prevx) + W = prevx - r.x; + if (W < w) + W = w; - if (W+W >= r.width) { - result &= app_fill_rect(g, rect(r.x, r1.y, - r.width, r1.height), pbrush, TRUE); - return result; - } + if (W+W >= r.width) + { + result &= app_fill_rect(g, rect(r.x, r1.y, + r.width, r1.height), pbrush, TRUE); + return result; + } - result &= app_fill_rect(g, rect(r.x, r1.y, W, r1.height), pbrush, TRUE); - result &= app_fill_rect(g, rect(r.x+r.width-W, r1.y, - W, r1.height), pbrush, TRUE); - } - return result; + result &= app_fill_rect(g, rect(r.x, r1.y, W, r1.height), pbrush, TRUE); + result &= app_fill_rect(g, rect(r.x+r.width-W, r1.y, + W, r1.height), pbrush, TRUE); + } + return result; } /* @@ -360,220 +372,220 @@ static int FASTCALL app_fill_arc_rect(DC *g, - Rect r, // top, left, width, height - POINT p0, // Center - POINT p1, // Start - POINT p2, // End - int start_angle, - int end_angle, - PBRUSH pbrush, - BOOL Pen) + Rect r, // top, left, width, height + POINT p0, // Center + POINT p1, // Start + POINT p2, // End + int start_angle, + int end_angle, + PBRUSH pbrush, + BOOL Pen) { - int x1, x2; - int start_above, end_above; - long rise1, run1, rise2, run2; + int x1, x2; + int start_above, end_above; + long rise1, run1, rise2, run2; - rise1 = p1.y - p0.y; - run1 = p1.x - p0.x; - rise2 = p2.y - p0.y; - run2 = p2.x - p0.x; + rise1 = p1.y - p0.y; + run1 = p1.x - p0.x; + rise2 = p2.y - p0.y; + run2 = p2.x - p0.x; - if (r.y <= p0.y) // + if (r.y <= p0.y) // + { + /* in top half of arc ellipse */ + + if (p1.y <= r.y) { - /* in top half of arc ellipse */ + /* start_line is in the top half and is */ + /* intersected by the current Y scan line */ + if (rise1 == 0) + x1 = p1.x; + else + x1 = p0.x + (r.y-p0.y)*run1/rise1; + start_above = 1; + } + else if ((start_angle >= 0) && (start_angle <= 180)) + { + /* start_line is above middle */ + x1 = p1.x; + start_above = 1; + } + else + { + /* start_line is below middle */ + x1 = r.x + r.width; + start_above = 0; + } + if (x1 < r.x) + x1 = r.x; + if (x1 > r.x+r.width) + x1 = r.x+r.width; - if (p1.y <= r.y) - { - /* start_line is in the top half and is */ - /* intersected by the current Y scan line */ - if (rise1 == 0) - x1 = p1.x; - else - x1 = p0.x + (r.y-p0.y)*run1/rise1; - start_above = 1; - } - else if ((start_angle >= 0) && (start_angle <= 180)) - { - /* start_line is above middle */ - x1 = p1.x; - start_above = 1; - } - else - { - /* start_line is below middle */ - x1 = r.x + r.width; - start_above = 0; - } - if (x1 < r.x) - x1 = r.x; - if (x1 > r.x+r.width) - x1 = r.x+r.width; + if (p2.y <= r.y) + { + /* end_line is in the top half and is */ + /* intersected by the current Y scan line */ + if (rise2 == 0) + x2 = p2.x; + else + x2 = p0.x + (r.y-p0.y)*run2/rise2; + end_above = 1; + } + else if ((end_angle >= 0) && (end_angle <= 180)) + { + /* end_line is above middle */ + x2 = p2.x; + end_above = 1; + } + else + { + /* end_line is below middle */ + x2 = r.x; + end_above = 0; + } - if (p2.y <= r.y) - { - /* end_line is in the top half and is */ - /* intersected by the current Y scan line */ - if (rise2 == 0) - x2 = p2.x; - else - x2 = p0.x + (r.y-p0.y)*run2/rise2; - end_above = 1; - } - else if ((end_angle >= 0) && (end_angle <= 180)) - { - /* end_line is above middle */ - x2 = p2.x; - end_above = 1; - } - else - { - /* end_line is below middle */ - x2 = r.x; - end_above = 0; - } + if (x2 < r.x) x2 = r.x; - if (x2 < r.x) x2 = r.x; + if (x2 > r.x+r.width) x2 = r.x+r.width; - if (x2 > r.x+r.width) x2 = r.x+r.width; + if (start_above && end_above) + { + if (start_angle > end_angle) + { + /* fill outsides of wedge */ + if (! app_fill_rect(g, rect(r.x, r.y, + x1-r.x, r.height), pbrush, Pen)) + return 0; + return app_fill_rect(g, rect(x2, r.y, + r.x+r.width-x2, r.height), pbrush, Pen); + } + else + { + /* fill inside of wedge */ + r.width = x1-x2; + r.x = x2; + return app_fill_rect(g, r, pbrush, Pen); + } + } + else if (start_above) + { + /* fill to the left of the start_line */ + r.width = x1-r.x; + return app_fill_rect(g, r, pbrush, Pen); + } + else if (end_above) + { + /* fill right of end_line */ + r.width = r.x+r.width-x2; + r.x = x2; + return app_fill_rect(g, r, pbrush, Pen); + } + else + { + if (start_angle > end_angle) + return app_fill_rect(g,r, pbrush, Pen); + else + return 1; + } + } + else + { + /* in lower half of arc ellipse */ - if (start_above && end_above) - { - if (start_angle > end_angle) - { - /* fill outsides of wedge */ - if (! app_fill_rect(g, rect(r.x, r.y, - x1-r.x, r.height), pbrush, Pen)) - return 0; - return app_fill_rect(g, rect(x2, r.y, - r.x+r.width-x2, r.height), pbrush, Pen); - } - else - { - /* fill inside of wedge */ - r.width = x1-x2; - r.x = x2; - return app_fill_rect(g, r, pbrush, Pen); - } - } - else if (start_above) - { - /* fill to the left of the start_line */ - r.width = x1-r.x; - return app_fill_rect(g, r, pbrush, Pen); - } - else if (end_above) - { - /* fill right of end_line */ - r.width = r.x+r.width-x2; - r.x = x2; - return app_fill_rect(g, r, pbrush, Pen); - } - else - { - if (start_angle > end_angle) - return app_fill_rect(g,r, pbrush, Pen); - else - return 1; - } - } - else - { - /* in lower half of arc ellipse */ + if (p1.y >= r.y) + { + /* start_line is in the lower half and is */ + /* intersected by the current Y scan line */ + if (rise1 == 0) + x1 = p1.x; + else + x1 = p0.x + (r.y-p0.y)*run1/rise1; + start_above = 0; + } + else if ((start_angle >= 180) && (start_angle <= 360)) + { + /* start_line is below middle */ + x1 = p1.x; + start_above = 0; + } + else + { + /* start_line is above middle */ + x1 = r.x; + start_above = 1; + } + if (x1 < r.x) + x1 = r.x; + if (x1 > r.x+r.width) + x1 = r.x+r.width; - if (p1.y >= r.y) - { - /* start_line is in the lower half and is */ - /* intersected by the current Y scan line */ - if (rise1 == 0) - x1 = p1.x; - else - x1 = p0.x + (r.y-p0.y)*run1/rise1; - start_above = 0; - } - else if ((start_angle >= 180) && (start_angle <= 360)) - { - /* start_line is below middle */ - x1 = p1.x; - start_above = 0; - } - else - { - /* start_line is above middle */ - x1 = r.x; - start_above = 1; - } - if (x1 < r.x) - x1 = r.x; - if (x1 > r.x+r.width) - x1 = r.x+r.width; + if (p2.y >= r.y) + { + /* end_line is in the lower half and is */ + /* intersected by the current Y scan line */ + if (rise2 == 0) + x2 = p2.x; + else + x2 = p0.x + (r.y-p0.y)*run2/rise2; + end_above = 0; + } + else if ((end_angle >= 180) && (end_angle <= 360)) + { + /* end_line is below middle */ + x2 = p2.x; + end_above = 0; + } + else + { + /* end_line is above middle */ + x2 = r.x + r.width; + end_above = 1; + } + if (x2 < r.x) + x2 = r.x; + if (x2 > r.x+r.width) + x2 = r.x+r.width; - if (p2.y >= r.y) - { - /* end_line is in the lower half and is */ - /* intersected by the current Y scan line */ - if (rise2 == 0) - x2 = p2.x; - else - x2 = p0.x + (r.y-p0.y)*run2/rise2; - end_above = 0; - } - else if ((end_angle >= 180) && (end_angle <= 360)) - { - /* end_line is below middle */ - x2 = p2.x; - end_above = 0; - } - else - { - /* end_line is above middle */ - x2 = r.x + r.width; - end_above = 1; - } - if (x2 < r.x) - x2 = r.x; - if (x2 > r.x+r.width) - x2 = r.x+r.width; - - if (start_above && end_above) - { - if (start_angle > end_angle) - return app_fill_rect(g,r, pbrush, Pen); - else - return 1; - } - else if (start_above) - { - /* fill to the left of end_line */ - r.width = x2-r.x; - return app_fill_rect(g,r, pbrush, Pen); - } - else if (end_above) - { - /* fill right of start_line */ - r.width = r.x+r.width-x1; - r.x = x1; - return app_fill_rect(g,r, pbrush, Pen); - } - else - { - if (start_angle > end_angle) - { - /* fill outsides of wedge */ - if (! app_fill_rect(g, rect(r.x, r.y, - x2-r.x, r.height), pbrush, Pen)) - return 0; - return app_fill_rect(g, rect(x1, r.y, - r.x+r.width-x1, r.height), pbrush, Pen); - } - else - { - /* fill inside of wedge */ - r.width = x2-x1; - r.x = x1; - return app_fill_rect(g, r, pbrush, Pen); - } - } - } + if (start_above && end_above) + { + if (start_angle > end_angle) + return app_fill_rect(g,r, pbrush, Pen); + else + return 1; + } + else if (start_above) + { + /* fill to the left of end_line */ + r.width = x2-r.x; + return app_fill_rect(g,r, pbrush, Pen); + } + else if (end_above) + { + /* fill right of start_line */ + r.width = r.x+r.width-x1; + r.x = x1; + return app_fill_rect(g,r, pbrush, Pen); + } + else + { + if (start_angle > end_angle) + { + /* fill outsides of wedge */ + if (! app_fill_rect(g, rect(r.x, r.y, + x2-r.x, r.height), pbrush, Pen)) + return 0; + return app_fill_rect(g, rect(x1, r.y, + r.x+r.width-x1, r.height), pbrush, Pen); + } + else + { + /* fill inside of wedge */ + r.width = x2-x1; + r.x = x1; + return app_fill_rect(g, r, pbrush, Pen); + } + } + } } /* @@ -608,110 +620,125 @@ int FASTCALL app_fill_ellipse(DC *g, Rect r, PBRUSH pbrush) { - /* e(x,y) = b*b*x*x + a*a*y*y - a*a*b*b */ + /* e(x,y) = b*b*x*x + a*a*y*y - a*a*b*b */ - int a = r.width / 2; - int b = r.height / 2; - int x = 0; - int y = b; - long a2 = a*a; - long b2 = b*b; - long xcrit = (3 * a2 / 4) + 1; - long ycrit = (3 * b2 / 4) + 1; - long t = b2 + a2 - 2*a2*b; /* t = e(x+1,y-1) */ - long dxt = b2*(3+x+x); - long dyt = a2*(3-y-y); - int d2xt = b2+b2; - int d2yt = a2+a2; - Rect r1, r2; - int result = 1; + int a = r.width / 2; + int b = r.height / 2; + int x = 0; + int y = b; + long a2 = a*a; + long b2 = b*b; + long xcrit = (3 * a2 / 4) + 1; + long ycrit = (3 * b2 / 4) + 1; + long t = b2 + a2 - 2*a2*b; /* t = e(x+1,y-1) */ + long dxt = b2*(3+x+x); + long dyt = a2*(3-y-y); + int d2xt = b2+b2; + int d2yt = a2+a2; + Rect r1, r2; + int result = 1; // START_DEBUG(); - if ((r.width <= 2) || (r.height <= 2)) - return app_fill_rect(g, r, pbrush, FALSE); + if ((r.width <= 2) || (r.height <= 2)) + return app_fill_rect(g, r, pbrush, FALSE); - r1.x = r.x + a; - r1.y = r.y; - r1.width = r.width & 1; /* i.e. if width is odd */ - r1.height = 1; + r1.x = r.x + a; + r1.y = r.y; + r1.width = r.width & 1; /* i.e. if width is odd */ + r1.height = 1; - r2 = r1; - r2.y = r.y + r.height - 1; + r2 = r1; + r2.y = r.y + r.height - 1; - while (y > 0) - { - if (t + a2*y < xcrit) { /* e(x+1,y-1/2) <= 0 */ - /* move outwards to encounter edge */ - x += 1; - t += dxt; - dxt += d2xt; + while (y > 0) + { + if (t + a2*y < xcrit) /* e(x+1,y-1/2) <= 0 */ + { + /* move outwards to encounter edge */ + x += 1; + t += dxt; + dxt += d2xt; - /* move outwards */ - r1.x -= 1; r1.width += 2; - r2.x -= 1; r2.width += 2; - } - else if (t - b2*x >= ycrit) { /* e(x+1/2,y-1) > 0 */ - /* drop down one line */ - y -= 1; - t += dyt; - dyt += d2yt; + /* move outwards */ + r1.x -= 1; + r1.width += 2; + r2.x -= 1; + r2.width += 2; + } + else if (t - b2*x >= ycrit) /* e(x+1/2,y-1) > 0 */ + { + /* drop down one line */ + y -= 1; + t += dyt; + dyt += d2yt; - /* enlarge rectangles */ - r1.height += 1; - r2.height += 1; r2.y -= 1; - } - else { - /* drop diagonally down and out */ - x += 1; - y -= 1; - t += dxt + dyt; - dxt += d2xt; - dyt += d2yt; + /* enlarge rectangles */ + r1.height += 1; + r2.height += 1; + r2.y -= 1; + } + else + { + /* drop diagonally down and out */ + x += 1; + y -= 1; + t += dxt + dyt; + dxt += d2xt; + dyt += d2yt; - if ((r1.width > 0) && (r1.height > 0)) - { - /* draw rectangles first */ + if ((r1.width > 0) && (r1.height > 0)) + { + /* draw rectangles first */ - if (r1.y+r1.height < r2.y) { - /* distinct rectangles */ - result &= app_fill_rect(g, r1, pbrush, FALSE); - result &= app_fill_rect(g, r2, pbrush, FALSE); - } + if (r1.y+r1.height < r2.y) + { + /* distinct rectangles */ + result &= app_fill_rect(g, r1, pbrush, FALSE); + result &= app_fill_rect(g, r2, pbrush, FALSE); + } - /* move down */ - r1.y += r1.height; r1.height = 1; - r2.y -= 1; r2.height = 1; - } - else { - /* skipped pixels on initial diagonal */ + /* move down */ + r1.y += r1.height; + r1.height = 1; + r2.y -= 1; + r2.height = 1; + } + else + { + /* skipped pixels on initial diagonal */ - /* enlarge, rather than moving down */ - r1.height += 1; - r2.height += 1; r2.y -= 1; - } + /* enlarge, rather than moving down */ + r1.height += 1; + r2.height += 1; + r2.y -= 1; + } - /* move outwards */ - r1.x -= 1; r1.width += 2; - r2.x -= 1; r2.width += 2; - } - } - if (r1.y < r2.y) { - /* overlap */ - r1.x = r.x; - r1.width = r.width; - r1.height = r2.y+r2.height-r1.y; - result &= app_fill_rect(g, r1, pbrush, FALSE); - } - else if (x <= a) { - /* crossover, draw final line */ - r1.x = r.x; - r1.width = r.width; - r1.height = r1.y+r1.height-r2.y; - r1.y = r2.y; - result &= app_fill_rect(g, r1, pbrush, FALSE); - } - return result; + /* move outwards */ + r1.x -= 1; + r1.width += 2; + r2.x -= 1; + r2.width += 2; + } + } + if (r1.y < r2.y) + { + /* overlap */ + r1.x = r.x; + r1.width = r.width; + r1.height = r2.y+r2.height-r1.y; + result &= app_fill_rect(g, r1, pbrush, FALSE); + } + else if (x <= a) + { + /* crossover, draw final line */ + r1.x = r.x; + r1.width = r.width; + r1.height = r1.y+r1.height-r2.y; + r1.y = r2.y; + result &= app_fill_rect(g, r1, pbrush, FALSE); + } + return result; } static @@ -719,465 +746,495 @@ POINT FASTCALL app_boundary_point(Rect r, int angle) { - int cx, cy; - double tangent; + int cx, cy; + double tangent; - cx = r.width; - cx /= 2; - cx += r.x; + cx = r.width; + cx /= 2; + cx += r.x; - cy = r.height; - cy /= 2; - cy += r.y; + cy = r.height; + cy /= 2; + cy += r.y; - if (angle == 0) - return pt(r.x+r.width, cy); - else if (angle == 45) - return pt(r.x+r.width, r.y); - else if (angle == 90) - return pt(cx, r.y); - else if (angle == 135) - return pt(r.x, r.y); - else if (angle == 180) - return pt(r.x, cy); - else if (angle == 225) - return pt(r.x, r.y+r.height); - else if (angle == 270) - return pt(cx, r.y+r.height); - else if (angle == 315) - return pt(r.x+r.width, r.y+r.height); + if (angle == 0) + return pt(r.x+r.width, cy); + else if (angle == 45) + return pt(r.x+r.width, r.y); + else if (angle == 90) + return pt(cx, r.y); + else if (angle == 135) + return pt(r.x, r.y); + else if (angle == 180) + return pt(r.x, cy); + else if (angle == 225) + return pt(r.x, r.y+r.height); + else if (angle == 270) + return pt(cx, r.y+r.height); + else if (angle == 315) + return pt(r.x+r.width, r.y+r.height); - tangent = tan(DEGREES_TO_RADIANS(angle)); + tangent = tan(DEGREES_TO_RADIANS(angle)); - if ((angle > 45) && (angle < 135)) - return pt((int)(cx+r.height/tangent/2), r.y); - else if ((angle > 225) && (angle < 315)) - return pt((int)(cx-r.height/tangent/2), r.y+r.height); - else if ((angle > 135) && (angle < 225)) - return pt(r.x, (int)(cy+r.width*tangent/2)); - else - return pt(r.x+r.width, (int)(cy-r.width*tangent/2)); + if ((angle > 45) && (angle < 135)) + return pt((int)(cx+r.height/tangent/2), r.y); + else if ((angle > 225) && (angle < 315)) + return pt((int)(cx-r.height/tangent/2), r.y+r.height); + else if ((angle > 135) && (angle < 225)) + return pt(r.x, (int)(cy+r.width*tangent/2)); + else + return pt(r.x+r.width, (int)(cy-r.width*tangent/2)); } int FASTCALL app_fill_arc(DC *g, Rect r, int start_angle, int end_angle, PBRUSH pbrush, BOOL Chord) { - /* e(x,y) = b*b*x*x + a*a*y*y - a*a*b*b */ + /* e(x,y) = b*b*x*x + a*a*y*y - a*a*b*b */ - int a = r.width / 2; - int b = r.height / 2; - int x = 0; - int y = b; - long a2 = a*a; - long b2 = b*b; - long xcrit = (3 * a2 / 4) + 1; - long ycrit = (3 * b2 / 4) + 1; - long t = b2 + a2 - 2*a2*b; /* t = e(x+1,y-1) */ - long dxt = b2*(3+x+x); - long dyt = a2*(3-y-y); - int d2xt = b2+b2; - int d2yt = a2+a2; - Rect r1, r2; - int movedown, moveout; - int result = 1; + int a = r.width / 2; + int b = r.height / 2; + int x = 0; + int y = b; + long a2 = a*a; + long b2 = b*b; + long xcrit = (3 * a2 / 4) + 1; + long ycrit = (3 * b2 / 4) + 1; + long t = b2 + a2 - 2*a2*b; /* t = e(x+1,y-1) */ + long dxt = b2*(3+x+x); + long dyt = a2*(3-y-y); + int d2xt = b2+b2; + int d2yt = a2+a2; + Rect r1, r2; + int movedown, moveout; + int result = 1; - /* line descriptions */ - POINT p0, p1, p2; + /* line descriptions */ + POINT p0, p1, p2; // START_DEBUG(); - /* if angles differ by 360 degrees or more, close the shape */ - if ((start_angle + 360 <= end_angle) || - (start_angle - 360 >= end_angle)) - { - return app_fill_ellipse(g, r, pbrush); - } + /* if angles differ by 360 degrees or more, close the shape */ + if ((start_angle + 360 <= end_angle) || + (start_angle - 360 >= end_angle)) + { + return app_fill_ellipse(g, r, pbrush); + } - /* make start_angle >= 0 and <= 360 */ - while (start_angle < 0) - start_angle += 360; - start_angle %= 360; + /* make start_angle >= 0 and <= 360 */ + while (start_angle < 0) + start_angle += 360; + start_angle %= 360; - /* make end_angle >= 0 and <= 360 */ - while (end_angle < 0) - end_angle += 360; - end_angle %= 360; + /* make end_angle >= 0 and <= 360 */ + while (end_angle < 0) + end_angle += 360; + end_angle %= 360; - /* draw nothing if the angles are equal */ - if (start_angle == end_angle) - return 1; + /* draw nothing if the angles are equal */ + if (start_angle == end_angle) + return 1; - /* find arc wedge line end points */ - p1 = app_boundary_point(r, start_angle); - p2 = app_boundary_point(r, end_angle); - if (Chord) - p0 = pt((p1.x+p2.x)/2,(p1.y+p2.y)/2); - else - p0 = pt(r.x + r.width/2, r.y + r.height/2); + /* find arc wedge line end points */ + p1 = app_boundary_point(r, start_angle); + p2 = app_boundary_point(r, end_angle); + if (Chord) + p0 = pt((p1.x+p2.x)/2,(p1.y+p2.y)/2); + else + p0 = pt(r.x + r.width/2, r.y + r.height/2); - /* initialise rectangles to be drawn */ - r1.x = r.x + a; - r1.y = r.y; - r1.width = r.width & 1; /* i.e. if width is odd */ - r1.height = 1; + /* initialise rectangles to be drawn */ + r1.x = r.x + a; + r1.y = r.y; + r1.width = r.width & 1; /* i.e. if width is odd */ + r1.height = 1; - r2 = r1; - r2.y = r.y + r.height - 1; + r2 = r1; + r2.y = r.y + r.height - 1; - while (y > 0) - { - moveout = movedown = 0; + while (y > 0) + { + moveout = movedown = 0; - if (t + a2*y < xcrit) { /* e(x+1,y-1/2) <= 0 */ - /* move outwards to encounter edge */ - x += 1; - t += dxt; - dxt += d2xt; + if (t + a2*y < xcrit) /* e(x+1,y-1/2) <= 0 */ + { + /* move outwards to encounter edge */ + x += 1; + t += dxt; + dxt += d2xt; - moveout = 1; - } - else if (t - b2*x >= ycrit) { /* e(x+1/2,y-1) > 0 */ - /* drop down one line */ - y -= 1; - t += dyt; - dyt += d2yt; + moveout = 1; + } + else if (t - b2*x >= ycrit) /* e(x+1/2,y-1) > 0 */ + { + /* drop down one line */ + y -= 1; + t += dyt; + dyt += d2yt; - movedown = 1; - } - else { - /* drop diagonally down and out */ - x += 1; - y -= 1; - t += dxt + dyt; - dxt += d2xt; - dyt += d2yt; + movedown = 1; + } + else + { + /* drop diagonally down and out */ + x += 1; + y -= 1; + t += dxt + dyt; + dxt += d2xt; + dyt += d2yt; - moveout = 1; - movedown = 1; - } + moveout = 1; + movedown = 1; + } - if (movedown) { - if (r1.width == 0) { - r1.x -= 1; r1.width += 2; - r2.x -= 1; r2.width += 2; - moveout = 0; - } + if (movedown) + { + if (r1.width == 0) + { + r1.x -= 1; + r1.width += 2; + r2.x -= 1; + r2.width += 2; + moveout = 0; + } - if (r1.x < r.x) - r1.x = r2.x = r.x; - if (r1.width > r.width) - r1.width = r2.width = r.width; - if (r1.y == r2.y-1) { - r1.x = r2.x = r.x; - r1.width = r2.width = r.width; - } + if (r1.x < r.x) + r1.x = r2.x = r.x; + if (r1.width > r.width) + r1.width = r2.width = r.width; + if (r1.y == r2.y-1) + { + r1.x = r2.x = r.x; + r1.width = r2.width = r.width; + } - if ((r1.width > 0) && (r1.y+r1.height < r2.y)) { - /* distinct rectangles */ - result &= app_fill_arc_rect(g, r1, - p0, p1, p2, - start_angle, end_angle, pbrush, FALSE); - result &= app_fill_arc_rect(g, r2, - p0, p1, p2, - start_angle, end_angle, pbrush, FALSE); - } + if ((r1.width > 0) && (r1.y+r1.height < r2.y)) + { + /* distinct rectangles */ + result &= app_fill_arc_rect(g, r1, + p0, p1, p2, + start_angle, end_angle, pbrush, FALSE); + result &= app_fill_arc_rect(g, r2, + p0, p1, p2, + start_angle, end_angle, pbrush, FALSE); + } - /* move down */ - r1.y += 1; - r2.y -= 1; - } + /* move down */ + r1.y += 1; + r2.y -= 1; + } - if (moveout) { - /* move outwards */ - r1.x -= 1; r1.width += 2; - r2.x -= 1; r2.width += 2; - } - } - if (r1.y < r2.y) { - /* overlap */ - r1.x = r.x; - r1.width = r.width; - r1.height = r2.y+r2.height-r1.y; - while (r1.height > 0) { - result &= app_fill_arc_rect(g, - rect(r1.x, r1.y, r1.width, 1), - p0, p1, p2, start_angle, end_angle, pbrush, FALSE); - r1.y += 1; - r1.height -= 1; - } - } - else if (x <= a) { - /* crossover, draw final line */ - r1.x = r.x; - r1.width = r.width; - r1.height = r1.y+r1.height-r2.y; - r1.y = r2.y; - while (r1.height > 0) { - result &= app_fill_arc_rect(g, - rect(r1.x, r1.y, r1.width, 1), - p0, p1, p2, start_angle, end_angle, pbrush, FALSE); - r1.y += 1; - r1.height -= 1; - } - } - return result; + if (moveout) + { + /* move outwards */ + r1.x -= 1; + r1.width += 2; + r2.x -= 1; + r2.width += 2; + } + } + if (r1.y < r2.y) + { + /* overlap */ + r1.x = r.x; + r1.width = r.width; + r1.height = r2.y+r2.height-r1.y; + while (r1.height > 0) + { + result &= app_fill_arc_rect(g, + rect(r1.x, r1.y, r1.width, 1), + p0, p1, p2, start_angle, end_angle, pbrush, FALSE); + r1.y += 1; + r1.height -= 1; + } + } + else if (x <= a) + { + /* crossover, draw final line */ + r1.x = r.x; + r1.width = r.width; + r1.height = r1.y+r1.height-r2.y; + r1.y = r2.y; + while (r1.height > 0) + { + result &= app_fill_arc_rect(g, + rect(r1.x, r1.y, r1.width, 1), + p0, p1, p2, start_angle, end_angle, pbrush, FALSE); + r1.y += 1; + r1.height -= 1; + } + } + return result; } int app_draw_arc(DC *g, Rect r, int start_angle, int end_angle, PBRUSH pbrushPen, BOOL Chord) { - /* Outer ellipse: e(x,y) = b*b*x*x + a*a*y*y - a*a*b*b */ + /* Outer ellipse: e(x,y) = b*b*x*x + a*a*y*y - a*a*b*b */ - int a = r.width / 2; - int b = r.height / 2; - int x = 0; - int y = b; - long a2 = a*a; - long b2 = b*b; - long xcrit = (3 * a2 / 4) + 1; - long ycrit = (3 * b2 / 4) + 1; - long t = b2 + a2 - 2*a2*b; /* t = e(x+1,y-1) */ - long dxt = b2*(3+x+x); - long dyt = a2*(3-y-y); - int d2xt = b2+b2; - int d2yt = a2+a2; + int a = r.width / 2; + int b = r.height / 2; + int x = 0; + int y = b; + long a2 = a*a; + long b2 = b*b; + long xcrit = (3 * a2 / 4) + 1; + long ycrit = (3 * b2 / 4) + 1; + long t = b2 + a2 - 2*a2*b; /* t = e(x+1,y-1) */ + long dxt = b2*(3+x+x); + long dyt = a2*(3-y-y); + int d2xt = b2+b2; + int d2yt = a2+a2; - int w = pbrushPen->ptPenWidth.x; + int w = pbrushPen->ptPenWidth.x; - /* Inner ellipse: E(X,Y) = B*B*X*X + A*A*Y*Y - A*A*B*B */ + /* Inner ellipse: E(X,Y) = B*B*X*X + A*A*Y*Y - A*A*B*B */ - int A = a-w > 0 ? a-w : 0; - int B = b-w > 0 ? b-w : 0; - int X = 0; - int Y = B; - long A2 = A*A; - long B2 = B*B; - long XCRIT = (3 * A2 / 4) + 1; - long YCRIT = (3 * B2 / 4) + 1; - long T = B2 + A2 - 2*A2*B; /* T = E(X+1,Y-1) */ - long DXT = B2*(3+X+X); - long DYT = A2*(3-Y-Y); - int D2XT = B2+B2; - int D2YT = A2+A2; + int A = a-w > 0 ? a-w : 0; + int B = b-w > 0 ? b-w : 0; + int X = 0; + int Y = B; + long A2 = A*A; + long B2 = B*B; + long XCRIT = (3 * A2 / 4) + 1; + long YCRIT = (3 * B2 / 4) + 1; + long T = B2 + A2 - 2*A2*B; /* T = E(X+1,Y-1) */ + long DXT = B2*(3+X+X); + long DYT = A2*(3-Y-Y); + int D2XT = B2+B2; + int D2YT = A2+A2; - /* arc rectangle calculations */ - int movedown, moveout; - int innerX = 0, prevx, prevy, W; - Rect r1, r2; - int result = 1; + /* arc rectangle calculations */ + int movedown, moveout; + int innerX = 0, prevx, prevy, W; + Rect r1, r2; + int result = 1; - /* line descriptions */ - POINT p0, p1, p2; + /* line descriptions */ + POINT p0, p1, p2; // START_DEBUG(); - /* if angles differ by 360 degrees or more, close the shape */ - if ((start_angle + 360 <= end_angle) || - (start_angle - 360 >= end_angle)) - { - return app_draw_ellipse(g, r, pbrushPen); - } + /* if angles differ by 360 degrees or more, close the shape */ + if ((start_angle + 360 <= end_angle) || + (start_angle - 360 >= end_angle)) + { + return app_draw_ellipse(g, r, pbrushPen); + } - /* make start_angle >= 0 and <= 360 */ - while (start_angle < 0) - start_angle += 360; - start_angle %= 360; + /* make start_angle >= 0 and <= 360 */ + while (start_angle < 0) + start_angle += 360; + start_angle %= 360; - /* make end_angle >= 0 and <= 360 */ - while (end_angle < 0) - end_angle += 360; - end_angle %= 360; + /* make end_angle >= 0 and <= 360 */ + while (end_angle < 0) + end_angle += 360; + end_angle %= 360; - /* draw nothing if the angles are equal */ - if (start_angle == end_angle) - return 1; + /* draw nothing if the angles are equal */ + if (start_angle == end_angle) + return 1; - /* find arc wedge line end points */ - p1 = app_boundary_point(r, start_angle); - p2 = app_boundary_point(r, end_angle); - if (Chord) - p0 = pt((p1.x+p2.x)/2,(p1.y+p2.y)/2); - else - p0 = pt(r.x + r.width/2, r.y + r.height/2); + /* find arc wedge line end points */ + p1 = app_boundary_point(r, start_angle); + p2 = app_boundary_point(r, end_angle); + if (Chord) + p0 = pt((p1.x+p2.x)/2,(p1.y+p2.y)/2); + else + p0 = pt(r.x + r.width/2, r.y + r.height/2); - /* determine ellipse rectangles */ - r1.x = r.x + a; - r1.y = r.y; - r1.width = r.width & 1; /* i.e. if width is odd */ - r1.height = 1; + /* determine ellipse rectangles */ + r1.x = r.x + a; + r1.y = r.y; + r1.width = r.width & 1; /* i.e. if width is odd */ + r1.height = 1; - r2 = r1; - r2.y = r.y + r.height - 1; + r2 = r1; + r2.y = r.y + r.height - 1; - prevx = r1.x; - prevy = r1.y; + prevx = r1.x; + prevy = r1.y; - while (y > 0) - { - while (Y == y) - { - innerX = X; + while (y > 0) + { + while (Y == y) + { + innerX = X; - if (T + A2*Y < XCRIT) /* E(X+1,Y-1/2) <= 0 */ - { - /* move outwards to encounter edge */ - X += 1; - T += DXT; - DXT += D2XT; - } - else if (T - B2*X >= YCRIT) /* e(x+1/2,y-1) > 0 */ - { - /* drop down one line */ - Y -= 1; - T += DYT; - DYT += D2YT; - } - else { - /* drop diagonally down and out */ - X += 1; - Y -= 1; - T += DXT + DYT; - DXT += D2XT; - DYT += D2YT; - } - } + if (T + A2*Y < XCRIT) /* E(X+1,Y-1/2) <= 0 */ + { + /* move outwards to encounter edge */ + X += 1; + T += DXT; + DXT += D2XT; + } + else if (T - B2*X >= YCRIT) /* e(x+1/2,y-1) > 0 */ + { + /* drop down one line */ + Y -= 1; + T += DYT; + DYT += D2YT; + } + else + { + /* drop diagonally down and out */ + X += 1; + Y -= 1; + T += DXT + DYT; + DXT += D2XT; + DYT += D2YT; + } + } - movedown = moveout = 0; + movedown = moveout = 0; - W = x - innerX; - if (r1.x + W < prevx) - W = prevx - r1.x; - if (W < w) - W = w; + W = x - innerX; + if (r1.x + W < prevx) + W = prevx - r1.x; + if (W < w) + W = w; - if (t + a2*y < xcrit) /* e(x+1,y-1/2) <= 0 */ - { - /* move outwards to encounter edge */ - x += 1; - t += dxt; - dxt += d2xt; + if (t + a2*y < xcrit) /* e(x+1,y-1/2) <= 0 */ + { + /* move outwards to encounter edge */ + x += 1; + t += dxt; + dxt += d2xt; - moveout = 1; - } - else if (t - b2*x >= ycrit) /* e(x+1/2,y-1) > 0 */ - { - /* drop down one line */ - y -= 1; - t += dyt; - dyt += d2yt; + moveout = 1; + } + else if (t - b2*x >= ycrit) /* e(x+1/2,y-1) > 0 */ + { + /* drop down one line */ + y -= 1; + t += dyt; + dyt += d2yt; - movedown = 1; - } - else { - /* drop diagonally down and out */ - x += 1; - y -= 1; - t += dxt + dyt; - dxt += d2xt; - dyt += d2yt; + movedown = 1; + } + else + { + /* drop diagonally down and out */ + x += 1; + y -= 1; + t += dxt + dyt; + dxt += d2xt; + dyt += d2yt; - movedown = 1; - moveout = 1; - } + movedown = 1; + moveout = 1; + } - if (movedown) { - if (r1.width == 0) { - r1.x -= 1; r1.width += 2; - r2.x -= 1; r2.width += 2; - moveout = 0; - } + if (movedown) + { + if (r1.width == 0) + { + r1.x -= 1; + r1.width += 2; + r2.x -= 1; + r2.width += 2; + moveout = 0; + } - if (r1.x < r.x) - r1.x = r2.x = r.x; - if (r1.width > r.width) - r1.width = r2.width = r.width; - if (r1.y == r2.y-1) { - r1.x = r2.x = r.x; - r1.width = r2.width = r.width; - } + if (r1.x < r.x) + r1.x = r2.x = r.x; + if (r1.width > r.width) + r1.width = r2.width = r.width; + if (r1.y == r2.y-1) + { + r1.x = r2.x = r.x; + r1.width = r2.width = r.width; + } - if ((r1.y < r.y+w) || (r1.x+W >= r1.x+r1.width-W)) - { - result &= app_fill_arc_rect(g, r1, - p0, p1, p2, - start_angle, end_angle, pbrushPen, TRUE); - result &= app_fill_arc_rect(g, r2, - p0, p1, p2, - start_angle, end_angle, pbrushPen, TRUE); + if ((r1.y < r.y+w) || (r1.x+W >= r1.x+r1.width-W)) + { + result &= app_fill_arc_rect(g, r1, + p0, p1, p2, + start_angle, end_angle, pbrushPen, TRUE); + result &= app_fill_arc_rect(g, r2, + p0, p1, p2, + start_angle, end_angle, pbrushPen, TRUE); - prevx = r1.x; - prevy = r1.y; - } - else if (r1.y+r1.height < r2.y) - { - /* draw distinct rectangles */ - result &= app_fill_arc_rect(g, rect( - r1.x,r1.y,W,1), - p0, p1, p2, - start_angle, end_angle, pbrushPen, TRUE); - result &= app_fill_arc_rect(g, rect( - r1.x+r1.width-W,r1.y,W,1), - p0, p1, p2, - start_angle, end_angle, pbrushPen, TRUE); - result &= app_fill_arc_rect(g, rect( - r2.x,r2.y,W,1), - p0, p1, p2, - start_angle, end_angle, pbrushPen, TRUE); - result &= app_fill_arc_rect(g, rect( - r2.x+r2.width-W,r2.y,W,1), - p0, p1, p2, - start_angle, end_angle, pbrushPen, TRUE); + prevx = r1.x; + prevy = r1.y; + } + else if (r1.y+r1.height < r2.y) + { + /* draw distinct rectangles */ + result &= app_fill_arc_rect(g, rect( + r1.x,r1.y,W,1), + p0, p1, p2, + start_angle, end_angle, pbrushPen, TRUE); + result &= app_fill_arc_rect(g, rect( + r1.x+r1.width-W,r1.y,W,1), + p0, p1, p2, + start_angle, end_angle, pbrushPen, TRUE); + result &= app_fill_arc_rect(g, rect( + r2.x,r2.y,W,1), + p0, p1, p2, + start_angle, end_angle, pbrushPen, TRUE); + result &= app_fill_arc_rect(g, rect( + r2.x+r2.width-W,r2.y,W,1), + p0, p1, p2, + start_angle, end_angle, pbrushPen, TRUE); - prevx = r1.x; - prevy = r1.y; - } + prevx = r1.x; + prevy = r1.y; + } - /* move down */ - r1.y += 1; - r2.y -= 1; - } + /* move down */ + r1.y += 1; + r2.y -= 1; + } - if (moveout) { - /* move outwards */ - r1.x -= 1; r1.width += 2; - r2.x -= 1; r2.width += 2; - } - } - if ((x <= a) && (prevy < r2.y)) { - /* draw final lines */ - r1.height = r1.y+r1.height-r2.y; - r1.y = r2.y; + if (moveout) + { + /* move outwards */ + r1.x -= 1; + r1.width += 2; + r2.x -= 1; + r2.width += 2; + } + } + if ((x <= a) && (prevy < r2.y)) + { + /* draw final lines */ + r1.height = r1.y+r1.height-r2.y; + r1.y = r2.y; - W = w; - if (r.x + W != prevx) - W = prevx - r.x; - if (W < w) - W = w; + W = w; + if (r.x + W != prevx) + W = prevx - r.x; + if (W < w) + W = w; - if (W+W >= r.width) { - while (r1.height > 0) { - result &= app_fill_arc_rect(g, rect(r.x, - r1.y, r.width, 1), p0, p1, p2, - start_angle, end_angle, pbrushPen, TRUE); - r1.y += 1; - r1.height -= 1; - } - return result; - } + if (W+W >= r.width) + { + while (r1.height > 0) + { + result &= app_fill_arc_rect(g, rect(r.x, + r1.y, r.width, 1), p0, p1, p2, + start_angle, end_angle, pbrushPen, TRUE); + r1.y += 1; + r1.height -= 1; + } + return result; + } - while (r1.height > 0) { - result &= app_fill_arc_rect(g, rect(r.x, r1.y, - W, 1), p0, p1, p2, - start_angle, end_angle, pbrushPen, TRUE); - result &= app_fill_arc_rect(g, rect(r.x+r.width-W, - r1.y, W, 1), p0, p1, p2, - start_angle, end_angle, pbrushPen, TRUE); - r1.y += 1; - r1.height -= 1; - } - } + while (r1.height > 0) + { + result &= app_fill_arc_rect(g, rect(r.x, r1.y, + W, 1), p0, p1, p2, + start_angle, end_angle, pbrushPen, TRUE); + result &= app_fill_arc_rect(g, rect(r.x+r.width-W, + r1.y, W, 1), p0, p1, p2, + start_angle, end_angle, pbrushPen, TRUE); + r1.y += 1; + r1.height -= 1; + } + } - return result; + return result; } /* ReactOS Interface *********************************************************/ @@ -1192,67 +1249,65 @@ IntFillRect( DC *dc, PBRUSH pbrush, BOOL Pen) { - DWORD ROP = PATCOPY; - RECTL DestRect; - SURFACE *psurf; - POINTL BrushOrigin; - BOOL Ret = TRUE; - PDC_ATTR pdcattr; + DWORD ROP = PATCOPY; + RECTL DestRect; + SURFACE *psurf; + POINTL BrushOrigin; + BOOL Ret = TRUE; + PDC_ATTR pdcattr; - ASSERT(pbrush); + ASSERT(pbrush); - psurf = dc->dclevel.pSurface; - if (psurf == NULL) - { - EngSetLastError(ERROR_INVALID_HANDLE); - return 0; - } + psurf = dc->dclevel.pSurface; + if (psurf == NULL) + { + EngSetLastError(ERROR_INVALID_HANDLE); + return 0; + } - if (!(pbrush->flAttrs & GDIBRUSH_IS_NULL)) - { - pdcattr = dc->pdcattr; + if (!(pbrush->flAttrs & GDIBRUSH_IS_NULL)) + { + pdcattr = dc->pdcattr; - /* fix negative spaces */ - if (Width < 0) - { - XLeft += Width; - Width = 0 - Width; - } - if (Height < 0) - { - YLeft += Height; - Height = 0 - Height; - } + /* fix negative spaces */ + if (Width < 0) + { + XLeft += Width; + Width = 0 - Width; + } + if (Height < 0) + { + YLeft += Height; + Height = 0 - Height; + } - DestRect.left = XLeft; - DestRect.right = XLeft + Width; + DestRect.left = XLeft; + DestRect.right = XLeft + Width; - DestRect.top = YLeft; - DestRect.bottom = YLeft + Height; + DestRect.top = YLeft; + DestRect.bottom = YLeft + Height; - BrushOrigin.x = pbrush->ptOrigin.x; - BrushOrigin.y = pbrush->ptOrigin.y; + BrushOrigin.x = pbrush->ptOrigin.x; + BrushOrigin.y = pbrush->ptOrigin.y; - if (pdcattr->jROP2 == R2_XORPEN) - ROP = PATINVERT; - else - ROP = PATCOPY; + if (pdcattr->jROP2 == R2_XORPEN) + ROP = PATINVERT; - Ret = IntEngBitBlt( - &psurf->SurfObj, - NULL, - NULL, - dc->rosdc.CombinedClip, - NULL, - &DestRect, - NULL, - NULL, - Pen ? &dc->eboLine.BrushObject : &dc->eboFill.BrushObject, - &BrushOrigin, - ROP3_TO_ROP4(ROP)); - } + Ret = IntEngBitBlt( + &psurf->SurfObj, + NULL, + NULL, + dc->rosdc.CombinedClip, + NULL, + &DestRect, + NULL, + NULL, + Pen ? &dc->eboLine.BrushObject : &dc->eboFill.BrushObject, + &BrushOrigin, + ROP3_TO_ROP4(ROP)); + } - return (int)Ret; + return (int)Ret; } BOOL @@ -1266,29 +1321,29 @@ IntFillArc( PDC dc, double EndArc, ARCTYPE arctype) { - PDC_ATTR pdcattr; - PBRUSH pbrush; - int Start = ceil(StartArc); - int End = ceil(EndArc); - BOOL Chord = (arctype == GdiTypeChord), ret; + PDC_ATTR pdcattr; + PBRUSH pbrush; + int Start = ceil(StartArc); + int End = ceil(EndArc); + BOOL Chord = (arctype == GdiTypeChord), ret; - pdcattr = dc->pdcattr; + pdcattr = dc->pdcattr; - pbrush = BRUSH_LockBrush(pdcattr->hbrush); - if (!pbrush) - { - DPRINT1("FillArc Fail\n"); - EngSetLastError(ERROR_INTERNAL_ERROR); - return FALSE; - } - // Sort out alignment here. - ret = app_fill_arc(dc, rect( XLeft, YLeft, Width, Height), - (dc->dclevel.flPath & DCPATH_CLOCKWISE) ? -End : -Start, - (dc->dclevel.flPath & DCPATH_CLOCKWISE) ? -Start : -End, - pbrush, Chord); + pbrush = BRUSH_LockBrush(pdcattr->hbrush); + if (!pbrush) + { + DPRINT1("FillArc Fail\n"); + EngSetLastError(ERROR_INTERNAL_ERROR); + return FALSE; + } + // Sort out alignment here. + ret = app_fill_arc(dc, rect( XLeft, YLeft, Width, Height), + (dc->dclevel.flPath & DCPATH_CLOCKWISE) ? -End : -Start, + (dc->dclevel.flPath & DCPATH_CLOCKWISE) ? -Start : -End, + pbrush, Chord); - BRUSH_UnlockBrush(pbrush); - return ret; + BRUSH_UnlockBrush(pbrush); + return ret; } BOOL @@ -1303,14 +1358,14 @@ IntDrawArc( PDC dc, ARCTYPE arctype, PBRUSH pbrush) { - int Start = ceil(StartArc); - int End = ceil(EndArc); - BOOL Chord = (arctype == GdiTypeChord); - // Sort out alignment here. - return app_draw_arc(dc, rect( XLeft, YLeft, Width, Height), - (dc->dclevel.flPath & DCPATH_CLOCKWISE) ? -End : -Start, - (dc->dclevel.flPath & DCPATH_CLOCKWISE) ? -Start : -End, - pbrush, Chord); + int Start = ceil(StartArc); + int End = ceil(EndArc); + BOOL Chord = (arctype == GdiTypeChord); + // Sort out alignment here. + return app_draw_arc(dc, rect( XLeft, YLeft, Width, Height), + (dc->dclevel.flPath & DCPATH_CLOCKWISE) ? -End : -Start, + (dc->dclevel.flPath & DCPATH_CLOCKWISE) ? -Start : -End, + pbrush, Chord); } BOOL @@ -1322,7 +1377,7 @@ IntDrawEllipse( PDC dc, INT Height, PBRUSH pbrush) { - return (BOOL)app_draw_ellipse(dc, rect( XLeft, YLeft, Width, Height), pbrush); + return (BOOL)app_draw_ellipse(dc, rect( XLeft, YLeft, Width, Height), pbrush); } BOOL @@ -1334,7 +1389,7 @@ IntFillEllipse( PDC dc, INT Height, PBRUSH pbrush) { - return (BOOL)app_fill_ellipse(dc, rect( XLeft, YLeft, Width, Height), pbrush); + return (BOOL)app_fill_ellipse(dc, rect( XLeft, YLeft, Width, Height), pbrush); } BOOL @@ -1348,58 +1403,58 @@ IntFillRoundRect( PDC dc, INT Hellipse, PBRUSH pbrush) { - Rect r; - int rx, ry; /* radius in x and y directions */ + Rect r; + int rx, ry; /* radius in x and y directions */ - // x y Width Height - r = rect( Left, Top, abs(Right-Left), abs(Bottom-Top)); - rx = Wellipse/2; - ry = Hellipse/2; + // x y Width Height + r = rect( Left, Top, abs(Right-Left), abs(Bottom-Top)); + rx = Wellipse/2; + ry = Hellipse/2; - if (Wellipse > r.width) - { - if (Hellipse > r.height) // > W > H - app_fill_ellipse(dc, r, pbrush); - else // > W < H - { - app_fill_arc(dc, rect( r.x, r.y, r.width - 1, Hellipse), - 0, 180, pbrush,FALSE); - app_fill_arc(dc, rect(r.x, Bottom - Hellipse - 1, r.width - 1, Hellipse), - 180, 360, pbrush, FALSE); - } - } - else if(Hellipse > r.height) // < W > H - { - app_fill_arc(dc, rect(r.x, r.y, Wellipse, r.height - 1), - 90, 270, pbrush, FALSE); - app_fill_arc(dc, rect(Right - Wellipse - 1, r.y, Wellipse, r.height - 1), - 270, 90, pbrush,FALSE); - } - else // < W < H - { - app_fill_arc(dc, rect(r.x, r.y, rx+rx, ry+ry), - 90, 180, pbrush, FALSE); + if (Wellipse > r.width) + { + if (Hellipse > r.height) // > W > H + app_fill_ellipse(dc, r, pbrush); + else // > W < H + { + app_fill_arc(dc, rect( r.x, r.y, r.width - 1, Hellipse), + 0, 180, pbrush,FALSE); + app_fill_arc(dc, rect(r.x, Bottom - Hellipse - 1, r.width - 1, Hellipse), + 180, 360, pbrush, FALSE); + } + } + else if(Hellipse > r.height) // < W > H + { + app_fill_arc(dc, rect(r.x, r.y, Wellipse, r.height - 1), + 90, 270, pbrush, FALSE); + app_fill_arc(dc, rect(Right - Wellipse - 1, r.y, Wellipse, r.height - 1), + 270, 90, pbrush,FALSE); + } + else // < W < H + { + app_fill_arc(dc, rect(r.x, r.y, rx+rx, ry+ry), + 90, 180, pbrush, FALSE); - app_fill_arc(dc, rect(r.x, r.y+r.height-ry-ry, rx+rx, ry+ry), - 180, 270, pbrush, FALSE); + app_fill_arc(dc, rect(r.x, r.y+r.height-ry-ry, rx+rx, ry+ry), + 180, 270, pbrush, FALSE); - app_fill_arc(dc, rect(r.x+r.width-rx-rx, r.y+r.height-ry-ry, rx+rx, ry+ry), - 270, 360, pbrush,FALSE); + app_fill_arc(dc, rect(r.x+r.width-rx-rx, r.y+r.height-ry-ry, rx+rx, ry+ry), + 270, 360, pbrush,FALSE); - app_fill_arc(dc, rect(r.x+r.width-rx-rx, r.y, rx+rx, ry+ry), - 0, 90, pbrush,FALSE); - } - if (Wellipse < r.width) - { - app_fill_rect(dc, rect(r.x+rx, r.y, r.width-rx-rx, ry+1), pbrush, FALSE); - app_fill_rect(dc, rect(r.x+rx, r.y+r.height-ry+1, r.width-rx-rx, ry-1), pbrush, FALSE); - } - if (Hellipse < r.height) - { - app_fill_rect(dc, rect(r.x, r.y+ry+1, r.width, r.height-ry-ry), pbrush, FALSE); - } + app_fill_arc(dc, rect(r.x+r.width-rx-rx, r.y, rx+rx, ry+ry), + 0, 90, pbrush,FALSE); + } + if (Wellipse < r.width) + { + app_fill_rect(dc, rect(r.x+rx, r.y, r.width-rx-rx, ry+1), pbrush, FALSE); + app_fill_rect(dc, rect(r.x+rx, r.y+r.height-ry+1, r.width-rx-rx, ry-1), pbrush, FALSE); + } + if (Hellipse < r.height) + { + app_fill_rect(dc, rect(r.x, r.y+ry+1, r.width, r.height-ry-ry), pbrush, FALSE); + } - return TRUE; + return TRUE; } @@ -1414,62 +1469,62 @@ IntDrawRoundRect( PDC dc, INT Hellipse, PBRUSH pbrushPen) { - Rect r; - int rx, ry; /* radius in x and y directions */ - int w = pbrushPen->ptPenWidth.x; + Rect r; + int rx, ry; /* radius in x and y directions */ + int w = pbrushPen->ptPenWidth.x; - r = rect( Left, Top, abs(Right-Left), abs(Bottom-Top)); - rx = Wellipse/2; - ry = Hellipse/2; + r = rect( Left, Top, abs(Right-Left), abs(Bottom-Top)); + rx = Wellipse/2; + ry = Hellipse/2; - if (Wellipse > r.width) - { - if (Hellipse > r.height) // > W > H - app_draw_ellipse(dc, r, pbrushPen); - else // > W < H - { - app_draw_arc(dc, rect( r.x, r.y, r.width - 1, Hellipse - 1), + if (Wellipse > r.width) + { + if (Hellipse > r.height) // > W > H + app_draw_ellipse(dc, r, pbrushPen); + else // > W < H + { + app_draw_arc(dc, rect( r.x, r.y, r.width - 1, Hellipse - 1), 0, 180, pbrushPen, FALSE); - app_draw_arc(dc, rect(r.x, Bottom - Hellipse, r.width - 1, Hellipse - 1), + app_draw_arc(dc, rect(r.x, Bottom - Hellipse, r.width - 1, Hellipse - 1), 180, 360, pbrushPen, FALSE); - } - } - else if(Hellipse > r.height) // < W > H - { + } + } + else if(Hellipse > r.height) // < W > H + { app_draw_arc(dc, rect(r.x, r.y, Wellipse - 1, r.height - 1), - 90, 270, pbrushPen, FALSE); + 90, 270, pbrushPen, FALSE); app_draw_arc(dc, rect(Right - Wellipse, r.y, Wellipse - 1, r.height - 1), - 270, 90, pbrushPen, FALSE); - } - else // < W < H - { - app_draw_arc(dc, rect(r.x, r.y, rx+rx, ry+ry), - 90, 180, pbrushPen, FALSE); + 270, 90, pbrushPen, FALSE); + } + else // < W < H + { + app_draw_arc(dc, rect(r.x, r.y, rx+rx, ry+ry), + 90, 180, pbrushPen, FALSE); - app_draw_arc(dc, rect(r.x,r.y+r.height-ry-ry,rx+rx,ry+ry), - 180, 270, pbrushPen, FALSE); + app_draw_arc(dc, rect(r.x,r.y+r.height-ry-ry,rx+rx,ry+ry), + 180, 270, pbrushPen, FALSE); - app_draw_arc(dc, rect(r.x+r.width-rx-rx, r.y+r.height-ry-ry, rx+rx, ry+ry), - 270, 360, pbrushPen, FALSE); + app_draw_arc(dc, rect(r.x+r.width-rx-rx, r.y+r.height-ry-ry, rx+rx, ry+ry), + 270, 360, pbrushPen, FALSE); - app_draw_arc(dc, rect(r.x+r.width-rx-rx,r.y,rx+rx,ry+ry), - 0, 90, pbrushPen, FALSE); - } - if ( Hellipse < r.height) - { - app_fill_rect(dc, rect(r.x, r.y+ry+1, w, r.height-ry-ry), pbrushPen, TRUE); + app_draw_arc(dc, rect(r.x+r.width-rx-rx,r.y,rx+rx,ry+ry), + 0, 90, pbrushPen, FALSE); + } + if ( Hellipse < r.height) + { + app_fill_rect(dc, rect(r.x, r.y+ry+1, w, r.height-ry-ry), pbrushPen, TRUE); - app_fill_rect(dc, rect(r.x+r.width-w, r.y+ry+1, w, r.height-ry-ry), - pbrushPen, TRUE); - } - if ( Wellipse < r.width) - { - app_fill_rect(dc, rect(r.x+rx, r.y+r.height-w, r.width-rx-rx, w), - pbrushPen, TRUE); + app_fill_rect(dc, rect(r.x+r.width-w, r.y+ry+1, w, r.height-ry-ry), + pbrushPen, TRUE); + } + if ( Wellipse < r.width) + { + app_fill_rect(dc, rect(r.x+rx, r.y+r.height-w, r.width-rx-rx, w), + pbrushPen, TRUE); - app_fill_rect(dc, rect(r.x+rx, r.y, r.width-rx-rx, w), pbrushPen, TRUE); - } - return TRUE; + app_fill_rect(dc, rect(r.x+rx, r.y, r.width-rx-rx, w), pbrushPen, TRUE); + } + return TRUE; } From 56cfac043d842eb34ee9954143fabf8f9f0e3059 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Mon, 28 Feb 2011 23:46:02 +0000 Subject: [PATCH 184/287] [FORMATTING] fix dibobj.c, to please pigglesworth svn path=/trunk/; revision=50940 --- .../subsystems/win32/win32k/objects/dibobj.c | 961 +++++++++--------- 1 file changed, 485 insertions(+), 476 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/dibobj.c b/reactos/subsystems/win32/win32k/objects/dibobj.c index 1a26cd6f49f..36c452f99f2 100644 --- a/reactos/subsystems/win32/win32k/objects/dibobj.c +++ b/reactos/subsystems/win32/win32k/objects/dibobj.c @@ -22,8 +22,9 @@ #define NDEBUG #include -static const RGBQUAD EGAColorsQuads[16] = { -/* rgbBlue, rgbGreen, rgbRed, rgbReserved */ +static const RGBQUAD EGAColorsQuads[16] = +{ + /* rgbBlue, rgbGreen, rgbRed, rgbReserved */ { 0x00, 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x80, 0x00 }, { 0x00, 0x80, 0x00, 0x00 }, @@ -42,8 +43,9 @@ static const RGBQUAD EGAColorsQuads[16] = { { 0xff, 0xff, 0xff, 0x00 } }; -static const RGBTRIPLE EGAColorsTriples[16] = { -/* rgbBlue, rgbGreen, rgbRed */ +static const RGBTRIPLE EGAColorsTriples[16] = +{ + /* rgbBlue, rgbGreen, rgbRed */ { 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x80 }, { 0x00, 0x80, 0x00 }, @@ -62,8 +64,9 @@ static const RGBTRIPLE EGAColorsTriples[16] = { { 0xff, 0xff, 0xff } }; -static const RGBQUAD DefLogPaletteQuads[20] = { /* Copy of Default Logical Palette */ -/* rgbBlue, rgbGreen, rgbRed, rgbReserved */ +static const RGBQUAD DefLogPaletteQuads[20] = /* Copy of Default Logical Palette */ +{ + /* rgbBlue, rgbGreen, rgbRed, rgbReserved */ { 0x00, 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x80, 0x00 }, { 0x00, 0x80, 0x00, 0x00 }, @@ -86,8 +89,9 @@ static const RGBQUAD DefLogPaletteQuads[20] = { /* Copy of Default Logical Palet { 0xff, 0xff, 0xff, 0x00 } }; -static const RGBQUAD DefLogPaletteTriples[20] = { /* Copy of Default Logical Palette */ -/* rgbBlue, rgbGreen, rgbRed, rgbReserved */ +static const RGBQUAD DefLogPaletteTriples[20] = /* Copy of Default Logical Palette */ +{ + /* rgbBlue, rgbGreen, rgbRed, rgbReserved */ { 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x80 }, { 0x00, 0x80, 0x00 }, @@ -163,8 +167,8 @@ IntSetDIBColorTable( PalGDI = PALETTE_LockPalette(psurf->ppal->BaseObject.hHmgr); for (Index = StartIndex; - Index < StartIndex + Entries && Index < PalGDI->NumColors; - Index++) + Index < StartIndex + Entries && Index < PalGDI->NumColors; + Index++) { PalGDI->IndexedColors[Index].peRed = Colors[Index - StartIndex].rgbRed; PalGDI->IndexedColors[Index].peGreen = Colors[Index - StartIndex].rgbGreen; @@ -225,8 +229,8 @@ IntGetDIBColorTable( { for (Index = StartIndex; - Index < StartIndex + Entries && Index < ppal->NumColors; - Index++) + Index < StartIndex + Entries && Index < ppal->NumColors; + Index++) { Colors[Index - StartIndex].rgbRed = ppal->IndexedColors[Index].peRed; Colors[Index - StartIndex].rgbGreen = ppal->IndexedColors[Index].peGreen; @@ -254,66 +258,66 @@ IntSetDIBits( UINT ColorUse) { HBITMAP SourceBitmap; - PSURFACE psurfDst, psurfSrc; + PSURFACE psurfDst, psurfSrc; INT result = 0; - RECT rcDst; - POINTL ptSrc; - PVOID pvBits; - EXLATEOBJ exlo; + RECT rcDst; + POINTL ptSrc; + PVOID pvBits; + EXLATEOBJ exlo; SourceBitmap = DIB_CreateDIBSection(DC, bmi, ColorUse, &pvBits, NULL, 0, 0); - if (0 == SourceBitmap) + if (0 == SourceBitmap) { - DPRINT1("Error : Could not create a DIBSection.\n"); + DPRINT1("Error : Could not create a DIBSection.\n"); EngSetLastError(ERROR_NO_SYSTEM_RESOURCES); return 0; } - RtlCopyMemory(pvBits, Bits, DIB_GetDIBImageBytes(bmi->bmiHeader.biWidth, - bmi->bmiHeader.biHeight, - bmi->bmiHeader.biBitCount)); + RtlCopyMemory(pvBits, Bits, DIB_GetDIBImageBytes(bmi->bmiHeader.biWidth, + bmi->bmiHeader.biHeight, + bmi->bmiHeader.biBitCount)); - psurfDst = SURFACE_LockSurface(hBitmap); - psurfSrc = SURFACE_LockSurface(SourceBitmap); + psurfDst = SURFACE_LockSurface(hBitmap); + psurfSrc = SURFACE_LockSurface(SourceBitmap); - if(!(psurfSrc && psurfDst)) - { - DPRINT1("Error, could not lock surfaces\n"); - goto cleanup; - } + if(!(psurfSrc && psurfDst)) + { + DPRINT1("Error, could not lock surfaces\n"); + goto cleanup; + } - rcDst.top = bmi->bmiHeader.biHeight < 0 ? - abs(bmi->bmiHeader.biHeight) - (ScanLines + StartScan) : StartScan; - rcDst.left = 0; - rcDst.bottom = rcDst.top + ScanLines; - rcDst.right = psurfDst->SurfObj.sizlBitmap.cx; + rcDst.top = bmi->bmiHeader.biHeight < 0 ? + abs(bmi->bmiHeader.biHeight) - (ScanLines + StartScan) : StartScan; + rcDst.left = 0; + rcDst.bottom = rcDst.top + ScanLines; + rcDst.right = psurfDst->SurfObj.sizlBitmap.cx; - ptSrc.x = 0; - ptSrc.y = 0; + ptSrc.x = 0; + ptSrc.y = 0; - EXLATEOBJ_vInitialize(&exlo, psurfSrc->ppal, psurfDst->ppal, 0, 0, 0); + EXLATEOBJ_vInitialize(&exlo, psurfSrc->ppal, psurfDst->ppal, 0, 0, 0); - result = IntEngCopyBits(&psurfDst->SurfObj, - &psurfSrc->SurfObj, - NULL, - &exlo.xlo, - &rcDst, - &ptSrc); - if(result) - result = ScanLines; + result = IntEngCopyBits(&psurfDst->SurfObj, + &psurfSrc->SurfObj, + NULL, + &exlo.xlo, + &rcDst, + &ptSrc); + if(result) + result = ScanLines; - EXLATEOBJ_vCleanup(&exlo); + EXLATEOBJ_vCleanup(&exlo); cleanup: - if(psurfSrc) - { - SURFACE_UnlockSurface(psurfSrc); - } - if(psurfDst) - { - SURFACE_UnlockSurface(psurfDst); - } - GreDeleteObject(SourceBitmap); + if(psurfSrc) + { + SURFACE_UnlockSurface(psurfSrc); + } + if(psurfDst) + { + SURFACE_UnlockSurface(psurfDst); + } + GreDeleteObject(SourceBitmap); return result; } @@ -341,13 +345,13 @@ NtGdiSetDIBits( _SEH2_TRY { ProbeForRead(&bmi->bmiHeader.biSize, sizeof(DWORD), 1); - ProbeForRead(bmi, bmi->bmiHeader.biSize, 1); - ProbeForRead(bmi, DIB_BitmapInfoSize(bmi, ColorUse), 1); + ProbeForRead(bmi, bmi->bmiHeader.biSize, 1); + ProbeForRead(bmi, DIB_BitmapInfoSize(bmi, ColorUse), 1); ProbeForRead(Bits, - DIB_GetDIBImageBytes(bmi->bmiHeader.biWidth, - ScanLines, - bmi->bmiHeader.biBitCount), - 1); + DIB_GetDIBImageBytes(bmi->bmiHeader.biWidth, + ScanLines, + bmi->bmiHeader.biBitCount), + 1); } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { @@ -473,7 +477,7 @@ NtGdiSetDIBitsToDeviceInternal( hSourceBitmap = EngCreateBitmap(SourceSize, DIBWidth, BitmapFormat(bmi->bmiHeader.biBitCount, - bmi->bmiHeader.biCompression), + bmi->bmiHeader.biCompression), bmi->bmiHeader.biHeight < 0 ? BMF_TOPDOWN : 0, (PVOID) Bits); if (!hSourceBitmap) @@ -515,8 +519,8 @@ NtGdiSetDIBitsToDeviceInternal( /* Copy the bits */ DPRINT("BitsToDev with dstsurf=(%d|%d) (%d|%d), src=(%d|%d) w=%d h=%d\n", - rcDest.left, rcDest.top, rcDest.right, rcDest.bottom, - ptSource.x, ptSource.y, SourceSize.cx, SourceSize.cy); + rcDest.left, rcDest.top, rcDest.right, rcDest.bottom, + ptSource.x, ptSource.y, SourceSize.cx, SourceSize.cy); Status = IntEngBitBlt(pDestSurf, pSourceSurf, NULL, @@ -563,17 +567,17 @@ NtGdiGetDIBitsInternal( UINT MaxBits, UINT MaxInfo) { - BITMAPCOREINFO* pbmci = NULL; - PSURFACE psurf = NULL; - PDC pDC; - LONG width, height; - WORD planes, bpp; - DWORD compr, size ; - int i, bitmap_type; - RGBTRIPLE* rgbTriples; - RGBQUAD* rgbQuads; - VOID* colorPtr; - NTSTATUS Status = STATUS_SUCCESS; + BITMAPCOREINFO* pbmci = NULL; + PSURFACE psurf = NULL; + PDC pDC; + LONG width, height; + WORD planes, bpp; + DWORD compr, size ; + int i, bitmap_type; + RGBTRIPLE* rgbTriples; + RGBQUAD* rgbQuads; + VOID* colorPtr; + NTSTATUS Status = STATUS_SUCCESS; DPRINT("Entered NtGdiGetDIBitsInternal()\n"); @@ -582,9 +586,9 @@ NtGdiGetDIBitsInternal( _SEH2_TRY { - /* Probe for read and write */ + /* Probe for read and write */ ProbeForRead(Info, MaxInfo, 1); - ProbeForWrite(Info, MaxInfo, 1); + ProbeForWrite(Info, MaxInfo, 1); if (Bits) ProbeForWrite(Bits, MaxBits, 1); } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) @@ -598,41 +602,41 @@ NtGdiGetDIBitsInternal( return 0; } - colorPtr = (LPBYTE)Info + Info->bmiHeader.biSize; - rgbTriples = colorPtr; - rgbQuads = colorPtr; + colorPtr = (LPBYTE)Info + Info->bmiHeader.biSize; + rgbTriples = colorPtr; + rgbQuads = colorPtr; - bitmap_type = DIB_GetBitmapInfo(&Info->bmiHeader, - &width, - &height, - &planes, - &bpp, - &compr, - &size); - if(bitmap_type == -1) - { - DPRINT("Wrong bitmap format\n"); - EngSetLastError(ERROR_INVALID_PARAMETER); - return 0; - } - else if(bitmap_type == 0) - { - /* We need a BITMAPINFO to create a DIB, but we have to fill - * the BITMAPCOREINFO we're provided */ - pbmci = (BITMAPCOREINFO*)Info; - Info = DIB_ConvertBitmapInfo((BITMAPINFO*)pbmci, Usage); - if(Info == NULL) - { - DPRINT1("Error, could not convert the BITMAPCOREINFO!\n"); - return 0; - } - rgbQuads = Info->bmiColors; - } + bitmap_type = DIB_GetBitmapInfo(&Info->bmiHeader, + &width, + &height, + &planes, + &bpp, + &compr, + &size); + if(bitmap_type == -1) + { + DPRINT("Wrong bitmap format\n"); + EngSetLastError(ERROR_INVALID_PARAMETER); + return 0; + } + else if(bitmap_type == 0) + { + /* We need a BITMAPINFO to create a DIB, but we have to fill + * the BITMAPCOREINFO we're provided */ + pbmci = (BITMAPCOREINFO*)Info; + Info = DIB_ConvertBitmapInfo((BITMAPINFO*)pbmci, Usage); + if(Info == NULL) + { + DPRINT1("Error, could not convert the BITMAPCOREINFO!\n"); + return 0; + } + rgbQuads = Info->bmiColors; + } pDC = DC_LockDc(hDC); if (pDC == NULL || pDC->dctype == DC_TYPE_INFO) { - ScanLines = 0; + ScanLines = 0; goto done; } @@ -644,117 +648,119 @@ NtGdiGetDIBitsInternal( goto done; } - /* Fill in the structure */ - switch(bpp) - { - case 0: /* Only info */ - if(pbmci) - { - pbmci->bmciHeader.bcWidth = psurf->SurfObj.sizlBitmap.cx; - pbmci->bmciHeader.bcHeight = (psurf->SurfObj.fjBitmap & BMF_TOPDOWN) ? - -psurf->SurfObj.sizlBitmap.cy : - psurf->SurfObj.sizlBitmap.cy; - pbmci->bmciHeader.bcPlanes = 1; - pbmci->bmciHeader.bcBitCount = BitsPerFormat(psurf->SurfObj.iBitmapFormat); - } - Info->bmiHeader.biWidth = psurf->SurfObj.sizlBitmap.cx; - Info->bmiHeader.biHeight = (psurf->SurfObj.fjBitmap & BMF_TOPDOWN) ? - -psurf->SurfObj.sizlBitmap.cy : - psurf->SurfObj.sizlBitmap.cy;; - Info->bmiHeader.biPlanes = 1; - Info->bmiHeader.biBitCount = BitsPerFormat(psurf->SurfObj.iBitmapFormat); - Info->bmiHeader.biSizeImage = DIB_GetDIBImageBytes( Info->bmiHeader.biWidth, - Info->bmiHeader.biHeight, - Info->bmiHeader.biBitCount); - if(psurf->hSecure) - { - switch(Info->bmiHeader.biBitCount) - { - case 16: - case 32: - Info->bmiHeader.biCompression = BI_BITFIELDS; - break; - default: - Info->bmiHeader.biCompression = BI_RGB; - break; - } - } - else if(Info->bmiHeader.biBitCount > 8) - { - Info->bmiHeader.biCompression = BI_BITFIELDS; - } - else - { - Info->bmiHeader.biCompression = BI_RGB; - } - Info->bmiHeader.biXPelsPerMeter = 0; + /* Fill in the structure */ + switch(bpp) + { + case 0: /* Only info */ + if(pbmci) + { + pbmci->bmciHeader.bcWidth = psurf->SurfObj.sizlBitmap.cx; + pbmci->bmciHeader.bcHeight = (psurf->SurfObj.fjBitmap & BMF_TOPDOWN) ? + -psurf->SurfObj.sizlBitmap.cy : + psurf->SurfObj.sizlBitmap.cy; + pbmci->bmciHeader.bcPlanes = 1; + pbmci->bmciHeader.bcBitCount = BitsPerFormat(psurf->SurfObj.iBitmapFormat); + } + Info->bmiHeader.biWidth = psurf->SurfObj.sizlBitmap.cx; + Info->bmiHeader.biHeight = (psurf->SurfObj.fjBitmap & BMF_TOPDOWN) ? + -psurf->SurfObj.sizlBitmap.cy : + psurf->SurfObj.sizlBitmap.cy;; + Info->bmiHeader.biPlanes = 1; + Info->bmiHeader.biBitCount = BitsPerFormat(psurf->SurfObj.iBitmapFormat); + Info->bmiHeader.biSizeImage = DIB_GetDIBImageBytes( Info->bmiHeader.biWidth, + Info->bmiHeader.biHeight, + Info->bmiHeader.biBitCount); + if(psurf->hSecure) + { + switch(Info->bmiHeader.biBitCount) + { + case 16: + case 32: + Info->bmiHeader.biCompression = BI_BITFIELDS; + break; + default: + Info->bmiHeader.biCompression = BI_RGB; + break; + } + } + else if(Info->bmiHeader.biBitCount > 8) + { + Info->bmiHeader.biCompression = BI_BITFIELDS; + } + else + { + Info->bmiHeader.biCompression = BI_RGB; + } + Info->bmiHeader.biXPelsPerMeter = 0; Info->bmiHeader.biYPelsPerMeter = 0; Info->bmiHeader.biClrUsed = 0; Info->bmiHeader.biClrImportant = 0; - ScanLines = abs(Info->bmiHeader.biHeight); - goto done; + ScanLines = abs(Info->bmiHeader.biHeight); + goto done; - case 1: - case 4: - case 8: - Info->bmiHeader.biClrUsed = 0; + case 1: + case 4: + case 8: + Info->bmiHeader.biClrUsed = 0; - /* If the bitmap if a DIB section and has the same format than what - * we're asked, go ahead! */ - if((psurf->hSecure) && - (BitsPerFormat(psurf->SurfObj.iBitmapFormat) == bpp)) - { - if(Usage == DIB_RGB_COLORS) - { - unsigned int colors = min(psurf->ppal->NumColors, 1 << bpp); + /* If the bitmap if a DIB section and has the same format than what + * we're asked, go ahead! */ + if((psurf->hSecure) && + (BitsPerFormat(psurf->SurfObj.iBitmapFormat) == bpp)) + { + if(Usage == DIB_RGB_COLORS) + { + unsigned int colors = min(psurf->ppal->NumColors, 1 << bpp); - if(pbmci) - { - for(i=0; i < colors; i++) - { - rgbTriples[i].rgbtRed = psurf->ppal->IndexedColors[i].peRed; - rgbTriples[i].rgbtGreen = psurf->ppal->IndexedColors[i].peGreen; - rgbTriples[i].rgbtBlue = psurf->ppal->IndexedColors[i].peBlue; - } - } - if(colors != 1 << bpp) Info->bmiHeader.biClrUsed = colors; - for(i=0; i < colors; i++) - { - rgbQuads[i].rgbRed = psurf->ppal->IndexedColors[i].peRed; - rgbQuads[i].rgbGreen = psurf->ppal->IndexedColors[i].peGreen; - rgbQuads[i].rgbBlue = psurf->ppal->IndexedColors[i].peBlue; - } - } - else - { - for(i=0; i < 1 << bpp; i++) - { - if(pbmci) ((WORD*)rgbTriples)[i] = i; - ((WORD*)rgbQuads)[i] = i; - } - } - } - else - { - if(Usage == DIB_PAL_COLORS) - { - for(i=0; i < 1 << bpp; i++) - { - if(pbmci) ((WORD*)rgbTriples)[i] = i; - ((WORD*)rgbQuads)[i] = i; - } - } - else if(bpp > 1 && bpp == BitsPerFormat(psurf->SurfObj.iBitmapFormat)) { + if(pbmci) + { + for(i=0; i < colors; i++) + { + rgbTriples[i].rgbtRed = psurf->ppal->IndexedColors[i].peRed; + rgbTriples[i].rgbtGreen = psurf->ppal->IndexedColors[i].peGreen; + rgbTriples[i].rgbtBlue = psurf->ppal->IndexedColors[i].peBlue; + } + } + if(colors != 1 << bpp) Info->bmiHeader.biClrUsed = colors; + for(i=0; i < colors; i++) + { + rgbQuads[i].rgbRed = psurf->ppal->IndexedColors[i].peRed; + rgbQuads[i].rgbGreen = psurf->ppal->IndexedColors[i].peGreen; + rgbQuads[i].rgbBlue = psurf->ppal->IndexedColors[i].peBlue; + } + } + else + { + for(i=0; i < 1 << bpp; i++) + { + if(pbmci) ((WORD*)rgbTriples)[i] = i; + ((WORD*)rgbQuads)[i] = i; + } + } + } + else + { + if(Usage == DIB_PAL_COLORS) + { + for(i=0; i < 1 << bpp; i++) + { + if(pbmci) ((WORD*)rgbTriples)[i] = i; + ((WORD*)rgbQuads)[i] = i; + } + } + else if(bpp > 1 && bpp == BitsPerFormat(psurf->SurfObj.iBitmapFormat)) + { /* For color DDBs in native depth (mono DDBs always have a black/white palette): Generate the color map from the selected palette */ PPALETTE pDcPal = PALETTE_LockPalette(pDC->dclevel.hpal); - if(!pDcPal) - { - ScanLines = 0 ; - goto done ; - } - for (i = 0; i < pDcPal->NumColors; i++) { + if(!pDcPal) + { + ScanLines = 0 ; + goto done ; + } + for (i = 0; i < pDcPal->NumColors; i++) + { if (pbmci) { rgbTriples[i].rgbtRed = pDcPal->IndexedColors[i].peRed; @@ -766,23 +772,26 @@ NtGdiGetDIBitsInternal( rgbQuads[i].rgbGreen = pDcPal->IndexedColors[i].peGreen; rgbQuads[i].rgbBlue = pDcPal->IndexedColors[i].peBlue; rgbQuads[i].rgbReserved = 0; - } - PALETTE_UnlockPalette(pDcPal); - } else { - switch (bpp) { + } + PALETTE_UnlockPalette(pDcPal); + } + else + { + switch (bpp) + { case 1: if (pbmci) { rgbTriples[0].rgbtRed = rgbTriples[0].rgbtGreen = - rgbTriples[0].rgbtBlue = 0; + rgbTriples[0].rgbtBlue = 0; rgbTriples[1].rgbtRed = rgbTriples[1].rgbtGreen = - rgbTriples[1].rgbtBlue = 0xff; + rgbTriples[1].rgbtBlue = 0xff; } rgbQuads[0].rgbRed = rgbQuads[0].rgbGreen = - rgbQuads[0].rgbBlue = 0; + rgbQuads[0].rgbBlue = 0; rgbQuads[0].rgbReserved = 0; rgbQuads[1].rgbRed = rgbQuads[1].rgbGreen = - rgbQuads[1].rgbBlue = 0xff; + rgbQuads[1].rgbBlue = 0xff; rgbQuads[1].rgbReserved = 0; break; @@ -794,52 +803,52 @@ NtGdiGetDIBitsInternal( break; case 8: + { + INT r, g, b; + RGBQUAD *color; + if (pbmci) { - INT r, g, b; - RGBQUAD *color; - if (pbmci) - { - RGBTRIPLE *colorTriple; + RGBTRIPLE *colorTriple; - RtlCopyMemory(rgbTriples, DefLogPaletteTriples, - 10 * sizeof(RGBTRIPLE)); - RtlCopyMemory(rgbTriples + 246, DefLogPaletteTriples + 10, - 10 * sizeof(RGBTRIPLE)); - colorTriple = rgbTriples + 10; - for(r = 0; r <= 5; r++) /* FIXME */ - { - for(g = 0; g <= 5; g++) - { - for(b = 0; b <= 5; b++) - { - colorTriple->rgbtRed = (r * 0xff) / 5; - colorTriple->rgbtGreen = (g * 0xff) / 5; - colorTriple->rgbtBlue = (b * 0xff) / 5; - color++; - } - } - } - } - memcpy(rgbQuads, DefLogPaletteQuads, - 10 * sizeof(RGBQUAD)); - memcpy(rgbQuads + 246, DefLogPaletteQuads + 10, - 10 * sizeof(RGBQUAD)); - color = rgbQuads + 10; + RtlCopyMemory(rgbTriples, DefLogPaletteTriples, + 10 * sizeof(RGBTRIPLE)); + RtlCopyMemory(rgbTriples + 246, DefLogPaletteTriples + 10, + 10 * sizeof(RGBTRIPLE)); + colorTriple = rgbTriples + 10; for(r = 0; r <= 5; r++) /* FIXME */ - { + { for(g = 0; g <= 5; g++) - { + { for(b = 0; b <= 5; b++) - { - color->rgbRed = (r * 0xff) / 5; - color->rgbGreen = (g * 0xff) / 5; - color->rgbBlue = (b * 0xff) / 5; - color->rgbReserved = 0; + { + colorTriple->rgbtRed = (r * 0xff) / 5; + colorTriple->rgbtGreen = (g * 0xff) / 5; + colorTriple->rgbtBlue = (b * 0xff) / 5; color++; } - } - } + } + } } + memcpy(rgbQuads, DefLogPaletteQuads, + 10 * sizeof(RGBQUAD)); + memcpy(rgbQuads + 246, DefLogPaletteQuads + 10, + 10 * sizeof(RGBQUAD)); + color = rgbQuads + 10; + for(r = 0; r <= 5; r++) /* FIXME */ + { + for(g = 0; g <= 5; g++) + { + for(b = 0; b <= 5; b++) + { + color->rgbRed = (r * 0xff) / 5; + color->rgbGreen = (g * 0xff) / 5; + color->rgbBlue = (b * 0xff) / 5; + color->rgbReserved = 0; + color++; + } + } + } + } } } } @@ -858,11 +867,11 @@ NtGdiGetDIBitsInternal( if (Info->bmiHeader.biCompression == BI_BITFIELDS) { if (psurf->hSecure) - { - ((PDWORD)Info->bmiColors)[0] = psurf->ppal->RedMask; + { + ((PDWORD)Info->bmiColors)[0] = psurf->ppal->RedMask; ((PDWORD)Info->bmiColors)[1] = psurf->ppal->GreenMask; ((PDWORD)Info->bmiColors)[2] = psurf->ppal->BlueMask; - } + } else { ((PDWORD)Info->bmiColors)[0] = 0xf800; @@ -877,11 +886,11 @@ NtGdiGetDIBitsInternal( if (Info->bmiHeader.biCompression == BI_BITFIELDS) { if (psurf->hSecure) - { - ((PDWORD)Info->bmiColors)[0] = psurf->ppal->RedMask; + { + ((PDWORD)Info->bmiColors)[0] = psurf->ppal->RedMask; ((PDWORD)Info->bmiColors)[1] = psurf->ppal->GreenMask; ((PDWORD)Info->bmiColors)[2] = psurf->ppal->BlueMask; - } + } else { ((PDWORD)Info->bmiColors)[0] = 0xff0000; @@ -891,53 +900,53 @@ NtGdiGetDIBitsInternal( } break; } - Info->bmiHeader.biSizeImage = DIB_GetDIBImageBytes(width, height, bpp); + Info->bmiHeader.biSizeImage = DIB_GetDIBImageBytes(width, height, bpp); - if(Bits && ScanLines) - { - /* Create a DIBSECTION, blt it, profit */ - PVOID pDIBits ; - HBITMAP hBmpDest; - PSURFACE psurfDest; - EXLATEOBJ exlo; - RECT rcDest; - POINTL srcPoint; - BOOL ret ; + if(Bits && ScanLines) + { + /* Create a DIBSECTION, blt it, profit */ + PVOID pDIBits ; + HBITMAP hBmpDest; + PSURFACE psurfDest; + EXLATEOBJ exlo; + RECT rcDest; + POINTL srcPoint; + BOOL ret ; - if (StartScan > psurf->SurfObj.sizlBitmap.cy) + if (StartScan > psurf->SurfObj.sizlBitmap.cy) { - ScanLines = 0; + ScanLines = 0; goto done; } else { ScanLines = min(ScanLines, psurf->SurfObj.sizlBitmap.cy - StartScan); - } + } - /* Fixup values */ - Info->bmiHeader.biWidth = psurf->SurfObj.sizlBitmap.cx; - Info->bmiHeader.biHeight = height < 0 ? - -ScanLines : ScanLines; - /* Create the DIB */ - hBmpDest = DIB_CreateDIBSection(pDC, Info, Usage, &pDIBits, NULL, 0, 0); - /* Restore them */ - Info->bmiHeader.biWidth = width; - Info->bmiHeader.biHeight = height; + /* Fixup values */ + Info->bmiHeader.biWidth = psurf->SurfObj.sizlBitmap.cx; + Info->bmiHeader.biHeight = height < 0 ? + -ScanLines : ScanLines; + /* Create the DIB */ + hBmpDest = DIB_CreateDIBSection(pDC, Info, Usage, &pDIBits, NULL, 0, 0); + /* Restore them */ + Info->bmiHeader.biWidth = width; + Info->bmiHeader.biHeight = height; - if(!hBmpDest) - { - DPRINT1("Unable to create a DIB Section!\n"); - EngSetLastError(ERROR_INVALID_PARAMETER); - ScanLines = 0; - goto done ; - } + if(!hBmpDest) + { + DPRINT1("Unable to create a DIB Section!\n"); + EngSetLastError(ERROR_INVALID_PARAMETER); + ScanLines = 0; + goto done ; + } - psurfDest = SURFACE_ShareLockSurface(hBmpDest); + psurfDest = SURFACE_ShareLockSurface(hBmpDest); - rcDest.left = 0; - rcDest.top = 0; - rcDest.bottom = ScanLines; - rcDest.right = psurf->SurfObj.sizlBitmap.cx; + rcDest.left = 0; + rcDest.top = 0; + rcDest.bottom = ScanLines; + rcDest.right = psurf->SurfObj.sizlBitmap.cx; srcPoint.x = 0; @@ -960,51 +969,51 @@ NtGdiGetDIBitsInternal( srcPoint.y = StartScan; } - EXLATEOBJ_vInitialize(&exlo, psurf->ppal, psurfDest->ppal, 0xffffff, 0xffffff, 0); + EXLATEOBJ_vInitialize(&exlo, psurf->ppal, psurfDest->ppal, 0xffffff, 0xffffff, 0); - ret = IntEngCopyBits(&psurfDest->SurfObj, - &psurf->SurfObj, - NULL, - &exlo.xlo, - &rcDest, - &srcPoint); + ret = IntEngCopyBits(&psurfDest->SurfObj, + &psurf->SurfObj, + NULL, + &exlo.xlo, + &rcDest, + &srcPoint); SURFACE_ShareUnlockSurface(psurfDest); - if(!ret) - ScanLines = 0; - else - { - Status = STATUS_SUCCESS; - _SEH2_TRY - { - RtlCopyMemory(Bits, pDIBits, DIB_GetDIBImageBytes (width, ScanLines, bpp)); - } - _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) - { - Status = _SEH2_GetExceptionCode(); - } - _SEH2_END + if(!ret) + ScanLines = 0; + else + { + Status = STATUS_SUCCESS; + _SEH2_TRY + { + RtlCopyMemory(Bits, pDIBits, DIB_GetDIBImageBytes (width, ScanLines, bpp)); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + Status = _SEH2_GetExceptionCode(); + } + _SEH2_END - if(!NT_SUCCESS(Status)) - { - DPRINT1("Unable to copy bits to the user provided pointer\n"); - ScanLines = 0; - } - } + if(!NT_SUCCESS(Status)) + { + DPRINT1("Unable to copy bits to the user provided pointer\n"); + ScanLines = 0; + } + } - GreDeleteObject(hBmpDest); - EXLATEOBJ_vCleanup(&exlo); - } - else ScanLines = abs(height); + GreDeleteObject(hBmpDest); + EXLATEOBJ_vCleanup(&exlo); + } + else ScanLines = abs(height); done: - if(pDC) DC_UnlockDc(pDC); - if(psurf) SURFACE_ShareUnlockSurface(psurf); - if(pbmci) DIB_FreeConvertedBitmapInfo(Info, (BITMAPINFO*)pbmci); + if(pDC) DC_UnlockDc(pDC); + if(psurf) SURFACE_ShareUnlockSurface(psurf); + if(pbmci) DIB_FreeConvertedBitmapInfo(Info, (BITMAPINFO*)pbmci); - return ScanLines; + return ScanLines; } @@ -1084,17 +1093,17 @@ NtGdiStretchDIBitsInternal( } if (XDest == 0 && YDest == 0 && XSrc == 0 && XSrc == 0 && - DestWidth == SrcWidth && DestHeight == SrcHeight && - compr == BI_RGB && - ROP == SRCCOPY) + DestWidth == SrcWidth && DestHeight == SrcHeight && + compr == BI_RGB && + ROP == SRCCOPY) { BITMAP bmp; ret = IntGdiGetObject(hBitmap, sizeof(bmp), &bmp) == sizeof(bmp); if (ret && - bmp.bmBitsPixel == bpp && - bmp.bmWidth == SrcWidth && - bmp.bmHeight == SrcHeight && - bmp.bmPlanes == planes) + bmp.bmBitsPixel == bpp && + bmp.bmWidth == SrcWidth && + bmp.bmHeight == SrcHeight && + bmp.bmPlanes == planes) { /* fast path */ ret = IntSetDIBits(pdc, hBitmap, 0, height, safeBits, BitsInfo, Usage); @@ -1122,8 +1131,8 @@ NtGdiStretchDIBitsInternal( /* Origin for DIBitmap may be bottom left (positive biHeight) or top left (negative biHeight) */ ret = NtGdiStretchBlt(hDC, XDest, YDest, DestWidth, DestHeight, - hdcMem, XSrc, abs(height) - SrcHeight - YSrc, - SrcWidth, SrcHeight, ROP, 0); + hdcMem, XSrc, abs(height) - SrcHeight - YSrc, + SrcWidth, SrcHeight, ROP, 0); if(ret) ret = SrcHeight; @@ -1217,27 +1226,27 @@ NtGdiCreateDIBitmapInternal( IN HANDLE hcmXform) { NTSTATUS Status = STATUS_SUCCESS; - PBYTE safeBits = NULL; - HBITMAP hbmResult = NULL; + PBYTE safeBits = NULL; + HBITMAP hbmResult = NULL; - if(pjInit && (fInit == CBM_INIT)) - { - safeBits = ExAllocatePoolWithTag(PagedPool, cjMaxBits, TAG_DIB); - if(!safeBits) - { - EngSetLastError(ERROR_NOT_ENOUGH_MEMORY); - return NULL; - } - } + if(pjInit && (fInit == CBM_INIT)) + { + safeBits = ExAllocatePoolWithTag(PagedPool, cjMaxBits, TAG_DIB); + if(!safeBits) + { + EngSetLastError(ERROR_NOT_ENOUGH_MEMORY); + return NULL; + } + } _SEH2_TRY { if(pbmi) ProbeForRead(pbmi, cjMaxInitInfo, 1); if(pjInit && (fInit == CBM_INIT)) - { - ProbeForRead(pjInit, cjMaxBits, 1); - RtlCopyMemory(safeBits, pjInit, cjMaxBits); - } + { + ProbeForRead(pjInit, cjMaxBits, 1); + RtlCopyMemory(safeBits, pjInit, cjMaxBits); + } } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { @@ -1248,13 +1257,13 @@ NtGdiCreateDIBitmapInternal( if(!NT_SUCCESS(Status)) { SetLastNtError(Status); - goto cleanup; + goto cleanup; } hbmResult = GreCreateDIBitmapInternal(hDc, - cx, - cy, - fInit, + cx, + cy, + fInit, safeBits, pbmi, iUsage, @@ -1262,8 +1271,8 @@ NtGdiCreateDIBitmapInternal( hcmXform); cleanup: - if (safeBits) ExFreePoolWithTag(safeBits, TAG_DIB); - return hbmResult; + if (safeBits) ExFreePoolWithTag(safeBits, TAG_DIB); + return hbmResult; } HBITMAP @@ -1285,7 +1294,8 @@ GreCreateDIBitmapInternal( HDC hdcDest; if (!hDc) /* 1bpp monochrome bitmap */ - { // Should use System Bitmap DC hSystemBM, with CreateCompatibleDC for this. + { + // Should use System Bitmap DC hSystemBM, with CreateCompatibleDC for this. hdcDest = NtGdiCreateCompatibleDC(0); if(!hdcDest) { @@ -1336,15 +1346,15 @@ NtGdiCreateDIBSection( HBITMAP hbitmap = 0; DC *dc; BOOL bDesktopDC = FALSE; - NTSTATUS Status = STATUS_SUCCESS; + NTSTATUS Status = STATUS_SUCCESS; if (!bmi) return hbitmap; // Make sure. - _SEH2_TRY + _SEH2_TRY { ProbeForRead(&bmi->bmiHeader.biSize, sizeof(DWORD), 1); - ProbeForRead(bmi, bmi->bmiHeader.biSize, 1); - ProbeForRead(bmi, DIB_BitmapInfoSize(bmi, Usage), 1); + ProbeForRead(bmi, bmi->bmiHeader.biSize, 1); + ProbeForRead(bmi, DIB_BitmapInfoSize(bmi, Usage), 1); } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { @@ -1483,7 +1493,7 @@ DIB_CreateDIBSection( { offset = 0; bm.bmBits = EngAllocUserMem(totalSize, 0); - if(!bm.bmBits) goto cleanup; + if(!bm.bmBits) goto cleanup; } // hSecure = MmSecureVirtualMemory(bm.bmBits, totalSize, PAGE_READWRITE); @@ -1491,31 +1501,31 @@ DIB_CreateDIBSection( if (usage == DIB_PAL_COLORS) { - if(dc) - { - PPALETTE pdcPal ; - pdcPal = PALETTE_LockPalette(dc->dclevel.hpal); - hpal = DIB_MapPaletteColors(pdcPal, bmi); - PALETTE_UnlockPalette(pdcPal); - } - else - { - /* For DIB Brushes */ - DPRINT1("FIXME : Unsupported DIB_PAL_COLORS without a DC to map colors.\n"); - /* HACK */ - hpal = (HPALETTE) 0xFFFFFFFF; - } + if(dc) + { + PPALETTE pdcPal ; + pdcPal = PALETTE_LockPalette(dc->dclevel.hpal); + hpal = DIB_MapPaletteColors(pdcPal, bmi); + PALETTE_UnlockPalette(pdcPal); + } + else + { + /* For DIB Brushes */ + DPRINT1("FIXME : Unsupported DIB_PAL_COLORS without a DC to map colors.\n"); + /* HACK */ + hpal = (HPALETTE) 0xFFFFFFFF; + } } else - { + { hpal = BuildDIBPalette(bmi); - } + } - if(!hpal) - { - DPRINT1("Error : Could not create a palette for the DIB.\n"); - goto cleanup; - } + if(!hpal) + { + DPRINT1("Error : Could not create a palette for the DIB.\n"); + goto cleanup; + } // Create Device Dependent Bitmap and add DIB pointer Size.cx = bm.bmWidth; @@ -1525,10 +1535,10 @@ DIB_CreateDIBSection( bm.bmWidthBytes, BitmapFormat(bi->biBitCount * bi->biPlanes, bi->biCompression), BMF_DONTCACHE | BMF_USERMEM | BMF_NOZEROINIT | - (bi->biHeight < 0 ? BMF_TOPDOWN : 0), + (bi->biHeight < 0 ? BMF_TOPDOWN : 0), bi->biSizeImage, bm.bmBits, - 0); + 0); if (!res) { EngSetLastError(ERROR_NO_SYSTEM_RESOURCES); @@ -1537,7 +1547,7 @@ DIB_CreateDIBSection( bmp = SURFACE_LockSurface(res); if (NULL == bmp) { - EngSetLastError(ERROR_INVALID_HANDLE); + EngSetLastError(ERROR_INVALID_HANDLE); goto cleanup; } @@ -1552,13 +1562,13 @@ DIB_CreateDIBSection( bmp->biClrImportant = bi->biClrImportant; bmp->SurfObj.fjBitmap &= ~BMF_DONT_FREE; - /* HACK */ - if(hpal != (HPALETTE)0xFFFFFFFF) - { - bmp->ppal = PALETTE_ShareLockPalette(hpal); - /* Lazy delete hpal, it will be freed at surface release */ - GreDeleteObject(hpal); - } + /* HACK */ + if(hpal != (HPALETTE)0xFFFFFFFF) + { + bmp->ppal = PALETTE_ShareLockPalette(hpal); + /* Lazy delete hpal, it will be freed at surface release */ + GreDeleteObject(hpal); + } // Clean up in case of errors cleanup: @@ -1573,9 +1583,8 @@ cleanup: ZwUnmapViewOfSection(NtCurrentProcess(), mapBits); bm.bmBits = NULL; } - else - if (!offset) - EngFreeUserMem(bm.bmBits), bm.bmBits = NULL; + else if (!offset) + EngFreeUserMem(bm.bmBits), bm.bmBits = NULL; } if (bmp) @@ -1611,7 +1620,7 @@ cleanup: int FASTCALL DIB_GetBitmapInfo( const BITMAPINFOHEADER *header, LONG *width, - LONG *height, WORD *planes, WORD *bpp, DWORD *compr, DWORD *size ) + LONG *height, WORD *planes, WORD *bpp, DWORD *compr, DWORD *size ) { if (header->biSize == sizeof(BITMAPCOREHEADER)) { @@ -1666,7 +1675,7 @@ INT FASTCALL DIB_BitmapInfoSize(const BITMAPINFO * info, WORD coloruse) const BITMAPCOREHEADER *core = (const BITMAPCOREHEADER *)info; colors = (core->bcBitCount <= 8) ? 1 << core->bcBitCount : 0; return sizeof(BITMAPCOREHEADER) + colors * - ((coloruse == DIB_RGB_COLORS) ? sizeof(RGBTRIPLE) : sizeof(WORD)); + ((coloruse == DIB_RGB_COLORS) ? sizeof(RGBTRIPLE) : sizeof(WORD)); } else /* assume BITMAPINFOHEADER */ { @@ -1687,7 +1696,7 @@ DIB_MapPaletteColors(PPALETTE ppal, CONST BITMAPINFO* lpbmi) PALETTEENTRY* ppalEntries; ULONG nNumColors,i; USHORT *lpIndex; - HPALETTE hpal; + HPALETTE hpal; if (!(ppal->flFlags & PAL_INDEXED)) { @@ -1700,8 +1709,8 @@ DIB_MapPaletteColors(PPALETTE ppal, CONST BITMAPINFO* lpbmi) nNumColors = min(nNumColors, lpbmi->bmiHeader.biClrUsed); } - /* Don't have more colors than we need */ - nNumColors = min(ppal->NumColors, nNumColors); + /* Don't have more colors than we need */ + nNumColors = min(ppal->NumColors, nNumColors); ppalEntries = ExAllocatePoolWithTag(PagedPool, sizeof(PALETTEENTRY) * nNumColors, TAG_COLORMAP); if (ppalEntries == NULL) @@ -1721,19 +1730,19 @@ DIB_MapPaletteColors(PPALETTE ppal, CONST BITMAPINFO* lpbmi) else { ppalEntries[i].peRed = 0; - ppalEntries[i].peGreen = 0; - ppalEntries[i].peBlue = 0; - ppalEntries[i].peFlags = 0; + ppalEntries[i].peGreen = 0; + ppalEntries[i].peBlue = 0; + ppalEntries[i].peFlags = 0; } lpIndex++; } - hpal = PALETTE_AllocPalette(PAL_INDEXED, nNumColors, (ULONG*)ppalEntries, 0, 0, 0); + hpal = PALETTE_AllocPalette(PAL_INDEXED, nNumColors, (ULONG*)ppalEntries, 0, 0, 0); - ExFreePoolWithTag(ppalEntries, TAG_COLORMAP); + ExFreePoolWithTag(ppalEntries, TAG_COLORMAP); - return hpal; + return hpal; } HPALETTE @@ -1745,7 +1754,7 @@ BuildDIBPalette(CONST BITMAPINFO *bmi) HPALETTE hPal; ULONG RedMask = 0, GreenMask = 0, BlueMask = 0; PDWORD pdwColors = (PDWORD)((PBYTE)bmi + bmi->bmiHeader.biSize); - INT paletteType; + INT paletteType; // Determine Bits Per Pixel bits = bmi->bmiHeader.biBitCount; @@ -1778,20 +1787,20 @@ BuildDIBPalette(CONST BITMAPINFO *bmi) paletteType = PAL_BITFIELDS; switch (bits) { - case 16: - paletteType |= PAL_RGB16_555; - RedMask = 0x7C00; - GreenMask = 0x03E0; - BlueMask = 0x001F; - break; + case 16: + paletteType |= PAL_RGB16_555; + RedMask = 0x7C00; + GreenMask = 0x03E0; + BlueMask = 0x001F; + break; - case 24: - case 32: - paletteType |= PAL_BGR; - RedMask = 0xFF0000; - GreenMask = 0x00FF00; - BlueMask = 0x0000FF; - break; + case 24: + case 32: + paletteType |= PAL_BGR; + RedMask = 0xFF0000; + GreenMask = 0x00FF00; + BlueMask = 0x0000FF; + break; } } @@ -1824,62 +1833,62 @@ BITMAPINFO* FASTCALL DIB_ConvertBitmapInfo (CONST BITMAPINFO* pbmi, DWORD Usage) { - CONST BITMAPCOREINFO* pbmci = (BITMAPCOREINFO*)pbmi; - BITMAPINFO* pNewBmi ; - UINT numColors = 0, ColorsSize = 0; + CONST BITMAPCOREINFO* pbmci = (BITMAPCOREINFO*)pbmi; + BITMAPINFO* pNewBmi ; + UINT numColors = 0, ColorsSize = 0; - if(pbmi->bmiHeader.biSize >= sizeof(BITMAPINFOHEADER)) return (BITMAPINFO*)pbmi; - if(pbmi->bmiHeader.biSize != sizeof(BITMAPCOREHEADER)) return NULL; + if(pbmi->bmiHeader.biSize >= sizeof(BITMAPINFOHEADER)) return (BITMAPINFO*)pbmi; + if(pbmi->bmiHeader.biSize != sizeof(BITMAPCOREHEADER)) return NULL; - if(pbmci->bmciHeader.bcBitCount <= 8) - { - numColors = 1 << pbmci->bmciHeader.bcBitCount; - if(Usage == DIB_PAL_COLORS) - { - ColorsSize = numColors * sizeof(WORD); - } - else - { - ColorsSize = numColors * sizeof(RGBQUAD); - } - } - else if (Usage == DIB_PAL_COLORS) - { - /* Invalid at high Res */ - return NULL; - } + if(pbmci->bmciHeader.bcBitCount <= 8) + { + numColors = 1 << pbmci->bmciHeader.bcBitCount; + if(Usage == DIB_PAL_COLORS) + { + ColorsSize = numColors * sizeof(WORD); + } + else + { + ColorsSize = numColors * sizeof(RGBQUAD); + } + } + else if (Usage == DIB_PAL_COLORS) + { + /* Invalid at high Res */ + return NULL; + } - pNewBmi = ExAllocatePoolWithTag(PagedPool, sizeof(BITMAPINFOHEADER) + ColorsSize, TAG_DIB); - if(!pNewBmi) return NULL; + pNewBmi = ExAllocatePoolWithTag(PagedPool, sizeof(BITMAPINFOHEADER) + ColorsSize, TAG_DIB); + if(!pNewBmi) return NULL; - RtlZeroMemory(pNewBmi, sizeof(BITMAPINFOHEADER) + ColorsSize); + RtlZeroMemory(pNewBmi, sizeof(BITMAPINFOHEADER) + ColorsSize); - pNewBmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); - pNewBmi->bmiHeader.biBitCount = pbmci->bmciHeader.bcBitCount; - pNewBmi->bmiHeader.biWidth = pbmci->bmciHeader.bcWidth; - pNewBmi->bmiHeader.biHeight = pbmci->bmciHeader.bcHeight; - pNewBmi->bmiHeader.biPlanes = pbmci->bmciHeader.bcPlanes; - pNewBmi->bmiHeader.biCompression = BI_RGB ; - pNewBmi->bmiHeader.biSizeImage = DIB_GetDIBImageBytes(pNewBmi->bmiHeader.biWidth, - pNewBmi->bmiHeader.biHeight, - pNewBmi->bmiHeader.biBitCount); + pNewBmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + pNewBmi->bmiHeader.biBitCount = pbmci->bmciHeader.bcBitCount; + pNewBmi->bmiHeader.biWidth = pbmci->bmciHeader.bcWidth; + pNewBmi->bmiHeader.biHeight = pbmci->bmciHeader.bcHeight; + pNewBmi->bmiHeader.biPlanes = pbmci->bmciHeader.bcPlanes; + pNewBmi->bmiHeader.biCompression = BI_RGB ; + pNewBmi->bmiHeader.biSizeImage = DIB_GetDIBImageBytes(pNewBmi->bmiHeader.biWidth, + pNewBmi->bmiHeader.biHeight, + pNewBmi->bmiHeader.biBitCount); - if(Usage == DIB_PAL_COLORS) - { - RtlCopyMemory(pNewBmi->bmiColors, pbmci->bmciColors, ColorsSize); - } - else - { - UINT i; - for(i=0; ibmiColors[i].rgbRed = pbmci->bmciColors[i].rgbtRed; - pNewBmi->bmiColors[i].rgbGreen = pbmci->bmciColors[i].rgbtGreen; - pNewBmi->bmiColors[i].rgbBlue = pbmci->bmciColors[i].rgbtBlue; - } - } + if(Usage == DIB_PAL_COLORS) + { + RtlCopyMemory(pNewBmi->bmiColors, pbmci->bmciColors, ColorsSize); + } + else + { + UINT i; + for(i=0; ibmiColors[i].rgbRed = pbmci->bmciColors[i].rgbtRed; + pNewBmi->bmiColors[i].rgbGreen = pbmci->bmciColors[i].rgbtGreen; + pNewBmi->bmiColors[i].rgbBlue = pbmci->bmciColors[i].rgbtBlue; + } + } - return pNewBmi ; + return pNewBmi ; } /* Frees a BITMAPINFO created with DIB_ConvertBitmapInfo */ @@ -1887,8 +1896,8 @@ VOID FASTCALL DIB_FreeConvertedBitmapInfo(BITMAPINFO* converted, BITMAPINFO* orig) { - if(converted != orig) - ExFreePoolWithTag(converted, TAG_DIB); + if(converted != orig) + ExFreePoolWithTag(converted, TAG_DIB); } From 1ea8829ec1280cb242ed4c34f542b841df0c3278 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Tue, 1 Mar 2011 01:03:58 +0000 Subject: [PATCH 185/287] [WIN32K] - Raster operations in user mode are on higher bytes, whereas they are on lower bytes for drivers. Try to clarify this situation. - Add sanity check about what was said previously. - Implement masking in EngBitBlt - Rewrite NtGdiMaskBlt accordingly - Realize the palette when selecting it into a device DC. - When applying raster operation, do so only on 24 bits, we don't support alpha channel in win32k This fixes VLC pink icons, Timo's MaskBlt tests and probably a lot of other things. [SHELL32] - Use correct (?) raster operations for drawing sjortcuts. Also note that now NtGdiMaskBlt locks the device contexts : this should avoid some race conditions, such as icons drawn on top of windows and the like. Win32k sucks less. So does reactos. Dedicated to Timo. Sleep well, mate. svn path=/trunk/; revision=50941 --- reactos/dll/win32/shell32/iconcache.c | 4 +- reactos/subsystems/win32/win32k/dib/dib.c | 44 +- reactos/subsystems/win32/win32k/dib/dib.h | 2 +- reactos/subsystems/win32/win32k/dib/dib1bpp.c | 2 +- .../subsystems/win32/win32k/dib/stretchblt.c | 8 +- reactos/subsystems/win32/win32k/eng/bitblt.c | 173 ++++--- .../subsystems/win32/win32k/eng/copybits.c | 4 +- reactos/subsystems/win32/win32k/eng/mouse.c | 14 +- .../subsystems/win32/win32k/eng/stretchblt.c | 36 +- .../subsystems/win32/win32k/include/color.h | 4 +- .../subsystems/win32/win32k/include/inteng.h | 41 +- .../subsystems/win32/win32k/ntuser/painting.c | 15 +- .../subsystems/win32/win32k/objects/bitblt.c | 484 +++++++----------- .../subsystems/win32/win32k/objects/dcobjs.c | 5 + .../subsystems/win32/win32k/objects/dibobj.c | 2 +- .../subsystems/win32/win32k/objects/drawing.c | 6 +- .../win32/win32k/objects/fillshap.c | 2 +- .../win32/win32k/objects/freetype.c | 4 +- .../subsystems/win32/win32k/objects/palette.c | 20 +- .../win32/win32k/objects/polyfill.c | 8 +- 20 files changed, 421 insertions(+), 457 deletions(-) diff --git a/reactos/dll/win32/shell32/iconcache.c b/reactos/dll/win32/shell32/iconcache.c index a57c33e52c6..01e84c99e75 100644 --- a/reactos/dll/win32/shell32/iconcache.c +++ b/reactos/dll/win32/shell32/iconcache.c @@ -180,8 +180,8 @@ static HICON SIC_OverlayShortcutImage(HICON SourceIcon, BOOL large) if (NULL == SelectObject(ShortcutDC, ShortcutIconInfo.hbmColor)) goto fail; if (!MaskBlt(TargetDC, 0, SourceBitmapInfo.bmHeight - ShortcutBitmapInfo.bmHeight, ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight, - ShortcutDC, 0, 0, ShortcutIconInfo.hbmMask, 0, 0, - MAKEROP4(SRCCOPY, 0xAA0000))) + ShortcutDC, 0, 0, ShortcutIconInfo.hbmMask, 0, 0, + MAKEROP4(0xAA0000, SRCCOPY))) { goto fail; } diff --git a/reactos/subsystems/win32/win32k/dib/dib.c b/reactos/subsystems/win32/win32k/dib/dib.c index 2066c9e0b72..37767877905 100644 --- a/reactos/subsystems/win32/win32k/dib/dib.c +++ b/reactos/subsystems/win32/win32k/dib/dib.c @@ -87,11 +87,12 @@ DIB_FUNCTIONS DibFunctionsForBitmapFormat[] = } }; + ULONG DIB_DoRop(ULONG Rop, ULONG Dest, ULONG Source, ULONG Pattern) { ULONG ResultNibble; - ULONG Result; + ULONG Result = 0; ULONG i; static const ULONG ExpandDest[16] = { @@ -151,31 +152,34 @@ static const ULONG ExpandDest[16] = 0xF0F0F0F0 /* 1111 */, }; - /* Optimized code for the various named rop codes. */ - switch (Rop) + Rop &=0xFF; + switch(Rop) { - case ROP3_TO_ROP4(BLACKNESS): return(0); - case ROP3_TO_ROP4(NOTSRCERASE): return(~(Dest | Source)); - case ROP3_TO_ROP4(NOTSRCCOPY): return(~Source); - case ROP3_TO_ROP4(SRCERASE): return((~Dest) & Source); - case ROP3_TO_ROP4(DSTINVERT): return(~Dest); - case ROP3_TO_ROP4(PATINVERT): return(Dest ^ Pattern); - case ROP3_TO_ROP4(SRCINVERT): return(Dest ^ Source); - case ROP3_TO_ROP4(SRCAND): return(Dest & Source); - case ROP3_TO_ROP4(MERGEPAINT): return(Dest | (~Source)); - case ROP3_TO_ROP4(SRCPAINT): return(Dest | Source); - case ROP3_TO_ROP4(MERGECOPY): return(Source & Pattern); - case ROP3_TO_ROP4(SRCCOPY): return(Source); - case ROP3_TO_ROP4(PATCOPY): return(Pattern); - case ROP3_TO_ROP4(PATPAINT): return(Dest | (~Source) | Pattern); - case ROP3_TO_ROP4(WHITENESS): return(0xFFFFFFFF); + + /* Optimized code for the various named rop codes. */ + case R3_OPINDEX_NOOP: return(Dest); + case R3_OPINDEX_BLACKNESS: return(0); + case R3_OPINDEX_NOTSRCERASE: return(~(Dest | Source)); + case R3_OPINDEX_NOTSRCCOPY: return(~Source); + case R3_OPINDEX_SRCERASE: return((~Dest) & Source); + case R3_OPINDEX_DSTINVERT: return(~Dest); + case R3_OPINDEX_PATINVERT: return(Dest ^ Pattern); + case R3_OPINDEX_SRCINVERT: return(Dest ^ Source); + case R3_OPINDEX_SRCAND: return(Dest & Source); + case R3_OPINDEX_MERGEPAINT: return(Dest | (~Source)); + case R3_OPINDEX_SRCPAINT: return(Dest | Source); + case R3_OPINDEX_MERGECOPY: return(Source & Pattern); + case R3_OPINDEX_SRCCOPY: return(Source); + case R3_OPINDEX_PATCOPY: return(Pattern); + case R3_OPINDEX_PATPAINT: return(Dest | (~Source) | Pattern); + case R3_OPINDEX_WHITENESS: return(0xFFFFFFFF); } + /* Expand the ROP operation to all four bytes */ - Rop &= 0xFF; Rop |= (Rop << 24) | (Rop << 16) | (Rop << 8); /* Do the operation on four bits simultaneously. */ Result = 0; - for (i = 0; i < 8; i++) + for (i = 0; i < 6; i++) { ResultNibble = Rop & ExpandDest[Dest & 0xF] & ExpandSource[Source & 0xF] & ExpandPattern[Pattern & 0xF]; Result |= (((ResultNibble & 0xFF000000) ? 0x8 : 0x0) | ((ResultNibble & 0x00FF0000) ? 0x4 : 0x0) | diff --git a/reactos/subsystems/win32/win32k/dib/dib.h b/reactos/subsystems/win32/win32k/dib/dib.h index 4ae455bc92b..5db2f042c7e 100644 --- a/reactos/subsystems/win32/win32k/dib/dib.h +++ b/reactos/subsystems/win32/win32k/dib/dib.h @@ -31,7 +31,7 @@ typedef struct _BLTINFO POINTL SourcePoint; BRUSHOBJ *Brush; POINTL BrushOrigin; - ULONG Rop4; + ROP4 Rop4; } BLTINFO, *PBLTINFO; typedef VOID (*PFN_DIB_PutPixel)(SURFOBJ*,LONG,LONG,ULONG); diff --git a/reactos/subsystems/win32/win32k/dib/dib1bpp.c b/reactos/subsystems/win32/win32k/dib/dib1bpp.c index b924112351c..b245c528611 100644 --- a/reactos/subsystems/win32/win32k/dib/dib1bpp.c +++ b/reactos/subsystems/win32/win32k/dib/dib1bpp.c @@ -380,7 +380,7 @@ DIB_1BPP_BitBlt(PBLTINFO BltInfo) Pattern |= (DIB_GetSourceIndex(PatternObj, (X + BrushOrigin.x + k) % PatternWidth, PatternY) << (31 - k)); } - Dest = DIB_DoRop(Rop4, Dest, Source, Pattern); + Dest = DIB_DoRop(BltInfo->Rop4, Dest, Source, Pattern); Dest &= ~((1 << (31 - NoBits)) - 1); Dest |= *((PBYTE)DestBits) & ((1 << (31 - NoBits)) - 1); diff --git a/reactos/subsystems/win32/win32k/dib/stretchblt.c b/reactos/subsystems/win32/win32k/dib/stretchblt.c index b6d479d8703..45a5b8f826b 100644 --- a/reactos/subsystems/win32/win32k/dib/stretchblt.c +++ b/reactos/subsystems/win32/win32k/dib/stretchblt.c @@ -43,6 +43,8 @@ BOOLEAN DIB_XXBPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, SURFOBJ *Ma LONG PatternX = 0, PatternY = 0; + ASSERT(IS_VALID_ROP4(ROP)); + BOOL UsesSource = ROP4_USES_SOURCE(ROP); BOOL UsesPattern = ROP4_USES_PATTERN(ROP); @@ -122,7 +124,7 @@ BOOLEAN DIB_XXBPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, SURFOBJ *Ma { sx = SourceRect->left+(DesX - DestRect->left) * SrcWidth / DstWidth; if (sx < 0 || sy < 0 || - MaskSurf->sizlBitmap.cx < sx || MaskSurf->sizlBitmap.cy < sy || + MaskSurf->sizlBitmap.cx < sx || MaskSurf->sizlBitmap.cy < sy || fnMask_GetPixel(MaskSurf, sx, sy) != 0) { CanDraw = FALSE; @@ -137,10 +139,10 @@ BOOLEAN DIB_XXBPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf, SURFOBJ *Ma { Source = XLATEOBJ_iXlate(ColorTranslation, fnSource_GetPixel(SourceSurf, sx, sy)); } - else + else { Source = 0; - CanDraw = (ROP3_TO_ROP4(SRCCOPY) != ROP); + CanDraw = ((ROP & 0xFF) != R3_OPINDEX_SRCCOPY); } } diff --git a/reactos/subsystems/win32/win32k/eng/bitblt.c b/reactos/subsystems/win32/win32k/eng/bitblt.c index 029f55e1832..6b6ee51f9f1 100644 --- a/reactos/subsystems/win32/win32k/eng/bitblt.c +++ b/reactos/subsystems/win32/win32k/eng/bitblt.c @@ -27,11 +27,11 @@ typedef BOOLEAN (APIENTRY *PBLTRECTFUNC)(SURFOBJ* OutputObj, static BOOLEAN APIENTRY BltMask(SURFOBJ* psoDest, - SURFOBJ* psoSource, // unused + SURFOBJ* psoSource, SURFOBJ* psoMask, - XLATEOBJ* ColorTranslation, // unused + XLATEOBJ* ColorTranslation, RECTL* prclDest, - POINTL* pptlSource, // unused + POINTL* pptlSource, POINTL* pptlMask, BRUSHOBJ* pbo, POINTL* pptlBrush, @@ -46,19 +46,21 @@ BltMask(SURFOBJ* psoDest, PSURFACE psurfPattern; ULONG PatternWidth = 0, PatternHeight = 0; LONG PatternX0 = 0, PatternX = 0, PatternY = 0; + LONG SrcX = 0, SrcY = 0; PFN_DIB_PutPixel fnDest_PutPixel = NULL; - PFN_DIB_GetPixel fnPattern_GetPixel = NULL; - ULONG Pattern = 0; + PFN_DIB_GetPixel fnPattern_GetPixel = NULL, fnSrc_GetPixel = NULL, fnDest_GetPixel; + ULONG Pattern = 0, Source = 0, Dest = 0; HBITMAP hbmPattern; + DWORD fgndRop, bkgndRop; - ASSERT(psoSource == NULL); - ASSERT(pptlSource == NULL); + ASSERT(IS_VALID_ROP4(Rop4)); - if (psoMask == NULL) - { - return FALSE; - } + fgndRop = ROP4_FGND(Rop4); + bkgndRop = ROP4_BKGND(Rop4); + //DPRINT1("Rop4 : 0x%08x\n", Rop4); + + /* Determine pattern */ if (pbo && pbo->iSolidColor == 0xFFFFFFFF) { pebo = CONTAINING_RECORD(pbo, EBRUSHOBJ, BrushObject); @@ -80,6 +82,18 @@ BltMask(SURFOBJ* psoDest, fjMaskBit0 = 0x80 >> (pptlMask->x & 0x07); fnDest_PutPixel = DibFunctionsForBitmapFormat[psoDest->iBitmapFormat].DIB_PutPixel; + fnDest_GetPixel = DibFunctionsForBitmapFormat[psoDest->iBitmapFormat].DIB_GetPixel; + + /* Do we have a source */ + if(psoSource) + { + /* Sanity check */ + ASSERT(ROP4_USES_SOURCE(Rop4)); + fnSrc_GetPixel = DibFunctionsForBitmapFormat[psoSource->iBitmapFormat].DIB_GetPixel; + SrcY = pptlSource->y; + SrcX = pptlSource->x; + } + if (psurfPattern) { PatternY = (prclDest->top - pptlBrush->y) % PatternHeight; @@ -92,48 +106,64 @@ BltMask(SURFOBJ* psoDest, { PatternX0 += PatternWidth; } - - for (y = prclDest->top; y < prclDest->bottom; y++) - { - pjMskCurrent = pjMskLine; - fjMaskBit = fjMaskBit0; - PatternX = PatternX0; - - for (x = prclDest->left; x < prclDest->right; x++) - { - if (*pjMskCurrent & fjMaskBit) - { - fnDest_PutPixel(psoDest, x, y, - fnPattern_GetPixel(psoPattern, PatternX, PatternY)); - } - fjMaskBit = _rotr8(fjMaskBit, 1); - pjMskCurrent += (fjMaskBit >> 7); - PatternX++; - PatternX %= PatternWidth; - } - pjMskLine += psoMask->lDelta; - PatternY++; - PatternY %= PatternHeight; - } + PatternX = PatternX0; } else { Pattern = pbo ? pbo->iSolidColor : 0; - for (y = prclDest->top; y < prclDest->bottom; y++) - { - pjMskCurrent = pjMskLine; - fjMaskBit = fjMaskBit0; + } - for (x = prclDest->left; x < prclDest->right; x++) + for (y = prclDest->top; y < prclDest->bottom; y++) + { + pjMskCurrent = pjMskLine; + fjMaskBit = fjMaskBit0; + + for (x = prclDest->left; x < prclDest->right; x++) + { + Rop4 = (*pjMskCurrent & fjMaskBit) ? fgndRop : bkgndRop; + + if(psurfPattern) { - if (*pjMskCurrent & fjMaskBit) - { - fnDest_PutPixel(psoDest, x, y, Pattern); - } - fjMaskBit = _rotr8(fjMaskBit, 1); - pjMskCurrent += (fjMaskBit >> 7); + if(ROP4_USES_PATTERN(Rop4)) + Pattern = fnPattern_GetPixel(psoPattern, PatternX, PatternY); + PatternX++; + PatternX %= PatternWidth; } - pjMskLine += psoMask->lDelta; + + if(psoSource) + { + if(ROP4_USES_SOURCE(Rop4)) + { + Source = XLATEOBJ_iXlate(ColorTranslation, + fnSrc_GetPixel(psoSource, SrcX, SrcY)); + } + SrcX++; + } + + if(ROP4_USES_DEST(Rop4)) + Dest = fnDest_GetPixel(psoDest, x, y); + + fnDest_PutPixel(psoDest, + x, + y, + DIB_DoRop(Rop4, + Dest, + Source, + Pattern)); + fjMaskBit = _rotr8(fjMaskBit, 1); + pjMskCurrent += (fjMaskBit >> 7); + } + pjMskLine += psoMask->lDelta; + if(psurfPattern) + { + PatternY++; + PatternY %= PatternHeight; + PatternX = PatternX0; + } + if(psoSource) + { + SrcY++; + SrcX = pptlSource->x; } } @@ -153,7 +183,7 @@ BltPatCopy(SURFOBJ* Dest, POINTL* MaskPoint, BRUSHOBJ* pbo, POINTL* BrushPoint, - ROP4 Rop4) + DWORD Rop4) { // These functions are assigned if we're working with a DIB // The assigned functions depend on the bitsPerPixel of the DIB @@ -188,7 +218,7 @@ CallDibBitBlt(SURFOBJ* OutputObj, BltInfo.DestRect = *OutputRect; BltInfo.SourcePoint = *InputPoint; - if (ROP3_TO_ROP4(SRCCOPY) == Rop4) + if ((Rop4 & 0xFF) == R3_OPINDEX_SRCCOPY) return DibFunctionsForBitmapFormat[OutputObj->iBitmapFormat].DIB_BitBltSrcCopy(&BltInfo); BltInfo.Brush = pbo; @@ -244,7 +274,7 @@ NtGdiEngBitBlt( IN POINTL *pptlMask, IN BRUSHOBJ *pbo, IN POINTL *pptlBrush, - IN ROP4 rop4 ) + IN ROP4 Rop4) { RECTL rclTrg; POINTL ptlSrc; @@ -272,7 +302,7 @@ NtGdiEngBitBlt( } _SEH2_END; - return EngBitBlt(psoTrg, psoSrc, psoMask, pco, pxlo, &rclTrg, &ptlSrc, &ptlMask, pbo, &ptlBrush, rop4); + return EngBitBlt(psoTrg, psoSrc, psoMask, pco, pxlo, &rclTrg, &ptlSrc, &ptlMask, pbo, &ptlBrush, Rop4); } /* @@ -289,7 +319,7 @@ EngBitBlt(SURFOBJ *DestObj, POINTL *MaskOrigin, BRUSHOBJ *pbo, POINTL *BrushOrigin, - ROP4 rop4) + ROP4 Rop4) { BYTE clippingType; RECTL CombinedRect; @@ -306,16 +336,20 @@ EngBitBlt(SURFOBJ *DestObj, unsigned i; POINTL Pt; ULONG Direction; - BOOL UsesSource; + BOOL UsesSource, UsesMask; POINTL AdjustedBrushOrigin; - UsesSource = ROP4_USES_SOURCE(rop4); - if (R4_NOOP == rop4) + UsesSource = ROP4_USES_SOURCE(Rop4); + UsesMask = ROP4_USES_MASK(Rop4); + + if (Rop4 == ROP4_NOOP) { /* Copy destination onto itself: nop */ return TRUE; } + //DPRINT1("Rop4 : 0x%08x\n", Rop4); + OutputRect = *DestRect; if (OutputRect.right < OutputRect.left) { @@ -434,11 +468,11 @@ EngBitBlt(SURFOBJ *DestObj, clippingType = ClipRegion->iDComplexity; } - if (R4_MASK == rop4) + if (UsesMask) { BltRectFunc = BltMask; } - else if (ROP3_TO_ROP4(PATCOPY) == rop4) + else if ((Rop4 & 0xFF) == R3_OPINDEX_PATCOPY) { if (pbo && pbo->iSolidColor == 0xFFFFFFFF) BltRectFunc = CallDibBitBlt; @@ -456,7 +490,7 @@ EngBitBlt(SURFOBJ *DestObj, case DC_TRIVIAL: Ret = (*BltRectFunc)(OutputObj, InputObj, Mask, ColorTranslation, &OutputRect, &InputPoint, MaskOrigin, pbo, - &AdjustedBrushOrigin, rop4); + &AdjustedBrushOrigin, Rop4); break; case DC_RECT: /* Clip the blt to the clip rectangle */ @@ -470,7 +504,7 @@ EngBitBlt(SURFOBJ *DestObj, Pt.y = InputPoint.y + CombinedRect.top - OutputRect.top; Ret = (*BltRectFunc)(OutputObj, InputObj, Mask, ColorTranslation, &CombinedRect, &Pt, MaskOrigin, pbo, - &AdjustedBrushOrigin, rop4); + &AdjustedBrushOrigin, Rop4); } break; case DC_COMPLEX: @@ -511,7 +545,7 @@ EngBitBlt(SURFOBJ *DestObj, Ret = (*BltRectFunc)(OutputObj, InputObj, Mask, ColorTranslation, &CombinedRect, &Pt, MaskOrigin, pbo, &AdjustedBrushOrigin, - rop4) && Ret; + Rop4) && Ret; } } } @@ -534,7 +568,7 @@ IntEngBitBlt( POINTL *pptlMask, BRUSHOBJ *pbo, POINTL *pptlBrush, - ROP4 rop4) + ROP4 Rop4) { SURFACE *psurfTrg; SURFACE *psurfSrc = NULL; @@ -550,6 +584,11 @@ IntEngBitBlt( rclClipped = *prclTrg; RECTL_vMakeWellOrdered(&rclClipped); + //DPRINT1("Rop4 : 0x%08x\n", Rop4); + + /* Sanity check */ + ASSERT(IS_VALID_ROP4(Rop4)); + if (pco) { /* Clip target rect against the bounds of the clipping region */ @@ -564,7 +603,7 @@ IntEngBitBlt( pco = NULL; } - if (ROP4_USES_SOURCE(rop4)) + if (ROP4_USES_SOURCE(Rop4)) { ASSERT(psoSrc); psurfSrc = CONTAINING_RECORD(psoSrc, SURFACE, SurfObj); @@ -614,7 +653,7 @@ IntEngBitBlt( pptlMask, pbo, pptlBrush, - rop4); + Rop4); // FIXME: cleanup temp surface! @@ -820,7 +859,7 @@ EngMaskBitBlt(SURFOBJ *psoDest, else Ret = BltMask(psoOutput, NULL, psoInput, DestColorTranslation, &OutputRect, NULL, &InputPoint, pbo, &AdjustedBrushOrigin, - R4_MASK); + ROP4_MASK); break; case DC_RECT: // Clip the blt to the clip rectangle @@ -840,7 +879,7 @@ EngMaskBitBlt(SURFOBJ *psoDest, else { Ret = BltMask(psoOutput, NULL, psoInput, DestColorTranslation, - &CombinedRect, NULL, &Pt, pbo, &AdjustedBrushOrigin, R4_MASK); + &CombinedRect, NULL, &Pt, pbo, &AdjustedBrushOrigin, ROP4_MASK); } } break; @@ -889,7 +928,7 @@ EngMaskBitBlt(SURFOBJ *psoDest, Ret = BltMask(psoOutput, NULL, psoInput, DestColorTranslation, &CombinedRect, NULL, &Pt, pbo, &AdjustedBrushOrigin, - R4_MASK) && Ret; + ROP4_MASK) && Ret; } } } @@ -954,7 +993,7 @@ IntEngMaskBlt(SURFOBJ *psoDest, but the VMware driver doesn't hook that call. */ IntEngBitBlt(psoDest, NULL, psoMask, ClipRegion, DestColorTranslation, DestRect, pptlMask, pptlMask, pbo, BrushOrigin, - R4_NOOP); + ROP4_NOOP); ret = EngMaskBitBlt(psoDest, psoMask, ClipRegion, DestColorTranslation, SourceColorTranslation, &OutputRect, &InputPoint, pbo, BrushOrigin); @@ -962,7 +1001,7 @@ IntEngMaskBlt(SURFOBJ *psoDest, /* Dummy BitBlt to let driver know that something has changed. */ IntEngBitBlt(psoDest, NULL, psoMask, ClipRegion, DestColorTranslation, DestRect, pptlMask, pptlMask, pbo, BrushOrigin, - R4_NOOP); + ROP4_NOOP); return ret; } diff --git a/reactos/subsystems/win32/win32k/eng/copybits.c b/reactos/subsystems/win32/win32k/eng/copybits.c index afb2f16cc99..1200c1ce0fb 100644 --- a/reactos/subsystems/win32/win32k/eng/copybits.c +++ b/reactos/subsystems/win32/win32k/eng/copybits.c @@ -92,7 +92,7 @@ EngCopyBits(SURFOBJ *psoDest, // If CopyBits wasn't hooked, BitBlt must be ret = IntEngBitBlt(psoDest, psoSource, NULL, Clip, ColorTranslation, DestRect, SourcePoint, - NULL, NULL, NULL, ROP3_TO_ROP4(SRCCOPY)); + NULL, NULL, NULL, ROP4_FROM_INDEX(R3_OPINDEX_SRCCOPY)); goto cleanup; } @@ -111,7 +111,7 @@ EngCopyBits(SURFOBJ *psoDest, BltInfo.SourceSurface = psoSource; BltInfo.PatternSurface = NULL; BltInfo.XlateSourceToDest = ColorTranslation; - BltInfo.Rop4 = SRCCOPY; + BltInfo.Rop4 = ROP4_FROM_INDEX(R3_OPINDEX_SRCCOPY); switch (clippingType) { diff --git a/reactos/subsystems/win32/win32k/eng/mouse.c b/reactos/subsystems/win32/win32k/eng/mouse.c index b2db0e61af7..00dc0333ccb 100644 --- a/reactos/subsystems/win32/win32k/eng/mouse.c +++ b/reactos/subsystems/win32/win32k/eng/mouse.c @@ -175,7 +175,7 @@ IntHideMousePointer( &ptlSave, NULL, NULL, - ROP3_TO_ROP4(SRCCOPY)); + ROP4_FROM_INDEX(R3_OPINDEX_SRCCOPY)); } VOID @@ -228,7 +228,7 @@ IntShowMousePointer(PDEVOBJ *ppdev, SURFOBJ *psoDest) NULL, NULL, NULL, - ROP3_TO_ROP4(SRCCOPY)); + ROP4_FROM_INDEX(R3_OPINDEX_SRCCOPY)); /* Blt the pointer on the screen. */ if (pgp->psurfColor) @@ -243,7 +243,7 @@ IntShowMousePointer(PDEVOBJ *ppdev, SURFOBJ *psoDest) NULL, NULL, NULL, - ROP3_TO_ROP4(SRCAND)); + ROP4_FROM_INDEX(R3_OPINDEX_SRCAND)); IntEngBitBlt(psoDest, &pgp->psurfColor->SurfObj, @@ -255,7 +255,7 @@ IntShowMousePointer(PDEVOBJ *ppdev, SURFOBJ *psoDest) NULL, NULL, NULL, - ROP3_TO_ROP4(SRCINVERT)); + ROP4_FROM_INDEX(R3_OPINDEX_SRCINVERT)); } else { @@ -269,7 +269,7 @@ IntShowMousePointer(PDEVOBJ *ppdev, SURFOBJ *psoDest) NULL, NULL, NULL, - ROP3_TO_ROP4(SRCAND)); + ROP4_FROM_INDEX(R3_OPINDEX_SRCAND)); rclPointer.top += pgp->Size.cy; @@ -283,7 +283,7 @@ IntShowMousePointer(PDEVOBJ *ppdev, SURFOBJ *psoDest) NULL, NULL, NULL, - ROP3_TO_ROP4(SRCINVERT)); + ROP4_FROM_INDEX(R3_OPINDEX_SRCINVERT)); } } @@ -337,7 +337,7 @@ EngSetPointerShape( rectl.bottom = sizel.cy; /* Calculate lDelta for our surfaces. */ - lDelta = WIDTH_BYTES_ALIGN32(sizel.cx, + lDelta = WIDTH_BYTES_ALIGN32(sizel.cx, BitsPerFormat(pso->iBitmapFormat)); /* Create a bitmap for saving the pixels under the cursor. */ diff --git a/reactos/subsystems/win32/win32k/eng/stretchblt.c b/reactos/subsystems/win32/win32k/eng/stretchblt.c index a6f3d4f4572..1b4a7f99ea6 100644 --- a/reactos/subsystems/win32/win32k/eng/stretchblt.c +++ b/reactos/subsystems/win32/win32k/eng/stretchblt.c @@ -104,7 +104,7 @@ EngStretchBltROP( IN POINTL *MaskOrigin, IN ULONG Mode, IN BRUSHOBJ *pbo, - IN DWORD ROP4) + IN ROP4 Rop4) { RECTL InputRect; RECTL OutputRect; @@ -116,7 +116,7 @@ EngStretchBltROP( PSTRETCHRECTFUNC BltRectFunc; BOOLEAN Ret = TRUE; POINTL AdjustedBrushOrigin; - BOOL UsesSource = ROP4_USES_SOURCE(ROP4); + BOOL UsesSource = ROP4_USES_SOURCE(Rop4); BYTE clippingType; RECTL ClipRect; @@ -132,6 +132,13 @@ EngStretchBltROP( LONG SrcHeight; LONG SrcWidth; + if (Rop4 == ROP4_NOOP) + { + /* Copy destination onto itself: nop */ + return TRUE; + } + + /* Determine clipping type */ if (ClipRegion == (CLIPOBJ *) NULL) { @@ -142,12 +149,6 @@ EngStretchBltROP( clippingType = ClipRegion->iDComplexity; } - if (ROP4 == R4_NOOP) - { - /* Copy destination onto itself: nop */ - return TRUE; - } - OutputRect = *prclDest; if (OutputRect.right < OutputRect.left) { @@ -257,7 +258,7 @@ EngStretchBltROP( case DC_TRIVIAL: Ret = (*BltRectFunc)(psoOutput, psoInput, Mask, ColorTranslation, &OutputRect, &InputRect, MaskOrigin, - pbo, &AdjustedBrushOrigin, ROP4); + pbo, &AdjustedBrushOrigin, Rop4); break; case DC_RECT: // Clip the blt to the clip rectangle @@ -278,7 +279,7 @@ EngStretchBltROP( MaskOrigin, pbo, &AdjustedBrushOrigin, - ROP4); + Rop4); } break; case DC_COMPLEX: @@ -323,7 +324,7 @@ EngStretchBltROP( MaskOrigin, pbo, &AdjustedBrushOrigin, - ROP4); + Rop4); } } } @@ -371,7 +372,7 @@ EngStretchBlt( MaskOrigin, Mode, NULL, - ROP3_TO_ROP4(SRCCOPY)); + ROP4_FROM_INDEX(R3_OPINDEX_SRCCOPY)); } BOOL APIENTRY @@ -385,7 +386,7 @@ IntEngStretchBlt(SURFOBJ *psoDest, POINTL *pMaskOrigin, BRUSHOBJ *pbo, POINTL *BrushOrigin, - ROP4 ROP) + DWORD Rop4) { BOOLEAN ret; COLORADJUSTMENT ca; @@ -395,7 +396,7 @@ IntEngStretchBlt(SURFOBJ *psoDest, RECTL InputClippedRect; RECTL InputRect; RECTL OutputRect; - BOOL UsesSource = ROP4_USES_SOURCE(ROP); + BOOL UsesSource = ROP4_USES_SOURCE(Rop4); LONG InputClWidth, InputClHeight, InputWidth, InputHeight; ASSERT(psoDest); @@ -403,6 +404,9 @@ IntEngStretchBlt(SURFOBJ *psoDest, ASSERT(psurfDest); ASSERT(DestRect); + /* Sanity check */ + ASSERT(IS_VALID_ROP4(Rop4)); + InputClippedRect = *DestRect; if (InputClippedRect.right < InputClippedRect.left) { @@ -485,7 +489,7 @@ IntEngStretchBlt(SURFOBJ *psoDest, &MaskOrigin, COLORONCOLOR, pbo, - ROP); + Rop4); } if (! ret) @@ -502,7 +506,7 @@ IntEngStretchBlt(SURFOBJ *psoDest, &MaskOrigin, COLORONCOLOR, pbo, - ROP); + Rop4); } return ret; diff --git a/reactos/subsystems/win32/win32k/include/color.h b/reactos/subsystems/win32/win32k/include/color.h index 0972f2e8dd3..faf88a77eee 100644 --- a/reactos/subsystems/win32/win32k/include/color.h +++ b/reactos/subsystems/win32/win32k/include/color.h @@ -27,7 +27,7 @@ typedef struct _COLORSPACE typedef struct _COLORTRANSFORMOBJ { BASEOBJECT BaseObject; - HANDLE hColorTransform; + HANDLE hColorTransform; } GDICLRXFORM, COLORTRANSFORMOBJ, *PCOLORTRANSFORMOBJ; extern HCOLORSPACE hStockColorSpace; @@ -36,6 +36,6 @@ const PALETTEENTRY* FASTCALL COLOR_GetSystemPaletteTemplate (VOID); COLORREF APIENTRY COLOR_LookupNearestColor (PALETTEENTRY* palPalEntry, INT size, COLORREF color); INT APIENTRY COLOR_PaletteLookupExactIndex (PALETTEENTRY* palPalEntry, INT size, COLORREF col); INT APIENTRY COLOR_PaletteLookupPixel(PALETTEENTRY *palPalEntry, INT size, XLATEOBJ *XlateObj, COLORREF col, BOOL skipReserved); -UINT FASTCALL IntGdiRealizePalette (HDC); +UINT FASTCALL IntGdiRealizePalette (PDC); HCOLORSPACE FASTCALL IntGdiCreateColorSpace(PLOGCOLORSPACEEXW); BOOL FASTCALL IntGdiDeleteColorSpace(HCOLORSPACE); diff --git a/reactos/subsystems/win32/win32k/include/inteng.h b/reactos/subsystems/win32/win32k/include/inteng.h index 1d8610d2dac..4b360b0ce9b 100644 --- a/reactos/subsystems/win32/win32k/include/inteng.h +++ b/reactos/subsystems/win32/win32k/include/inteng.h @@ -17,19 +17,40 @@ typedef struct tagSPAN ULONG Width; } SPAN, *PSPAN; -#define R3_OPINDEX_SRCCOPY 0xcc -#define R3_OPINDEX_NOOP 0xaa -#define R4_NOOP ((R3_OPINDEX_NOOP << 8) | R3_OPINDEX_NOOP) -#define R4_MASK ((R3_OPINDEX_NOOP << 8) | R3_OPINDEX_SRCCOPY) +#define R3_OPINDEX_NOOP 0xAA + +#define R3_OPINDEX_BLACKNESS 0x00 +#define R3_OPINDEX_NOTSRCERASE 0x11 +#define R3_OPINDEX_NOTSRCCOPY 0x33 +#define R3_OPINDEX_SRCERASE 0x44 +#define R3_OPINDEX_DSTINVERT 0x55 +#define R3_OPINDEX_PATINVERT 0x5A +#define R3_OPINDEX_SRCINVERT 0x66 +#define R3_OPINDEX_SRCAND 0x88 +#define R3_OPINDEX_MERGEPAINT 0xBB +#define R3_OPINDEX_MERGECOPY 0xC0 +#define R3_OPINDEX_SRCCOPY 0xCC +#define R3_OPINDEX_SRCPAINT 0xEE +#define R3_OPINDEX_PATCOPY 0xF0 +#define R3_OPINDEX_PATPAINT 0xFB +#define R3_OPINDEX_WHITENESS 0xFF #define ROP2_TO_MIX(Rop2) (((Rop2) << 8) | (Rop2)) -#define ROP3_USES_DEST(Rop3) ((((Rop3) & 0xAA0000) >> 1) != ((Rop3) & 0x550000)) -#define ROP4_USES_DEST(Rop4) (((((Rop4) & 0xAA) >> 1) != ((Rop4) & 0x55)) || ((((Rop4) & 0xAA00) >> 1) != ((Rop4) & 0x5500))) -#define ROP3_USES_SOURCE(Rop3) ((((Rop3) & 0xCC0000) >> 2) != ((Rop3) & 0x330000)) -#define ROP4_USES_SOURCE(Rop4) (((((Rop4) & 0xCC) >> 2) != ((Rop4) & 0x33)) || ((((Rop4) & 0xCC00) >> 2) != ((Rop4) & 0x3300))) -#define ROP3_USES_PATTERN(Rop3) ((((Rop3) & 0xF00000) >> 4) != ((Rop3) & 0x0F0000)) + +#define ROP4_FROM_INDEX(index) ((index) | ((index) << 8)) + +#define ROP4_USES_SOURCE(Rop4) (((((Rop4) & 0xCC00) >> 2) != ((Rop4) & 0x3300)) || ((((Rop4) & 0xCC) >> 2) != ((Rop4) & 0x33))) +#define ROP4_USES_MASK(Rop4) (((Rop4) & 0xFF00) != (((Rop4) & 0xff) << 8)) +#define ROP4_USES_DEST(Rop4) (((((Rop4) & 0xAA) >> 1) != ((Rop4) & 0x55)) || ((((Rop4) & 0xAA00) >> 1) != ((Rop4) & 0x5500))) #define ROP4_USES_PATTERN(Rop4) (((((Rop4) & 0xF0) >> 4) != ((Rop4) & 0x0F)) || ((((Rop4) & 0xF000) >> 4) != ((Rop4) & 0x0F00))) -#define ROP3_TO_ROP4(Rop3) ((((Rop3) >> 8) & 0xff00) | (((Rop3) >> 16) & 0x00ff)) + +#define IS_VALID_ROP4(rop) (((rop) & 0xFFFF0000) == 0) + +#define ROP4_FGND(Rop4) ((Rop4) & 0x00FF) +#define ROP4_BKGND(Rop4) (((Rop4) & 0xFF00) >> 8) + +#define ROP4_NOOP (R3_OPINDEX_NOOP | (R3_OPINDEX_NOOP << 8)) +#define ROP4_MASK (R3_OPINDEX_SRCCOPY | (R3_OPINDEX_NOOP << 8)) /* Definitions of IntEngXxx functions */ diff --git a/reactos/subsystems/win32/win32k/ntuser/painting.c b/reactos/subsystems/win32/win32k/ntuser/painting.c index beedd93cfb8..8692a036a4b 100644 --- a/reactos/subsystems/win32/win32k/ntuser/painting.c +++ b/reactos/subsystems/win32/win32k/ntuser/painting.c @@ -307,7 +307,7 @@ co_IntPaintWindows(PWND Wnd, ULONG Flags, BOOL Recurse) /* * IntInvalidateWindows * - * Internal function used by IntRedrawWindow, UserRedrawDesktop, + * Internal function used by IntRedrawWindow, UserRedrawDesktop, * co_WinPosSetWindowPos, IntValidateParent, co_UserRedrawWindow. */ VOID FASTCALL @@ -759,7 +759,7 @@ IntPrintWindow( xSrc = 0; ySrc = 0; } - + // TODO: Setup Redirection for Print. return FALSE; @@ -1951,7 +1951,11 @@ UserRealizePalette(HDC hdc) HWND hWnd; DWORD Ret; - Ret = IntGdiRealizePalette(hdc); + PDC pdc = DC_LockDc(hdc); + if(!pdc) + return 0; + + Ret = IntGdiRealizePalette(pdc); if (Ret) // There was a change. { hWnd = IntWindowFromDC(hdc); @@ -1960,6 +1964,7 @@ UserRealizePalette(HDC hdc) UserSendNotifyMessage((HWND)HWND_BROADCAST, WM_PALETTECHANGED, (WPARAM)hWnd, 0); } } + DC_UnlockDc(pdc); return Ret; } @@ -2065,7 +2070,7 @@ NtUserPrintWindow( HDC hdcBlt, UINT nFlags) { - PWND Window; + PWND Window; BOOL Ret = FALSE; UserEnterExclusive(); @@ -2075,7 +2080,7 @@ NtUserPrintWindow( Window = UserGetWindowObject(hwnd); // TODO: Add Desktop and MessageBox check via FNID's. if ( Window ) - { + { /* Validate flags and check it as a mask for 0 or 1. */ if ( (nFlags & PW_CLIENTONLY) == nFlags) Ret = IntPrintWindow( Window, hdcBlt, nFlags); diff --git a/reactos/subsystems/win32/win32k/objects/bitblt.c b/reactos/subsystems/win32/win32k/objects/bitblt.c index 0f7753728ba..1fa1d550027 100644 --- a/reactos/subsystems/win32/win32k/objects/bitblt.c +++ b/reactos/subsystems/win32/win32k/objects/bitblt.c @@ -23,7 +23,11 @@ #define NDEBUG #include +#define ROP_USES_SOURCE(Rop) (((((Rop) & 0xCC0000) >> 2) != ((Rop) & 0x330000)) || ((((Rop) & 0xCC000000) >> 2) != ((Rop) & 0x33000000))) +#define ROP_USES_MASK(Rop) (((Rop) & 0xFF000000) != (((Rop) & 0xff0000) << 8)) +#define FIXUP_ROP(Rop) if(((Rop) & 0xFF000000) == 0) Rop = MAKEROP4((Rop), (Rop)) +#define ROP_TO_ROP4(Rop) ((Rop) >> 16) BOOL APIENTRY NtGdiAlphaBlend( @@ -169,144 +173,21 @@ NtGdiBitBlt( IN DWORD crBackColor, IN FLONG fl) { - PDC DCDest; - PDC DCSrc = NULL; - HDC ahDC[2]; - PGDIOBJ apObj[2]; - PDC_ATTR pdcattr = NULL; - SURFACE *BitmapDest, *BitmapSrc = NULL; - RECTL DestRect, SourceRect; - POINTL SourcePoint; - BOOL Status = FALSE; - EXLATEOBJ exlo; - XLATEOBJ *XlateObj = NULL; - BOOL UsesSource = ROP3_USES_SOURCE(ROP); - - DPRINT("Locking DCs\n"); - ahDC[0] = hDCDest; - ahDC[1] = hDCSrc ; - GDIOBJ_LockMultipleObjs(2, ahDC, apObj); - DCDest = apObj[0]; - DCSrc = apObj[1]; - - if (NULL == DCDest) - { - if(DCSrc) GDIOBJ_UnlockObjByPtr(&DCSrc->BaseObject); - DPRINT("Invalid destination dc handle (0x%08x) passed to NtGdiBitBlt\n", hDCDest); - return FALSE; - } - - if (DCDest->dctype == DC_TYPE_INFO) - { - if(DCSrc) GDIOBJ_UnlockObjByPtr(&DCSrc->BaseObject); - GDIOBJ_UnlockObjByPtr(&DCDest->BaseObject); - /* Yes, Windows really returns TRUE in this case */ - return TRUE; - } - - if (UsesSource) - { - if (NULL == DCSrc) - { - GDIOBJ_UnlockObjByPtr(&DCDest->BaseObject); - DPRINT("Invalid source dc handle (0x%08x) passed to NtGdiBitBlt\n", hDCSrc); - return FALSE; - } - if (DCSrc->dctype == DC_TYPE_INFO) - { - GDIOBJ_UnlockObjByPtr(&DCDest->BaseObject); - GDIOBJ_UnlockObjByPtr(&DCSrc->BaseObject); - /* Yes, Windows really returns TRUE in this case */ - return TRUE; - } - } - else if(DCSrc) - { - DPRINT1("Getting a valid Source handle without using source!!!\n"); - GDIOBJ_UnlockObjByPtr(&DCSrc->BaseObject); - DCSrc = NULL ; - } - - pdcattr = DCDest->pdcattr; - - DestRect.left = XDest; - DestRect.top = YDest; - DestRect.right = XDest+Width; - DestRect.bottom = YDest+Height; - IntLPtoDP(DCDest, (LPPOINT)&DestRect, 2); - - DestRect.left += DCDest->ptlDCOrig.x; - DestRect.top += DCDest->ptlDCOrig.y; - DestRect.right += DCDest->ptlDCOrig.x; - DestRect.bottom += DCDest->ptlDCOrig.y; - - SourcePoint.x = XSrc; - SourcePoint.y = YSrc; - - if (UsesSource) - { - IntLPtoDP(DCSrc, (LPPOINT)&SourcePoint, 1); - - SourcePoint.x += DCSrc->ptlDCOrig.x; - SourcePoint.y += DCSrc->ptlDCOrig.y; - /* Calculate Source Rect */ - SourceRect.left = SourcePoint.x; - SourceRect.top = SourcePoint.y; - SourceRect.right = SourcePoint.x + DestRect.right - DestRect.left; - SourceRect.bottom = SourcePoint.y + DestRect.bottom - DestRect.top ; - } - - /* Prepare blit */ - DC_vPrepareDCsForBlit(DCDest, DestRect, DCSrc, SourceRect); - - if (pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY)) - DC_vUpdateFillBrush(DCDest); - - /* Determine surfaces to be used in the bitblt */ - BitmapDest = DCDest->dclevel.pSurface; - if (!BitmapDest) - goto cleanup; - - if (UsesSource) - { - { - BitmapSrc = DCSrc->dclevel.pSurface; - if (!BitmapSrc) - goto cleanup; - } - } - - /* Create the XLATEOBJ. */ - if (UsesSource) - { - EXLATEOBJ_vInitXlateFromDCs(&exlo, DCSrc, DCDest); - XlateObj = &exlo.xlo; - } - - /* Perform the bitblt operation */ - Status = IntEngBitBlt(&BitmapDest->SurfObj, - BitmapSrc ? &BitmapSrc->SurfObj : NULL, - NULL, - DCDest->rosdc.CombinedClip, - XlateObj, - &DestRect, - &SourcePoint, - NULL, - &DCDest->eboFill.BrushObject, - &DCDest->dclevel.pbrFill->ptOrigin, - ROP3_TO_ROP4(ROP)); - - if (UsesSource) - EXLATEOBJ_vCleanup(&exlo); -cleanup: - DC_vFinishBlit(DCDest, DCSrc); - if (UsesSource) - { - GDIOBJ_UnlockObjByPtr(&DCSrc->BaseObject); - } - GDIOBJ_UnlockObjByPtr(&DCDest->BaseObject); - - return Status; + /* Forward to NtGdiMaskBlt */ + // TODO : what's fl for? + return NtGdiMaskBlt(hDCDest, + XDest, + YDest, + Width, + Height, + hDCSrc, + XSrc, + YSrc, + NULL, + 0, + 0, + ROP, + crBackColor); } BOOL APIENTRY @@ -414,86 +295,6 @@ done: return Ret; } -/*********************************************************************** -* MaskBlt -* Ported from WINE by sedwards 11-4-03 -* -* Someone thought it would be faster to do it here and then switch back -* to GDI32. I dunno. Write a test and let me know. -* A. It should be in here! -*/ - -static const DWORD ROP3Table[256] = -{ - 0x000042, 0x010289, 0x020C89, 0x0300AA, 0x040C88, 0x0500A9, 0x060865, 0x0702C5, - 0x080F08, 0x090245, 0x0A0329, 0x0B0B2A, 0x0C0324, 0x0D0B25, 0x0E08A5, 0x0F0001, - 0x100C85, 0x1100A6, 0x120868, 0x1302C8, 0x140869, 0x1502C9, 0x165CCA, 0x171D54, - 0x180D59, 0x191CC8, 0x1A06C5, 0x1B0768, 0x1C06CA, 0x1D0766, 0x1E01A5, 0x1F0385, - 0x200F09, 0x210248, 0x220326, 0x230B24, 0x240D55, 0x251CC5, 0x2606C8, 0x271868, - 0x280369, 0x2916CA, 0x2A0CC9, 0x2B1D58, 0x2C0784, 0x2D060A, 0x2E064A, 0x2F0E2A, - 0x30032A, 0x310B28, 0x320688, 0x330008, 0x3406C4, 0x351864, 0x3601A8, 0x370388, - 0x38078A, 0x390604, 0x3A0644, 0x3B0E24, 0x3C004A, 0x3D18A4, 0x3E1B24, 0x3F00EA, - 0x400F0A, 0x410249, 0x420D5D, 0x431CC4, 0x440328, 0x450B29, 0x4606C6, 0x47076A, - 0x480368, 0x4916C5, 0x4A0789, 0x4B0605, 0x4C0CC8, 0x4D1954, 0x4E0645, 0x4F0E25, - 0x500325, 0x510B26, 0x5206C9, 0x530764, 0x5408A9, 0x550009, 0x5601A9, 0x570389, - 0x580785, 0x590609, 0x5A0049, 0x5B18A9, 0x5C0649, 0x5D0E29, 0x5E1B29, 0x5F00E9, - 0x600365, 0x6116C6, 0x620786, 0x630608, 0x640788, 0x650606, 0x660046, 0x6718A8, - 0x6858A6, 0x690145, 0x6A01E9, 0x6B178A, 0x6C01E8, 0x6D1785, 0x6E1E28, 0x6F0C65, - 0x700CC5, 0x711D5C, 0x720648, 0x730E28, 0x740646, 0x750E26, 0x761B28, 0x7700E6, - 0x7801E5, 0x791786, 0x7A1E29, 0x7B0C68, 0x7C1E24, 0x7D0C69, 0x7E0955, 0x7F03C9, - 0x8003E9, 0x810975, 0x820C49, 0x831E04, 0x840C48, 0x851E05, 0x8617A6, 0x8701C5, - 0x8800C6, 0x891B08, 0x8A0E06, 0x8B0666, 0x8C0E08, 0x8D0668, 0x8E1D7C, 0x8F0CE5, - 0x900C45, 0x911E08, 0x9217A9, 0x9301C4, 0x9417AA, 0x9501C9, 0x960169, 0x97588A, - 0x981888, 0x990066, 0x9A0709, 0x9B07A8, 0x9C0704, 0x9D07A6, 0x9E16E6, 0x9F0345, - 0xA000C9, 0xA11B05, 0xA20E09, 0xA30669, 0xA41885, 0xA50065, 0xA60706, 0xA707A5, - 0xA803A9, 0xA90189, 0xAA0029, 0xAB0889, 0xAC0744, 0xAD06E9, 0xAE0B06, 0xAF0229, - 0xB00E05, 0xB10665, 0xB21974, 0xB30CE8, 0xB4070A, 0xB507A9, 0xB616E9, 0xB70348, - 0xB8074A, 0xB906E6, 0xBA0B09, 0xBB0226, 0xBC1CE4, 0xBD0D7D, 0xBE0269, 0xBF08C9, - 0xC000CA, 0xC11B04, 0xC21884, 0xC3006A, 0xC40E04, 0xC50664, 0xC60708, 0xC707AA, - 0xC803A8, 0xC90184, 0xCA0749, 0xCB06E4, 0xCC0020, 0xCD0888, 0xCE0B08, 0xCF0224, - 0xD00E0A, 0xD1066A, 0xD20705, 0xD307A4, 0xD41D78, 0xD50CE9, 0xD616EA, 0xD70349, - 0xD80745, 0xD906E8, 0xDA1CE9, 0xDB0D75, 0xDC0B04, 0xDD0228, 0xDE0268, 0xDF08C8, - 0xE003A5, 0xE10185, 0xE20746, 0xE306EA, 0xE40748, 0xE506E5, 0xE61CE8, 0xE70D79, - 0xE81D74, 0xE95CE6, 0xEA02E9, 0xEB0849, 0xEC02E8, 0xED0848, 0xEE0086, 0xEF0A08, - 0xF00021, 0xF10885, 0xF20B05, 0xF3022A, 0xF40B0A, 0xF50225, 0xF60265, 0xF708C5, - 0xF802E5, 0xF90845, 0xFA0089, 0xFB0A09, 0xFC008A, 0xFD0A0A, 0xFE02A9, 0xFF0062, -}; - -static __inline BYTE -SwapROP3_SrcDst(BYTE bRop3) -{ - return (bRop3 & 0x99) | ((bRop3 & 0x22) << 1) | ((bRop3 & 0x44) >> 1); -} - -#define FRGND_ROP3(ROP4) ((ROP4) & 0x00FFFFFF) -#define BKGND_ROP3(ROP4) (ROP3Table[(SwapROP3_SrcDst((ROP4)>>24)) & 0xFF]) -#define DSTCOPY 0x00AA0029 -#define DSTERASE 0x00220326 /* dest = dest & (~src) : DSna */ - -/* NOTE: An alternative algorithm could use a pattern brush, created from - * the mask bitmap and then use raster operation 0xCA to combine the fore - * and background bitmaps. In this case erasing the bits beforehand would be - * unneccessary. On the other hand the Operation does not provide an optimized - * version in the DIB code, while SRCAND and SRCPAINT do. - * A fully correct implementation would call Eng/DrvBitBlt, but our - * EngBitBlt completely ignores the mask surface. - * - * Msk Fg Bk => x - * P S D DPSDxax - * ------------------------------------------ - * 0 0 0 0 0000xax = 000ax = 00x = 0 - * 0 0 1 1 1001xax = 101ax = 10x = 1 - * 0 1 0 0 0010xax = 001ax = 00x = 0 - * 0 1 1 1 1011xax = 100ax = 10x = 1 - * 1 0 0 0 0100xax = 010ax = 00x = 0 - * 1 0 1 0 1101xax = 111ax = 11x = 0 - * 1 1 0 1 0110xax = 011ax = 01x = 1 - * 1 1 1 1 1111xax = 110ax = 10x = 1 - * - * Operation index = 11001010 = 0xCA = PSaDPnao = DPSDxax - * ^ no, this is not random letters, its reverse Polish notation - */ - BOOL APIENTRY NtGdiMaskBlt( HDC hdcDest, @@ -510,97 +311,188 @@ NtGdiMaskBlt( DWORD dwRop, IN DWORD crBackColor) { - HBITMAP hbmFore, hbmBack; - HDC hdcMask, hdcFore, hdcBack; - PDC pdc; - HBRUSH hbr; - COLORREF crFore, crBack; + PDC DCDest; + PDC DCSrc = NULL; + HDC ahDC[2]; + PGDIOBJ apObj[2]; + PDC_ATTR pdcattr = NULL; + SURFACE *BitmapDest, *BitmapSrc = NULL, *psurfMask = NULL; + RECTL DestRect, SourceRect; + POINTL SourcePoint, MaskPoint; + BOOL Status = FALSE; + EXLATEOBJ exlo; + XLATEOBJ *XlateObj = NULL; + BOOL UsesSource = ROP_USES_SOURCE(dwRop); + BOOL UsesMask; - if (!hbmMask) - return NtGdiBitBlt(hdcDest, - nXDest, - nYDest, - nWidth, - nHeight, - hdcSrc, - nXSrc, - nYSrc, - FRGND_ROP3(dwRop), - crBackColor, - 0); + FIXUP_ROP(dwRop); - /* Lock the dest DC */ - pdc = DC_LockDc(hdcDest); - if (!pdc) return FALSE; + UsesMask = ROP_USES_MASK(dwRop); - /* Get brush and colors from dest dc */ - hbr = pdc->pdcattr->hbrush; - crFore = pdc->pdcattr->crForegroundClr; - crBack = pdc->pdcattr->crBackgroundClr; + //DPRINT1("dwRop : 0x%08x\n", dwRop); - /* Unlock the DC */ - DC_UnlockDc(pdc); + /* Take care of mask bitmap */ + if(hbmMask) + { + psurfMask = SURFACE_LockSurface(hbmMask); + if(!psurfMask) + { + EngSetLastError(ERROR_INVALID_HANDLE); + return FALSE; + } + } - /* 1. Create mask bitmap's dc */ - hdcMask = NtGdiCreateCompatibleDC(hdcDest); - NtGdiSelectBitmap(hdcMask, hbmMask); + if(UsesMask) + { + if(!psurfMask) + { + EngSetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + if(gajBitsPerFormat[psurfMask->SurfObj.iBitmapFormat] != 1) + { + EngSetLastError(ERROR_INVALID_PARAMETER); + SURFACE_UnlockSurface(psurfMask); + return FALSE; + } + } + else if(psurfMask) + { + DPRINT1("Getting Mask bitmap without needing it?\n"); + SURFACE_UnlockSurface(psurfMask); + psurfMask = NULL; + } + MaskPoint.x = xMask; + MaskPoint.y = yMask; - /* 2. Create masked Background bitmap */ + /* Take care of source and destination bitmap */ + DPRINT("Locking DCs\n"); + ahDC[0] = hdcDest; + ahDC[1] = hdcSrc ; + GDIOBJ_LockMultipleObjs(2, ahDC, apObj); + DCDest = apObj[0]; + DCSrc = apObj[1]; - /* 2.1 Create bitmap */ - hdcBack = NtGdiCreateCompatibleDC(hdcDest); - hbmBack = NtGdiCreateCompatibleBitmap(hdcDest, nWidth, nHeight); - NtGdiSelectBitmap(hdcBack, hbmBack); + if (NULL == DCDest) + { + if(DCSrc) DC_UnlockDc(DCSrc); + DPRINT("Invalid destination dc handle (0x%08x) passed to NtGdiBitBlt\n", hdcDest); + return FALSE; + } - /* 2.2 Copy source bitmap */ - NtGdiSelectBrush(hdcBack, hbr); - IntGdiSetBkColor(hdcBack, crBack); - IntGdiSetTextColor(hdcBack, crFore); - NtGdiBitBlt(hdcBack, 0, 0, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, SRCCOPY, 0, 0); + if (DCDest->dctype == DC_TYPE_INFO) + { + if(DCSrc) DC_UnlockDc(DCSrc); + DC_UnlockDc(DCDest); + /* Yes, Windows really returns TRUE in this case */ + return TRUE; + } - /* 2.3 Do the background rop */ - NtGdiBitBlt(hdcBack, 0, 0, nWidth, nHeight, hdcDest, nXDest, nYDest, BKGND_ROP3(dwRop), 0, 0); + if (UsesSource) + { + if (NULL == DCSrc) + { + DC_UnlockDc(DCDest); + DPRINT("Invalid source dc handle (0x%08x) passed to NtGdiBitBlt\n", hdcSrc); + return FALSE; + } + if (DCSrc->dctype == DC_TYPE_INFO) + { + DC_UnlockDc(DCDest); + DC_UnlockDc(DCSrc); + /* Yes, Windows really returns TRUE in this case */ + return TRUE; + } + } + else if(DCSrc) + { + DPRINT("Getting a valid Source handle without using source!!!\n"); + DC_UnlockDc(DCSrc); + DCSrc = NULL ; + } - /* 2.4 Erase the foreground pixels */ - IntGdiSetBkColor(hdcBack, RGB(0xFF, 0xFF, 0xFF)); - IntGdiSetTextColor(hdcBack, RGB(0, 0, 0)); - NtGdiBitBlt(hdcBack, 0, 0, nWidth, nHeight, hdcMask, xMask, yMask, SRCAND, 0, 0); + pdcattr = DCDest->pdcattr; - /* 3. Create masked Foreground bitmap */ + DestRect.left = nXDest; + DestRect.top = nYDest; + DestRect.right = nXDest + nWidth; + DestRect.bottom = nYDest + nHeight; + IntLPtoDP(DCDest, (LPPOINT)&DestRect, 2); - /* 3.1 Create bitmap */ - hdcFore = NtGdiCreateCompatibleDC(hdcDest); - hbmFore = NtGdiCreateCompatibleBitmap(hdcDest, nWidth, nHeight); - NtGdiSelectBitmap(hdcFore, hbmFore); + DestRect.left += DCDest->ptlDCOrig.x; + DestRect.top += DCDest->ptlDCOrig.y; + DestRect.right += DCDest->ptlDCOrig.x; + DestRect.bottom += DCDest->ptlDCOrig.y; - /* 3.2 Copy the dest bitmap */ - NtGdiSelectBrush(hdcFore, hbr); - IntGdiSetBkColor(hdcFore, crBack); - IntGdiSetTextColor(hdcFore, crFore); - NtGdiBitBlt(hdcFore, 0, 0, nWidth, nHeight, hdcDest, nXDest, nYDest, SRCCOPY, 0, 0); + SourcePoint.x = nXSrc; + SourcePoint.y = nYSrc; - /* 2.3 Do the foreground rop */ - NtGdiBitBlt(hdcFore, 0, 0, nWidth, nHeight, hdcSrc, nXSrc, nYSrc, FRGND_ROP3(dwRop), 0,0); + if (UsesSource) + { + IntLPtoDP(DCSrc, (LPPOINT)&SourcePoint, 1); - /* 2.4 Erase the background pixels */ - IntGdiSetBkColor(hdcFore, RGB(0, 0, 0)); - IntGdiSetTextColor(hdcFore, RGB(0xFF, 0xFF, 0xFF)); - NtGdiBitBlt(hdcFore, 0, 0, nWidth, nHeight, hdcMask, xMask, yMask, SRCAND, 0, 0); + SourcePoint.x += DCSrc->ptlDCOrig.x; + SourcePoint.y += DCSrc->ptlDCOrig.y; + /* Calculate Source Rect */ + SourceRect.left = SourcePoint.x; + SourceRect.top = SourcePoint.y; + SourceRect.right = SourcePoint.x + DestRect.right - DestRect.left; + SourceRect.bottom = SourcePoint.y + DestRect.bottom - DestRect.top ; + } - /* 3. Combine the fore and background into the background bitmap */ - NtGdiBitBlt(hdcBack, 0, 0, nWidth, nHeight, hdcFore, 0, 0, SRCPAINT, 0, 0); + /* Prepare blit */ + DC_vPrepareDCsForBlit(DCDest, DestRect, DCSrc, SourceRect); - /* 4. Copy the result to hdcDest */ - NtGdiBitBlt(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcBack, 0, 0, SRCCOPY, 0, 0); + if (pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY)) + DC_vUpdateFillBrush(DCDest); - /* 5. delete all temp objects */ - NtGdiDeleteObjectApp(hdcBack); - NtGdiDeleteObjectApp(hdcFore); - NtGdiDeleteObjectApp(hdcMask); - GreDeleteObject(hbmFore); - GreDeleteObject(hbmBack); + /* Determine surfaces to be used in the bitblt */ + BitmapDest = DCDest->dclevel.pSurface; + if (!BitmapDest) + goto cleanup; - return TRUE; + if (UsesSource) + { + { + BitmapSrc = DCSrc->dclevel.pSurface; + if (!BitmapSrc) + goto cleanup; + } + } + + /* Create the XLATEOBJ. */ + if (UsesSource) + { + EXLATEOBJ_vInitXlateFromDCs(&exlo, DCSrc, DCDest); + XlateObj = &exlo.xlo; + } + + + /* Perform the bitblt operation */ + Status = IntEngBitBlt(&BitmapDest->SurfObj, + BitmapSrc ? &BitmapSrc->SurfObj : NULL, + psurfMask ? &psurfMask->SurfObj : NULL, + DCDest->rosdc.CombinedClip, + XlateObj, + &DestRect, + &SourcePoint, + &MaskPoint, + &DCDest->eboFill.BrushObject, + &DCDest->dclevel.pbrFill->ptOrigin, + ROP_TO_ROP4(dwRop)); + + if (UsesSource) + EXLATEOBJ_vCleanup(&exlo); +cleanup: + DC_vFinishBlit(DCDest, DCSrc); + if (UsesSource) + { + DC_UnlockDc(DCSrc); + } + DC_UnlockDc(DCDest); + if(psurfMask) SURFACE_UnlockSurface(psurfMask); + + return Status; } BOOL @@ -655,7 +547,9 @@ GreStretchBltMask( EXLATEOBJ exlo; XLATEOBJ *XlateObj = NULL; POINTL BrushOrigin; - BOOL UsesSource = ROP3_USES_SOURCE(ROP); + BOOL UsesSource = ROP_USES_SOURCE(ROP); + + FIXUP_ROP(ROP); if (0 == WidthDest || 0 == HeightDest || 0 == WidthSrc || 0 == HeightSrc) { @@ -803,7 +697,7 @@ GreStretchBltMask( BitmapMask ? &MaskPoint : NULL, &DCDest->eboFill.BrushObject, &BrushOrigin, - ROP3_TO_ROP4(ROP)); + ROP_TO_ROP4(ROP)); if (UsesSource) { EXLATEOBJ_vCleanup(&exlo); @@ -877,6 +771,8 @@ IntPatBlt( ASSERT(pbrush); + FIXUP_ROP(dwRop); + if (pbrush->flAttrs & GDIBRUSH_IS_NULL) { return TRUE; @@ -934,7 +830,7 @@ IntPatBlt( NULL, &eboFill.BrushObject, &BrushOrigin, - ROP3_TO_ROP4(dwRop)); + ROP_TO_ROP4(dwRop)); DC_vFinishBlit(pdc, NULL); @@ -1007,7 +903,7 @@ NtGdiPatBlt( PDC_ATTR pdcattr; BOOL ret; - BOOL UsesSource = ROP3_USES_SOURCE(ROP); + BOOL UsesSource = ROP_USES_SOURCE(ROP); if (UsesSource) { /* in this case we call on GdiMaskBlt */ diff --git a/reactos/subsystems/win32/win32k/objects/dcobjs.c b/reactos/subsystems/win32/win32k/objects/dcobjs.c index 6975b60146f..7e6870be76f 100644 --- a/reactos/subsystems/win32/win32k/objects/dcobjs.c +++ b/reactos/subsystems/win32/win32k/objects/dcobjs.c @@ -179,6 +179,11 @@ GdiSelectPalette( DIRTY_BACKGROUND | DIRTY_TEXT; } + if(pdc->dctype == DCTYPE_MEMORY) + { + IntGdiRealizePalette(pdc); + } + PALETTE_ShareUnlockPalette(ppal); DC_UnlockDc(pdc); diff --git a/reactos/subsystems/win32/win32k/objects/dibobj.c b/reactos/subsystems/win32/win32k/objects/dibobj.c index 36c452f99f2..4a5ec9dd938 100644 --- a/reactos/subsystems/win32/win32k/objects/dibobj.c +++ b/reactos/subsystems/win32/win32k/objects/dibobj.c @@ -531,7 +531,7 @@ NtGdiSetDIBitsToDeviceInternal( NULL, NULL, NULL, - ROP3_TO_ROP4(SRCCOPY)); + ROP4_FROM_INDEX(R3_OPINDEX_SRCCOPY)); /* Cleanup EXLATEOBJ */ EXLATEOBJ_vCleanup(&exlo); diff --git a/reactos/subsystems/win32/win32k/objects/drawing.c b/reactos/subsystems/win32/win32k/objects/drawing.c index 86ab4c3a8c3..bac849ce9e9 100755 --- a/reactos/subsystems/win32/win32k/objects/drawing.c +++ b/reactos/subsystems/win32/win32k/objects/drawing.c @@ -1249,7 +1249,7 @@ IntFillRect( DC *dc, PBRUSH pbrush, BOOL Pen) { - DWORD ROP = PATCOPY; + DWORD ROP = ROP4_FROM_INDEX(R3_OPINDEX_PATCOPY); RECTL DestRect; SURFACE *psurf; POINTL BrushOrigin; @@ -1291,7 +1291,7 @@ IntFillRect( DC *dc, BrushOrigin.y = pbrush->ptOrigin.y; if (pdcattr->jROP2 == R2_XORPEN) - ROP = PATINVERT; + ROP = ROP4_FROM_INDEX(R3_OPINDEX_PATINVERT); Ret = IntEngBitBlt( &psurf->SurfObj, @@ -1304,7 +1304,7 @@ IntFillRect( DC *dc, NULL, Pen ? &dc->eboLine.BrushObject : &dc->eboFill.BrushObject, &BrushOrigin, - ROP3_TO_ROP4(ROP)); + ROP); } return (int)Ret; diff --git a/reactos/subsystems/win32/win32k/objects/fillshap.c b/reactos/subsystems/win32/win32k/objects/fillshap.c index d5d6469ff6e..ae071d2cddf 100644 --- a/reactos/subsystems/win32/win32k/objects/fillshap.c +++ b/reactos/subsystems/win32/win32k/objects/fillshap.c @@ -604,7 +604,7 @@ IntRectangle(PDC dc, NULL, &dc->eboFill.BrushObject, &BrushOrigin, - ROP3_TO_ROP4(PATCOPY)); + ROP4_FROM_INDEX(R3_OPINDEX_PATCOPY)); } } diff --git a/reactos/subsystems/win32/win32k/objects/freetype.c b/reactos/subsystems/win32/win32k/objects/freetype.c index d67405bc12c..4e941ee2047 100644 --- a/reactos/subsystems/win32/win32k/objects/freetype.c +++ b/reactos/subsystems/win32/win32k/objects/freetype.c @@ -3269,7 +3269,7 @@ GreExtTextOutW( &SourcePoint, &dc->eboBackground.BrushObject, &BrushOrigin, - ROP3_TO_ROP4(PATCOPY)); + ROP4_FROM_INDEX(R3_OPINDEX_PATCOPY)); fuOptions &= ~ETO_OPAQUE; DC_vFinishBlit(dc, NULL); } @@ -3514,7 +3514,7 @@ GreExtTextOutW( &SourcePoint, &dc->eboBackground.BrushObject, &BrushOrigin, - ROP3_TO_ROP4(PATCOPY)); + ROP4_FROM_INDEX(R3_OPINDEX_PATCOPY)); MouseSafetyOnDrawEnd(dc->ppdev); BackgroundLeft = DestRect.right; diff --git a/reactos/subsystems/win32/win32k/objects/palette.c b/reactos/subsystems/win32/win32k/objects/palette.c index c7656e03d1c..59b16430303 100644 --- a/reactos/subsystems/win32/win32k/objects/palette.c +++ b/reactos/subsystems/win32/win32k/objects/palette.c @@ -723,26 +723,18 @@ NtGdiGetNearestPaletteIndex( UINT FASTCALL -IntGdiRealizePalette(HDC hDC) +IntGdiRealizePalette(PDC pdc) { UINT i, realize = 0; - PDC pdc; PALETTE *ppalSurf, *ppalDC; - pdc = DC_LockDc(hDC); - if(!pdc) - { - EngSetLastError(ERROR_INVALID_HANDLE); - return 0; - } - ppalSurf = pdc->dclevel.pSurface->ppal; ppalDC = pdc->dclevel.ppal; if(!(ppalSurf->flFlags & PAL_INDEXED)) { // FIXME : set error? - goto cleanup; + return 0; } ASSERT(ppalDC->flFlags & PAL_INDEXED); @@ -755,8 +747,6 @@ IntGdiRealizePalette(HDC hDC) InterlockedExchange((LONG*)&ppalSurf->IndexedColors[i], *(LONG*)&ppalDC->IndexedColors[i]); } -cleanup: - DC_UnlockDc(pdc); return realize; } @@ -810,11 +800,9 @@ IntAnimatePalette(HPALETTE hPal, { if (dc->dclevel.hpal == hPal) { - DC_UnlockDc(dc); - IntGdiRealizePalette(hDC); + IntGdiRealizePalette(dc); } - else - DC_UnlockDc(dc); + DC_UnlockDc(dc); } UserReleaseDC(Wnd,hDC, FALSE); } diff --git a/reactos/subsystems/win32/win32k/objects/polyfill.c b/reactos/subsystems/win32/win32k/objects/polyfill.c index 1f6196a53af..e1b33802960 100644 --- a/reactos/subsystems/win32/win32k/objects/polyfill.c +++ b/reactos/subsystems/win32/win32k/objects/polyfill.c @@ -606,14 +606,14 @@ IntFillPolygon( BRUSHOBJ *BrushObj, CONST PPOINT Points, int Count, - RECTL DestRect, + RECTL DestRect, POINTL *BrushOrigin) { FILL_EDGE_LIST *list = 0; FILL_EDGE *ActiveHead = 0; FILL_EDGE *pLeft, *pRight; int ScanLine; - + //DPRINT("IntFillPolygon\n"); /* Create Edge List. */ @@ -657,11 +657,11 @@ IntFillPolygon( NULL, BrushObj, BrushOrigin, - ROP3_TO_ROP4(PATCOPY)); + ROP4_FROM_INDEX(R3_OPINDEX_PATCOPY)); } pLeft = pRight->pNext; pRight = pLeft ? pLeft->pNext : NULL; - } + } } /* Free Edge List. If any are left. */ From dedaab13abe1dc318279b7f1791b77f3bda884c5 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 1 Mar 2011 09:17:58 +0000 Subject: [PATCH 186/287] [WIN32K] Do raster operation on 4 bytes instead of only 3. Fixes ... maybe noone has noticed yet ;-) svn path=/trunk/; revision=50942 --- reactos/subsystems/win32/win32k/dib/dib.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/subsystems/win32/win32k/dib/dib.c b/reactos/subsystems/win32/win32k/dib/dib.c index 37767877905..516b4bd3ae9 100644 --- a/reactos/subsystems/win32/win32k/dib/dib.c +++ b/reactos/subsystems/win32/win32k/dib/dib.c @@ -179,7 +179,7 @@ static const ULONG ExpandDest[16] = Rop |= (Rop << 24) | (Rop << 16) | (Rop << 8); /* Do the operation on four bits simultaneously. */ Result = 0; - for (i = 0; i < 6; i++) + for (i = 0; i < 8; i++) { ResultNibble = Rop & ExpandDest[Dest & 0xF] & ExpandSource[Source & 0xF] & ExpandPattern[Pattern & 0xF]; Result |= (((ResultNibble & 0xFF000000) ? 0x8 : 0x0) | ((ResultNibble & 0x00FF0000) ? 0x4 : 0x0) | From a53926e3bf8ee75f081c112e692beec7d7267c53 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 1 Mar 2011 12:05:39 +0000 Subject: [PATCH 187/287] [USER32_APITEST] Patch by Thomas Faber: some tests for GetMessage and PeekMessage svn path=/trunk/; revision=50943 --- rostests/apitests/user32/CMakeLists.txt | 1 + rostests/apitests/user32/GetPeekMessage.c | 42 +++++++++++++++++++ rostests/apitests/user32/testlist.c | 2 + .../apitests/user32/user32_apitest.rbuild | 1 + 4 files changed, 46 insertions(+) create mode 100644 rostests/apitests/user32/GetPeekMessage.c diff --git a/rostests/apitests/user32/CMakeLists.txt b/rostests/apitests/user32/CMakeLists.txt index ffe58505419..12fb0e40deb 100644 --- a/rostests/apitests/user32/CMakeLists.txt +++ b/rostests/apitests/user32/CMakeLists.txt @@ -8,6 +8,7 @@ list(APPEND SOURCE ScrollWindowEx.c GetSystemMetrics.c GetIconInfo.c + GetPeekMessage.c testlist.c) add_executable(user32_apitest ${SOURCE}) diff --git a/rostests/apitests/user32/GetPeekMessage.c b/rostests/apitests/user32/GetPeekMessage.c new file mode 100644 index 00000000000..2cf24d2c71a --- /dev/null +++ b/rostests/apitests/user32/GetPeekMessage.c @@ -0,0 +1,42 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: GPL - See COPYING in the top level directory + * PURPOSE: Test for GetMessage/PeekMessage + * PROGRAMMERS: Thomas Faber + */ + +#include +#include +#include + +void Test_GetMessage(HWND hWnd) +{ + MSG msg; + + SetLastError(DNS_ERROR_RCODE_NXRRSET); + + ok(GetMessage(&msg, hWnd, 0, 0) == -1, "\n"); + ok(GetLastError() == ERROR_INVALID_WINDOW_HANDLE, "GetLastError() = %lu\n", GetLastError()); +} + +void Test_PeekMessage(HWND hWnd) +{ + MSG msg; + + SetLastError(DNS_ERROR_RCODE_NXRRSET); + + ok(PeekMessage(&msg, hWnd, 0, 0, PM_NOREMOVE) == 0, "\n"); + ok(GetLastError() == ERROR_INVALID_WINDOW_HANDLE, "GetLastError() = %lu\n", GetLastError()); +} + +START_TEST(GetPeekMessage) +{ + HWND hWnd = CreateWindowExW(0, L"EDIT", L"miau", 0, CW_USEDEFAULT, CW_USEDEFAULT, + CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, GetModuleHandle(NULL), NULL); + ok(hWnd != INVALID_HANDLE_VALUE, "\n"); + /* make sure we pass an invalid handle to GetMessage/PeekMessage */ + ok(DestroyWindow(hWnd), "\n"); + + Test_GetMessage(hWnd); + Test_PeekMessage(hWnd); +} diff --git a/rostests/apitests/user32/testlist.c b/rostests/apitests/user32/testlist.c index 34825a26a8f..b37d7ca0607 100644 --- a/rostests/apitests/user32/testlist.c +++ b/rostests/apitests/user32/testlist.c @@ -11,6 +11,7 @@ extern void func_ScrollDC(void); extern void func_ScrollWindowEx(void); extern void func_GetSystemMetrics(void); extern void func_GetIconInfo(void); +extern void func_GetPeekMessage(void); const struct test winetest_testlist[] = { @@ -20,6 +21,7 @@ const struct test winetest_testlist[] = { "ScrollWindowEx", func_ScrollWindowEx }, { "GetSystemMetrics", func_GetSystemMetrics }, { "GetIconInfo", func_GetIconInfo }, + { "GetPeekMessage", func_GetPeekMessage }, { 0, 0 } }; diff --git a/rostests/apitests/user32/user32_apitest.rbuild b/rostests/apitests/user32/user32_apitest.rbuild index 26f269c38fb..251ad031870 100644 --- a/rostests/apitests/user32/user32_apitest.rbuild +++ b/rostests/apitests/user32/user32_apitest.rbuild @@ -15,6 +15,7 @@ ScrollWindowEx.c GetSystemMetrics.c GetIconInfo.c + GetPeekMessage.c From 788c6760f760d015b011c33df85ceebdd7443b7f Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 1 Mar 2011 13:27:19 +0000 Subject: [PATCH 188/287] [WIN32K] Silence some DPRINTS svn path=/trunk/; revision=50944 --- reactos/subsystems/win32/win32k/objects/path.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/path.c b/reactos/subsystems/win32/win32k/objects/path.c index f94c8d30087..99e18f80969 100644 --- a/reactos/subsystems/win32/win32k/objects/path.c +++ b/reactos/subsystems/win32/win32k/objects/path.c @@ -2154,7 +2154,7 @@ NtGdiBeginPath( HDC hDC ) if ( dc->dclevel.hPath ) { - DPRINT1("BeginPath 1 0x%x\n", dc->dclevel.hPath); + DPRINT("BeginPath 1 0x%x\n", dc->dclevel.hPath); if ( !(dc->dclevel.flPath & DCPATH_SAVE) ) { // Remove previous handle. if (!PATH_Delete(dc->dclevel.hPath)) @@ -2179,7 +2179,7 @@ NtGdiBeginPath( HDC hDC ) dc->dclevel.hPath = pPath->BaseObject.hHmgr; - DPRINT1("BeginPath 2 h 0x%x p 0x%x\n", dc->dclevel.hPath, pPath); + DPRINT("BeginPath 2 h 0x%x p 0x%x\n", dc->dclevel.hPath, pPath); // Path handles are shared. Also due to recursion with in the same thread. GDIOBJ_UnlockObjByPtr((POBJ)pPath); // Unlock pPath = PATH_LockPath(dc->dclevel.hPath); // Share Lock. @@ -2265,7 +2265,7 @@ NtGdiEndPath(HDC hDC) /* Set flag to indicate that path is finished */ else { - DPRINT1("EndPath 0x%x\n", dc->dclevel.hPath); + DPRINT("EndPath 0x%x\n", dc->dclevel.hPath); pPath->state = PATH_Closed; dc->dclevel.flPath &= ~DCPATH_ACTIVE; } From 1a7f618d3b3fa2500576d0cb24960280d6d681ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Tue, 1 Mar 2011 14:44:53 +0000 Subject: [PATCH 189/287] [WIN32K] - Dismiss alpha channel when creating a solid brush. Finally fixes VLC icons and numerous winetests. svn path=/trunk/; revision=50945 --- reactos/subsystems/win32/win32k/objects/brush.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/subsystems/win32/win32k/objects/brush.c b/reactos/subsystems/win32/win32k/objects/brush.c index aa1c3480737..5ad5f0764bf 100644 --- a/reactos/subsystems/win32/win32k/objects/brush.c +++ b/reactos/subsystems/win32/win32k/objects/brush.c @@ -394,7 +394,7 @@ IntGdiCreateSolidBrush( pbrush->flAttrs |= GDIBRUSH_IS_SOLID; - pbrush->BrushAttr.lbColor = Color; + pbrush->BrushAttr.lbColor = Color & 0x00FFFFFF; /* FIXME: Fill in the rest of fields!!! */ BRUSH_UnlockBrush(pbrush); From a5115608c929f2b222204c3b97abf92f5cfbef7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Tue, 1 Mar 2011 20:50:47 +0000 Subject: [PATCH 190/287] [GDI32_APITEST] - add a basic test for SetDIBits svn path=/trunk/; revision=50946 --- rostests/apitests/gdi32/CMakeLists.txt | 1 + rostests/apitests/gdi32/SetDIBits.c | 56 ++++++++++++++++++++ rostests/apitests/gdi32/gdi32_apitest.rbuild | 1 + rostests/apitests/gdi32/testlist.c | 2 + 4 files changed, 60 insertions(+) create mode 100644 rostests/apitests/gdi32/SetDIBits.c diff --git a/rostests/apitests/gdi32/CMakeLists.txt b/rostests/apitests/gdi32/CMakeLists.txt index 75490291dc7..30885c9f0c9 100644 --- a/rostests/apitests/gdi32/CMakeLists.txt +++ b/rostests/apitests/gdi32/CMakeLists.txt @@ -40,6 +40,7 @@ list(APPEND SOURCE MaskBlt.c SelectObject.c SetDCPenColor.c + SetDIBits.c SetMapMode.c SetSysColors.c SetWindowExtEx.c diff --git a/rostests/apitests/gdi32/SetDIBits.c b/rostests/apitests/gdi32/SetDIBits.c new file mode 100644 index 00000000000..42dc0604988 --- /dev/null +++ b/rostests/apitests/gdi32/SetDIBits.c @@ -0,0 +1,56 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: GPL - See COPYING in the top level directory + * PURPOSE: Test for SetDIBits + * PROGRAMMERS: Jrme Gardou + */ + +#include +#include +#include + + +void Test_SetDIBits() +{ + char buffer[sizeof(BITMAPINFOHEADER)+2*sizeof(RGBQUAD)]; + ULONG* dibBuffer; + BITMAPINFO* pBMI = (BITMAPINFO*)buffer; + DWORD bits1bpp[2] = {0, 1}; + HBITMAP hbmp; + int ret; + + ZeroMemory(buffer, sizeof(buffer)); + + pBMI->bmiHeader.biSize=sizeof(BITMAPINFOHEADER); + pBMI->bmiHeader.biWidth=2; + pBMI->bmiHeader.biHeight=1; + pBMI->bmiHeader.biPlanes=1; + pBMI->bmiHeader.biBitCount=32; + pBMI->bmiHeader.biCompression=BI_RGB; + pBMI->bmiHeader.biSizeImage=0; + pBMI->bmiHeader.biXPelsPerMeter=0; + pBMI->bmiHeader.biYPelsPerMeter=0; + pBMI->bmiHeader.biClrUsed=0; + pBMI->bmiHeader.biClrImportant=0; + + hbmp = CreateDIBSection(NULL, pBMI, DIB_RGB_COLORS, (PVOID*)&dibBuffer, NULL, 0); + ok(hbmp!=NULL, "Failed to create a DIB section\n"); + + pBMI->bmiHeader.biBitCount = 1; + pBMI->bmiColors[0].rgbBlue = 0xFF; + pBMI->bmiColors[0].rgbGreen = 0xFF; + pBMI->bmiColors[0].rgbRed = 0xFF; + + ret = SetDIBits(NULL, hbmp, 0, 1, bits1bpp, pBMI, DIB_RGB_COLORS); + ok(ret == 1, "Copied %i scanlines\n", ret); + + ok(dibBuffer[0] = 0xFFFFFF, "Wrong color 0x%08x after SetDIBits\n", (unsigned int)dibBuffer[0]); + ok(dibBuffer[1] = 0xFFFFFF, "Wrong color 0x%08x after SetDIBits\n", (unsigned int)dibBuffer[1]); + + DeleteObject(hbmp); +} + +START_TEST(SetDIBits) +{ + Test_SetDIBits(); +} diff --git a/rostests/apitests/gdi32/gdi32_apitest.rbuild b/rostests/apitests/gdi32/gdi32_apitest.rbuild index ec6849d5a4b..25dc88f055f 100644 --- a/rostests/apitests/gdi32/gdi32_apitest.rbuild +++ b/rostests/apitests/gdi32/gdi32_apitest.rbuild @@ -47,6 +47,7 @@ MaskBlt.c SelectObject.c SetDCPenColor.c + SetDIBits.c SetMapMode.c SetSysColors.c SetWindowExtEx.c diff --git a/rostests/apitests/gdi32/testlist.c b/rostests/apitests/gdi32/testlist.c index a2afeccdcd2..c9b59d3a0ae 100644 --- a/rostests/apitests/gdi32/testlist.c +++ b/rostests/apitests/gdi32/testlist.c @@ -43,6 +43,7 @@ extern void func_GetTextFace(void); extern void func_MaskBlt(void); extern void func_SelectObject(void); extern void func_SetDCPenColor(void); +extern void func_SetDIBits(void); extern void func_SetMapMode(void); extern void func_SetSysColors(void); extern void func_SetWindowExtEx(void); @@ -88,6 +89,7 @@ const struct test winetest_testlist[] = { "MaskBlt", func_MaskBlt }, { "SelectObject", func_SelectObject }, { "SetDCPenColor", func_SetDCPenColor }, + { "SetDIBits", func_SetDIBits }, { "SetMapMode", func_SetMapMode }, { "SetSysColors", func_SetSysColors }, { "SetWindowExtEx", func_SetWindowExtEx }, From d5954abbf27f7e4897c5283936770008ecd60b84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Tue, 1 Mar 2011 21:32:58 +0000 Subject: [PATCH 191/287] [[GDI32_APITEST] - actually make a test, with == instead of =, relevant bits sets, good test value, etc. svn path=/trunk/; revision=50947 --- rostests/apitests/gdi32/SetDIBits.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rostests/apitests/gdi32/SetDIBits.c b/rostests/apitests/gdi32/SetDIBits.c index 42dc0604988..fb6bfdb8029 100644 --- a/rostests/apitests/gdi32/SetDIBits.c +++ b/rostests/apitests/gdi32/SetDIBits.c @@ -15,7 +15,7 @@ void Test_SetDIBits() char buffer[sizeof(BITMAPINFOHEADER)+2*sizeof(RGBQUAD)]; ULONG* dibBuffer; BITMAPINFO* pBMI = (BITMAPINFO*)buffer; - DWORD bits1bpp[2] = {0, 1}; + char bits1bpp[] = {0x80, 0, 0, 0}; HBITMAP hbmp; int ret; @@ -38,14 +38,14 @@ void Test_SetDIBits() pBMI->bmiHeader.biBitCount = 1; pBMI->bmiColors[0].rgbBlue = 0xFF; - pBMI->bmiColors[0].rgbGreen = 0xFF; + pBMI->bmiColors[0].rgbGreen = 0; pBMI->bmiColors[0].rgbRed = 0xFF; ret = SetDIBits(NULL, hbmp, 0, 1, bits1bpp, pBMI, DIB_RGB_COLORS); ok(ret == 1, "Copied %i scanlines\n", ret); - ok(dibBuffer[0] = 0xFFFFFF, "Wrong color 0x%08x after SetDIBits\n", (unsigned int)dibBuffer[0]); - ok(dibBuffer[1] = 0xFFFFFF, "Wrong color 0x%08x after SetDIBits\n", (unsigned int)dibBuffer[1]); + ok(dibBuffer[0] == 0, "Wrong color 0x%08x after SetDIBits\n", (unsigned int)dibBuffer[0]); + ok(dibBuffer[1] == 0xFF00FF, "Wrong color 0x%08x after SetDIBits\n", (unsigned int)dibBuffer[1]); DeleteObject(hbmp); } From c77754b87dbbf580ad792f3c6cc547c0b0cb0f08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Tue, 1 Mar 2011 21:45:45 +0000 Subject: [PATCH 192/287] [WIN32K] - only lock DC if asked to in NtGdiSetDIBits. svn path=/trunk/; revision=50948 --- .../subsystems/win32/win32k/objects/dibobj.c | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/dibobj.c b/reactos/subsystems/win32/win32k/objects/dibobj.c index 4a5ec9dd938..84eac972fb0 100644 --- a/reactos/subsystems/win32/win32k/objects/dibobj.c +++ b/reactos/subsystems/win32/win32k/objects/dibobj.c @@ -336,7 +336,7 @@ NtGdiSetDIBits( CONST BITMAPINFO *bmi, UINT ColorUse) { - PDC Dc; + PDC Dc = NULL; INT Ret; NTSTATUS Status = STATUS_SUCCESS; @@ -364,21 +364,25 @@ NtGdiSetDIBits( return 0; } - Dc = DC_LockDc(hDC); - if (NULL == Dc) + /* Lock DC if asked to */ + if(ColorUse == DIB_PAL_COLORS) { - EngSetLastError(ERROR_INVALID_HANDLE); - return 0; - } - if (Dc->dctype == DC_TYPE_INFO) - { - DC_UnlockDc(Dc); - return 0; + Dc = DC_LockDc(hDC); + if (NULL == Dc) + { + EngSetLastError(ERROR_INVALID_HANDLE); + return 0; + } + if (Dc->dctype == DC_TYPE_INFO) + { + DC_UnlockDc(Dc); + return 0; + } } Ret = IntSetDIBits(Dc, hBitmap, StartScan, ScanLines, Bits, bmi, ColorUse); - DC_UnlockDc(Dc); + if(Dc) DC_UnlockDc(Dc); return Ret; } From 5e5532d3efc12d386966945d23f5fdb4e9182bdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Wed, 2 Mar 2011 00:15:57 +0000 Subject: [PATCH 193/287] [WIN32K] - in 1bpp bitmaps, 0 means white. Take that into in SetDIBits - fix a fixme in XLATEOBJ implementation - remove useless field from ROS_DCINFO Fixes fox audio player GUI :-) Enjoy! svn path=/trunk/; revision=50949 --- reactos/subsystems/win32/win32k/eng/xlate.c | 14 ++++---------- reactos/subsystems/win32/win32k/include/dc.h | 3 --- reactos/subsystems/win32/win32k/include/palette.h | 1 + reactos/subsystems/win32/win32k/objects/dibobj.c | 3 ++- 4 files changed, 7 insertions(+), 14 deletions(-) diff --git a/reactos/subsystems/win32/win32k/eng/xlate.c b/reactos/subsystems/win32/win32k/eng/xlate.c index 82414bd062b..d2d1fa6afb0 100644 --- a/reactos/subsystems/win32/win32k/eng/xlate.c +++ b/reactos/subsystems/win32/win32k/eng/xlate.c @@ -418,9 +418,9 @@ EXLATEOBJ_vInitialize( else if (ppalSrc->flFlags & PAL_BITFIELDS) { PALETTE_vGetBitMasks(ppalSrc, &pexlo->ulRedMask); - pexlo->ulRedShift = CalculateShift(0xFF, pexlo->ulRedMask); - pexlo->ulGreenShift = CalculateShift(0xFF00, pexlo->ulGreenMask); - pexlo->ulBlueShift = CalculateShift(0xFF0000, pexlo->ulBlueMask); + pexlo->ulRedShift = CalculateShift(RGB(0xFF,0,0), pexlo->ulRedMask); + pexlo->ulGreenShift = CalculateShift(RGB(0,0xFF,0), pexlo->ulGreenMask); + pexlo->ulBlueShift = CalculateShift(RGB(0,0,0xFF), pexlo->ulBlueMask); pexlo->aulXlate[0] = EXLATEOBJ_iXlateShiftAndMask(pexlo, crSrcBackColor); } @@ -480,18 +480,12 @@ EXLATEOBJ_vInitialize( } else { - // FIXME: use PALETTE_ulGetNearest - EXLATEOBJ exloTmp = *pexlo; - exloTmp.xlo.pulXlate = exloTmp.aulXlate; - - pexlo->xlo.flXlate |= XO_TABLE; for (i = 0; i < pexlo->xlo.cEntries; i++) { ulColor = RGB(ppalSrc->IndexedColors[i].peRed, ppalSrc->IndexedColors[i].peGreen, ppalSrc->IndexedColors[i].peBlue); - pexlo->xlo.pulXlate[i] = - EXLATEOBJ_iXlateShiftAndMask(&exloTmp, ulColor); + pexlo->xlo.pulXlate[i] = PALETTE_ulGetNearestBitFieldsIndex(ppalDst, ulColor); } } } diff --git a/reactos/subsystems/win32/win32k/include/dc.h b/reactos/subsystems/win32/win32k/include/dc.h index 07f412b6f34..1e85e364d35 100644 --- a/reactos/subsystems/win32/win32k/include/dc.h +++ b/reactos/subsystems/win32/win32k/include/dc.h @@ -55,9 +55,6 @@ typedef struct _ROS_DC_INFO HRGN hGCClipRgn; /* GC clip region (ClipRgn AND VisRgn) */ CLIPOBJ *CombinedClip; - - UNICODE_STRING DriverName; - } ROS_DC_INFO; typedef struct _DCLEVEL diff --git a/reactos/subsystems/win32/win32k/include/palette.h b/reactos/subsystems/win32/win32k/include/palette.h index 3fad906ff45..d18edee49df 100644 --- a/reactos/subsystems/win32/win32k/include/palette.h +++ b/reactos/subsystems/win32/win32k/include/palette.h @@ -81,6 +81,7 @@ INT FASTCALL PALETTE_ToPhysical (PDC dc, COLORREF color); INT FASTCALL PALETTE_GetObject(PPALETTE pGdiObject, INT cbCount, LPLOGBRUSH lpBuffer); ULONG NTAPI PALETTE_ulGetNearestPaletteIndex(PALETTE* ppal, ULONG iColor); ULONG NTAPI PALETTE_ulGetNearestIndex(PALETTE* ppal, ULONG iColor); +ULONG NTAPI PALETTE_ulGetNearestBitFieldsIndex(PALETTE* ppal, ULONG ulColor); VOID NTAPI PALETTE_vGetBitMasks(PPALETTE ppal, PULONG pulColors); PPALETTEENTRY FASTCALL ReturnSystemPalette (VOID); diff --git a/reactos/subsystems/win32/win32k/objects/dibobj.c b/reactos/subsystems/win32/win32k/objects/dibobj.c index 84eac972fb0..79509c71127 100644 --- a/reactos/subsystems/win32/win32k/objects/dibobj.c +++ b/reactos/subsystems/win32/win32k/objects/dibobj.c @@ -295,7 +295,8 @@ IntSetDIBits( ptSrc.x = 0; ptSrc.y = 0; - EXLATEOBJ_vInitialize(&exlo, psurfSrc->ppal, psurfDst->ppal, 0, 0, 0); + /* 1bpp bitmaps have 0 for white, 1 for black */ + EXLATEOBJ_vInitialize(&exlo, psurfSrc->ppal, psurfDst->ppal, 0xFFFFFF, 0, 0); result = IntEngCopyBits(&psurfDst->SurfObj, &psurfSrc->SurfObj, From 8be61c1a2981e064f4af70420cdb45455eedd8f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Wed, 2 Mar 2011 01:15:10 +0000 Subject: [PATCH 194/287] [GDI32_APITESTS] - Test behaviour of SetDIBits for 1bpp bitmaps. - Add small test to GetPixel just to verify that SetDIBits doesn't say BS. svn path=/trunk/; revision=50950 --- rostests/apitests/gdi32/CMakeLists.txt | 1 + rostests/apitests/gdi32/GetPixel.c | 39 +++++++++ rostests/apitests/gdi32/SetDIBits.c | 87 ++++++++++++++++++++ rostests/apitests/gdi32/gdi32_apitest.rbuild | 1 + rostests/apitests/gdi32/testlist.c | 2 + 5 files changed, 130 insertions(+) create mode 100644 rostests/apitests/gdi32/GetPixel.c diff --git a/rostests/apitests/gdi32/CMakeLists.txt b/rostests/apitests/gdi32/CMakeLists.txt index 30885c9f0c9..2418976b336 100644 --- a/rostests/apitests/gdi32/CMakeLists.txt +++ b/rostests/apitests/gdi32/CMakeLists.txt @@ -34,6 +34,7 @@ list(APPEND SOURCE GetCurrentObject.c GetDIBits.c GetObject.c + GetPixel.c GetStockObject.c GetTextExtentExPoint.c GetTextFace.c diff --git a/rostests/apitests/gdi32/GetPixel.c b/rostests/apitests/gdi32/GetPixel.c new file mode 100644 index 00000000000..f7dac23d666 --- /dev/null +++ b/rostests/apitests/gdi32/GetPixel.c @@ -0,0 +1,39 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: GPL - See COPYING in the top level directory + * PURPOSE: Test for SetDIBits + * PROGRAMMERS: Jrme Gardou + */ + +#include +#include +#include + + +void Test_GetPixel_1bpp() +{ + HDC hdc; + HBITMAP hbmp; + char buffer[] = {0x80, 0x0}; + COLORREF color; + + hbmp = CreateBitmap(2,1,1,1,buffer); + ok(hbmp != NULL, "Failed to create a monochrom bitmap...\n"); + hdc = CreateCompatibleDC(0); + hbmp = SelectObject(hdc, hbmp); + ok(hbmp != NULL, "Could not select the bitmap into the DC.\n"); + + color = GetPixel(hdc, 0, 0); + ok(color == 0xFFFFFF, "Wrong color at 0,0 : 0x%08x\n", (UINT)color); + color = GetPixel(hdc, 1, 0); + ok(color == 0, "Wrong color at 1,0 : 0x%08x\n", (UINT)color); + + hbmp = SelectObject(hdc, hbmp); + DeleteObject(hbmp); + DeleteDC(hdc); +} + +START_TEST(GetPixel) +{ + Test_GetPixel_1bpp(); +} diff --git a/rostests/apitests/gdi32/SetDIBits.c b/rostests/apitests/gdi32/SetDIBits.c index fb6bfdb8029..50fcc52374a 100644 --- a/rostests/apitests/gdi32/SetDIBits.c +++ b/rostests/apitests/gdi32/SetDIBits.c @@ -50,7 +50,94 @@ void Test_SetDIBits() DeleteObject(hbmp); } +void Test_SetDIBits_1bpp() +{ + char buffer[sizeof(BITMAPINFOHEADER)+2*sizeof(RGBQUAD)]; + HDC hdc; + BITMAPINFO* pBMI = (BITMAPINFO*)buffer; + char bits1bpp[] = {0x80, 0, 0, 0}; + HBITMAP hbmp; + int ret; + COLORREF color; + + hdc = CreateCompatibleDC(0); + if(!hdc) + { + trace("No device contexr !?\n"); + return; + } + + ZeroMemory(buffer, sizeof(buffer)); + + pBMI->bmiHeader.biSize=sizeof(BITMAPINFOHEADER); + pBMI->bmiHeader.biWidth=2; + pBMI->bmiHeader.biHeight=1; + pBMI->bmiHeader.biPlanes=1; + pBMI->bmiHeader.biBitCount=1; + pBMI->bmiHeader.biCompression=BI_RGB; + pBMI->bmiHeader.biSizeImage=0; + pBMI->bmiHeader.biXPelsPerMeter=0; + pBMI->bmiHeader.biYPelsPerMeter=0; + pBMI->bmiHeader.biClrUsed=2; + pBMI->bmiHeader.biClrImportant=0; + pBMI->bmiColors[0].rgbBlue = 0xFF; + pBMI->bmiColors[0].rgbGreen = 0xFF; + pBMI->bmiColors[0].rgbRed = 0xFF; + + hbmp = CreateBitmap(2, 1, 1, 1, NULL); + ok(hbmp!=NULL, "Failed to create a monochrome bitmap\n"); + + ret = SetDIBits(NULL, hbmp, 0, 1, bits1bpp, pBMI, DIB_RGB_COLORS); + ok(ret == 1, "Copied %i scanlines\n", ret); + + hbmp = SelectObject(hdc, hbmp); + ok(hbmp != NULL, "Could not select the bitmap into the context.\n"); + color = GetPixel(hdc, 0,0); + ok(color == 0, "Wrong color at 0,0 : 0x%08x\n", (UINT)color); + color = GetPixel(hdc, 1,0); + ok(color == 0xFFFFFF, "Wrong color at 1,0 : 0x%08x\n", (UINT)color); + + hbmp = SelectObject(hdc, hbmp); + + /* Try something else than 0xFFFFFF */ + pBMI->bmiColors[0].rgbBlue = 0xFF; + pBMI->bmiColors[0].rgbGreen = 0; + pBMI->bmiColors[0].rgbRed = 0; + + ret = SetDIBits(NULL, hbmp, 0, 1, bits1bpp, pBMI, DIB_RGB_COLORS); + ok(ret == 1, "Copied %i scanlines\n", ret); + + hbmp = SelectObject(hdc, hbmp); + ok(hbmp != NULL, "Could not select the bitmap into the context.\n"); + color = GetPixel(hdc, 0,0); + ok(color == 0, "Wrong color at 0,0 : 0x%08x\n", (UINT)color); + color = GetPixel(hdc, 1,0); + ok(color == 0xFFFFFF, "Wrong color at 1,0 : 0x%08x\n", (UINT)color); + + hbmp = SelectObject(hdc, hbmp); + + /* Special : try 0 */ + pBMI->bmiColors[0].rgbBlue = 0; + pBMI->bmiColors[0].rgbGreen = 0; + pBMI->bmiColors[0].rgbRed = 0; + + ret = SetDIBits(NULL, hbmp, 0, 1, bits1bpp, pBMI, DIB_RGB_COLORS); + ok(ret == 1, "Copied %i scanlines\n", ret); + + hbmp = SelectObject(hdc, hbmp); + ok(hbmp != NULL, "Could not select the bitmap into the context.\n"); + color = GetPixel(hdc, 0,0); + ok(color == 0, "Wrong color at 0,0 : 0x%08x\n", (UINT)color); + color = GetPixel(hdc, 1,0); + ok(color == 0xFFFFFF, "Wrong color at 1,0 : 0x%08x\n", (UINT)color); + + hbmp = SelectObject(hdc, hbmp); + DeleteObject(hbmp); + DeleteDC(hdc); +} + START_TEST(SetDIBits) { Test_SetDIBits(); + Test_SetDIBits_1bpp(); } diff --git a/rostests/apitests/gdi32/gdi32_apitest.rbuild b/rostests/apitests/gdi32/gdi32_apitest.rbuild index 25dc88f055f..18327f64d12 100644 --- a/rostests/apitests/gdi32/gdi32_apitest.rbuild +++ b/rostests/apitests/gdi32/gdi32_apitest.rbuild @@ -41,6 +41,7 @@ GetCurrentObject.c GetDIBits.c GetObject.c + GetPixel.c GetStockObject.c GetTextExtentExPoint.c GetTextFace.c diff --git a/rostests/apitests/gdi32/testlist.c b/rostests/apitests/gdi32/testlist.c index c9b59d3a0ae..fc99d87d0e7 100644 --- a/rostests/apitests/gdi32/testlist.c +++ b/rostests/apitests/gdi32/testlist.c @@ -36,6 +36,7 @@ extern void func_GdiSetAttrs(void); extern void func_GetClipRgn(void); extern void func_GetCurrentObject(void); extern void func_GetDIBits(void); +extern void func_GetPixel(void); extern void func_GetObject(void); extern void func_GetStockObject(void); extern void func_GetTextExtentExPoint(void); @@ -82,6 +83,7 @@ const struct test winetest_testlist[] = { "GetClipRgn", func_GetClipRgn }, { "GetCurrentObject", func_GetCurrentObject }, { "GetDIBits", func_GetDIBits }, + { "GetPixel", func_GetPixel }, { "GetObject", func_GetObject }, { "GetStockObject", func_GetStockObject }, { "GetTextExtentExPoint", func_GetTextExtentExPoint }, From e5134f6b7b076e9fada8b3b1b10a7ef09f2af50f Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 2 Mar 2011 10:55:07 +0000 Subject: [PATCH 195/287] [FORMATTING] user32/edit.c: Sync formatting changes from wine head, removes some unneccessary casts, no code actual change. svn path=/trunk/; revision=50951 --- reactos/dll/win32/user32/controls/edit.c | 60 ++++++++++++------------ 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/reactos/dll/win32/user32/controls/edit.c b/reactos/dll/win32/user32/controls/edit.c index b484c842ea0..80a8cb7fcc8 100644 --- a/reactos/dll/win32/user32/controls/edit.c +++ b/reactos/dll/win32/user32/controls/edit.c @@ -1653,8 +1653,8 @@ static LRESULT EDIT_EM_Scroll(EDITSTATE *es, INT action) /* Notification is done in EDIT_EM_LineScroll */ if(dy) { EDIT_EM_LineScroll(es, 0, dy); - return MAKELONG((SHORT)dy, (BOOL)TRUE); - } + return MAKELONG(dy, TRUE); + } } return (LRESULT)FALSE; @@ -3090,6 +3090,7 @@ static void EDIT_WM_Command(EDITSTATE *es, INT code, INT id, HWND control) } #endif + /********************************************************************* * * WM_CONTEXTMENU @@ -3238,14 +3239,14 @@ static BOOL EDIT_CheckCombo(EDITSTATE *es, UINT msg, INT key) nEUI = 2; } - SendMessageW(hLBox, WM_KEYDOWN, (WPARAM)key, 0); + SendMessageW(hLBox, WM_KEYDOWN, key, 0); break; case WM_SYSKEYDOWN: /* Handle Alt+up/down arrows */ if (nEUI) SendMessageW(hCombo, CB_SHOWDROPDOWN, bDropped ? FALSE : TRUE, 0); else - SendMessageW(hLBox, WM_KEYDOWN, (WPARAM)VK_F4, 0); + SendMessageW(hLBox, WM_KEYDOWN, VK_F4, 0); break; } @@ -3359,17 +3360,17 @@ static LRESULT EDIT_WM_KeyDown(EDITSTATE *es, INT key) /* If the edit doesn't want the return send a message to the default object */ if(!(es->style & ES_MULTILINE) || !(es->style & ES_WANTRETURN)) { - DWORD dw; + DWORD dw; if (!EDIT_IsInsideDialog(es)) break; if (control) break; - dw = SendMessageW( es->hwndParent, DM_GETDEFID, 0, 0 ); + dw = SendMessageW(es->hwndParent, DM_GETDEFID, 0, 0); if (HIWORD(dw) == DC_HASDEFID) { HWND hwDefCtrl = GetDlgItem(es->hwndParent, LOWORD(dw)); if (hwDefCtrl) { - SendMessageW(es->hwndParent, WM_NEXTDLGCTL, (WPARAM)hwDefCtrl, (LPARAM)TRUE); + SendMessageW(es->hwndParent, WM_NEXTDLGCTL, (WPARAM)hwDefCtrl, TRUE); PostMessageW(hwDefCtrl, WM_KEYDOWN, VK_RETURN, 0); } } @@ -3384,7 +3385,7 @@ static LRESULT EDIT_WM_KeyDown(EDITSTATE *es, INT key) SendMessageW(es->hwndParent, WM_NEXTDLGCTL, shift, 0); break; } - return TRUE; + return TRUE; } @@ -3839,7 +3840,7 @@ static LRESULT EDIT_WM_SysKeyDown(EDITSTATE *es, INT key, DWORD key_data) if (EDIT_CheckCombo(es, WM_SYSKEYDOWN, key)) return 0; } - return DefWindowProcW(es->hwndSelf, WM_SYSKEYDOWN, (WPARAM)key, (LPARAM)key_data); + return DefWindowProcW(es->hwndSelf, WM_SYSKEYDOWN, key, key_data); } @@ -3970,10 +3971,10 @@ static LRESULT EDIT_WM_HScroll(EDITSTATE *es, INT action, INT pos) TRACE("EM_GETTHUMB: returning %ld\n", ret); return ret; } - case EM_LINESCROLL: - TRACE("EM_LINESCROLL16\n"); - dx = pos; - break; + case EM_LINESCROLL: + TRACE("EM_LINESCROLL16\n"); + dx = pos; + break; default: ERR("undocumented WM_HSCROLL action %d (0x%04x), please report\n", @@ -4094,7 +4095,7 @@ static LRESULT EDIT_WM_VScroll(EDITSTATE *es, INT action, INT pos) return ret; } case EM_LINESCROLL: - TRACE("EM_LINESCROLL16 %d\n", pos); + TRACE("EM_LINESCROLL %d\n", pos); dy = pos; break; @@ -4121,7 +4122,7 @@ static LRESULT EDIT_WM_VScroll(EDITSTATE *es, INT action, INT pos) static LRESULT EDIT_EM_GetThumb(EDITSTATE *es) { return MAKELONG(EDIT_WM_VScroll(es, EM_GETTHUMB, 0), - EDIT_WM_HScroll(es, EM_GETTHUMB, 0)); + EDIT_WM_HScroll(es, EM_GETTHUMB, 0)); } @@ -4366,12 +4367,12 @@ static LRESULT EDIT_WM_NCCreate(HWND hwnd, LPCREATESTRUCTW lpcs, BOOL unicode) return TRUE; cleanup: - SetWindowLongPtrW(es->hwndSelf, 0, 0); - HeapFree(GetProcessHeap(), 0, es->first_line_def); - HeapFree(GetProcessHeap(), 0, es->undo_text); - if (es->hloc32W) LocalFree(es->hloc32W); - HeapFree(GetProcessHeap(), 0, es); - return FALSE; + SetWindowLongPtrW(es->hwndSelf, 0, 0); + HeapFree(GetProcessHeap(), 0, es->first_line_def); + HeapFree(GetProcessHeap(), 0, es->undo_text); + if (es->hloc32W) LocalFree(es->hloc32W); + HeapFree(GetProcessHeap(), 0, es); + return FALSE; } @@ -4448,8 +4449,8 @@ static LRESULT EDIT_WM_Destroy(EDITSTATE *es) pc = pp; } - SetWindowLongPtrW( es->hwndSelf, 0, 0 ); - HeapFree(GetProcessHeap(), 0, es->undo_text); + SetWindowLongPtrW( es->hwndSelf, 0, 0 ); + HeapFree(GetProcessHeap(), 0, es->undo_text); HeapFree(GetProcessHeap(), 0, es); return 0; @@ -4471,8 +4472,7 @@ static inline LRESULT DefWindowProcT(HWND hwnd, UINT msg, WPARAM wParam, LPARAM * The messages are in the order of the actual integer values * (which can be found in include/windows.h) */ -LRESULT WINAPI EditWndProc_common( HWND hwnd, UINT msg, - WPARAM wParam, LPARAM lParam, BOOL unicode ) +LRESULT EditWndProc_common( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode ) { EDITSTATE *es = (EDITSTATE *)GetWindowLongPtrW( hwnd, 0 ); LRESULT result = 0; @@ -4595,8 +4595,8 @@ LRESULT WINAPI EditWndProc_common( HWND hwnd, UINT msg, { LPSTR textA = (LPSTR)lParam; INT countW = MultiByteToWideChar(CP_ACP, 0, textA, -1, NULL, 0); - if(!(textW = HeapAlloc(GetProcessHeap(), 0, countW * sizeof(WCHAR)))) break; - MultiByteToWideChar(CP_ACP, 0, textA, -1, textW, countW); + if (!(textW = HeapAlloc(GetProcessHeap(), 0, countW * sizeof(WCHAR)))) break; + MultiByteToWideChar(CP_ACP, 0, textA, -1, textW, countW); } EDIT_EM_ReplaceSel(es, (BOOL)wParam, textW, TRUE, TRUE); @@ -4908,7 +4908,7 @@ LRESULT WINAPI EditWndProc_common( HWND hwnd, UINT msg, break; case WM_MBUTTONDOWN: - result = EDIT_WM_MButtonDown(es); + result = EDIT_WM_MButtonDown(es); break; case WM_MOUSEMOVE: @@ -4985,8 +4985,8 @@ LRESULT WINAPI EditWndProc_common( HWND hwnd, UINT msg, } break; - - /* IME messages to make the edit control IME aware */ + + /* IME messages to make the edit control IME aware */ case WM_IME_SETCONTEXT: break; From 8b1f0d1966eb61d5f21aeb4dcc474b454dbb062a Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 2 Mar 2011 10:57:56 +0000 Subject: [PATCH 196/287] [USER32] Revert a previous change that shouldn't have been comitted yet. svn path=/trunk/; revision=50952 --- reactos/dll/win32/user32/controls/edit.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/reactos/dll/win32/user32/controls/edit.c b/reactos/dll/win32/user32/controls/edit.c index 80a8cb7fcc8..819ebaefaf0 100644 --- a/reactos/dll/win32/user32/controls/edit.c +++ b/reactos/dll/win32/user32/controls/edit.c @@ -4472,7 +4472,8 @@ static inline LRESULT DefWindowProcT(HWND hwnd, UINT msg, WPARAM wParam, LPARAM * The messages are in the order of the actual integer values * (which can be found in include/windows.h) */ -LRESULT EditWndProc_common( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode ) +LRESULT WINAPI EditWndProc_common( HWND hwnd, UINT msg, + WPARAM wParam, LPARAM lParam, BOOL unicode ) { EDITSTATE *es = (EDITSTATE *)GetWindowLongPtrW( hwnd, 0 ); LRESULT result = 0; From 92654a7e4e942061c4160150ccfc9850550e50e7 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 2 Mar 2011 11:05:51 +0000 Subject: [PATCH 197/287] [USER32] Go back to use of SetWindowLongW instead of GetWindowLongPtrW for GWL_STYLE to reduce diff to wine code. svn path=/trunk/; revision=50953 --- reactos/dll/win32/user32/controls/edit.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/reactos/dll/win32/user32/controls/edit.c b/reactos/dll/win32/user32/controls/edit.c index 819ebaefaf0..bf7c3eec81d 100644 --- a/reactos/dll/win32/user32/controls/edit.c +++ b/reactos/dll/win32/user32/controls/edit.c @@ -2771,13 +2771,13 @@ static void EDIT_EM_SetPasswordChar(EDITSTATE *es, WCHAR c) if (es->password_char == c) return; - style = GetWindowLongPtrW( es->hwndSelf, GWL_STYLE ); + style = GetWindowLongW( es->hwndSelf, GWL_STYLE ); es->password_char = c; if (c) { - SetWindowLongPtrW( es->hwndSelf, GWL_STYLE, style | ES_PASSWORD ); + SetWindowLongW( es->hwndSelf, GWL_STYLE, style | ES_PASSWORD ); es->style |= ES_PASSWORD; } else { - SetWindowLongPtrW( es->hwndSelf, GWL_STYLE, style & ~ES_PASSWORD ); + SetWindowLongW( es->hwndSelf, GWL_STYLE, style & ~ES_PASSWORD ); es->style &= ~ES_PASSWORD; } EDIT_UpdateText(es, NULL, TRUE); @@ -3930,7 +3930,7 @@ static LRESULT EDIT_WM_HScroll(EDITSTATE *es, INT action, INT pos) case SB_THUMBPOSITION: TRACE("SB_THUMBPOSITION %d\n", pos); es->flags &= ~EF_HSCROLL_TRACK; - if(GetWindowLongPtrW( es->hwndSelf, GWL_STYLE ) & WS_HSCROLL) + if(GetWindowLongW( es->hwndSelf, GWL_STYLE ) & WS_HSCROLL) dx = pos - es->x_offset; else { @@ -3960,7 +3960,7 @@ static LRESULT EDIT_WM_HScroll(EDITSTATE *es, INT action, INT pos) case EM_GETTHUMB: /* this one is used by NT notepad */ { LRESULT ret; - if(GetWindowLongPtrW( es->hwndSelf, GWL_STYLE ) & WS_HSCROLL) + if(GetWindowLongW( es->hwndSelf, GWL_STYLE ) & WS_HSCROLL) ret = GetScrollPos(es->hwndSelf, SB_HORZ); else { @@ -4083,7 +4083,7 @@ static LRESULT EDIT_WM_VScroll(EDITSTATE *es, INT action, INT pos) case EM_GETTHUMB: /* this one is used by NT notepad */ { LRESULT ret; - if(GetWindowLongPtrW( es->hwndSelf, GWL_STYLE ) & WS_VSCROLL) + if(GetWindowLongW( es->hwndSelf, GWL_STYLE ) & WS_VSCROLL) ret = GetScrollPos(es->hwndSelf, SB_VERT); else { @@ -4362,7 +4362,7 @@ static LRESULT EDIT_WM_NCCreate(HWND hwnd, LPCREATESTRUCTW lpcs, BOOL unicode) if (lpcs->dwExStyle & WS_EX_CLIENTEDGE) es->style &= ~WS_BORDER; else if (es->style & WS_BORDER) - SetWindowLongPtrW(hwnd, GWL_STYLE, es->style & ~WS_BORDER); + SetWindowLongW(hwnd, GWL_STYLE, es->style & ~WS_BORDER); return TRUE; @@ -4666,12 +4666,12 @@ LRESULT WINAPI EditWndProc_common( HWND hwnd, UINT msg, DWORD old_style = es->style; if (wParam) { - SetWindowLongPtrW( hwnd, GWL_STYLE, - GetWindowLongPtrW( hwnd, GWL_STYLE ) | ES_READONLY ); + SetWindowLongW( hwnd, GWL_STYLE, + GetWindowLongW( hwnd, GWL_STYLE ) | ES_READONLY ); es->style |= ES_READONLY; } else { - SetWindowLongPtrW( hwnd, GWL_STYLE, - GetWindowLongPtrW( hwnd, GWL_STYLE ) & ~ES_READONLY ); + SetWindowLongW( hwnd, GWL_STYLE, + GetWindowLongW( hwnd, GWL_STYLE ) & ~ES_READONLY ); es->style &= ~ES_READONLY; } From 97d2212a197d3d4739db441f2c19044583a97979 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Wed, 2 Mar 2011 11:42:30 +0000 Subject: [PATCH 198/287] [RTL/PATH] - Update path.c code to Wine 1.3.14. Fixes a buffer overwrite happening in RtlDosSearchPath_U() when invoked by "shell32_winetest.exe shlexec". - RtlDosPathNameToNtPathName_U remains unsynced. - Author names added to the header of the file. See issue #5964 for more details. svn path=/trunk/; revision=50954 --- reactos/lib/rtl/path.c | 185 ++++++++++++++++++++--------------------- 1 file changed, 91 insertions(+), 94 deletions(-) diff --git a/reactos/lib/rtl/path.c b/reactos/lib/rtl/path.c index 238d5c89b34..d0b4e21a7a1 100644 --- a/reactos/lib/rtl/path.c +++ b/reactos/lib/rtl/path.c @@ -3,7 +3,9 @@ * PROJECT: ReactOS system libraries * FILE: lib/rtl/path.c * PURPOSE: Path and current directory functions - * PROGRAMMERS: + * PROGRAMMERS: Wine team + * Thomas Weidenmueller + * Gunnar Dalsnes */ /* INCLUDES *****************************************************************/ @@ -112,30 +114,24 @@ RtlIsDosDeviceName_U(PWSTR dos_name) if (!_wcsicmp( dos_name, consoleW )) return MAKELONG( sizeof(conW), 4 * sizeof(WCHAR) ); /* 4 is length of \\.\ prefix */ return 0; + case RtlPathTypeDriveAbsolute: + case RtlPathTypeDriveRelative: + start = dos_name + 2; /* skip drive letter */ + break; default: + start = dos_name; break; } - end = dos_name + wcslen(dos_name) - 1; - while (end >= dos_name && *end == ':') end--; /* remove all trailing ':' */ - /* find start of file name */ - for (start = end; start >= dos_name; start--) - { - if (IS_PATH_SEPARATOR(start[0])) break; - /* check for ':' but ignore if before extension (for things like NUL:.txt) */ - if (start[0] == ':' && start[1] != '.') break; - } - start++; + for (p = start; *p; p++) if (IS_PATH_SEPARATOR(*p)) start = p + 1; + + /* truncate at extension and ':' */ + for (end = start; *end; end++) if (*end == '.' || *end == ':') break; + end--; - /* remove extension */ - if ((p = wcschr( start, '.' ))) - { - end = p - 1; - if (end >= dos_name && *end == ':') end--; /* remove trailing ':' before extension */ - } /* remove trailing spaces */ - while (end >= dos_name && *end == ' ') end--; + while (end >= start && *end == ' ') end--; /* now we have a potential device name between start and end, check it */ switch(end - start + 1) @@ -218,6 +214,8 @@ RtlSetCurrentDirectory_U(PUNICODE_STRING dir) DPRINT("RtlSetCurrentDirectory %wZ\n", dir); + full.Buffer = NULL; + RtlAcquirePebLock (); cd = (PCURDIR)&NtCurrentPeb ()->ProcessParameters->CurrentDirectory.DosPath; @@ -287,16 +285,13 @@ RtlSetCurrentDirectory_U(PUNICODE_STRING dir) } - /****************************************************************** - * collapse_path + * collapse_path * * Helper for RtlGetFullPathName_U. - * 1) Convert slashes into backslashes - * 2) Get rid of duplicate backslashes - * 3) Get rid of . and .. components in the path. + * Get rid of . and .. components in the path. */ -static __inline void collapse_path( WCHAR *path, UINT mark ) +void FORCEINLINE collapse_path( WCHAR *path, UINT mark ) { WCHAR *p, *next; @@ -469,9 +464,11 @@ static ULONG get_full_path_helper( tmp[1] = ':'; tmp[2] = '\\'; ins_str = tmp; + RtlFreeHeap(RtlGetProcessHeap(), 0, val.Buffer); break; default: DPRINT1("Unsupported status code\n"); + RtlFreeHeap(RtlGetProcessHeap(), 0, val.Buffer); break; } mark = 3; @@ -554,7 +551,7 @@ static ULONG get_full_path_helper( if (reqsize) memcpy(buffer, ins_str, reqsize); reqsize += deplen; - if (ins_str && ins_str != tmp && ins_str != cd->Buffer) + if (ins_str != tmp && ins_str != cd->Buffer) RtlFreeHeap(RtlGetProcessHeap(), 0, ins_str); collapse_path( buffer, mark ); @@ -614,10 +611,9 @@ ULONG NTAPI RtlGetFullPathName_U( if (reqsize > size) { LPWSTR tmp = RtlAllocateHeap(RtlGetProcessHeap(), 0, reqsize); - if (tmp == NULL) - return 0; + if (tmp == NULL) return 0; reqsize = get_full_path_helper(name, tmp, reqsize); - if (reqsize > size) /* it may have worked the second time */ + if (reqsize + sizeof(WCHAR) > size) /* it may have worked the second time */ { RtlFreeHeap(RtlGetProcessHeap(), 0, tmp); return reqsize + sizeof(WCHAR); @@ -799,77 +795,79 @@ RtlDosPathNameToNtPathName_U(IN PCWSTR DosPathName, /* * @implemented */ +/****************************************************************** + * RtlDosSearchPath_U + * + * Searches a file of name 'name' into a ';' separated list of paths + * (stored in paths) + * Doesn't seem to search elsewhere than the paths list + * Stores the result in buffer (file_part will point to the position + * of the file name in the buffer) + * FIXME: + * - how long shall the paths be ??? (MAX_PATH or larger with \\?\ constructs ???) + */ ULONG NTAPI -RtlDosSearchPath_U ( - PCWSTR sp, - PCWSTR name, - PCWSTR ext, - ULONG buf_sz, - WCHAR *buffer, - PWSTR *FilePart - ) +RtlDosSearchPath_U(PCWSTR paths, + PCWSTR search, + PCWSTR ext, + ULONG buffer_size, + PWSTR buffer, + PWSTR* file_part) { - ULONG Type; - ULONG Length = 0; - PWSTR full_name; - PWSTR wcs; - PCWSTR path; + RTL_PATH_TYPE type = RtlDetermineDosPathNameType_U(search); + ULONG len = 0; - Type = RtlDetermineDosPathNameType_U (name); + if (type == RtlPathTypeRelative) + { + ULONG allocated = 0, needed, filelen; + WCHAR *name = NULL; - if (Type == 5) - { - Length = wcslen (sp); - Length += wcslen (name); - if (wcschr (name, L'.')) - ext = NULL; - if (ext != NULL) - Length += wcslen (ext); + filelen = 1 /* for \ */ + wcslen(search) + 1 /* \0 */; - full_name = (WCHAR*)RtlAllocateHeap (RtlGetProcessHeap (), - 0, - (Length + 1) * sizeof(WCHAR)); - Length = 0; - if (full_name != NULL) - { - path = sp; - while (*path) - { - wcs = full_name; - while (*path && *path != L';') - *wcs++ = *path++; - if (*path) - path++; - if (wcs != full_name && *(wcs - 1) != L'\\') - *wcs++ = L'\\'; - wcscpy (wcs, name); - if (ext) - wcscat (wcs, ext); - if (RtlDoesFileExists_U (full_name)) - { - Length = RtlGetFullPathName_U (full_name, - buf_sz, - buffer, - FilePart); - break; - } - } + /* Windows only checks for '.' without worrying about path components */ + if (wcschr( search, '.' )) ext = NULL; + if (ext != NULL) filelen += wcslen(ext); - RtlFreeHeap (RtlGetProcessHeap (), - 0, - full_name); - } - } - else if (RtlDoesFileExists_U (name)) - { - Length = RtlGetFullPathName_U (name, - buf_sz, - buffer, - FilePart); - } + while (*paths) + { + LPCWSTR ptr; - return Length; + for (needed = 0, ptr = paths; *ptr != 0 && *ptr++ != ';'; needed++); + if (needed + filelen > allocated) + { + if (!name) name = RtlAllocateHeap(RtlGetProcessHeap(), 0, + (needed + filelen) * sizeof(WCHAR)); + else + { + WCHAR *newname = RtlReAllocateHeap(RtlGetProcessHeap(), 0, name, + (needed + filelen) * sizeof(WCHAR)); + if (!newname) RtlFreeHeap(RtlGetProcessHeap(), 0, name); + name = newname; + } + if (!name) return 0; + allocated = needed + filelen; + } + memmove(name, paths, needed * sizeof(WCHAR)); + /* append '\\' if none is present */ + if (needed > 0 && name[needed - 1] != '\\') name[needed++] = '\\'; + wcscpy(&name[needed], search); + if (ext) wcscat(&name[needed], ext); + if (RtlDoesFileExists_U(name)) + { + len = RtlGetFullPathName_U(name, buffer_size, buffer, file_part); + break; + } + paths = ptr; + } + RtlFreeHeap(RtlGetProcessHeap(), 0, name); + } + else if (RtlDoesFileExists_U(search)) + { + len = RtlGetFullPathName_U(search, buffer_size, buffer, file_part); + } + + return len; } @@ -881,11 +879,10 @@ RtlDoesFileExists_U(IN PCWSTR FileName) { UNICODE_STRING NtFileName; OBJECT_ATTRIBUTES Attr; - FILE_BASIC_INFORMATION Info; + FILE_BASIC_INFORMATION Info; NTSTATUS Status; CURDIR CurDir; - if (!RtlDosPathNameToNtPathName_U (FileName, &NtFileName, NULL, @@ -905,7 +902,7 @@ RtlDoesFileExists_U(IN PCWSTR FileName) Status = ZwQueryAttributesFile (&Attr, &Info); - RtlFreeUnicodeString(&NtFileName); + RtlFreeUnicodeString(&NtFileName); if (NT_SUCCESS(Status) || From e12dbcd77d0c0a147f7591906e23fc2696f7f7e4 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 2 Mar 2011 13:13:10 +0000 Subject: [PATCH 199/287] [USER32] Sync edit.c with wine head. svn path=/trunk/; revision=50955 --- reactos/dll/win32/user32/controls/edit.c | 74 +++++++++------------- reactos/dll/win32/user32/include/user32p.h | 1 + 2 files changed, 31 insertions(+), 44 deletions(-) diff --git a/reactos/dll/win32/user32/controls/edit.c b/reactos/dll/win32/user32/controls/edit.c index bf7c3eec81d..410e486f159 100644 --- a/reactos/dll/win32/user32/controls/edit.c +++ b/reactos/dll/win32/user32/controls/edit.c @@ -426,8 +426,8 @@ static void EDIT_BuildLineDefs_ML(EDITSTATE *es, INT istart, INT iend, INT delta /* The buffer has been expanded, create a new line and insert it into the link list */ LINEDEF *new_line = HeapAlloc(GetProcessHeap(), 0, sizeof(LINEDEF)); - if (new_line == NULL) - break; + if (new_line == NULL) // reactos r33509 + break; // reactos r33509 new_line->next = previous_line->next; previous_line->next = new_line; current_line = new_line; @@ -1109,8 +1109,7 @@ static void EDIT_LockBuffer(EDITSTATE *es) if(textA) { HLOCAL hloc32W_new; - UINT countW_new = MultiByteToWideChar(CP_ACP, 0, textA, countA, NULL, 0); - TRACE("%d bytes translated to %d WCHARs\n", countA, countW_new); + UINT countW_new = MultiByteToWideChar(CP_ACP, 0, textA, -1, NULL, 0); if(countW_new > es->buffer_size + 1) { UINT alloc_size = ROUND_TO_GROW(countW_new * sizeof(WCHAR)); @@ -1125,14 +1124,11 @@ static void EDIT_LockBuffer(EDITSTATE *es) else WARN("FAILED! Will synchronize partially\n"); } + es->text = LocalLock(es->hloc32W); + MultiByteToWideChar(CP_ACP, 0, textA, -1, es->text, es->buffer_size + 1); + LocalUnlock(es->hloc32A); } - /*TRACE("Locking 32-bit UNICODE buffer\n");*/ - es->text = LocalLock(es->hloc32W); - if(textA) - { - MultiByteToWideChar(CP_ACP, 0, textA, countA, es->text, es->buffer_size + 1); - LocalUnlock(es->hloc32A); - } + else es->text = LocalLock(es->hloc32W); } if(es->flags & EF_APP_HAS_HANDLE) text_buffer_changed(es); es->lock_count++; @@ -1165,7 +1161,6 @@ static void EDIT_UnlockBuffer(EDITSTATE *es, BOOL force) if (force || (es->lock_count == 1)) { if (es->hloc32W) { - CHAR *textA = NULL; // ReactOS hacked! UINT countA = 0; UINT countW = get_text_length(es) + 1; @@ -1190,13 +1185,9 @@ static void EDIT_UnlockBuffer(EDITSTATE *es, BOOL force) else WARN("FAILED! Will synchronize partially\n"); } - textA = LocalLock(es->hloc32A); - } - - if(textA) - { - WideCharToMultiByte(CP_ACP, 0, es->text, countW, textA, countA, NULL, NULL); - LocalUnlock(es->hloc32A); + WideCharToMultiByte(CP_ACP, 0, es->text, countW, + LocalLock(es->hloc32A), countA, NULL, NULL); + LocalUnlock(es->hloc32A); } LocalUnlock(es->hloc32W); @@ -2799,11 +2790,11 @@ static BOOL EDIT_EM_SetTabStops(EDITSTATE *es, INT count, const INT *tabs) es->tabs = NULL; else { es->tabs = HeapAlloc(GetProcessHeap(), 0, count * sizeof(INT)); - if (es->tabs == NULL) + if (es->tabs == NULL) // reactos r33503 { es->tabs_count = 0; return FALSE; - } + } // reactos r33503 memcpy(es->tabs, tabs, count * sizeof(INT)); } return TRUE; @@ -2847,8 +2838,8 @@ static BOOL EDIT_EM_Undo(EDITSTATE *es) ulength = strlenW(es->undo_text); utext = HeapAlloc(GetProcessHeap(), 0, (ulength + 1) * sizeof(WCHAR)); - if (utext == NULL) - return FALSE; + if (utext == NULL) // reactos r33503 + return FALSE; // reactos r33503 strcpyW(utext, es->undo_text); @@ -2877,7 +2868,7 @@ static BOOL EDIT_EM_Undo(EDITSTATE *es) * controls without ES_WANTRETURN would attempt to detect whether it is inside * a dialog box or not. */ -static BOOL EDIT_IsInsideDialog(EDITSTATE *es) +static inline BOOL EDIT_IsInsideDialog(EDITSTATE *es) { return (es->flags & EF_DIALOGMODE); } @@ -3109,11 +3100,7 @@ static void EDIT_WM_Command(EDITSTATE *es, INT code, INT id, HWND control) */ static void EDIT_WM_ContextMenu(EDITSTATE *es, INT x, INT y) { -#ifdef __REACTOS__ - HMENU menu = LoadMenuA(User32Instance, "EDITMENU"); -#else HMENU menu = LoadMenuA(user32_module, "EDITMENU"); -#endif HMENU popup = GetSubMenu(menu, 0); UINT start = es->selection_start; UINT end = es->selection_end; @@ -3144,6 +3131,10 @@ static void EDIT_WM_ContextMenu(EDITSTATE *es, INT x, INT y) y = rc.top + (rc.bottom - rc.top) / 2; } + if (!(es->flags & EF_FOCUSED)) + SetFocus(es->hwndSelf); + +#ifdef __REACTOS__ selectedItem = TrackPopupMenu(popup, TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD, x, y, 0, es->hwndSelf, NULL); // Added see Revision 43925 comments. switch (selectedItem) { @@ -3170,7 +3161,7 @@ static void EDIT_WM_ContextMenu(EDITSTATE *es, INT x, INT y) ERR("unknown menu item, please report\n"); break; } - +#endif DestroyMenu(menu); } @@ -3682,7 +3673,7 @@ static void EDIT_WM_SetFont(EDITSTATE *es, HFONT font, BOOL redraw) EDIT_UpdateText(es, NULL, TRUE); if (es->flags & EF_FOCUSED) { DestroyCaret(); - CreateCaret(es->hwndSelf, 0, 2, es->line_height); + CreateCaret(es->hwndSelf, 0, 1, es->line_height); EDIT_SetCaretPos(es, es->selection_end, es->flags & EF_AFTER_WRAP); ShowCaret(es->hwndSelf); @@ -4428,10 +4419,10 @@ static LRESULT EDIT_WM_Create(EDITSTATE *es, LPCWSTR name) /********************************************************************* * - * WM_DESTROY + * WM_NCDESTROY * */ -static LRESULT EDIT_WM_Destroy(EDITSTATE *es) +static LRESULT EDIT_WM_NCDestroy(EDITSTATE *es) { LINEDEF *pc, *pp; @@ -4472,8 +4463,7 @@ static inline LRESULT DefWindowProcT(HWND hwnd, UINT msg, WPARAM wParam, LPARAM * The messages are in the order of the actual integer values * (which can be found in include/windows.h) */ -LRESULT WINAPI EditWndProc_common( HWND hwnd, UINT msg, - WPARAM wParam, LPARAM lParam, BOOL unicode ) +LRESULT WINAPI EditWndProc_common( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode ) { EDITSTATE *es = (EDITSTATE *)GetWindowLongPtrW( hwnd, 0 ); LRESULT result = 0; @@ -4495,7 +4485,7 @@ LRESULT WINAPI EditWndProc_common( HWND hwnd, UINT msg, if (!es && msg != WM_NCCREATE) return DefWindowProcT(hwnd, msg, wParam, lParam, unicode); - if (es && (msg != WM_DESTROY)) EDIT_LockBuffer(es); + if (es && (msg != WM_NCDESTROY)) EDIT_LockBuffer(es); switch (msg) { case EM_GETSEL: @@ -4570,13 +4560,9 @@ LRESULT WINAPI EditWndProc_common( HWND hwnd, UINT msg, break; /* these messages missing from specs */ - case WM_USER+15: case 0x00bf: - case WM_USER+16: case 0x00c0: - case WM_USER+19: case 0x00c3: - case WM_USER+26: case 0x00ca: FIXME("undocumented message 0x%x, please report\n", msg); result = DefWindowProcW(hwnd, msg, wParam, lParam); @@ -4733,8 +4719,8 @@ LRESULT WINAPI EditWndProc_common( HWND hwnd, UINT msg, result = EDIT_WM_NCCreate(hwnd, (LPCREATESTRUCTW)lParam, unicode); break; - case WM_DESTROY: - result = EDIT_WM_Destroy(es); + case WM_NCDESTROY: + result = EDIT_WM_NCDestroy(es); es = NULL; #ifdef __REACTOS__ NtUserSetWindowFNID(hwnd, FNID_DESTROY); @@ -5058,10 +5044,10 @@ const struct builtin_class_descr EDIT_builtin_class = CS_DBLCLKS | CS_PARENTDC, /* style */ EditWndProcA, /* procA */ EditWndProcW, /* procW */ -#ifdef _WIN64 - sizeof(EDITSTATE *), /* extra */ -#else +#ifndef _WIN64 sizeof(EDITSTATE *) + sizeof(WORD), /* extra */ +#else + sizeof(EDITSTATE *), /* extra */ #endif IDC_IBEAM, /* cursor */ 0 /* brush */ diff --git a/reactos/dll/win32/user32/include/user32p.h b/reactos/dll/win32/user32/include/user32p.h index 9a27bbc19ac..9dd8ae2860e 100644 --- a/reactos/dll/win32/user32/include/user32p.h +++ b/reactos/dll/win32/user32/include/user32p.h @@ -106,6 +106,7 @@ /* Internal Thread Data */ extern HINSTANCE User32Instance; +#define user32_module User32Instance extern HINSTANCE hImmInstance; /* Critical Section*/ From 3d476667b636cb3eaa445af0883ab2b61bf0e161 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 2 Mar 2011 13:23:13 +0000 Subject: [PATCH 200/287] [USER32] Patch by Thomas Faber: When the Edit receives WM_KILLFOCUS, it will notify its parent (the ListView) of losing focus, which in turn will send WM_CLOSE to destroy the edit control. This will cause the edit to receive WM_DESTROY and free the EDITSTATE. When control returns to the WM_KILLFOCUS handler, this would call EDIT_UnlockBuffer on the now invalid EDITSTATE. Fix this by checking the validity of the EDITSTATE before calling EDIT_UnlockBuffer. Fixes explorer crash, when cancelling file renaming. See issue #5895 for more details. svn path=/trunk/; revision=50956 --- reactos/dll/win32/user32/controls/edit.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/reactos/dll/win32/user32/controls/edit.c b/reactos/dll/win32/user32/controls/edit.c index 410e486f159..65f36797f63 100644 --- a/reactos/dll/win32/user32/controls/edit.c +++ b/reactos/dll/win32/user32/controls/edit.c @@ -4721,7 +4721,7 @@ LRESULT WINAPI EditWndProc_common( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP case WM_NCDESTROY: result = EDIT_WM_NCDestroy(es); - es = NULL; +// es = NULL; reactos #ifdef __REACTOS__ NtUserSetWindowFNID(hwnd, FNID_DESTROY); #endif @@ -5009,7 +5009,9 @@ LRESULT WINAPI EditWndProc_common( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP break; } - if (IsWindow(hwnd) && es) EDIT_UnlockBuffer(es, FALSE); + /* reactos: check GetWindowLong in case es has been destroyed during processing */ + if (IsWindow(hwnd) && es && GetWindowLongPtrW(hwnd, 0)) + EDIT_UnlockBuffer(es, FALSE); TRACE("hwnd=%p msg=%x (%s) -- 0x%08lx\n", hwnd, msg, SPY_GetMsgName(msg, hwnd), result); From 2edb1c468cba7e11d875eb0f1f00897893016639 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 2 Mar 2011 13:33:19 +0000 Subject: [PATCH 201/287] [SHELL32] patch by Thomas Faber: fix a TRACE svn path=/trunk/; revision=50957 --- reactos/dll/win32/shell32/shlview.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/dll/win32/shell32/shlview.c b/reactos/dll/win32/shell32/shlview.c index f3cd5507c13..335524548ab 100644 --- a/reactos/dll/win32/shell32/shlview.c +++ b/reactos/dll/win32/shell32/shlview.c @@ -1475,7 +1475,7 @@ static LRESULT ShellView_OnNotify(IShellViewImpl * This, UINT CtlID, LPNMHDR lpn case LVN_ENDLABELEDITW: { - TRACE("-- LVN_ENDLABELEDITA %p\n",This); + TRACE("-- LVN_ENDLABELEDITW %p\n",This); if (lpdi->item.pszText) { HRESULT hr; From 8de09facc2c48c6bba417405aefdfa2a93d81ba1 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Wed, 2 Mar 2011 21:51:33 +0000 Subject: [PATCH 202/287] [FASTFAT] - Prevent code duplication by using vfatAttachFCBToFileObject() for volume opening, instead of rewritting the whole function. - Properly check requested disposition when opening a volume. This fixes bug #5839. Trying to exec \\.\C: in explorer run dialog now ends with an error, as it does on Windows. svn path=/trunk/; revision=50958 --- reactos/drivers/filesystems/fastfat/create.c | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/reactos/drivers/filesystems/fastfat/create.c b/reactos/drivers/filesystems/fastfat/create.c index 514084ee3f1..1053413d945 100644 --- a/reactos/drivers/filesystems/fastfat/create.c +++ b/reactos/drivers/filesystems/fastfat/create.c @@ -433,7 +433,6 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp ) NTSTATUS Status = STATUS_SUCCESS; PDEVICE_EXTENSION DeviceExt; ULONG RequestedDisposition, RequestedOptions; - PVFATCCB pCcb; PVFATFCB pFcb = NULL; PVFATFCB ParentFcb = NULL; PWCHAR c, last; @@ -468,9 +467,8 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp ) if (FileObject->FileName.Length == 0 && (FileObject->RelatedFileObject == NULL || FileObject->RelatedFileObject->FsContext2 != NULL)) { - if (RequestedDisposition == FILE_CREATE || - RequestedDisposition == FILE_OVERWRITE_IF || - RequestedDisposition == FILE_SUPERSEDE) + if (RequestedDisposition != FILE_OPEN || + RequestedDisposition != FILE_OPEN_IF) { return(STATUS_ACCESS_DENIED); } @@ -481,16 +479,9 @@ VfatCreateFile ( PDEVICE_OBJECT DeviceObject, PIRP Irp ) return(STATUS_NOT_A_DIRECTORY); } #endif + pFcb = DeviceExt->VolumeFcb; - pCcb = ExAllocateFromNPagedLookasideList(&VfatGlobalData->CcbLookasideList); - if (pCcb == NULL) - { - return (STATUS_INSUFFICIENT_RESOURCES); - } - RtlZeroMemory(pCcb, sizeof(VFATCCB)); - FileObject->SectionObjectPointer = &pFcb->SectionObjectPointers; - FileObject->FsContext = pFcb; - FileObject->FsContext2 = pCcb; + vfatAttachFCBToFileObject(DeviceExt, pFcb, FileObject); pFcb->RefCount++; Irp->IoStatus.Information = FILE_OPENED; From 7110c88cc07f915e7d9ae826319986d5cf3156ef Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 2 Mar 2011 22:33:14 +0000 Subject: [PATCH 203/287] [WIN32K] Revert part of r50941. First its architecturally unclean to lock a DC in a USER function, 2nd its a bug to keep the lock while sending a message. svn path=/trunk/; revision=50959 --- .../subsystems/win32/win32k/include/color.h | 2 +- .../subsystems/win32/win32k/ntuser/painting.c | 7 +------ .../subsystems/win32/win32k/objects/palette.c | 20 +++++++++++++++---- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/reactos/subsystems/win32/win32k/include/color.h b/reactos/subsystems/win32/win32k/include/color.h index faf88a77eee..233412e6ccd 100644 --- a/reactos/subsystems/win32/win32k/include/color.h +++ b/reactos/subsystems/win32/win32k/include/color.h @@ -36,6 +36,6 @@ const PALETTEENTRY* FASTCALL COLOR_GetSystemPaletteTemplate (VOID); COLORREF APIENTRY COLOR_LookupNearestColor (PALETTEENTRY* palPalEntry, INT size, COLORREF color); INT APIENTRY COLOR_PaletteLookupExactIndex (PALETTEENTRY* palPalEntry, INT size, COLORREF col); INT APIENTRY COLOR_PaletteLookupPixel(PALETTEENTRY *palPalEntry, INT size, XLATEOBJ *XlateObj, COLORREF col, BOOL skipReserved); -UINT FASTCALL IntGdiRealizePalette (PDC); +UINT FASTCALL IntGdiRealizePalette (HDC); HCOLORSPACE FASTCALL IntGdiCreateColorSpace(PLOGCOLORSPACEEXW); BOOL FASTCALL IntGdiDeleteColorSpace(HCOLORSPACE); diff --git a/reactos/subsystems/win32/win32k/ntuser/painting.c b/reactos/subsystems/win32/win32k/ntuser/painting.c index 8692a036a4b..f2e3850437f 100644 --- a/reactos/subsystems/win32/win32k/ntuser/painting.c +++ b/reactos/subsystems/win32/win32k/ntuser/painting.c @@ -1951,11 +1951,7 @@ UserRealizePalette(HDC hdc) HWND hWnd; DWORD Ret; - PDC pdc = DC_LockDc(hdc); - if(!pdc) - return 0; - - Ret = IntGdiRealizePalette(pdc); + Ret = IntGdiRealizePalette(hdc); if (Ret) // There was a change. { hWnd = IntWindowFromDC(hdc); @@ -1964,7 +1960,6 @@ UserRealizePalette(HDC hdc) UserSendNotifyMessage((HWND)HWND_BROADCAST, WM_PALETTECHANGED, (WPARAM)hWnd, 0); } } - DC_UnlockDc(pdc); return Ret; } diff --git a/reactos/subsystems/win32/win32k/objects/palette.c b/reactos/subsystems/win32/win32k/objects/palette.c index 59b16430303..c7656e03d1c 100644 --- a/reactos/subsystems/win32/win32k/objects/palette.c +++ b/reactos/subsystems/win32/win32k/objects/palette.c @@ -723,18 +723,26 @@ NtGdiGetNearestPaletteIndex( UINT FASTCALL -IntGdiRealizePalette(PDC pdc) +IntGdiRealizePalette(HDC hDC) { UINT i, realize = 0; + PDC pdc; PALETTE *ppalSurf, *ppalDC; + pdc = DC_LockDc(hDC); + if(!pdc) + { + EngSetLastError(ERROR_INVALID_HANDLE); + return 0; + } + ppalSurf = pdc->dclevel.pSurface->ppal; ppalDC = pdc->dclevel.ppal; if(!(ppalSurf->flFlags & PAL_INDEXED)) { // FIXME : set error? - return 0; + goto cleanup; } ASSERT(ppalDC->flFlags & PAL_INDEXED); @@ -747,6 +755,8 @@ IntGdiRealizePalette(PDC pdc) InterlockedExchange((LONG*)&ppalSurf->IndexedColors[i], *(LONG*)&ppalDC->IndexedColors[i]); } +cleanup: + DC_UnlockDc(pdc); return realize; } @@ -800,9 +810,11 @@ IntAnimatePalette(HPALETTE hPal, { if (dc->dclevel.hpal == hPal) { - IntGdiRealizePalette(dc); + DC_UnlockDc(dc); + IntGdiRealizePalette(hDC); } - DC_UnlockDc(dc); + else + DC_UnlockDc(dc); } UserReleaseDC(Wnd,hDC, FALSE); } From dba4ecb162fb9d2b8217f1a2c3f1287c58584143 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 2 Mar 2011 23:02:12 +0000 Subject: [PATCH 204/287] [WIN32K] Acquire ownership of monitor region before deleting it. svn path=/trunk/; revision=50960 --- reactos/subsystems/win32/win32k/ntuser/monitor.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/reactos/subsystems/win32/win32k/ntuser/monitor.c b/reactos/subsystems/win32/win32k/ntuser/monitor.c index d744d6ee563..935be89cf12 100644 --- a/reactos/subsystems/win32/win32k/ntuser/monitor.c +++ b/reactos/subsystems/win32/win32k/ntuser/monitor.c @@ -282,7 +282,10 @@ IntResetMonitorSize(IN PDEVOBJ *pGdiDevice) Monitor->rcWork = Monitor->rcMonitor; if (Monitor->hrgnMonitor) + { + GDIOBJ_SetOwnership(Monitor->hrgnMonitor, PsGetCurrentProcess()); REGION_FreeRgnByHandle(Monitor->hrgnMonitor); + } Monitor->hrgnMonitor = IntSysCreateRectRgnIndirect( &Monitor->rcMonitor ); From 1fd7d93b5d4c1af9518ac06a6ca03b57a695285f Mon Sep 17 00:00:00 2001 From: James Tabor Date: Thu, 3 Mar 2011 13:59:17 +0000 Subject: [PATCH 205/287] [Win32k] - Fix the select of the clip region for a window. Apologies to Rafal Harabien select works like select, also don't assume the original author is always right. svn path=/trunk/; revision=50961 --- reactos/subsystems/win32/win32k/ntuser/window.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/reactos/subsystems/win32/win32k/ntuser/window.c b/reactos/subsystems/win32/win32k/ntuser/window.c index 981d446786d..00d454b05bd 100644 --- a/reactos/subsystems/win32/win32k/ntuser/window.c +++ b/reactos/subsystems/win32/win32k/ntuser/window.c @@ -4052,7 +4052,7 @@ NtUserSetWindowRgn( } else { - hrgnCopy = IntSysCreateRectRgnIndirect(&Window->rcWindow); //HRGN_WINDOW; + hrgnCopy = NULL; } if (Window->hrgnClip) @@ -4061,12 +4061,14 @@ NtUserSetWindowRgn( GreDeleteObject(Window->hrgnClip); } - if (Window->fnid != FNID_DESKTOP) - NtGdiOffsetRgn(hrgnCopy, Window->rcWindow.left, Window->rcWindow.top); - - /* Set public ownership */ - IntGdiSetRegionOwner(hrgnCopy, GDI_OBJ_HMGR_PUBLIC); + if (hrgnCopy) + { + if (Window->fnid != FNID_DESKTOP) + NtGdiOffsetRgn(hrgnCopy, Window->rcWindow.left, Window->rcWindow.top); + /* Set public ownership */ + IntGdiSetRegionOwner(hrgnCopy, GDI_OBJ_HMGR_PUBLIC); + } Window->hrgnClip = hrgnCopy; Ret = co_WinPosSetWindowPos(Window, HWND_TOP, 0, 0, 0, 0, bRedraw ? flags : (flags|SWP_NOREDRAW) ); From 3bec896bc64fb63f41988cfbc9e3200c1fd41f47 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Thu, 3 Mar 2011 17:32:20 +0000 Subject: [PATCH 206/287] [Win32k] - Missed the clearing of the clip region for the window at the end of of its life. The mouse is looking for the window, doing so, scanning through all of them, even the ones that are at deaths door. svn path=/trunk/; revision=50962 --- reactos/subsystems/win32/win32k/ntuser/window.c | 1 + 1 file changed, 1 insertion(+) diff --git a/reactos/subsystems/win32/win32k/ntuser/window.c b/reactos/subsystems/win32/win32k/ntuser/window.c index 00d454b05bd..7be4ef57280 100644 --- a/reactos/subsystems/win32/win32k/ntuser/window.c +++ b/reactos/subsystems/win32/win32k/ntuser/window.c @@ -472,6 +472,7 @@ static LRESULT co_UserFreeWindow(PWND Window, if(Window->hrgnClip) { GreDeleteObject(Window->hrgnClip); + Window->hrgnClip = NULL; } // ASSERT(Window != NULL); From 303a449b3541feb90d709ef2172281dda2ecda3a Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Thu, 3 Mar 2011 19:53:26 +0000 Subject: [PATCH 207/287] [SETUPAPI] Implement CM_Register_Device_Interface[_Ex]A/W and CM_Unregister_Device_Interface[_Ex]A/W. svn path=/trunk/; revision=50963 --- reactos/dll/win32/setupapi/cfgmgr.c | 266 +++++++++++++++++++++++ reactos/dll/win32/setupapi/setupapi.spec | 16 +- 2 files changed, 274 insertions(+), 8 deletions(-) diff --git a/reactos/dll/win32/setupapi/cfgmgr.c b/reactos/dll/win32/setupapi/cfgmgr.c index a324ce5a5e5..d54b96f7e02 100644 --- a/reactos/dll/win32/setupapi/cfgmgr.c +++ b/reactos/dll/win32/setupapi/cfgmgr.c @@ -3974,6 +3974,174 @@ CM_Reenumerate_DevNode_Ex( } +/*********************************************************************** + * CM_Register_Device_InterfaceA [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Register_Device_InterfaceA( + DEVINST dnDevInst, LPGUID InterfaceClassGuid, LPCSTR pszReference, + LPSTR pszDeviceInterface, PULONG pulLength, ULONG ulFlags) +{ + TRACE("%lx %s %s %p %p %lx\n", dnDevInst, debugstr_guid(InterfaceClassGuid), + pszReference, pszDeviceInterface, pulLength, ulFlags); + + return CM_Register_Device_Interface_ExA(dnDevInst, InterfaceClassGuid, + pszReference, pszDeviceInterface, + pulLength, ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Register_Device_InterfaceW [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Register_Device_InterfaceW( + DEVINST dnDevInst, LPGUID InterfaceClassGuid, LPCWSTR pszReference, + LPWSTR pszDeviceInterface, PULONG pulLength, ULONG ulFlags) +{ + TRACE("%lx %s %s %p %p %lx\n", dnDevInst, debugstr_guid(InterfaceClassGuid), + debugstr_w(pszReference), pszDeviceInterface, pulLength, ulFlags); + + return CM_Register_Device_Interface_ExW(dnDevInst, InterfaceClassGuid, + pszReference, pszDeviceInterface, + pulLength, ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Register_Device_Interface_ExA [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Register_Device_Interface_ExA( + DEVINST dnDevInst, LPGUID InterfaceClassGuid, LPCSTR pszReference, + LPSTR pszDeviceInterface, PULONG pulLength, ULONG ulFlags, HMACHINE hMachine) +{ + LPWSTR pszReferenceW = NULL; + LPWSTR pszDeviceInterfaceW = NULL; + ULONG ulLength; + CONFIGRET ret; + + TRACE("%lx %s %s %p %p %lx %lx\n", dnDevInst, debugstr_guid(InterfaceClassGuid), + pszReference, pszDeviceInterface, pulLength, ulFlags, hMachine); + + if (pulLength == NULL || pszDeviceInterface == NULL) + return CR_INVALID_POINTER; + + if (pszReference != NULL) + { + if (pSetupCaptureAndConvertAnsiArg(pszReference, &pszReferenceW)) + return CR_INVALID_DATA; + } + + ulLength = *pulLength; + + pszDeviceInterfaceW = HeapAlloc(GetProcessHeap(), 0, ulLength * sizeof(WCHAR)); + if (pszDeviceInterfaceW == NULL) + { + ret = CR_OUT_OF_MEMORY; + goto Done; + } + + ret = CM_Register_Device_Interface_ExW(dnDevInst, + InterfaceClassGuid, + pszReferenceW, + pszDeviceInterfaceW, + &ulLength, + ulFlags, + hMachine); + if (ret == CR_SUCCESS) + { + if (WideCharToMultiByte(CP_ACP, + 0, + pszDeviceInterfaceW, + ulLength, + pszDeviceInterface, + *pulLength, + NULL, + NULL) == 0) + ret = CR_FAILURE; + } + + *pulLength = ulLength; + +Done: + if (pszDeviceInterfaceW != NULL) + HeapFree(GetProcessHeap(), 0, pszDeviceInterfaceW); + + if (pszReferenceW != NULL) + MyFree(pszReferenceW); + + return ret; +} + + +/*********************************************************************** + * CM_Register_Device_Interface_ExW [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Register_Device_Interface_ExW( + DEVINST dnDevInst, LPGUID InterfaceClassGuid, LPCWSTR pszReference, + LPWSTR pszDeviceInterface, PULONG pulLength, ULONG ulFlags, HMACHINE hMachine) +{ + RPC_BINDING_HANDLE BindingHandle = NULL; + HSTRING_TABLE StringTable = NULL; + LPWSTR lpDevInst; + ULONG ulTransferLength; + CONFIGRET ret; + + TRACE("%lx %s %s %p %p %lx %lx\n", dnDevInst, debugstr_guid(InterfaceClassGuid), + debugstr_w(pszReference), pszDeviceInterface, pulLength, ulFlags, hMachine); + + if (dnDevInst == 0) + return CR_INVALID_DEVNODE; + + if (InterfaceClassGuid == NULL || + pszDeviceInterface == NULL || + pulLength == NULL) + return CR_INVALID_POINTER; + + if (ulFlags != 0) + return CR_INVALID_FLAG; + + if (hMachine != NULL) + { + BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle; + if (BindingHandle == NULL) + return CR_FAILURE; + + StringTable = ((PMACHINE_INFO)hMachine)->StringTable; + if (StringTable == 0) + return CR_FAILURE; + } + else + { + if (!PnpGetLocalHandles(&BindingHandle, &StringTable)) + return CR_FAILURE; + } + + lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst); + if (lpDevInst == NULL) + return CR_INVALID_DEVNODE; + + ulTransferLength = *pulLength; + + RpcTryExcept + { + ret = PNP_RegisterDeviceClassAssociation(BindingHandle, + lpDevInst, + InterfaceClassGuid, + (LPWSTR)pszReference, + pszDeviceInterface, + pulLength, + &ulTransferLength, + 0); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + ret = RpcStatusToCmStatus(RpcExceptionCode()); + } + RpcEndExcept; + + return ret; +} + + /*********************************************************************** * CM_Remove_SubTree [SETUPAPI.@] * @@ -4884,3 +5052,101 @@ CONFIGRET WINAPI CM_Uninstall_DevNode_Ex( return ret; } + + +/*********************************************************************** + * CM_Unregister_Device_InterfaceA [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Unregister_Device_InterfaceA( + LPCSTR pszDeviceInterface, ULONG ulFlags) +{ + TRACE("%s %lx\n", pszDeviceInterface, ulFlags); + + return CM_Unregister_Device_Interface_ExA(pszDeviceInterface, + ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Unregister_Device_InterfaceW [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Unregister_Device_InterfaceW( + LPCWSTR pszDeviceInterface, ULONG ulFlags) +{ + TRACE("%s %lx\n", debugstr_w(pszDeviceInterface), ulFlags); + + return CM_Unregister_Device_Interface_ExW(pszDeviceInterface, + ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Unregister_Device_Interface_ExA [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Unregister_Device_Interface_ExA( + LPCSTR pszDeviceInterface, ULONG ulFlags, HMACHINE hMachine) +{ + LPWSTR pszDeviceInterfaceW = NULL; + CONFIGRET ret; + + TRACE("%s %lx %lx\n", pszDeviceInterface, ulFlags, hMachine); + + if (pszDeviceInterface == NULL) + return CR_INVALID_POINTER; + + if (pSetupCaptureAndConvertAnsiArg(pszDeviceInterface, &pszDeviceInterfaceW)) + return CR_INVALID_DATA; + + ret = CM_Unregister_Device_Interface_ExW(pszDeviceInterfaceW, + ulFlags, hMachine); + + if (pszDeviceInterfaceW != NULL) + MyFree(pszDeviceInterfaceW); + + return ret; +} + + +/*********************************************************************** + * CM_Unregister_Device_Interface_ExW [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Unregister_Device_Interface_ExW( + LPCWSTR pszDeviceInterface, ULONG ulFlags, HMACHINE hMachine) +{ + RPC_BINDING_HANDLE BindingHandle = NULL; + CONFIGRET ret; + + TRACE("%s %lx %lx\n", debugstr_w(pszDeviceInterface), ulFlags, hMachine); + + if (pszDeviceInterface == NULL) + return CR_INVALID_POINTER; + + if (ulFlags != 0) + return CR_INVALID_FLAG; + + if (hMachine != NULL) + { + BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle; + if (BindingHandle == NULL) + return CR_FAILURE; + } + else + { + if (!PnpGetLocalHandles(&BindingHandle, NULL)) + return CR_FAILURE; + } + + RpcTryExcept + { + ret = PNP_UnregisterDeviceClassAssociation(BindingHandle, + (LPWSTR)pszDeviceInterface, + ulFlags); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + ret = RpcStatusToCmStatus(RpcExceptionCode()); + } + RpcEndExcept; + + return ret; +} diff --git a/reactos/dll/win32/setupapi/setupapi.spec b/reactos/dll/win32/setupapi/setupapi.spec index 1bff6b03d49..671b96bfd6b 100644 --- a/reactos/dll/win32/setupapi/setupapi.spec +++ b/reactos/dll/win32/setupapi/setupapi.spec @@ -170,10 +170,10 @@ @ stdcall CM_Reenumerate_DevNode_Ex(long long long) @ stub CM_Register_Device_Driver @ stub CM_Register_Device_Driver_Ex -@ stub CM_Register_Device_InterfaceA -@ stub CM_Register_Device_InterfaceW -@ stub CM_Register_Device_Interface_ExA -@ stub CM_Register_Device_Interface_ExW +@ stdcall CM_Register_Device_InterfaceA(long ptr str str ptr long) +@ stdcall CM_Register_Device_InterfaceW(long ptr wstr wstr ptr long) +@ stdcall CM_Register_Device_Interface_ExA(long ptr str str ptr long long) +@ stdcall CM_Register_Device_Interface_ExW(long ptr wstr wstr ptr long long) @ stdcall CM_Remove_SubTree(long long) @ stdcall CM_Remove_SubTree_Ex(long long long) @ stdcall CM_Request_Device_EjectA(long ptr str long long) @@ -203,10 +203,10 @@ @ stub CM_Test_Range_Available @ stdcall CM_Uninstall_DevNode(long long) @ stdcall CM_Uninstall_DevNode_Ex(long long long) -@ stub CM_Unregister_Device_InterfaceA -@ stub CM_Unregister_Device_InterfaceW -@ stub CM_Unregister_Device_Interface_ExA -@ stub CM_Unregister_Device_Interface_ExW +@ stdcall CM_Unregister_Device_InterfaceA(str long) +@ stdcall CM_Unregister_Device_InterfaceW(wstr long) +@ stdcall CM_Unregister_Device_Interface_ExA(str long long) +@ stdcall CM_Unregister_Device_Interface_ExW(wstr long long) @ stdcall DoesUserHavePrivilege(wstr) @ stub ExtensionPropSheetPageProc @ stdcall InstallCatalog(str str ptr) From aa667282285d90a335a6d9b4775825f88ea1e555 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Thu, 3 Mar 2011 21:22:47 +0000 Subject: [PATCH 208/287] [SHELL32] - Return the icon index, not the icon id - Fixes bug 5742 svn path=/trunk/; revision=50964 --- reactos/dll/win32/shell32/dialogs.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/reactos/dll/win32/shell32/dialogs.c b/reactos/dll/win32/shell32/dialogs.c index fa09de07916..9955e83c7a7 100644 --- a/reactos/dll/win32/shell32/dialogs.c +++ b/reactos/dll/win32/shell32/dialogs.c @@ -63,7 +63,7 @@ BOOL CALLBACK EnumPickIconResourceProc(HMODULE hModule, PPICK_ICON_CONTEXT pIconContext = (PPICK_ICON_CONTEXT)lParam; if (IS_INTRESOURCE(lpszName)) - swprintf(szName, L"%u\n", lpszName); + swprintf(szName, L"%u", lpszName); else wcscpy(szName, (WCHAR*)lpszName); @@ -105,7 +105,7 @@ INT_PTR CALLBACK PickIconProc(HWND hwndDlg, LPMEASUREITEMSTRUCT lpmis; LPDRAWITEMSTRUCT lpdis; HICON hIcon; - INT index; + INT index, count; WCHAR szText[MAX_PATH], szTitle[100], szFilter[100]; OPENFILENAMEW ofn = {0}; @@ -123,18 +123,21 @@ INT_PTR CALLBACK PickIconProc(HWND hwndDlg, else SendDlgItemMessageW(hwndDlg, IDC_EDIT_PATH, WM_SETTEXT, 0, (LPARAM)pIconContext->szName); - swprintf(szText, L"%u", pIconContext->Index); - index = SendMessageW(pIconContext->hDlgCtrl, LB_FINDSTRING, -1, (LPARAM)szText); - if (index != LB_ERR) - SendMessageW(pIconContext->hDlgCtrl, LB_SETCURSEL, index, 0); + count = SendMessage(pIconContext->hDlgCtrl, LB_GETCOUNT, 0, 0); + if (count != LB_ERR) + { + if (count > pIconContext->Index) + SendMessageW(pIconContext->hDlgCtrl, LB_SETCURSEL, pIconContext->Index, 0); + else + SendMessageW(pIconContext->hDlgCtrl, LB_SETCURSEL, 0, 0); + } return TRUE; case WM_COMMAND: switch(LOWORD(wParam)) { case IDOK: index = SendMessageW(pIconContext->hDlgCtrl, LB_GETCURSEL, 0, 0); - SendMessageW(pIconContext->hDlgCtrl, LB_GETTEXT, index, (LPARAM)szText); - pIconContext->Index = _wtoi(szText); + pIconContext->Index = index; SendDlgItemMessageW(hwndDlg, IDC_EDIT_PATH, WM_GETTEXT, MAX_PATH, (LPARAM)pIconContext->szName); DestroyIconList(pIconContext->hDlgCtrl); EndDialog(hwndDlg, 1); From 54010b7e9ec30b6a8681fe9fbea00c24f6af4d9c Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 3 Mar 2011 21:49:44 +0000 Subject: [PATCH 209/287] [USER32_APITEST] Add a cursor and an icon and use those instead of system cursor. Fixes tests on Windows. svn path=/trunk/; revision=50965 --- rostests/apitests/user32/CMakeLists.txt | 3 ++- rostests/apitests/user32/GetIconInfo.c | 19 +++++++++++++----- rostests/apitests/user32/resource.h | 3 +++ rostests/apitests/user32/test.cur | Bin 0 -> 2238 bytes rostests/apitests/user32/test.ico | Bin 0 -> 40070 bytes .../apitests/user32/user32_apitest.rbuild | 1 + rostests/apitests/user32/user32_apitest.rc | 7 +++++++ 7 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 rostests/apitests/user32/resource.h create mode 100644 rostests/apitests/user32/test.cur create mode 100644 rostests/apitests/user32/test.ico create mode 100644 rostests/apitests/user32/user32_apitest.rc diff --git a/rostests/apitests/user32/CMakeLists.txt b/rostests/apitests/user32/CMakeLists.txt index 12fb0e40deb..e11fdf4558c 100644 --- a/rostests/apitests/user32/CMakeLists.txt +++ b/rostests/apitests/user32/CMakeLists.txt @@ -9,7 +9,8 @@ list(APPEND SOURCE GetSystemMetrics.c GetIconInfo.c GetPeekMessage.c - testlist.c) + testlist.c + user32_apitest.rc) add_executable(user32_apitest ${SOURCE}) target_link_libraries(user32_apitest wine) diff --git a/rostests/apitests/user32/GetIconInfo.c b/rostests/apitests/user32/GetIconInfo.c index deef6a3b6df..eb0568a21af 100644 --- a/rostests/apitests/user32/GetIconInfo.c +++ b/rostests/apitests/user32/GetIconInfo.c @@ -2,7 +2,7 @@ #include #include #include - +#include "resource.h" // FIXME user32 @@ -144,12 +144,21 @@ START_TEST(GetIconInfo) Test_GetIconInfo(0); Test_GetIconInfo(1); - hcursor = LoadCursor(NULL, IDC_APPSTARTING); - ok(hcursor != 0, "should not fail\n"); + hcursor = LoadCursor(GetModuleHandle(NULL), "TESTCURSOR"); + ok(hcursor != 0, "should not fail, error %ld\n", GetLastError()); ok(GetIconInfo(hcursor, &iconinfo2), "\n"); ok(iconinfo2.fIcon == 0, "\n"); - ok(iconinfo2.xHotspot == 0, "%ld\n", iconinfo2.xHotspot); - ok(iconinfo2.yHotspot == 8, "%ld\n", iconinfo2.yHotspot); + ok(iconinfo2.xHotspot == 8, "%ld\n", iconinfo2.xHotspot); + ok(iconinfo2.yHotspot == 29, "%ld\n", iconinfo2.yHotspot); + ok(iconinfo2.hbmMask != NULL, "\n"); + ok(iconinfo2.hbmColor != NULL, "\n"); + + hcursor = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_TEST)); + ok(hcursor != 0, "should not fail\n"); + ok(GetIconInfo(hcursor, &iconinfo2), "\n"); + ok(iconinfo2.fIcon == 1, "\n"); + ok(iconinfo2.xHotspot == 16, "%ld\n", iconinfo2.xHotspot); + ok(iconinfo2.yHotspot == 16, "%ld\n", iconinfo2.yHotspot); ok(iconinfo2.hbmMask != NULL, "\n"); ok(iconinfo2.hbmColor != NULL, "\n"); diff --git a/rostests/apitests/user32/resource.h b/rostests/apitests/user32/resource.h new file mode 100644 index 00000000000..1fbdfca579c --- /dev/null +++ b/rostests/apitests/user32/resource.h @@ -0,0 +1,3 @@ + + +#define IDI_TEST 1000 diff --git a/rostests/apitests/user32/test.cur b/rostests/apitests/user32/test.cur new file mode 100644 index 0000000000000000000000000000000000000000..1a70b67c9c13918ce51a33f086cebdffe842d0af GIT binary patch literal 2238 zcmcK5uaaC<5XbSJ?7~K-DpfeDS|V3t(vQ+lfX1aCrNvT(SoY4jvJKV8di? zzJ1Qj?Cb(5OwP<_`tJRmfA>!+BF|(esv^(jYx(iH$X6or4LBu+9Z9#ip56(|gjK%y|#Wz)&b;0PoNW8D&0 zs=*OR6vnz;p;Ut-kSL6GD^sZkM<7uc>o%8C4URyfFy^k=MBOOkxa0C*Cv0n31s=*ORdH44wKYaHs_b|A^ZGL6j`UrgbRR8?H zw%_kR)sgViIpa_5KUUpKci1+*vprpo{N{#~&+7Pio<7$(t%v_(mX)94&R3V?G9B~= zcJngkJ}&dMx&4kd`*FEzopl3=InybvXX<#~-X-7)%M{9KTo z?ao`hqn-2Fx7QYV-%aETW;o|7p81SB@7CkHb$)eq>~$PJ<6|zQ_xIe8xeja7j>8$#BZ+DKybhl7 ZFY;pho%#-cG0h&ETy0x0f3Vm^`v?RW6%zme literal 0 HcmV?d00001 diff --git a/rostests/apitests/user32/test.ico b/rostests/apitests/user32/test.ico new file mode 100644 index 0000000000000000000000000000000000000000..6630ca1b5cea7fcc6fa03c3fc7efcaac5f08cd71 GIT binary patch literal 40070 zcmeI5e`sCTmG94yRrzNu$&MY_lI7pOZP~JZ*ph5VR&2{rY$s8Ebv$j8j$fd`@q=Ij z4W0}kIN=dY2p$uLR!xg}D#bMk11851rO7C_!SD(AAxb8e<+Y)?)!Y# z-uv8h?k`>WM>?JH_TBf~d(YZ?f7jY;@4eRAXUkC(M+>5zJ0q@hq8}}cqU%un-}*!Ors&A* zD0=@`DBl!)YZm374&_%xKUz=uuZHq`r=5R$J(OP+{ja%{e>aq06@9BVidz36iZ+26 z7NQr(;zQ|;d3JGcasG2Imy52ye`Ft_D`p(Jd2G{YoPeix=-;HSMPq(65f4CXl_;@tB0nN={j7PaIrlRYY&PJ2J zy&jFcG!TuvNZnjVPb&{aqpu7_H>h*uMZUi}6pdLPrp)>1<}a^C*FQKHjlDJ;-T23` zXzcaj=&JC&ej*wN(>T|gzZ|E%vFQ4D&Vu7)H2LeR(YSD38HujGdy4XBxt@$}{p&QM z@|R=W8;NdG{^rLQqX~GJpsic~d_9^ZkG(R09L}l7>=nK7hCY$`$A@dzu5r~bIeSI) zAD_tl<3n9tU9@P?qG;vHmC?3s+oGPHp6Jk_L(%Z?aP<81&qpu6{Brc|Z+|;_>#et< z3l}a#-~ayiqaXkH$I(xJ`qSv=KmU33o8SBbtw3-wXX==%0c9H1uyl|2^o(q5oAS@j$;0`XkW44E=l1|D=+5 zqSMg71^xG+ABX-|&{q&obOrjKK|cZg@1Xx9^cBQIpZ%9e-yA^ME2lJ{e{(RNF6~>% z% zg!)&;OB{XoV~4H!ryzgc7odU1x_9>1w8cx(^mVG=;DAQt&p-ddvueNqRi^*zCyssX z>)-gs^Uv;oN`PPh`t{}N?>u3m-S^CMR(~0K<5&21#qrW-_I!1S%U^jsrSLoY?!%Bb z?H@!w&-KLzpBsGg$>*9DntTfQ_40o_j(eXJ$E0WCA>cQ~@lY@F%+l}fLO{sBFWzMx zK#vXXZ;YQF9%z7@UHvs%vh)v#zNWt?UOJ#2pas&d_~C(pzPR&|f&QAh4E=!)It+#A zjT`7;EAb?S8utwxUmEuy&6>I;X?Y&#a1HE=cRi*8kMDV+lb)ildg6o9hPq<&n*OP6Hs?9}n&9rUXnbwO(UfG+6b}AIR%ZZ+l0F zMAUx}wB6m^hvLq|gGZVk-6!D)O;-VZy=$Njk?cgQaXdh&?(UtBEN<&D@&~f@Z)^arfs1>_r7?4O=tYDqpcAZBQK!e9tw2rTvW5A zH}2bOY5f9GQ+r2yZ>IjOteb*_lwe!pbg7N+yC3LiZ?Er-Wnx)c8E@L`3v@iN8;V8o zo;IZ=OL|=8?e*KT^c$@}Jx!>M#<-hOO4Lo|?XH@I zu{A@#cr6922}&?z;&=(9Mhq0Fw{G4P@5tj{yqW?uAui@PPIuB2Z1Tgl?OQi*+_))T zoT6`Cy(W}sbM$nHOHf0;aYvf|!PeGRD*&n`Y5MIT5%tX}}V-rIY`4L7F^i=r8XBzK`4=?B>$f{}4+LN729Qir@FSzkYWAYVs(QgUJWo zFnJ-ja&is7YZ6^W?k6XHYAs(vD)3Xy@01US&v*5m6XvtYKa<}k-%ozi)SsrJo4>}7 zf@bX1Ve=!$UOQp_qxrP>nDV(sxhKC={%N6aD!(%LrIYxO@^R(w%Ab}0D4%rfP5evz z->dvCpI1JjeADrFPI+H+)ck7s%j5W@@<-)=ns169DL+;Isr*v;+wx)MSIXC&{AYg0 z50!r^-%-A#`K0)aIk3ogl@BYQRDP=bO!>I-b>&0KpOt?Zd{g=3@>S)#$~T?-1wQB} zqxh!y>-eJbUF8SM-q}E&hJ*(c^>9Jo)T%$DaD?;NwRR=sq#UC`#@Rb<0HC z{Ir!XzJK)K6T`=zdV2GmXQ;nssJCriw)~nW4jmsHJap*b+Cz^YisPRA{l4}+ooyXY z^c)4j;NaZ&$)k_PLmjF6J78c4_vz@-W5OFAqvHfj(lKY*tRL~LEv~1ySHuAJ~?!4ZM}Vax_0!%8=ZW*W-E8MTGuU|K7*6P}A z+vC}7QlZ+~+F7$2cP95+A)ty)>K^Vjg5A*e&LGRc(voN5eu<-MeD-amGP>@^-2pDu4ryv6zUJ=4DhEpAQyvQZQxmp!31-)s-slC6=$E}E2Ggx#We zzib-W8nQ>GCMTW!guNmA#_Snv4A~R1F=TUCJRG~>>bqymPLYiv`$BezY!ul{vT-cd zjxA*IaBL36#ucxZU8MN8>==uEV`nJNFPrTuwuNk-`}PGf?E5kAdm8gDWnWa-5{PnF zut$D|Ju-nk@;mI2KN3?fvn3FwgS&C9$ui4qvw|C!Tk3F)tuj}E5-Fm?98-`S8I3k?mfG< ztmz5u&Rw-)L)(s>?YlbKsGAZoY2p2S-pDhnzifJtynR4_4=md_r{0j&s)(NuUtjYW#0V!?+uO1<}Z)q=6Um4 z=FeZ2|9xS@;>HJ;EM4%>Lk~UJxH$ED{lW&fAT~BMEL`O3ubEA3WWEoB=(51cIjSw} zmpb2J1^t*_HHy@P^#*&_<{63l;U5jSjQC1zQOZ93UYap*8hjpw!wRZ7il0+|m zTYJJXUm0OpzCTaZ%>(c!-=>8gXulHT=7cbd)>In)McI*7sPm##ys|#hS&) zma9td7VO$XzYh8%(DQ6S?!EV-!Z~Y}Uvm~OUQA?t$E;cL-gW!hw|8{x@7UhHPv7UQ z+p=f<`na!SSNj(Cy{miE_T5|e^sMaF_omjB>?!Q(*w)e6uJ6rF>sN1Cymj05whgWN z{!lYB`T7ln?>9AV=6l0Ktt(e8BWS*=sd=%!FJ08!9JefMS+RVPzSk~YDt~ABqD2oa zwePhJi`W!cvUKUvhFJF()IP8`kqO%3i(YY!Q1?xc~-u{ z3*^{52WFKPzT8juC2+4Lz=Ks^&Z`(}A+ z+pDLarF9#*TwwH{mA>}^PZSemsEpZ)MnMP&EVQ9Cn4d<@ zWWWdsdkXI5Q8`H9xg79QHj9VH{Hno2B%%Z!FPyW5!ZFEsFdvVUhUDalh&&!IB9s9< z3Vf7FPCgzFops?+Zh>6}PlxqJ>Vt`t8~Fqwa5g6E{458V(8 z^PyuO5f#pdZYVMK`S8(2;+g>9NnAJixT)AdqO8LMr!&CwP8N?%(L_d7=ND6c3QDHv zWR`ZQK0NRGlpR|~>F41qBRp@+FCNc@Q`O@6WSoF+G9@NmhNyu9vuII%)kvc;w`@#Smj6V!IwNdFcU_G47?B zORrp78E+4d)9MQv5l+0!ei~>Aq)T~qwcgCpJHUf$6bWpA~X^r+H0q zliLSpiLB5*azL*bUpx@c0B2;QKM5`kE3+|NPdVlE`coC26An^FL>Epa1IKHo8AYy9 z4V-|`fA|i@z~EiNc=UiwnUwSwn{p)~QJZOan7!XUg`mKo3CEm~ z{QED)QCHO1<8eq*VBmKKcwPff0i?V-c~mAVr{3sxN)F}=AV9r>O!7!hCXz=o@G`x8 zJ{}{Ote1mS+;^trpmNGgozfF0y41V6#=U$8(NlRfK>k(Z86|+7f|M0h&?q+-B??3D zl)&R*m`qYgB>Y#0V7yv9rw1e=_Y$N+RP1sWfZ;2Pf^~=Mlz<@(19pUD7~xa7 z$HM`;GRgNB@&S)t0aCjAf~q_3J3)nTY&_biq}}3I3W?*iN<5qz9DQj(FNZ1-Q~|12 zhuKd86@7=eN&pDbaJ}PXk{A2wA&wrZzowH9CmDI*lUE*6T2P@AgTh-^8t<+zQtuiR zg)k^iZN{m?qeGKrlIt(wd9jCckVUAnJ(!i7Z@MIagfbv;@&^g>(Lv5K$>Cv%6cRz| zagegIDpIYaxso4*!3#uUF|oU9-5}LNrezX%5_1b>1G#@)8HE>KNcc`(t`fa}G$Jq| z7FPz2eg;zBK2HYEJ^Mg&6~MS#(6|@Jbn_xgWaT~tiRD?Y@Jm5i_w_?u{^`L?i}pUj zeF>x`;D%25a{`(37o01&fBpjLaSnxN6H8w2?EHnEa3m!sjojD&g73~dl|OueXpX%U zBQPf?@hj|uIc(vUQJNQh)*a9<77cM&Y$>;H-O;-6r&~IEQIx2hYVrL5;A3hE*%SJ- zn5?#8lAQ(@+#kV@B03;~4@If4~XepWd1CdvXDP zb@l)79N}XO6vCHo!-krvUpoPx_?-YT$Q}TKx^zw|>g7{a{R)eG!S3lr-v!pid{v{` zRi)Z7tY|Q=UFgH`cBwBIO}Ed>#GvJCDm+urR?+|841>+ zY}_o3-|80&feQvZ`)w8zJWC~jry+4fNcZCr^}cPHFf&-MOEy3>3mH>eDww4}3C)$Q|Lv3BJ$`-Ihg67s86(c;qzUOsdLeTdc()LYuvM;~5QYl@ z5RV9q$VUo^$tN3Z3c;NaU_uDx@N@n^etSAfVyzT-R-UyGGXjQ>P#7>;FI)fXCz9Al zIu;{6Ptw$sRp^2**{FvFTwMJ+PLWDZKPi}rWrT0L1?t1nlmAZY#74)Z9uAij)J5Tr(XGybFYbSUnvMu?9V5j{7VBIP%-@3 z_4m>_4&QQKg`>AZsGdr~Tj9f-C*VEv%7@{Mh9a*i7{oMHFu%bH^ME#=?mT^=J*|{% z@*kOsrF&tp6zE}9Up2jFB%iPSFY{B7H~z(cg7a6-Pq`Kzu>Z>x>20ItY#EQ_SNq~{ zS*gSf%yaUgTc^K5tn>2O1QHIl;gW>qj7`~dT8;}|{HWJip0dYCP*qt}@B#vs4Aw!` zaf}DqTFzDs&z9+-H|GU}MUx^rnvhEQdgQ-o|5Xn|$T0Q~%*iseN3UckV(M#u)TYEr z^>{p(soH9_ZEv2SQayP*mFv;E@A$%El-uQ=5&7smc9*Q*%S@ZM*hG=tTM3W1=pch$ z_K%snvURc5Z{6Y@Gmjsqt%u1?_RNJ-utUEfZ6;g5s1o-0e=){dFB3x6n(Um?a+XnX z!kNmPA7na3o>V9c&>RN}!YP%w=E~K>Qsw8{cTPIiWE_4WU}6Lq!ES`i*+nJs*n(~r z5x{~)N28p3q&D6;{OFA$EkLp#%GSfml{c=`chn&JEwQQG>cGln>v*|(7-fDPgvWPI zO30W8pJF=&dkG{|LUWbtA$0DxyIvc1mZ$2ub<0?$hOl9SDN?Z>*%jKHFr(ttAy#U3 zptbiC%n84raeDfC+>S-Y5K0>iwgp0S&Q2(hkDE8J$7IYn_6ux)qOX7~o;Mi!OiDAJ z$2f~yD$QtKg}785clsOM`X!$K^6|b|#i+4?=(8$cj##Q)oX~iC@o=Y0>P4#=TGoSU z=jaT*o6|oyTVXCPrmsBbX6f}vZ{@i)Ltn)lnx=R2VCA_IDJAk@Y*3`~oQQZc^jNMH z=e`X6Yl#C{c8)8c*Hl$;E~8uXcpx@UlBL}}>OyR>V9qL_Pv$007~%sk*%i!9X?i|a zlfW}meJ&mmGy5fb{%4gHeq;U2>iBO+JqMnZbwqW#9BBVsVhZgCoSICPSEur3J{RWn z{ZJ;%Fq7`Zytqa!kZmaNF;_-jMg zg$Ew1O3xwNjWPY>I_%f3o$`$c8tE%Bh#T`KS*a}>?=uUk;bto>7jnW&;6eB)m*>IBq!532RE$TzwX{!F(jm!QNwMOx z_!HUFUMbmoxd+@h?Ui{5b*K*{dy{{@55m)l!UX=@jPOf$$Qk)3`17*M>P=qehF$nA zyWg!J(tVJ|A9P4MDqW?|zf}C_i;QbF8gm3W_&mm8Bk(KxesFr^$4FX-(qkZl-yN{J zr}AefvBZ%w(?yHga7;-%U(%@}`G+xZFYuQdzlr`h{nuQYB<3z1snT9D8;m-6lHAg~ z##yvt{AvBU+xlMyzs8v6yEJyq;fZYhylG`4V<;Eopq+EJhwS$RKkeQYeh%j-V3%IQ(l&(pSV^+eI7rsvFc#B% zh?kJz!TJE3%}ogB zpPAw(ly7}dMvv6rVLn%M&G7M?Fk3>#jxX7gAtPhyc*sHKWw5L7-N8V&MpmmodQ6es z8kdE?91rM<+ftLicG3Dj8I#s8DXhZm@ush#KZCxT-hf-!?+8DSP)y4M`YG9({3Szj zSQ|9oBtCQSo&8ll6%Sv!IVPp+h1eyxP@k?dkw1afJpNL;gnYsnv#VbtissHR7z(b^ z`%L+FsV~Sq^!eK-68zGMnc*MKRpPhl@1Zu}T}8!kNj;{~D7TvkCryTh|nJ z^?#86jPbuF{H1uvj_ZUEqD^ulZ^=HZv+Dob!#|p1x7hydR_K>6}3C^;Z zOXC)H^?!mNnO3d;tSjurW_d{IQ{lKMc_P#^q4_DV)502ZR@SC7hS}i`{h!AVrYhqn zS{K=|_B>3_hsI~Qr1sPLT=H`oxAZmWE?0N36#W;bYVmVe&hU!|GTT_ieUbFXaI(gi z;-M`51hbcS0dCV@+7)i48RI`akm14UQ)xa*o>2A7XiamvESw>0Ecu+0waH!Mj;!`1 zy9B>vIurQ|zhzfX(jV3ro{!WR4{=Hl+b)uQg0oP*)8G#6-41>Z+7Yh?zjENi>r$vU z(;r@DdhAhrXx>qur1iMyvo90$B*;6dU+tYn{&w&a{h5LMIZ2q~=?%*n9;h!X^~dnP*puTal`?#&U&`=Oz>~?<^H+p3(1vRY zcj$lNRuZP^^q)1~;{US2O#a3LeE7c5HQOISzoy|O;48cu-n^_$=Dv;4X7FFMo`b() z{D17Fp7CJ6$PUxk5#LEh7Ltdu`t@$-P`6!a*RXs4nRR2@{TKM_5naarw%+^mzIol5 zcK=Iz8}M+JtcSy=brgL!@14> zP;&oTP7a?-KAe*d^2^IvpCoU0-2~Yxaz8n?PyC%`J&p61o5J%w>1TWNd`@^)M^}AU z7LB-_@$)*&heKrkl+)1l@z;kZcpbT% zLKeP~iFVIni%ei=(IONPQAoguF_7CCWvpft%ejA((^&dzKQlo$UJN4_Cf90 zi?H{fx@tc~nRuts5*t@J+qw<@@%4m7iT=1**uMH(_e5K%ecSI!w;i5=NbkRg z_JvpN8wT1(21>FU3fl+MH0@It^@a919_^lI;F^7g!O0+b{v~Ql~b`+iT!U;N*#_Nhzz8TPCIdt>354YjNGZT}rvr2AhwX!?iTO_vh+&zygY z9b<2so*{?Ay>!FIzJ%_Zj&cnt*#oMgecPW?yxC&beqR9nF}}locuEfv9Dct~`Z?uz#bnN)_er+cz1cc*NqQ_@ zQeDWx_M&E*%ayG1r%!e|5av;$g%iGjhn_IBC3V4=(h-UE$mDjt(O; z%N7%NbqUjS@)uTX-^YOS81gz1;#QKs>33)=T&+zXi&sCAO{UehuXtOCVOlIUFAIx% zq-3qRKgc(K&C~O@Azhr5`rOfdTmQ?-U&rSx7G^O&;(7%*O2tnS8F^jieeb$&N zl{32F>G_iel9l>OYsT2=9{q=unIyl2zSW-~No&{L{Y=~V7?bc?@^1)?e6ziQd*{Yp z8Mq1FN%hlR%#-4~T-zC8{5Sey9emBgGP8ew5C7lUYpJ?vXLe95#VO>h?<9vf#S3%! z@}Dy)o)F>?@}WbFVa9QW0`^os#5D@fDCv8MX;jtD$SXrrpJ%tR zQPqa{D6C&HQIahndrWqsY*>3fG5A%PxI)UG#m<&}73^r$Rk42AinL+%G?qdh? zY2?G2Kgn7+*g$TEnQQQOR3_N@)73BgG~I^D%G>Dr+YGv3t~;1ADEW&9M;$bR8kjeIl@nVo6vP!>5^-%?n< zS*d5PWCvAUzxL^^4d;&p|4rDWI~ki>^(xC&t`fi5x#{OXC@cHV_Lud1N6NNM>}YJt znbaSi69~^7WbER!-Rhr75T;PjJe3=Hb@*)I{H*VHx;{ztzD(sx?8`Ya#8M$T=XB&!*}KXP7eR~vi=Wc z)x8OzGGtbr=*Y>VpGwZigY9jbQSQa^+~m;7ygV*FRTE~!t8 z%4@#&>t|TA%B?#^<(YGA?NS}!(E3+tT`5)G=4-99RjeE0IfFmU^}>NI8J^A7{#AY+ q^lJh%rOGF99_D@iDv0^#T4PGh`-SDL!Wq7K{C6~d^E1Kiefs}Px$5Wu literal 0 HcmV?d00001 diff --git a/rostests/apitests/user32/user32_apitest.rbuild b/rostests/apitests/user32/user32_apitest.rbuild index 251ad031870..8aaa1dfb4ee 100644 --- a/rostests/apitests/user32/user32_apitest.rbuild +++ b/rostests/apitests/user32/user32_apitest.rbuild @@ -8,6 +8,7 @@ user32 pseh testlist.c + user32_apitest.rc InitializeLpkHooks.c RealGetWindowClass.c diff --git a/rostests/apitests/user32/user32_apitest.rc b/rostests/apitests/user32/user32_apitest.rc new file mode 100644 index 00000000000..8c40b58552d --- /dev/null +++ b/rostests/apitests/user32/user32_apitest.rc @@ -0,0 +1,7 @@ +#include +#include "resource.h" + +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL + +IDI_TEST ICON "test.ico" +TESTCURSOR CURSOR "test.cur" From ab803f82ce8323fe5a1b07156e20452e3f4ec3bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Fri, 4 Mar 2011 03:42:38 +0000 Subject: [PATCH 210/287] [RTL] - Fix compilation when NDEBUG is not defined svn path=/trunk/; revision=50966 --- reactos/lib/rtl/critical.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/lib/rtl/critical.c b/reactos/lib/rtl/critical.c index 03bffca4289..8270b469fdf 100644 --- a/reactos/lib/rtl/critical.c +++ b/reactos/lib/rtl/critical.c @@ -604,7 +604,7 @@ NTAPI RtlLeaveCriticalSection(PRTL_CRITICAL_SECTION CriticalSection) { #ifndef NDEBUG - HANDLE Thread = (HANDLE)NtCurrentTeb()->Cid.UniqueThread; + HANDLE Thread = (HANDLE)NtCurrentTeb()->ClientId.UniqueThread; /* In win this case isn't checked. However it's a valid check so it should only be performed in debug builds! */ From 2bf17fadd15f1c24495371df05061d5cbf94aa3d Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Fri, 4 Mar 2011 16:57:56 +0000 Subject: [PATCH 211/287] - Revert 47615. Please fix actual sysreg instead of adding inconsistency between 1st, 2nd and 3rd stages debugging connections. This should fix sysreg3's inability to do backtraces. See issue #5811 for more details. svn path=/trunk/; revision=50967 --- reactos/boot/bootdata/txtsetup.sif | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/boot/bootdata/txtsetup.sif b/reactos/boot/bootdata/txtsetup.sif index 57617385bbe..fb0937edbb2 100644 --- a/reactos/boot/bootdata/txtsetup.sif +++ b/reactos/boot/bootdata/txtsetup.sif @@ -59,7 +59,7 @@ Cabinet=reactos.cab [SetupData] DefaultPath = \ReactOS OsLoadOptions = "/NOGUIBOOT /NODEBUG" -DbgOsLoadOptions = "/NOGUIBOOT /DEBUGPORT=COM1 /FIRSTCHANCE /KDSERIAL" +DbgOsLoadOptions = "/NOGUIBOOT /DEBUGPORT=COM1 /FIRSTCHANCE" ;OsLoadOptions = "/NOGUIBOOT /DEBUGPORT=SCREEN" ;OsLoadOptions = "/NOGUIBOOT /DEBUGPORT=BOCHS" From 85f0fb63f37d72783c2c7372452682d371a3b63f Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Fri, 4 Mar 2011 18:18:05 +0000 Subject: [PATCH 212/287] [USETUP] - Fix a buffer overflow (overread) when adding a locale key to the registry. The history of this bug is funny: 1. Eric wrote the code, which sets a key of REG_SZ type, as 4 widechars plus terminating zero, but passes 8 as the bytesize of the buffer. It's not fully correct (a terminating zero is absent from the bytesize of the buffer, but MSDN doesn't specify if it should be added or not, and hardcoding "8" is not the best idea too) but not dramatic. That was revision 9596, 7 years ago. 2. Lentin notices something is not right in this code, and decides to "fix" it by multiplying that same hardcoded value by.... guess what? sizeof(PWCHAR)! That is, size of a pointer, which on an x86 would be 4 bytes. Massive out of bounds access obviously happens. That was revision 31642, 3 years ago. 3. Very soon Colin reshuffles and improves the code based on patch #2635, however the problem still goes unnoticed (r31655+). See issue #5810 for more details. svn path=/trunk/; revision=50968 --- reactos/base/setup/usetup/settings.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/reactos/base/setup/usetup/settings.c b/reactos/base/setup/usetup/settings.c index ffc20ac286a..90fd2634585 100644 --- a/reactos/base/setup/usetup/settings.c +++ b/reactos/base/setup/usetup/settings.c @@ -637,6 +637,10 @@ ProcessLocaleRegistry(PGENERIC_LIST List) if (LanguageId == NULL) return FALSE; + /* Skip first 4 zeroes */ + if (wcslen(LanguageId) >= 4) + LanguageId += 4; + /* Open the NLS language key */ RtlInitUnicodeString(&KeyName, L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Control\\NLS\\Language"); @@ -660,13 +664,12 @@ ProcessLocaleRegistry(PGENERIC_LIST List) /* Set default language */ RtlInitUnicodeString(&ValueName, L"Default"); - Status = NtSetValueKey(KeyHandle, &ValueName, 0, REG_SZ, - (PVOID)(LanguageId + 4), - 8 * sizeof(PWCHAR)); + (PVOID)LanguageId, + (wcslen(LanguageId) + 1) * sizeof(WCHAR)); if (!NT_SUCCESS(Status)) { DPRINT1("NtSetValueKey() failed (Status %lx)\n", Status); @@ -681,8 +684,8 @@ ProcessLocaleRegistry(PGENERIC_LIST List) &ValueName, 0, REG_SZ, - (PVOID)(LanguageId + 4), - 8 * sizeof(PWCHAR)); + (PVOID)LanguageId, + (wcslen(LanguageId) + 1) * sizeof(WCHAR)); NtClose(KeyHandle); if (!NT_SUCCESS(Status)) { From a528924f3be91889ff7b91c01cf7bf288a8dcca1 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 5 Mar 2011 10:21:07 +0000 Subject: [PATCH 213/287] [WIN32K] Add A function to dump all locked handles and call it when an assertion about 0 locks fails. svn path=/trunk/; revision=50969 --- .../win32/win32k/include/gdidebug.h | 7 ++++-- .../subsystems/win32/win32k/objects/gdidbg.c | 24 +++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/reactos/subsystems/win32/win32k/include/gdidebug.h b/reactos/subsystems/win32/win32k/include/gdidebug.h index dc7179ae24f..944e546c118 100644 --- a/reactos/subsystems/win32/win32k/include/gdidebug.h +++ b/reactos/subsystems/win32/win32k/include/gdidebug.h @@ -20,6 +20,7 @@ enum _DEBUGCHANNELS void IntDumpHandleTable(PGDI_HANDLE_TABLE HandleTable); ULONG CaptureStackBackTace(PVOID* pFrames, ULONG nFramesToCapture); BOOL GdiDbgHTIntegrityCheck(); +void GdiDbgDumpLockedHandles(); #define DBGENABLE(ch) gulDebugChannels |= (ch); #define DBGDISABLE(ch) gulDebugChannels &= ~(ch); @@ -96,17 +97,19 @@ DbgPostServiceHook(ULONG ulSyscallId, ULONG_PTR ulResult); #define ID_Win32PostServiceHook 'WSH1' FORCEINLINE void -DbgAssertNoGdiLocks(char * pszFile, ULONG nLine) +GdiDbgAssertNoLocks(char * pszFile, ULONG nLine) { PTHREADINFO pti = (PTHREADINFO)PsGetCurrentThreadWin32Thread(); if (pti && pti->cExclusiveLocks != 0) { DbgPrint("(%s:%ld) There are %ld exclusive locks!\n", pszFile, nLine, pti->cExclusiveLocks); + GdiDbgDumpLockedHandles(); ASSERT(FALSE); } } -#define ASSERT_NOGDILOCKS() DbgAssertNoGdiLocks(__FILE__,__LINE__) + +#define ASSERT_NOGDILOCKS() GdiDbgAssertNoLocks(__FILE__,__LINE__) #else #define ASSERT_NOGDILOCKS() #endif diff --git a/reactos/subsystems/win32/win32k/objects/gdidbg.c b/reactos/subsystems/win32/win32k/objects/gdidbg.c index ab1a8d97f29..4be2d4d30f9 100644 --- a/reactos/subsystems/win32/win32k/objects/gdidbg.c +++ b/reactos/subsystems/win32/win32k/objects/gdidbg.c @@ -292,6 +292,30 @@ GDIOBJ_IncrementShareCount(POBJ Object) #endif /* GDI_DEBUG */ +void +GdiDbgDumpLockedHandles() +{ + ULONG i; + + for (i = RESERVE_ENTRIES_COUNT; i < GDI_HANDLE_COUNT; i++) + { + PGDI_TABLE_ENTRY pEntry = &GdiHandleTable->Entries[i]; + + if (pEntry->Type & GDI_ENTRY_BASETYPE_MASK) + { + BASEOBJECT *pObject = pEntry->KernelData; + if (pObject->cExclusiveLock > 0) + { + DPRINT1("Locked object: %lx, type = %lx. allocated from:\n", + i, pEntry->Type); + GDIDBG_TRACEALLOCATOR(i); + DPRINT1("Locked from:\n"); + GDIDBG_TRACELOCKER(i); + } + } + } +} + void NTAPI DbgPreServiceHook(ULONG ulSyscallId, PULONG_PTR pulArguments) From 9aa651bf4e3a0d88cbce0d9d15c2c998055b0c88 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 5 Mar 2011 11:13:45 +0000 Subject: [PATCH 214/287] [WIN32K] add dumping of locked handles to missing places. svn path=/trunk/; revision=50970 --- reactos/subsystems/win32/win32k/objects/gdidbg.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/reactos/subsystems/win32/win32k/objects/gdidbg.c b/reactos/subsystems/win32/win32k/objects/gdidbg.c index 4be2d4d30f9..bf46e2b5111 100644 --- a/reactos/subsystems/win32/win32k/objects/gdidbg.c +++ b/reactos/subsystems/win32/win32k/objects/gdidbg.c @@ -325,6 +325,7 @@ DbgPreServiceHook(ULONG ulSyscallId, PULONG_PTR pulArguments) { DbgPrint("FATAL: Win32DbgPreServiceHook(%ld): There are %ld exclusive locks!\n", ulSyscallId, pti->cExclusiveLocks); + GdiDbgDumpLockedHandles(); ASSERT(FALSE); } @@ -339,6 +340,7 @@ DbgPostServiceHook(ULONG ulSyscallId, ULONG_PTR ulResult) { DbgPrint("FATAL: Win32DbgPostServiceHook(%ld): There are %ld exclusive locks!\n", ulSyscallId, pti->cExclusiveLocks); + GdiDbgDumpLockedHandles(); ASSERT(FALSE); } return ulResult; From a2d0ce8261189ed1e5d5c8233c97aeea3ef443d7 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 5 Mar 2011 12:17:23 +0000 Subject: [PATCH 215/287] [WIN32K] Silence a DPRINT svn path=/trunk/; revision=50971 --- reactos/subsystems/win32/win32k/ntuser/simplecall.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/subsystems/win32/win32k/ntuser/simplecall.c b/reactos/subsystems/win32/win32k/ntuser/simplecall.c index dd152672e01..2c4844f0e98 100644 --- a/reactos/subsystems/win32/win32k/ntuser/simplecall.c +++ b/reactos/subsystems/win32/win32k/ntuser/simplecall.c @@ -716,7 +716,7 @@ NtUserCallHwndParamLock( USER_REFERENCE_ENTRY Ref; DECLARE_RETURN(DWORD); - DPRINT1("Enter NtUserCallHwndParamLock\n"); + DPRINT("Enter NtUserCallHwndParamLock\n"); UserEnterExclusive(); if (!(Window = UserGetWindowObject(hWnd))) @@ -737,7 +737,7 @@ NtUserCallHwndParamLock( RETURN( Ret); CLEANUP: - DPRINT1("Leave NtUserCallHwndParamLock, ret=%i\n",_ret_); + DPRINT("Leave NtUserCallHwndParamLock, ret=%i\n",_ret_); UserLeave(); END_CLEANUP; From 31ebce8a901360c34ae7c8b0ce4b27b921f5dd7a Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 5 Mar 2011 12:18:28 +0000 Subject: [PATCH 216/287] [WIN32K] Unlock the font in PATH_ExtTextOut. Fixes a failed assertion, when running google earth. svn path=/trunk/; revision=50972 --- reactos/subsystems/win32/win32k/objects/path.c | 1 + 1 file changed, 1 insertion(+) diff --git a/reactos/subsystems/win32/win32k/objects/path.c b/reactos/subsystems/win32/win32k/objects/path.c index 99e18f80969..1ff5f429a52 100644 --- a/reactos/subsystems/win32/win32k/objects/path.c +++ b/reactos/subsystems/win32/win32k/objects/path.c @@ -2041,6 +2041,7 @@ PATH_ExtTextOut(PDC dc, INT x, INT y, UINT flags, const RECTL *lprc, if ( !TextObj ) return FALSE; FontGetObject( TextObj, sizeof(lf), &lf); + TEXTOBJ_UnlockText(TextObj); if (lf.lfEscapement != 0) { From 43f10841e0448ae0e42d382e891a5b1c159551cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Sat, 5 Mar 2011 16:23:30 +0000 Subject: [PATCH 217/287] [OPENGL32] - Naive try to fix bug 5057 svn path=/trunk/; revision=50973 --- reactos/dll/win32/opengl32/opengl32.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/reactos/dll/win32/opengl32/opengl32.c b/reactos/dll/win32/opengl32/opengl32.c index cf460079bee..1d5330a411b 100644 --- a/reactos/dll/win32/opengl32/opengl32.c +++ b/reactos/dll/win32/opengl32/opengl32.c @@ -72,7 +72,7 @@ static void OPENGL32_ThreadDetach( void ) { GLTHREADDATA* lpData = NULL; - PROC *dispatchTable = NULL; + TEB* teb = NtCurrentTeb(); rosglMakeCurrent( NULL, NULL ); @@ -85,12 +85,15 @@ OPENGL32_ThreadDetach( void ) lpData = NULL; } - dispatchTable = NtCurrentTeb()->glTable; - if (dispatchTable != NULL) + if (teb->glTable != NULL) { - if (!HeapFree( GetProcessHeap(), 0, dispatchTable )) + if (!HeapFree( GetProcessHeap(), 0, teb->glTable )) + { DBGPRINT( "Warning: HeapFree() on dispatch table failed (%d)", GetLastError() ); + } + /* NULL-ify it. Even if something went wrong, it's not a good idea to keep it non NULL */ + teb->glTable = NULL; } } From 545fca44dccef201d1e8f2dc82692764dae2fa49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Sat, 5 Mar 2011 16:45:09 +0000 Subject: [PATCH 218/287] [EXPLORER-NEW] - Allow displaying seconds in tray upon registry setting Patch by Edijs Kolesnikovics svn path=/trunk/; revision=50974 --- reactos/base/shell/explorer-new/trayntfy.c | 89 +++++++++++++++++++--- 1 file changed, 77 insertions(+), 12 deletions(-) diff --git a/reactos/base/shell/explorer-new/trayntfy.c b/reactos/base/shell/explorer-new/trayntfy.c index ef2c58997e3..086ba2257d2 100644 --- a/reactos/base/shell/explorer-new/trayntfy.c +++ b/reactos/base/shell/explorer-new/trayntfy.c @@ -19,12 +19,15 @@ */ #include +#include /* * TrayClockWnd - */ + */ static const TCHAR szTrayClockWndClass[] = TEXT("TrayClockWClass"); +static LPCTSTR s_szRegistryKey = _T("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced"); +BOOL blShowSeconds; #define ID_TRAYCLOCK_TIMER 0 #define ID_TRAYCLOCK_TIMER_INIT 1 @@ -34,11 +37,51 @@ static const struct BOOL IsTime; DWORD dwFormatFlags; LPCTSTR lpFormat; -} ClockWndFormats[] = { - {TRUE, TIME_NOSECONDS, NULL}, - {FALSE, 0, TEXT("dddd")}, - {FALSE, DATE_SHORTDATE, NULL}, -}; +}ClockWndFormats[]= { +{TRUE, 0, NULL}, +{FALSE, 0, TEXT("dddd")}, +{FALSE, DATE_SHORTDATE, NULL} +}; + +HRESULT RegGetDWord(HKEY hKey, LPCTSTR szValueName, DWORD * lpdwResult) +{ + LONG lResult; + DWORD dwDataSize = sizeof(DWORD); + DWORD dwType = 0; + + // Check input parameters... + if (hKey == NULL || lpdwResult == NULL) return E_INVALIDARG; + + // Get dword value from the registry... + lResult = RegQueryValueEx(hKey, szValueName, 0, &dwType, (LPBYTE) lpdwResult, &dwDataSize ); + + // Check result and make sure the registry value is a DWORD(REG_DWORD)... + if (lResult != ERROR_SUCCESS) return HRESULT_FROM_WIN32(lResult); + else if (dwType != REG_DWORD) return DISP_E_TYPEMISMATCH; + + return NOERROR; +} + +void LoadSettings(void) +{ + HKEY hKey = NULL; + DWORD dwValue; + + if (RegOpenKey(HKEY_CURRENT_USER, s_szRegistryKey, &hKey) == ERROR_SUCCESS) + { + RegGetDWord(hKey, TEXT("blShowSeconds"), &dwValue); + if (dwValue == 1) + { + blShowSeconds = TRUE; + } + else + { + blShowSeconds = FALSE; + } + + RegCloseKey(hKey); + } +} #define CLOCKWND_FORMAT_COUNT (sizeof(ClockWndFormats) / sizeof(ClockWndFormats[0])) @@ -52,6 +95,7 @@ typedef struct _TRAY_CLOCK_WND_DATA HFONT hFont; RECT rcText; SYSTEMTIME LocalTime; + union { DWORD dwFlags; @@ -233,6 +277,11 @@ TrayClockWnd_UpdateWnd(IN OUT PTRAY_CLOCK_WND_DATA This) if (iRet != 0 && i == 0) { + if (blShowSeconds == FALSE) + { + (This->szLines[0][5] = '\0'); + }; + /* Set the window text to the time only */ SetWindowText(This->hWnd, This->szLines[i]); @@ -296,7 +345,10 @@ TrayClockWnd_CalculateDueTime(IN OUT PTRAY_CLOCK_WND_DATA This) /* Calculate the due time */ GetLocalTime(&This->LocalTime); uiDueTime = 1000 - (UINT)This->LocalTime.wMilliseconds; - uiDueTime += (59 - (UINT)This->LocalTime.wSecond) * 1000; + if (blShowSeconds == TRUE) + uiDueTime += ( (UINT)This->LocalTime.wSecond) * 100; + else + uiDueTime += (59 - (UINT)This->LocalTime.wSecond) * 1000; if (uiDueTime < USER_TIMER_MINIMUM || uiDueTime > USER_TIMER_MAXIMUM) uiDueTime = 1000; @@ -350,6 +402,7 @@ TrayClockWnd_CalibrateTimer(IN OUT PTRAY_CLOCK_WND_DATA This) { UINT uiDueTime; BOOL Ret; + int intWait1, intWait2; /* Kill the initialization timer */ KillTimer(This->hWnd, @@ -357,15 +410,26 @@ TrayClockWnd_CalibrateTimer(IN OUT PTRAY_CLOCK_WND_DATA This) This->IsInitTimerEnabled = FALSE; uiDueTime = TrayClockWnd_CalculateDueTime(This); + + if (blShowSeconds == TRUE) + { + intWait1 = 1000-200; + intWait2 = 1000; + } + else + { + intWait1 = 60*1000-200; + intWait2 = 60*1000; + } - if (uiDueTime > (60 * 1000) - 200) + if (uiDueTime > intWait1) { /* The update of the clock will be up to 200 ms late, but that's - acceptable. We're going to setup a timer that fires every - minute. */ + acceptable. We're going to setup a timer that fires depending + intWait2. */ Ret = SetTimer(This->hWnd, ID_TRAYCLOCK_TIMER, - 60 * 1000, + intWait2, NULL) != 0; This->IsTimerEnabled = Ret; @@ -375,7 +439,7 @@ TrayClockWnd_CalibrateTimer(IN OUT PTRAY_CLOCK_WND_DATA This) else { /* Recalibrate the timer and recalculate again when the current - minute ends. */ + minute/second ends. */ TrayClockWnd_ResetTime(This); } } @@ -614,6 +678,7 @@ CreateTrayClockWnd(IN HWND hWndParent, PTRAY_CLOCK_WND_DATA TcData; DWORD dwStyle; HWND hWnd = NULL; + LoadSettings(); TcData = HeapAlloc(hProcessHeap, 0, From 55f58f967cc22638b835477e5093583eae7aadaf Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 5 Mar 2011 16:54:08 +0000 Subject: [PATCH 219/287] [SETUPAPI] Implement CM_Get_Device_Interface_List[_Ex]A/W and CM_Get_Device_Interface_List_Size[_Ex]A/W. svn path=/trunk/; revision=50975 --- reactos/dll/win32/setupapi/cfgmgr.c | 258 +++++++++++++++++++++++ reactos/dll/win32/setupapi/setupapi.spec | 12 +- reactos/dll/win32/setupapi/stubs.c | 19 -- 3 files changed, 264 insertions(+), 25 deletions(-) diff --git a/reactos/dll/win32/setupapi/cfgmgr.c b/reactos/dll/win32/setupapi/cfgmgr.c index d54b96f7e02..37058042519 100644 --- a/reactos/dll/win32/setupapi/cfgmgr.c +++ b/reactos/dll/win32/setupapi/cfgmgr.c @@ -2387,6 +2387,264 @@ CONFIGRET WINAPI CM_Get_Device_Interface_Alias_ExW( } +/*********************************************************************** + * CM_Get_Device_Interface_ListA (SETUPAPI.@) + */ +CONFIGRET WINAPI CM_Get_Device_Interface_ListA( + LPGUID InterfaceClassGuid, DEVINSTID_A pDeviceID, PCHAR Buffer, + ULONG BufferLen, ULONG ulFlags) +{ + TRACE("%s %s %p %lu 0x%08lx\n", debugstr_guid(InterfaceClassGuid), + pDeviceID, Buffer, BufferLen, ulFlags); + + return CM_Get_Device_Interface_List_ExA(InterfaceClassGuid, pDeviceID, + Buffer, BufferLen, ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Get_Device_Interface_ListW (SETUPAPI.@) + */ +CONFIGRET WINAPI CM_Get_Device_Interface_ListW( + LPGUID InterfaceClassGuid, DEVINSTID_W pDeviceID, PWCHAR Buffer, + ULONG BufferLen, ULONG ulFlags) +{ + TRACE("%s %s %p %lu 0x%08lx\n", debugstr_guid(InterfaceClassGuid), + debugstr_w(pDeviceID), Buffer, BufferLen, ulFlags); + + return CM_Get_Device_Interface_List_ExW(InterfaceClassGuid, pDeviceID, + Buffer, BufferLen, ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Get_Device_Interface_List_ExA (SETUPAPI.@) + */ +CONFIGRET WINAPI CM_Get_Device_Interface_List_ExA( + LPGUID InterfaceClassGuid, DEVINSTID_A pDeviceID, PCHAR Buffer, + ULONG BufferLen, ULONG ulFlags, HMACHINE hMachine) +{ + DEVINSTID_W pDeviceIdW = NULL; + PWCHAR BufferW = NULL; + CONFIGRET ret = CR_SUCCESS; + + TRACE("%s %s %p %lu 0x%08lx %p\n", debugstr_guid(InterfaceClassGuid), + pDeviceID, Buffer, BufferLen, ulFlags, hMachine); + + if (Buffer == NULL || + BufferLen == 0) + return CR_INVALID_POINTER; + + if (pDeviceID != NULL) + { + if (!pSetupCaptureAndConvertAnsiArg(pDeviceID, &pDeviceIdW)) + return CR_INVALID_DEVICE_ID; + } + + BufferW = MyMalloc(BufferLen * sizeof(WCHAR)); + if (BufferW == NULL) + { + ret = CR_OUT_OF_MEMORY; + goto Done; + } + + ret = CM_Get_Device_Interface_List_ExW(InterfaceClassGuid, pDeviceIdW, + BufferW, BufferLen, ulFlags, + hMachine); + if (ret != CR_SUCCESS) + goto Done; + + if (WideCharToMultiByte(CP_ACP, + 0, + BufferW, + lstrlenW(BufferW) + 1, + Buffer, + BufferLen, + NULL, + NULL) == 0) + ret = CR_FAILURE; + +Done: + if (BufferW != NULL) + MyFree(BufferW); + + if (pDeviceIdW != NULL) + MyFree(pDeviceIdW); + + return ret; +} + + +/*********************************************************************** + * CM_Get_Device_Interface_List_ExW (SETUPAPI.@) + */ +CONFIGRET WINAPI CM_Get_Device_Interface_List_ExW( + LPGUID InterfaceClassGuid, DEVINSTID_W pDeviceID, PWCHAR Buffer, + ULONG BufferLen, ULONG ulFlags, HMACHINE hMachine) +{ + RPC_BINDING_HANDLE BindingHandle = NULL; + PNP_RPC_BUFFER_SIZE BufferSize = 0; + CONFIGRET ret = CR_SUCCESS; + + TRACE("%s %s %p %lu 0x%08lx %p\n", debugstr_guid(InterfaceClassGuid), + debugstr_w(pDeviceID), Buffer, BufferLen, ulFlags, hMachine); + + if (Buffer == NULL || + BufferLen == 0) + return CR_INVALID_POINTER; + + if (ulFlags & ~CM_GET_DEVICE_INTERFACE_LIST_BITS) + return CR_INVALID_FLAG; + + if (hMachine != NULL) + { + BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle; + if (BindingHandle == NULL) + return CR_FAILURE; + } + else + { + if (!PnpGetLocalHandles(&BindingHandle, NULL)) + return CR_FAILURE; + } + + *Buffer = 0; + BufferSize = BufferLen; + + RpcTryExcept + { + ret = PNP_GetInterfaceDeviceList(BindingHandle, + InterfaceClassGuid, + pDeviceID, + (LPBYTE)Buffer, + &BufferSize, + ulFlags); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + ret = RpcStatusToCmStatus(RpcExceptionCode()); + } + RpcEndExcept; + + return ret; +} + + +/*********************************************************************** + * CM_Get_Device_Interface_List_SizeA (SETUPAPI.@) + */ +CONFIGRET WINAPI CM_Get_Device_Interface_List_SizeA( + PULONG pulLen, LPGUID InterfaceClassGuid, DEVINSTID_A pDeviceId, + ULONG ulFlags) +{ + TRACE("%p %p %s 0x%08lx\n", pulLen, InterfaceClassGuid, + pDeviceId, ulFlags); + + return CM_Get_Device_Interface_List_Size_ExA(pulLen, InterfaceClassGuid, + pDeviceId, ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Get_Device_Interface_List_SizeW (SETUPAPI.@) + */ +CONFIGRET WINAPI CM_Get_Device_Interface_List_SizeW( + PULONG pulLen, LPGUID InterfaceClassGuid, DEVINSTID_W pDeviceId, + ULONG ulFlags) +{ + TRACE("%p %p %s 0x%08lx\n", pulLen, InterfaceClassGuid, + debugstr_w(pDeviceId), ulFlags); + + return CM_Get_Device_Interface_List_Size_ExW(pulLen, InterfaceClassGuid, + pDeviceId, ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Get_Device_Interface_List_Size_ExA (SETUPAPI.@) + */ +CONFIGRET WINAPI CM_Get_Device_Interface_List_Size_ExA( + PULONG pulLen, LPGUID InterfaceClassGuid, DEVINSTID_A pDeviceId, + ULONG ulFlags, HMACHINE hMachine) +{ + DEVINSTID_W pDeviceIdW = NULL; + CONFIGRET ret = CR_SUCCESS; + + TRACE("%p %p %s 0x%08lx %p\n", pulLen, InterfaceClassGuid, + pDeviceId, ulFlags, hMachine); + + if (pulLen == NULL) + return CR_INVALID_POINTER; + + if (pDeviceId != NULL) + { + if (!pSetupCaptureAndConvertAnsiArg(pDeviceId, &pDeviceIdW)) + return CR_INVALID_DEVICE_ID; + } + + *pulLen = 0; + + ret = CM_Get_Device_Interface_List_Size_ExW(pulLen, InterfaceClassGuid, + pDeviceIdW, ulFlags, hMachine); + + if (pDeviceIdW != NULL) + MyFree(pDeviceIdW); + + return ret; +} + + +/*********************************************************************** + * CM_Get_Device_Interface_List_Size_ExW (SETUPAPI.@) + */ +CONFIGRET WINAPI CM_Get_Device_Interface_List_Size_ExW( + PULONG pulLen, LPGUID InterfaceClassGuid, DEVINSTID_W pDeviceId, + ULONG ulFlags, HMACHINE hMachine) +{ + RPC_BINDING_HANDLE BindingHandle = NULL; + CONFIGRET ret = CR_SUCCESS; + + TRACE("%p %p %s 0x%08lx %p\n", pulLen, InterfaceClassGuid, + debugstr_w(pDeviceId), ulFlags, hMachine); + + if (pulLen == NULL) + return CR_INVALID_POINTER; + + if (ulFlags & ~CM_GET_DEVICE_INTERFACE_LIST_BITS) + return CR_INVALID_FLAG; + + if (hMachine != NULL) + { + BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle; + if (BindingHandle == NULL) + return CR_FAILURE; + } + else + { + if (!PnpGetLocalHandles(&BindingHandle, NULL)) + return CR_FAILURE; + } + + *pulLen = 0; + + RpcTryExcept + { + ret = PNP_GetInterfaceDeviceListSize(BindingHandle, + pulLen, + InterfaceClassGuid, + pDeviceId, + ulFlags); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + ret = RpcStatusToCmStatus(RpcExceptionCode()); + } + RpcEndExcept; + + return ret; +} + + /*********************************************************************** * CM_Get_First_Log_Conf [SETUPAPI.@] */ diff --git a/reactos/dll/win32/setupapi/setupapi.spec b/reactos/dll/win32/setupapi/setupapi.spec index 671b96bfd6b..18c0e0b7a28 100644 --- a/reactos/dll/win32/setupapi/setupapi.spec +++ b/reactos/dll/win32/setupapi/setupapi.spec @@ -94,12 +94,12 @@ @ stdcall CM_Get_Device_Interface_AliasW(wstr ptr wstr ptr long) @ stdcall CM_Get_Device_Interface_Alias_ExA(str ptr str ptr long long) @ stdcall CM_Get_Device_Interface_Alias_ExW(wstr ptr wstr ptr long long) -@ stub CM_Get_Device_Interface_ListA -@ stub CM_Get_Device_Interface_ListW -@ stub CM_Get_Device_Interface_List_ExA -@ stub CM_Get_Device_Interface_List_ExW -@ stub CM_Get_Device_Interface_List_SizeA -@ stub CM_Get_Device_Interface_List_SizeW +@ stdcall CM_Get_Device_Interface_ListA(ptr str str long long) +@ stdcall CM_Get_Device_Interface_ListW(ptr wstr wstr long long) +@ stdcall CM_Get_Device_Interface_List_ExA(ptr str str long long ptr) +@ stdcall CM_Get_Device_Interface_List_ExW(ptr wstr wstr long long ptr) +@ stdcall CM_Get_Device_Interface_List_SizeA(ptr ptr str long) +@ stdcall CM_Get_Device_Interface_List_SizeW(ptr ptr wstr long) @ stdcall CM_Get_Device_Interface_List_Size_ExA(ptr ptr str long ptr) @ stdcall CM_Get_Device_Interface_List_Size_ExW(ptr ptr wstr long ptr) @ stdcall CM_Get_First_Log_Conf(ptr long long) diff --git a/reactos/dll/win32/setupapi/stubs.c b/reactos/dll/win32/setupapi/stubs.c index 99ef8d15eb8..e4003a6eacf 100644 --- a/reactos/dll/win32/setupapi/stubs.c +++ b/reactos/dll/win32/setupapi/stubs.c @@ -187,25 +187,6 @@ CMP_UnregisterNotification(IN HDEVNOTIFY handle) return CR_SUCCESS; } -/*********************************************************************** - * CM_Get_Device_Interface_List_Size_ExA (SETUPAPI.@) - */ -CONFIGRET WINAPI CM_Get_Device_Interface_List_Size_ExA(PULONG len, LPGUID class, DEVINSTID_A id, - ULONG flags, HMACHINE machine) -{ - FIXME("%p %p %s 0x%08x %p: stub\n", len, class, debugstr_a(id), flags, machine); - return CR_FAILURE; -} - -/*********************************************************************** - * CM_Get_Device_Interface_List_Size_ExW (SETUPAPI.@) - */ -CONFIGRET WINAPI CM_Get_Device_Interface_List_Size_ExW(PULONG len, LPGUID class, DEVINSTID_W id, - ULONG flags, HMACHINE machine) -{ - FIXME("%p %p %s 0x%08x %p: stub\n", len, class, debugstr_w(id), flags, machine); - return CR_FAILURE; -} WINSETUPAPI BOOL WINAPI SetupDiGetDeviceInterfaceAlias(IN HDEVINFO DeviceInfoSet, IN PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData, IN CONST GUID *AliasInterfaceClassGuid, OUT PSP_DEVICE_INTERFACE_DATA AliasDeviceInterfaceData) { From d5296346507a8e270babb736b3895e4f27153831 Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Sat, 5 Mar 2011 18:02:56 +0000 Subject: [PATCH 220/287] - Update Ukraianian translation by Sakara Eugene svn path=/trunk/; revision=50976 --- reactos/base/applications/network/ping/lang/uk-UA.rc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/reactos/base/applications/network/ping/lang/uk-UA.rc b/reactos/base/applications/network/ping/lang/uk-UA.rc index 18cd3e6acd8..eb0523a771f 100644 --- a/reactos/base/applications/network/ping/lang/uk-UA.rc +++ b/reactos/base/applications/network/ping/lang/uk-UA.rc @@ -3,7 +3,7 @@ * LICENSE: GPL - See COPYING in the top level directory * FILE: base/applications/network/ping/lang/uk-UA.rc * PURPOSE: Ukraianian Language File for Ping - * TRANSLATORS: Sakara Eugene + * TRANSLATORS: Sakara Eugene (vzov@yandex.ua) */ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT @@ -18,11 +18,11 @@ BEGIN -l size .\n\ -w timeout .\n\n\0" - IDS_PING_WITH_BYTES "\n %1 [%2] %3!d! :\n\n\0" + IDS_PING_WITH_BYTES "\n %1 [%2] %3!d! :\n\n\0" IDS_PING_STATISTICS "\n Ping %1:\n\0" IDS_PACKETS_SENT_RECEIVED_LOST " : = %1!d!, = %2!d!, = %3!d! (%4!d!%% ),\n\0" IDS_APPROXIMATE_ROUND_TRIP " -:\n\0" - IDS_MIN_MAX_AVERAGE " ̳ = %1, = %2, = %3\n\0" + IDS_MIN_MAX_AVERAGE " ̳ = %1, = %2, = %3\n\0" IDS_NOT_ENOUGH_RESOURCES " .\n\0" IDS_UNKNOWN_HOST " %1.\n\0" IDS_SETSOCKOPT_FAILED "setsockopt (%1!d!).\n\0" From 7b3c20440788cbfeddc436409d7d479e5bc18b3e Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 5 Mar 2011 18:37:39 +0000 Subject: [PATCH 221/287] [SERVICES] - Use one instead of two critical sections to synchronize service start and control actions. - Fail, if an already running service is started again. svn path=/trunk/; revision=50977 --- reactos/base/system/services/database.c | 40 ++++++++++++++----------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/reactos/base/system/services/database.c b/reactos/base/system/services/database.c index 9a332a096d1..f33d437955b 100644 --- a/reactos/base/system/services/database.c +++ b/reactos/base/system/services/database.c @@ -30,8 +30,7 @@ LIST_ENTRY ServiceListHead; static RTL_RESOURCE DatabaseLock; static DWORD dwResumeCount = 1; -static CRITICAL_SECTION NamedPipeCriticalSection; -static CRITICAL_SECTION StartServiceCriticalSection; +static CRITICAL_SECTION ControlServiceCriticalSection; /* FUNCTIONS *****************************************************************/ @@ -693,6 +692,8 @@ ScmControlService(PSERVICE Service, DPRINT("ScmControlService() called\n"); + EnterCriticalSection(&ControlServiceCriticalSection); + TotalLength = wcslen(Service->lpServiceName) + 1; ControlPacket = (SCM_CONTROL_PACKET*)HeapAlloc(GetProcessHeap(), @@ -706,8 +707,6 @@ ScmControlService(PSERVICE Service, ControlPacket->hServiceStatus = (SERVICE_STATUS_HANDLE)Service; wcscpy(&ControlPacket->szArguments[0], Service->lpServiceName); - EnterCriticalSection(&NamedPipeCriticalSection); - /* Send the control packet */ WriteFile(Service->ControlPipeHandle, ControlPacket, @@ -722,8 +721,6 @@ ScmControlService(PSERVICE Service, &dwReadCount, NULL); - LeaveCriticalSection(&NamedPipeCriticalSection); - /* Release the contol packet */ HeapFree(GetProcessHeap(), 0, @@ -734,6 +731,8 @@ ScmControlService(PSERVICE Service, dwError = ReplyPacket.dwError; } + LeaveCriticalSection(&ControlServiceCriticalSection); + DPRINT("ScmControlService() done\n"); return dwError; @@ -801,8 +800,6 @@ ScmSendStartCommand(PSERVICE Service, /* Terminate the argument list */ *Ptr = 0; - EnterCriticalSection(&NamedPipeCriticalSection); - /* Send the start command */ WriteFile(Service->ControlPipeHandle, ControlPacket, @@ -817,8 +814,6 @@ ScmSendStartCommand(PSERVICE Service, &dwReadCount, NULL); - LeaveCriticalSection(&NamedPipeCriticalSection); - /* Release the contol packet */ HeapFree(GetProcessHeap(), 0, @@ -924,6 +919,9 @@ ScmStartUserModeService(PSERVICE Service, /* Create '\\.\pipe\net\NtControlPipeXXX' instance */ swprintf(NtControlPipeName, L"\\\\.\\pipe\\net\\NtControlPipe%u", ServiceCurrent); + + DPRINT1("Service: %p ImagePath: %wZ PipeName: %S\n", Service, &ImagePath, NtControlPipeName); + Service->ControlPipeHandle = CreateNamedPipeW(NtControlPipeName, PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, @@ -1036,10 +1034,19 @@ ScmStartService(PSERVICE Service, DWORD argc, LPWSTR *argv) PSERVICE_GROUP Group = Service->lpGroup; DWORD dwError = ERROR_SUCCESS; - EnterCriticalSection(&StartServiceCriticalSection); - DPRINT("ScmStartService() called\n"); + DPRINT1("Start Service %p (%S)\n", Service, Service->lpServiceName); + + EnterCriticalSection(&ControlServiceCriticalSection); + + if (Service->Status.dwCurrentState != SERVICE_STOPPED) + { + DPRINT1("Service %S is already running!\n", Service->lpServiceName); + LeaveCriticalSection(&ControlServiceCriticalSection); + return ERROR_SERVICE_ALREADY_RUNNING; + } + Service->ControlPipeHandle = INVALID_HANDLE_VALUE; DPRINT("Service->Type: %lu\n", Service->Status.dwServiceType); @@ -1067,8 +1074,9 @@ ScmStartService(PSERVICE Service, DWORD argc, LPWSTR *argv) } } + LeaveCriticalSection(&ControlServiceCriticalSection); + DPRINT("ScmStartService() done (Error %lu)\n", dwError); - LeaveCriticalSection(&StartServiceCriticalSection); if (dwError == ERROR_SUCCESS) { @@ -1274,16 +1282,14 @@ ScmUnlockDatabase(VOID) VOID ScmInitNamedPipeCriticalSection(VOID) { - InitializeCriticalSection(&NamedPipeCriticalSection); - InitializeCriticalSection(&StartServiceCriticalSection); + InitializeCriticalSection(&ControlServiceCriticalSection); } VOID ScmDeleteNamedPipeCriticalSection(VOID) { - DeleteCriticalSection(&StartServiceCriticalSection); - DeleteCriticalSection(&NamedPipeCriticalSection); + DeleteCriticalSection(&ControlServiceCriticalSection); } /* EOF */ From 6b1af86bdea8ff65289145fe1597d68ae1e01a9b Mon Sep 17 00:00:00 2001 From: Roel Messiant Date: Sun, 6 Mar 2011 00:37:10 +0000 Subject: [PATCH 222/287] [HEAP] - RtlpInsertUnCommittedPages: Don't rely on linked list data in an UCR Descriptor after destroying it. No functionality change because the linked list data was still "as expected", but not something we want to rely on. - RtlpCreateUnCommittedRange: Fix a typo that caused the head of UCR Segment list of the Heap to be treated as an UCR Segment header. Side effects of the typo: When this list wasn't empty, the (fake) UCR Segment it described was grown to contain more UCR descriptors. Due to the data involved, this always happened to be the initial Heap Segment, which contains the Heap Header. Writing the new UCR descriptors caused the Heap Header and trailing Heap Entries to be partially corrupted. svn path=/trunk/; revision=50978 --- reactos/lib/rtl/heap.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/reactos/lib/rtl/heap.c b/reactos/lib/rtl/heap.c index 31bab04c095..110e68b0993 100644 --- a/reactos/lib/rtl/heap.c +++ b/reactos/lib/rtl/heap.c @@ -414,7 +414,7 @@ RtlpCreateUnCommittedRange(PHEAP_SEGMENT Segment) if (IsListEmpty(&Heap->UCRList)) { /* Get a pointer to the first UCR segment */ - UcrSegment = CONTAINING_RECORD(&Heap->UCRSegments.Flink, HEAP_UCR_SEGMENT, ListEntry); + UcrSegment = CONTAINING_RECORD(Heap->UCRSegments.Flink, HEAP_UCR_SEGMENT, ListEntry); /* Check the list of UCR segments */ if (IsListEmpty(&Heap->UCRSegments) || @@ -539,8 +539,11 @@ RtlpInsertUnCommittedPages(PHEAP_SEGMENT Segment, Address = (ULONG_PTR)UcrDescriptor->Address; Size += UcrDescriptor->Size; - /* Remove it from the list and destroy it */ - RemoveEntryList(Current); + /* Advance to the next descriptor */ + Current = Current->Flink; + + /* Remove the current descriptor from the list and destroy it */ + RemoveEntryList(&UcrDescriptor->SegmentEntry); RtlpDestroyUnCommittedRange(Segment, UcrDescriptor); Segment->NumberOfUnCommittedRanges--; From 56968985430a3460a91eb641117be0c7857737a7 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 6 Mar 2011 10:20:32 +0000 Subject: [PATCH 223/287] [KERNEL32] Apply consistent formatting to FlushFileBuffers. No code changes yet svn path=/trunk/; revision=50979 --- reactos/dll/win32/kernel32/file/file.c | 30 +++++++++++++------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/reactos/dll/win32/kernel32/file/file.c b/reactos/dll/win32/kernel32/file/file.c index 4e1181069a3..0d5d2514b69 100644 --- a/reactos/dll/win32/kernel32/file/file.c +++ b/reactos/dll/win32/kernel32/file/file.c @@ -408,24 +408,24 @@ OpenFile(LPCSTR lpFileName, BOOL WINAPI FlushFileBuffers(HANDLE hFile) { - NTSTATUS errCode; - IO_STATUS_BLOCK IoStatusBlock; + NTSTATUS errCode; + IO_STATUS_BLOCK IoStatusBlock; - hFile = TranslateStdHandle(hFile); + hFile = TranslateStdHandle(hFile); - if (IsConsoleHandle(hFile)) - { - return FALSE; - } + if (IsConsoleHandle(hFile)) + { + return FALSE; + } - errCode = NtFlushBuffersFile(hFile, - &IoStatusBlock); - if (!NT_SUCCESS(errCode)) - { - SetLastErrorByStatus(errCode); - return(FALSE); - } - return(TRUE); + errCode = NtFlushBuffersFile(hFile, + &IoStatusBlock); + if (!NT_SUCCESS(errCode)) + { + SetLastErrorByStatus(errCode); + return(FALSE); + } + return(TRUE); } From 91bdfab1bd31a84f1f942296f79dd145894af159 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 6 Mar 2011 10:28:50 +0000 Subject: [PATCH 224/287] [KERNEL32] FlushFileBuffers: - In spite of what MSDN pretends, it appears that FlushFileBuffers flushes console input buffer when it's called with a console handle. Then, do it here as well. - Get rid of SetLastErrorByStatus here... svn path=/trunk/; revision=50980 --- reactos/dll/win32/kernel32/file/file.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/reactos/dll/win32/kernel32/file/file.c b/reactos/dll/win32/kernel32/file/file.c index 0d5d2514b69..1f9124b2996 100644 --- a/reactos/dll/win32/kernel32/file/file.c +++ b/reactos/dll/win32/kernel32/file/file.c @@ -406,26 +406,26 @@ OpenFile(LPCSTR lpFileName, * @implemented */ BOOL WINAPI -FlushFileBuffers(HANDLE hFile) +FlushFileBuffers(IN HANDLE hFile) { - NTSTATUS errCode; + NTSTATUS Status; IO_STATUS_BLOCK IoStatusBlock; hFile = TranslateStdHandle(hFile); if (IsConsoleHandle(hFile)) { - return FALSE; + return FlushConsoleInputBuffer(hFile); } - errCode = NtFlushBuffersFile(hFile, - &IoStatusBlock); - if (!NT_SUCCESS(errCode)) + Status = NtFlushBuffersFile(hFile, + &IoStatusBlock); + if (!NT_SUCCESS(Status)) { - SetLastErrorByStatus(errCode); - return(FALSE); + BaseSetLastNTError(Status); + return FALSE; } - return(TRUE); + return TRUE; } From e996625659e32880cda3b16a6e7e37b2fa9b75e4 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sun, 6 Mar 2011 11:00:17 +0000 Subject: [PATCH 225/287] [NTOS/FSRTL] - Implement parameters checking in FsRtlIsNameInExpressionPrivate. - Add two shortcuts for common wildcard invocations to make the function faster. - Second (main part of the function) is still under review. svn path=/trunk/; revision=50981 --- reactos/ntoskrnl/fsrtl/name.c | 74 ++++++++++++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 2 deletions(-) diff --git a/reactos/ntoskrnl/fsrtl/name.c b/reactos/ntoskrnl/fsrtl/name.c index 8ed32a34b4b..84fba9b4437 100644 --- a/reactos/ntoskrnl/fsrtl/name.c +++ b/reactos/ntoskrnl/fsrtl/name.c @@ -5,7 +5,8 @@ * PURPOSE: Provides name parsing and other support routines for FSDs * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org) * Filip Navara (navaraf@reactos.org) - * Pierre Schweitzer (pierre.schweitzer@reactos.org) + * Pierre Schweitzer (pierre.schweitzer@reactos.org) + * Aleksey Bragin (aleksey@reactos.org) */ /* INCLUDES ******************************************************************/ @@ -23,10 +24,79 @@ FsRtlIsNameInExpressionPrivate(IN PUNICODE_STRING Expression, IN PWCHAR UpcaseTable OPTIONAL) { USHORT ExpressionPosition = 0, NamePosition = 0, MatchingChars, StarFound = MAXUSHORT; + UNICODE_STRING IntExpression; PAGED_CODE(); + /* Check if we were given strings at all */ + if (!Name->Length || !Expression->Length) + { + /* Return TRUE if both strings are empty, otherwise FALSE */ + if (Name->Length == 0 && Expression->Length == 0) + return TRUE; + else + return FALSE; + } + + /* Check for a shortcut: just one wildcard */ + if (Expression->Length == 2) + { + if (Expression->Buffer[0] == L'*') + return TRUE; + } + ASSERT(!IgnoreCase || UpcaseTable); + /* Another shortcut, wildcard followed by some string */ + if (Expression->Buffer[0] == L'*') + { + /* Copy Expression to our local variable */ + IntExpression = *Expression; + + /* Skip the first char */ + IntExpression.Buffer++; + IntExpression.Length -= sizeof(WCHAR); + + /* Continue only if the rest of the expression does NOT contain + any more wildcards */ + if (!FsRtlDoesNameContainWildCards(&IntExpression)) + { + /* Check for a degenerate case */ + if (Name->Length < (Expression->Length - sizeof(WCHAR))) + return FALSE; + + /* Calculate position */ + NamePosition = (Name->Length - IntExpression.Length) / sizeof(WCHAR); + + /* Compare */ + if (!IgnoreCase) + { + /* We can just do a byte compare */ + return RtlEqualMemory(IntExpression.Buffer, + Name->Buffer + NamePosition, + IntExpression.Length); + } + else + { + /* Not so easy, need to upcase and check char by char */ + for (ExpressionPosition = 0; ExpressionPosition < (IntExpression.Length / sizeof(WCHAR)); ExpressionPosition++) + { + /* Assert that expression is already upcased! */ + ASSERT(IntExpression.Buffer[ExpressionPosition] == UpcaseTable[IntExpression.Buffer[ExpressionPosition]]); + + /* Now compare upcased name char with expression */ + if (UpcaseTable[Name->Buffer[NamePosition + ExpressionPosition]] != + UpcaseTable[IntExpression.Buffer[ExpressionPosition]]) + { + return FALSE; + } + } + + /* It matches */ + return TRUE; + } + } + } + while (NamePosition < Name->Length / sizeof(WCHAR) && ExpressionPosition < Expression->Length / sizeof(WCHAR)) { if ((Expression->Buffer[ExpressionPosition] == (IgnoreCase ? UpcaseTable[Name->Buffer[NamePosition]] : Name->Buffer[NamePosition]))) @@ -385,7 +455,7 @@ FsRtlIsNameInExpression(IN PUNICODE_STRING Expression, if (IgnoreCase && !UpcaseTable) { Status = RtlUpcaseUnicodeString(&IntName, Name, TRUE); - if (Status != STATUS_SUCCESS) + if (!NT_SUCCESS(Status)) { ExRaiseStatus(Status); } From fd989b27e9c095de93a083c55f3ebe1c5b653850 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sun, 6 Mar 2011 11:16:22 +0000 Subject: [PATCH 226/287] - Fix a typo, thanks Herve! svn path=/trunk/; revision=50982 --- reactos/ntoskrnl/fsrtl/name.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/fsrtl/name.c b/reactos/ntoskrnl/fsrtl/name.c index 84fba9b4437..268ea1af3e0 100644 --- a/reactos/ntoskrnl/fsrtl/name.c +++ b/reactos/ntoskrnl/fsrtl/name.c @@ -38,7 +38,7 @@ FsRtlIsNameInExpressionPrivate(IN PUNICODE_STRING Expression, } /* Check for a shortcut: just one wildcard */ - if (Expression->Length == 2) + if (Expression->Length == sizeof(WCHAR)) { if (Expression->Buffer[0] == L'*') return TRUE; From a815fa86d2fb863d97b63219b5878ab68cb16506 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 6 Mar 2011 13:28:11 +0000 Subject: [PATCH 227/287] [KERNEL32] Fixed implementation of both GetFileTime/SetFileTime svn path=/trunk/; revision=50983 --- reactos/dll/win32/kernel32/file/file.c | 149 +++++++++++++------------ 1 file changed, 80 insertions(+), 69 deletions(-) diff --git a/reactos/dll/win32/kernel32/file/file.c b/reactos/dll/win32/kernel32/file/file.c index 1f9124b2996..7f0c0446441 100644 --- a/reactos/dll/win32/kernel32/file/file.c +++ b/reactos/dll/win32/kernel32/file/file.c @@ -1421,40 +1421,51 @@ GetTempFileNameW(IN LPCWSTR lpPathName, * @implemented */ BOOL WINAPI -GetFileTime(HANDLE hFile, - LPFILETIME lpCreationTime, - LPFILETIME lpLastAccessTime, - LPFILETIME lpLastWriteTime) +GetFileTime(IN HANDLE hFile, + OUT LPFILETIME lpCreationTime OPTIONAL, + OUT LPFILETIME lpLastAccessTime OPTIONAL, + OUT LPFILETIME lpLastWriteTime OPTIONAL) { - IO_STATUS_BLOCK IoStatusBlock; - FILE_BASIC_INFORMATION FileBasic; - NTSTATUS Status; + NTSTATUS Status; + IO_STATUS_BLOCK IoStatusBlock; + FILE_BASIC_INFORMATION FileBasic; - if(IsConsoleHandle(hFile)) - { - SetLastError(ERROR_INVALID_HANDLE); - return FALSE; - } + if(IsConsoleHandle(hFile)) + { + BaseSetLastNTError(STATUS_INVALID_HANDLE); + return FALSE; + } - Status = NtQueryInformationFile(hFile, - &IoStatusBlock, - &FileBasic, - sizeof(FILE_BASIC_INFORMATION), - FileBasicInformation); - if (!NT_SUCCESS(Status)) - { - SetLastErrorByStatus(Status); - return FALSE; - } + Status = NtQueryInformationFile(hFile, + &IoStatusBlock, + &FileBasic, + sizeof(FILE_BASIC_INFORMATION), + FileBasicInformation); + if (!NT_SUCCESS(Status)) + { + BaseSetLastNTError(Status); + return FALSE; + } - if (lpCreationTime) - memcpy(lpCreationTime, &FileBasic.CreationTime, sizeof(FILETIME)); - if (lpLastAccessTime) - memcpy(lpLastAccessTime, &FileBasic.LastAccessTime, sizeof(FILETIME)); - if (lpLastWriteTime) - memcpy(lpLastWriteTime, &FileBasic.LastWriteTime, sizeof(FILETIME)); + if (lpCreationTime) + { + lpCreationTime->dwLowDateTime = FileBasic.CreationTime.LowPart; + lpCreationTime->dwHighDateTime = FileBasic.CreationTime.HighPart; + } - return TRUE; + if (lpLastAccessTime) + { + lpLastAccessTime->dwLowDateTime = FileBasic.LastAccessTime.LowPart; + lpLastAccessTime->dwHighDateTime = FileBasic.LastAccessTime.HighPart; + } + + if (lpLastWriteTime) + { + lpLastWriteTime->dwLowDateTime = FileBasic.LastWriteTime.LowPart; + lpLastWriteTime->dwHighDateTime = FileBasic.LastWriteTime.HighPart; + } + + return TRUE; } @@ -1462,53 +1473,53 @@ GetFileTime(HANDLE hFile, * @implemented */ BOOL WINAPI -SetFileTime(HANDLE hFile, - CONST FILETIME *lpCreationTime, - CONST FILETIME *lpLastAccessTime, - CONST FILETIME *lpLastWriteTime) +SetFileTime(IN HANDLE hFile, + CONST FILETIME *lpCreationTime OPTIONAL, + CONST FILETIME *lpLastAccessTime OPTIONAL, + CONST FILETIME *lpLastWriteTime OPTIONAL) { - FILE_BASIC_INFORMATION FileBasic; - IO_STATUS_BLOCK IoStatusBlock; - NTSTATUS Status; + NTSTATUS Status; + IO_STATUS_BLOCK IoStatusBlock; + FILE_BASIC_INFORMATION FileBasic; - if(IsConsoleHandle(hFile)) - { - SetLastError(ERROR_INVALID_HANDLE); - return FALSE; - } + if(IsConsoleHandle(hFile)) + { + BaseSetLastNTError(STATUS_INVALID_HANDLE); + return FALSE; + } - Status = NtQueryInformationFile(hFile, - &IoStatusBlock, - &FileBasic, - sizeof(FILE_BASIC_INFORMATION), - FileBasicInformation); - if (!NT_SUCCESS(Status)) - { - SetLastErrorByStatus(Status); - return FALSE; - } + memset(&FileBasic, 0, sizeof(FILE_BASIC_INFORMATION)); - if (lpCreationTime) - memcpy(&FileBasic.CreationTime, lpCreationTime, sizeof(FILETIME)); - if (lpLastAccessTime) - memcpy(&FileBasic.LastAccessTime, lpLastAccessTime, sizeof(FILETIME)); - if (lpLastWriteTime) - memcpy(&FileBasic.LastWriteTime, lpLastWriteTime, sizeof(FILETIME)); + if (lpCreationTime) + { + FileBasic.CreationTime.LowPart = lpCreationTime->dwLowDateTime; + FileBasic.CreationTime.HighPart = lpCreationTime->dwHighDateTime; + } - // should i initialize changetime ??? + if (lpLastAccessTime) + { + FileBasic.LastAccessTime.LowPart = lpLastAccessTime->dwLowDateTime; + FileBasic.LastAccessTime.HighPart = lpLastAccessTime->dwHighDateTime; + } - Status = NtSetInformationFile(hFile, - &IoStatusBlock, - &FileBasic, - sizeof(FILE_BASIC_INFORMATION), - FileBasicInformation); - if (!NT_SUCCESS(Status)) - { - SetLastErrorByStatus(Status); - return FALSE; - } + if (lpLastWriteTime) + { + FileBasic.LastWriteTime.LowPart = lpLastWriteTime->dwLowDateTime; + FileBasic.LastWriteTime.HighPart = lpLastWriteTime->dwHighDateTime; + } - return TRUE; + Status = NtSetInformationFile(hFile, + &IoStatusBlock, + &FileBasic, + sizeof(FILE_BASIC_INFORMATION), + FileBasicInformation); + if (!NT_SUCCESS(Status)) + { + BaseSetLastNTError(Status); + return FALSE; + } + + return TRUE; } From f7af2d5aad7e86723dc4f3b9a70497fdca2a0723 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 6 Mar 2011 14:15:41 +0000 Subject: [PATCH 228/287] Fix PNP_QueryArbitratorFreeData() and PNP_QueryArbitratorFreeSize() prototypes. svn path=/trunk/; revision=50984 --- reactos/base/services/umpnpmgr/umpnpmgr.c | 13 +++++++++++-- reactos/include/reactos/idl/pnp.idl | 13 +++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/reactos/base/services/umpnpmgr/umpnpmgr.c b/reactos/base/services/umpnpmgr/umpnpmgr.c index dc4463c1949..64d8b45cd2f 100644 --- a/reactos/base/services/umpnpmgr/umpnpmgr.c +++ b/reactos/base/services/umpnpmgr/umpnpmgr.c @@ -1855,7 +1855,12 @@ DWORD PNP_SetHwProf( /* Function 56 */ DWORD PNP_QueryArbitratorFreeData( - handle_t hBinding) + handle_t hBinding, + BYTE *pData, + DWORD DataLen, + LPWSTR pDeviceID, + RESOURCEID ResourceID, + DWORD ulFlags) { UNIMPLEMENTED; return CR_CALL_NOT_IMPLEMENTED; @@ -1864,7 +1869,11 @@ DWORD PNP_QueryArbitratorFreeData( /* Function 57 */ DWORD PNP_QueryArbitratorFreeSize( - handle_t hBinding) + handle_t hBinding, + DWORD *pulSize, + LPWSTR pDeviceID, + RESOURCEID ResourceID, + DWORD ulFlags) { UNIMPLEMENTED; return CR_CALL_NOT_IMPLEMENTED; diff --git a/reactos/include/reactos/idl/pnp.idl b/reactos/include/reactos/idl/pnp.idl index daef2a2b235..b776e6d4a78 100644 --- a/reactos/include/reactos/idl/pnp.idl +++ b/reactos/include/reactos/idl/pnp.idl @@ -731,11 +731,20 @@ interface pnp /* Function 56 */ DWORD PNP_QueryArbitratorFreeData( - [in] handle_t hBinding); + [in] handle_t hBinding, + [out,size_is(DataLen)] BYTE *pData, + [in] DWORD DataLen, + [in, string, ref] LPWSTR pDeviceID, + [in] RESOURCEID ResourceID, + [in] DWORD ulFlags); /* Function 57 */ DWORD PNP_QueryArbitratorFreeSize( - [in] handle_t hBinding); + [in] handle_t hBinding, + [out] DWORD *pulSize, + [in, string, ref] LPWSTR pDeviceID, + [in] RESOURCEID ResourceID, + [in] DWORD ulFlags); /* Function 58 */ DWORD PNP_RunDetection( From a393a04761bef3798cf85123c6c0e7228ca7d483 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sun, 6 Mar 2011 16:32:36 +0000 Subject: [PATCH 229/287] [UNIATA] - Rafal Harabien: Sync UniATA to 0.40a5. Changelog: * Fixed bug with BSOD on newer SATA/AHCI Intel chips. * Added support for different number of devices on different channls. * Updated AHCI support code (not ready yet). * All ReactOS specific changes have been left. See issue #5976 for more details. svn path=/trunk/; revision=50985 --- reactos/drivers/storage/ide/uniata/bm_devs.h | 8 +- reactos/drivers/storage/ide/uniata/bsmaster.h | 21 +- reactos/drivers/storage/ide/uniata/id_ata.cpp | 16 +- .../drivers/storage/ide/uniata/id_init.cpp | 182 +++++++++++++----- .../drivers/storage/ide/uniata/id_probe.cpp | 51 +++-- .../drivers/storage/ide/uniata/id_sata.cpp | 61 ++++-- reactos/drivers/storage/ide/uniata/uata_ctl.h | 4 +- .../drivers/storage/ide/uniata/uniata_ver.h | 8 +- 8 files changed, 268 insertions(+), 83 deletions(-) diff --git a/reactos/drivers/storage/ide/uniata/bm_devs.h b/reactos/drivers/storage/ide/uniata/bm_devs.h index dbcbfa91adc..672b22ae7fd 100644 --- a/reactos/drivers/storage/ide/uniata/bm_devs.h +++ b/reactos/drivers/storage/ide/uniata/bm_devs.h @@ -31,9 +31,12 @@ Revision History: --*/ -#define IDE_MAX_CHAN 8 +#define IDE_MAX_CHAN 16 +#define IDE_DEFAULT_MAX_CHAN 2 // Thanks to SATA Port Multipliers: -#define IDE_MAX_LUN_PER_CHAN 16 +//#define IDE_MAX_LUN_PER_CHAN SATA_MAX_PM_UNITS +#define IDE_MAX_LUN_PER_CHAN 2 + #define IDE_MAX_LUN (AHCI_MAX_PORT*IDE_MAX_LUN_PER_CHAN) #define MAX_QUEUE_STAT 8 @@ -113,6 +116,7 @@ typedef struct _BUSMASTER_CONTROLLER_INFORMATION { ULONG Isr2Vector; PKINTERRUPT Isr2InterruptObject; CHAR AltInitMasterDev; // 0xff - uninitialized, 0x00 - normal, 0x01 - change ISA to PCI + CHAR NeedAltInit; // 0x01 - try change ISA to PCI #endif }BUSMASTER_CONTROLLER_INFORMATION, *PBUSMASTER_CONTROLLER_INFORMATION; diff --git a/reactos/drivers/storage/ide/uniata/bsmaster.h b/reactos/drivers/storage/ide/uniata/bsmaster.h index 365f076d669..0626b2c590b 100644 --- a/reactos/drivers/storage/ide/uniata/bsmaster.h +++ b/reactos/drivers/storage/ide/uniata/bsmaster.h @@ -95,6 +95,8 @@ Revision History: #define AHCI_MAX_PORT 32 +#define SATA_MAX_PM_UNITS 16 + typedef struct _BUSMASTER_CTX { PBUSMASTER_CONTROLLER_INFORMATION* BMListPtr; ULONG* BMListLen; @@ -178,6 +180,7 @@ typedef struct _IDE_AHCI_REGISTERS { } CAP; #define AHCI_CAP_NOP_MASK 0x0000001f +#define AHCI_CAP_SPM 0x00010000 #define AHCI_CAP_S64A 0x80000000 // Global HBA Control @@ -793,7 +796,10 @@ typedef struct _HW_CHANNEL { // KIRQL QueueOldIrql; #endif struct _HW_DEVICE_EXTENSION* DeviceExtension; - struct _HW_LU_EXTENSION* lun[2]; + struct _HW_LU_EXTENSION* lun[IDE_MAX_LUN_PER_CHAN]; + + ULONG NumberLuns; + ULONG PmLunMap; // Double-buffering support PVOID DB_PRD; @@ -898,7 +904,8 @@ typedef struct _HW_LU_EXTENSION { // Controller-specific LUN options union { /* for tricky controllers, those can change Logical-to-Physical LUN mapping. - mainly for mapping SATA ports to compatible PATA registers */ + Treated as PHYSICAL port number, regardless of logical mapping. + */ ULONG SATA_lun_map; }; @@ -1493,6 +1500,14 @@ AtapiReadBuffer2( #define GET_LDEV2(P, T, L) (T | ((P)<<1)) #define GET_CDEV(Srb) (Srb->TargetId) +VOID +NTAPI +AtapiSetupLunPtrs( + IN PHW_CHANNEL chan, + IN PHW_DEVICE_EXTENSION deviceExtension, + IN ULONG c + ); +/* #define AtapiSetupLunPtrs(chan, deviceExtension, c) \ { \ chan->DeviceExtension = deviceExtension; \ @@ -1504,7 +1519,7 @@ AtapiReadBuffer2( chan->lun[0]->DeviceExtension = deviceExtension; \ chan->lun[1]->DeviceExtension = deviceExtension; \ } - +*/ BOOLEAN NTAPI AtapiReadChipConfig( diff --git a/reactos/drivers/storage/ide/uniata/id_ata.cpp b/reactos/drivers/storage/ide/uniata/id_ata.cpp index 70aaed34e67..07c44253e0e 100644 --- a/reactos/drivers/storage/ide/uniata/id_ata.cpp +++ b/reactos/drivers/storage/ide/uniata/id_ata.cpp @@ -2976,8 +2976,8 @@ ContinueSearch: kptr = KeyWord; while ((*cptr == *kptr) || - (*cptr <= 'Z' && *cptr + ('a' - 'A') == *kptr) || - (*cptr >= 'a' && *cptr - ('a' - 'A') == *kptr)) { + (*cptr >= 'A' && *cptr <= 'Z' && *cptr + ('a' - 'A') == *kptr) || + (*cptr >= 'a' && *cptr <= 'z' && *cptr - ('a' - 'A') == *kptr)) { cptr++; kptr++; @@ -8589,6 +8589,16 @@ DriverEntry( &hwInitializationData.comm, (PVOID)(i | (alt ? 0x80000000 : 0))); KdPrint2((PRINT_PREFIX "ScsiPortInitialize Status %#x\n", newStatus)); + if(newStatus == (ULONG)STATUS_DEVICE_DOES_NOT_EXIST && BMList[i].NeedAltInit) { + KdPrint2((PRINT_PREFIX "STATUS_DEVICE_DOES_NOT_EXIST, try workaround\n")); + hwInitializationData.comm.AdapterInterfaceType = Isa; + newStatus = ScsiPortInitialize(DriverObject, + Argument2, + &hwInitializationData.comm, + (PVOID)(i | 0x80000000)); + KdPrint2((PRINT_PREFIX "ScsiPortInitialize Status %#x (2)\n", newStatus)); + } + if (newStatus < statusToReturn) { statusToReturn = newStatus; } @@ -9090,7 +9100,7 @@ AtapiRegCheckParameterValue( status = RtlQueryRegistryValues(RTL_REGISTRY_ABSOLUTE /*| RTL_REGISTRY_OPTIONAL*/, paramPath.Buffer, parameters, NULL, NULL); - //KdPrint(( "AtapiCheckRegValue: %ws -> %ws is %#x\n", PathSuffix, Name, doRun)); + KdPrint(( "AtapiCheckRegValue: %ws -> %ws is %#x\n", PathSuffix, Name, doRun)); ExFreePool(paramPath.Buffer); diff --git a/reactos/drivers/storage/ide/uniata/id_init.cpp b/reactos/drivers/storage/ide/uniata/id_init.cpp index 526a60d2119..81265998761 100644 --- a/reactos/drivers/storage/ide/uniata/id_init.cpp +++ b/reactos/drivers/storage/ide/uniata/id_init.cpp @@ -68,6 +68,11 @@ UniataChipDetectChannels( deviceExtension->NumberChannels = 1; } + if(ChipFlags & (UNIATA_SATA | UNIATA_AHCI)) { + KdPrint2((PRINT_PREFIX "SATA/AHCI -> possible PM, max luns %d\n", SATA_MAX_PM_UNITS)); + //deviceExtension->NumberLuns = SATA_MAX_PM_UNITS; + } + switch(VendorID) { case ATA_ACER_LABS_ID: switch(deviceExtension->DevID) { @@ -102,8 +107,8 @@ UniataChipDetectChannels( case ATA_ATI_ID: KdPrint2((PRINT_PREFIX "ATI\n")); switch(deviceExtension->DevID) { - case 0x438c1002: - case 0x439c1002: + case ATA_ATI_IXP600: + case ATA_ATI_IXP700: /* IXP600 & IXP700 only have 1 PATA channel */ if(BMList[deviceExtension->DevIndex].channel) { KdPrint2((PRINT_PREFIX "New ATI no 2nd PATA chan\n")); @@ -142,6 +147,12 @@ UniataChipDetectChannels( deviceExtension->NumberChannels = 3; KdPrint2((PRINT_PREFIX "VIA 3 chan\n")); } + if(ChipFlags & VIASATA) { + /* 2 SATA without SATA registers on first channel + 1 PATA on second */ + // do nothing, generic PATA INIT + KdPrint2((PRINT_PREFIX "VIA SATA without SATA regs -> no PM\n")); + deviceExtension->NumberLuns = SATA_MAX_PM_UNITS; + } break; case ATA_ITE_ID: /* ITE ATA133 controller */ @@ -981,32 +992,14 @@ for_ugly_chips: IsPata = FALSE; if(ChipFlags & ICH5) { if ((tmp8 & 0x04) == 0) { - //ch->flags |= ATA_SATA; - //ch->flags |= ATA_NO_SLAVE; - //smap[0] = (map & 0x01) ^ ch->unit; - //smap[1] = 0; chan->ChannelCtrlFlags |= CTRFLAGS_NO_SLAVE; - chan->lun[0]->SATA_lun_map = (tmp8 & 0x01) ^ c; - chan->lun[1]->SATA_lun_map = 0; } else if ((tmp8 & 0x02) == 0) { - //ch->flags |= ATA_SATA; - //smap[0] = (map & 0x01) ? 1 : 0; - //smap[1] = (map & 0x01) ? 0 : 1; - if(c == 0) { - chan->lun[0]->SATA_lun_map = (tmp8 & 0x01) ? 1 : 0; - chan->lun[1]->SATA_lun_map = (tmp8 & 0x01) ? 0 : 1; - } else { + if(c != 0) { IsPata = TRUE; //chan->ChannelCtrlFlags |= CTRFLAGS_PATA; } } else if ((tmp8 & 0x02) != 0) { - //ch->flags |= ATA_SATA; - //smap[0] = (map & 0x01) ? 1 : 0; - //smap[1] = (map & 0x01) ? 0 : 1; - if(c == 1) { - chan->lun[0]->SATA_lun_map = (tmp8 & 0x01) ? 1 : 0; - chan->lun[1]->SATA_lun_map = (tmp8 & 0x01) ? 0 : 1; - } else { + if(c != 1) { IsPata = TRUE; //chan->ChannelCtrlFlags |= CTRFLAGS_PATA; } @@ -1014,28 +1007,16 @@ for_ugly_chips: } else if(ChipFlags & I6CH2) { chan->ChannelCtrlFlags |= CTRFLAGS_NO_SLAVE; - chan->lun[0]->SATA_lun_map = c ? 4 : 5; - chan->lun[1]->SATA_lun_map = 0; } else { switch(tmp8 & 0x03) { - case 0: - chan->lun[0]->SATA_lun_map = 0+c; - chan->lun[1]->SATA_lun_map = 2+c; - break; case 2: - if(c==0) { - chan->lun[0]->SATA_lun_map = 0; - chan->lun[1]->SATA_lun_map = 2; - } else { + if(c!=0) { // PATA IsPata = TRUE; } break; case 1: - if(c==1) { - chan->lun[0]->SATA_lun_map = 1; - chan->lun[1]->SATA_lun_map = 3; - } else { + if(c!=1) { // PATA IsPata = TRUE; } @@ -1045,9 +1026,11 @@ for_ugly_chips: if(IsPata) { chan->MaxTransferMode = min(deviceExtension->MaxTransferMode, ATA_UDMA5); + KdPrint2((PRINT_PREFIX "PATA part\n")); } else { if((ChipFlags & ICH5) && BaseMemAddress) { + KdPrint2((PRINT_PREFIX "ICH5 indexed\n")); chan->RegTranslation[IDX_INDEXED_ADDR].Addr = BaseMemAddress + 0; chan->RegTranslation[IDX_INDEXED_ADDR].MemIo = MemIo; chan->RegTranslation[IDX_INDEXED_DATA].Addr = BaseMemAddress + 4; @@ -1055,6 +1038,7 @@ for_ugly_chips: } if((ChipFlags & ICH5) || BaseMemAddress) { + KdPrint2((PRINT_PREFIX "i indexed\n")); // Rather interesting way of register access... ChipType = INTEL_IDX; deviceExtension->HwFlags &= ~CHIPTYPE_MASK; @@ -1085,6 +1069,10 @@ for_ugly_chips: } if(ChipFlags & UNIATA_AHCI) { + if(AtapiRegCheckDevValue(NULL, CHAN_NOT_SPECIFIED, DEVNUM_NOT_SPECIFIED, L"IgnoreAhci", 1)) { + KdPrint((" AHCI excluded\n")); + return STATUS_UNSUCCESSFUL; + } return UniataAhciInit(HwDeviceExtension) ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL; } @@ -1395,8 +1383,8 @@ UniAtaReadLunConfig( c = channel - deviceExtension->Channel; // logical channel chan = &deviceExtension->chan[c]; - ldev &= 0x01; - LunExt = &(deviceExtension->lun[c*2+ldev]); + ldev &= (deviceExtension->NumberLuns-1); + LunExt = &(deviceExtension->lun[c*deviceExtension->NumberLuns+ldev]); tmp32 = AtapiRegCheckDevValue(deviceExtension, channel, ldev, L"ReadCacheEnable", 1); LunExt->opt_ReadCacheEnable = tmp32 ? TRUE : FALSE; @@ -1441,6 +1429,7 @@ AtapiReadChipConfig( PHW_CHANNEL chan; ULONG tmp32; ULONG c; // logical channel (for Compatible Mode controllers) + ULONG i; KdPrint2((PRINT_PREFIX "AtapiReadChipConfig: devExt %#x\n", deviceExtension )); ASSERT(deviceExtension); @@ -1504,8 +1493,9 @@ AtapiReadChipConfig( tmp32 = AtapiRegCheckDevValue(deviceExtension, c, DEVNUM_NOT_SPECIFIED, L"ReorderEnable", TRUE); chan->UseReorder = tmp32 ? TRUE : FALSE; - UniAtaReadLunConfig(deviceExtension, channel, 0); - UniAtaReadLunConfig(deviceExtension, channel, 1); + for(i=0; iNumberLuns; i++) { + UniAtaReadLunConfig(deviceExtension, channel, i); + } } return TRUE; @@ -1656,25 +1646,104 @@ AtapiChipInit( } break; case ATA_INTEL_ID: { + BOOLEAN IsPata; USHORT reg54; + UCHAR tmp8; if(ChipFlags & UNIATA_SATA) { - if(ChipFlags & UNIATA_AHCI) + KdPrint2((PRINT_PREFIX "Intel SATA\n")); + if(ChipFlags & UNIATA_AHCI) { + KdPrint2((PRINT_PREFIX "Skip AHCI\n")); break; + } if(c == CHAN_NOT_SPECIFIED) { + KdPrint2((PRINT_PREFIX "Base init\n")); /* force all ports active "the legacy way" */ ChangePciConfig2(0x92, (a | 0x0f)); /* enable PCI interrupt */ ChangePciConfig2(/*PCIR_COMMAND*/0x04, (a & ~0x0400)); + } else { + + KdPrint2((PRINT_PREFIX "channel init\n")); + + GetPciConfig1(0x90, tmp8); + KdPrint2((PRINT_PREFIX "reg 90: %x, init lun map\n", tmp8)); + + KdPrint2((PRINT_PREFIX "chan %d\n", c)); + chan = &deviceExtension->chan[c]; + IsPata = FALSE; + if(ChipFlags & ICH5) { + KdPrint2((PRINT_PREFIX "ICH5\n")); + if ((tmp8 & 0x04) == 0) { + chan->ChannelCtrlFlags |= CTRFLAGS_NO_SLAVE; + chan->lun[0]->SATA_lun_map = (tmp8 & 0x01) ^ c; + chan->lun[1]->SATA_lun_map = 0; + } else if ((tmp8 & 0x02) == 0) { + if(c == 0) { + chan->lun[0]->SATA_lun_map = (tmp8 & 0x01) ? 1 : 0; + chan->lun[1]->SATA_lun_map = (tmp8 & 0x01) ? 0 : 1; + } else { + IsPata = TRUE; + //chan->ChannelCtrlFlags |= CTRFLAGS_PATA; + } + } else if ((tmp8 & 0x02) != 0) { + if(c == 1) { + chan->lun[0]->SATA_lun_map = (tmp8 & 0x01) ? 1 : 0; + chan->lun[1]->SATA_lun_map = (tmp8 & 0x01) ? 0 : 1; + } else { + IsPata = TRUE; + //chan->ChannelCtrlFlags |= CTRFLAGS_PATA; + } + } + } else + if(ChipFlags & I6CH2) { + KdPrint2((PRINT_PREFIX "I6CH2\n")); + chan->ChannelCtrlFlags |= CTRFLAGS_NO_SLAVE; + chan->lun[0]->SATA_lun_map = c ? 4 : 5; + chan->lun[1]->SATA_lun_map = 0; + } else { + KdPrint2((PRINT_PREFIX "other Intel\n")); + switch(tmp8 & 0x03) { + case 0: + chan->lun[0]->SATA_lun_map = 0+c; + chan->lun[1]->SATA_lun_map = 2+c; + break; + case 2: + if(c==0) { + chan->lun[0]->SATA_lun_map = 0; + chan->lun[1]->SATA_lun_map = 2; + } else { + // PATA + IsPata = TRUE; + } + break; + case 1: + if(c==1) { + chan->lun[0]->SATA_lun_map = 1; + chan->lun[1]->SATA_lun_map = 3; + } else { + // PATA + IsPata = TRUE; + } + break; + } + } + + if(IsPata) { + KdPrint2((PRINT_PREFIX "PATA part\n")); + chan->MaxTransferMode = min(deviceExtension->MaxTransferMode, ATA_UDMA5); + } + if(ChipType == INTEL_IDX) { - for(c=0; cNumberChannels; c++) { + KdPrint2((PRINT_PREFIX "i indexed\n")); + //for(c=0; cNumberChannels; c++) { chan = &deviceExtension->chan[c]; UniataSataWritePort4(chan, IDX_SATA_SError, 0xffffffff, 0); if(!(chan->ChannelCtrlFlags & CTRFLAGS_NO_SLAVE)) { UniataSataWritePort4(chan, IDX_SATA_SError, 0xffffffff, 1); } - } + //} } } @@ -2141,3 +2210,30 @@ UniataInitSyncBaseIO( RtlCopyMemory(&chan->RegTranslation[IDX_IO1_o], &chan->RegTranslation[IDX_IO1], IDX_IO1_SZ*sizeof(chan->RegTranslation[0])); RtlCopyMemory(&chan->RegTranslation[IDX_IO2_o], &chan->RegTranslation[IDX_IO2], IDX_IO2_SZ*sizeof(chan->RegTranslation[0])); } // end UniataInitSyncBaseIO() + +VOID +NTAPI +AtapiSetupLunPtrs( + IN PHW_CHANNEL chan, + IN PHW_DEVICE_EXTENSION deviceExtension, + IN ULONG c + ) +{ + ULONG i; + + if(!deviceExtension->NumberLuns) { + deviceExtension->NumberLuns = IDE_MAX_LUN_PER_CHAN; + } + chan->DeviceExtension = deviceExtension; + chan->lChannel = c; + chan->NumberLuns = deviceExtension->NumberLuns; + for(i=0; iNumberLuns; i++) { + chan->lun[i] = &(deviceExtension->lun[c*deviceExtension->NumberLuns+i]); + } + chan->AltRegMap = deviceExtension->AltRegMap; + chan->NextDpcChan = -1; + for(i=0; iNumberLuns; i++) { + chan->lun[i]->DeviceExtension = deviceExtension; + } +} // end AtapiSetupLunPtrs() + diff --git a/reactos/drivers/storage/ide/uniata/id_probe.cpp b/reactos/drivers/storage/ide/uniata/id_probe.cpp index 2752b2a6747..00eab9bec7b 100644 --- a/reactos/drivers/storage/ide/uniata/id_probe.cpp +++ b/reactos/drivers/storage/ide/uniata/id_probe.cpp @@ -145,6 +145,11 @@ AtapiGetIoRange( ScsiPortConvertUlongToPhysicalAddress(io_start); (*ConfigInfo->AccessRanges)[rid].RangeLength = length; } + if((pciData->u.type0.BaseAddresses[rid] & PCI_ADDRESS_IO_SPACE)) { + (*ConfigInfo->AccessRanges)[rid].RangeInMemory = FALSE; + } else { + (*ConfigInfo->AccessRanges)[rid].RangeInMemory = TRUE; + } } else { io_start = 0; } @@ -252,6 +257,7 @@ UniataEnumBusMasterController__( BOOLEAN found; BOOLEAN known; + BOOLEAN NeedPciAltInit; UCHAR IrqForCompat = 10; @@ -269,6 +275,7 @@ UniataEnumBusMasterController__( for(pass=0; pass<3; pass++) { for(busNumber=0 ;busNumberMasterDev = IsMasterDev(&pciData) ? 1 : 0; newBMListPtr->busNumber = busNumber; + newBMListPtr->NeedAltInit = NeedPciAltInit; newBMListPtr->Known = known; - KdPrint2((PRINT_PREFIX "Add to BMList\n")); + KdPrint2((PRINT_PREFIX "Add to BMList, AltInit %d\n", NeedPciAltInit)); } else { KdPrint2((PRINT_PREFIX "count: BMListLen++\n")); } @@ -812,12 +825,12 @@ UniataAllocateLunExt( } } - deviceExtension->lun = (PHW_LU_EXTENSION)ExAllocatePool(NonPagedPool, sizeof(HW_LU_EXTENSION) * (deviceExtension->NumberChannels+1) * IDE_MAX_LUN_PER_CHAN); + deviceExtension->lun = (PHW_LU_EXTENSION)ExAllocatePool(NonPagedPool, sizeof(HW_LU_EXTENSION) * (deviceExtension->NumberChannels+1) * deviceExtension->NumberLuns); if (!deviceExtension->lun) { KdPrint2((PRINT_PREFIX "!deviceExtension->lun => SP_RETURN_ERROR\n")); return FALSE; } - RtlZeroMemory(deviceExtension->lun, sizeof(HW_LU_EXTENSION) * (deviceExtension->NumberChannels+1) * IDE_MAX_LUN_PER_CHAN); + RtlZeroMemory(deviceExtension->lun, sizeof(HW_LU_EXTENSION) * (deviceExtension->NumberChannels+1) * deviceExtension->NumberLuns); deviceExtension->chan = (PHW_CHANNEL)ExAllocatePool(NonPagedPool, sizeof(HW_CHANNEL) * (deviceExtension->NumberChannels+1)); if (!deviceExtension->chan) { @@ -1025,7 +1038,8 @@ UniataFindBusMasterController( deviceExtension->SystemIoBusNumber = SystemIoBusNumber; deviceExtension->DevID = dev_id; deviceExtension->RevID = RevID; - deviceExtension->NumberChannels = 2; // default + deviceExtension->NumberChannels = IDE_DEFAULT_MAX_CHAN; // default + deviceExtension->NumberLuns = IDE_MAX_LUN_PER_CHAN; // default deviceExtension->DevIndex = i; _snprintf(deviceExtension->Signature, sizeof(deviceExtension->Signature), @@ -1266,9 +1280,9 @@ UniataFindBusMasterController( } if(simplexOnly && MasterDev) { - if(deviceExtension->NumberChannels < 2) { - KdPrint2((PRINT_PREFIX "set NumberChannels = 2\n")); - deviceExtension->NumberChannels = 2; + if(deviceExtension->NumberChannels < IDE_DEFAULT_MAX_CHAN) { + KdPrint2((PRINT_PREFIX "set NumberChannels = %d\n", IDE_DEFAULT_MAX_CHAN)); + deviceExtension->NumberChannels = IDE_DEFAULT_MAX_CHAN; if(BaseIoAddressBM_0) { UniataInitMapBM(deviceExtension, BaseIoAddressBM_0, @@ -1289,7 +1303,7 @@ UniataFindBusMasterController( KdPrint2((PRINT_PREFIX "set ConfigInfo->InitiatorBusId[0] = %#x\n", ConfigInfo->InitiatorBusId[0])); } // Indicate four devices can be attached to the adapter - ConfigInfo->MaximumNumberOfTargets = (UCHAR)(/*deviceExtension->NumberChannels **/ 2); + ConfigInfo->MaximumNumberOfTargets = (UCHAR)(deviceExtension->NumberLuns); if (MasterDev) { KdPrint2((PRINT_PREFIX "MasterDev (2)\n")); @@ -1461,6 +1475,15 @@ UniataFindBusMasterController( (*ConfigInfo->AccessRanges)[4].RangeStart = ScsiPortConvertUlongToPhysicalAddress(0); (*ConfigInfo->AccessRanges)[4].RangeLength = 0; } + } else + if(AltInit && + !(*ConfigInfo->AccessRanges)[channel * 2 + 0].RangeStart.QuadPart && + !(*ConfigInfo->AccessRanges)[channel * 2 + 1].RangeStart.QuadPart) { + KdPrint2((PRINT_PREFIX "cheat ScsiPort, sync real PCI and ConfigInfo IO ranges\n")); + AtapiGetIoRange(HwDeviceExtension, ConfigInfo, &pciData, SystemIoBusNumber, + channel * 2 + 0, 0, ATA_IOSIZE); + AtapiGetIoRange(HwDeviceExtension, ConfigInfo, &pciData, SystemIoBusNumber, + channel * 2 + 1, 0, ATA_ALTIOSIZE); } IoBasePort1 = (*ConfigInfo->AccessRanges)[channel * 2 + 0].RangeStart; @@ -1860,7 +1883,8 @@ UniataFindFakeBusMasterController( deviceExtension->SystemIoBusNumber = SystemIoBusNumber; deviceExtension->DevID = dev_id; deviceExtension->RevID = RevID; - deviceExtension->NumberChannels = 2; // default + deviceExtension->NumberChannels = IDE_DEFAULT_MAX_CHAN; // default + deviceExtension->NumberLuns = IDE_MAX_LUN_PER_CHAN; // default deviceExtension->DevIndex = i; _snprintf(deviceExtension->Signature, sizeof(deviceExtension->Signature), @@ -2291,6 +2315,7 @@ AtapiFindController( KdPrint2((PRINT_PREFIX " assume max PIO4\n")); deviceExtension->MaxTransferMode = ATA_PIO4; deviceExtension->NumberChannels = 1; + deviceExtension->NumberLuns = IDE_MAX_LUN_PER_CHAN; // default if(!UniataAllocateLunExt(deviceExtension, UNIATA_ALLOCATE_NEW_LUNS)) { goto exit_error; @@ -2525,7 +2550,7 @@ not_found: } ConfigInfo->NumberOfBuses = 1; - ConfigInfo->MaximumNumberOfTargets = 2; + ConfigInfo->MaximumNumberOfTargets = IDE_MAX_LUN_PER_CHAN; // Indicate maximum transfer length is 64k. ConfigInfo->MaximumTransferLength = 0x10000; @@ -2970,7 +2995,7 @@ FindDevices( // Clear expecting interrupt flag and current SRB field. chan->ExpectingInterrupt = FALSE; // chan->CurrentSrb = NULL; - max_ldev = (chan->ChannelCtrlFlags & CTRFLAGS_NO_SLAVE) ? 1 : 2; + max_ldev = (chan->ChannelCtrlFlags & CTRFLAGS_NO_SLAVE) ? 1 : IDE_MAX_LUN_PER_CHAN; KdPrint2((PRINT_PREFIX " max_ldev %d\n", max_ldev)); // Search for devices. diff --git a/reactos/drivers/storage/ide/uniata/id_sata.cpp b/reactos/drivers/storage/ide/uniata/id_sata.cpp index c6dd47df6d0..7ab242a44cc 100644 --- a/reactos/drivers/storage/ide/uniata/id_sata.cpp +++ b/reactos/drivers/storage/ide/uniata/id_sata.cpp @@ -380,32 +380,64 @@ UniataAhciInit( ULONG BaseMemAddress; ULONG PI; ULONG CAP; + ULONG GHC; BOOLEAN MemIo; ULONGLONG base; /* reset AHCI controller */ - AtapiWritePortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC, - AtapiReadPortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC) | AHCI_GHC_HR); - AtapiStallExecution(1000000); - if(AtapiReadPortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC) & AHCI_GHC_HR) { + GHC = AtapiReadPortEx4(NULL, (ULONG_PTR)&deviceExtension->BaseIoAHCI_0, IDX_AHCI_GHC); + KdPrint2((PRINT_PREFIX " reset AHCI controller, GHC %x\n", GHC)); + AtapiWritePortEx4(NULL, (ULONG_PTR)&deviceExtension->BaseIoAHCI_0, IDX_AHCI_GHC, + GHC | AHCI_GHC_HR); + + for(i=0; i<1000; i++) { + AtapiStallExecution(1000); + GHC = AtapiReadPortEx4(NULL, (ULONG_PTR)&deviceExtension->BaseIoAHCI_0, IDX_AHCI_GHC); + KdPrint2((PRINT_PREFIX " AHCI GHC %x\n", GHC)); + if(!(GHC & AHCI_GHC_HR)) { + break; + } + } + if(GHC & AHCI_GHC_HR) { KdPrint2((PRINT_PREFIX " AHCI reset failed\n")); return FALSE; } /* enable AHCI mode */ - AtapiWritePortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC, - AtapiReadPortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC) | AHCI_GHC_AE); + GHC = AtapiReadPortEx4(NULL, (ULONG_PTR)&deviceExtension->BaseIoAHCI_0, IDX_AHCI_GHC); + KdPrint2((PRINT_PREFIX " enable AHCI mode, GHC %x\n", GHC)); + AtapiWritePortEx4(NULL, (ULONG_PTR)&deviceExtension->BaseIoAHCI_0, IDX_AHCI_GHC, + GHC | AHCI_GHC_AE); + GHC = AtapiReadPortEx4(NULL, (ULONG_PTR)&deviceExtension->BaseIoAHCI_0, IDX_AHCI_GHC); + KdPrint2((PRINT_PREFIX " AHCI GHC %x\n", GHC)); + CAP = AtapiReadPortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_CAP); PI = AtapiReadPortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_PI); - /* get the number of HW channels */ - for(i=PI, n=0; i; n++, i=i>>1); - deviceExtension->NumberChannels = - max((CAP & AHCI_CAP_NOP_MASK)+1, n); + KdPrint2((PRINT_PREFIX " AHCI CAP %x\n", CAP)); if(CAP & AHCI_CAP_S64A) { KdPrint2((PRINT_PREFIX " AHCI 64bit\n")); deviceExtension->Host64 = TRUE; } + /* get the number of HW channels */ + PI = AtapiReadPortEx4(NULL, (ULONG)&deviceExtension->BaseIoAHCI_0, IDX_AHCI_PI); + KdPrint2((PRINT_PREFIX " AHCI PI %x\n", PI)); + for(i=PI, n=0; i; n++, i=i>>1); + deviceExtension->NumberChannels = + max((CAP & AHCI_CAP_NOP_MASK)+1, n); + + switch(deviceExtension->DevID) { + case ATA_M88SX6111: + deviceExtension->NumberChannels = 1; + break; + case ATA_M88SX6121: + deviceExtension->NumberChannels = 2; + break; + case ATA_M88SX6141: + case ATA_M88SX6145: + deviceExtension->NumberChannels = 4; + break; + } // switch() /* clear interrupts */ AtapiWritePortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_IS, @@ -416,10 +448,13 @@ UniataAhciInit( AtapiReadPortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC) | AHCI_GHC_IE); version = AtapiReadPortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_VS); - KdPrint2((PRINT_PREFIX " AHCI version %x%x.%x%x controller with %d ports (mask %x) detected\n", - (version >> 24) & 0xff, (version >> 16) & 0xff, - (version >> 8) & 0xff, version & 0xff, deviceExtension->NumberChannels, PI)); + KdPrint2((PRINT_PREFIX " AHCI version %x.%02x controller with %d ports (mask %x) detected\n", + ((version >> 20) & 0xf0) + ((version >> 16) & 0x0f), + ((version >> 4) & 0xf0) + (version & 0x0f), + deviceExtension->NumberChannels, PI)); + KdPrint2((PRINT_PREFIX " PM%s supported\n", + CAP & AHCI_CAP_SPM ? "" : " not")); deviceExtension->HwFlags |= UNIATA_SATA; deviceExtension->HwFlags |= UNIATA_AHCI; diff --git a/reactos/drivers/storage/ide/uniata/uata_ctl.h b/reactos/drivers/storage/ide/uniata/uata_ctl.h index b199d2b8e51..560b1d87fad 100644 --- a/reactos/drivers/storage/ide/uniata/uata_ctl.h +++ b/reactos/drivers/storage/ide/uniata/uata_ctl.h @@ -43,9 +43,9 @@ extern "C" { #endif //__cplusplus #define AHCI_MAX_PORT 32 -#define IDE_MAX_CHAN 8 +#define IDE_MAX_CHAN 16 // Thanks to SATA Port Multipliers: -#define IDE_MAX_LUN_PER_CHAN 16 +#define IDE_MAX_LUN_PER_CHAN 2 #define IDE_MAX_LUN (AHCI_MAX_PORT*IDE_MAX_LUN_PER_CHAN) #define MAX_QUEUE_STAT 8 diff --git a/reactos/drivers/storage/ide/uniata/uniata_ver.h b/reactos/drivers/storage/ide/uniata/uniata_ver.h index 5cfcf462cc9..381ae7b73db 100644 --- a/reactos/drivers/storage/ide/uniata/uniata_ver.h +++ b/reactos/drivers/storage/ide/uniata/uniata_ver.h @@ -1,6 +1,6 @@ -#define UNIATA_VER_STR "40a1" -#define UNIATA_VER_DOT 0.40.1.1 -#define UNIATA_VER_DOT_COMMA 0,40,1,1 -#define UNIATA_VER_DOT_STR "0.40.1.1" +#define UNIATA_VER_STR "40a5" +#define UNIATA_VER_DOT 0.40.1.5 +#define UNIATA_VER_DOT_COMMA 0,40,1,5 +#define UNIATA_VER_DOT_STR "0.40.1.5" #define UNIATA_VER_YEAR 2010 #define UNIATA_VER_YEAR_STR "2010" From d53444e50b8c99331c4679c37eeba96599f6c98a Mon Sep 17 00:00:00 2001 From: James Tabor Date: Mon, 7 Mar 2011 06:24:38 +0000 Subject: [PATCH 230/287] [Win32k] - Fix a crash in WidenPath, tested with Area.exe. svn path=/trunk/; revision=50986 --- reactos/subsystems/win32/win32k/objects/path.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/subsystems/win32/win32k/objects/path.c b/reactos/subsystems/win32/win32k/objects/path.c index 1ff5f429a52..0b1a7aa512c 100644 --- a/reactos/subsystems/win32/win32k/objects/path.c +++ b/reactos/subsystems/win32/win32k/objects/path.c @@ -1858,7 +1858,7 @@ PATH_WidenPath(DC *dc) PATH_DestroyGdiPath(pDownPath); ExFreePoolWithTag(pDownPath, TAG_PATH); } - ExFreePoolWithTag(pStrokes, TAG_PATH); + if (pStrokes) ExFreePoolWithTag(pStrokes, TAG_PATH); pNewPath->state = PATH_Closed; if (!(ret = PATH_AssignGdiPath(pPath, pNewPath))) From b84b85e485f602343d55c7a40aa9cf1844fe999e Mon Sep 17 00:00:00 2001 From: James Tabor Date: Mon, 7 Mar 2011 07:24:43 +0000 Subject: [PATCH 231/287] [GDI32] - Remove the old SetDIBBits, it severed us well.... Hold on to the win32k call. - Tested, Area.exe, wine gdi32 bitmaps test, AbiWord 2.8.6, OOo 2.4.3, SM 2.0.11 and ReactOS applications. - Aimp 2.61.583 (FULL, pinted okay), CoolPlayer 219, winamp 0.98d and winamp 2.95 (not FUll). The rest have drawing issue with DIB. See bug 5886. svn path=/trunk/; revision=50987 --- reactos/dll/win32/gdi32/objects/bitmap.c | 55 ------------------------ 1 file changed, 55 deletions(-) diff --git a/reactos/dll/win32/gdi32/objects/bitmap.c b/reactos/dll/win32/gdi32/objects/bitmap.c index 969beb6ad44..024ac81f4cb 100644 --- a/reactos/dll/win32/gdi32/objects/bitmap.c +++ b/reactos/dll/win32/gdi32/objects/bitmap.c @@ -531,7 +531,6 @@ CreateDIBitmap( HDC hDC, return hBmp; } -#if 0 // FIXME!!! This is a victim of the Win32k Initialization BUG!!!!! /* * @implemented */ @@ -623,60 +622,6 @@ SetDIBits(HDC hDC, return LinesCopied; } -#endif - -INT -WINAPI -SetDIBits(HDC hdc, - HBITMAP hbmp, - UINT uStartScan, - UINT cScanLines, - CONST VOID *lpvBits, - CONST BITMAPINFO *lpbmi, - UINT fuColorUse) -{ - PBITMAPINFO pConvertedInfo; - UINT ConvertedInfoSize; - INT LinesCopied = 0; - UINT cjBmpScanSize = 0; - PVOID pvSafeBits = (PVOID)lpvBits; - -// This needs to be almost the sames as SetDIBitsToDevice - - if ( !cScanLines || !lpbmi || !lpvBits || (GDI_HANDLE_GET_TYPE(hbmp) != GDI_OBJECT_TYPE_BITMAP)) - return 0; - - if ( fuColorUse && fuColorUse != DIB_PAL_COLORS && fuColorUse != DIB_PAL_COLORS+1 ) - return 0; - - pConvertedInfo = ConvertBitmapInfo(lpbmi, fuColorUse, - &ConvertedInfoSize, FALSE); - if (!pConvertedInfo) - return 0; - - cjBmpScanSize = DIB_BitmapMaxBitsSize((LPBITMAPINFO)lpbmi, cScanLines); - - if ( lpvBits ) - { - pvSafeBits = RtlAllocateHeap(GetProcessHeap(), 0, cjBmpScanSize); - if (pvSafeBits) - RtlCopyMemory( pvSafeBits, lpvBits, cjBmpScanSize); - } - - LinesCopied = NtGdiSetDIBits( hdc, - hbmp, - uStartScan, - cScanLines, - pvSafeBits, - pConvertedInfo, - fuColorUse); - - if ( lpvBits != pvSafeBits) - RtlFreeHeap(RtlGetProcessHeap(), 0, pvSafeBits); - if (lpbmi != pConvertedInfo) - RtlFreeHeap(RtlGetProcessHeap(), 0, pConvertedInfo); - return LinesCopied; -} /* * @implemented From 4ed72ce5b7672ac05d2be1f323189ff5182372ce Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 7 Mar 2011 09:53:03 +0000 Subject: [PATCH 232/287] [WIN32K] Fix the RLE hack (partly) svn path=/trunk/; revision=50988 --- .../subsystems/win32/win32k/objects/bitmaps.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/bitmaps.c b/reactos/subsystems/win32/win32k/objects/bitmaps.c index 96b75bbdc5c..c6b9dfee78a 100644 --- a/reactos/subsystems/win32/win32k/objects/bitmaps.c +++ b/reactos/subsystems/win32/win32k/objects/bitmaps.c @@ -82,8 +82,6 @@ GreCreateBitmapEx( PSURFACE psurf; SURFOBJ *pso; HBITMAP hbmp; - PVOID pvCompressedBits; - SIZEL sizl; /* Verify format */ if (iFormat < BMF_1BPP || iFormat > BMF_PNG) return NULL; @@ -103,22 +101,31 @@ GreCreateBitmapEx( /* The infamous RLE hack */ if (iFormat == BMF_4RLE || iFormat == BMF_8RLE) { + PVOID pvCompressedBits; + SIZEL sizl; + LONG lDelta; + sizl.cx = nWidth; sizl.cy = nHeight; + lDelta = WIDTH_BYTES_ALIGN32(nWidth, gajBitsPerFormat[iFormat]); + pvCompressedBits = pvBits; - pvBits = EngAllocMem(FL_ZERO_MEMORY, pso->cjBits, TAG_DIB); + pvBits = EngAllocMem(FL_ZERO_MEMORY, lDelta * nHeight, TAG_DIB); if (!pvBits) { EngSetLastError(ERROR_NOT_ENOUGH_MEMORY); SURFACE_FreeSurfaceByHandle(hbmp); return NULL; } - DecompressBitmap(sizl, pvCompressedBits, pvBits, pso->lDelta, iFormat); + DecompressBitmap(sizl, pvCompressedBits, pvBits, lDelta, iFormat); fjBitmap |= BMF_RLE_HACK; + + iFormat = iFormat == BMF_4RLE ? BMF_4BPP : BMF_8BPP; + psurf->SurfObj.iBitmapFormat = iFormat; } - /* Mark as API bitmap */ - psurf->flags |= (flags | API_BITMAP); + /* Mark as API bitmap */ + psurf->flags |= (flags | API_BITMAP); /* Set the bitmap bits */ if (!SURFACE_bSetBitmapBits(psurf, fjBitmap, cjWidthBytes, pvBits)) From 3491d67b480f50d234db0c692e93e91b58afc809 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 7 Mar 2011 10:00:27 +0000 Subject: [PATCH 233/287] [WIN32K] Use GreCreateBitmapEx instead of EngCreateBitmap in NtGdiSetDIBitsToDeviceInternal, so that the RLE hack works. Fix initialization of XLATEOBJ. svn path=/trunk/; revision=50989 --- .../subsystems/win32/win32k/objects/dibobj.c | 36 ++++++++++++++----- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/dibobj.c b/reactos/subsystems/win32/win32k/objects/dibobj.c index 79509c71127..5ad86dcab4d 100644 --- a/reactos/subsystems/win32/win32k/objects/dibobj.c +++ b/reactos/subsystems/win32/win32k/objects/dibobj.c @@ -463,7 +463,7 @@ NtGdiSetDIBitsToDeviceInternal( rcDest.top = YDest; if (bTransformCoordinates) { - CoordLPtoDP(pDC, (LPPOINT)&rcDest); + IntLPtoDP(pDC, (LPPOINT)&rcDest, 2); } rcDest.left += pDC->ptlDCOrig.x; rcDest.top += pDC->ptlDCOrig.y; @@ -479,12 +479,16 @@ NtGdiSetDIBitsToDeviceInternal( DIBWidth = WIDTH_BYTES_ALIGN32(SourceSize.cx, bmi->bmiHeader.biBitCount); - hSourceBitmap = EngCreateBitmap(SourceSize, - DIBWidth, - BitmapFormat(bmi->bmiHeader.biBitCount, - bmi->bmiHeader.biCompression), - bmi->bmiHeader.biHeight < 0 ? BMF_TOPDOWN : 0, - (PVOID) Bits); + hSourceBitmap = GreCreateBitmapEx(bmi->bmiHeader.biWidth, + ScanLines, + 0, + BitmapFormat(bmi->bmiHeader.biBitCount, + bmi->bmiHeader.biCompression), + bmi->bmiHeader.biHeight < 0 ? BMF_TOPDOWN : 0, + bmi->bmiHeader.biSizeImage, + Bits, + 0); + if (!hSourceBitmap) { EngSetLastError(ERROR_NO_SYSTEM_RESOURCES); @@ -520,7 +524,12 @@ NtGdiSetDIBitsToDeviceInternal( } /* Initialize EXLATEOBJ */ - EXLATEOBJ_vInitialize(&exlo, ppalDIB, pSurf->ppal, 0, 0, 0); + EXLATEOBJ_vInitialize(&exlo, + ppalDIB, + pSurf->ppal, + RGB(0xff, 0xff, 0xff), + pDC->pdcattr->crBackgroundClr, + pDC->pdcattr->crForegroundClr); /* Copy the bits */ DPRINT("BitsToDev with dstsurf=(%d|%d) (%d|%d), src=(%d|%d) w=%d h=%d\n", @@ -1433,6 +1442,7 @@ DIB_CreateDIBSection( /* CreateDIBSection should fail for compressed formats */ if (bi->biCompression == BI_RLE4 || bi->biCompression == BI_RLE8) { + DPRINT1("no compressed format allowed\n"); return (HBITMAP)NULL; } @@ -1465,6 +1475,7 @@ DIB_CreateDIBSection( 0); if (!NT_SUCCESS(Status)) { + DPRINT1("ZwQuerySystemInformation failed (0x%lx)\n", Status); return NULL; } @@ -1486,6 +1497,7 @@ DIB_CreateDIBSection( PAGE_READWRITE); if (!NT_SUCCESS(Status)) { + DPRINT1("ZwMapViewOfSection failed (0x%lx)\n", Status); EngSetLastError(ERROR_INVALID_PARAMETER); return NULL; } @@ -1498,7 +1510,11 @@ DIB_CreateDIBSection( { offset = 0; bm.bmBits = EngAllocUserMem(totalSize, 0); - if(!bm.bmBits) goto cleanup; + if(!bm.bmBits) + { + DPRINT1("Failed to allocate memory\n"); + goto cleanup; + } } // hSecure = MmSecureVirtualMemory(bm.bmBits, totalSize, PAGE_READWRITE); @@ -1546,12 +1562,14 @@ DIB_CreateDIBSection( 0); if (!res) { + DPRINT1("GreCreateBitmapEx failed\n"); EngSetLastError(ERROR_NO_SYSTEM_RESOURCES); goto cleanup; } bmp = SURFACE_LockSurface(res); if (NULL == bmp) { + DPRINT1("SURFACE_LockSurface failed\n"); EngSetLastError(ERROR_INVALID_HANDLE); goto cleanup; } From 527622e72fafec44a0cb15567a9647a93d8bc63d Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Mon, 7 Mar 2011 12:01:17 +0000 Subject: [PATCH 234/287] [SETUPAPI] Implement CM_Query_Arbitrator_Free_Data[_Ex] and CM_Query_Arbitrator_Free_Size[_Ex]. svn path=/trunk/; revision=50990 --- reactos/dll/win32/setupapi/cfgmgr.c | 157 +++++++++++++++++++++++ reactos/dll/win32/setupapi/setupapi.spec | 8 +- 2 files changed, 161 insertions(+), 4 deletions(-) diff --git a/reactos/dll/win32/setupapi/cfgmgr.c b/reactos/dll/win32/setupapi/cfgmgr.c index 37058042519..482dbbabcd4 100644 --- a/reactos/dll/win32/setupapi/cfgmgr.c +++ b/reactos/dll/win32/setupapi/cfgmgr.c @@ -4137,6 +4137,163 @@ CONFIGRET WINAPI CM_Query_And_Remove_SubTree_ExW( } +/*********************************************************************** + * CM_Query_Arbitrator_Free_Data [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Query_Arbitrator_Free_Data( + PVOID pData, ULONG DataLen, DEVINST dnDevInst, RESOURCEID ResourceID, + ULONG ulFlags) +{ + TRACE("%p %lu %lx %lu 0x%08lx\n", pData, DataLen, dnDevInst, + ResourceID, ulFlags); + + return CM_Query_Arbitrator_Free_Data_Ex(pData, DataLen, dnDevInst, + ResourceID, ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Query_Arbitrator_Free_Data_Ex [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Query_Arbitrator_Free_Data_Ex( + OUT PVOID pData, + IN ULONG DataLen, + IN DEVINST dnDevInst, + IN RESOURCEID ResourceID, + IN ULONG ulFlags, + IN HMACHINE hMachine) +{ + RPC_BINDING_HANDLE BindingHandle = NULL; + HSTRING_TABLE StringTable = NULL; + LPWSTR lpDevInst; + CONFIGRET ret; + + TRACE("%p %lu %lx %lu 0x%08lx %p\n", pData, DataLen, dnDevInst, + ResourceID, ulFlags, hMachine); + + if (pData == NULL || DataLen == 0) + return CR_INVALID_POINTER; + + if (dnDevInst == 0) + return CR_INVALID_DEVINST; + + if (ulFlags & ~CM_QUERY_ARBITRATOR_BITS) + return CR_INVALID_FLAG; + + if (hMachine != NULL) + { + BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle; + if (BindingHandle == NULL) + return CR_FAILURE; + + StringTable = ((PMACHINE_INFO)hMachine)->StringTable; + if (StringTable == 0) + return CR_FAILURE; + } + else + { + if (!PnpGetLocalHandles(&BindingHandle, &StringTable)) + return CR_FAILURE; + } + + lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst); + if (lpDevInst == NULL) + return CR_INVALID_DEVNODE; + + RpcTryExcept + { + ret = PNP_QueryArbitratorFreeData(BindingHandle, + pData, + DataLen, + lpDevInst, + ResourceID, + ulFlags); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + ret = RpcStatusToCmStatus(RpcExceptionCode()); + } + RpcEndExcept; + + return ret; +} + + +/*********************************************************************** + * CM_Query_Arbitrator_Free_Size [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Query_Arbitrator_Free_Size( + PULONG pulSize, DEVINST dnDevInst, RESOURCEID ResourceID, ULONG ulFlags) +{ + TRACE("%p %lu %lx 0x%08lx\n", pulSize, dnDevInst,ResourceID, ulFlags); + + return CM_Query_Arbitrator_Free_Size_Ex(pulSize, dnDevInst, ResourceID, + ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Query_Arbitrator_Free_Size_Ex [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Query_Arbitrator_Free_Size_Ex( + PULONG pulSize, DEVINST dnDevInst, RESOURCEID ResourceID, + ULONG ulFlags, HMACHINE hMachine) +{ + RPC_BINDING_HANDLE BindingHandle = NULL; + HSTRING_TABLE StringTable = NULL; + LPWSTR lpDevInst; + CONFIGRET ret; + + TRACE("%p %lu %lx 0x%08lx %p\n", pulSize, dnDevInst,ResourceID, ulFlags, + hMachine); + + if (pulSize == NULL) + return CR_INVALID_POINTER; + + if (dnDevInst == 0) + return CR_INVALID_DEVINST; + + if (ulFlags & ~CM_QUERY_ARBITRATOR_BITS) + return CR_INVALID_FLAG; + + if (hMachine != NULL) + { + BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle; + if (BindingHandle == NULL) + return CR_FAILURE; + + StringTable = ((PMACHINE_INFO)hMachine)->StringTable; + if (StringTable == 0) + return CR_FAILURE; + } + else + { + if (!PnpGetLocalHandles(&BindingHandle, &StringTable)) + return CR_FAILURE; + } + + lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst); + if (lpDevInst == NULL) + return CR_INVALID_DEVNODE; + + RpcTryExcept + { + ret = PNP_QueryArbitratorFreeSize(BindingHandle, + pulSize, + lpDevInst, + ResourceID, + ulFlags); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + ret = RpcStatusToCmStatus(RpcExceptionCode()); + } + RpcEndExcept; + + return ret; +} + + /*********************************************************************** * CM_Query_Remove_SubTree [SETUPAPI.@] * diff --git a/reactos/dll/win32/setupapi/setupapi.spec b/reactos/dll/win32/setupapi/setupapi.spec index 18c0e0b7a28..5d54cbd1a83 100644 --- a/reactos/dll/win32/setupapi/setupapi.spec +++ b/reactos/dll/win32/setupapi/setupapi.spec @@ -159,10 +159,10 @@ @ stdcall CM_Query_And_Remove_SubTreeW(long ptr wstr long long) @ stdcall CM_Query_And_Remove_SubTree_ExA(long ptr str long long long) @ stdcall CM_Query_And_Remove_SubTree_ExW(long ptr wstr long long long) -@ stub CM_Query_Arbitrator_Free_Data -@ stub CM_Query_Arbitrator_Free_Data_Ex -@ stub CM_Query_Arbitrator_Free_Size -@ stub CM_Query_Arbitrator_Free_Size_Ex +@ stdcall CM_Query_Arbitrator_Free_Data(ptr long long long long) +@ stdcall CM_Query_Arbitrator_Free_Data_Ex(ptr long long long long ptr) +@ stdcall CM_Query_Arbitrator_Free_Size(ptr long long long) +@ stdcall CM_Query_Arbitrator_Free_Size_Ex(ptr long long long ptr) @ stdcall CM_Query_Remove_SubTree(long long) @ stdcall CM_Query_Remove_SubTree_Ex(long long long) @ stub CM_Query_Resource_Conflict_List From acd7f5a3da6b85bf5865ddd20456fd0c5061c8ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Mon, 7 Mar 2011 13:33:10 +0000 Subject: [PATCH 235/287] [NTOSKRNL] - Print supported CPU features. - Simplify detection of non working but claimed SYSENTER support for intel processors - Workaround a virtualbox "feature" : claim that SYSENTER isn't supported despite the fact that it is. Fix hang on registration of mshtml.dll in 2nd stage when using Virtualbox. svn path=/trunk/; revision=50991 --- reactos/ntoskrnl/ke/i386/cpu.c | 36 ++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/reactos/ntoskrnl/ke/i386/cpu.c b/reactos/ntoskrnl/ke/i386/cpu.c index 2606297c1b4..4b56a2b9f26 100644 --- a/reactos/ntoskrnl/ke/i386/cpu.c +++ b/reactos/ntoskrnl/ke/i386/cpu.c @@ -303,10 +303,16 @@ KiGetFeatureBits(VOID) /* Remove support for correct PTE support. */ FeatureBits &= ~KF_WORKING_PTE; } + + /* Virtualbox claims to have no SYSENTER support, + * which is false for processors >= Pentium Pro */ + if(Prcb->CpuType >= 6) + { + Reg[3] |= 0x800; + } /* Check if the CPU is too old to support SYSENTER */ - if ((Prcb->CpuType < 6) || - ((Prcb->CpuType == 6) && (Prcb->CpuStep < 0x0303))) + if ((Reg[0] & 0x0FFF3FFF) < 0x00000633) { /* Disable it */ Reg[3] &= ~0x800; @@ -474,6 +480,32 @@ KiGetFeatureBits(VOID) } } } + + DPRINT1("Supported CPU features :\n"); +#define print_supported(kf_value) \ + if(FeatureBits & kf_value) DPRINT1("\t" #kf_value "\n") + print_supported(KF_V86_VIS); + print_supported(KF_RDTSC); + print_supported(KF_CR4); + print_supported(KF_CMOV); + print_supported(KF_GLOBAL_PAGE); + print_supported(KF_LARGE_PAGE); + print_supported(KF_MTRR); + print_supported(KF_CMPXCHG8B); + print_supported(KF_MMX); + print_supported(KF_WORKING_PTE); + print_supported(KF_PAT); + print_supported(KF_FXSR); + print_supported(KF_FAST_SYSCALL); + print_supported(KF_XMMI); + print_supported(KF_3DNOW); + print_supported(KF_AMDK6MTRR); + print_supported(KF_XMMI64); + print_supported(KF_DTS); + print_supported(KF_NX_BIT); + print_supported(KF_NX_DISABLED); + print_supported(KF_NX_ENABLED); +#undef print_supported /* Return the Feature Bits */ return FeatureBits; From ba43b429b95492433c13f50343226b26ee512965 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Mon, 7 Mar 2011 13:51:46 +0000 Subject: [PATCH 236/287] [NTOS/FSRTL] - Remove unnecessary upcasing, thanks Pierre. svn path=/trunk/; revision=50992 --- reactos/ntoskrnl/fsrtl/name.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/fsrtl/name.c b/reactos/ntoskrnl/fsrtl/name.c index 268ea1af3e0..4cd096038db 100644 --- a/reactos/ntoskrnl/fsrtl/name.c +++ b/reactos/ntoskrnl/fsrtl/name.c @@ -85,7 +85,7 @@ FsRtlIsNameInExpressionPrivate(IN PUNICODE_STRING Expression, /* Now compare upcased name char with expression */ if (UpcaseTable[Name->Buffer[NamePosition + ExpressionPosition]] != - UpcaseTable[IntExpression.Buffer[ExpressionPosition]]) + IntExpression.Buffer[ExpressionPosition]) { return FALSE; } From f7049d7fb798c6e392ccc11c07b64742cd6c620d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Mon, 7 Mar 2011 18:45:11 +0000 Subject: [PATCH 237/287] [NTOSKRNL] - shrink cpu features output. - Add reference for the detection of non SYSENTER aware but claiming so CPUs detection svn path=/trunk/; revision=50993 --- reactos/ntoskrnl/ke/i386/cpu.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/reactos/ntoskrnl/ke/i386/cpu.c b/reactos/ntoskrnl/ke/i386/cpu.c index 4b56a2b9f26..b17a15199b8 100644 --- a/reactos/ntoskrnl/ke/i386/cpu.c +++ b/reactos/ntoskrnl/ke/i386/cpu.c @@ -311,7 +311,8 @@ KiGetFeatureBits(VOID) Reg[3] |= 0x800; } - /* Check if the CPU is too old to support SYSENTER */ + /* Check if the CPU is too old to support SYSENTER, + * See Intel CPUID instruction manual for details*/ if ((Reg[0] & 0x0FFF3FFF) < 0x00000633) { /* Disable it */ @@ -483,7 +484,7 @@ KiGetFeatureBits(VOID) DPRINT1("Supported CPU features :\n"); #define print_supported(kf_value) \ - if(FeatureBits & kf_value) DPRINT1("\t" #kf_value "\n") + if(FeatureBits & kf_value) DPRINT1("\t" #kf_value) print_supported(KF_V86_VIS); print_supported(KF_RDTSC); print_supported(KF_CR4); @@ -506,6 +507,7 @@ KiGetFeatureBits(VOID) print_supported(KF_NX_DISABLED); print_supported(KF_NX_ENABLED); #undef print_supported + DPRINT1("\n"); /* Return the Feature Bits */ return FeatureBits; From 69b1f9091e7b60b6f6e6cfe54e20fd98c8931ed2 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Mon, 7 Mar 2011 20:25:28 +0000 Subject: [PATCH 238/287] [SERVICES] Leave the critical section when the allocation of the control packet fails. Bug spotted by hzlilx. svn path=/trunk/; revision=50994 --- reactos/base/system/services/database.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/reactos/base/system/services/database.c b/reactos/base/system/services/database.c index f33d437955b..02afda3a8f1 100644 --- a/reactos/base/system/services/database.c +++ b/reactos/base/system/services/database.c @@ -700,7 +700,10 @@ ScmControlService(PSERVICE Service, HEAP_ZERO_MEMORY, sizeof(SCM_CONTROL_PACKET) + (TotalLength * sizeof(WCHAR))); if (ControlPacket == NULL) + { + LeaveCriticalSection(&ControlServiceCriticalSection); return ERROR_NOT_ENOUGH_MEMORY; + } ControlPacket->dwControl = dwControl; ControlPacket->dwSize = TotalLength; From ff0651e4417313d0a90d1d72f401a92285638eba Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Mon, 7 Mar 2011 20:28:42 +0000 Subject: [PATCH 239/287] [FASTFAT] Do not set file attributes in case they are set to 0 or -1 svn path=/trunk/; revision=50995 --- reactos/drivers/filesystems/fastfat/finfo.c | 89 +++++++++++++-------- 1 file changed, 57 insertions(+), 32 deletions(-) diff --git a/reactos/drivers/filesystems/fastfat/finfo.c b/reactos/drivers/filesystems/fastfat/finfo.c index 5b18261d6d9..cdadc87e4fa 100644 --- a/reactos/drivers/filesystems/fastfat/finfo.c +++ b/reactos/drivers/filesystems/fastfat/finfo.c @@ -156,43 +156,68 @@ VfatSetBasicInformation(PFILE_OBJECT FileObject, if (FCB->Flags & FCB_IS_FATX_ENTRY) { - FsdSystemTimeToDosDateTime(DeviceExt, - &BasicInfo->CreationTime, - &FCB->entry.FatX.CreationDate, - &FCB->entry.FatX.CreationTime); - FsdSystemTimeToDosDateTime(DeviceExt, - &BasicInfo->LastAccessTime, - &FCB->entry.FatX.AccessDate, - &FCB->entry.FatX.AccessTime); - FsdSystemTimeToDosDateTime(DeviceExt, - &BasicInfo->LastWriteTime, - &FCB->entry.FatX.UpdateDate, - &FCB->entry.FatX.UpdateTime); + if (BasicInfo->CreationTime.QuadPart != 0 && BasicInfo->CreationTime.QuadPart != -1) + { + FsdSystemTimeToDosDateTime(DeviceExt, + &BasicInfo->CreationTime, + &FCB->entry.FatX.CreationDate, + &FCB->entry.FatX.CreationTime); + } + + if (BasicInfo->LastAccessTime.QuadPart != 0 && BasicInfo->LastAccessTime.QuadPart != -1) + { + FsdSystemTimeToDosDateTime(DeviceExt, + &BasicInfo->LastAccessTime, + &FCB->entry.FatX.AccessDate, + &FCB->entry.FatX.AccessTime); + } + + if (BasicInfo->LastWriteTime.QuadPart != 0 && BasicInfo->LastWriteTime.QuadPart != -1) + { + FsdSystemTimeToDosDateTime(DeviceExt, + &BasicInfo->LastWriteTime, + &FCB->entry.FatX.UpdateDate, + &FCB->entry.FatX.UpdateTime); + } } else { - FsdSystemTimeToDosDateTime(DeviceExt, - &BasicInfo->CreationTime, - &FCB->entry.Fat.CreationDate, - &FCB->entry.Fat.CreationTime); - FsdSystemTimeToDosDateTime(DeviceExt, - &BasicInfo->LastAccessTime, - &FCB->entry.Fat.AccessDate, - NULL); - FsdSystemTimeToDosDateTime(DeviceExt, - &BasicInfo->LastWriteTime, - &FCB->entry.Fat.UpdateDate, - &FCB->entry.Fat.UpdateTime); + if (BasicInfo->CreationTime.QuadPart != 0 && BasicInfo->CreationTime.QuadPart != -1) + { + FsdSystemTimeToDosDateTime(DeviceExt, + &BasicInfo->CreationTime, + &FCB->entry.Fat.CreationDate, + &FCB->entry.Fat.CreationTime); + } + + if (BasicInfo->LastAccessTime.QuadPart != 0 && BasicInfo->LastAccessTime.QuadPart != -1) + { + FsdSystemTimeToDosDateTime(DeviceExt, + &BasicInfo->LastAccessTime, + &FCB->entry.Fat.AccessDate, + NULL); + } + + if (BasicInfo->LastWriteTime.QuadPart != 0 && BasicInfo->LastWriteTime.QuadPart != -1) + { + FsdSystemTimeToDosDateTime(DeviceExt, + &BasicInfo->LastWriteTime, + &FCB->entry.Fat.UpdateDate, + &FCB->entry.Fat.UpdateTime); + } } - *FCB->Attributes = (unsigned char)((*FCB->Attributes & - (FILE_ATTRIBUTE_DIRECTORY | 0x48)) | - (BasicInfo->FileAttributes & - (FILE_ATTRIBUTE_ARCHIVE | - FILE_ATTRIBUTE_SYSTEM | - FILE_ATTRIBUTE_HIDDEN | - FILE_ATTRIBUTE_READONLY))); - DPRINT("Setting attributes 0x%02x\n", *FCB->Attributes); + if (BasicInfo->FileAttributes) + { + *FCB->Attributes = (unsigned char)((*FCB->Attributes & + (FILE_ATTRIBUTE_DIRECTORY | 0x48)) | + (BasicInfo->FileAttributes & + (FILE_ATTRIBUTE_ARCHIVE | + FILE_ATTRIBUTE_SYSTEM | + FILE_ATTRIBUTE_HIDDEN | + FILE_ATTRIBUTE_READONLY))); + DPRINT("Setting attributes 0x%02x\n", *FCB->Attributes); + } VfatUpdateEntry(FCB); From f9ac17b33276a6eacd48a47d4f2c1eaaacb87eba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Mon, 7 Mar 2011 20:39:33 +0000 Subject: [PATCH 240/287] [NTOSKRNL] - Beatify cpu supported features output once and for all DPRINT1 is not printf... svn path=/trunk/; revision=50996 --- reactos/ntoskrnl/ke/i386/cpu.c | 47 +++++++++++++++++----------------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/reactos/ntoskrnl/ke/i386/cpu.c b/reactos/ntoskrnl/ke/i386/cpu.c index b17a15199b8..38539b11e70 100644 --- a/reactos/ntoskrnl/ke/i386/cpu.c +++ b/reactos/ntoskrnl/ke/i386/cpu.c @@ -482,32 +482,31 @@ KiGetFeatureBits(VOID) } } - DPRINT1("Supported CPU features :\n"); + DPRINT1("Supported CPU features : %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s\n", #define print_supported(kf_value) \ - if(FeatureBits & kf_value) DPRINT1("\t" #kf_value) - print_supported(KF_V86_VIS); - print_supported(KF_RDTSC); - print_supported(KF_CR4); - print_supported(KF_CMOV); - print_supported(KF_GLOBAL_PAGE); - print_supported(KF_LARGE_PAGE); - print_supported(KF_MTRR); - print_supported(KF_CMPXCHG8B); - print_supported(KF_MMX); - print_supported(KF_WORKING_PTE); - print_supported(KF_PAT); - print_supported(KF_FXSR); - print_supported(KF_FAST_SYSCALL); - print_supported(KF_XMMI); - print_supported(KF_3DNOW); - print_supported(KF_AMDK6MTRR); - print_supported(KF_XMMI64); - print_supported(KF_DTS); - print_supported(KF_NX_BIT); - print_supported(KF_NX_DISABLED); - print_supported(KF_NX_ENABLED); + FeatureBits & kf_value ? #kf_value : "" + print_supported(KF_V86_VIS), + print_supported(KF_RDTSC), + print_supported(KF_CR4), + print_supported(KF_CMOV), + print_supported(KF_GLOBAL_PAGE), + print_supported(KF_LARGE_PAGE), + print_supported(KF_MTRR), + print_supported(KF_CMPXCHG8B), + print_supported(KF_MMX), + print_supported(KF_WORKING_PTE), + print_supported(KF_PAT), + print_supported(KF_FXSR), + print_supported(KF_FAST_SYSCALL), + print_supported(KF_XMMI), + print_supported(KF_3DNOW), + print_supported(KF_AMDK6MTRR), + print_supported(KF_XMMI64), + print_supported(KF_DTS), + print_supported(KF_NX_BIT), + print_supported(KF_NX_DISABLED), + print_supported(KF_NX_ENABLED)); #undef print_supported - DPRINT1("\n"); /* Return the Feature Bits */ return FeatureBits; From 8daf17a4e821d18f4fe58e1fa6ecf20e8c43c852 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 7 Mar 2011 21:55:17 +0000 Subject: [PATCH 241/287] [WIN32K] Update all brushes in DC_vPrepareDCsForBlit. This allows us to simplify the code elsewhere. svn path=/trunk/; revision=50997 --- reactos/subsystems/win32/win32k/objects/dclife.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/reactos/subsystems/win32/win32k/objects/dclife.c b/reactos/subsystems/win32/win32k/objects/dclife.c index 108762e1ff2..a283a8d98ff 100644 --- a/reactos/subsystems/win32/win32k/objects/dclife.c +++ b/reactos/subsystems/win32/win32k/objects/dclife.c @@ -480,6 +480,15 @@ DC_vPrepareDCsForBlit(PDC pdc1, { PDC pdcFirst, pdcSecond; PRECT prcFirst, prcSecond; + + /* Update brushes */ + if (pdc1->pdcattr->ulDirty_ & (DIRTY_FILL | DC_BRUSH_DIRTY)) + DC_vUpdateFillBrush(pdc1); + if (pdc1->pdcattr->ulDirty_ & (DIRTY_LINE | DC_PEN_DIRTY)) + DC_vUpdateLineBrush(pdc1); + if(pdc1->pdcattr->ulDirty_ & DIRTY_TEXT) + DC_vUpdateTextBrush(pdc1); + /* Lock them in good order */ if(pdc2) { From d089825a9fabc2b06fe0d5c254ef61bf1d4aa289 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 7 Mar 2011 22:00:19 +0000 Subject: [PATCH 242/287] [WIN32K] clip the destination rect against the bounds of the destination and source surface. Fixes a crash of gdi32_winetest bitmap that occurs as soon as IntCreateCompatibleBitmap is fixed. Other Eng* code needs to be checked as well. svn path=/trunk/; revision=50998 --- reactos/subsystems/win32/win32k/eng/copybits.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/reactos/subsystems/win32/win32k/eng/copybits.c b/reactos/subsystems/win32/win32k/eng/copybits.c index 1200c1ce0fb..0bec04a5af3 100644 --- a/reactos/subsystems/win32/win32k/eng/copybits.c +++ b/reactos/subsystems/win32/win32k/eng/copybits.c @@ -49,12 +49,28 @@ EngCopyBits(SURFOBJ *psoDest, BLTINFO BltInfo; SURFACE *psurfDest; SURFACE *psurfSource; + RECTL rclDest = *DestRect; + POINTL ptlSrc = *SourcePoint; ASSERT(psoDest != NULL && psoSource != NULL && DestRect != NULL && SourcePoint != NULL); psurfSource = CONTAINING_RECORD(psoSource, SURFACE, SurfObj); psurfDest = CONTAINING_RECORD(psoDest, SURFACE, SurfObj); + /* Clip dest rect against source surface size / source point */ + if (psoSource->sizlBitmap.cx - ptlSrc.x < rclDest.right - rclDest.left) + rclDest.right = rclDest.left + psoSource->sizlBitmap.cx - ptlSrc.x; + if (psoSource->sizlBitmap.cy - ptlSrc.y < rclDest.bottom - rclDest.top) + rclDest.bottom = rclDest.top + psoSource->sizlBitmap.cy - ptlSrc.y; + + /* Clip dest rect against target surface size */ + if (rclDest.right > psoDest->sizlBitmap.cx) + rclDest.right = psoDest->sizlBitmap.cx; + if (rclDest.bottom > psoDest->sizlBitmap.cy) + rclDest.bottom = psoDest->sizlBitmap.cy; + if (RECTL_bIsEmptyRect(&rclDest)) return TRUE; + DestRect = &rclDest; + // FIXME: Don't punt to the driver's DrvCopyBits immediately. Instead, // mark the copy block function to be DrvCopyBits instead of the // GDI's copy bit function so as to remove clipping from the From 38e6b4b424ea879e91a99f82bf3b4793642c006b Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 7 Mar 2011 22:06:23 +0000 Subject: [PATCH 243/287] [WIN32K] Fix IntCreateCompatibleBitmap, previously when the given DC was a memory DC with a dibsection selected, the function would only work if the dibsection was <= 8 bpp. svn path=/trunk/; revision=50999 --- .../subsystems/win32/win32k/objects/bitmaps.c | 191 +++++++++--------- 1 file changed, 93 insertions(+), 98 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/bitmaps.c b/reactos/subsystems/win32/win32k/objects/bitmaps.c index c6b9dfee78a..f97462594bd 100644 --- a/reactos/subsystems/win32/win32k/objects/bitmaps.c +++ b/reactos/subsystems/win32/win32k/objects/bitmaps.c @@ -233,116 +233,111 @@ IntCreateCompatibleBitmap( /* MS doc says if width or height is 0, return 1-by-1 pixel, monochrome bitmap */ if (0 == Width || 0 == Height) { - Bmp = NtGdiGetStockObject(DEFAULT_BITMAP); + return NtGdiGetStockObject(DEFAULT_BITMAP); + } + + if (Dc->dctype != DC_TYPE_MEMORY) + { + PSURFACE psurf; + + Bmp = GreCreateBitmap(abs(Width), + abs(Height), + 1, + Dc->ppdev->gdiinfo.cBitsPixel, + NULL); + psurf = SURFACE_ShareLockSurface(Bmp); + ASSERT(psurf); + /* Set palette */ + psurf->ppal = PALETTE_ShareLockPalette(Dc->ppdev->devinfo.hpalDefault); + /* Set flags */ + psurf->flags = API_BITMAP; + psurf->hdc = NULL; // Fixme + SURFACE_ShareUnlockSurface(psurf); } else { - if (Dc->dctype != DC_TYPE_MEMORY) + DIBSECTION dibs; + INT Count; + PSURFACE psurf = Dc->dclevel.pSurface; + Count = BITMAP_GetObject(psurf, sizeof(dibs), &dibs); + + if (Count == sizeof(BITMAP)) { - PSURFACE psurf; + PSURFACE psurfBmp; Bmp = GreCreateBitmap(abs(Width), - abs(Height), - 1, - Dc->ppdev->gdiinfo.cBitsPixel, - NULL); - psurf = SURFACE_LockSurface(Bmp); - ASSERT(psurf); - /* Set palette */ - psurf->ppal = PALETTE_ShareLockPalette(Dc->ppdev->devinfo.hpalDefault); + abs(Height), + 1, + dibs.dsBm.bmBitsPixel, + NULL); + psurfBmp = SURFACE_LockSurface(Bmp); + ASSERT(psurfBmp); + /* Assign palette */ + psurfBmp->ppal = psurf->ppal; + GDIOBJ_IncrementShareCount((POBJ)psurf->ppal); /* Set flags */ - psurf->flags = API_BITMAP; - psurf->hdc = NULL; // Fixme - SURFACE_UnlockSurface(psurf); + psurfBmp->flags = API_BITMAP; + psurfBmp->hdc = NULL; // Fixme + SURFACE_UnlockSurface(psurfBmp); } - else + else if (Count == sizeof(DIBSECTION)) { - DIBSECTION dibs; - INT Count; - PSURFACE psurf = Dc->dclevel.pSurface; - Count = BITMAP_GetObject(psurf, sizeof(dibs), &dibs); + /* A DIB section is selected in the DC */ + BYTE buf[sizeof(BITMAPINFOHEADER) + 256*sizeof(RGBQUAD)] = {0}; + PVOID Bits; + BITMAPINFO* bi = (BITMAPINFO*)buf; - if (Count) + bi->bmiHeader.biSize = sizeof(bi->bmiHeader); + bi->bmiHeader.biWidth = Width; + bi->bmiHeader.biHeight = Height; + bi->bmiHeader.biPlanes = dibs.dsBmih.biPlanes; + bi->bmiHeader.biBitCount = dibs.dsBmih.biBitCount; + bi->bmiHeader.biCompression = dibs.dsBmih.biCompression; + bi->bmiHeader.biSizeImage = 0; + bi->bmiHeader.biXPelsPerMeter = dibs.dsBmih.biXPelsPerMeter; + bi->bmiHeader.biYPelsPerMeter = dibs.dsBmih.biYPelsPerMeter; + bi->bmiHeader.biClrUsed = dibs.dsBmih.biClrUsed; + bi->bmiHeader.biClrImportant = dibs.dsBmih.biClrImportant; + + if (bi->bmiHeader.biCompression == BI_BITFIELDS) { - if (Count == sizeof(BITMAP)) - { - PSURFACE psurfBmp; - - Bmp = GreCreateBitmap(abs(Width), - abs(Height), - 1, - dibs.dsBm.bmBitsPixel, - NULL); - psurfBmp = SURFACE_LockSurface(Bmp); - ASSERT(psurfBmp); - /* Assign palette */ - psurfBmp->ppal = psurf->ppal; - GDIOBJ_IncrementShareCount((POBJ)psurf->ppal); - /* Set flags */ - psurfBmp->flags = API_BITMAP; - psurfBmp->hdc = NULL; // Fixme - SURFACE_UnlockSurface(psurfBmp); - } - else - { - /* A DIB section is selected in the DC */ - BYTE buf[sizeof(BITMAPINFOHEADER) + 256*sizeof(RGBQUAD)] = {0}; - PVOID Bits; - BITMAPINFO* bi = (BITMAPINFO*)buf; - - bi->bmiHeader.biSize = sizeof(bi->bmiHeader); - bi->bmiHeader.biWidth = Width; - bi->bmiHeader.biHeight = Height; - bi->bmiHeader.biPlanes = dibs.dsBmih.biPlanes; - bi->bmiHeader.biBitCount = dibs.dsBmih.biBitCount; - bi->bmiHeader.biCompression = dibs.dsBmih.biCompression; - bi->bmiHeader.biSizeImage = 0; - bi->bmiHeader.biXPelsPerMeter = dibs.dsBmih.biXPelsPerMeter; - bi->bmiHeader.biYPelsPerMeter = dibs.dsBmih.biYPelsPerMeter; - bi->bmiHeader.biClrUsed = dibs.dsBmih.biClrUsed; - bi->bmiHeader.biClrImportant = dibs.dsBmih.biClrImportant; - - if (bi->bmiHeader.biCompression == BI_BITFIELDS) - { - /* Copy the color masks */ - RtlCopyMemory(bi->bmiColors, dibs.dsBitfields, 3*sizeof(RGBQUAD)); - } - else if (bi->bmiHeader.biBitCount <= 8) - { - /* Copy the color table */ - UINT Index; - PPALETTE PalGDI; - - if (!psurf->ppal) - { - EngSetLastError(ERROR_INVALID_HANDLE); - return 0; - } - - PalGDI = PALETTE_LockPalette(psurf->ppal->BaseObject.hHmgr); - - for (Index = 0; - Index < 256 && Index < PalGDI->NumColors; - Index++) - { - bi->bmiColors[Index].rgbRed = PalGDI->IndexedColors[Index].peRed; - bi->bmiColors[Index].rgbGreen = PalGDI->IndexedColors[Index].peGreen; - bi->bmiColors[Index].rgbBlue = PalGDI->IndexedColors[Index].peBlue; - bi->bmiColors[Index].rgbReserved = 0; - } - PALETTE_UnlockPalette(PalGDI); - - Bmp = DIB_CreateDIBSection(Dc, - bi, - DIB_RGB_COLORS, - &Bits, - NULL, - 0, - 0); - return Bmp; - } - } + /* Copy the color masks */ + RtlCopyMemory(bi->bmiColors, dibs.dsBitfields, 3*sizeof(RGBQUAD)); } + else if (bi->bmiHeader.biBitCount <= 8) + { + /* Copy the color table */ + UINT Index; + PPALETTE PalGDI; + + if (!psurf->ppal) + { + EngSetLastError(ERROR_INVALID_HANDLE); + return 0; + } + + PalGDI = PALETTE_LockPalette(psurf->ppal->BaseObject.hHmgr); + + for (Index = 0; + Index < 256 && Index < PalGDI->NumColors; + Index++) + { + bi->bmiColors[Index].rgbRed = PalGDI->IndexedColors[Index].peRed; + bi->bmiColors[Index].rgbGreen = PalGDI->IndexedColors[Index].peGreen; + bi->bmiColors[Index].rgbBlue = PalGDI->IndexedColors[Index].peBlue; + bi->bmiColors[Index].rgbReserved = 0; + } + PALETTE_UnlockPalette(PalGDI); + } + + Bmp = DIB_CreateDIBSection(Dc, + bi, + DIB_RGB_COLORS, + &Bits, + NULL, + 0, + 0); + return Bmp; } } return Bmp; From ccd17d40ecbaaa3e02ad5d7754593c50c3b7a841 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 7 Mar 2011 22:14:14 +0000 Subject: [PATCH 244/287] [WIN32K] Fix a warning about an uninitialized variable :D svn path=/trunk/; revision=51000 --- reactos/subsystems/win32/win32k/objects/dclife.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/reactos/subsystems/win32/win32k/objects/dclife.c b/reactos/subsystems/win32/win32k/objects/dclife.c index a283a8d98ff..7d6d330e708 100644 --- a/reactos/subsystems/win32/win32k/objects/dclife.c +++ b/reactos/subsystems/win32/win32k/objects/dclife.c @@ -511,7 +511,8 @@ DC_vPrepareDCsForBlit(PDC pdc1, { pdcFirst = pdc1 ; prcFirst = &rc1; - pdcSecond = NULL ; + pdcSecond = NULL; + prcSecond = NULL; } if(pdcFirst && pdcFirst->dctype == DCTYPE_DIRECT) From b2832e17fc4f63c939efa47ff4aac7785bc63ac1 Mon Sep 17 00:00:00 2001 From: Sylvain Petreolle Date: Tue, 8 Mar 2011 11:30:14 +0000 Subject: [PATCH 245/287] [ROSTESTS] Properly skip bitmap and outline tests in gdi32_winetest:font. svn path=/trunk/; revision=51001 --- rostests/winetests/gdi32/font.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/rostests/winetests/gdi32/font.c b/rostests/winetests/gdi32/font.c index d8659332511..a584a403521 100644 --- a/rostests/winetests/gdi32/font.c +++ b/rostests/winetests/gdi32/font.c @@ -313,9 +313,12 @@ static void test_bitmap_font(void) SIZE size_orig; INT ret, i, width_orig, height_orig, scale, lfWidth; - skip("ROS-HACK: Skipping bitmap font tests!\n"); - return; - + if(!winetest_interactive) + { + skip("reactos bug 5401: Skipping bitmap font tests!\n"); + return; + } + hdc = GetDC(0); /* "System" has only 1 pixel size defined, otherwise the test breaks */ @@ -410,6 +413,12 @@ static void test_outline_font(void) POINT pt; INT ret; + if(!winetest_interactive) + { + skip("reactos bug 5401: Skipping outline font tests!\n"); + return; + } + if (!is_truetype_font_installed("Arial")) { skip("Arial is not installed\n"); From c6d8f7de7042a47f267b6df3d76fc94ce164bc39 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Wed, 9 Mar 2011 10:33:13 +0000 Subject: [PATCH 246/287] [NTOSKRNL] Implemented FstubFixupEfiPartition(): Purpose is to let ReactOS handle realistic partitions length in case of an EFI/GPT protective MBR. Indeed, when formatting a disk to GPT, you add a protective MBR that contains a fake partition entry, with type 0xEE having the following property: its size is set to maximum allocatable size in MBR. In that case, if disk is small, you may go beyond disk size. This is why a fix to partition length may be needed when re-reading partition entry. This is the way ReactOS creates protective MBR. You may find some more information here: http://msdn.microsoft.com/en-us/windows/hardware/gg463525 Fixed xHalIoReadPartitionTable(): - Allocate a buffer that has the proper size (instead of allocating a buffer which is too big). Especially since this leads to partial init only some lines after. - Remove redundant & useless affectation. - Check/fix 0xEE partition length in case of an EFI/GPT protective MBR (see upper point). svn path=/trunk/; revision=51002 --- reactos/ntoskrnl/fstub/disksup.c | 33 ++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/reactos/ntoskrnl/fstub/disksup.c b/reactos/ntoskrnl/fstub/disksup.c index ce184bcdced..7c4f651f8ff 100644 --- a/reactos/ntoskrnl/fstub/disksup.c +++ b/reactos/ntoskrnl/fstub/disksup.c @@ -24,6 +24,8 @@ const WCHAR DiskMountString[] = L"\\DosDevices\\%C:"; #define PARTITION_MAGIC 0xaa55 +#define EFI_PMBR_OSTYPE_EFI 0xEE + #include typedef struct _REG_DISK_MOUNT_INFO @@ -1358,6 +1360,24 @@ xHalExamineMBR(IN PDEVICE_OBJECT DeviceObject, } } +VOID +NTAPI +FstubFixupEfiPartition(IN PPARTITION_DESCRIPTOR PartitionDescriptor, + IN ULONGLONG MaxOffset) +{ + ULONG PartitionLength; + PAGED_CODE(); + + /* Compute partition length (according to MBR entry) */ + PartitionLength = PartitionDescriptor->StartingSectorLsb0 + PartitionDescriptor->PartitionLengthLsb0; + /* In case the partition length goes beyond disk size... */ + if (PartitionLength > MaxOffset) + { + /* Resize partition to its maximum real length */ + PartitionDescriptor->PartitionLengthLsb0 = MaxOffset - PartitionDescriptor->StartingSectorLsb0; + } +} + NTSTATUS FASTCALL xHalIoReadPartitionTable(IN PDEVICE_OBJECT DeviceObject, @@ -1425,7 +1445,7 @@ xHalIoReadPartitionTable(IN PDEVICE_OBJECT DeviceObject, MaxOffset, MaxSector); /* Allocate our buffer */ - Buffer = ExAllocatePoolWithTag(NonPagedPool, PAGE_SIZE, TAG_FILE_SYSTEM); + Buffer = ExAllocatePoolWithTag(NonPagedPool, InputSize, TAG_FILE_SYSTEM); if (!Buffer) { /* Fail, free the input buffer */ @@ -1503,9 +1523,6 @@ xHalIoReadPartitionTable(IN PDEVICE_OBJECT DeviceObject, PartitionDescriptor = (PPARTITION_DESCRIPTOR) &(((PUSHORT)Buffer)[PARTITION_TABLE_OFFSET]); - /* Get the partition type */ - PartitionType = PartitionDescriptor->PartitionType; - /* Start looping partitions */ j++; DPRINT("FSTUB: Partition Table %d:\n", j); @@ -1524,6 +1541,14 @@ xHalIoReadPartitionTable(IN PDEVICE_OBJECT DeviceObject, GET_STARTING_SECTOR(PartitionDescriptor), GET_PARTITION_LENGTH(PartitionDescriptor)); + /* Check whether we're facing a protective MBR */ + if (PartitionType == EFI_PMBR_OSTYPE_EFI) + { + /* Partition length might be bigger than disk size */ + FstubFixupEfiPartition(PartitionDescriptor, + MaxOffset); + } + /* Make sure that the partition is valid, unless it's the first */ if (!(HalpIsValidPartitionEntry(PartitionDescriptor, MaxOffset, From 031e55222a337331ad1d8a63e11022437468a901 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 9 Mar 2011 15:29:13 +0000 Subject: [PATCH 247/287] [CRT] Patch by Thomas Faber: Fix nt version of mbstowcs. See issue #5983 for more details. svn path=/trunk/; revision=51003 --- reactos/lib/sdk/crt/string/mbstowcs_nt.c | 27 ++++++++++++++++-------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/reactos/lib/sdk/crt/string/mbstowcs_nt.c b/reactos/lib/sdk/crt/string/mbstowcs_nt.c index 4b613368c3e..7058558f4e2 100644 --- a/reactos/lib/sdk/crt/string/mbstowcs_nt.c +++ b/reactos/lib/sdk/crt/string/mbstowcs_nt.c @@ -4,26 +4,35 @@ #include #include +WCHAR NTAPI RtlAnsiCharToUnicodeChar(IN OUT PUCHAR *AnsiChar); +#undef MB_CUR_MAX +#define MB_CUR_MAX 2 + /* * @implemented */ int mbtowc (wchar_t *wchar, const char *mbchar, size_t count) { - NTSTATUS Status; - ULONG Size; + UCHAR mbarr[MB_CUR_MAX] = { 0 }; + PUCHAR mbs = mbarr; + WCHAR wc; + + if (mbchar == NULL) + return 0; if (wchar == NULL) return 0; - Status = RtlMultiByteToUnicodeN (wchar, - sizeof(WCHAR), - &Size, - mbchar, - count); - if (!NT_SUCCESS(Status)) + memcpy(mbarr, mbchar, min(count, sizeof mbarr)); + + wc = RtlAnsiCharToUnicodeChar(&mbs); + + if (wc == L' ' && mbarr[0] != ' ') return -1; - return (int)Size; + *wchar = wc; + + return mbs - mbarr; } /* From 775a83cdf460d142c1e56cde11279cbf6c286d68 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 9 Mar 2011 15:31:25 +0000 Subject: [PATCH 248/287] [win32csr] Fix zero termination of harderror string parameters, when they are ansi. See issue #5983 for more details. svn path=/trunk/; revision=51004 --- reactos/subsystems/win32/csrss/win32csr/harderror.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/reactos/subsystems/win32/csrss/win32csr/harderror.c b/reactos/subsystems/win32/csrss/win32csr/harderror.c index cfa16c6eb34..ee195f7aab2 100644 --- a/reactos/subsystems/win32/csrss/win32csr/harderror.c +++ b/reactos/subsystems/win32/csrss/win32csr/harderror.c @@ -118,7 +118,7 @@ CsrpCaptureStringParameters( ULONG nParam, UnicodeStringParameterMask, Size = 0; NTSTATUS Status; UNICODE_STRING TempStringU; - PWSTR ParamString; + CHAR *ParamString; UnicodeStringParameterMask = HardErrorMessage->UnicodeStringParameterMask; @@ -166,7 +166,8 @@ CsrpCaptureStringParameters( } /* Zero terminate the string */ - ParamString[TempStringU.Length / sizeof(WCHAR)] = 0; + ParamString[TempStringU.Length] = 0; + ParamString[TempStringU.Length + 1] = 0; DPRINT("ParamString=\'%S\'\n", ParamString); Parameters[nParam] = (ULONG_PTR)ParamString; From 2bbd8711a747e88759edcff139e64e348a79a5a6 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 9 Mar 2011 15:46:13 +0000 Subject: [PATCH 249/287] [WIN32K] - Fix calculation of dest rect in IntSetDIBits - Rewrite NtGdiStretchDIBitsInternal. It now calls NtGdiSetDIBitsToDeviceInternal in case of SRCCOPY and no stretching and NtGdiCreateDIBitmapInternal + IntEngStretchBlt in the default case. This fixes RLE compressed dibs. - The code isn't yet perfect, Windows behaviour is pretty complex, especially in regard to topdown/bottomup DIBs and the whole code needs to be rewritten. It will cause one more failed bitmap test, but another one that was formerly only passing with legacy 9x behaviour now behaves correctly. See issue #5886 for more details. svn path=/trunk/; revision=51005 --- .../subsystems/win32/win32k/objects/dibobj.c | 240 ++++++++++-------- 1 file changed, 132 insertions(+), 108 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/dibobj.c b/reactos/subsystems/win32/win32k/objects/dibobj.c index 5ad86dcab4d..2fe1e4ccb00 100644 --- a/reactos/subsystems/win32/win32k/objects/dibobj.c +++ b/reactos/subsystems/win32/win32k/objects/dibobj.c @@ -286,8 +286,7 @@ IntSetDIBits( goto cleanup; } - rcDst.top = bmi->bmiHeader.biHeight < 0 ? - abs(bmi->bmiHeader.biHeight) - (ScanLines + StartScan) : StartScan; + rcDst.top = StartScan; rcDst.left = 0; rcDst.bottom = rcDst.top + ScanLines; rcDst.right = psurfDst->SurfObj.sizlBitmap.cx; @@ -296,7 +295,7 @@ IntSetDIBits( ptSrc.y = 0; /* 1bpp bitmaps have 0 for white, 1 for black */ - EXLATEOBJ_vInitialize(&exlo, psurfSrc->ppal, psurfDst->ppal, 0xFFFFFF, 0, 0); + EXLATEOBJ_vInitialize(&exlo, psurfSrc->ppal, psurfDst->ppal, 0xFFFFFF, 0xFFFFFF, 0); result = IntEngCopyBits(&psurfDst->SurfObj, &psurfSrc->SurfObj, @@ -1030,133 +1029,158 @@ done: return ScanLines; } +#define ROP_TO_ROP4(Rop) ((Rop) >> 16) +W32KAPI INT APIENTRY NtGdiStretchDIBitsInternal( - HDC hDC, - INT XDest, - INT YDest, - INT DestWidth, - INT DestHeight, - INT XSrc, - INT YSrc, - INT SrcWidth, - INT SrcHeight, - LPBYTE Bits, - LPBITMAPINFO BitsInfo, - DWORD Usage, - DWORD ROP, - UINT cjMaxInfo, - UINT cjMaxBits, - HANDLE hcmXform) + IN HDC hdc, + IN INT xDst, + IN INT yDst, + IN INT cxDst, + IN INT cyDst, + IN INT xSrc, + IN INT ySrc, + IN INT cxSrc, + IN INT cySrc, + IN OPTIONAL LPBYTE pjInit, + IN LPBITMAPINFO pbmi, + IN DWORD dwUsage, + IN DWORD dwRop, // ms ntgdi.h says dwRop4(?) + IN UINT cjMaxInfo, + IN UINT cjMaxBits, + IN HANDLE hcmXform) { + BOOL bResult = FALSE; + SIZEL sizel; + RECTL rcSrc, rcDst; PDC pdc; - INT ret = 0; - LONG height; - LONG width; - WORD planes, bpp; - DWORD compr, size; - HBITMAP hBitmap; - HBITMAP hOldBitmap; - HDC hdcMem; - PVOID pvBits; - PBYTE safeBits; + HBITMAP hbmTmp; + PSURFACE psurfTmp, psurfDst; + EXLATEOBJ exlo; - if (!Bits || !BitsInfo) - return 0; - - safeBits = ExAllocatePoolWithTag(PagedPool, cjMaxBits, TAG_DIB); - if(!safeBits) + if (!(pdc = DC_LockDc(hdc))) { - EngSetLastError(ERROR_NOT_ENOUGH_MEMORY); - return 0; - } - - _SEH2_TRY - { - ProbeForRead(BitsInfo, cjMaxInfo, 1); - ProbeForRead(Bits, cjMaxBits, 1); - if (DIB_GetBitmapInfo(&BitsInfo->bmiHeader, &width, &height, &planes, &bpp, &compr, &size) == -1) - { - DPRINT1("Invalid bitmap\n"); - _SEH2_YIELD(goto cleanup;) - } - RtlCopyMemory(safeBits, Bits, cjMaxBits); - } - _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) - { - DPRINT1("Error, failed to read the DIB bits\n"); - _SEH2_YIELD(goto cleanup;) - } - _SEH2_END - - if (width < 0) - { - DPRINT1("Bitmap has a negative width\n"); - return 0; - } - - hBitmap = NtGdiGetDCObject(hDC, OBJ_BITMAP); - - if (!(pdc = DC_LockDc(hDC))) - { - ExFreePoolWithTag(safeBits, TAG_DIB); EngSetLastError(ERROR_INVALID_HANDLE); return 0; } - if (XDest == 0 && YDest == 0 && XSrc == 0 && XSrc == 0 && - DestWidth == SrcWidth && DestHeight == SrcHeight && - compr == BI_RGB && - ROP == SRCCOPY) - { - BITMAP bmp; - ret = IntGdiGetObject(hBitmap, sizeof(bmp), &bmp) == sizeof(bmp); - if (ret && - bmp.bmBitsPixel == bpp && - bmp.bmWidth == SrcWidth && - bmp.bmHeight == SrcHeight && - bmp.bmPlanes == planes) - { - /* fast path */ - ret = IntSetDIBits(pdc, hBitmap, 0, height, safeBits, BitsInfo, Usage); - DC_UnlockDc(pdc); - goto cleanup; - } - } - - /* slow path - need to use StretchBlt */ - - hBitmap = DIB_CreateDIBSection(pdc, BitsInfo, Usage, &pvBits, NULL, 0, 0); + /* Transform dest size */ + sizel.cx = cxDst; + sizel.cy = cyDst; + IntLPtoDP(pdc, (POINTL*)&sizel, 1); DC_UnlockDc(pdc); - if(!hBitmap) + /* Check if we can use NtGdiSetDIBitsToDeviceInternal */ + if (sizel.cx == cxSrc && sizel.cy == cySrc && dwRop == SRCCOPY) { - DPRINT1("Error, failed to create a DIB section\n"); + /* Yes, we can! */ + return NtGdiSetDIBitsToDeviceInternal(hdc, + xDst, + yDst, + cxDst, + cyDst, + xSrc, + ySrc, + 0, + cySrc, + pjInit, + pbmi, + dwUsage, + cjMaxBits, + cjMaxInfo, + TRUE, + hcmXform); + } + + /* Create an intermediate bitmap from the DIB */ + hbmTmp = NtGdiCreateDIBitmapInternal(hdc, + cxSrc, + cySrc, + CBM_INIT, + pjInit, + pbmi, + dwUsage, + cjMaxInfo, + cjMaxBits, + 0, + hcmXform); + if (!hbmTmp) + { + DPRINT1("NtGdiCreateDIBitmapInternal failed\n"); + return 0; + } + + /* FIXME: locking twice is cheesy, coord tranlation in UM will fix it */ + if (!(pdc = DC_LockDc(hdc))) + { + DPRINT1("Could not lock dc\n"); + EngSetLastError(ERROR_INVALID_HANDLE); + GreDeleteObject(hbmTmp); + return 0; + } + + psurfTmp = SURFACE_ShareLockSurface(hbmTmp); + if (!psurfTmp) + { + DPRINT1("Could not lock bitmap :-(\n"); goto cleanup; } - hdcMem = NtGdiCreateCompatibleDC(hDC); + psurfDst = pdc->dclevel.pSurface; + if (!psurfDst) + { + // CHECKME + bResult = TRUE; + goto cleanup; + } - RtlCopyMemory(pvBits, safeBits, cjMaxBits); - hOldBitmap = NtGdiSelectBitmap(hdcMem, hBitmap); + /* Calculate source and destination rect */ + rcSrc.left = xSrc; + rcSrc.top = ySrc; + rcSrc.right = xSrc + abs(cxSrc); + rcSrc.bottom = ySrc + abs(cySrc); + rcDst.left = xDst; + rcDst.top = yDst; + rcDst.right = rcDst.left + cxDst; + rcDst.bottom = rcDst.top + cyDst; + IntLPtoDP(pdc, (POINTL*)&rcDst, 2); + RECTL_vOffsetRect(&rcDst, pdc->ptlDCOrig.x, pdc->ptlDCOrig.y); - /* Origin for DIBitmap may be bottom left (positive biHeight) or top - left (negative biHeight) */ - ret = NtGdiStretchBlt(hDC, XDest, YDest, DestWidth, DestHeight, - hdcMem, XSrc, abs(height) - SrcHeight - YSrc, - SrcWidth, SrcHeight, ROP, 0); + /* Initialize XLATEOBJ */ + EXLATEOBJ_vInitialize(&exlo, + psurfTmp->ppal, + psurfDst->ppal, + RGB(0xff, 0xff, 0xff), + pdc->pdcattr->crBackgroundClr, + pdc->pdcattr->crForegroundClr); - if(ret) - ret = SrcHeight; - NtGdiSelectBitmap(hdcMem, hOldBitmap); - NtGdiDeleteObjectApp(hdcMem); - GreDeleteObject(hBitmap); + /* Prepare DC for blit */ + DC_vPrepareDCsForBlit(pdc, rcDst, NULL, rcSrc); + /* Perform the stretch operation */ + bResult = IntEngStretchBlt(&psurfDst->SurfObj, + &psurfTmp->SurfObj, + NULL, + pdc->rosdc.CombinedClip, + &exlo.xlo, + &rcDst, + &rcSrc, + NULL, + &pdc->eboFill.BrushObject, + NULL, + ROP_TO_ROP4(dwRop)); + + /* Cleanup */ + DC_vFinishBlit(pdc, NULL); + EXLATEOBJ_vCleanup(&exlo); cleanup: - ExFreePoolWithTag(safeBits, TAG_DIB); - return ret; + if (psurfTmp) SURFACE_ShareUnlockSurface(psurfTmp); + if (hbmTmp) GreDeleteObject(hbmTmp); + if (pdc) DC_UnlockDc(pdc); + + return bResult; } @@ -1556,7 +1580,7 @@ DIB_CreateDIBSection( bm.bmWidthBytes, BitmapFormat(bi->biBitCount * bi->biPlanes, bi->biCompression), BMF_DONTCACHE | BMF_USERMEM | BMF_NOZEROINIT | - (bi->biHeight < 0 ? BMF_TOPDOWN : 0), + ((bi->biHeight < 0) ? BMF_TOPDOWN : 0), bi->biSizeImage, bm.bmBits, 0); From 092d6ca92e5e2403fbe8b04b24c83b79f0e14583 Mon Sep 17 00:00:00 2001 From: Michael Martin Date: Thu, 10 Mar 2011 10:36:49 +0000 Subject: [PATCH 250/287] [syssetup] - EnableUserModePnpManager: StartServiceW can fail due to the service already running. Check last error for such a case. Should fix bug #5846. svn path=/trunk/; revision=51006 --- reactos/dll/win32/syssetup/install.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/dll/win32/syssetup/install.c b/reactos/dll/win32/syssetup/install.c index 6ec7285ab2d..66f981be038 100644 --- a/reactos/dll/win32/syssetup/install.c +++ b/reactos/dll/win32/syssetup/install.c @@ -506,7 +506,7 @@ EnableUserModePnpManager(VOID) } ret = StartServiceW(hService, 0, NULL); - if (!ret) + if ((!ret) && (GetLastError() != ERROR_SERVICE_ALREADY_RUNNING)) { DPRINT1("Unable to start service\n"); goto cleanup; From a2453433f1dee7587bcb0cc421693558e4655235 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Thu, 10 Mar 2011 12:41:50 +0000 Subject: [PATCH 251/287] [MSAFD] - Correct calculating PollBufferSize - Found by DPH svn path=/trunk/; revision=51007 --- reactos/dll/win32/msafd/misc/dllmain.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/dll/win32/msafd/misc/dllmain.c b/reactos/dll/win32/msafd/misc/dllmain.c index 5714213cd5a..ca129414b97 100644 --- a/reactos/dll/win32/msafd/misc/dllmain.c +++ b/reactos/dll/win32/msafd/misc/dllmain.c @@ -907,7 +907,7 @@ WSPSelect(IN int nfds, } PollInfo->HandleCount = j; - PollBufferSize = ((PCHAR)&PollInfo->Handles[j+1]) - ((PCHAR)PollInfo); + PollBufferSize = sizeof(AFD_POLL_INFO) + (PollInfo->HandleCount > 1 ? sizeof(HANDLE) * ( PollInfo->HandleCount - 1) : 0); /* Send IOCTL */ Status = NtDeviceIoControlFile((HANDLE)PollInfo->Handles[0].Handle, From 729ce068d85b328c147bcff730b009e31d083dc7 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Thu, 10 Mar 2011 13:09:56 +0000 Subject: [PATCH 252/287] [Win32k] - Fix an uncovered bug. This should fix coolplayer and winamp type applications. Does not fix drawing issues. svn path=/trunk/; revision=51008 --- .../subsystems/win32/win32k/include/gdiobj.h | 4 +++ .../subsystems/win32/win32k/objects/gdiobj.c | 5 ---- .../subsystems/win32/win32k/objects/region.c | 28 ++++++------------- 3 files changed, 12 insertions(+), 25 deletions(-) diff --git a/reactos/subsystems/win32/win32k/include/gdiobj.h b/reactos/subsystems/win32/win32k/include/gdiobj.h index 9882e9dccc6..3f581bca22f 100644 --- a/reactos/subsystems/win32/win32k/include/gdiobj.h +++ b/reactos/subsystems/win32/win32k/include/gdiobj.h @@ -160,3 +160,7 @@ INT FASTCALL GreGetObjectOwner(HGDIOBJ, GDIOBJTYPE); #define GDIOBJ_GetKernelObj(Handle) \ ((PGDI_TABLE_ENTRY)&GdiHandleTable->Entries[GDI_HANDLE_GET_INDEX(Handle)])->KernelData +#define GDI_ENTRY_TO_INDEX(ht, e) \ + (((ULONG_PTR)(e) - (ULONG_PTR)&((ht)->Entries[0])) / sizeof(GDI_TABLE_ENTRY)) +#define GDI_HANDLE_GET_ENTRY(HandleTable, h) \ + (&(HandleTable)->Entries[GDI_HANDLE_GET_INDEX((h))]) diff --git a/reactos/subsystems/win32/win32k/objects/gdiobj.c b/reactos/subsystems/win32/win32k/objects/gdiobj.c index dcf59df39db..6bbca8cddd4 100644 --- a/reactos/subsystems/win32/win32k/objects/gdiobj.c +++ b/reactos/subsystems/win32/win32k/objects/gdiobj.c @@ -12,11 +12,6 @@ #define NDEBUG #include -#define GDI_ENTRY_TO_INDEX(ht, e) \ - (((ULONG_PTR)(e) - (ULONG_PTR)&((ht)->Entries[0])) / sizeof(GDI_TABLE_ENTRY)) -#define GDI_HANDLE_GET_ENTRY(HandleTable, h) \ - (&(HandleTable)->Entries[GDI_HANDLE_GET_INDEX((h))]) - #define BASE_OBJTYPE_COUNT 32 #define DelayExecution() \ diff --git a/reactos/subsystems/win32/win32k/objects/region.c b/reactos/subsystems/win32/win32k/objects/region.c index c681d4e9f42..d1b00441065 100644 --- a/reactos/subsystems/win32/win32k/objects/region.c +++ b/reactos/subsystems/win32/win32k/objects/region.c @@ -2073,14 +2073,12 @@ FASTCALL REGION_AllocUserRgnWithHandle(INT nRgn) { PROSRGNDATA pRgn; - INT Index; PGDI_TABLE_ENTRY Entry; pRgn = REGION_AllocRgnWithHandle(nRgn); if (pRgn) { - Index = GDI_HANDLE_GET_INDEX(pRgn->BaseObject.hHmgr); - Entry = &GdiHandleTable->Entries[Index]; + Entry = GDI_HANDLE_GET_ENTRY(GdiHandleTable, pRgn->BaseObject.hHmgr); Entry->UserData = AllocateObjectAttr(); } return pRgn; @@ -2090,23 +2088,18 @@ PROSRGNDATA FASTCALL RGNOBJAPI_Lock(HRGN hRgn, PRGN_ATTR *ppRgn_Attr) { - INT Index; PGDI_TABLE_ENTRY Entry; - PROSRGNDATA pRgn; PRGN_ATTR pRgn_Attr; - HANDLE pid; + PROSRGNDATA pRgn = NULL; pRgn = REGION_LockRgn(hRgn); - if (pRgn) + if (pRgn && GDIOBJ_OwnedByCurrentProcess(hRgn)) { - Index = GDI_HANDLE_GET_INDEX(hRgn); - Entry = &GdiHandleTable->Entries[Index]; + Entry = GDI_HANDLE_GET_ENTRY(GdiHandleTable, hRgn); pRgn_Attr = Entry->UserData; - pid = (HANDLE)((ULONG_PTR)Entry->ProcessId & ~0x1); - if ( pid == NtCurrentTeb()->ClientId.UniqueProcess && - pRgn_Attr ) + if ( pRgn_Attr ) { _SEH2_TRY { @@ -2151,20 +2144,15 @@ VOID FASTCALL RGNOBJAPI_Unlock(PROSRGNDATA pRgn) { - INT Index; PGDI_TABLE_ENTRY Entry; PRGN_ATTR pRgn_Attr; - HANDLE pid; - if (pRgn) + if (pRgn && GDIOBJ_OwnedByCurrentProcess(pRgn->BaseObject.hHmgr)) { - Index = GDI_HANDLE_GET_INDEX(pRgn->BaseObject.hHmgr); - Entry = &GdiHandleTable->Entries[Index]; + Entry = GDI_HANDLE_GET_ENTRY(GdiHandleTable, pRgn->BaseObject.hHmgr); pRgn_Attr = Entry->UserData; - pid = (HANDLE)((ULONG_PTR)Entry->ProcessId & ~0x1); - if ( pid == NtCurrentTeb()->ClientId.UniqueProcess && - pRgn_Attr ) + if ( pRgn_Attr ) { _SEH2_TRY { From ebe3986eb94fbc20f8b8601b5d1765bfb7a0a8dc Mon Sep 17 00:00:00 2001 From: James Tabor Date: Thu, 10 Mar 2011 13:45:09 +0000 Subject: [PATCH 253/287] [GDI32] - Protect SetDIBitsToDevice with seh and track it. This is for vbrun60spXX. Code fix ups and cleanup. svn path=/trunk/; revision=51009 --- reactos/dll/win32/gdi32/include/gdi32p.h | 1 - reactos/dll/win32/gdi32/objects/bitmap.c | 116 ++++++++++------------- reactos/dll/win32/gdi32/objects/utils.c | 2 +- 3 files changed, 53 insertions(+), 66 deletions(-) diff --git a/reactos/dll/win32/gdi32/include/gdi32p.h b/reactos/dll/win32/gdi32/include/gdi32p.h index 49673de0ce2..f4ef1d9342b 100644 --- a/reactos/dll/win32/gdi32/include/gdi32p.h +++ b/reactos/dll/win32/gdi32/include/gdi32p.h @@ -279,7 +279,6 @@ WINAPI GdiSetLastError( DWORD dwErrCode ); DWORD WINAPI GdiGetCodePage(HDC); -UINT FASTCALL DIB_BitmapBitsSize( CONST BITMAPINFO* ); int WINAPI diff --git a/reactos/dll/win32/gdi32/objects/bitmap.c b/reactos/dll/win32/gdi32/objects/bitmap.c index 024ac81f4cb..484c58a792f 100644 --- a/reactos/dll/win32/gdi32/objects/bitmap.c +++ b/reactos/dll/win32/gdi32/objects/bitmap.c @@ -3,6 +3,9 @@ #define NDEBUG #include +// From Yuan, ScanLineSize = (Width * bitcount + 31)/32 +#define WIDTH_BYTES_ALIGN32(cx, bpp) ((((cx) * (bpp) + 31) & ~31) >> 3) + /* * DIB_BitmapInfoSize * @@ -41,30 +44,6 @@ INT FASTCALL DIB_BitmapInfoSize(const BITMAPINFO * info, WORD coloruse) UINT FASTCALL DIB_BitmapMaxBitsSize( PBITMAPINFO Info, UINT ScanLines ) -{ - UINT MaxBits = 0; - - if (!Info) return 0; - - if (Info->bmiHeader.biSize == sizeof(BITMAPCOREHEADER)) - { - PBITMAPCOREHEADER Core = (PBITMAPCOREHEADER)Info; - MaxBits = Core->bcBitCount * Core->bcPlanes * Core->bcWidth; - } - else /* assume BITMAPINFOHEADER */ - { - if ((Info->bmiHeader.biCompression) && (Info->bmiHeader.biCompression != BI_BITFIELDS)) - return Info->bmiHeader.biSizeImage; - // Planes are over looked by Yuan. I guess assumed always 1. - MaxBits = Info->bmiHeader.biBitCount * Info->bmiHeader.biPlanes * Info->bmiHeader.biWidth; - } - MaxBits = ((MaxBits + 31) & ~31 ) / 8; // From Yuan, ScanLineSize = (Width * bitcount + 31)/32 - return (MaxBits * ScanLines); // ret the full Size. -} - -UINT -FASTCALL -DIB_BitmapBitsSize( CONST BITMAPINFO* Info ) { UINT Ret; @@ -73,22 +52,22 @@ DIB_BitmapBitsSize( CONST BITMAPINFO* Info ) if ( Info->bmiHeader.biSize == sizeof(BITMAPCOREHEADER)) { PBITMAPCOREHEADER Core = (PBITMAPCOREHEADER)Info; - Ret = Core->bcHeight * - ((Core->bcWidth * Core->bcPlanes * Core->bcBitCount + 31) & ~31 ) / 8; + Ret = WIDTH_BYTES_ALIGN32(Core->bcWidth * Core->bcPlanes, Core->bcBitCount) * ScanLines; } else /* assume BITMAPINFOHEADER */ { - if ((Info->bmiHeader.biCompression) && - (Info->bmiHeader.biCompression != BI_BITFIELDS)) - return Info->bmiHeader.biSizeImage; - // Make Height positive always.... - Ret = abs(Info->bmiHeader.biHeight) * - ((Info->bmiHeader.biWidth * Info->bmiHeader.biPlanes * Info->bmiHeader.biBitCount + 31) & ~31 ) / 8; + if (!(Info->bmiHeader.biCompression) || (Info->bmiHeader.biCompression == BI_BITFIELDS)) + { + Ret = WIDTH_BYTES_ALIGN32(Info->bmiHeader.biWidth * Info->bmiHeader.biPlanes, Info->bmiHeader.biBitCount) * ScanLines; + } + else + { + Ret = Info->bmiHeader.biSizeImage; + } } return Ret; } - /* * DIB_GetBitmapInfo is complete copy of wine cvs 2/9-2006 * from file dib.c from gdi32.dll or orginal version @@ -161,39 +140,27 @@ int WINAPI GdiGetBitmapBitsSize(BITMAPINFO *lpbmi) { - int retSize; + UINT Ret; - if (lpbmi->bmiHeader.biSize == FIELD_OFFSET(BITMAPINFOHEADER, biPlanes)) + if (!lpbmi) return 0; + + if ( lpbmi->bmiHeader.biSize == sizeof(BITMAPCOREHEADER)) { - /* Calc the bits Size and align it*/ - retSize = HIWORD(lpbmi->bmiHeader.biWidth) * ((LOWORD(lpbmi->bmiHeader.biWidth) * - LOWORD(lpbmi->bmiHeader.biHeight) * HIWORD(lpbmi->bmiHeader.biHeight) + 31) - & -32) / 8; + PBITMAPCOREHEADER Core = (PBITMAPCOREHEADER)lpbmi; + Ret = WIDTH_BYTES_ALIGN32(Core->bcWidth * Core->bcPlanes, Core->bcBitCount) * Core->bcHeight; } - else + else /* assume BITMAPINFOHEADER */ { - if ( (lpbmi->bmiHeader.biCompression == BI_BITFIELDS) || - (lpbmi->bmiHeader.biCompression == BI_RGB)) + if (!(lpbmi->bmiHeader.biCompression) || (lpbmi->bmiHeader.biCompression == BI_BITFIELDS)) { - if (lpbmi->bmiHeader.biHeight >=0 ) - { - /* Calc the bits Size and align it*/ - retSize = lpbmi->bmiHeader.biHeight * ((lpbmi->bmiHeader.biWidth * - lpbmi->bmiHeader.biPlanes * lpbmi->bmiHeader.biBitCount + 31) & -32) / 8; - } - else - { - /* Make height postiive if it negitve then calc the bits Size and align it*/ - retSize = (-lpbmi->bmiHeader.biHeight) * ((lpbmi->bmiHeader.biWidth * - lpbmi->bmiHeader.biPlanes * lpbmi->bmiHeader.biBitCount + 31) & -32) / 8; - } + Ret = WIDTH_BYTES_ALIGN32(lpbmi->bmiHeader.biWidth * lpbmi->bmiHeader.biPlanes, lpbmi->bmiHeader.biBitCount) * abs(lpbmi->bmiHeader.biHeight); } else { - retSize = lpbmi->bmiHeader.biSizeImage; + Ret = lpbmi->bmiHeader.biSizeImage; } } - return retSize; + return Ret; } /* @@ -316,7 +283,7 @@ StretchBlt( } /* - * @unimplemented + * @implemented */ HBITMAP WINAPI CreateBitmap(INT Width, @@ -325,7 +292,6 @@ CreateBitmap(INT Width, UINT BitsPixel, CONST VOID* pUnsafeBits) { - /* FIXME some part should be done in user mode */ if (Width && Height) { return NtGdiCreateBitmap(Width, Height, Planes, BitsPixel, (LPBYTE) pUnsafeBits); @@ -493,7 +459,7 @@ CreateDIBitmap( HDC hDC, { _SEH2_TRY { - cjBmpScanSize = DIB_BitmapBitsSize(Data); + cjBmpScanSize = GdiGetBitmapBitsSize((BITMAPINFO *)Data); CalculateColorTableSize(&Data->bmiHeader, &ColorUse, &InfoSize); InfoSize += Data->bmiHeader.biSize; } @@ -566,9 +532,9 @@ SetDIBits(HDC hDC, } } - hDCc = NtGdiGetDCforBitmap(hBitmap); + hDCc = NtGdiGetDCforBitmap(hBitmap); // hDC can be NULL, so, get it from the bitmap. SavehDC = hDCc; - if ( !hDCc ) + if ( !hDCc ) // No DC associated with bitmap, Clone or Create one. { nhDC = CreateCompatibleDC(hDC); if ( !nhDC ) return 0; @@ -648,6 +614,7 @@ SetDIBitsToDevice( UINT ConvertedInfoSize; INT LinesCopied = 0; UINT cjBmpScanSize = 0; + BOOL Hit = FALSE; PVOID pvSafeBits = (PVOID)Bits; if ( !ScanLines || !lpbmi || !Bits ) @@ -711,7 +678,26 @@ SetDIBitsToDevice( { pvSafeBits = RtlAllocateHeap(GetProcessHeap(), 0, cjBmpScanSize); if (pvSafeBits) - RtlCopyMemory( pvSafeBits, Bits, cjBmpScanSize); + { + _SEH2_TRY + { + RtlCopyMemory( pvSafeBits, Bits, cjBmpScanSize); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + Hit = TRUE; + } + _SEH2_END + + if (Hit) + { + // We don't die, we continue on with a allocated safe pointer to kernel + // space..... + DPRINT1("SetDIBitsToDevice fail to read BitMapInfo: %x or Bits: %x & Size: %d\n",pConvertedInfo,Bits,cjBmpScanSize); + } + DPRINT("SetDIBitsToDevice Allocate Bits %d!!!\n", cjBmpScanSize); + } + } if (!GdiGetHandleUserData(hdc, GDI_OBJECT_TYPE_DC, (PVOID)&pDc_Attr)) @@ -720,7 +706,8 @@ SetDIBitsToDevice( return 0; } /* - if ( !pDc_Attr || + if ( !pDc_Attr || // DC is Public + ColorUse == DIB_PAL_COLORS || ((pConvertedInfo->bmiHeader.biSize >= sizeof(BITMAPINFOHEADER)) && (pConvertedInfo->bmiHeader.biCompression == BI_JPEG || pConvertedInfo->bmiHeader.biCompression == BI_PNG )) )*/ @@ -833,7 +820,7 @@ StretchDIBits(HDC hdc, return 0; } - cjBmpScanSize = DIB_BitmapBitsSize((LPBITMAPINFO)pConvertedInfo); + cjBmpScanSize = GdiGetBitmapBitsSize((BITMAPINFO *)pConvertedInfo); if ( lpBits ) { @@ -867,6 +854,7 @@ StretchDIBits(HDC hdc, } /* if ( !pDc_Attr || + iUsage == DIB_PAL_COLORS || ((pConvertedInfo->bmiHeader.biSize >= sizeof(BITMAPINFOHEADER)) && (pConvertedInfo->bmiHeader.biCompression == BI_JPEG || pConvertedInfo->bmiHeader.biCompression == BI_PNG )) )*/ diff --git a/reactos/dll/win32/gdi32/objects/utils.c b/reactos/dll/win32/gdi32/objects/utils.c index 734d5df54c6..7ed0d229d64 100644 --- a/reactos/dll/win32/gdi32/objects/utils.c +++ b/reactos/dll/win32/gdi32/objects/utils.c @@ -214,7 +214,7 @@ ConvertBitmapInfo( if (FollowedByData) { - DataSize = DIB_BitmapBitsSize((PBITMAPINFO)BitmapInfo ); + DataSize = GdiGetBitmapBitsSize((PBITMAPINFO)BitmapInfo ); } /* From 65635497f6b2cf4039586b0275914da0f586e404 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Thu, 10 Mar 2011 14:07:55 +0000 Subject: [PATCH 254/287] [MSAFD] - Fix bug introduced in 51007 svn path=/trunk/; revision=51010 --- reactos/dll/win32/msafd/misc/dllmain.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/dll/win32/msafd/misc/dllmain.c b/reactos/dll/win32/msafd/misc/dllmain.c index ca129414b97..3fb76c8c213 100644 --- a/reactos/dll/win32/msafd/misc/dllmain.c +++ b/reactos/dll/win32/msafd/misc/dllmain.c @@ -907,7 +907,7 @@ WSPSelect(IN int nfds, } PollInfo->HandleCount = j; - PollBufferSize = sizeof(AFD_POLL_INFO) + (PollInfo->HandleCount > 1 ? sizeof(HANDLE) * ( PollInfo->HandleCount - 1) : 0); + PollBufferSize = FIELD_OFFSET(AFD_POLL_INFO, Handles) + PollInfo->HandleCount * sizeof(AFD_HANDLE); /* Send IOCTL */ Status = NtDeviceIoControlFile((HANDLE)PollInfo->Handles[0].Handle, From 8afa712c7a376a0236cf6f6abf57ab822c3fb744 Mon Sep 17 00:00:00 2001 From: Ged Murphy Date: Thu, 10 Mar 2011 15:37:51 +0000 Subject: [PATCH 255/287] FatCreateCcb has no params. Fixes building on msvc svn path=/trunk/; revision=51011 --- reactos/drivers/filesystems/fastfat_new/dir.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/drivers/filesystems/fastfat_new/dir.c b/reactos/drivers/filesystems/fastfat_new/dir.c index 991971545bf..b1fb747ddad 100644 --- a/reactos/drivers/filesystems/fastfat_new/dir.c +++ b/reactos/drivers/filesystems/fastfat_new/dir.c @@ -248,7 +248,7 @@ FatiOpenExistingDcb(IN PFAT_IRP_CONTEXT IrpContext, } /* Set the file object */ - Ccb = FatCreateCcb(IrpContext); + Ccb = FatCreateCcb(); FatSetFileObject(FileObject, UserDirectoryOpen, Dcb, From 81f9d934ffcd202e60b1880a6e819a55ab91d430 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Thu, 10 Mar 2011 21:02:21 +0000 Subject: [PATCH 256/287] [NTOSKRNL] Implemented FstubTranslatorNull, FstubTranslateResource, FstubTranslateRequirement, xHalGetInterruptTranslator. In other words: please welcome interrupt translator in ReactOS. It's not used yet. svn path=/trunk/; revision=51012 --- reactos/ntoskrnl/fstub/halstub.c | 2 +- reactos/ntoskrnl/fstub/translate.c | 189 +++++++++++++++++++++++ reactos/ntoskrnl/include/internal/hal.h | 10 ++ reactos/ntoskrnl/ntoskrnl-generic.rbuild | 1 + 4 files changed, 201 insertions(+), 1 deletion(-) create mode 100644 reactos/ntoskrnl/fstub/translate.c diff --git a/reactos/ntoskrnl/fstub/halstub.c b/reactos/ntoskrnl/fstub/halstub.c index 38eec69b014..a449f0b6a88 100644 --- a/reactos/ntoskrnl/fstub/halstub.c +++ b/reactos/ntoskrnl/fstub/halstub.c @@ -32,7 +32,7 @@ HAL_DISPATCH HalDispatchTable = (pHalInitPnpDriver)NULL, (pHalInitPowerManagement)NULL, (pHalGetDmaAdapter) NULL, - (pHalGetInterruptTranslator)NULL, + xHalGetInterruptTranslator, (pHalStartMirroring)NULL, (pHalEndMirroring)NULL, (pHalMirrorPhysicalMemory)NULL, diff --git a/reactos/ntoskrnl/fstub/translate.c b/reactos/ntoskrnl/fstub/translate.c new file mode 100644 index 00000000000..b9d37d266cd --- /dev/null +++ b/reactos/ntoskrnl/fstub/translate.c @@ -0,0 +1,189 @@ +/* +* PROJECT: ReactOS Kernel +* LICENSE: GPL - See COPYING in the top level directory +* FILE: ntoskrnl/fstub/translate.c +* PURPOSE: Interrupt Translator Routines +* PROGRAMMERS: Pierre Schweitzer (pierre.schweitzer@reactos.org) +*/ + +/* INCLUDES ******************************************************************/ + +#include +#define NDEBUG +#include + +#define HAL_IRQ_TRANSLATOR_VERSION 0x0 + +/* PRIVATE FUNCTIONS *********************************************************/ + +/* + * @implemented + */ +VOID +NTAPI +FstubTranslatorNull(PVOID Context) +{ + PAGED_CODE(); + + /* Do nothing */ + return; +} + +/* + * @implemented + */ +NTSTATUS +NTAPI +FstubTranslateResource(IN OUT PVOID Context OPTIONAL, + IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source, + IN RESOURCE_TRANSLATION_DIRECTION Direction, + IN ULONG AlternativesCount OPTIONAL, + IN IO_RESOURCE_DESCRIPTOR Alternatives[], + IN PDEVICE_OBJECT PhysicalDeviceObject, + OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target) +{ + INT k; + KIRQL Irql; + KAFFINITY Affinity; + ULONG MinimumVector, Vector; + PIO_RESOURCE_DESCRIPTOR Alternative; + NTSTATUS Status = STATUS_UNSUCCESSFUL; + PAGED_CODE(); + + ASSERT(Source->Type == CmResourceTypeInterrupt); + + /* Copy common information */ + Target->Type = Source->Type; + Target->ShareDisposition = Source->ShareDisposition; + Target->Flags = Source->Flags; + + if (Direction == TranslateChildToParent) + { + /* Get IRQL, affinity & system vector for the device vector */ + Target->u.Interrupt.Vector = HalGetInterruptVector((INTERFACE_TYPE)Context, 0, + Source->u.Interrupt.Vector, + Source->u.Interrupt.Vector, + &Irql, &Affinity); + Target->u.Interrupt.Level = Irql; + Target->u.Interrupt.Affinity = Affinity; + Status = STATUS_TRANSLATION_COMPLETE; + } + else if (Direction == TranslateParentToChild) + { + /* Browse all the resources */ + for (k = 0; k < AlternativesCount; k++) + { + Alternative = &(Alternatives[k]); + + ASSERT(Alternative->Type == CmResourceTypeInterrupt); + + /* Try to find the device vector, proceeding by trial & error + * We try a vector, and translate it + */ + MinimumVector = Alternative->u.Interrupt.MinimumVector; + while (MinimumVector <= Alternative->u.Interrupt.MaximumVector) + { + /* Translate the vector */ + Vector = HalGetInterruptVector((INTERFACE_TYPE)Context, 0, + MinimumVector, + MinimumVector, + &Irql, &Affinity); + + /* If the translated vector is matching the given translated vector */ + if (Vector == Source->u.Interrupt.Vector) + { + /* We are done, send back device vector */ + Target->u.Interrupt.Affinity = -1; + Target->u.Interrupt.Vector = MinimumVector; + Target->u.Interrupt.Level = MinimumVector; + + return STATUS_SUCCESS; + } + + MinimumVector++; + } + } + } + + return Status; +} + +/* + * @implemented + */ +NTSTATUS +NTAPI +FstubTranslateRequirement(IN OUT PVOID Context OPTIONAL, + IN PIO_RESOURCE_DESCRIPTOR Source, + IN PDEVICE_OBJECT PhysicalDeviceObject, + OUT PULONG TargetCount, + OUT PIO_RESOURCE_DESCRIPTOR *Target) +{ + KIRQL Irql; + KAFFINITY Affinity; + PAGED_CODE(); + + ASSERT(Source->Type == CmResourceTypeInterrupt); + + /* Allocate output buffer */ + *Target = ExAllocatePoolWithTag(PagedPool, sizeof(IO_RESOURCE_DESCRIPTOR), 'btsF'); + if (!*Target) + { + return STATUS_INSUFFICIENT_RESOURCES; + } + + /* Zero & set out count to 1 */ + RtlZeroMemory(*Target, sizeof(IO_RESOURCE_DESCRIPTOR)); + *TargetCount = 1; + + /* Translate minimum interrupt vector */ + (*Target)->u.Interrupt.MinimumVector = HalGetInterruptVector((INTERFACE_TYPE)Context, 0, + Source->u.Interrupt.MinimumVector, + Source->u.Interrupt.MinimumVector, + &Irql, &Affinity); + + /* Translate maximum interrupt vector */ + (*Target)->u.Interrupt.MaximumVector = HalGetInterruptVector((INTERFACE_TYPE)Context, 0, + Source->u.Interrupt.MaximumVector, + Source->u.Interrupt.MaximumVector, + &Irql, &Affinity); + + return STATUS_TRANSLATION_COMPLETE; +} + +/* + * @implemented + */ +NTSTATUS +NTAPI +xHalGetInterruptTranslator(IN INTERFACE_TYPE ParentInterfaceType, + IN ULONG ParentBusNumber, + IN INTERFACE_TYPE BridgeInterfaceType, + IN USHORT Size, + IN USHORT Version, + OUT PTRANSLATOR_INTERFACE Translator, + OUT PULONG BridgeBusNumber) +{ + PAGED_CODE(); + + ASSERT(Version == HAL_IRQ_TRANSLATOR_VERSION); + ASSERT(Size >= sizeof(TRANSLATOR_INTERFACE)); + + /* Only (E)ISA interfaces are supported */ + if (BridgeInterfaceType == Internal || BridgeInterfaceType >= MicroChannel) + { + return STATUS_NOT_IMPLEMENTED; + } + + /* Fill in output struct */ + Translator->Size = sizeof(TRANSLATOR_INTERFACE); + Translator->Version = HAL_IRQ_TRANSLATOR_VERSION; + /* In case caller set interface to undefined, faulty it to ISA */ + Translator->Context = (PVOID)((BridgeInterfaceType == InterfaceTypeUndefined) ? Isa : BridgeInterfaceType); + Translator->InterfaceReference = FstubTranslatorNull; + Translator->InterfaceDereference = FstubTranslatorNull; + Translator->TranslateResources = FstubTranslateResource; + Translator->TranslateResourceRequirements = FstubTranslateRequirement; + + return STATUS_SUCCESS; +} diff --git a/reactos/ntoskrnl/include/internal/hal.h b/reactos/ntoskrnl/include/internal/hal.h index 47b76beee48..f465ad71134 100644 --- a/reactos/ntoskrnl/include/internal/hal.h +++ b/reactos/ntoskrnl/include/internal/hal.h @@ -71,6 +71,16 @@ xHalVectorToIDTEntry( IN ULONG Vector ); +NTSTATUS +NTAPI +xHalGetInterruptTranslator(IN INTERFACE_TYPE ParentInterfaceType, + IN ULONG ParentBusNumber, + IN INTERFACE_TYPE BridgeInterfaceType, + IN USHORT Size, + IN USHORT Version, + OUT PTRANSLATOR_INTERFACE Translator, + OUT PULONG BridgeBusNumber); + // // Various offsets in the boot record diff --git a/reactos/ntoskrnl/ntoskrnl-generic.rbuild b/reactos/ntoskrnl/ntoskrnl-generic.rbuild index 5d01e44447b..12882439405 100644 --- a/reactos/ntoskrnl/ntoskrnl-generic.rbuild +++ b/reactos/ntoskrnl/ntoskrnl-generic.rbuild @@ -285,6 +285,7 @@ disksup.c fstubex.c halstub.c + translate.c inbv.c From 1e2dd5d5d221352983fc92bc3f5a7b2487b251b4 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Thu, 10 Mar 2011 22:07:56 +0000 Subject: [PATCH 257/287] [NOTEPAD] - Edijs: Zero initialize the caption string. See issue #5992 for more details. svn path=/trunk/; revision=51013 --- reactos/base/applications/notepad/dialog.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/base/applications/notepad/dialog.c b/reactos/base/applications/notepad/dialog.c index 541a180e23f..1ac3019af90 100644 --- a/reactos/base/applications/notepad/dialog.c +++ b/reactos/base/applications/notepad/dialog.c @@ -117,7 +117,7 @@ VOID ShowLastError(void) */ static void UpdateWindowCaption(void) { - TCHAR szCaption[MAX_STRING_LEN]; + TCHAR szCaption[MAX_STRING_LEN] = _T(""); TCHAR szNotepad[MAX_STRING_LEN]; LoadString(Globals.hInstance, STRING_NOTEPAD, szNotepad, SIZEOF(szNotepad)); From fd5a3bdc63b502008afeb12bde9443a2d672c13b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Fri, 11 Mar 2011 10:33:03 +0000 Subject: [PATCH 258/287] [GDI32] - allocate sufficient buffer when creating a DIBSECTION compatible bitmap. Fixes bug 5822 svn path=/trunk/; revision=51014 --- reactos/dll/win32/gdi32/objects/bitmap.c | 25 ++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/reactos/dll/win32/gdi32/objects/bitmap.c b/reactos/dll/win32/gdi32/objects/bitmap.c index 484c58a792f..9e5aaeb6477 100644 --- a/reactos/dll/win32/gdi32/objects/bitmap.c +++ b/reactos/dll/win32/gdi32/objects/bitmap.c @@ -348,8 +348,6 @@ CreateCompatibleBitmap( INT Height) { PDC_ATTR pDc_Attr; - HBITMAP hBmp = NULL; - DIBSECTION dibs; if (!GdiGetHandleUserData(hDC, GDI_OBJECT_TYPE_DC, (PVOID)&pDc_Attr)) return NULL; @@ -361,19 +359,26 @@ CreateCompatibleBitmap( { return NtGdiCreateCompatibleBitmap(hDC, Width, Height); } + else + { + HBITMAP hBmp = NULL; + char buffer[sizeof(DIBSECTION) + 256*sizeof(RGBQUAD)]; + DIBSECTION* pDIBs = (DIBSECTION*)buffer; - hBmp = NtGdiGetDCObject(hDC, GDI_OBJECT_TYPE_BITMAP); + hBmp = NtGdiGetDCObject(hDC, GDI_OBJECT_TYPE_BITMAP); - if ( GetObjectA(hBmp, sizeof(DIBSECTION), &dibs) != sizeof(DIBSECTION) ) - return NULL; + if ( GetObjectA(hBmp, sizeof(DIBSECTION), pDIBs) != sizeof(DIBSECTION) ) + return NULL; - if ( dibs.dsBm.bmBitsPixel <= 8 ) - GetDIBColorTable(hDC, 0, 256, (RGBQUAD *)&dibs.dsBitfields); + if ( pDIBs->dsBm.bmBitsPixel <= 8 ) + GetDIBColorTable(hDC, 0, 256, (RGBQUAD *)&pDIBs->dsBitfields[0]); - dibs.dsBmih.biWidth = Width; - dibs.dsBmih.biHeight = Height; + pDIBs->dsBmih.biWidth = Width; + pDIBs->dsBmih.biHeight = Height; - return CreateDIBSection(hDC, (CONST BITMAPINFO *)&dibs.dsBmih, 0, NULL, NULL, 0); + return CreateDIBSection(hDC, (CONST BITMAPINFO *)&pDIBs->dsBmih, 0, NULL, NULL, 0); + } + return NULL; } From 7161edbfe731bd14a978bb2fb27f195b78c7fd8c Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Fri, 11 Mar 2011 13:00:20 +0000 Subject: [PATCH 259/287] [NDK] pHalAllocateMapRegisters type functions are to return NTSTATUS and not BOOLEAN svn path=/trunk/; revision=51015 --- reactos/include/ndk/haltypes.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/include/ndk/haltypes.h b/reactos/include/ndk/haltypes.h index f7d5e57082a..272a0d4fdc2 100644 --- a/reactos/include/ndk/haltypes.h +++ b/reactos/include/ndk/haltypes.h @@ -88,7 +88,7 @@ VOID ); typedef -BOOLEAN +NTSTATUS (NTAPI *pHalAllocateMapRegisters)( IN PADAPTER_OBJECT AdapterObject, IN ULONG Unknown, From c4d0b3e36bee9eeef622bc3be219ef21e08b4972 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Fri, 11 Mar 2011 13:16:16 +0000 Subject: [PATCH 260/287] [NTOSKRNL] Add most of the missing HAL stubs for both public & private dispatch tables svn path=/trunk/; revision=51016 --- reactos/ntoskrnl/fstub/halstub.c | 247 +++++++++++++++++++++--- reactos/ntoskrnl/include/internal/hal.h | 169 +++++++++++++++- 2 files changed, 382 insertions(+), 34 deletions(-) diff --git a/reactos/ntoskrnl/fstub/halstub.c b/reactos/ntoskrnl/fstub/halstub.c index a449f0b6a88..a89ce80cc1f 100644 --- a/reactos/ntoskrnl/fstub/halstub.c +++ b/reactos/ntoskrnl/fstub/halstub.c @@ -4,6 +4,7 @@ * FILE: ntoskrnl/fstub/halstub.c * PURPOSE: I/O Stub HAL Routines * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org) + Pierre Schweitzer (pierre.schweitzer@reactos.org) */ /* INCLUDES ******************************************************************/ @@ -17,51 +18,51 @@ HAL_DISPATCH HalDispatchTable = { HAL_DISPATCH_VERSION, - (pHalQuerySystemInformation)NULL, - (pHalSetSystemInformation)NULL, - (pHalQueryBusSlots)NULL, + xHalQuerySystemInformation, + xHalSetSystemInformation, + xHalQueryBusSlots, 0, xHalExamineMBR, xHalIoAssignDriveLetters, xHalIoReadPartitionTable, xHalIoSetPartitionInformation, xHalIoWritePartitionTable, - (pHalHandlerForBus)NULL, - (pHalReferenceBusHandler)NULL, - (pHalReferenceBusHandler)NULL, - (pHalInitPnpDriver)NULL, - (pHalInitPowerManagement)NULL, + xHalHandlerForBus, + xHalReferenceHandler, + xHalReferenceHandler, + xHalInitPnpDriver, + xHalInitPowerManagement, (pHalGetDmaAdapter) NULL, xHalGetInterruptTranslator, - (pHalStartMirroring)NULL, - (pHalEndMirroring)NULL, - (pHalMirrorPhysicalMemory)NULL, + xHalStartMirroring, + xHalEndMirroring, + xHalMirrorPhysicalMemory, xHalEndOfBoot, - (pHalMirrorVerify)NULL + xHalMirrorPhysicalMemory }; HAL_PRIVATE_DISPATCH HalPrivateDispatchTable = { HAL_PRIVATE_DISPATCH_VERSION, - (pHalHandlerForBus)NULL, - (pHalHandlerForConfigSpace)NULL, - (pHalLocateHiberRanges)NULL, - (pHalRegisterBusHandler)NULL, + xHalHandlerForBus, + (pHalHandlerForConfigSpace)xHalHandlerForBus, + xHalLocateHiberRanges, + xHalRegisterBusHandler, xHalSetWakeEnable, - (pHalSetWakeAlarm)NULL, - (pHalTranslateBusAddress)NULL, - (pHalAssignSlotResources)NULL, + xHalSetWakeAlarm, + xHalTranslateBusAddress, + (pHalAssignSlotResources)xHalTranslateBusAddress, xHalHaltSystem, (pHalFindBusAddressTranslation)NULL, (pHalResetDisplay)NULL, - (pHalAllocateMapRegisters)NULL, - (pKdSetupPciDeviceForDebugging)NULL, - (pKdReleasePciDeviceForDebugging)NULL, - (pKdGetAcpiTablePhase0)NULL, - (pKdCheckPowerButton)NULL, - (pHalVectorToIDTEntry)xHalVectorToIDTEntry, - (pKdMapPhysicalMemory64)NULL, - (pKdUnmapVirtualAddress)NULL + xHalAllocateMapRegisters, + xKdSetupPciDeviceForDebugging, + xKdReleasePciDeviceForDebugging, + xKdGetAcpiTablePhase, + (pKdCheckPowerButton)xHalReferenceHandler, + xHalVectorToIDTEntry, + (pKdMapPhysicalMemory64)MatchAll, + (pKdUnmapVirtualAddress)xKdUnmapVirtualAddress }; /* FUNCTIONS *****************************************************************/ @@ -86,6 +87,8 @@ VOID NTAPI xHalEndOfBoot(VOID) { + PAGED_CODE(); + /* Nothing */ return; } @@ -97,3 +100,193 @@ xHalSetWakeEnable(IN BOOLEAN Enable) /* Nothing */ return; } + +PBUS_HANDLER +FASTCALL +xHalHandlerForBus(IN INTERFACE_TYPE InterfaceType, + IN ULONG BusNumber) +{ + return NULL; +} + +VOID +FASTCALL +xHalReferenceHandler(IN PBUS_HANDLER BusHandler) +{ + /* Nothing */ + return; +} + +NTSTATUS +NTAPI +xHalInitPnpDriver(VOID) +{ + return STATUS_NOT_SUPPORTED; +} + +NTSTATUS +NTAPI +xHalInitPowerManagement(IN PPM_DISPATCH_TABLE PmDriverDispatchTable, + OUT PPM_DISPATCH_TABLE *PmHalDispatchTable) +{ + return STATUS_NOT_SUPPORTED; +} + +NTSTATUS +NTAPI +xHalStartMirroring(VOID) +{ + PAGED_CODE(); + + return STATUS_NOT_SUPPORTED; +} + +NTSTATUS +NTAPI +xHalEndMirroring(IN ULONG PassNumber) +{ + return STATUS_NOT_SUPPORTED; +} + +NTSTATUS +NTAPI +xHalMirrorPhysicalMemory(IN PHYSICAL_ADDRESS PhysicalAddress, + IN LARGE_INTEGER NumberOfBytes) +{ + return STATUS_NOT_SUPPORTED; +} + +NTSTATUS +NTAPI +xHalQueryBusSlots(IN PBUS_HANDLER BusHandler, + IN ULONG BufferSize, + OUT PULONG SlotNumbers, + OUT PULONG ReturnedLength) +{ + PAGED_CODE(); + + return STATUS_NOT_SUPPORTED; +} + +NTSTATUS +NTAPI +xHalSetSystemInformation(IN HAL_SET_INFORMATION_CLASS InformationClass, + IN ULONG BufferSize, + IN PVOID Buffer) +{ + PAGED_CODE(); + + return STATUS_INVALID_LEVEL; +} + +NTSTATUS +NTAPI +xHalQuerySystemInformation(IN HAL_QUERY_INFORMATION_CLASS InformationClass, + IN ULONG BufferSize, + IN OUT PVOID Buffer, + OUT PULONG ReturnedLength) +{ + PAGED_CODE(); + + return STATUS_INVALID_LEVEL; +} + +VOID +NTAPI +xHalLocateHiberRanges(IN PVOID MemoryMap) +{ + /* Nothing */ + return; +} + +NTSTATUS +NTAPI +xHalRegisterBusHandler(IN INTERFACE_TYPE InterfaceType, + IN BUS_DATA_TYPE ConfigSpace, + IN ULONG BusNumber, + IN INTERFACE_TYPE ParentInterfaceType, + IN ULONG ParentBusNumber, + IN ULONG ContextSize, + IN PINSTALL_BUS_HANDLER InstallCallback, + OUT PBUS_HANDLER *BusHandler) +{ + PAGED_CODE(); + + return STATUS_NOT_SUPPORTED; +} + +VOID +NTAPI +xHalSetWakeAlarm(IN ULONGLONG AlartTime, + IN PTIME_FIELDS TimeFields) +{ + /* Nothing */ + return; +} + +BOOLEAN +NTAPI +xHalTranslateBusAddress(IN INTERFACE_TYPE InterfaceType, + IN ULONG BusNumber, + IN PHYSICAL_ADDRESS BusAddress, + IN OUT PULONG AddressSpace, + OUT PPHYSICAL_ADDRESS TranslatedAddress) +{ + KeBugCheckEx(HAL_INITIALIZATION_FAILED, 0, 0, 0, 0); + + return FALSE; +} + +NTSTATUS +NTAPI +xHalAllocateMapRegisters(IN PADAPTER_OBJECT AdapterObject, + IN ULONG Unknown, + IN ULONG Unknown2, + PMAP_REGISTER_ENTRY Registers) +{ + PAGED_CODE(); + + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +xKdSetupPciDeviceForDebugging(IN PVOID LoaderBlock OPTIONAL, + IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice) +{ + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +xKdReleasePciDeviceForDebugging(IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice) +{ + return STATUS_NOT_IMPLEMENTED; +} + +PVOID +NTAPI +xKdGetAcpiTablePhase(IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock, + IN ULONG Signature) +{ + return NULL; +} + +PVOID +NTAPI +MatchAll(IN PHYSICAL_ADDRESS PhysicalAddress, + IN ULONG NumberPages, + IN BOOLEAN FlushCurrentTLB) +{ + return NULL; +} + +VOID +NTAPI +xKdUnmapVirtualAddress(IN PVOID VirtualAddress, + IN ULONG NumberPages, + IN BOOLEAN FlushCurrentTLB) +{ + /* Nothing */ + return; +} diff --git a/reactos/ntoskrnl/include/internal/hal.h b/reactos/ntoskrnl/include/internal/hal.h index f465ad71134..249ae64a19b 100644 --- a/reactos/ntoskrnl/include/internal/hal.h +++ b/reactos/ntoskrnl/include/internal/hal.h @@ -4,6 +4,7 @@ * FILE: ntoskrnl/include/hal.h * PURPOSE: Internal header for the I/O HAL Functions (Fstub) * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org) + * Pierre Schweitzer (pierre.schweitzer@reactos.org) */ #pragma once @@ -73,13 +74,167 @@ xHalVectorToIDTEntry( NTSTATUS NTAPI -xHalGetInterruptTranslator(IN INTERFACE_TYPE ParentInterfaceType, - IN ULONG ParentBusNumber, - IN INTERFACE_TYPE BridgeInterfaceType, - IN USHORT Size, - IN USHORT Version, - OUT PTRANSLATOR_INTERFACE Translator, - OUT PULONG BridgeBusNumber); +xHalGetInterruptTranslator( + IN INTERFACE_TYPE ParentInterfaceType, + IN ULONG ParentBusNumber, + IN INTERFACE_TYPE BridgeInterfaceType, + IN USHORT Size, + IN USHORT Version, + OUT PTRANSLATOR_INTERFACE Translator, + OUT PULONG BridgeBusNumber +); + +PBUS_HANDLER +FASTCALL +xHalHandlerForBus( + IN INTERFACE_TYPE InterfaceType, + IN ULONG BusNumber +); + +VOID +FASTCALL +xHalReferenceHandler( + IN PBUS_HANDLER BusHandler +); + +NTSTATUS +NTAPI +xHalInitPnpDriver( + VOID +); + +NTSTATUS +NTAPI +xHalInitPowerManagement( + IN PPM_DISPATCH_TABLE PmDriverDispatchTable, + OUT PPM_DISPATCH_TABLE *PmHalDispatchTable +); + +NTSTATUS +NTAPI +xHalStartMirroring( + VOID +); + +NTSTATUS +NTAPI +xHalEndMirroring( + IN ULONG PassNumber +); + +NTSTATUS +NTAPI +xHalMirrorPhysicalMemory( + IN PHYSICAL_ADDRESS PhysicalAddress, + IN LARGE_INTEGER NumberOfBytes +); + +NTSTATUS +NTAPI +xHalQueryBusSlots( + IN PBUS_HANDLER BusHandler, + IN ULONG BufferSize, + OUT PULONG SlotNumbers, + OUT PULONG ReturnedLength +); + +NTSTATUS +NTAPI +xHalSetSystemInformation( + IN HAL_SET_INFORMATION_CLASS InformationClass, + IN ULONG BufferSize, + IN PVOID Buffer +); + +NTSTATUS +NTAPI +xHalQuerySystemInformation( + IN HAL_QUERY_INFORMATION_CLASS InformationClass, + IN ULONG BufferSize, + IN OUT PVOID Buffer, + OUT PULONG ReturnedLength +); + +VOID +NTAPI +xHalLocateHiberRanges( + IN PVOID MemoryMap +); + +NTSTATUS +NTAPI +xHalRegisterBusHandler( + IN INTERFACE_TYPE InterfaceType, + IN BUS_DATA_TYPE ConfigSpace, + IN ULONG BusNumber, + IN INTERFACE_TYPE ParentInterfaceType, + IN ULONG ParentBusNumber, + IN ULONG ContextSize, + IN PINSTALL_BUS_HANDLER InstallCallback, + OUT PBUS_HANDLER *BusHandler +); + +VOID +NTAPI +xHalSetWakeAlarm( + IN ULONGLONG AlartTime, + IN PTIME_FIELDS TimeFields +); + +BOOLEAN +NTAPI +xHalTranslateBusAddress( + IN INTERFACE_TYPE InterfaceType, + IN ULONG BusNumber, + IN PHYSICAL_ADDRESS BusAddress, + IN OUT PULONG AddressSpace, + OUT PPHYSICAL_ADDRESS TranslatedAddress +); + +NTSTATUS +NTAPI +xHalAllocateMapRegisters( + IN PADAPTER_OBJECT AdapterObject, + IN ULONG Unknown, + IN ULONG Unknown2, + PMAP_REGISTER_ENTRY Registers +); + +NTSTATUS +NTAPI +xKdSetupPciDeviceForDebugging( + IN PVOID LoaderBlock OPTIONAL, + IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice +); + +NTSTATUS +NTAPI +xKdReleasePciDeviceForDebugging( + IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice +); + +PVOID +NTAPI +xKdGetAcpiTablePhase( + IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock, + IN ULONG Signature +); + +PVOID +NTAPI +MatchAll( + IN PHYSICAL_ADDRESS PhysicalAddress, + IN ULONG NumberPages, + IN BOOLEAN FlushCurrentTLB +); + +VOID +NTAPI +xKdUnmapVirtualAddress( + IN PVOID VirtualAddress, + IN ULONG NumberPages, + IN BOOLEAN FlushCurrentTLB +); // From b6ee921ee691463e875b9ea1c9f7d9a142e551b1 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Fri, 11 Mar 2011 15:17:59 +0000 Subject: [PATCH 261/287] [NTOSKRNL] Revert r51016 that quite magically breaks Qemu test bot (Registry corruption?). Everything was (and is still fine) on VirtualBox. It will be put back online once the issue will have been fixed. svn path=/trunk/; revision=51017 --- reactos/ntoskrnl/fstub/halstub.c | 247 +++--------------------- reactos/ntoskrnl/include/internal/hal.h | 169 +--------------- 2 files changed, 34 insertions(+), 382 deletions(-) diff --git a/reactos/ntoskrnl/fstub/halstub.c b/reactos/ntoskrnl/fstub/halstub.c index a89ce80cc1f..a449f0b6a88 100644 --- a/reactos/ntoskrnl/fstub/halstub.c +++ b/reactos/ntoskrnl/fstub/halstub.c @@ -4,7 +4,6 @@ * FILE: ntoskrnl/fstub/halstub.c * PURPOSE: I/O Stub HAL Routines * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org) - Pierre Schweitzer (pierre.schweitzer@reactos.org) */ /* INCLUDES ******************************************************************/ @@ -18,51 +17,51 @@ HAL_DISPATCH HalDispatchTable = { HAL_DISPATCH_VERSION, - xHalQuerySystemInformation, - xHalSetSystemInformation, - xHalQueryBusSlots, + (pHalQuerySystemInformation)NULL, + (pHalSetSystemInformation)NULL, + (pHalQueryBusSlots)NULL, 0, xHalExamineMBR, xHalIoAssignDriveLetters, xHalIoReadPartitionTable, xHalIoSetPartitionInformation, xHalIoWritePartitionTable, - xHalHandlerForBus, - xHalReferenceHandler, - xHalReferenceHandler, - xHalInitPnpDriver, - xHalInitPowerManagement, + (pHalHandlerForBus)NULL, + (pHalReferenceBusHandler)NULL, + (pHalReferenceBusHandler)NULL, + (pHalInitPnpDriver)NULL, + (pHalInitPowerManagement)NULL, (pHalGetDmaAdapter) NULL, xHalGetInterruptTranslator, - xHalStartMirroring, - xHalEndMirroring, - xHalMirrorPhysicalMemory, + (pHalStartMirroring)NULL, + (pHalEndMirroring)NULL, + (pHalMirrorPhysicalMemory)NULL, xHalEndOfBoot, - xHalMirrorPhysicalMemory + (pHalMirrorVerify)NULL }; HAL_PRIVATE_DISPATCH HalPrivateDispatchTable = { HAL_PRIVATE_DISPATCH_VERSION, - xHalHandlerForBus, - (pHalHandlerForConfigSpace)xHalHandlerForBus, - xHalLocateHiberRanges, - xHalRegisterBusHandler, + (pHalHandlerForBus)NULL, + (pHalHandlerForConfigSpace)NULL, + (pHalLocateHiberRanges)NULL, + (pHalRegisterBusHandler)NULL, xHalSetWakeEnable, - xHalSetWakeAlarm, - xHalTranslateBusAddress, - (pHalAssignSlotResources)xHalTranslateBusAddress, + (pHalSetWakeAlarm)NULL, + (pHalTranslateBusAddress)NULL, + (pHalAssignSlotResources)NULL, xHalHaltSystem, (pHalFindBusAddressTranslation)NULL, (pHalResetDisplay)NULL, - xHalAllocateMapRegisters, - xKdSetupPciDeviceForDebugging, - xKdReleasePciDeviceForDebugging, - xKdGetAcpiTablePhase, - (pKdCheckPowerButton)xHalReferenceHandler, - xHalVectorToIDTEntry, - (pKdMapPhysicalMemory64)MatchAll, - (pKdUnmapVirtualAddress)xKdUnmapVirtualAddress + (pHalAllocateMapRegisters)NULL, + (pKdSetupPciDeviceForDebugging)NULL, + (pKdReleasePciDeviceForDebugging)NULL, + (pKdGetAcpiTablePhase0)NULL, + (pKdCheckPowerButton)NULL, + (pHalVectorToIDTEntry)xHalVectorToIDTEntry, + (pKdMapPhysicalMemory64)NULL, + (pKdUnmapVirtualAddress)NULL }; /* FUNCTIONS *****************************************************************/ @@ -87,8 +86,6 @@ VOID NTAPI xHalEndOfBoot(VOID) { - PAGED_CODE(); - /* Nothing */ return; } @@ -100,193 +97,3 @@ xHalSetWakeEnable(IN BOOLEAN Enable) /* Nothing */ return; } - -PBUS_HANDLER -FASTCALL -xHalHandlerForBus(IN INTERFACE_TYPE InterfaceType, - IN ULONG BusNumber) -{ - return NULL; -} - -VOID -FASTCALL -xHalReferenceHandler(IN PBUS_HANDLER BusHandler) -{ - /* Nothing */ - return; -} - -NTSTATUS -NTAPI -xHalInitPnpDriver(VOID) -{ - return STATUS_NOT_SUPPORTED; -} - -NTSTATUS -NTAPI -xHalInitPowerManagement(IN PPM_DISPATCH_TABLE PmDriverDispatchTable, - OUT PPM_DISPATCH_TABLE *PmHalDispatchTable) -{ - return STATUS_NOT_SUPPORTED; -} - -NTSTATUS -NTAPI -xHalStartMirroring(VOID) -{ - PAGED_CODE(); - - return STATUS_NOT_SUPPORTED; -} - -NTSTATUS -NTAPI -xHalEndMirroring(IN ULONG PassNumber) -{ - return STATUS_NOT_SUPPORTED; -} - -NTSTATUS -NTAPI -xHalMirrorPhysicalMemory(IN PHYSICAL_ADDRESS PhysicalAddress, - IN LARGE_INTEGER NumberOfBytes) -{ - return STATUS_NOT_SUPPORTED; -} - -NTSTATUS -NTAPI -xHalQueryBusSlots(IN PBUS_HANDLER BusHandler, - IN ULONG BufferSize, - OUT PULONG SlotNumbers, - OUT PULONG ReturnedLength) -{ - PAGED_CODE(); - - return STATUS_NOT_SUPPORTED; -} - -NTSTATUS -NTAPI -xHalSetSystemInformation(IN HAL_SET_INFORMATION_CLASS InformationClass, - IN ULONG BufferSize, - IN PVOID Buffer) -{ - PAGED_CODE(); - - return STATUS_INVALID_LEVEL; -} - -NTSTATUS -NTAPI -xHalQuerySystemInformation(IN HAL_QUERY_INFORMATION_CLASS InformationClass, - IN ULONG BufferSize, - IN OUT PVOID Buffer, - OUT PULONG ReturnedLength) -{ - PAGED_CODE(); - - return STATUS_INVALID_LEVEL; -} - -VOID -NTAPI -xHalLocateHiberRanges(IN PVOID MemoryMap) -{ - /* Nothing */ - return; -} - -NTSTATUS -NTAPI -xHalRegisterBusHandler(IN INTERFACE_TYPE InterfaceType, - IN BUS_DATA_TYPE ConfigSpace, - IN ULONG BusNumber, - IN INTERFACE_TYPE ParentInterfaceType, - IN ULONG ParentBusNumber, - IN ULONG ContextSize, - IN PINSTALL_BUS_HANDLER InstallCallback, - OUT PBUS_HANDLER *BusHandler) -{ - PAGED_CODE(); - - return STATUS_NOT_SUPPORTED; -} - -VOID -NTAPI -xHalSetWakeAlarm(IN ULONGLONG AlartTime, - IN PTIME_FIELDS TimeFields) -{ - /* Nothing */ - return; -} - -BOOLEAN -NTAPI -xHalTranslateBusAddress(IN INTERFACE_TYPE InterfaceType, - IN ULONG BusNumber, - IN PHYSICAL_ADDRESS BusAddress, - IN OUT PULONG AddressSpace, - OUT PPHYSICAL_ADDRESS TranslatedAddress) -{ - KeBugCheckEx(HAL_INITIALIZATION_FAILED, 0, 0, 0, 0); - - return FALSE; -} - -NTSTATUS -NTAPI -xHalAllocateMapRegisters(IN PADAPTER_OBJECT AdapterObject, - IN ULONG Unknown, - IN ULONG Unknown2, - PMAP_REGISTER_ENTRY Registers) -{ - PAGED_CODE(); - - return STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS -NTAPI -xKdSetupPciDeviceForDebugging(IN PVOID LoaderBlock OPTIONAL, - IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice) -{ - return STATUS_NOT_IMPLEMENTED; -} - -NTSTATUS -NTAPI -xKdReleasePciDeviceForDebugging(IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice) -{ - return STATUS_NOT_IMPLEMENTED; -} - -PVOID -NTAPI -xKdGetAcpiTablePhase(IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock, - IN ULONG Signature) -{ - return NULL; -} - -PVOID -NTAPI -MatchAll(IN PHYSICAL_ADDRESS PhysicalAddress, - IN ULONG NumberPages, - IN BOOLEAN FlushCurrentTLB) -{ - return NULL; -} - -VOID -NTAPI -xKdUnmapVirtualAddress(IN PVOID VirtualAddress, - IN ULONG NumberPages, - IN BOOLEAN FlushCurrentTLB) -{ - /* Nothing */ - return; -} diff --git a/reactos/ntoskrnl/include/internal/hal.h b/reactos/ntoskrnl/include/internal/hal.h index 249ae64a19b..f465ad71134 100644 --- a/reactos/ntoskrnl/include/internal/hal.h +++ b/reactos/ntoskrnl/include/internal/hal.h @@ -4,7 +4,6 @@ * FILE: ntoskrnl/include/hal.h * PURPOSE: Internal header for the I/O HAL Functions (Fstub) * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org) - * Pierre Schweitzer (pierre.schweitzer@reactos.org) */ #pragma once @@ -74,167 +73,13 @@ xHalVectorToIDTEntry( NTSTATUS NTAPI -xHalGetInterruptTranslator( - IN INTERFACE_TYPE ParentInterfaceType, - IN ULONG ParentBusNumber, - IN INTERFACE_TYPE BridgeInterfaceType, - IN USHORT Size, - IN USHORT Version, - OUT PTRANSLATOR_INTERFACE Translator, - OUT PULONG BridgeBusNumber -); - -PBUS_HANDLER -FASTCALL -xHalHandlerForBus( - IN INTERFACE_TYPE InterfaceType, - IN ULONG BusNumber -); - -VOID -FASTCALL -xHalReferenceHandler( - IN PBUS_HANDLER BusHandler -); - -NTSTATUS -NTAPI -xHalInitPnpDriver( - VOID -); - -NTSTATUS -NTAPI -xHalInitPowerManagement( - IN PPM_DISPATCH_TABLE PmDriverDispatchTable, - OUT PPM_DISPATCH_TABLE *PmHalDispatchTable -); - -NTSTATUS -NTAPI -xHalStartMirroring( - VOID -); - -NTSTATUS -NTAPI -xHalEndMirroring( - IN ULONG PassNumber -); - -NTSTATUS -NTAPI -xHalMirrorPhysicalMemory( - IN PHYSICAL_ADDRESS PhysicalAddress, - IN LARGE_INTEGER NumberOfBytes -); - -NTSTATUS -NTAPI -xHalQueryBusSlots( - IN PBUS_HANDLER BusHandler, - IN ULONG BufferSize, - OUT PULONG SlotNumbers, - OUT PULONG ReturnedLength -); - -NTSTATUS -NTAPI -xHalSetSystemInformation( - IN HAL_SET_INFORMATION_CLASS InformationClass, - IN ULONG BufferSize, - IN PVOID Buffer -); - -NTSTATUS -NTAPI -xHalQuerySystemInformation( - IN HAL_QUERY_INFORMATION_CLASS InformationClass, - IN ULONG BufferSize, - IN OUT PVOID Buffer, - OUT PULONG ReturnedLength -); - -VOID -NTAPI -xHalLocateHiberRanges( - IN PVOID MemoryMap -); - -NTSTATUS -NTAPI -xHalRegisterBusHandler( - IN INTERFACE_TYPE InterfaceType, - IN BUS_DATA_TYPE ConfigSpace, - IN ULONG BusNumber, - IN INTERFACE_TYPE ParentInterfaceType, - IN ULONG ParentBusNumber, - IN ULONG ContextSize, - IN PINSTALL_BUS_HANDLER InstallCallback, - OUT PBUS_HANDLER *BusHandler -); - -VOID -NTAPI -xHalSetWakeAlarm( - IN ULONGLONG AlartTime, - IN PTIME_FIELDS TimeFields -); - -BOOLEAN -NTAPI -xHalTranslateBusAddress( - IN INTERFACE_TYPE InterfaceType, - IN ULONG BusNumber, - IN PHYSICAL_ADDRESS BusAddress, - IN OUT PULONG AddressSpace, - OUT PPHYSICAL_ADDRESS TranslatedAddress -); - -NTSTATUS -NTAPI -xHalAllocateMapRegisters( - IN PADAPTER_OBJECT AdapterObject, - IN ULONG Unknown, - IN ULONG Unknown2, - PMAP_REGISTER_ENTRY Registers -); - -NTSTATUS -NTAPI -xKdSetupPciDeviceForDebugging( - IN PVOID LoaderBlock OPTIONAL, - IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice -); - -NTSTATUS -NTAPI -xKdReleasePciDeviceForDebugging( - IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice -); - -PVOID -NTAPI -xKdGetAcpiTablePhase( - IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock, - IN ULONG Signature -); - -PVOID -NTAPI -MatchAll( - IN PHYSICAL_ADDRESS PhysicalAddress, - IN ULONG NumberPages, - IN BOOLEAN FlushCurrentTLB -); - -VOID -NTAPI -xKdUnmapVirtualAddress( - IN PVOID VirtualAddress, - IN ULONG NumberPages, - IN BOOLEAN FlushCurrentTLB -); +xHalGetInterruptTranslator(IN INTERFACE_TYPE ParentInterfaceType, + IN ULONG ParentBusNumber, + IN INTERFACE_TYPE BridgeInterfaceType, + IN USHORT Size, + IN USHORT Version, + OUT PTRANSLATOR_INTERFACE Translator, + OUT PULONG BridgeBusNumber); // From 1f0f4f62b080dfe5ab4647853b3d2f69ff1ffc64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Fri, 11 Mar 2011 15:32:54 +0000 Subject: [PATCH 262/287] [GDI32_APITEST] - Test Rectangle function. Don't laugh, ROS fails those tests and fixing this breaks the GUI. svn path=/trunk/; revision=51018 --- rostests/apitests/gdi32/CMakeLists.txt | 1 + rostests/apitests/gdi32/GetPixel.c | 2 +- rostests/apitests/gdi32/Rectangle.c | 115 +++++++++++++++++++ rostests/apitests/gdi32/gdi32_apitest.rbuild | 1 + rostests/apitests/gdi32/testlist.c | 2 + 5 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 rostests/apitests/gdi32/Rectangle.c diff --git a/rostests/apitests/gdi32/CMakeLists.txt b/rostests/apitests/gdi32/CMakeLists.txt index 2418976b336..e7d18f55eb8 100644 --- a/rostests/apitests/gdi32/CMakeLists.txt +++ b/rostests/apitests/gdi32/CMakeLists.txt @@ -39,6 +39,7 @@ list(APPEND SOURCE GetTextExtentExPoint.c GetTextFace.c MaskBlt.c + Rectangle.c SelectObject.c SetDCPenColor.c SetDIBits.c diff --git a/rostests/apitests/gdi32/GetPixel.c b/rostests/apitests/gdi32/GetPixel.c index f7dac23d666..739be912d3a 100644 --- a/rostests/apitests/gdi32/GetPixel.c +++ b/rostests/apitests/gdi32/GetPixel.c @@ -1,7 +1,7 @@ /* * PROJECT: ReactOS api tests * LICENSE: GPL - See COPYING in the top level directory - * PURPOSE: Test for SetDIBits + * PURPOSE: Test for GetPixel * PROGRAMMERS: Jrme Gardou */ diff --git a/rostests/apitests/gdi32/Rectangle.c b/rostests/apitests/gdi32/Rectangle.c new file mode 100644 index 00000000000..2dde92536d3 --- /dev/null +++ b/rostests/apitests/gdi32/Rectangle.c @@ -0,0 +1,115 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: GPL - See COPYING in the top level directory + * PURPOSE: Test for Rectangle + * PROGRAMMERS: Jrme Gardou + */ + +#include +#include +#include + +void Test_Rectangle(void) +{ + HDC hdc; + HBITMAP hBmp; + BOOL ret; + HBRUSH hBrush; + COLORREF color; + + hdc = CreateCompatibleDC(NULL); + ok(hdc != NULL, "Failed to create the DC!\n"); + hBmp = CreateCompatibleBitmap(hdc, 4, 4); + ok(hBmp != NULL, "Failed to create the Bitmap!\n"); + hBmp = SelectObject(hdc, hBmp); + ok(hBmp != NULL, "Failed to select the Bitmap!\n"); + + hBrush = CreateSolidBrush(RGB(0, 0, 0)); + ok(hBrush != NULL, "Failed to create a solid brush!\n"); + hBrush = SelectObject(hdc, hBrush); + ok(hBrush != NULL, "Failed to select the brush!\n"); + + /* Blank the bitmap */ + ret = BitBlt(hdc, 0, 0, 4, 4, NULL, 0, 0, WHITENESS); + ok(ret, "BitBlt failed to blank the bitmap!\n"); + + /* Try inverted rectangle coordinates */ + ret = Rectangle(hdc, 0, 2, 2, 0); + ok(ret, "Rectangle failed!"); + color = GetPixel(hdc, 0, 0); + ok( color == RGB(0, 0, 0), "Expected 0, got 0x%08x\n", (UINT)color); + color = GetPixel(hdc, 2, 2); + ok( color == RGB(255, 255, 255), "Expected 0x00FFFFFF, got 0x%08x\n", (UINT)color); + color = GetPixel(hdc, 0, 2); + ok( color == RGB(255, 255, 255), "Expected 0x00FFFFFF, got 0x%08x\n", (UINT)color); + color = GetPixel(hdc, 2, 0); + ok( color == RGB(255, 255, 255), "Expected 0x00FFFFFF, got 0x%08x\n", (UINT)color); + color = GetPixel(hdc, 1, 1); + ok( color == RGB(0, 0, 0), "Expected 0, got 0x%08x\n", (UINT)color); + + ret = BitBlt(hdc, 0, 0, 4, 4, NULL, 0, 0, WHITENESS); + ok(ret, "BitBlt failed to blank the bitmap!\n"); + /* Try well ordered rectangle coordinates */ + ret = Rectangle(hdc, 0, 0, 2, 2); + ok(ret, "Rectangle failed!"); + color = GetPixel(hdc, 0, 0); + ok( color == RGB(0, 0, 0), "Expected 0, got 0x%08x\n", (UINT)color); + color = GetPixel(hdc, 2, 2); + ok( color == RGB(255, 255, 255), "Expected 0x00FFFFFF, got 0x%08x\n", (UINT)color); + color = GetPixel(hdc, 0, 2); + ok( color == RGB(255, 255, 255), "Expected 0x00FFFFFF, got 0x%08x\n", (UINT)color); + color = GetPixel(hdc, 2, 0); + ok( color == RGB(255, 255, 255), "Expected 0x00FFFFFF, got 0x%08x\n", (UINT)color); + color = GetPixel(hdc, 1, 1); + ok( color == RGB(0, 0, 0), "Expected 0, got 0x%08x\n", (UINT)color); + + /* Same tests with GM_ADVANCED */ + ok(SetGraphicsMode(hdc, GM_ADVANCED) == GM_COMPATIBLE, "Default mode for the DC is not GM_COMPATIBLE.\n"); + + /* Blank the bitmap */ + ret = BitBlt(hdc, 0, 0, 4, 4, NULL, 0, 0, WHITENESS); + ok(ret, "BitBlt failed to blank the bitmap!\n"); + + /* Try inverted rectangle coordinates */ + ret = Rectangle(hdc, 0, 2, 2, 0); + ok(ret, "Rectangle failed!"); + color = GetPixel(hdc, 0, 0); + ok( color == RGB(0, 0, 0), "Expected 0, got 0x%08x\n", (UINT)color); + color = GetPixel(hdc, 2, 2); + ok( color == RGB(0, 0, 0), "Expected 0, got 0x%08x\n", (UINT)color); + color = GetPixel(hdc, 0, 2); + ok( color == RGB(0, 0, 0), "Expected 0, got 0x%08x\n", (UINT)color); + color = GetPixel(hdc, 2, 0); + ok( color == RGB(0, 0, 0), "Expected 0, got 0x%08x\n", (UINT)color); + color = GetPixel(hdc, 1, 1); + ok( color == RGB(0, 0, 0), "Expected 0, got 0x%08x\n", (UINT)color); + + ret = BitBlt(hdc, 0, 0, 4, 4, NULL, 0, 0, WHITENESS); + ok(ret, "BitBlt failed to blank the bitmap!\n"); + /* Try well ordered rectangle coordinates */ + ret = Rectangle(hdc, 0, 0, 2, 2); + ok(ret, "Rectangle failed!"); + color = GetPixel(hdc, 0, 0); + ok( color == RGB(0, 0, 0), "Expected 0, got 0x%08x\n", (UINT)color); + color = GetPixel(hdc, 2, 2); + ok( color == RGB(0, 0, 0), "Expected 0, got 0x%08x\n", (UINT)color); + color = GetPixel(hdc, 0, 2); + ok( color == RGB(0, 0, 0), "Expected 0, got 0x%08x\n", (UINT)color); + color = GetPixel(hdc, 2, 0); + ok( color == RGB(0, 0, 0), "Expected 0, got 0x%08x\n", (UINT)color); + color = GetPixel(hdc, 1, 1); + ok( color == RGB(0, 0, 0), "Expected 0, got 0x%08x\n", (UINT)color); + + + hBmp = SelectObject(hdc, hBmp); + hBrush = SelectObject(hdc, hBrush); + DeleteObject(hBmp); + DeleteObject(hBrush); + DeleteDC(hdc); +} + + +START_TEST(Rectangle) +{ + Test_Rectangle(); +} diff --git a/rostests/apitests/gdi32/gdi32_apitest.rbuild b/rostests/apitests/gdi32/gdi32_apitest.rbuild index 18327f64d12..fe56b0dde1c 100644 --- a/rostests/apitests/gdi32/gdi32_apitest.rbuild +++ b/rostests/apitests/gdi32/gdi32_apitest.rbuild @@ -46,6 +46,7 @@ GetTextExtentExPoint.c GetTextFace.c MaskBlt.c + Rectangle.c SelectObject.c SetDCPenColor.c SetDIBits.c diff --git a/rostests/apitests/gdi32/testlist.c b/rostests/apitests/gdi32/testlist.c index fc99d87d0e7..dfcb82ce054 100644 --- a/rostests/apitests/gdi32/testlist.c +++ b/rostests/apitests/gdi32/testlist.c @@ -42,6 +42,7 @@ extern void func_GetStockObject(void); extern void func_GetTextExtentExPoint(void); extern void func_GetTextFace(void); extern void func_MaskBlt(void); +extern void func_Rectangle(void); extern void func_SelectObject(void); extern void func_SetDCPenColor(void); extern void func_SetDIBits(void); @@ -89,6 +90,7 @@ const struct test winetest_testlist[] = { "GetTextExtentExPoint", func_GetTextExtentExPoint }, { "GetTextFace", func_GetTextFace }, { "MaskBlt", func_MaskBlt }, + { "Rectangle", func_Rectangle }, { "SelectObject", func_SelectObject }, { "SetDCPenColor", func_SetDCPenColor }, { "SetDIBits", func_SetDIBits }, From 0cc06c7b45e2c8c0192981e53889aedb45489998 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Fri, 11 Mar 2011 18:17:34 +0000 Subject: [PATCH 263/287] [OPENGL32] - use well defined macro instead of weird pointer calculation - reset thread specific data on a thread detach call Fixes crash in heroes 3 and probably others svn path=/trunk/; revision=51019 --- reactos/dll/win32/opengl32/icdtable.h | 2 ++ reactos/dll/win32/opengl32/opengl32.c | 3 ++- reactos/dll/win32/opengl32/wgl.c | 5 ++--- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/reactos/dll/win32/opengl32/icdtable.h b/reactos/dll/win32/opengl32/icdtable.h index eaab125ca47..2619f34632d 100644 --- a/reactos/dll/win32/opengl32/icdtable.h +++ b/reactos/dll/win32/opengl32/icdtable.h @@ -18,6 +18,8 @@ typedef struct tagICDTable PROC dispatch_table[812]; /*!< Table containing \a num_funcs pointers to OpenGL functions */ } ICDTable, *PICDTable; +#define DISPATCH_TABLE_SIZE 812*sizeof(PROC) + #endif /* OPENGL32_PRIVATE_ICDTABLE_H */ /* EOF */ diff --git a/reactos/dll/win32/opengl32/opengl32.c b/reactos/dll/win32/opengl32/opengl32.c index 1d5330a411b..e3c56026e72 100644 --- a/reactos/dll/win32/opengl32/opengl32.c +++ b/reactos/dll/win32/opengl32/opengl32.c @@ -34,7 +34,7 @@ OPENGL32_ThreadAttach( void ) dispatchTable = (PROC*)HeapAlloc( GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY, - sizeof (((ICDTable *)(0))->dispatch_table) ); + DISPATCH_TABLE_SIZE ); if (dispatchTable == NULL) { DBGPRINT( "Error: Couldn't allocate GL dispatch table" ); @@ -84,6 +84,7 @@ OPENGL32_ThreadDetach( void ) GetLastError() ); lpData = NULL; } + TlsSetValue( OPENGL32_tls, NULL ); if (teb->glTable != NULL) { diff --git a/reactos/dll/win32/opengl32/wgl.c b/reactos/dll/win32/opengl32/wgl.c index aadf186e9ac..9584ba5b362 100644 --- a/reactos/dll/win32/opengl32/wgl.c +++ b/reactos/dll/win32/opengl32/wgl.c @@ -454,13 +454,12 @@ ROSGL_SetContextCallBack( const ICDTable *table ) /* save table */ size = sizeof (PROC) * table->num_funcs; memcpy( tebTable, table->dispatch_table, size ); - memset( tebTable + table->num_funcs, 0, - sizeof (table->dispatch_table) - size ); + memset( tebTable + table->num_funcs, 0, DISPATCH_TABLE_SIZE - size ); } else { DBGPRINT( "Unsetting current context" ); - memset( tebTable, 0, sizeof (table->dispatch_table) ); + memset( tebTable, 0, DISPATCH_TABLE_SIZE ); } /* put in empty functions as long as we dont have a fallback */ From f33b16a71d4e4ec2c7f4f5b3c3640acd9ccca09d Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Fri, 11 Mar 2011 18:58:23 +0000 Subject: [PATCH 264/287] [SETUPAPI] Implement CM_Register_Device_Driver[_Ex]. svn path=/trunk/; revision=51020 --- reactos/dll/win32/setupapi/cfgmgr.c | 66 ++++++++++++++++++++++++ reactos/dll/win32/setupapi/setupapi.spec | 4 +- 2 files changed, 68 insertions(+), 2 deletions(-) diff --git a/reactos/dll/win32/setupapi/cfgmgr.c b/reactos/dll/win32/setupapi/cfgmgr.c index 482dbbabcd4..78709d3532c 100644 --- a/reactos/dll/win32/setupapi/cfgmgr.c +++ b/reactos/dll/win32/setupapi/cfgmgr.c @@ -4557,6 +4557,72 @@ CONFIGRET WINAPI CM_Register_Device_Interface_ExW( } +/*********************************************************************** + * CM_Register_Device_Driver [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Register_Device_Driver( + DEVINST dnDevInst, ULONG ulFlags) +{ + TRACE("%lx 0x%08lx\n", dnDevInst, ulFlags); + return CM_Register_Device_Driver_Ex(dnDevInst, ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Register_Device_Driver [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Register_Device_Driver_Ex( + DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine) +{ + RPC_BINDING_HANDLE BindingHandle = NULL; + HSTRING_TABLE StringTable = NULL; + LPWSTR lpDevInst; + CONFIGRET ret; + + TRACE("%lx 0x%08lx %p\n", dnDevInst, ulFlags, hMachine); + + if (dnDevInst == 0) + return CR_INVALID_DEVNODE; + + if (ulFlags & ~CM_REGISTER_DEVICE_DRIVER_BITS) + return CR_INVALID_FLAG; + + if (hMachine != NULL) + { + BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle; + if (BindingHandle == NULL) + return CR_FAILURE; + + StringTable = ((PMACHINE_INFO)hMachine)->StringTable; + if (StringTable == 0) + return CR_FAILURE; + } + else + { + if (!PnpGetLocalHandles(&BindingHandle, &StringTable)) + return CR_FAILURE; + } + + lpDevInst = pSetupStringTableStringFromId(StringTable, dnDevInst); + if (lpDevInst == NULL) + return CR_INVALID_DEVNODE; + + RpcTryExcept + { + ret = PNP_RegisterDriver(BindingHandle, + lpDevInst, + ulFlags); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + ret = RpcStatusToCmStatus(RpcExceptionCode()); + } + RpcEndExcept; + + return ret; +} + + /*********************************************************************** * CM_Remove_SubTree [SETUPAPI.@] * diff --git a/reactos/dll/win32/setupapi/setupapi.spec b/reactos/dll/win32/setupapi/setupapi.spec index 5d54cbd1a83..0a64df095b8 100644 --- a/reactos/dll/win32/setupapi/setupapi.spec +++ b/reactos/dll/win32/setupapi/setupapi.spec @@ -168,8 +168,8 @@ @ stub CM_Query_Resource_Conflict_List @ stdcall CM_Reenumerate_DevNode(long long) @ stdcall CM_Reenumerate_DevNode_Ex(long long long) -@ stub CM_Register_Device_Driver -@ stub CM_Register_Device_Driver_Ex +@ stdcall CM_Register_Device_Driver(long long) +@ stdcall CM_Register_Device_Driver_Ex(long long ptr) @ stdcall CM_Register_Device_InterfaceA(long ptr str str ptr long) @ stdcall CM_Register_Device_InterfaceW(long ptr wstr wstr ptr long) @ stdcall CM_Register_Device_Interface_ExA(long ptr str str ptr long long) From 47dde244bdf10ff865d13107a302ddcb438962e6 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Sat, 12 Mar 2011 01:29:08 +0000 Subject: [PATCH 265/287] [Win32k] - Move the drag detection routine to kernel space, this will decrease the number of kernel calls that is noticeable with slower systems running an emulator. svn path=/trunk/; revision=51021 --- reactos/dll/win32/user32/windows/input.c | 3 +- .../subsystems/win32/win32k/include/winpos.h | 3 + .../subsystems/win32/win32k/ntuser/focus.c | 34 +++++---- .../subsystems/win32/win32k/ntuser/message.c | 71 +++++++++++++++++++ .../subsystems/win32/win32k/ntuser/ntstubs.c | 10 --- 5 files changed, 96 insertions(+), 25 deletions(-) diff --git a/reactos/dll/win32/user32/windows/input.c b/reactos/dll/win32/user32/windows/input.c index 08e457bf5a1..63f266eb492 100644 --- a/reactos/dll/win32/user32/windows/input.c +++ b/reactos/dll/win32/user32/windows/input.c @@ -48,9 +48,8 @@ DragDetect( HWND hWnd, POINT pt) { -#if 0 return NtUserDragDetect(hWnd, pt); -#else +#if 0 MSG msg; RECT rect; POINT tmp; diff --git a/reactos/subsystems/win32/win32k/include/winpos.h b/reactos/subsystems/win32/win32k/include/winpos.h index b21b9107616..7f1c52a4124 100644 --- a/reactos/subsystems/win32/win32k/include/winpos.h +++ b/reactos/subsystems/win32/win32k/include/winpos.h @@ -9,6 +9,9 @@ NtGdiPtInRegion((WndObject)->hrgnClip, (INT)((x) - (WndObject)->rcWindow.left), \ (INT)((y) - (WndObject)->rcWindow.top)))) +#define IntPtInRect(lprc,pt) \ + ((pt.x >= (lprc)->left) && (pt.x < (lprc)->right) && (pt.y >= (lprc)->top) && (pt.y < (lprc)->bottom)) + UINT FASTCALL co_WinPosArrangeIconicWindows(PWND parent); BOOL FASTCALL diff --git a/reactos/subsystems/win32/win32k/ntuser/focus.c b/reactos/subsystems/win32/win32k/ntuser/focus.c index 39e11965462..9989e880956 100644 --- a/reactos/subsystems/win32/win32k/ntuser/focus.c +++ b/reactos/subsystems/win32/win32k/ntuser/focus.c @@ -534,29 +534,23 @@ CLEANUP: END_CLEANUP; } -/* - * @implemented - */ -HWND APIENTRY -NtUserSetCapture(HWND hWnd) + +HWND FASTCALL +co_UserSetCapture(HWND hWnd) { PTHREADINFO pti; PUSER_MESSAGE_QUEUE ThreadQueue; PWND Window, pWnd; HWND hWndPrev; - DECLARE_RETURN(HWND); - - DPRINT("Enter NtUserSetCapture(%x)\n", hWnd); - UserEnterExclusive(); pti = PsGetCurrentThreadWin32Thread(); ThreadQueue = pti->MessageQueue; - if((Window = UserGetWindowObject(hWnd))) + if ((Window = UserGetWindowObject(hWnd))) { - if(Window->head.pti->MessageQueue != ThreadQueue) + if (Window->head.pti->MessageQueue != ThreadQueue) { - RETURN(NULL); + return NULL; } } @@ -582,7 +576,21 @@ NtUserSetCapture(HWND hWnd) co_IntPostOrSendMessage(hWndPrev, WM_CAPTURECHANGED, 0, (LPARAM)hWnd); ThreadQueue->CaptureWindow = hWnd; - RETURN( hWndPrev); + return hWndPrev; +} + +/* + * @implemented + */ +HWND APIENTRY +NtUserSetCapture(HWND hWnd) +{ + DECLARE_RETURN(HWND); + + DPRINT("Enter NtUserSetCapture(%x)\n", hWnd); + UserEnterExclusive(); + + RETURN( co_UserSetCapture(hWnd)); CLEANUP: DPRINT("Leave NtUserSetCapture, ret=%i\n",_ret_); diff --git a/reactos/subsystems/win32/win32k/ntuser/message.c b/reactos/subsystems/win32/win32k/ntuser/message.c index 1a1ae9d6c71..9d5b72bb105 100644 --- a/reactos/subsystems/win32/win32k/ntuser/message.c +++ b/reactos/subsystems/win32/win32k/ntuser/message.c @@ -16,6 +16,7 @@ #include BOOLEAN NTAPI PsGetProcessExitProcessCalled(PEPROCESS Process); +HWND FASTCALL co_UserSetCapture(HWND hWnd); #define PM_BADMSGFLAGS ~((QS_RAWINPUT << 16)|PM_QS_SENDMESSAGE|PM_QS_PAINT|PM_QS_POSTMESSAGE|PM_QS_INPUT|PM_NOYIELD|PM_REMOVE) @@ -1698,6 +1699,76 @@ IntUninitMessagePumpHook() /** Functions ******************************************************************/ +BOOL +APIENTRY +NtUserDragDetect( + HWND hWnd, + POINT pt) // Just like the User call. +{ + MSG msg; + RECT rect; + WORD wDragWidth, wDragHeight; + DECLARE_RETURN(BOOL); + + DPRINT("Enter NtUserDragDetect(%x)\n", hWnd); + UserEnterExclusive(); + + wDragWidth = UserGetSystemMetrics(SM_CXDRAG); + wDragHeight= UserGetSystemMetrics(SM_CYDRAG); + + rect.left = pt.x - wDragWidth; + rect.right = pt.x + wDragWidth; + + rect.top = pt.y - wDragHeight; + rect.bottom = pt.y + wDragHeight; + + co_UserSetCapture(hWnd); + + for (;;) + { + while (co_IntGetPeekMessage( &msg, 0, WM_MOUSEFIRST, WM_MOUSELAST, PM_REMOVE, FALSE ) || + co_IntGetPeekMessage( &msg, 0, WM_QUEUESYNC, WM_QUEUESYNC, PM_REMOVE, FALSE ) || + co_IntGetPeekMessage( &msg, 0, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE, FALSE ) ) + { + if ( msg.message == WM_LBUTTONUP ) + { + co_UserSetCapture(NULL); + RETURN( FALSE); + } + if ( msg.message == WM_MOUSEMOVE ) + { + POINT tmp; + tmp.x = (short)LOWORD(msg.lParam); + tmp.y = (short)HIWORD(msg.lParam); + if( !IntPtInRect( &rect, tmp ) ) + { + co_UserSetCapture(NULL); + RETURN( TRUE); + } + } + if ( msg.message == WM_KEYDOWN ) + { + if ( msg.wParam == VK_ESCAPE ) + { + co_UserSetCapture(NULL); + RETURN( TRUE); + } + } + if ( msg.message == WM_QUEUESYNC ) + { + co_HOOK_CallHooks( WH_CBT, HCBT_QS, 0, 0 ); + } + } + co_IntWaitMessage(NULL, 0, 0); + } + RETURN( FALSE); + +CLEANUP: + DPRINT("Leave NtUserDragDetect, ret=%i\n",_ret_); + UserLeave(); + END_CLEANUP; +} + BOOL APIENTRY NtUserPostMessage(HWND hWnd, UINT Msg, diff --git a/reactos/subsystems/win32/win32k/ntuser/ntstubs.c b/reactos/subsystems/win32/win32k/ntuser/ntstubs.c index 821d4d6ddf4..7d405821102 100644 --- a/reactos/subsystems/win32/win32k/ntuser/ntstubs.c +++ b/reactos/subsystems/win32/win32k/ntuser/ntstubs.c @@ -1338,16 +1338,6 @@ NtUserResolveDesktopForWOW(DWORD Unknown0) return 0; } -BOOL -APIENTRY -NtUserDragDetect( - HWND hWnd, - POINT pt) // Just like the User call. -{ - UNIMPLEMENTED - return 0; -} - /* * @unimplemented */ From df00c746758965feceeae478185995ceacd9da31 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sat, 12 Mar 2011 08:23:05 +0000 Subject: [PATCH 266/287] [EXPLORER] Fix array access out of bounds. See issue #5990 for more details svn path=/trunk/; revision=51022 --- reactos/base/shell/explorer/shell/pane.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/base/shell/explorer/shell/pane.cpp b/reactos/base/shell/explorer/shell/pane.cpp index b5fd6ab5de7..1e69b60d828 100644 --- a/reactos/base/shell/explorer/shell/pane.cpp +++ b/reactos/base/shell/explorer/shell/pane.cpp @@ -702,7 +702,7 @@ void Pane::set_header() item.mask = HDI_WIDTH; item.cxy = 0; - for(; x+_widths[i] Date: Sat, 12 Mar 2011 11:08:06 +0000 Subject: [PATCH 267/287] [win32k] -In WH_KEYBOARD hook, lparam isn't a pointer to KBDLLHOOKSTRUCT See issue #5991 for more details. svn path=/trunk/; revision=51023 --- reactos/subsystems/win32/win32k/ntuser/hook.c | 1 - 1 file changed, 1 deletion(-) diff --git a/reactos/subsystems/win32/win32k/ntuser/hook.c b/reactos/subsystems/win32/win32k/ntuser/hook.c index 41e9d476bf9..40d847b12ae 100644 --- a/reactos/subsystems/win32/win32k/ntuser/hook.c +++ b/reactos/subsystems/win32/win32k/ntuser/hook.c @@ -77,7 +77,6 @@ IntCallLowLevelHook( PHOOK Hook, case WH_KEYBOARD: uTimeout = 200; Block = TRUE; - Size = sizeof(KBDLLHOOKSTRUCT); break; } From 57664d7105c0aae7545d698dde215e48db8bc95a Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sat, 12 Mar 2011 11:53:55 +0000 Subject: [PATCH 268/287] [EXPLORER] Make fix of r51022 compiler independant, on Johannes' suggestion. svn path=/trunk/; revision=51024 --- reactos/base/shell/explorer/shell/pane.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/reactos/base/shell/explorer/shell/pane.cpp b/reactos/base/shell/explorer/shell/pane.cpp index 1e69b60d828..0273fb67802 100644 --- a/reactos/base/shell/explorer/shell/pane.cpp +++ b/reactos/base/shell/explorer/shell/pane.cpp @@ -702,7 +702,10 @@ void Pane::set_header() item.mask = HDI_WIDTH; item.cxy = 0; - for(; i= scroll_pos) + break; + x += _widths[i]; Header_SetItem(_hwndHeader, i, &item); } From dc102df1d632458cae95ad37a3e1a9a1b9273e63 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sat, 12 Mar 2011 12:56:36 +0000 Subject: [PATCH 269/287] [NTOSKRNL] Revert r51017 that was reverting r51016. In fact, it seems that cmlib assert error, whatever that eats randomly doesn't come from software issue inside ReactOS, but from a build issue. Indeed, as you may see in the different tests I performed it shows that the same build produces the same failure, again and again. But, new build shows that there is no assert anylonger with that commit. Don't ask me why or how it happens, I just don't get it. But most of the time, it works, no one knows why ("as usual" (tm)). But it's cool. Someone from BE team and/or buildslaves managers should take a serious look at this issue. Just in case: if that commit re-hits cmlib assert, don't blame it immediatly, just commit something else, and see whether trunk is still broken. But, as you can see in testman, we have now test results for r51016 ;-) svn path=/trunk/; revision=51025 --- reactos/ntoskrnl/fstub/halstub.c | 247 +++++++++++++++++++++--- reactos/ntoskrnl/include/internal/hal.h | 169 +++++++++++++++- 2 files changed, 382 insertions(+), 34 deletions(-) diff --git a/reactos/ntoskrnl/fstub/halstub.c b/reactos/ntoskrnl/fstub/halstub.c index a449f0b6a88..a89ce80cc1f 100644 --- a/reactos/ntoskrnl/fstub/halstub.c +++ b/reactos/ntoskrnl/fstub/halstub.c @@ -4,6 +4,7 @@ * FILE: ntoskrnl/fstub/halstub.c * PURPOSE: I/O Stub HAL Routines * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org) + Pierre Schweitzer (pierre.schweitzer@reactos.org) */ /* INCLUDES ******************************************************************/ @@ -17,51 +18,51 @@ HAL_DISPATCH HalDispatchTable = { HAL_DISPATCH_VERSION, - (pHalQuerySystemInformation)NULL, - (pHalSetSystemInformation)NULL, - (pHalQueryBusSlots)NULL, + xHalQuerySystemInformation, + xHalSetSystemInformation, + xHalQueryBusSlots, 0, xHalExamineMBR, xHalIoAssignDriveLetters, xHalIoReadPartitionTable, xHalIoSetPartitionInformation, xHalIoWritePartitionTable, - (pHalHandlerForBus)NULL, - (pHalReferenceBusHandler)NULL, - (pHalReferenceBusHandler)NULL, - (pHalInitPnpDriver)NULL, - (pHalInitPowerManagement)NULL, + xHalHandlerForBus, + xHalReferenceHandler, + xHalReferenceHandler, + xHalInitPnpDriver, + xHalInitPowerManagement, (pHalGetDmaAdapter) NULL, xHalGetInterruptTranslator, - (pHalStartMirroring)NULL, - (pHalEndMirroring)NULL, - (pHalMirrorPhysicalMemory)NULL, + xHalStartMirroring, + xHalEndMirroring, + xHalMirrorPhysicalMemory, xHalEndOfBoot, - (pHalMirrorVerify)NULL + xHalMirrorPhysicalMemory }; HAL_PRIVATE_DISPATCH HalPrivateDispatchTable = { HAL_PRIVATE_DISPATCH_VERSION, - (pHalHandlerForBus)NULL, - (pHalHandlerForConfigSpace)NULL, - (pHalLocateHiberRanges)NULL, - (pHalRegisterBusHandler)NULL, + xHalHandlerForBus, + (pHalHandlerForConfigSpace)xHalHandlerForBus, + xHalLocateHiberRanges, + xHalRegisterBusHandler, xHalSetWakeEnable, - (pHalSetWakeAlarm)NULL, - (pHalTranslateBusAddress)NULL, - (pHalAssignSlotResources)NULL, + xHalSetWakeAlarm, + xHalTranslateBusAddress, + (pHalAssignSlotResources)xHalTranslateBusAddress, xHalHaltSystem, (pHalFindBusAddressTranslation)NULL, (pHalResetDisplay)NULL, - (pHalAllocateMapRegisters)NULL, - (pKdSetupPciDeviceForDebugging)NULL, - (pKdReleasePciDeviceForDebugging)NULL, - (pKdGetAcpiTablePhase0)NULL, - (pKdCheckPowerButton)NULL, - (pHalVectorToIDTEntry)xHalVectorToIDTEntry, - (pKdMapPhysicalMemory64)NULL, - (pKdUnmapVirtualAddress)NULL + xHalAllocateMapRegisters, + xKdSetupPciDeviceForDebugging, + xKdReleasePciDeviceForDebugging, + xKdGetAcpiTablePhase, + (pKdCheckPowerButton)xHalReferenceHandler, + xHalVectorToIDTEntry, + (pKdMapPhysicalMemory64)MatchAll, + (pKdUnmapVirtualAddress)xKdUnmapVirtualAddress }; /* FUNCTIONS *****************************************************************/ @@ -86,6 +87,8 @@ VOID NTAPI xHalEndOfBoot(VOID) { + PAGED_CODE(); + /* Nothing */ return; } @@ -97,3 +100,193 @@ xHalSetWakeEnable(IN BOOLEAN Enable) /* Nothing */ return; } + +PBUS_HANDLER +FASTCALL +xHalHandlerForBus(IN INTERFACE_TYPE InterfaceType, + IN ULONG BusNumber) +{ + return NULL; +} + +VOID +FASTCALL +xHalReferenceHandler(IN PBUS_HANDLER BusHandler) +{ + /* Nothing */ + return; +} + +NTSTATUS +NTAPI +xHalInitPnpDriver(VOID) +{ + return STATUS_NOT_SUPPORTED; +} + +NTSTATUS +NTAPI +xHalInitPowerManagement(IN PPM_DISPATCH_TABLE PmDriverDispatchTable, + OUT PPM_DISPATCH_TABLE *PmHalDispatchTable) +{ + return STATUS_NOT_SUPPORTED; +} + +NTSTATUS +NTAPI +xHalStartMirroring(VOID) +{ + PAGED_CODE(); + + return STATUS_NOT_SUPPORTED; +} + +NTSTATUS +NTAPI +xHalEndMirroring(IN ULONG PassNumber) +{ + return STATUS_NOT_SUPPORTED; +} + +NTSTATUS +NTAPI +xHalMirrorPhysicalMemory(IN PHYSICAL_ADDRESS PhysicalAddress, + IN LARGE_INTEGER NumberOfBytes) +{ + return STATUS_NOT_SUPPORTED; +} + +NTSTATUS +NTAPI +xHalQueryBusSlots(IN PBUS_HANDLER BusHandler, + IN ULONG BufferSize, + OUT PULONG SlotNumbers, + OUT PULONG ReturnedLength) +{ + PAGED_CODE(); + + return STATUS_NOT_SUPPORTED; +} + +NTSTATUS +NTAPI +xHalSetSystemInformation(IN HAL_SET_INFORMATION_CLASS InformationClass, + IN ULONG BufferSize, + IN PVOID Buffer) +{ + PAGED_CODE(); + + return STATUS_INVALID_LEVEL; +} + +NTSTATUS +NTAPI +xHalQuerySystemInformation(IN HAL_QUERY_INFORMATION_CLASS InformationClass, + IN ULONG BufferSize, + IN OUT PVOID Buffer, + OUT PULONG ReturnedLength) +{ + PAGED_CODE(); + + return STATUS_INVALID_LEVEL; +} + +VOID +NTAPI +xHalLocateHiberRanges(IN PVOID MemoryMap) +{ + /* Nothing */ + return; +} + +NTSTATUS +NTAPI +xHalRegisterBusHandler(IN INTERFACE_TYPE InterfaceType, + IN BUS_DATA_TYPE ConfigSpace, + IN ULONG BusNumber, + IN INTERFACE_TYPE ParentInterfaceType, + IN ULONG ParentBusNumber, + IN ULONG ContextSize, + IN PINSTALL_BUS_HANDLER InstallCallback, + OUT PBUS_HANDLER *BusHandler) +{ + PAGED_CODE(); + + return STATUS_NOT_SUPPORTED; +} + +VOID +NTAPI +xHalSetWakeAlarm(IN ULONGLONG AlartTime, + IN PTIME_FIELDS TimeFields) +{ + /* Nothing */ + return; +} + +BOOLEAN +NTAPI +xHalTranslateBusAddress(IN INTERFACE_TYPE InterfaceType, + IN ULONG BusNumber, + IN PHYSICAL_ADDRESS BusAddress, + IN OUT PULONG AddressSpace, + OUT PPHYSICAL_ADDRESS TranslatedAddress) +{ + KeBugCheckEx(HAL_INITIALIZATION_FAILED, 0, 0, 0, 0); + + return FALSE; +} + +NTSTATUS +NTAPI +xHalAllocateMapRegisters(IN PADAPTER_OBJECT AdapterObject, + IN ULONG Unknown, + IN ULONG Unknown2, + PMAP_REGISTER_ENTRY Registers) +{ + PAGED_CODE(); + + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +xKdSetupPciDeviceForDebugging(IN PVOID LoaderBlock OPTIONAL, + IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice) +{ + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +xKdReleasePciDeviceForDebugging(IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice) +{ + return STATUS_NOT_IMPLEMENTED; +} + +PVOID +NTAPI +xKdGetAcpiTablePhase(IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock, + IN ULONG Signature) +{ + return NULL; +} + +PVOID +NTAPI +MatchAll(IN PHYSICAL_ADDRESS PhysicalAddress, + IN ULONG NumberPages, + IN BOOLEAN FlushCurrentTLB) +{ + return NULL; +} + +VOID +NTAPI +xKdUnmapVirtualAddress(IN PVOID VirtualAddress, + IN ULONG NumberPages, + IN BOOLEAN FlushCurrentTLB) +{ + /* Nothing */ + return; +} diff --git a/reactos/ntoskrnl/include/internal/hal.h b/reactos/ntoskrnl/include/internal/hal.h index f465ad71134..249ae64a19b 100644 --- a/reactos/ntoskrnl/include/internal/hal.h +++ b/reactos/ntoskrnl/include/internal/hal.h @@ -4,6 +4,7 @@ * FILE: ntoskrnl/include/hal.h * PURPOSE: Internal header for the I/O HAL Functions (Fstub) * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org) + * Pierre Schweitzer (pierre.schweitzer@reactos.org) */ #pragma once @@ -73,13 +74,167 @@ xHalVectorToIDTEntry( NTSTATUS NTAPI -xHalGetInterruptTranslator(IN INTERFACE_TYPE ParentInterfaceType, - IN ULONG ParentBusNumber, - IN INTERFACE_TYPE BridgeInterfaceType, - IN USHORT Size, - IN USHORT Version, - OUT PTRANSLATOR_INTERFACE Translator, - OUT PULONG BridgeBusNumber); +xHalGetInterruptTranslator( + IN INTERFACE_TYPE ParentInterfaceType, + IN ULONG ParentBusNumber, + IN INTERFACE_TYPE BridgeInterfaceType, + IN USHORT Size, + IN USHORT Version, + OUT PTRANSLATOR_INTERFACE Translator, + OUT PULONG BridgeBusNumber +); + +PBUS_HANDLER +FASTCALL +xHalHandlerForBus( + IN INTERFACE_TYPE InterfaceType, + IN ULONG BusNumber +); + +VOID +FASTCALL +xHalReferenceHandler( + IN PBUS_HANDLER BusHandler +); + +NTSTATUS +NTAPI +xHalInitPnpDriver( + VOID +); + +NTSTATUS +NTAPI +xHalInitPowerManagement( + IN PPM_DISPATCH_TABLE PmDriverDispatchTable, + OUT PPM_DISPATCH_TABLE *PmHalDispatchTable +); + +NTSTATUS +NTAPI +xHalStartMirroring( + VOID +); + +NTSTATUS +NTAPI +xHalEndMirroring( + IN ULONG PassNumber +); + +NTSTATUS +NTAPI +xHalMirrorPhysicalMemory( + IN PHYSICAL_ADDRESS PhysicalAddress, + IN LARGE_INTEGER NumberOfBytes +); + +NTSTATUS +NTAPI +xHalQueryBusSlots( + IN PBUS_HANDLER BusHandler, + IN ULONG BufferSize, + OUT PULONG SlotNumbers, + OUT PULONG ReturnedLength +); + +NTSTATUS +NTAPI +xHalSetSystemInformation( + IN HAL_SET_INFORMATION_CLASS InformationClass, + IN ULONG BufferSize, + IN PVOID Buffer +); + +NTSTATUS +NTAPI +xHalQuerySystemInformation( + IN HAL_QUERY_INFORMATION_CLASS InformationClass, + IN ULONG BufferSize, + IN OUT PVOID Buffer, + OUT PULONG ReturnedLength +); + +VOID +NTAPI +xHalLocateHiberRanges( + IN PVOID MemoryMap +); + +NTSTATUS +NTAPI +xHalRegisterBusHandler( + IN INTERFACE_TYPE InterfaceType, + IN BUS_DATA_TYPE ConfigSpace, + IN ULONG BusNumber, + IN INTERFACE_TYPE ParentInterfaceType, + IN ULONG ParentBusNumber, + IN ULONG ContextSize, + IN PINSTALL_BUS_HANDLER InstallCallback, + OUT PBUS_HANDLER *BusHandler +); + +VOID +NTAPI +xHalSetWakeAlarm( + IN ULONGLONG AlartTime, + IN PTIME_FIELDS TimeFields +); + +BOOLEAN +NTAPI +xHalTranslateBusAddress( + IN INTERFACE_TYPE InterfaceType, + IN ULONG BusNumber, + IN PHYSICAL_ADDRESS BusAddress, + IN OUT PULONG AddressSpace, + OUT PPHYSICAL_ADDRESS TranslatedAddress +); + +NTSTATUS +NTAPI +xHalAllocateMapRegisters( + IN PADAPTER_OBJECT AdapterObject, + IN ULONG Unknown, + IN ULONG Unknown2, + PMAP_REGISTER_ENTRY Registers +); + +NTSTATUS +NTAPI +xKdSetupPciDeviceForDebugging( + IN PVOID LoaderBlock OPTIONAL, + IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice +); + +NTSTATUS +NTAPI +xKdReleasePciDeviceForDebugging( + IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice +); + +PVOID +NTAPI +xKdGetAcpiTablePhase( + IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock, + IN ULONG Signature +); + +PVOID +NTAPI +MatchAll( + IN PHYSICAL_ADDRESS PhysicalAddress, + IN ULONG NumberPages, + IN BOOLEAN FlushCurrentTLB +); + +VOID +NTAPI +xKdUnmapVirtualAddress( + IN PVOID VirtualAddress, + IN ULONG NumberPages, + IN BOOLEAN FlushCurrentTLB +); // From f51eb1ce6037e8f78c2ff0a1484608d5d138f322 Mon Sep 17 00:00:00 2001 From: Amine Khaldi Date: Sat, 12 Mar 2011 15:50:58 +0000 Subject: [PATCH 270/287] [DDK] Fix ioaccess.h svn properties. Spotted by Jonathan Yong. svn path=/trunk/; revision=51026 --- reactos/include/ddk/ioaccess.h | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 reactos/include/ddk/ioaccess.h diff --git a/reactos/include/ddk/ioaccess.h b/reactos/include/ddk/ioaccess.h old mode 100755 new mode 100644 From bd9d264de3f6f76f6cb176da8816b70e99c07420 Mon Sep 17 00:00:00 2001 From: Roel Messiant Date: Sat, 12 Mar 2011 19:03:27 +0000 Subject: [PATCH 271/287] [APPLICATIONS] - Change all C function prototype declarations with an empty argument list to use void, or the list specified in the function definition. According to the C language specification, such a declaration means "no information about the number or types of the parameters is supplied". This can expose cases where gcc allows us to pass an excessive amount of arguments to functions in certain cases. Thanks to Thomas Faber for informing us about this. svn path=/trunk/; revision=51027 --- reactos/base/applications/dxdiag/precomp.h | 4 +- .../applications/games/solitaire/solitaire.h | 2 +- .../base/applications/games/spider/spider.h | 2 +- reactos/base/applications/magnify/magnifier.h | 4 +- .../base/applications/network/ftp/ftp_var.h | 2 +- .../applications/network/ftp/prototypes.h | 42 +++++++++---------- reactos/base/applications/network/net/net.h | 4 +- reactos/base/applications/paint/dialogs.h | 4 +- reactos/base/applications/paint/history.h | 12 +++--- reactos/base/applications/paint/mouse.h | 2 +- 10 files changed, 39 insertions(+), 39 deletions(-) diff --git a/reactos/base/applications/dxdiag/precomp.h b/reactos/base/applications/dxdiag/precomp.h index b049f77702c..05200f7b2d5 100644 --- a/reactos/base/applications/dxdiag/precomp.h +++ b/reactos/base/applications/dxdiag/precomp.h @@ -43,10 +43,10 @@ INT_PTR CALLBACK NetworkPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPAR INT_PTR CALLBACK HelpPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); /* DirectDraw tests */ -VOID DDTests(); +VOID DDTests(VOID); /* Direct3D tests */ -VOID D3DTests(); +VOID D3DTests(VOID); /* DirectSound initialization */ void InitializeDirectSoundPage(PDXDIAG_CONTEXT pContext); diff --git a/reactos/base/applications/games/solitaire/solitaire.h b/reactos/base/applications/games/solitaire/solitaire.h index 3b1e1bbe1e8..ae52831b073 100644 --- a/reactos/base/applications/games/solitaire/solitaire.h +++ b/reactos/base/applications/games/solitaire/solitaire.h @@ -16,7 +16,7 @@ extern bool fGameStarted; extern DWORD dwOptions; -void CreateSol(); +void CreateSol(void); void NewGame(void); #define NUM_ROW_STACKS 7 diff --git a/reactos/base/applications/games/spider/spider.h b/reactos/base/applications/games/spider/spider.h index caff04abead..17b919b91aa 100644 --- a/reactos/base/applications/games/spider/spider.h +++ b/reactos/base/applications/games/spider/spider.h @@ -25,7 +25,7 @@ extern DWORD dwDifficulty; extern TCHAR MsgDeal[]; extern TCHAR MsgWin[]; -void CreateSpider(); +void CreateSpider(void); void NewGame(void); bool CARDLIBPROC RowStackDragProc(CardRegion &stackobj, int iNumCards); diff --git a/reactos/base/applications/magnify/magnifier.h b/reactos/base/applications/magnify/magnifier.h index 18b9f84cf71..8728c02fb88 100644 --- a/reactos/base/applications/magnify/magnifier.h +++ b/reactos/base/applications/magnify/magnifier.h @@ -32,5 +32,5 @@ extern BOOL bInvertColors; extern BOOL bStartMinimized; extern BOOL bShowMagnifier; -void LoadSettings(); -void SaveSettings(); +void LoadSettings(void); +void SaveSettings(void); diff --git a/reactos/base/applications/network/ftp/ftp_var.h b/reactos/base/applications/network/ftp/ftp_var.h index a0a99b23ee5..52cbb925319 100644 --- a/reactos/base/applications/network/ftp/ftp_var.h +++ b/reactos/base/applications/network/ftp/ftp_var.h @@ -141,7 +141,7 @@ struct cmd { char c_bell; /* give bell when command completes */ char c_conn; /* must be connected to use command */ char c_proxy; /* proxy server may execute */ - void (*c_handler)(); /* function to call */ + void (*c_handler)(void); /* function to call */ }; struct macel { diff --git a/reactos/base/applications/network/ftp/prototypes.h b/reactos/base/applications/network/ftp/prototypes.h index 05f3ab281d4..0ae96cbd931 100644 --- a/reactos/base/applications/network/ftp/prototypes.h +++ b/reactos/base/applications/network/ftp/prototypes.h @@ -8,8 +8,8 @@ int fputcSocket(int s, char putChar); int fputSocket(int s, char *putChar, int len); char *fgetsSocket(int s, char *string); -char *hookup(); -char **glob(); +char *hookup(void); +char **glob(void); int herror(char *s); int getreply(int expecteof); @@ -43,22 +43,22 @@ void blkfree(char **av0); int getit(int argc, const char *argv[], int restartit, const char *mode); int sleep(int time); -char *tail(); -void setbell(), setdebug(); -void setglob(), sethash(), setport(); -void setprompt(); -void settrace(), setverbose(); -void settype(), setform(), setstruct(); -void restart(), syst(); -void cd(), lcd(), delete(), mdelete(); -void ls(), mls(), get(), mget(), help(), append(), put(), mput(), reget(); -void status(); -void renamefile(); -void quote(), rmthelp(), site(); -void pwd(), makedir(), removedir(), setcr(); -void account(), doproxy(), reset(), setcase(), setntrans(), setnmap(); -void setsunique(), setrunique(), cdup(), macdef(); -void sizecmd(), modtime(), newer(), rmtstatus(); -void do_chmod(), do_umask(), idle(); -void shell(), user(), fsetmode(); -struct cmd *getcmd(); +char *tail(void); +void setbell(void), setdebug(void); +void setglob(void), sethash(void), setport(void); +void setprompt(void); +void settrace(void), setverbose(void); +void settype(void), setform(void), setstruct(void); +void restart(void), syst(void); +void cd(void), lcd(void), delete(void), mdelete(void); +void ls(void), mls(void), get(void), mget(void), help(void), append(void), put(void), mput(void), reget(void); +void status(void); +void renamefile(void); +void quote(void), rmthelp(void), site(void); +void pwd(void), makedir(void), removedir(void), setcr(void); +void account(void), doproxy(void), reset(void), setcase(void), setntrans(void), setnmap(void); +void setsunique(void), setrunique(void), cdup(void), macdef(void); +void sizecmd(void), modtime(void), newer(void), rmtstatus(void); +void do_chmod(void), do_umask(void), idle(void); +void shell(void), user(void), fsetmode(void); +struct cmd *getcmd(void); diff --git a/reactos/base/applications/network/net/net.h b/reactos/base/applications/network/net/net.h index d86af564206..594bbb86669 100644 --- a/reactos/base/applications/network/net/net.h +++ b/reactos/base/applications/network/net/net.h @@ -13,8 +13,8 @@ #include #include -void help(); -int unimplemented(); +void help(void); +int unimplemented(void); INT cmdHelp(INT argc, CHAR **argv); diff --git a/reactos/base/applications/paint/dialogs.h b/reactos/base/applications/paint/dialogs.h index dc608dac84c..4378045ecc5 100644 --- a/reactos/base/applications/paint/dialogs.h +++ b/reactos/base/applications/paint/dialogs.h @@ -6,8 +6,8 @@ * PROGRAMMERS: Benedikt Freisen */ -int mirrorRotateDlg(); +int mirrorRotateDlg(void); -int attributesDlg(); +int attributesDlg(void); int changeSizeDlg(); diff --git a/reactos/base/applications/paint/history.h b/reactos/base/applications/paint/history.h index b0733e99e8e..a373ea5a102 100644 --- a/reactos/base/applications/paint/history.h +++ b/reactos/base/applications/paint/history.h @@ -6,16 +6,16 @@ * PROGRAMMERS: Benedikt Freisen */ -void newReversible(); +void newReversible(void); -void undo(); +void undo(void); -void redo(); +void redo(void); -void resetToU1(); +void resetToU1(void); -void clearHistory(); +void clearHistory(void); -void insertReversible(); +void insertReversible(HBITMAP hbm); void cropReversible(int width, int height, int xOffset, int yOffset); diff --git a/reactos/base/applications/paint/mouse.h b/reactos/base/applications/paint/mouse.h index 49bbb408a96..acb083c0a8b 100644 --- a/reactos/base/applications/paint/mouse.h +++ b/reactos/base/applications/paint/mouse.h @@ -6,7 +6,7 @@ * PROGRAMMERS: Benedikt Freisen */ -void placeSelWin(); +void placeSelWin(void); void startPaintingL(HDC hdc, short x, short y, int fg, int bg); From dca21c3ce84f6057230558bb591c2e657550ebb0 Mon Sep 17 00:00:00 2001 From: Roel Messiant Date: Sat, 12 Mar 2011 23:39:18 +0000 Subject: [PATCH 272/287] [FTP] - FTP has been a really, really naughty app.. Fix up function prototypes and definitions after () -> (void) change. Fixes build.. if I'm lucky. svn path=/trunk/; revision=51028 --- reactos/base/applications/network/ftp/cmds.c | 220 +++++++----------- .../base/applications/network/ftp/domacro.c | 4 +- reactos/base/applications/network/ftp/fake.c | 2 +- reactos/base/applications/network/ftp/ftp.c | 64 ++--- .../base/applications/network/ftp/ftp_var.h | 2 +- reactos/base/applications/network/ftp/main.c | 33 ++- .../applications/network/ftp/prototypes.h | 89 ++++--- 7 files changed, 191 insertions(+), 223 deletions(-) diff --git a/reactos/base/applications/network/ftp/cmds.c b/reactos/base/applications/network/ftp/cmds.c index 977b847621f..91b3bc48d5e 100644 --- a/reactos/base/applications/network/ftp/cmds.c +++ b/reactos/base/applications/network/ftp/cmds.c @@ -47,14 +47,15 @@ static char sccsid[] = "@(#)cmds.c 5.18 (Berkeley) 4/20/89"; extern char *globerr; extern char home[]; -extern char *remglob(); +static const char *remglob(const char *argv[], int doswitch); extern int allbinary; extern off_t restart_point; extern char reply_string[]; const char *mname; jmp_buf jabort; -const char *dotrans(), *domap(); +const char *dotrans(const char *name); +const char *domap(const char *name); extern short portnum; extern char *hostname; @@ -169,8 +170,7 @@ struct types { /* * Set transfer type. */ -void settype(argc, argv) - const char *argv[]; +void settype(int argc, const char *argv[]) { register struct types *p; int comret; @@ -225,7 +225,7 @@ const char *stype[] = { * Set binary transfer type. */ /*VARARGS*/ -void setbinary() +void setbinary(int argc, const char *argv[]) { stype[1] = "binary"; settype(2, stype); @@ -235,7 +235,7 @@ void setbinary() * Set ascii transfer type. */ /*VARARGS*/ -void setascii() +void setascii(int argc, const char *argv[]) { stype[1] = "ascii"; settype(2, stype); @@ -245,7 +245,7 @@ void setascii() * Set tenex transfer type. */ /*VARARGS*/ -void settenex() +void settenex(int argc, const char *argv[]) { stype[1] = "tenex"; settype(2, stype); @@ -266,8 +266,7 @@ void setebcdic() */ /*ARGSUSED*/ -void fsetmode(argc, argv) - char *argv[]; +void fsetmode(int argc, const char *argv[]) { printf("We only support %s mode, sorry.\n", modename); @@ -280,8 +279,7 @@ void fsetmode(argc, argv) * Set file transfer format. */ /*ARGSUSED*/ -void setform(argc, argv) - char *argv[]; +void setform(int argc, const char *argv[]) { printf("We only support %s format, sorry.\n", formname); @@ -293,8 +291,7 @@ void setform(argc, argv) * Set file transfer structure. */ /*ARGSUSED*/ -void setstruct(argc, argv) - char *argv[]; +void setstruct(int argc, const char *argv[]) { printf("We only support %s structure, sorry.\n", structname); @@ -305,9 +302,7 @@ void setstruct(argc, argv) /* * Send a single file. */ -void put(argc, argv) - int argc; - const char *argv[]; +void put(int argc, const char *argv[]) { const char *cmd; int loc = 0; @@ -372,8 +367,7 @@ usage: /* * Send multiple files. */ -void mput(argc, argv) - const char *argv[]; +void mput(int argc, const char *argv[]) { register int i; int ointer; @@ -400,7 +394,8 @@ void mput(argc, argv) // oldintr = signal(SIGINT, mabort); (void) setjmp(jabort); if (proxy) { - char *cp, *tp2, tmpbuf[MAXPATHLEN]; + const char *cp; + char *tp2, tmpbuf[MAXPATHLEN]; while ((cp = remglob(argv,0)) != NULL) { if (*cp == 0) { @@ -503,14 +498,12 @@ void mput(argc, argv) mflag = 0; } -void reget(argc, argv) - const char *argv[]; +void reget(int argc, const char *argv[]) { (void) getit(argc, argv, 1, "r+w"); } -void get(argc, argv) - const char *argv[]; +void get(int argc, const char *argv[]) { (void) getit(argc, argv, 0, restart_point ? "r+w" : "w" ); } @@ -518,9 +511,7 @@ void get(argc, argv) /* * Receive one file. */ -int getit(argc, argv, restartit, mode) - const char *argv[]; - const char *mode; +int getit(int argc, const char *argv[], int restartit, const char *mode) { int loc = 0; const char *oldargv1, *oldargv2; @@ -674,8 +665,7 @@ mabort() /* * Get multiple files. */ -void mget(argc, argv) - const char *argv[]; +void mget(int argc, const char *argv[]) { const char *cp, *tp; char *tp2, tmpbuf[MAXPATHLEN]; @@ -747,18 +737,17 @@ void mget(argc, argv) mflag = 0; } -char * -remglob(argv,doswitch) - char *argv[]; - int doswitch; +const char * +remglob(const char *argv[], int doswitch) { char temp[16]; static char buf[MAXPATHLEN]; static FILE *ftemp = NULL; - static char **args; + static const char **args; int oldverbose, oldhash; - char *cp; + const char *cp; const char *mode; + char *terminator; if (!mflag) { if (!doglob) { @@ -805,16 +794,14 @@ remglob(argv,doswitch) (void) fclose(ftemp), ftemp = NULL; return (NULL); } - if ((cp = index(buf, '\n')) != NULL) - *cp = '\0'; + if ((terminator = index(buf, '\n')) != NULL) + *terminator = '\0'; return (buf); } static const char * -onoff(bool) - int bool; +onoff(int bool) { - return (bool ? "on" : "off"); } @@ -822,8 +809,7 @@ onoff(bool) * Show status. */ /*ARGSUSED*/ -void status(argc, argv) - char *argv[]; +void status(int argc, const char *argv[]) { int i; @@ -877,7 +863,7 @@ void status(argc, argv) * Set beep on cmd completed mode. */ /*VARARGS*/ -void setbell() +void setbell(int argc, const char *argv[]) { bell = !bell; @@ -890,7 +876,7 @@ void setbell() * Turn on packet tracing. */ /*VARARGS*/ -void settrace() +void settrace(int argc, const char *argv[]) { trace = !trace; @@ -903,7 +889,7 @@ void settrace() * Toggle hash mark printing during transfers. */ /*VARARGS*/ -void sethash() +void sethash(int argc, const char *argv[]) { hash = !hash; @@ -919,7 +905,7 @@ void sethash() * Turn on printing of server echo's. */ /*VARARGS*/ -void setverbose() +void setverbose(int argc, const char *argv[]) { verbose = !verbose; @@ -932,7 +918,7 @@ void setverbose() * Toggle PORT cmd use before each data connection. */ /*VARARGS*/ -void setport() +void setport(int argc, const char *argv[]) { sendport = !sendport; @@ -946,7 +932,7 @@ void setport() * during mget, mput, and mdelete. */ /*VARARGS*/ -void setprompt() +void setprompt(int argc, const char *argv[]) { interactive = !interactive; @@ -960,7 +946,7 @@ void setprompt() * on local file names. */ /*VARARGS*/ -void setglob() +void setglob(int argc, const char *argv[]) { doglob = !doglob; @@ -974,8 +960,7 @@ void setglob() * set level of debugging. */ /*VARARGS*/ -void setdebug(argc, argv) - char *argv[]; +void setdebug(int argc, const char *argv[]) { int val; @@ -1003,8 +988,7 @@ void setdebug(argc, argv) * Set current working directory * on remote machine. */ -void cd(argc, argv) - const char *argv[]; +void cd(int argc, const char *argv[]) { if (argc < 2) { @@ -1035,8 +1019,7 @@ void cd(argc, argv) * Set current working directory * on local machine. */ -void lcd(argc, argv) - const char *argv[]; +void lcd(int argc, const char *argv[]) { char buf[MAXPATHLEN]; @@ -1065,8 +1048,7 @@ void lcd(argc, argv) /* * Delete a single file. */ -void delete(argc, argv) - const char *argv[]; +void delete(int argc, const char *argv[]) { if (argc < 2) { @@ -1090,10 +1072,9 @@ void delete(argc, argv) /* * Delete multiple files. */ -void mdelete(argc, argv) - const char *argv[]; +void mdelete(int argc, const char *argv[]) { - char *cp; + const char *cp; int ointer; extern jmp_buf jabort; @@ -1140,8 +1121,7 @@ void mdelete(argc, argv) /* * Rename a remote file. */ -void renamefile(argc, argv) - const char *argv[]; +void renamefile(int argc, const char *argv[]) { if (argc < 2) { @@ -1179,8 +1159,7 @@ usage: * Get a directory listing * of remote files. */ -void ls(argc, argv) - const char *argv[]; +void ls(int argc, const char *argv[]) { const char *cmd; @@ -1212,8 +1191,7 @@ void ls(argc, argv) * Get a directory listing * of multiple remote files. */ -void mls(argc, argv) - const char *argv[]; +void mls(int argc, const char *argv[]) { const char *cmd, *dest; char mode[1]; @@ -1276,8 +1254,7 @@ void mls(argc, argv) * Do a shell escape */ /*ARGSUSED*/ -void shell(argc, argv) - char *argv[]; +void shell(int argc, const char *argv[]) { #if 0 int pid; @@ -1396,9 +1373,7 @@ void shell(argc, argv) /* * Send new user information (re-login) */ -void user(argc, argv) - int argc; - const char **argv; +void user(int argc, const char *argv[]) { char acct[80], *getpass(); int n, aflag = 0; @@ -1449,7 +1424,7 @@ void user(argc, argv) * Print working directory. */ /*VARARGS*/ -void pwd() +void pwd(int argc, const char *argv[]) { int oldverbose = verbose; @@ -1468,8 +1443,7 @@ void pwd() /* * Make a directory. */ -void makedir(argc, argv) - const char *argv[]; +void makedir(int argc, const char *argv[]) { if (argc < 2) { @@ -1499,8 +1473,7 @@ void makedir(argc, argv) /* * Remove a directory. */ -void removedir(argc, argv) - const char *argv[]; +void removedir(int argc, const char *argv[]) { if (argc < 2) { @@ -1530,8 +1503,7 @@ void removedir(argc, argv) /* * Send a line, verbatim, to the remote machine. */ -void quote(argc, argv) - const char *argv[]; +void quote(int argc, const char *argv[]) { int i; char buf[BUFSIZ]; @@ -1566,9 +1538,7 @@ void quote(argc, argv) * is sent almost verbatim to the remote machine, the * first argument is changed to SITE. */ - -void site(argc, argv) - const char *argv[]; +void site(int argc, const char *argv[]) { int i; char buf[BUFSIZ]; @@ -1599,8 +1569,7 @@ void site(argc, argv) } } -void do_chmod(argc, argv) - const char *argv[]; +void do_chmod(int argc, const char *argv[]) { if (argc == 2) { printf("usage: %s mode file-name\n", argv[0]); @@ -1626,8 +1595,7 @@ void do_chmod(argc, argv) (void)command("SITE CHMOD %s %s", argv[1], argv[2]); } -void do_umask(argc, argv) - char *argv[]; +void do_umask(int argc, const char *argv[]) { int oldverbose = verbose; @@ -1636,8 +1604,7 @@ void do_umask(argc, argv) verbose = oldverbose; } -void idle(argc, argv) - char *argv[]; +void idle(int argc, const char *argv[]) { int oldverbose = verbose; @@ -1649,8 +1616,7 @@ void idle(argc, argv) /* * Ask the other side for help. */ -void rmthelp(argc, argv) - char *argv[]; +void rmthelp(int argc, const char *argv[]) { int oldverbose = verbose; @@ -1663,14 +1629,13 @@ void rmthelp(argc, argv) * Terminate session and exit. */ /*VARARGS*/ -void quit() +void quit(int argc, const char *argv[]) { - if (connected) - disconnect(); + disconnect(0, NULL); pswitch(1); if (connected) { - disconnect(); + disconnect(0, NULL); } exit(0); } @@ -1678,7 +1643,7 @@ void quit() /* * Terminate session, but don't exit. */ -void disconnect() +void disconnect(int argc, const char *argv[]) { extern int cout; extern int data; @@ -1694,8 +1659,7 @@ void disconnect() } } -int confirm(cmd, file) - const char *cmd, *file; +int confirm(const char *cmd, const char *file) { char line[BUFSIZ]; @@ -1708,8 +1672,7 @@ int confirm(cmd, file) } #if 0 -static void fatal(msg) - char *msg; +static void fatal(const char *msg) { fprintf(stderr, "ftp: %s\n", msg); @@ -1723,8 +1686,7 @@ static void fatal(msg) * Can't control multiple values being expanded * from the expression, we return only the first. */ -int globulize(cpp) - const char **cpp; +int globulize(const char **cpp) { char **globbed; @@ -1751,9 +1713,7 @@ int globulize(cpp) return (1); } -void account(argc,argv) - int argc; - char **argv; +void account(int argc, const char *argv[]) { char acct[50], *getpass(), *ap; @@ -1797,9 +1757,7 @@ proxabort() } #endif -void doproxy(argc,argv) - int argc; - const char *argv[]; +void doproxy(int argc, const char *argv[]) { register struct cmd *c; struct cmd *getcmd(); @@ -1865,7 +1823,7 @@ void doproxy(argc,argv) // (void) signal(SIGINT, oldintr); } -void setcase() +void setcase(int argc, const char *argv[]) { mcase = !mcase; printf("Case mapping %s.\n", onoff(mcase)); @@ -1873,7 +1831,7 @@ void setcase() code = mcase; } -void setcr() +void setcr(int argc, const char *argv[]) { crflag = !crflag; printf("Carriage Return stripping %s.\n", onoff(crflag)); @@ -1881,9 +1839,7 @@ void setcr() code = crflag; } -void setntrans(argc,argv) - int argc; - char *argv[]; +void setntrans(int argc, const char *argv[]) { if (argc == 1) { ntflag = 0; @@ -1905,8 +1861,7 @@ void setntrans(argc,argv) } const char * -dotrans(name) - const char *name; +dotrans(const char *name) { static char new[MAXPATHLEN]; const char *cp1; @@ -1933,11 +1888,7 @@ dotrans(name) return(new); } - -void -setpassive(argc, argv) - int argc; - char *argv[]; +void setpassive(int argc, const char *argv[]) { passivemode = !passivemode; printf("Passive mode %s.\n", onoff(passivemode)); @@ -1945,9 +1896,7 @@ setpassive(argc, argv) code = passivemode; } -void setnmap(argc, argv) - int argc; - const char *argv[]; +void setnmap(int argc, const char *argv[]) { char *cp; @@ -1988,8 +1937,7 @@ void setnmap(argc, argv) } const char * -domap(name) - const char *name; +domap(const char *name) { static char new[MAXPATHLEN]; const char *cp1 = name; @@ -2161,7 +2109,7 @@ LOOP: return(new); } -void setsunique() +void setsunique(int argc, const char *argv[]) { sunique = !sunique; printf("Store unique %s.\n", onoff(sunique)); @@ -2169,7 +2117,7 @@ void setsunique() code = sunique; } -void setrunique() +void setrunique(int argc, const char *argv[]) { runique = !runique; printf("Receive unique %s.\n", onoff(runique)); @@ -2178,7 +2126,7 @@ void setrunique() } /* change directory to perent directory */ -void cdup() +void cdup(int argc, const char *argv[]) { if (command("CDUP") == ERROR && code == 500) { if (verbose) { @@ -2190,9 +2138,7 @@ void cdup() } /* restart transfer at specific point */ -void restart(argc, argv) - int argc; - char *argv[]; +void restart(int argc, const char *argv[]) { if (argc != 2) printf("restart: offset not specified\n"); @@ -2205,14 +2151,12 @@ void restart(argc, argv) } /* show remote system type */ -void syst() +void syst(int argc, const char *argv[]) { (void) command("SYST"); } -void macdef(argc, argv) - int argc; - const char *argv[]; +void macdef(int argc, const char *argv[]) { char *tmp; int c; @@ -2287,8 +2231,7 @@ void macdef(argc, argv) /* * get size of file on remote machine */ -void sizecmd(argc, argv) - const char *argv[]; +void sizecmd(int argc, const char *argv[]) { if (argc < 2) { @@ -2312,8 +2255,7 @@ void sizecmd(argc, argv) /* * get last modification time of file on remote machine */ -void modtime(argc, argv) - const char *argv[]; +void modtime(int argc, const char *argv[]) { int overbose; @@ -2351,8 +2293,7 @@ void modtime(argc, argv) /* * show status on reomte machine */ -void rmtstatus(argc, argv) - const char *argv[]; +void rmtstatus(int argc, const char *argv[]) { (void) command(argc > 1 ? "STAT %s" : "STAT" , argv[1]); } @@ -2360,8 +2301,7 @@ void rmtstatus(argc, argv) /* * get file if modtime is more recent than current file */ -void newer(argc, argv) - const char *argv[]; +void newer(int argc, const char *argv[]) { if (getit(argc, argv, -1, "w")) { printf("Local file \"%s\" is newer than remote file \"%s\"\n", diff --git a/reactos/base/applications/network/ftp/domacro.c b/reactos/base/applications/network/ftp/domacro.c index a741a344048..fc96ad76288 100644 --- a/reactos/base/applications/network/ftp/domacro.c +++ b/reactos/base/applications/network/ftp/domacro.c @@ -28,9 +28,7 @@ static char sccsid[] = "@(#)domacro.c 1.6 (Berkeley) 2/28/89"; #include //#include -void domacro(argc, argv) - int argc; - const char *argv[]; +void domacro(int argc, const char *argv[]) { int i, j; const char *cp1; diff --git a/reactos/base/applications/network/ftp/fake.c b/reactos/base/applications/network/ftp/fake.c index a00f30560be..5f4bfc88f83 100644 --- a/reactos/base/applications/network/ftp/fake.c +++ b/reactos/base/applications/network/ftp/fake.c @@ -35,7 +35,7 @@ void blkfree(char **av0) free(*av++); } -char **glob(register char *v) +char **glob(const char *v) { return NULL; } diff --git a/reactos/base/applications/network/ftp/ftp.c b/reactos/base/applications/network/ftp/ftp.c index 5fdc81ce9fa..9d0da1c4a73 100644 --- a/reactos/base/applications/network/ftp/ftp.c +++ b/reactos/base/applications/network/ftp/ftp.c @@ -110,7 +110,7 @@ typedef void (*Sig_t)(int); void psabort(int sig); -char *hookup(char *host, int port) +char *hookup(const char *host, int port) { register struct hostent *hp = 0; int len; @@ -837,7 +837,7 @@ null();// (void) signal(SIGINT, oldintr); oldverbose = verbose; if (!debug) verbose = 0; - setascii(); + setascii(0, NULL); verbose = oldverbose; } } else if (restart_point) { @@ -852,13 +852,13 @@ null();// (void) signal(SIGINT, oldintr); verbose = 0; switch (oldtype) { case TYPE_I: - setbinary(); + setbinary(0, NULL); break; case TYPE_E: setebcdic(); break; case TYPE_L: - settenex(); + settenex(0, NULL); break; } verbose = oldverbose; @@ -873,13 +873,13 @@ null();// (void) signal(SIGINT, oldintr); verbose = 0; switch (oldtype) { case TYPE_I: - setbinary(); + setbinary(0, NULL); break; case TYPE_E: setebcdic(); break; case TYPE_L: - settenex(); + settenex(0, NULL); break; } verbose = oldverbose; @@ -1044,13 +1044,13 @@ null();// (void) signal(SIGPIPE, oldintp); verbose = 0; switch (oldtype) { case TYPE_I: - setbinary(); + setbinary(0, NULL); break; case TYPE_E: setebcdic(); break; case TYPE_L: - settenex(); + settenex(0, NULL); break; } verbose = oldverbose; @@ -1069,13 +1069,13 @@ null();// (void) signal(SIGINT,SIG_IGN); verbose = 0; switch (oldtype) { case TYPE_I: - setbinary(); + setbinary(0, NULL); break; case TYPE_E: setebcdic(); break; case TYPE_L: - settenex(); + settenex(0, NULL); break; } verbose = oldverbose; @@ -1463,16 +1463,16 @@ void proxtrans(cmd, local, remote) oldtype = type; switch (tmptype) { case TYPE_A: - setascii(); + setascii(0, NULL); break; case TYPE_I: - setbinary(); + setbinary(0, NULL); break; case TYPE_E: setebcdic(); break; case TYPE_L: - settenex(); + settenex(0, NULL); break; } } @@ -1481,16 +1481,16 @@ void proxtrans(cmd, local, remote) case 0: break; case TYPE_A: - setascii(); + setascii(0, NULL); break; case TYPE_I: - setbinary(); + setbinary(0, NULL); break; case TYPE_E: setebcdic(); break; case TYPE_L: - settenex(); + settenex(0, NULL); break; } pswitch(1); @@ -1505,16 +1505,16 @@ null();// (void) signal(SIGINT, oldintr); case 0: break; case TYPE_A: - setascii(); + setascii(0, NULL); break; case TYPE_I: - setbinary(); + setbinary(0, NULL); break; case TYPE_E: setebcdic(); break; case TYPE_L: - settenex(); + settenex(0, NULL); break; } pswitch(1); @@ -1534,16 +1534,16 @@ null();// (void) signal(SIGINT, oldintr); case 0: break; case TYPE_A: - setascii(); + setascii(0, NULL); break; case TYPE_I: - setbinary(); + setbinary(0, NULL); break; case TYPE_E: setebcdic(); break; case TYPE_L: - settenex(); + settenex(0, NULL); break; } pswitch(1); @@ -1565,16 +1565,16 @@ null();// (void) signal(SIGINT, SIG_IGN); case 0: break; case TYPE_A: - setascii(); + setascii(0, NULL); break; case TYPE_I: - setbinary(); + setbinary(0, NULL); break; case TYPE_E: setebcdic(); break; case TYPE_L: - settenex(); + settenex(0, NULL); break; } if (cpend) { @@ -1636,16 +1636,16 @@ null();// (void) signal(SIGINT, oldintr); case 0: break; case TYPE_A: - setascii(); + setascii(0, NULL); break; case TYPE_I: - setbinary(); + setbinary(0, NULL); break; case TYPE_E: setebcdic(); break; case TYPE_L: - settenex(); + settenex(0, NULL); break; } if (cpend) { @@ -1720,16 +1720,16 @@ null();// (void) signal(SIGINT, oldintr); case 0: break; case TYPE_A: - setascii(); + setascii(0, NULL); break; case TYPE_I: - setbinary(); + setbinary(0, NULL); break; case TYPE_E: setebcdic(); break; case TYPE_L: - settenex(); + settenex(0, NULL); break; } pswitch(1); @@ -1738,7 +1738,7 @@ null();// (void) signal(SIGINT, oldintr); null();// (void) signal(SIGINT, oldintr); } -void reset() +void reset(int argc, const char *argv[]) { // struct fd_set mask; diff --git a/reactos/base/applications/network/ftp/ftp_var.h b/reactos/base/applications/network/ftp/ftp_var.h index 52cbb925319..69bfcfe0484 100644 --- a/reactos/base/applications/network/ftp/ftp_var.h +++ b/reactos/base/applications/network/ftp/ftp_var.h @@ -141,7 +141,7 @@ struct cmd { char c_bell; /* give bell when command completes */ char c_conn; /* must be connected to use command */ char c_proxy; /* proxy server may execute */ - void (*c_handler)(void); /* function to call */ + void (*c_handler)(int argc, const char *argv[]); /* function to call */ }; struct macel { diff --git a/reactos/base/applications/network/ftp/main.c b/reactos/base/applications/network/ftp/main.c index 745e908d868..5843096df99 100644 --- a/reactos/base/applications/network/ftp/main.c +++ b/reactos/base/applications/network/ftp/main.c @@ -53,10 +53,10 @@ static char sccsid[] = "@(#)main.c based on 5.13 (Berkeley) 3/14/89"; typedef int uid_t; #endif -uid_t getuid(); -void intr(); -void lostpeer(); -char *getlogin(); +uid_t getuid(void); +void intr(void); +void lostpeer(void); +char *getlogin(void); short portnum; @@ -262,10 +262,8 @@ int main(int argc, const char *argv[]) } } -void -intr() +void intr(void) { - longjmp(toplevel, 1); } @@ -299,8 +297,7 @@ void lostpeer(void) } /*char * -tail(filename) - char *filename; +tail(char *filename) { register char *s; @@ -318,8 +315,7 @@ tail(filename) /* * Command parser. */ -void cmdscanner(top) - int top; +void cmdscanner(int top) { register struct cmd *c; @@ -333,7 +329,7 @@ void cmdscanner(top) } if (gets(line) == 0) { if (feof(stdin) || ferror(stdin)) - quit(); + quit(0, NULL); break; } if (line[0] == 0) @@ -367,8 +363,7 @@ void cmdscanner(top) } struct cmd * -getcmd(name) - const char *name; +getcmd(const char *name) { extern struct cmd cmdtab[]; const char *p, *q; @@ -402,7 +397,7 @@ getcmd(name) int slrflag; -void makeargv() +void makeargv(void) { const char **argp; @@ -421,7 +416,7 @@ void makeargv() * handle quoting and strings */ static const char * -slurpstring() +slurpstring(void) { int got_one = 0; register char *sb = stringbase; @@ -544,9 +539,7 @@ OUT1: * Help command. * Call each command handler with argc == 0 and argv[0] == name. */ -void help(argc, argv) - int argc; - char *argv[]; +void help(int argc, const char *argv[]) { extern struct cmd cmdtab[]; struct cmd *c; @@ -594,7 +587,7 @@ void help(argc, argv) return; } while (--argc > 0) { - register char *arg; + const char *arg; arg = *++argv; c = getcmd(arg); if (c == (struct cmd *)-1) diff --git a/reactos/base/applications/network/ftp/prototypes.h b/reactos/base/applications/network/ftp/prototypes.h index 0ae96cbd931..fb00fdcb4ab 100644 --- a/reactos/base/applications/network/ftp/prototypes.h +++ b/reactos/base/applications/network/ftp/prototypes.h @@ -8,8 +8,8 @@ int fputcSocket(int s, char putChar); int fputSocket(int s, char *putChar, int len); char *fgetsSocket(int s, char *string); -char *hookup(void); -char **glob(void); +char *hookup(const char *host, int port); +char **glob(const char *s); int herror(char *s); int getreply(int expecteof); @@ -20,18 +20,18 @@ void domacro(int argc, const char *argv[]); void proxtrans(const char *cmd, const char *local, const char *remote); int null(void); int initconn(void); -void disconnect(void); +void disconnect(int argc, const char *argv[]); void ptransfer(const char *direction, long bytes, struct timeval *t0, struct timeval *t1); -void setascii(void); -void setbinary(void); +void setascii(int argc, const char *argv[]); +void setbinary(int argc, const char *argv[]); void setebcdic(void); -void settenex(void); +void settenex(int argc, const char *argv[]); void tvsub(struct timeval *tdiff, struct timeval *t1, struct timeval *t0); -void setpassive(int argc, char *argv[]); +void setpassive(int argc, const char *argv[]); void setpeer(int argc, const char *argv[]); void cmdscanner(int top); void pswitch(int flag); -void quit(void); +void quit(int argc, const char *argv[]); int login(const char *host); int command(const char *fmt, ...); int globulize(const char **cpp); @@ -44,21 +44,58 @@ int getit(int argc, const char *argv[], int restartit, const char *mode); int sleep(int time); char *tail(void); -void setbell(void), setdebug(void); -void setglob(void), sethash(void), setport(void); -void setprompt(void); -void settrace(void), setverbose(void); -void settype(void), setform(void), setstruct(void); -void restart(void), syst(void); -void cd(void), lcd(void), delete(void), mdelete(void); -void ls(void), mls(void), get(void), mget(void), help(void), append(void), put(void), mput(void), reget(void); -void status(void); -void renamefile(void); -void quote(void), rmthelp(void), site(void); -void pwd(void), makedir(void), removedir(void), setcr(void); -void account(void), doproxy(void), reset(void), setcase(void), setntrans(void), setnmap(void); -void setsunique(void), setrunique(void), cdup(void), macdef(void); -void sizecmd(void), modtime(void), newer(void), rmtstatus(void); -void do_chmod(void), do_umask(void), idle(void); -void shell(void), user(void), fsetmode(void); -struct cmd *getcmd(void); +void setbell(int argc, const char *argv[]); +void setdebug(int argc, const char *argv[]); +void setglob(int argc, const char *argv[]); +void sethash(int argc, const char *argv[]); +void setport(int argc, const char *argv[]); +void setprompt(int argc, const char *argv[]); +void settrace(int argc, const char *argv[]); +void setverbose(int argc, const char *argv[]); +void settype(int argc, const char *argv[]); +void setform(int argc, const char *argv[]); +void setstruct(int argc, const char *argv[]); +void restart(int argc, const char *argv[]); +void syst(int argc, const char *argv[]); +void cd(int argc, const char *argv[]); +void lcd(int argc, const char *argv[]); +void delete(int argc, const char *argv[]); +void mdelete(int argc, const char *argv[]); +void ls(int argc, const char *argv[]); +void mls(int argc, const char *argv[]); +void get(int argc, const char *argv[]); +void mget(int argc, const char *argv[]); +void help(int argc, const char *argv[]); +void put(int argc, const char *argv[]); +void mput(int argc, const char *argv[]); +void reget(int argc, const char *argv[]); +void status(int argc, const char *argv[]); +void renamefile(int argc, const char *argv[]); +void quote(int argc, const char *argv[]); +void rmthelp(int argc, const char *argv[]); +void site(int argc, const char *argv[]); +void pwd(int argc, const char *argv[]); +void makedir(int argc, const char *argv[]); +void removedir(int argc, const char *argv[]); +void setcr(int argc, const char *argv[]); +void account(int argc, const char *argv[]); +void doproxy(int argc, const char *argv[]); +void reset(int argc, const char *argv[]); +void setcase(int argc, const char *argv[]); +void setntrans(int argc, const char *argv[]); +void setnmap(int argc, const char *argv[]); +void setsunique(int argc, const char *argv[]); +void setrunique(int argc, const char *argv[]); +void cdup(int argc, const char *argv[]); +void macdef(int argc, const char *argv[]); +void sizecmd(int argc, const char *argv[]); +void modtime(int argc, const char *argv[]); +void newer(int argc, const char *argv[]); +void rmtstatus(int argc, const char *argv[]); +void do_chmod(int argc, const char *argv[]); +void do_umask(int argc, const char *argv[]); +void idle(int argc, const char *argv[]); +void shell(int argc, const char *argv[]); +void user(int argc, const char *argv[]); +void fsetmode(int argc, const char *argv[]); +struct cmd *getcmd(const char *name); From 18e63b0a1eb8b66cd9675e919b314a8cefa0c8ce Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sun, 13 Mar 2011 09:56:01 +0000 Subject: [PATCH 273/287] [USER32] - Rafal Harabien: Add some missing bitmaps to user32. They are copied from Wine. Change "old" cursors identifiers to defines from winuser.h (OCR_*). See issue #6000 for more details. svn path=/trunk/; revision=51029 --- .../win32/user32/resources/obm_btncorners.bmp | Bin 0 -> 118 bytes .../dll/win32/user32/resources/obm_btsize.bmp | Bin 0 -> 122 bytes .../dll/win32/user32/resources/obm_check.bmp | Bin 0 -> 118 bytes .../win32/user32/resources/obm_dnarrow.bmp | Bin 0 -> 322 bytes .../win32/user32/resources/obm_dnarrowd.bmp | Bin 0 -> 322 bytes .../win32/user32/resources/obm_dnarrowi.bmp | Bin 0 -> 322 bytes .../win32/user32/resources/obm_lfarrow.bmp | Bin 0 -> 322 bytes .../win32/user32/resources/obm_lfarrowd.bmp | Bin 0 -> 322 bytes .../win32/user32/resources/obm_lfarrowi.bmp | Bin 0 -> 322 bytes .../win32/user32/resources/obm_old_close.bmp | Bin 0 -> 478 bytes .../user32/resources/obm_old_dnarrow.bmp | Bin 0 -> 122 bytes .../user32/resources/obm_old_lfarrow.bmp | Bin 0 -> 122 bytes .../win32/user32/resources/obm_old_reduce.bmp | Bin 0 -> 138 bytes .../user32/resources/obm_old_restore.bmp | Bin 0 -> 138 bytes .../user32/resources/obm_old_rgarrow.bmp | Bin 0 -> 122 bytes .../user32/resources/obm_old_uparrow.bmp | Bin 0 -> 122 bytes .../win32/user32/resources/obm_old_zoom.bmp | Bin 0 -> 138 bytes .../dll/win32/user32/resources/obm_reduce.bmp | Bin 0 -> 230 bytes .../win32/user32/resources/obm_reduced.bmp | Bin 0 -> 230 bytes .../win32/user32/resources/obm_restore.bmp | Bin 0 -> 230 bytes .../win32/user32/resources/obm_restored.bmp | Bin 0 -> 230 bytes .../win32/user32/resources/obm_rgarrow.bmp | Bin 0 -> 322 bytes .../win32/user32/resources/obm_rgarrowd.bmp | Bin 0 -> 322 bytes .../win32/user32/resources/obm_rgarrowi.bmp | Bin 0 -> 322 bytes .../dll/win32/user32/resources/obm_size.bmp | Bin 0 -> 114 bytes .../dll/win32/user32/resources/obm_trtype.bmp | Bin 0 -> 230 bytes .../win32/user32/resources/obm_uparrow.bmp | Bin 0 -> 322 bytes .../win32/user32/resources/obm_uparrowd.bmp | Bin 0 -> 322 bytes .../win32/user32/resources/obm_uparrowi.bmp | Bin 0 -> 322 bytes .../dll/win32/user32/resources/obm_zoom.bmp | Bin 0 -> 230 bytes .../dll/win32/user32/resources/obm_zoomd.bmp | Bin 0 -> 230 bytes reactos/dll/win32/user32/user32.rc | 75 +++++++++++++----- reactos/include/psdk/winuser.h | 61 +++++++------- 33 files changed, 85 insertions(+), 51 deletions(-) create mode 100644 reactos/dll/win32/user32/resources/obm_btncorners.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_btsize.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_check.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_dnarrow.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_dnarrowd.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_dnarrowi.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_lfarrow.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_lfarrowd.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_lfarrowi.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_old_close.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_old_dnarrow.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_old_lfarrow.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_old_reduce.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_old_restore.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_old_rgarrow.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_old_uparrow.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_old_zoom.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_reduce.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_reduced.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_restore.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_restored.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_rgarrow.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_rgarrowd.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_rgarrowi.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_size.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_trtype.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_uparrow.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_uparrowd.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_uparrowi.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_zoom.bmp create mode 100644 reactos/dll/win32/user32/resources/obm_zoomd.bmp diff --git a/reactos/dll/win32/user32/resources/obm_btncorners.bmp b/reactos/dll/win32/user32/resources/obm_btncorners.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e7838624b1af7a80d3dfb167ee2336afc103a0a8 GIT binary patch literal 118 zcmZ?rEn|QHJ0PV2#C%Z9$iN7Zz(M~1|DWOi9|k!7QNzIS!G?k1feb1JiGk#h)dB#{ CF&UWv literal 0 HcmV?d00001 diff --git a/reactos/dll/win32/user32/resources/obm_btsize.bmp b/reactos/dll/win32/user32/resources/obm_btsize.bmp new file mode 100644 index 0000000000000000000000000000000000000000..076e4f870ee1329efc349e629897170d67d87262 GIT binary patch literal 122 tcmZ?rtzv)xJ0PV2#Qadq$iN7Zz(M~1{~s(<|A&DA9W&Gb#qeN|MgV8s6HNdB literal 0 HcmV?d00001 diff --git a/reactos/dll/win32/user32/resources/obm_check.bmp b/reactos/dll/win32/user32/resources/obm_check.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e9e4fb5de772490ad65635a7fca3e2257b479b75 GIT binary patch literal 118 zcmZ?rEn|QHJ0PV2#C%Z9$iN7Zz(M~1|DWOi9|k!72W0=LVPNG-@l)szP_H}|NsBEln^D(qyzyV#mvZTK`>AP si=(j_1qET^0t^T?0|O&WTmYyI#uh|YgNqHa0cIw4wlNqOf!u=(0AHICT>t<8 literal 0 HcmV?d00001 diff --git a/reactos/dll/win32/user32/resources/obm_dnarrowd.bmp b/reactos/dll/win32/user32/resources/obm_dnarrowd.bmp new file mode 100644 index 0000000000000000000000000000000000000000..51b38e90f7576543ddcb28b729243df3ce2beaee GIT binary patch literal 322 zcmZ?rbz)=ygEAng0mOn(%*en37RN>G-@l)szP=upG|}Qrf)D`GfR8NzR0dPSzzAmx f09_0d2TC)-*n&uEaI!%*!^|YeR)PSKdSn0qN^lGH literal 0 HcmV?d00001 diff --git a/reactos/dll/win32/user32/resources/obm_dnarrowi.bmp b/reactos/dll/win32/user32/resources/obm_dnarrowi.bmp new file mode 100644 index 0000000000000000000000000000000000000000..3cbf4fbba4cf728c361ad1a2ac2f24576df47145 GIT binary patch literal 322 zcmZ?rbz)=ygEAng0mOn(%*en37RN>G-@l)szP_H}|NsBEln^D(qyzyV#mvZTK`>AP zivyX$f`V|ivLT!;q+|?dD=8@(Le&TXO@fOHDIu#zW+Ryiv;uBER<O#07Y~Y AfdBvi literal 0 HcmV?d00001 diff --git a/reactos/dll/win32/user32/resources/obm_lfarrow.bmp b/reactos/dll/win32/user32/resources/obm_lfarrow.bmp new file mode 100644 index 0000000000000000000000000000000000000000..6ceef25255015b43b5808ed4acedb2be38cbb6b7 GIT binary patch literal 322 zcmZ?rbz)=ygEAng0mOn(%*en37RN>G-@l)szP_H}|NsBEln^D(qyzyV#mvZTK`>AP ri=(j_1qET^0!VD2Qkb{^5*zFzZ0ZG(^nz@Fslm=R1_L9IdyoMDRHhL> literal 0 HcmV?d00001 diff --git a/reactos/dll/win32/user32/resources/obm_lfarrowd.bmp b/reactos/dll/win32/user32/resources/obm_lfarrowd.bmp new file mode 100644 index 0000000000000000000000000000000000000000..bb446c3e0400a3fda7cafbf0c98805a87529ec5b GIT binary patch literal 322 zcmZ?rbz)=ygEAng0mOn(%*en37RN>G-@l)szP=upG|}Qrf)D`GfR8NzR0dPSfM5$S hFfhWzfzog`vbZ3UdO>7!KsLk7B*<2R0FZiQ002|43=;qV literal 0 HcmV?d00001 diff --git a/reactos/dll/win32/user32/resources/obm_lfarrowi.bmp b/reactos/dll/win32/user32/resources/obm_lfarrowi.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c81363d484fc9f85582f6bf06e25db861776046e GIT binary patch literal 322 zcmZ?rbz)=ygEAng0mOn(%*en37RN>G-@l)szP_H}|NsBEln^D(qyzyV#mvZTK`>AP zivyX$f`V|iGJ-9nXlw`*2kM5gg^<{SKsH>j5RzU&WH!(Wm^mPeG1JQ3|5FaEC Il1Ek#0KB3fJpcdz literal 0 HcmV?d00001 diff --git a/reactos/dll/win32/user32/resources/obm_old_reduce.bmp b/reactos/dll/win32/user32/resources/obm_old_reduce.bmp new file mode 100644 index 0000000000000000000000000000000000000000..cee2329995f66ac426c7498522c1ca7193aebad1 GIT binary patch literal 138 zcmZ?r?P7ocJ0PV2#F9WP48)8;h!6b#|DOSf8~*s0s0M$b}#{d8T literal 0 HcmV?d00001 diff --git a/reactos/dll/win32/user32/resources/obm_old_rgarrow.bmp b/reactos/dll/win32/user32/resources/obm_old_rgarrow.bmp new file mode 100644 index 0000000000000000000000000000000000000000..0c05d811730af4a1c9f1e9624d241299ff266e67 GIT binary patch literal 122 zcmZ?rtzv)xJ0PV2#Qadq$iN7Zz(M~1|DWOiKL$Ad2W0=N17e^-59END4?=_ZVDWzl HwIF=}aRMC8 literal 0 HcmV?d00001 diff --git a/reactos/dll/win32/user32/resources/obm_old_uparrow.bmp b/reactos/dll/win32/user32/resources/obm_old_uparrow.bmp new file mode 100644 index 0000000000000000000000000000000000000000..299fadb47a0717d4eb41e5b02cd69f64100ee6d8 GIT binary patch literal 122 zcmZ?rtzv)xJ0PV2#Qadq$iN7Zz(M~1|DWOiKL$AdQ^&x7j34kZFno|>VE6$v7$pAh JA3`li9{_Yx9SZ;e literal 0 HcmV?d00001 diff --git a/reactos/dll/win32/user32/resources/obm_old_zoom.bmp b/reactos/dll/win32/user32/resources/obm_old_zoom.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c1b4eb68b886d63b1a981896c08eec585a9ffc86 GIT binary patch literal 138 zcmZ?r?P7ocJ0PV2#F9WP48)8;h!6b#|DOSf8^HJhkUjv!cW`0*hJP~h4gc%y8~*RB Php2lARQnx>p=JO82DU)i literal 0 HcmV?d00001 diff --git a/reactos/dll/win32/user32/resources/obm_reduce.bmp b/reactos/dll/win32/user32/resources/obm_reduce.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d0dbf01a44a2b93b4b98a9f343604ec82afadfcc GIT binary patch literal 230 zcmZ?reZ~L*Wk5;;hy{R{4~Q8VSb!vMuz&x4hMPBUGSt`CGyMPmAGbn0GS0?eVBjPO Y20$99SWpm&hKZ9%D}jN53j{a-0A(f^f&c&j literal 0 HcmV?d00001 diff --git a/reactos/dll/win32/user32/resources/obm_reduced.bmp b/reactos/dll/win32/user32/resources/obm_reduced.bmp new file mode 100644 index 0000000000000000000000000000000000000000..c39f8e9505a2e450243f95d7fb58745fc217e1d3 GIT binary patch literal 230 zcmZ?reZ~L*Wk5;;hy{R{4~Q8VSb!vMuz&x4hMPBUGSt`CGyMPmAGbm*GA>ZSqyz>k Y%z{8$83mDOK@b4)$)t_JKm}$s08Dxn00000 literal 0 HcmV?d00001 diff --git a/reactos/dll/win32/user32/resources/obm_restore.bmp b/reactos/dll/win32/user32/resources/obm_restore.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a22d3ddff44ef854de968e9da099bdfe38a8c0df GIT binary patch literal 230 zcmZ?reZ~L*Wk5;;hy{R{4~Q8VSb!vMuz&x4hMPBUGSt`CGyMPmAGbn0GS0?eVBjPO n1_n+*%NYd)fwZ6?It`S7$RpE&V1+>aV2ub`2@DKeAix0tJ)swL literal 0 HcmV?d00001 diff --git a/reactos/dll/win32/user32/resources/obm_restored.bmp b/reactos/dll/win32/user32/resources/obm_restored.bmp new file mode 100644 index 0000000000000000000000000000000000000000..6958dc2ca1553d2360b553650880d5946b326b8f GIT binary patch literal 230 zcmZ?reZ~L*Wk5;;hy{R{4~Q8VSb!vMuz&x4hMPBUGSt`CGyMPmAGbm*GA>ZSqyz>k r%z{8gf`UMrQBVM#WνG-@l)szP_H}|NsBEln^D(qyzyV#mvZTK`>AP xi=(j_1qI>a3~;sp0|O&W9LQ!sV#CD+1rh261(D4GS^+l`E87?hj6m)|1^`r|5kCL` literal 0 HcmV?d00001 diff --git a/reactos/dll/win32/user32/resources/obm_rgarrowd.bmp b/reactos/dll/win32/user32/resources/obm_rgarrowd.bmp new file mode 100644 index 0000000000000000000000000000000000000000..abf3f7c99f207f9671776c128b51abdef8e23d52 GIT binary patch literal 322 zcmZ?rbz)=ygEAng0mOn(%*en37RN>G-@l)szP=upG|}Qrf)D`GfR8NzR0dNczzAmp fg^<~dFg3{Hf=KEGk<9_w3^S7;TL}U{>X88eQ*aCu literal 0 HcmV?d00001 diff --git a/reactos/dll/win32/user32/resources/obm_rgarrowi.bmp b/reactos/dll/win32/user32/resources/obm_rgarrowi.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a90b836a7392e14ed6ede6e0ce1b9dd06fde2ddb GIT binary patch literal 322 zcmZ?rbz)=ygEAng0mOn(%*en37RN>G-@l)szP_H}|NsBEln^D(qyzyV#mvZTK`>AP zivyX$f`V|ivLT#ptYi#h3n?in8$#6p*-A*_iZC|N5F~RHk=Q^h;O1jx8-sxnx~Bk4 CPZNOv literal 0 HcmV?d00001 diff --git a/reactos/dll/win32/user32/resources/obm_size.bmp b/reactos/dll/win32/user32/resources/obm_size.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d4eedf965f338bd3d45156ce710ad56baeb73f1b GIT binary patch literal 114 rcmZ?rEnG-@l)szP_H}|NsBEln^D(qyzyV#mvZTK`>AP ti=(my7z71j;yBm>Ky7d}3=E8LHnMs_Mua&a8(?N)XB&fo5y(Br003eO5nTWP literal 0 HcmV?d00001 diff --git a/reactos/dll/win32/user32/resources/obm_uparrowd.bmp b/reactos/dll/win32/user32/resources/obm_uparrowd.bmp new file mode 100644 index 0000000000000000000000000000000000000000..872dc323044903f728efb046520a9cb15b9f304a GIT binary patch literal 322 zcmZ?rbz)=ygEAng0mOn(%*en37RN>G-@l)szP=upG|}Qrf)D`GfRD|G-@l)szP_H}|NsBEln^D(qyzyV#mvZTK`>AP zivyX)hJrA*kP=q5u#u9mAykbJ&?LBeB_%~TTS!R|&K6WeVgs#!nGdoUlWhzJM(Cab E0AU&vp8x;= literal 0 HcmV?d00001 diff --git a/reactos/dll/win32/user32/resources/obm_zoom.bmp b/reactos/dll/win32/user32/resources/obm_zoom.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a3838ebaea15aa4c710af4cfc79153dbab26fd7e GIT binary patch literal 230 zcmZ?reZ~L*Wk5;;hy{R{4~Q8VSb!vMuz&x4hMPBUGSt`CGyMPmAGbn0GS0?eVBjPO c1_n+b%NYcLG>|Vq3Juc-rIoZSqyz>k h%z_|Aj6j-EP*9K*8m13M1GNhZsxTXafeJ_z1ON Date: Sun, 13 Mar 2011 10:43:38 +0000 Subject: [PATCH 274/287] [RAPPS] French translation by Jason Toscano Corrections/adjustements by me See issue #5993 for more details. svn path=/trunk/; revision=51030 --- reactos/base/applications/rapps/lang/fr-FR.rc | 193 ++++++++++++++++++ reactos/base/applications/rapps/rsrc.rc | 1 + 2 files changed, 194 insertions(+) create mode 100644 reactos/base/applications/rapps/lang/fr-FR.rc diff --git a/reactos/base/applications/rapps/lang/fr-FR.rc b/reactos/base/applications/rapps/lang/fr-FR.rc new file mode 100644 index 00000000000..0058de3f145 --- /dev/null +++ b/reactos/base/applications/rapps/lang/fr-FR.rc @@ -0,0 +1,193 @@ +LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL + +IDR_MAINMENU MENU +BEGIN + POPUP "&Fichier" + BEGIN + MENUITEM "&Configuration", ID_SETTINGS + MENUITEM SEPARATOR + MENUITEM "S&ortir", ID_EXIT + END + POPUP "&Programmes" + BEGIN + MENUITEM "&Installer", ID_INSTALL + MENUITEM "&Désinstaller",ID_UNINSTALL + MENUITEM "&Modifier", ID_MODIFY + MENUITEM SEPARATOR + MENUITEM "&Supprimer du registre", ID_REGREMOVE + MENUITEM SEPARATOR + MENUITEM "&Rafraîchir", ID_REFRESH + END + POPUP "Aide" + BEGIN + MENUITEM "Aide", ID_HELP, GRAYED + MENUITEM "À propos", ID_ABOUT + END +END + +IDR_LINKMENU MENU +BEGIN + POPUP "popup" + BEGIN + MENUITEM "&Ouvrir le lien dans un navigateur", ID_OPEN_LINK + MENUITEM "&Copier le lien dans le presse-papier", ID_COPY_LINK + END +END + +IDR_APPLICATIONMENU MENU +BEGIN + POPUP "popup" + BEGIN + MENUITEM "&Installer", ID_INSTALL + MENUITEM "&Désinstaller", ID_UNINSTALL + MENUITEM "&Modifier", ID_MODIFY + MENUITEM SEPARATOR + MENUITEM "&Supprimer du registre", ID_REGREMOVE + MENUITEM SEPARATOR + MENUITEM "&Rafraîchir", ID_REFRESH + END +END + +IDD_SETTINGS_DIALOG DIALOGEX DISCARDABLE 0, 0, 250, 144 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Configuration" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Général", -1, 4, 2, 240, 61 + AUTOCHECKBOX "&Enregistrer la position de la fenêtre", IDC_SAVE_WINDOW_POS, 15, 12, 219, 12 + AUTOCHECKBOX "&Mettre à jour la liste des programmes accessibles au démarage", IDC_UPDATE_AVLIST, 15, 29, 219, 12 + AUTOCHECKBOX "&Journal de l'installation de la suppression des programmes", IDC_LOG_ENABLED, 15, 46, 219, 12 + + GROUPBOX "Téléchargement", -1, 4, 65, 240, 51 + LTEXT "Fichier des téléchargements :", -1, 16, 75, 100, 9 + EDITTEXT IDC_DOWNLOAD_DIR_EDIT, 15, 86, 166, 12, WS_CHILD | WS_VISIBLE | WS_GROUP + PUSHBUTTON "&Sélectionner", IDC_CHOOSE, 187, 85, 50, 14 + AUTOCHECKBOX "&Supprimer l'installateur du programme après l'installation", IDC_DEL_AFTER_INSTALL, 16, 100, 218, 12 + + PUSHBUTTON "Par défaut", IDC_DEFAULT_SETTINGS, 8, 124, 60, 14 + PUSHBUTTON "Accepter", IDOK, 116, 124, 60, 14 + PUSHBUTTON "Annuler", IDCANCEL, 181, 124, 60, 14 +END + +IDD_INSTALL_DIALOG DIALOGEX DISCARDABLE 0, 0, 216, 97 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Installation de programme" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "...", IDC_INSTALL_TEXT, 4, 5, 209, 35 + + AUTORADIOBUTTON "&Installer à partir d'un disque (CD ou DVD)", IDC_CD_INSTALL, 10, 46, 197, 11, WS_GROUP + AUTORADIOBUTTON "&Télécharger et installer", IDC_DOWNLOAD_INSTALL, 10, 59, 197, 11, NOT WS_TABSTOP + + PUSHBUTTON "Accepter", IDOK, 86, 78, 60, 14 + PUSHBUTTON "Annuler", IDCANCEL, 150, 78, 60, 14 +END + +IDD_DOWNLOAD_DIALOG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 220, 76 +STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE +CAPTION "Télécharger..." +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Progress1", IDC_DOWNLOAD_PROGRESS, "msctls_progress32", WS_BORDER | PBS_SMOOTH, 10, 10, 200, 12 + LTEXT "", IDC_DOWNLOAD_STATUS, 10, 30, 200, 10, SS_CENTER + PUSHBUTTON "Annuler", IDCANCEL, 85, 58, 50, 15, WS_GROUP | WS_TABSTOP +END + +IDD_ABOUT_DIALOG DIALOGEX 22, 16, 190, 66 +STYLE DS_SHELLFONT | WS_BORDER | WS_DLGFRAME | WS_SYSMENU | DS_MODALFRAME +CAPTION "À propos" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS Applications Manager\nCopyright (C) 2009\npar Dmitry Chapyshev (dmitry@reactos.org)", IDC_STATIC, 48, 7, 130, 39 + PUSHBUTTON "Fermer", IDOK, 133, 46, 50, 14 + ICON IDI_MAIN, IDC_STATIC, 10, 10, 7, 30 +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_TOOLTIP_INSTALL "Installer" + IDS_TOOLTIP_UNINSTALL "Désinstaller" + IDS_TOOLTIP_MODIFY "Modifier" + IDS_TOOLTIP_SETTINGS "Configuration" + IDS_TOOLTIP_REFRESH "Rafraîchir" + IDS_TOOLTIP_EXIT "Sortir" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_APP_NAME "Nom" + IDS_APP_INST_VERSION "Version" + IDS_APP_DESCRIPTION "Description" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_INFO_VERSION "\nVersion : " + IDS_INFO_DESCRIPTION "\nDescription : " + IDS_INFO_PUBLISHER "\nAuteur : " + IDS_INFO_HELPLINK "\nLien d'aide : " + IDS_INFO_HELPPHONE "\nTéléphone d'aide : " + IDS_INFO_README "\nLisez-moi : " + IDS_INFO_REGOWNER "\nUtilisateur enregistré : " + IDS_INFO_PRODUCTID "\nID du produit : " + IDS_INFO_CONTACT "\nContact : " + IDS_INFO_UPDATEINFO "\nInformation de mise à jour : " + IDS_INFO_INFOABOUT "\nInformation à propos : " + IDS_INFO_COMMENTS "\nCommentaires : " + IDS_INFO_INSTLOCATION "\Emplacement de l'installation : " + IDS_INFO_INSTALLSRC "\nSource de l'installation : " + IDS_INFO_UNINSTALLSTR "\nCommande de désinstallation : " + IDS_INFO_MODIFYPATH "\nModifier le chemin d'accès : " + IDS_INFO_INSTALLDATE "\nDate d'installation : " +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_AINFO_VERSION "\nVersion : " + IDS_AINFO_DESCRIPTION "\nDescription : " + IDS_AINFO_SIZE "\nTaille : " + IDS_AINFO_URLSITE "\nSite internet : " + IDS_AINFO_LICENCE "\nLicence : " +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_CAT_AUDIO "Audio" + IDS_CAT_DEVEL "Développement" + IDS_CAT_DRIVERS "Pilotes" + IDS_CAT_EDU "Éducation" + IDS_CAT_ENGINEER "Ingénierie" + IDS_CAT_FINANCE "Finance" + IDS_CAT_GAMES "Jeux & détente" + IDS_CAT_GRAPHICS "Graphismes" + IDS_CAT_INTERNET "Internet & résaux" + IDS_CAT_LIBS "Bibliothèques" + IDS_CAT_OFFICE "Bureautique" + IDS_CAT_OTHER "Autres" + IDS_CAT_SCIENCE "Sciences" + IDS_CAT_TOOLS "Outils" + IDS_CAT_VIDEO "Vidéo" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_APPTITLE "ReactOS Applications Manager" + IDS_SEARCH_TEXT "Chercher..." + IDS_INSTALL "Installer" + IDS_UNINSTALL "Désinstaller" + IDS_MODIFY "Modifier" + IDS_APPS_COUNT "Nombre d'applications : %d" + IDS_WELCOME_TITLE "Bienvenue à ReactOS Applications Manager!\n\n" + IDS_WELCOME_TEXT "Choisisez une catégorie à gauche, ensuite choisisez une application à installer ou désinstaller.\nSite internet de ReactOS : " + IDS_WELCOME_URL "http://www.reactos.org" + IDS_INSTALLED "Installé" + IDS_AVAILABLEFORINST "Disponible pour installation" + IDS_UPDATES "Mises à jour" + IDS_APPLICATIONS "Applications" + IDS_CHOOSE_FOLDER_TEXT "Choisisez un dossier dans lequel seront téléchargés les programmes :" + IDS_CHOOSE_FOLDER_ERROR "Le dossier que vous avez spécifié n'existe pas. Le créer ?" + IDS_USER_NOT_ADMIN "Vous devez être un administrateur pour démarrer ""ReactOS Applications Manager""!" + IDS_APP_REG_REMOVE "Etes-vous sûr de vouloir supprimer les données du programme installé du registre ?" + IDS_INFORMATION "Information" + IDS_UNABLE_TO_REMOVE "Impossible de supprimer les données du programme du registre !" +END diff --git a/reactos/base/applications/rapps/rsrc.rc b/reactos/base/applications/rapps/rsrc.rc index 17c16983f73..470e2588ee3 100644 --- a/reactos/base/applications/rapps/rsrc.rc +++ b/reactos/base/applications/rapps/rsrc.rc @@ -3,6 +3,7 @@ #include "lang/de-DE.rc" #include "lang/en-US.rc" #include "lang/es-ES.rc" +#include "lang/fr-FR.rc" #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/no-NO.rc" From d1a2f235a3a9f0a4b680dfee88a66039e173be0e Mon Sep 17 00:00:00 2001 From: Giannis Adamopoulos Date: Sun, 13 Mar 2011 11:22:18 +0000 Subject: [PATCH 275/287] [win32] - Rafal Harabien: - Always call IntKeyboardInput and co_MsqPostKeyboardMessage while holding the user lock - Simplify cleaning up sent messages See issue #5580 for more details. svn path=/trunk/; revision=51031 --- .../subsystems/win32/win32k/ntuser/input.c | 22 +-- .../subsystems/win32/win32k/ntuser/message.c | 14 +- .../subsystems/win32/win32k/ntuser/msgqueue.c | 184 +++++------------- 3 files changed, 72 insertions(+), 148 deletions(-) diff --git a/reactos/subsystems/win32/win32k/ntuser/input.c b/reactos/subsystems/win32/win32k/ntuser/input.c index 04fc11531be..f8550fc79d6 100644 --- a/reactos/subsystems/win32/win32k/ntuser/input.c +++ b/reactos/subsystems/win32/win32k/ntuser/input.c @@ -708,6 +708,7 @@ KeyboardThreadMain(PVOID StartContext) if (ModifierState == 0) { + UserEnterExclusive(); if (fsModifiers == MOD_WIN) IntKeyboardSendWinKeyMsg(); else if (fsModifiers == MOD_ALT) @@ -723,6 +724,7 @@ KeyboardThreadMain(PVOID StartContext) } co_IntKeyboardSendAltKeyMsg(); } + UserLeave(); continue; } @@ -731,6 +733,8 @@ KeyboardThreadMain(PVOID StartContext) } } + UserEnterExclusive(); + for (;NumKeys;memcpy(&KeyInput, &NextKeyInput, sizeof(KeyInput)), NumKeys--) { @@ -860,6 +864,8 @@ KeyboardThreadMain(PVOID StartContext) */ co_MsqPostKeyboardMessage(msg.message,msg.wParam,msg.lParam); } + + UserLeave(); } KeyboardEscape: @@ -1243,17 +1249,11 @@ IntKeyboardInput(KEYBDINPUT *ki) LARGE_INTEGER LargeTickCount; KBDLLHOOKSTRUCT KbdHookData; WORD flags, wVkStripped, wVkL, wVkR, wVk = ki->wVk, vk_hook = ki->wVk; - BOOLEAN Entered = FALSE; Msg.lParam = 0; - // Condition may arise when calling MsqPostMessage and waiting for an event. - if (!UserIsEntered()) - { - // Fixme: Not sure ATM if this thread is locked. - UserEnterExclusive(); - Entered = TRUE; - } + // Condition may arise when calling MsqPostMessage and waiting for an event. + ASSERT (UserIsEntered()); wVk = LOBYTE(wVk); Msg.wParam = wVk; @@ -1352,7 +1352,7 @@ IntKeyboardInput(KEYBDINPUT *ki) { DPRINT1("Kbd msg %d wParam %d lParam 0x%08x dropped by WH_KEYBOARD_LL hook\n", Msg.message, vk_hook, Msg.lParam); - if (Entered) UserLeave(); + return FALSE; } @@ -1380,7 +1380,7 @@ IntKeyboardInput(KEYBDINPUT *ki) if (FocusMessageQueue == NULL) { DPRINT("No focus message queue\n"); - if (Entered) UserLeave(); + return FALSE; } @@ -1401,8 +1401,6 @@ IntKeyboardInput(KEYBDINPUT *ki) DPRINT("Invalid focus window handle\n"); } - if (Entered) UserLeave(); - return TRUE; } diff --git a/reactos/subsystems/win32/win32k/ntuser/message.c b/reactos/subsystems/win32/win32k/ntuser/message.c index 9d5b72bb105..0ee2514a03c 100644 --- a/reactos/subsystems/win32/win32k/ntuser/message.c +++ b/reactos/subsystems/win32/win32k/ntuser/message.c @@ -1447,7 +1447,7 @@ co_IntSendMessageWithCallBack( HWND hWnd, if(!(Message = ExAllocatePoolWithTag(NonPagedPool, sizeof(USER_SENT_MESSAGE), TAG_USRMSG))) { DPRINT1("MsqSendMessage(): Not enough memory to allocate a message"); - return STATUS_INSUFFICIENT_RESOURCES; + RETURN( FALSE); } Message->Msg.hwnd = hWnd; @@ -1459,19 +1459,21 @@ co_IntSendMessageWithCallBack( HWND hWnd, Message->lResult = 0; Message->QS_Flags = 0; Message->SenderQueue = NULL; // mjmartin, you are right! This is null. + IntReferenceMessageQueue(Win32Thread->MessageQueue); Message->CallBackSenderQueue = Win32Thread->MessageQueue; - - IntReferenceMessageQueue(Window->head.pti->MessageQueue); Message->CompletionCallback = CompletionCallback; Message->CompletionCallbackContext = CompletionCallbackContext; - Message->HookMessage = MSQ_NORMAL | MSQ_SENTNOWAIT; + Message->HookMessage = MSQ_NORMAL; // | MSQ_SENTNOWAIT Message->HasPackedLParam = (lParamBufferSize > 0); - + Message->DispatchingListEntry.Flink = NULL; Message->QS_Flags = QS_SENDMESSAGE; + + IntReferenceMessageQueue(Window->head.pti->MessageQueue); + MsqWakeQueue(Window->head.pti->MessageQueue, QS_SENDMESSAGE, FALSE); InsertTailList(&Window->head.pti->MessageQueue->SentMessagesListHead, &Message->ListEntry); - IntDereferenceMessageQueue(Window->head.pti->MessageQueue); + //IntDereferenceMessageQueue(Window->head.pti->MessageQueue); RETURN(TRUE); diff --git a/reactos/subsystems/win32/win32k/ntuser/msgqueue.c b/reactos/subsystems/win32/win32k/ntuser/msgqueue.c index 36ac945fb74..430b2c6687e 100644 --- a/reactos/subsystems/win32/win32k/ntuser/msgqueue.c +++ b/reactos/subsystems/win32/win32k/ntuser/msgqueue.c @@ -279,18 +279,12 @@ co_MsqPostKeyboardMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) MSG Msg; LARGE_INTEGER LargeTickCount; KBDLLHOOKSTRUCT KbdHookData; - BOOLEAN Entered = FALSE; DPRINT("MsqPostKeyboardMessage(uMsg 0x%x, wParam 0x%x, lParam 0x%x)\n", uMsg, wParam, lParam); // Condition may arise when calling MsqPostMessage and waiting for an event. - if (!UserIsEntered()) - { - // Fixme: Not sure ATM if this thread is locked. - UserEnterExclusive(); - Entered = TRUE; - } + ASSERT(UserIsEntered()); FocusMessageQueue = IntGetFocusMessageQueue(); @@ -320,14 +314,12 @@ co_MsqPostKeyboardMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) { DPRINT1("Kbd msg %d wParam %d lParam 0x%08x dropped by WH_KEYBOARD_LL hook\n", Msg.message, Msg.wParam, Msg.lParam); - if (Entered) UserLeave(); return; } if (FocusMessageQueue == NULL) { DPRINT("No focus message queue\n"); - if (Entered) UserLeave(); return; } @@ -346,7 +338,6 @@ co_MsqPostKeyboardMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) DPRINT("Invalid focus window handle\n"); } - if (Entered) UserLeave(); return; } @@ -415,6 +406,42 @@ MsqDestroyMessage(PUSER_MESSAGE Message) ExFreeToPagedLookasideList(&MessageLookasideList, Message); } +VOID FASTCALL +MsqDestroySentMessage(PUSER_MESSAGE_QUEUE MessageQueue, PUSER_SENT_MESSAGE SentMessage) +{ + /* remove the message from the dispatching list if needed */ + if (SentMessage->DispatchingListEntry.Flink != NULL) + { + RemoveEntryList(&SentMessage->DispatchingListEntry); + } + + /* wake the sender's thread */ + if (SentMessage->CompletionEvent != NULL) + { + KeSetEvent(SentMessage->CompletionEvent, IO_NO_INCREMENT, FALSE); + } + + /* dereference message queues */ + IntDereferenceMessageQueue(MessageQueue); + if (SentMessage->SenderQueue) + { + IntDereferenceMessageQueue(SentMessage->SenderQueue); + } + if (SentMessage->CallBackSenderQueue) + { + IntDereferenceMessageQueue(SentMessage->CallBackSenderQueue); + } + + /* free lParam if needed */ + if (SentMessage->HasPackedLParam == TRUE && SentMessage->Msg.lParam) + { + ExFreePool((PVOID)SentMessage->Msg.lParam); + } + + /* free the message */ + ExFreePoolWithTag(SentMessage, TAG_USRMSG); +} + BOOLEAN FASTCALL co_MsqDispatchOneSentMessage(PUSER_MESSAGE_QUEUE MessageQueue) { @@ -478,13 +505,10 @@ co_MsqDispatchOneSentMessage(PUSER_MESSAGE_QUEUE MessageQueue) RemoveEntryList(&Message->ListEntry); /* remove the message from the dispatching list if needed, so lock the sender's message queue */ - if (!(Message->HookMessage & MSQ_SENTNOWAIT)) + if (Message->DispatchingListEntry.Flink != NULL) { - if (Message->DispatchingListEntry.Flink != NULL) - { - /* only remove it from the dispatching list if not already removed by a timeout */ - RemoveEntryList(&Message->DispatchingListEntry); - } + RemoveEntryList(&Message->DispatchingListEntry); + Message->DispatchingListEntry.Flink = NULL; } /* still keep the sender's message queue locked, so the sender can't exit the MsqSendMessage() function (if timed out) */ @@ -500,16 +524,11 @@ co_MsqDispatchOneSentMessage(PUSER_MESSAGE_QUEUE MessageQueue) *Message->Result = Result; } - if (Message->HasPackedLParam == TRUE) - { - if (Message->Msg.lParam) - ExFreePool((PVOID)Message->Msg.lParam); - } - /* Notify the sender. */ if (Message->CompletionEvent != NULL) { KeSetEvent(Message->CompletionEvent, IO_NO_INCREMENT, FALSE); + Message->CompletionEvent = NULL; /* prevent MsqDestroySentMessage from setting this event again */ } /* Call the callback if the message was sent with SendMessageCallback */ @@ -522,15 +541,7 @@ co_MsqDispatchOneSentMessage(PUSER_MESSAGE_QUEUE MessageQueue) Result); } - /* Only if it is not a no wait message */ - if (!(Message->HookMessage & MSQ_SENTNOWAIT)) - { - IntDereferenceMessageQueue(Message->SenderQueue); - IntDereferenceMessageQueue(MessageQueue); - } - - /* free the message */ - ExFreePoolWithTag(Message, TAG_USRMSG); + MsqDestroySentMessage(MessageQueue, Message); /* do not hangup on the user if this is reentering */ if (!SaveMsg) pti->pcti->CTI_flags &= ~CTI_INSENDMESSAGE; @@ -560,16 +571,14 @@ MsqRemoveWindowMessagesFromQueue(PVOID pWindow) { PostedMessage = CONTAINING_RECORD(CurrentEntry, USER_MESSAGE, ListEntry); + /* set CurrentEntry to next before destroying message */ + CurrentEntry = CurrentEntry->Flink; + if (PostedMessage->Msg.hwnd == Window->head.h) { RemoveEntryList(&PostedMessage->ListEntry); ClearMsgBitsMask(MessageQueue, PostedMessage->QS_Flags); MsqDestroyMessage(PostedMessage); - CurrentEntry = MessageQueue->PostedMessagesListHead.Flink; - } - else - { - CurrentEntry = CurrentEntry->Flink; } } @@ -580,6 +589,9 @@ MsqRemoveWindowMessagesFromQueue(PVOID pWindow) { SentMessage = CONTAINING_RECORD(CurrentEntry, USER_SENT_MESSAGE, ListEntry); + /* set CurrentEntry to next before destroying message */ + CurrentEntry = CurrentEntry->Flink; + if(SentMessage->Msg.hwnd == Window->head.h) { DPRINT("Notify the sender and remove a message from the queue that had not been dispatched\n"); @@ -587,41 +599,7 @@ MsqRemoveWindowMessagesFromQueue(PVOID pWindow) RemoveEntryList(&SentMessage->ListEntry); ClearMsgBitsMask(MessageQueue, SentMessage->QS_Flags); - /* remove the message from the dispatching list if neede */ - if ((!(SentMessage->HookMessage & MSQ_SENTNOWAIT)) - && (SentMessage->DispatchingListEntry.Flink != NULL)) - { - RemoveEntryList(&SentMessage->DispatchingListEntry); - } - - /* wake the sender's thread */ - if (SentMessage->CompletionEvent != NULL) - { - KeSetEvent(SentMessage->CompletionEvent, IO_NO_INCREMENT, FALSE); - } - - if (SentMessage->HasPackedLParam == TRUE) - { - if (SentMessage->Msg.lParam) - ExFreePool((PVOID)SentMessage->Msg.lParam); - } - - /* Only if it is not a no wait message */ - if (!(SentMessage->HookMessage & MSQ_SENTNOWAIT)) - { - /* dereference our and the sender's message queue */ - IntDereferenceMessageQueue(MessageQueue); - IntDereferenceMessageQueue(SentMessage->SenderQueue); - } - - /* free the message */ - ExFreePoolWithTag(SentMessage, TAG_USRMSG); - - CurrentEntry = MessageQueue->SentMessagesListHead.Flink; - } - else - { - CurrentEntry = CurrentEntry->Flink; + MsqDestroySentMessage(MessageQueue, SentMessage); } } } @@ -655,7 +633,7 @@ co_MsqSendMessage(PUSER_MESSAGE_QUEUE MessageQueue, Timeout.QuadPart = (LONGLONG) uTimeout * (LONGLONG) -10000; - /* FIXME - increase reference counter of sender's message queue here */ + /* FIXME - increase reference counter of sender's message queue here - isn't it done? */ Message->Msg.hwnd = Wnd; Message->Msg.message = Msg; @@ -665,9 +643,9 @@ co_MsqSendMessage(PUSER_MESSAGE_QUEUE MessageQueue, Message->Result = &Result; Message->lResult = 0; Message->QS_Flags = 0; + IntReferenceMessageQueue(ThreadQueue); Message->SenderQueue = ThreadQueue; Message->CallBackSenderQueue = NULL; - IntReferenceMessageQueue(ThreadQueue); Message->CompletionCallback = NULL; Message->CompletionCallbackContext = 0; Message->HookMessage = HookMessage; @@ -1436,35 +1414,7 @@ MsqCleanupMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue) DPRINT("Notify the sender and remove a message from the queue that had not been dispatched\n"); - /* remove the message from the dispatching list if needed */ - if ((!(CurrentSentMessage->HookMessage & MSQ_SENTNOWAIT)) - && (CurrentSentMessage->DispatchingListEntry.Flink != NULL)) - { - RemoveEntryList(&CurrentSentMessage->DispatchingListEntry); - } - - /* wake the sender's thread */ - if (CurrentSentMessage->CompletionEvent != NULL) - { - KeSetEvent(CurrentSentMessage->CompletionEvent, IO_NO_INCREMENT, FALSE); - } - - if (CurrentSentMessage->HasPackedLParam == TRUE) - { - if (CurrentSentMessage->Msg.lParam) - ExFreePool((PVOID)CurrentSentMessage->Msg.lParam); - } - - /* Only if it is not a no wait message */ - if (!(CurrentSentMessage->HookMessage & MSQ_SENTNOWAIT)) - { - /* dereference our and the sender's message queue */ - IntDereferenceMessageQueue(MessageQueue); - IntDereferenceMessageQueue(CurrentSentMessage->SenderQueue); - } - - /* free the message */ - ExFreePool(CurrentSentMessage); + MsqDestroySentMessage(MessageQueue, CurrentSentMessage); } /* notify senders of dispatching messages. This needs to be cleaned up if e.g. @@ -1475,36 +1425,9 @@ MsqCleanupMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue) CurrentSentMessage = CONTAINING_RECORD(CurrentEntry, USER_SENT_MESSAGE, ListEntry); - /* remove the message from the dispatching list */ - if(CurrentSentMessage->DispatchingListEntry.Flink != NULL) - { - RemoveEntryList(&CurrentSentMessage->DispatchingListEntry); - } - DPRINT("Notify the sender, the thread has been terminated while dispatching a message!\n"); - /* wake the sender's thread */ - if (CurrentSentMessage->CompletionEvent != NULL) - { - KeSetEvent(CurrentSentMessage->CompletionEvent, IO_NO_INCREMENT, FALSE); - } - - if (CurrentSentMessage->HasPackedLParam == TRUE) - { - if (CurrentSentMessage->Msg.lParam) - ExFreePool((PVOID)CurrentSentMessage->Msg.lParam); - } - - /* Only if it is not a no wait message */ - if (!(CurrentSentMessage->HookMessage & MSQ_SENTNOWAIT)) - { - /* dereference our and the sender's message queue */ - IntDereferenceMessageQueue(MessageQueue); - IntDereferenceMessageQueue(CurrentSentMessage->SenderQueue); - } - - /* free the message */ - ExFreePool(CurrentSentMessage); + MsqDestroySentMessage(MessageQueue, CurrentSentMessage); } /* tell other threads not to bother returning any info to us */ @@ -1515,6 +1438,7 @@ MsqCleanupMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue) DispatchingListEntry); CurrentSentMessage->CompletionEvent = NULL; CurrentSentMessage->Result = NULL; + CurrentSentMessage->DispatchingListEntry.Flink = NULL; // yeah! /* do NOT dereference our message queue as it might get attempted to be locked later */ From 2ad9ba56bdf57b0f4f4bc1fe70779076565bd8f6 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 13 Mar 2011 12:10:41 +0000 Subject: [PATCH 276/287] [RAPPS] Fix french translation file encoding svn path=/trunk/; revision=51032 --- reactos/base/applications/rapps/lang/fr-FR.rc | 84 +++++++++---------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/reactos/base/applications/rapps/lang/fr-FR.rc b/reactos/base/applications/rapps/lang/fr-FR.rc index 0058de3f145..e4d526e6142 100644 --- a/reactos/base/applications/rapps/lang/fr-FR.rc +++ b/reactos/base/applications/rapps/lang/fr-FR.rc @@ -11,17 +11,17 @@ BEGIN POPUP "&Programmes" BEGIN MENUITEM "&Installer", ID_INSTALL - MENUITEM "&Désinstaller",ID_UNINSTALL + MENUITEM "&Dsinstaller",ID_UNINSTALL MENUITEM "&Modifier", ID_MODIFY MENUITEM SEPARATOR MENUITEM "&Supprimer du registre", ID_REGREMOVE MENUITEM SEPARATOR - MENUITEM "&Rafraîchir", ID_REFRESH + MENUITEM "&Rafrachir", ID_REFRESH END POPUP "Aide" BEGIN MENUITEM "Aide", ID_HELP, GRAYED - MENUITEM "À propos", ID_ABOUT + MENUITEM " propos", ID_ABOUT END END @@ -39,12 +39,12 @@ BEGIN POPUP "popup" BEGIN MENUITEM "&Installer", ID_INSTALL - MENUITEM "&Désinstaller", ID_UNINSTALL + MENUITEM "&Dsinstaller", ID_UNINSTALL MENUITEM "&Modifier", ID_MODIFY MENUITEM SEPARATOR MENUITEM "&Supprimer du registre", ID_REGREMOVE MENUITEM SEPARATOR - MENUITEM "&Rafraîchir", ID_REFRESH + MENUITEM "&Rafrachir", ID_REFRESH END END @@ -53,18 +53,18 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION "Configuration" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Général", -1, 4, 2, 240, 61 - AUTOCHECKBOX "&Enregistrer la position de la fenêtre", IDC_SAVE_WINDOW_POS, 15, 12, 219, 12 - AUTOCHECKBOX "&Mettre à jour la liste des programmes accessibles au démarage", IDC_UPDATE_AVLIST, 15, 29, 219, 12 + GROUPBOX "Gnral", -1, 4, 2, 240, 61 + AUTOCHECKBOX "&Enregistrer la position de la fentre", IDC_SAVE_WINDOW_POS, 15, 12, 219, 12 + AUTOCHECKBOX "&Mettre jour la liste des programmes accessibles au dmarage", IDC_UPDATE_AVLIST, 15, 29, 219, 12 AUTOCHECKBOX "&Journal de l'installation de la suppression des programmes", IDC_LOG_ENABLED, 15, 46, 219, 12 - GROUPBOX "Téléchargement", -1, 4, 65, 240, 51 - LTEXT "Fichier des téléchargements :", -1, 16, 75, 100, 9 + GROUPBOX "Tlchargement", -1, 4, 65, 240, 51 + LTEXT "Fichier des tlchargements :", -1, 16, 75, 100, 9 EDITTEXT IDC_DOWNLOAD_DIR_EDIT, 15, 86, 166, 12, WS_CHILD | WS_VISIBLE | WS_GROUP - PUSHBUTTON "&Sélectionner", IDC_CHOOSE, 187, 85, 50, 14 - AUTOCHECKBOX "&Supprimer l'installateur du programme après l'installation", IDC_DEL_AFTER_INSTALL, 16, 100, 218, 12 + PUSHBUTTON "&Slectionner", IDC_CHOOSE, 187, 85, 50, 14 + AUTOCHECKBOX "&Supprimer l'installateur du programme aprs l'installation", IDC_DEL_AFTER_INSTALL, 16, 100, 218, 12 - PUSHBUTTON "Par défaut", IDC_DEFAULT_SETTINGS, 8, 124, 60, 14 + PUSHBUTTON "Par dfaut", IDC_DEFAULT_SETTINGS, 8, 124, 60, 14 PUSHBUTTON "Accepter", IDOK, 116, 124, 60, 14 PUSHBUTTON "Annuler", IDCANCEL, 181, 124, 60, 14 END @@ -76,8 +76,8 @@ FONT 8, "MS Shell Dlg" BEGIN LTEXT "...", IDC_INSTALL_TEXT, 4, 5, 209, 35 - AUTORADIOBUTTON "&Installer à partir d'un disque (CD ou DVD)", IDC_CD_INSTALL, 10, 46, 197, 11, WS_GROUP - AUTORADIOBUTTON "&Télécharger et installer", IDC_DOWNLOAD_INSTALL, 10, 59, 197, 11, NOT WS_TABSTOP + AUTORADIOBUTTON "&Installer partir d'un disque (CD ou DVD)", IDC_CD_INSTALL, 10, 46, 197, 11, WS_GROUP + AUTORADIOBUTTON "&Tlcharger et installer", IDC_DOWNLOAD_INSTALL, 10, 59, 197, 11, NOT WS_TABSTOP PUSHBUTTON "Accepter", IDOK, 86, 78, 60, 14 PUSHBUTTON "Annuler", IDCANCEL, 150, 78, 60, 14 @@ -85,7 +85,7 @@ END IDD_DOWNLOAD_DIALOG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 220, 76 STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE -CAPTION "Télécharger..." +CAPTION "Tlcharger..." FONT 8, "MS Shell Dlg" BEGIN CONTROL "Progress1", IDC_DOWNLOAD_PROGRESS, "msctls_progress32", WS_BORDER | PBS_SMOOTH, 10, 10, 200, 12 @@ -95,7 +95,7 @@ END IDD_ABOUT_DIALOG DIALOGEX 22, 16, 190, 66 STYLE DS_SHELLFONT | WS_BORDER | WS_DLGFRAME | WS_SYSMENU | DS_MODALFRAME -CAPTION "À propos" +CAPTION " propos" FONT 8, "MS Shell Dlg" BEGIN LTEXT "ReactOS Applications Manager\nCopyright (C) 2009\npar Dmitry Chapyshev (dmitry@reactos.org)", IDC_STATIC, 48, 7, 130, 39 @@ -106,10 +106,10 @@ END STRINGTABLE DISCARDABLE BEGIN IDS_TOOLTIP_INSTALL "Installer" - IDS_TOOLTIP_UNINSTALL "Désinstaller" + IDS_TOOLTIP_UNINSTALL "Dsinstaller" IDS_TOOLTIP_MODIFY "Modifier" IDS_TOOLTIP_SETTINGS "Configuration" - IDS_TOOLTIP_REFRESH "Rafraîchir" + IDS_TOOLTIP_REFRESH "Rafrachir" IDS_TOOLTIP_EXIT "Sortir" END @@ -126,18 +126,18 @@ BEGIN IDS_INFO_DESCRIPTION "\nDescription : " IDS_INFO_PUBLISHER "\nAuteur : " IDS_INFO_HELPLINK "\nLien d'aide : " - IDS_INFO_HELPPHONE "\nTéléphone d'aide : " + IDS_INFO_HELPPHONE "\nTlphone d'aide : " IDS_INFO_README "\nLisez-moi : " - IDS_INFO_REGOWNER "\nUtilisateur enregistré : " + IDS_INFO_REGOWNER "\nUtilisateur enregistr : " IDS_INFO_PRODUCTID "\nID du produit : " IDS_INFO_CONTACT "\nContact : " - IDS_INFO_UPDATEINFO "\nInformation de mise à jour : " - IDS_INFO_INFOABOUT "\nInformation à propos : " + IDS_INFO_UPDATEINFO "\nInformation de mise jour : " + IDS_INFO_INFOABOUT "\nInformation propos : " IDS_INFO_COMMENTS "\nCommentaires : " IDS_INFO_INSTLOCATION "\Emplacement de l'installation : " IDS_INFO_INSTALLSRC "\nSource de l'installation : " - IDS_INFO_UNINSTALLSTR "\nCommande de désinstallation : " - IDS_INFO_MODIFYPATH "\nModifier le chemin d'accès : " + IDS_INFO_UNINSTALLSTR "\nCommande de dsinstallation : " + IDS_INFO_MODIFYPATH "\nModifier le chemin d'accs : " IDS_INFO_INSTALLDATE "\nDate d'installation : " END @@ -153,20 +153,20 @@ END STRINGTABLE DISCARDABLE BEGIN IDS_CAT_AUDIO "Audio" - IDS_CAT_DEVEL "Développement" + IDS_CAT_DEVEL "Dveloppement" IDS_CAT_DRIVERS "Pilotes" - IDS_CAT_EDU "Éducation" - IDS_CAT_ENGINEER "Ingénierie" + IDS_CAT_EDU "ducation" + IDS_CAT_ENGINEER "Ingnierie" IDS_CAT_FINANCE "Finance" - IDS_CAT_GAMES "Jeux & détente" + IDS_CAT_GAMES "Jeux & dtente" IDS_CAT_GRAPHICS "Graphismes" - IDS_CAT_INTERNET "Internet & résaux" - IDS_CAT_LIBS "Bibliothèques" + IDS_CAT_INTERNET "Internet & rsaux" + IDS_CAT_LIBS "Bibliothques" IDS_CAT_OFFICE "Bureautique" IDS_CAT_OTHER "Autres" IDS_CAT_SCIENCE "Sciences" IDS_CAT_TOOLS "Outils" - IDS_CAT_VIDEO "Vidéo" + IDS_CAT_VIDEO "Vido" END STRINGTABLE DISCARDABLE @@ -174,20 +174,20 @@ BEGIN IDS_APPTITLE "ReactOS Applications Manager" IDS_SEARCH_TEXT "Chercher..." IDS_INSTALL "Installer" - IDS_UNINSTALL "Désinstaller" + IDS_UNINSTALL "Dsinstaller" IDS_MODIFY "Modifier" IDS_APPS_COUNT "Nombre d'applications : %d" - IDS_WELCOME_TITLE "Bienvenue à ReactOS Applications Manager!\n\n" - IDS_WELCOME_TEXT "Choisisez une catégorie à gauche, ensuite choisisez une application à installer ou désinstaller.\nSite internet de ReactOS : " + IDS_WELCOME_TITLE "Bienvenue ReactOS Applications Manager!\n\n" + IDS_WELCOME_TEXT "Choisisez une catgorie gauche, ensuite choisisez une application installer ou dsinstaller.\nSite internet de ReactOS : " IDS_WELCOME_URL "http://www.reactos.org" - IDS_INSTALLED "Installé" + IDS_INSTALLED "Install" IDS_AVAILABLEFORINST "Disponible pour installation" - IDS_UPDATES "Mises à jour" + IDS_UPDATES "Mises jour" IDS_APPLICATIONS "Applications" - IDS_CHOOSE_FOLDER_TEXT "Choisisez un dossier dans lequel seront téléchargés les programmes :" - IDS_CHOOSE_FOLDER_ERROR "Le dossier que vous avez spécifié n'existe pas. Le créer ?" - IDS_USER_NOT_ADMIN "Vous devez être un administrateur pour démarrer ""ReactOS Applications Manager""!" - IDS_APP_REG_REMOVE "Etes-vous sûr de vouloir supprimer les données du programme installé du registre ?" + IDS_CHOOSE_FOLDER_TEXT "Choisisez un dossier dans lequel seront tlchargs les programmes :" + IDS_CHOOSE_FOLDER_ERROR "Le dossier que vous avez spcifi n'existe pas. Le crer ?" + IDS_USER_NOT_ADMIN "Vous devez tre un administrateur pour dmarrer ""ReactOS Applications Manager""!" + IDS_APP_REG_REMOVE "Etes-vous sr de vouloir supprimer les donnes du programme install du registre ?" IDS_INFORMATION "Information" - IDS_UNABLE_TO_REMOVE "Impossible de supprimer les données du programme du registre !" + IDS_UNABLE_TO_REMOVE "Impossible de supprimer les donnes du programme du registre !" END From 4956af0dbcb0f1f32c13818566cad4c3e13a6bb6 Mon Sep 17 00:00:00 2001 From: Colin Finck Date: Sun, 13 Mar 2011 12:44:58 +0000 Subject: [PATCH 277/287] [RAPPS] Fix a bug while testing Rapps under Windows. If you had an application with no registered DisplayName installed, Rapps used to consider every application with no RegName in its database (= currently all Rapps applications) installed. Therefore the list of available applications has always been empty. Now an application is always added to the ListView if no RegName is set for it. svn path=/trunk/; revision=51033 --- reactos/base/applications/rapps/winmain.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/reactos/base/applications/rapps/winmain.c b/reactos/base/applications/rapps/winmain.c index f39b34ab7e8..33e6f6f9e0a 100644 --- a/reactos/base/applications/rapps/winmain.c +++ b/reactos/base/applications/rapps/winmain.c @@ -144,8 +144,11 @@ EnumAvailableAppProc(APPLICATION_INFO Info) PAPPLICATION_INFO ItemInfo; INT Index; - if (!IsInstalledApplication(Info.szRegName, FALSE) && - !IsInstalledApplication(Info.szRegName, TRUE)) + /* Only add a ListView entry if... + - no RegName was supplied (so we cannot determine whether the application is installed or not) or + - a RegName was supplied and the application is not installed + */ + if (!*Info.szRegName || (!IsInstalledApplication(Info.szRegName, FALSE) && !IsInstalledApplication(Info.szRegName, TRUE))) { ItemInfo = HeapAlloc(GetProcessHeap(), 0, sizeof(APPLICATION_INFO)); if (!ItemInfo) return FALSE; From d99032f362d12e65b4a67bf722fc6978d3e3aa58 Mon Sep 17 00:00:00 2001 From: Colin Finck Date: Sun, 13 Mar 2011 12:49:37 +0000 Subject: [PATCH 278/287] [RAPPS] Rafal Harabien (rafalh1992@o2.pl) - Fix links and descriptions in the Rapps database, also update some application versions I took the last patch in the bug report and applied the changes to remood.txt manually (due to mixed encoding within the same file). See issue #5999 for more details. svn path=/trunk/; revision=51034 --- .../applications/rapps/rapps/firefox2.txt | 17 +++++++++-- .../applications/rapps/rapps/firefox3.txt | 22 +++++++------- .../applications/rapps/rapps/firefox36.txt | 30 +++++++++---------- .../applications/rapps/rapps/libreoffice.txt | 6 ++-- .../applications/rapps/rapps/mirandaim.txt | 4 +-- .../base/applications/rapps/rapps/mirc.txt | 4 +-- .../base/applications/rapps/rapps/remood.txt | 10 +++---- .../applications/rapps/rapps/seamonkey.txt | 22 +++++++------- .../applications/rapps/rapps/thunderbird.txt | 14 ++++----- .../applications/rapps/rapps/utorrent.txt | 6 ++-- .../applications/rapps/rapps/winboard.txt | 2 +- 11 files changed, 74 insertions(+), 63 deletions(-) diff --git a/reactos/base/applications/rapps/rapps/firefox2.txt b/reactos/base/applications/rapps/rapps/firefox2.txt index ddb07405697..5f9ccc54791 100644 --- a/reactos/base/applications/rapps/rapps/firefox2.txt +++ b/reactos/base/applications/rapps/rapps/firefox2.txt @@ -8,29 +8,40 @@ Description = The most popular and one of the best free Web Browsers out there. Size = 5.8M Category = 5 URLSite = http://www.mozilla.com/en-US/ -URLDownload = http://svn.reactos.org/packages/Firefox%20Setup%202.0.0.20.exe +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/en-US/Firefox%20Setup%202.0.0.20.exe CDPath = none [Section.0405] Description = Nejpopulárnější a jeden z nejlepších svobodných webových prohlížečů. -Size = 5.5M URLSite = http://www.mozilla-europe.org/cs/ -URLDownload = http://194.71.11.70/pub/www/clients/mozilla.org/firefox/releases/2.0.0.20/win32/cs/Firefox%20Setup%202.0.0.20.exe +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/cs/Firefox%20Setup%202.0.0.20.exe [Section.0407] Description = Der populärste und einer der besten freien Webbrowser. +URLSite = http://www.mozilla-europe.org/de/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/de/Firefox%20Setup%202.0.0.20.exe [Section.040a] Description = El más popular y uno de los mejores navegadores web gratuitos que hay. +URLSite = http://www.mozilla-europe.org/es/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/es-ES/Firefox%20Setup%202.0.0.20.exe [Section.0414] Description = Mest populære og best også gratis nettleserene der ute. +URLSite = http://www.mozilla-europe.org/no/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/nb-NO/Firefox%20Setup%202.0.0.20.exe [Section.0415] Description = Najpopularniejsza i jedna z najlepszych darmowych przeglądarek internetowych. +URLSite = http://www.mozilla-europe.org/pl/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/pl/Firefox%20Setup%202.0.0.20.exe [Section.0419] Description = Один из самых популярных и лучших бесплатных браузеров. +URLSite = http://www.mozilla-europe.org/ru/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/ru/Firefox%20Setup%202.0.0.20.exe [Section.0422] Description = Найпопулярніший та один з кращих безплатних веб-браузерів. +URLSite = http://www.mozilla-europe.org/uk/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/uk/Firefox%20Setup%202.0.0.20.exe diff --git a/reactos/base/applications/rapps/rapps/firefox3.txt b/reactos/base/applications/rapps/rapps/firefox3.txt index 9db19037cf9..f25f6dca509 100644 --- a/reactos/base/applications/rapps/rapps/firefox3.txt +++ b/reactos/base/applications/rapps/rapps/firefox3.txt @@ -8,47 +8,47 @@ Description = The most popular and one of the best free Web Browsers out there. Size = 7.2M Category = 5 URLSite = http://www.mozilla.com/en-US/ -URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.19-real-real/win32/en-US/Firefox%20Setup%203.0.19.exe +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/en-US/Firefox%20Setup%203.0.19.exe CDPath = none [Section.0405] Description = Nejpopulárnější a jeden z nejlepších svobodných webových prohlížečů. Size = 7.0M URLSite = http://www.mozilla-europe.org/cs/ -URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.19-real-real/win32/cs/Firefox%20Setup%203.0.19.exe +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/cs/Firefox%20Setup%203.0.19.exe [Section.0407] Description = Der populärste und einer der besten freien Webbrowser. Size = 7.0M URLSite = http://www.mozilla-europe.org/de/ -URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.19-real-real/win32/de/Firefox%20Setup%203.0.19.exe +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/de/Firefox%20Setup%203.0.19.exe [Section.040a] Description = El más popular y uno de los mejores navegadores web gratuitos que hay. Size = 7.0M URLSite = http://www.mozilla-europe.org/es/ -URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.19-real-real/win32/es-ES/Firefox%20Setup%203.0.19.exe +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/es-ES/Firefox%20Setup%203.0.19.exe [Section.0414] Description = Mest populære og best også gratis nettleserene der ute. Size = 7.0M URLSite = http://www.mozilla-europe.org/no/ -URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.19-real-real/win32/nb-NO/Firefox%20Setup%203.0.19.exe +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/nb-NO/Firefox%20Setup%203.0.19.exe [Section.0415] Description = Najpopularniejsza i jedna z najlepszych darmowych przeglądarek internetowych. -Size = 7.8M +Size = 7.9M URLSite = http://www.mozilla-europe.org/pl/ -URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.19-real-real/win32/pl/Firefox%20Setup%203.0.19.exe +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/pl/Firefox%20Setup%203.0.19.exe [Section.0419] Description = Один из самых популярных и лучших бесплатных браузеров. -Size = 7.4M +Size = 7.8M URLSite = http://www.mozilla-europe.org/ru/ -URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.19-real-real/win32/ru/Firefox%20Setup%203.0.19.exe +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/ru/Firefox%20Setup%203.0.19.exe [Section.0422] Description = Найпопулярніший та один з кращих безплатних веб-браузерів. -Size = 7.3M +Size = 7.4M URLSite = http://www.mozilla-europe.org/uk/ -URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.19-real-real/win32/uk/Firefox%20Setup%203.0.19.exe +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/uk/Firefox%20Setup%203.0.19.exe diff --git a/reactos/base/applications/rapps/rapps/firefox36.txt b/reactos/base/applications/rapps/rapps/firefox36.txt index cb035e8fc21..882987fc0c0 100644 --- a/reactos/base/applications/rapps/rapps/firefox36.txt +++ b/reactos/base/applications/rapps/rapps/firefox36.txt @@ -2,47 +2,47 @@ [Section] Name = Mozilla Firefox 3.6 -Version = 3.6.13 +Version = 3.6.15 Licence = MPL/GPL/LGPL Description = The most popular and one of the best free Web Browsers out there. -Size = 8.1M +Size = 8.2M Category = 5 URLSite = http://www.mozilla.com/en-US/ -URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.13/win32/en-US/Firefox%20Setup%203.6.13.exe +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.6.15/win32/en-US/Firefox%20Setup%203.6.15.exe CDPath = none [Section.0407] Description = Der populärste und einer der besten freien Webbrowser. -Size = 8.0M +Size = 8.1M URLSite = http://www.mozilla-europe.org/de/ -URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.13/win32/de/Firefox%20Setup%203.6.13.exe +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.6.15/win32/de/Firefox%20Setup%203.6.15.exe [Section.040a] Description = El más popular y uno de los mejores navegadores web gratuitos que hay. -Size = 8.0M +Size = 8.1M URLSite = http://www.mozilla-europe.org/es/ -URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.13/win32/es-ES/Firefox%20Setup%203.6.13.exe +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.6.15/win32/es-ES/Firefox%20Setup%203.6.15.exe [Section.0414] Description = Mest populære og best også gratis nettleserene der ute. -Size = 8.0M +Size = 8.1M URLSite = http://www.mozilla-europe.org/no/ -URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.13/win32/nb-NO/Firefox%20Setup%203.6.13.exe +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.6.15/win32/nb-NO/Firefox%20Setup%203.6.15.exe [Section.0415] Description = Najpopularniejsza i jedna z najlepszych darmowych przeglądarek internetowych. -Size = 8.8M +Size = 8.9M URLSite = http://www.mozilla-europe.org/pl/ -URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.13/win32/pl/Firefox%20Setup%203.6.13.exe +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.6.15/win32/pl/Firefox%20Setup%203.6.15.exe [Section.0419] Description = Один из самых популярных и лучших бесплатных браузеров. -Size = 8.4M +Size = 8.5M URLSite = http://www.mozilla-europe.org/ru/ -URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.13/win32/ru/Firefox%20Setup%203.6.13.exe +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.6.15/win32/ru/Firefox%20Setup%203.6.15.exe [Section.0422] Description = Найпопулярніший та один з кращих безплатних веб-браузерів. -Size = 8.4M +Size = 8.5M URLSite = http://www.mozilla-europe.org/uk/ -URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.6.13/win32/uk/Firefox%20Setup%203.6.13.exe +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.6.15/win32/uk/Firefox%20Setup%203.6.15.exe diff --git a/reactos/base/applications/rapps/rapps/libreoffice.txt b/reactos/base/applications/rapps/rapps/libreoffice.txt index d624bf67319..0f5b2c088dd 100644 --- a/reactos/base/applications/rapps/rapps/libreoffice.txt +++ b/reactos/base/applications/rapps/rapps/libreoffice.txt @@ -2,13 +2,13 @@ [Section] Name = LibreOffice -Version = 3.3.0 +Version = 3.3.1 Licence = LGPL Description = Former called OpenOffice. Open Source Office Suite. -Size = 215.0MB +Size = 213.4MB Category = 6 URLSite = http://www.documentfoundation.org/ -URLDownload = http://download.documentfoundation.org/libreoffice/stable/3.3.0/win/x86/LibO_3.3.0_Win_x86_install_multi.exe +URLDownload = http://download.documentfoundation.org/libreoffice/stable/3.3.1/win/x86/LibO_3.3.1_Win_x86_install_multi.exe CDPath = none [Section.0407] diff --git a/reactos/base/applications/rapps/rapps/mirandaim.txt b/reactos/base/applications/rapps/rapps/mirandaim.txt index dc2184fd02a..c872a4b025d 100644 --- a/reactos/base/applications/rapps/rapps/mirandaim.txt +++ b/reactos/base/applications/rapps/rapps/mirandaim.txt @@ -2,13 +2,13 @@ [Section] Name = Miranda IM -Version = 0.9.16 +Version = 0.9.17 Licence = GPL Description = Open source multiprotocol instant messaging application - May not work completely. Size = 3.0MB Category = 5 URLSite = http://www.miranda-im.org/ -URLDownload = http://miranda.googlecode.com/files/miranda-im-v0.9.16-unicode.exe +URLDownload = http://miranda.googlecode.com/files/miranda-im-v0.9.17-unicode.exe CDPath = none [Section.0407] diff --git a/reactos/base/applications/rapps/rapps/mirc.txt b/reactos/base/applications/rapps/rapps/mirc.txt index 754f89ea473..6bb148ca8fe 100644 --- a/reactos/base/applications/rapps/rapps/mirc.txt +++ b/reactos/base/applications/rapps/rapps/mirc.txt @@ -5,10 +5,10 @@ Name = mIRC Version = 7.17 Licence = Shareware Description = The most popular client for the Internet Relay Chat (IRC). -Size = 2.0M +Size = 1.9M Category = 5 URLSite = http://www.mirc.com/ -URLDownload = http://download.mirc.com/mirc717.exe +URLDownload = http://download.mirc.com/mirc719.exe CDPath = none [Section.0407] diff --git a/reactos/base/applications/rapps/rapps/remood.txt b/reactos/base/applications/rapps/rapps/remood.txt index dd58417f4fa..88f4e619431 100644 --- a/reactos/base/applications/rapps/rapps/remood.txt +++ b/reactos/base/applications/rapps/rapps/remood.txt @@ -1,10 +1,10 @@ -; UTF-8 +; UTF-8 [Section] Name = ReMooD Version = 0.8a Licence = GPL -Description = ReMooD is a source port of Doom Legacy. It aims to provide the classic Legacy Experience with new features and more stability. This supports Windows 98/98SE/ME/NT/2000/XP/2003/ Vista/2008/7/XP 64-bit/2003 64-bit/Vista 64-bit/2008 64-bit/7 64-bit; ReactOS 0.3.x and higher; and Linux (x86 and x86_64). +Description = ReMooD is a source port of Doom Legacy. It aims to provide the classic Legacy Experience with new features and more stability. Size = 1.2M Category = 4 URLSite = http://remood.sourceforge.net/ @@ -12,10 +12,10 @@ URLDownload = http://ovh.dl.sourceforge.net/project/remood/ReMooD/0.8a/remoodset CDPath = none [Section.0407] -Description = ReMooD ist ein Port des Doom Legacy Sources. Es versucht das klassische Legacy Erfahrung zusammen mit neuen Features und mehr Stabilitt zu bieten. Untersttzt werden Windows 98/98SE/ME/NT/2000/XP/2003/ Vista/2008/7/XP 64-bit/2003 64-bit/Vista 64-bit/2008 64-bit/7 64-bit; ReactOS 0.3.x und hher; und Linux (x86 und x86_64). +Description = ReMooD ist ein Port des Doom Legacy Sources. Es versucht das klassische Legacy Erfahrung zusammen mit neuen Features und mehr Stabilität zu bieten. [Section.0415] -Description = rdowy port Doom. Jego celem jest zapewnienie rozrywki znanej z klasycznej wersji z nowymi funkcjami, i lepsz stabilnoci. Obsuguje Windows 98/98SE/ME/NT/2000/XP/2003/ Vista/2008/7/XP 64-bit/2003 64-bit/Vista 64-bit/2008 64-bit/7 64-bit; ReactOS 0.3.x i wysze; i Linux (x86 i x86_64). +Description = Źródłowy port Doom. Jego celem jest zapewnienie rozrywki znanej z klasycznej wersji z nowymi funkcjami i lepszą stabilnością. [Section.0422] -Description = ReMooD э Портом вихідних кодів Doom Legacy. Його метою є додати нові можливості та стабільність до досвіду класичного Legacy. Він підтримує Windows 98/98SE/ME/NT/2000/XP/2003/ Vista/2008/7/XP 64-bit/2003 64-bit/Vista 64-bit/2008 64-bit/7 64-bit; ReactOS 0.3.x та новіші; а також Linux (x86 та x86_64). +Description = ReMooD э Портом вихідних кодів Doom Legacy. Його метою є додати нові можливості та стабільність до досвіду класичного Legacy. diff --git a/reactos/base/applications/rapps/rapps/seamonkey.txt b/reactos/base/applications/rapps/rapps/seamonkey.txt index c9543c8c5ea..659769cb55d 100644 --- a/reactos/base/applications/rapps/rapps/seamonkey.txt +++ b/reactos/base/applications/rapps/rapps/seamonkey.txt @@ -2,31 +2,31 @@ [Section] Name = Mozilla SeaMonkey -Version = 2.0.11 +Version = 2.0.12 Licence = MPL/GPL/LGPL Description = Mozilla Suite is alive. This is the one and only Browser, Mail, Chat, and Composer bundle you will ever need. -Size = 10.1MB +Size = 10.2MB Category = 5 URLSite = http://www.seamonkey-project.org/ -URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.11/win32/en-US/SeaMonkey%20Setup%202.0.11.exe +URLDownload = ftp://ftp.mozilla.org/pub/seamonkey/releases/2.0.12/win32/en-US/SeaMonkey%20Setup%202.0.12.exe CDPath = none [Section.0407] Description = Mozilla Suite lebt. Dies ist das einzige Browser-, Mail-, Chat- and Composerwerkzeug-Bundle welches Sie benötigen. -Size = 10.0MB -URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.11/win32/de/SeaMonkey%20Setup%202.0.11.exe +Size = 10.1MB +URLDownload = ftp://ftp.mozilla.org/pub/seamonkey/releases/2.0.12/win32/de/SeaMonkey%20Setup%202.0.12.exe [Section.040a] Description = La suite de Mozilla está viva. Es el primero y único navegador web, gestor de correo, lector de noticias, Chat y editor HTML que necesitarás. -Size = 10.0MB -URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.11/win32/es-ES/SeaMonkey%20Setup%202.0.11.exe +Size = 10.1MB +URLDownload = ftp://ftp.mozilla.org/pub/seamonkey/releases/2.0.12/win32/es-ES/SeaMonkey%20Setup%202.0.12.exe [Section.0415] Description = Pakiet Mozilla żyje. W zestawie: przeglądarka, klient poczty, IRC oraz Edytor HTML - wszystko, czego potrzebujesz. -Size = 10.8MB -URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.11/win32/pl/SeaMonkey%20Setup%202.0.11.exe +Size = 11.0MB +URLDownload = ftp://ftp.mozilla.org/pub/seamonkey/releases/2.0.12/win32/pl/SeaMonkey%20Setup%202.0.12.exe [Section.0419] Description = Продолжение Mozilla Suite. Включает браузер, почтовый клиент, IRC-клиент и HTML-редактор. -Size = 10.4MB -URLDownload = http://releases.mozilla.org/pub/mozilla.org/seamonkey/releases/2.0.11/win32/ru/SeaMonkey%20Setup%202.0.11.exe +Size = 10.5MB +URLDownload = ftp://ftp.mozilla.org/pub/seamonkey/releases/2.0.12/win32/ru/SeaMonkey%20Setup%202.0.12.exe diff --git a/reactos/base/applications/rapps/rapps/thunderbird.txt b/reactos/base/applications/rapps/rapps/thunderbird.txt index 293389025d3..ec20df1a5f1 100644 --- a/reactos/base/applications/rapps/rapps/thunderbird.txt +++ b/reactos/base/applications/rapps/rapps/thunderbird.txt @@ -2,41 +2,41 @@ [Section] Name = Mozilla Thunderbird -Version = 3.1.7 +Version = 3.1.9 Licence = MPL/GPL/LGPL Description = The most popular and one of the best free Mail Clients out there. Size = 9.0M Category = 5 URLSite = http://www.mozilla-europe.org/en/products/thunderbird/ -URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.7/win32/en-US/Thunderbird%20Setup%203.1.7.exe +URLDownload = ftp://ftp.mozilla.org/pub/thunderbird/releases/3.1.9/win32/en-US/Thunderbird%20Setup%203.1.9.exe CDPath = none [Section.0407] Description = Der populärste und einer der besten freien Mail-Clients. Size = 8.8M URLSite = http://www.mozilla-europe.org/de/products/thunderbird/ -URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.7/win32/de/Thunderbird%20Setup%203.1.7.exe +URLDownload = ftp://ftp.mozilla.org/pub/thunderbird/releases/3.1.9/win32/de/Thunderbird%20Setup%203.1.9.exe [Section.040a] Description = El más popular y uno de los mejores clientes mail que hay. Size = 8.8M URLSite = http://www.mozilla-europe.org/es/products/thunderbird/ -URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.7/win32/es-ES/Thunderbird%20Setup%203.1.7.exe +URLDownload = ftp://ftp.mozilla.org/pub/thunderbird/releases/3.1.9/win32/es-ES/Thunderbird%20Setup%203.1.9.exe [Section.0415] Description = Najpopularniejszy i jeden z najlepszych darmowych klientów poczty. Size = 9.7M URLSite = http://www.mozilla-europe.org/pl/products/thunderbird/ -URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.7/win32/pl/Thunderbird%20Setup%203.1.7.exe +URLDownload = ftp://ftp.mozilla.org/pub/thunderbird/releases/3.1.9/win32/pl/Thunderbird%20Setup%203.1.9.exe [Section.0419] Description = Один из самых популярных и лучших бесплатных почтовых клиентов. Size = 9.2M URLSite = http://www.mozilla-europe.org/ru/products/thunderbird/ -URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.7/win32/ru/Thunderbird%20Setup%203.1.7.exe +URLDownload = ftp://ftp.mozilla.org/pub/thunderbird/releases/3.1.9/win32/ru/Thunderbird%20Setup%203.1.9.exe [Section.0422] Description = Найпопулярніший та один з кращих поштових клієнтів. Size = 9.2M URLSite = http://www.mozillamessaging.com/uk/thunderbird/ -URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.1.7/win32/uk/Thunderbird%20Setup%203.1.7.exe +URLDownload = ftp://ftp.mozilla.org/pub/thunderbird/releases/3.1.9/win32/uk/Thunderbird%20Setup%203.1.9.exe diff --git a/reactos/base/applications/rapps/rapps/utorrent.txt b/reactos/base/applications/rapps/rapps/utorrent.txt index 86fa5ae6884..82257fc4151 100644 --- a/reactos/base/applications/rapps/rapps/utorrent.txt +++ b/reactos/base/applications/rapps/rapps/utorrent.txt @@ -2,13 +2,13 @@ [Section] Name = µTorrent -Version = 2.2 +Version = 2.2.1 Licence = Freeware for non-commercial uses Description = Small and fast BitTorrent Client. -Size = 385K +Size = 390K Category = 5 URLSite = http://www.utorrent.com/ -URLDownload = http://download.utorrent.com/2.2/utorrent.exe +URLDownload = http://download.utorrent.com/2.2.1/utorrent.exe CDPath = none diff --git a/reactos/base/applications/rapps/rapps/winboard.txt b/reactos/base/applications/rapps/rapps/winboard.txt index b5486a23c40..06a19e6caf6 100644 --- a/reactos/base/applications/rapps/rapps/winboard.txt +++ b/reactos/base/applications/rapps/rapps/winboard.txt @@ -18,7 +18,7 @@ Description = WinBoard ist ein grafisches Schachbrett für Windows/ReactOS welch Description = Tablero de ajedrez para Windows/ReactOS que puede ser utilizado como interfaz para GNU Chess, Crafty, y otros motores de ajedrez, para servidores de ajedrez en internet, y para partidas por correo electrónico. [Section.0415] -Description = Graficzna szachownica dla systemu Windows/ReactOS, która może służyć jako graficzna nakładka dla GNU Chess, Crafty, lub innych programów szachowych(w tym internetowych serwerów szachowych) lub szachów korespondencyjnych. +Description = Graficzna szachownica dla systemu Windows/ReactOS, która może służyć jako graficzna nakładka dla GNU Chess, Crafty, lub innych programów szachowych (w tym internetowych serwerów szachowych) lub szachów korespondencyjnych. [Section.0422] Description = Графічна шахматна дошка для Windows/ReactOS, що може слугувати графічним інтерфейсом для GNU Chess, Crafty, та інших шахматних двигунів, для серверів інтернет-шахмат та для шахматної переписки по е-мейл. From 338d63e19c69a742f554b566315636c788da827d Mon Sep 17 00:00:00 2001 From: Roel Messiant Date: Sun, 13 Mar 2011 17:59:02 +0000 Subject: [PATCH 279/287] [BASE] - Change () to (VOID) in function declarators. Part 3/XX. svn path=/trunk/; revision=51039 --- reactos/base/services/audiosrv/audiosrv.h | 10 +++++----- reactos/base/services/tcpsvcs/tcpsvcs.h | 4 ++-- reactos/base/services/tftpd/tftpd.h | 6 +++--- reactos/base/setup/usetup/cabinet.h | 14 +++++++------- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/reactos/base/services/audiosrv/audiosrv.h b/reactos/base/services/audiosrv/audiosrv.h index b4d02a744db..1fce5ce0841 100644 --- a/reactos/base/services/audiosrv/audiosrv.h +++ b/reactos/base/services/audiosrv/audiosrv.h @@ -29,22 +29,22 @@ BOOL CreateAudioDeviceList(DWORD max_size); VOID -DestroyAudioDeviceList(); +DestroyAudioDeviceList(VOID); /* Plug and Play (pnp.c) */ BOOL -ProcessExistingDevices(); +ProcessExistingDevices(VOID); DWORD ProcessDeviceArrival(DEV_BROADCAST_DEVICEINTERFACE* device); BOOL -RegisterForDeviceNotifications(); +RegisterForDeviceNotifications(VOID); VOID -UnregisterDeviceNotifications(); +UnregisterDeviceNotifications(VOID); DWORD HandleDeviceEvent( @@ -52,7 +52,7 @@ HandleDeviceEvent( LPVOID lpEventData); BOOL -StartSystemAudioServices(); +StartSystemAudioServices(VOID); /* Debugging */ diff --git a/reactos/base/services/tcpsvcs/tcpsvcs.h b/reactos/base/services/tcpsvcs/tcpsvcs.h index e1d3c987ab3..b2e8d90e03a 100644 --- a/reactos/base/services/tcpsvcs/tcpsvcs.h +++ b/reactos/base/services/tcpsvcs/tcpsvcs.h @@ -35,8 +35,8 @@ extern volatile BOOL bShutdown; extern volatile BOOL bPause; /* logging functions */ -BOOL InitLogging(); -VOID UninitLogging(); +BOOL InitLogging(VOID); +VOID UninitLogging(VOID); VOID LogEvent(LPCWSTR lpMsg, DWORD errNum, DWORD exitCode, UINT flags); /* skelserver functions */ diff --git a/reactos/base/services/tftpd/tftpd.h b/reactos/base/services/tftpd/tftpd.h index bdbcf942d15..54bf5dfe160 100644 --- a/reactos/base/services/tftpd/tftpd.h +++ b/reactos/base/services/tftpd/tftpd.h @@ -146,16 +146,16 @@ struct data15 }; //Functions -void runProg(); +void runProg(void); void processRequest(LPVOID lpParam); char* myGetToken(char*, BYTE); -void init(); +void init(void); bool cleanReq(request*); bool getSection(const char*, char*, BYTE, char*); bool isIP(char*s); char* myLower(char*); char* myUpper(char*); char* IP2String(char*, DWORD); -void printWindowsError(); +void printWindowsError(void); void logMess(request*, BYTE); void logMess(char*, BYTE); diff --git a/reactos/base/setup/usetup/cabinet.h b/reactos/base/setup/usetup/cabinet.h index 711a07f6ac2..70fa34cc49f 100644 --- a/reactos/base/setup/usetup/cabinet.h +++ b/reactos/base/setup/usetup/cabinet.h @@ -166,9 +166,9 @@ typedef VOID (*PCABINET_DISK_CHANGE)(PWCHAR CabinetName, /* Classes */ /* Default constructor */ -VOID CabinetInitialize(); +VOID CabinetInitialize(VOID); /* Default destructor */ -VOID CabinetCleanup(); +VOID CabinetCleanup(VOID); /* Returns a pointer to the filename part of a fully qualified filename */ PWCHAR CabinetGetFileName(PWCHAR Path); /* Removes a filename from a fully qualified filename */ @@ -176,19 +176,19 @@ VOID CabinetRemoveFileName(PWCHAR Path); /* Normalizes a path */ BOOL CabinetNormalizePath(PWCHAR Path, ULONG Length); /* Returns name of cabinet file */ -PWCHAR CabinetGetCabinetName(); +PWCHAR CabinetGetCabinetName(VOID); /* Sets the name of the cabinet file */ VOID CabinetSetCabinetName(PWCHAR FileName); /* Sets destination path for extracted files */ VOID CabinetSetDestinationPath(PWCHAR DestinationPath); /* Returns destination path */ -PWCHAR CabinetGetDestinationPath(); +PWCHAR CabinetGetDestinationPath(VOID); /* Returns zero-based current disk number */ -ULONG CabinetGetCurrentDiskNumber(); +ULONG CabinetGetCurrentDiskNumber(VOID); /* Opens the current cabinet file */ -ULONG CabinetOpen(); +ULONG CabinetOpen(VOID); /* Closes the current open cabinet file */ -VOID CabinetClose(); +VOID CabinetClose(VOID); /* Locates the first file in the current cabinet file that matches a search criteria */ ULONG CabinetFindFirst(PWCHAR FileName, PCAB_SEARCH Search); /* Locates the next file in the current cabinet file */ From 9009dd37ad0d9073ef50de2f6cbfd957923a426b Mon Sep 17 00:00:00 2001 From: Roel Messiant Date: Sun, 13 Mar 2011 20:56:27 +0000 Subject: [PATCH 280/287] [DLL] - Change () to (VOID) in function declarators. Part 4/XX. svn path=/trunk/; revision=51041 --- reactos/base/shell/cmd/batch.h | 4 ++-- reactos/dll/cpl/input/input.h | 2 +- reactos/dll/directx/ddraw/rosdraw.h | 4 ++-- reactos/dll/win32/dhcpcsvc/include/rosdhcp.h | 12 ++++++------ reactos/dll/win32/iphlpapi/resinfo.h | 2 +- reactos/dll/win32/lpk/ros_lpk.h | 2 +- reactos/dll/win32/netshell/precomp.h | 2 +- reactos/dll/win32/sfc/precomp.h | 4 ++-- reactos/dll/win32/user32/include/user32p.h | 2 +- reactos/dll/win32/wdmaud.drv/wdmaud.h | 16 ++++++++-------- reactos/dll/win32/ws2_32_new/inc/ws2_32p.h | 4 ++-- 11 files changed, 27 insertions(+), 27 deletions(-) diff --git a/reactos/base/shell/cmd/batch.h b/reactos/base/shell/cmd/batch.h index 841b09b814f..644fc35f6fb 100644 --- a/reactos/base/shell/cmd/batch.h +++ b/reactos/base/shell/cmd/batch.h @@ -45,7 +45,7 @@ extern TCHAR textline[BATCH_BUFFSIZE]; /* Buffer for reading Batch file lines */ LPTSTR FindArg (TCHAR, BOOL *); LPTSTR BatchParams (LPTSTR, LPTSTR); -VOID ExitBatch (); +VOID ExitBatch (VOID); INT Batch (LPTSTR, LPTSTR, LPTSTR, PARSED_COMMAND *); -LPTSTR ReadBatchLine(); +LPTSTR ReadBatchLine(VOID); VOID AddBatchRedirection(REDIRECTION **); diff --git a/reactos/dll/cpl/input/input.h b/reactos/dll/cpl/input/input.h index edfe121878f..dcf0ac7d5e5 100644 --- a/reactos/dll/cpl/input/input.h +++ b/reactos/dll/cpl/input/input.h @@ -47,7 +47,7 @@ IsLayoutExists(LPTSTR szLayoutID, LPTSTR szLangID); INT_PTR CALLBACK KeySettingsDlgProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam); VOID -UpdateKeySettingsList(); +UpdateKeySettingsList(VOID); /* add.c */ INT_PTR CALLBACK diff --git a/reactos/dll/directx/ddraw/rosdraw.h b/reactos/dll/directx/ddraw/rosdraw.h index 9b50c1c7eda..0f8af8dad72 100644 --- a/reactos/dll/directx/ddraw/rosdraw.h +++ b/reactos/dll/directx/ddraw/rosdraw.h @@ -125,8 +125,8 @@ VOID Cleanup(LPDDRAWI_DIRECTDRAW_INT iface); /******** Main Object ********/ /* Public interface */ -VOID WINAPI AcquireDDThreadLock(); -VOID WINAPI ReleaseDDThreadLock(); +VOID WINAPI AcquireDDThreadLock(VOID); +VOID WINAPI ReleaseDDThreadLock(VOID); ULONG WINAPI DirectDrawClipper_AddRef (LPDIRECTDRAWCLIPPER iface); HRESULT WINAPI DirectDrawClipper_Initialize( LPDIRECTDRAWCLIPPER iface, LPDIRECTDRAW lpDD, DWORD dwFlags); diff --git a/reactos/dll/win32/dhcpcsvc/include/rosdhcp.h b/reactos/dll/win32/dhcpcsvc/include/rosdhcp.h index 09539de42bc..8265de33d0a 100644 --- a/reactos/dll/win32/dhcpcsvc/include/rosdhcp.h +++ b/reactos/dll/win32/dhcpcsvc/include/rosdhcp.h @@ -79,16 +79,16 @@ typedef DWORD (*PipeSendFunc)( COMM_DHCP_REPLY *Reply ); void AdapterInit(VOID); HANDLE StartAdapterDiscovery(VOID); void AdapterStop(VOID); -extern PDHCP_ADAPTER AdapterGetFirst(); +extern PDHCP_ADAPTER AdapterGetFirst(VOID); extern PDHCP_ADAPTER AdapterGetNext(PDHCP_ADAPTER); extern PDHCP_ADAPTER AdapterFindIndex( unsigned int AdapterIndex ); extern PDHCP_ADAPTER AdapterFindInfo( struct interface_info *info ); extern PDHCP_ADAPTER AdapterFindByHardwareAddress( u_int8_t haddr[16], u_int8_t hlen ); -extern HANDLE PipeInit(); -extern VOID ApiInit(); -extern VOID ApiFree(); -extern VOID ApiLock(); -extern VOID ApiUnlock(); +extern HANDLE PipeInit(VOID); +extern VOID ApiInit(VOID); +extern VOID ApiFree(VOID); +extern VOID ApiLock(VOID); +extern VOID ApiUnlock(VOID); extern DWORD DSQueryHWInfo( PipeSendFunc Send, COMM_DHCP_REQ *Req ); extern DWORD DSLeaseIpAddress( PipeSendFunc Send, COMM_DHCP_REQ *Req ); extern DWORD DSRenewIpAddressLease( PipeSendFunc Send, COMM_DHCP_REQ *Req ); diff --git a/reactos/dll/win32/iphlpapi/resinfo.h b/reactos/dll/win32/iphlpapi/resinfo.h index f735288c21e..1aaa352ceed 100644 --- a/reactos/dll/win32/iphlpapi/resinfo.h +++ b/reactos/dll/win32/iphlpapi/resinfo.h @@ -28,7 +28,7 @@ typedef struct _IPHLP_RES_INFO { /* Get resolver info. This currently is limited to a list of IP addresses * that name our DNS server list. */ -PIPHLP_RES_INFO getResInfo(); +PIPHLP_RES_INFO getResInfo(VOID); /* Release any resources used in acquiring the resolver information */ VOID disposeResInfo( PIPHLP_RES_INFO InfoPtr ); diff --git a/reactos/dll/win32/lpk/ros_lpk.h b/reactos/dll/win32/lpk/ros_lpk.h index ef45aaf22a8..06eeb0d24da 100644 --- a/reactos/dll/win32/lpk/ros_lpk.h +++ b/reactos/dll/win32/lpk/ros_lpk.h @@ -12,7 +12,7 @@ #include /* FIXME USP10 api that does not have prototype in any include file */ -VOID WINAPI LpkPresent(); +VOID WINAPI LpkPresent(VOID); /* FIXME move _LPK_LPEDITCONTROL_LIST to global place so user32 can access it */ typedef struct _LPK_LPEDITCONTROL_LIST diff --git a/reactos/dll/win32/netshell/precomp.h b/reactos/dll/win32/netshell/precomp.h index fa75e02d7c7..73a1d58ed30 100644 --- a/reactos/dll/win32/netshell/precomp.h +++ b/reactos/dll/win32/netshell/precomp.h @@ -85,7 +85,7 @@ HRESULT WINAPI ISF_NetConnect_Constructor (IUnknown * pUnkOuter, REFIID riid, LP /* enumlist.c */ IEnumIDList * IEnumIDList_Constructor(void); -LPITEMIDLIST _ILCreateNetConnect(); +LPITEMIDLIST _ILCreateNetConnect(void); LPITEMIDLIST ILCreateNetConnectItem(INetConnection * pItem); BOOL _ILIsNetConnect (LPCITEMIDLIST pidl); BOOL AddToEnumList(IEnumIDList * iface, LPITEMIDLIST pidl); diff --git a/reactos/dll/win32/sfc/precomp.h b/reactos/dll/win32/sfc/precomp.h index 2801b0ffdbd..c8b836cf4b0 100644 --- a/reactos/dll/win32/sfc/precomp.h +++ b/reactos/dll/win32/sfc/precomp.h @@ -5,8 +5,8 @@ #include #include -DWORD WINAPI sfc_8(); -DWORD WINAPI sfc_9(); +DWORD WINAPI sfc_8(VOID); +DWORD WINAPI sfc_9(VOID); typedef BOOL (WINAPI *PSRSRPA)(PRESTOREPOINTINFOA, PSTATEMGRSTATUS); typedef BOOL (WINAPI *PSRSRPW)(PRESTOREPOINTINFOW, PSTATEMGRSTATUS); diff --git a/reactos/dll/win32/user32/include/user32p.h b/reactos/dll/win32/user32/include/user32p.h index 9dd8ae2860e..d4b32cb0abe 100644 --- a/reactos/dll/win32/user32/include/user32p.h +++ b/reactos/dll/win32/user32/include/user32p.h @@ -123,7 +123,7 @@ typedef struct _USER32_THREAD_DATA USER32_TRACKINGLIST tracking_info; /* TrackMouseEvent stuff */ } USER32_THREAD_DATA, *PUSER32_THREAD_DATA; -PUSER32_THREAD_DATA User32GetThreadData(); +PUSER32_THREAD_DATA User32GetThreadData(VOID); /* FIXME: Belongs to some header. */ BOOL WINAPI GdiDllInitialize(HANDLE, DWORD, LPVOID); diff --git a/reactos/dll/win32/wdmaud.drv/wdmaud.h b/reactos/dll/win32/wdmaud.drv/wdmaud.h index 87936508798..ab3093b6251 100644 --- a/reactos/dll/win32/wdmaud.drv/wdmaud.h +++ b/reactos/dll/win32/wdmaud.drv/wdmaud.h @@ -15,19 +15,19 @@ #include BOOL -WdmAudInitUserModeMixer(); +WdmAudInitUserModeMixer(VOID); ULONG -WdmAudGetWaveOutCount(); +WdmAudGetWaveOutCount(VOID); ULONG -WdmAudGetWaveInCount(); +WdmAudGetWaveInCount(VOID); ULONG -WdmAudGetMixerCount(); +WdmAudGetMixerCount(VOID); MMRESULT -WdmAudOpenSoundDeviceByLegacy(); +WdmAudOpenSoundDeviceByLegacy(VOID); MMRESULT WdmAudGetNumWdmDevsByMMixer( @@ -150,12 +150,12 @@ WdmAudCommitWaveBufferByMMixer( IN LPOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine); MMRESULT -WdmAudCleanupByMMixer(); +WdmAudCleanupByMMixer(VOID); /* legacy.c */ MMRESULT -WdmAudCleanupByLegacy(); +WdmAudCleanupByLegacy(VOID); MMRESULT WdmAudGetCapabilitiesByLegacy( @@ -165,7 +165,7 @@ WdmAudGetCapabilitiesByLegacy( IN DWORD CapabilitiesSize); MMRESULT -WdmAudOpenSoundDeviceByLegacy(); +WdmAudOpenSoundDeviceByLegacy(VOID); MMRESULT WdmAudCloseSoundDeviceByLegacy( diff --git a/reactos/dll/win32/ws2_32_new/inc/ws2_32p.h b/reactos/dll/win32/ws2_32_new/inc/ws2_32p.h index c3eb837b03b..c8d256ba351 100644 --- a/reactos/dll/win32/ws2_32_new/inc/ws2_32p.h +++ b/reactos/dll/win32/ws2_32_new/inc/ws2_32p.h @@ -858,14 +858,14 @@ WsAsyncGlobalInitialize(VOID); FORCEINLINE PWSPROCESS -WsGetProcess() +WsGetProcess(VOID) { return CurrentWsProcess; } FORCEINLINE DWORD -WsQuickProlog() +WsQuickProlog(VOID) { /* Try to see if we're initialized. If not, do the full prolog */ return WsGetProcess() ? ERROR_SUCCESS : WsSlowProlog(); From b16c59e50eeb46c603eef37ebc3ae8b01f5ca76a Mon Sep 17 00:00:00 2001 From: Roel Messiant Date: Sun, 13 Mar 2011 21:28:51 +0000 Subject: [PATCH 281/287] [WDMAUD.DRV] - Correct function declaration of WdmAudOpenSoundDeviceByLegacy and remove a duplicate (wut..). Should fix build. svn path=/trunk/; revision=51042 --- reactos/dll/win32/wdmaud.drv/legacy.c | 4 +++- reactos/dll/win32/wdmaud.drv/wdmaud.h | 8 ++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/reactos/dll/win32/wdmaud.drv/legacy.c b/reactos/dll/win32/wdmaud.drv/legacy.c index 55189178572..90a00b4f8dc 100644 --- a/reactos/dll/win32/wdmaud.drv/legacy.c +++ b/reactos/dll/win32/wdmaud.drv/legacy.c @@ -250,7 +250,9 @@ WdmAudGetCapabilitiesByLegacy( } MMRESULT -WdmAudOpenSoundDeviceByLegacy() +WdmAudOpenSoundDeviceByLegacy( + IN PSOUND_DEVICE SoundDevice, + OUT PVOID *Handle) { /* Only open this if it's not already open */ if ( KernelHandle == INVALID_HANDLE_VALUE ) diff --git a/reactos/dll/win32/wdmaud.drv/wdmaud.h b/reactos/dll/win32/wdmaud.drv/wdmaud.h index ab3093b6251..1374cea1a98 100644 --- a/reactos/dll/win32/wdmaud.drv/wdmaud.h +++ b/reactos/dll/win32/wdmaud.drv/wdmaud.h @@ -26,9 +26,6 @@ WdmAudGetWaveInCount(VOID); ULONG WdmAudGetMixerCount(VOID); -MMRESULT -WdmAudOpenSoundDeviceByLegacy(VOID); - MMRESULT WdmAudGetNumWdmDevsByMMixer( IN MMDEVICE_TYPE DeviceType, @@ -165,7 +162,10 @@ WdmAudGetCapabilitiesByLegacy( IN DWORD CapabilitiesSize); MMRESULT -WdmAudOpenSoundDeviceByLegacy(VOID); +WdmAudOpenSoundDeviceByLegacy( + IN PSOUND_DEVICE SoundDevice, + OUT PVOID *Handle +); MMRESULT WdmAudCloseSoundDeviceByLegacy( From 4bcca728f3ffa2d810f420fa13c4cd59cf0dd221 Mon Sep 17 00:00:00 2001 From: Colin Finck Date: Sun, 13 Mar 2011 21:55:49 +0000 Subject: [PATCH 282/287] Michael Martin - Fix "EnableUserModePnpManager() failed!" in second stage setup. Tested by Eric Kohl and igorko. See issue #5989 for more details. svn path=/trunk/; revision=51043 --- reactos/dll/win32/kernel32/file/npipe.c | 10 +-- reactos/dll/win32/rpcrt4/rpc_transport.c | 19 +++-- reactos/dll/win32/syssetup/install.c | 1 + reactos/drivers/filesystems/npfs/fsctrl.c | 98 ++++++++++++++++++++++- 4 files changed, 116 insertions(+), 12 deletions(-) diff --git a/reactos/dll/win32/kernel32/file/npipe.c b/reactos/dll/win32/kernel32/file/npipe.c index c0147730bc8..8915fb18052 100644 --- a/reactos/dll/win32/kernel32/file/npipe.c +++ b/reactos/dll/win32/kernel32/file/npipe.c @@ -501,19 +501,19 @@ WaitNamedPipeW(LPCWSTR lpNamedPipeName, } /* Check what timeout we got */ - if (nTimeOut == NMPWAIT_USE_DEFAULT_WAIT) + if (nTimeOut == NMPWAIT_WAIT_FOREVER) { /* Don't use a timeout */ WaitPipe.TimeoutSpecified = FALSE; } else { - /* Check if we should wait forever */ - if (nTimeOut == NMPWAIT_WAIT_FOREVER) + /* Check if default */ + if (nTimeOut == NMPWAIT_USE_DEFAULT_WAIT) { - /* Set the max */ + /* Set it to 0 */ WaitPipe.Timeout.LowPart = 0; - WaitPipe.Timeout.HighPart = 0x80000000; + WaitPipe.Timeout.HighPart = 0; } else { diff --git a/reactos/dll/win32/rpcrt4/rpc_transport.c b/reactos/dll/win32/rpcrt4/rpc_transport.c index 630c5bbecf4..92588bad087 100644 --- a/reactos/dll/win32/rpcrt4/rpc_transport.c +++ b/reactos/dll/win32/rpcrt4/rpc_transport.c @@ -219,13 +219,20 @@ static RPC_STATUS rpcrt4_conn_open_pipe(RpcConnection *Connection, LPCSTR pname, if (pipe != INVALID_HANDLE_VALUE) break; err = GetLastError(); if (err == ERROR_PIPE_BUSY) { - TRACE("connection failed, error=%x\n", err); + ERR("connection to %s failed, error=%x\n", pname, err); return RPC_S_SERVER_TOO_BUSY; } - if (!wait || !WaitNamedPipeA(pname, NMPWAIT_WAIT_FOREVER)) { - err = GetLastError(); - WARN("connection failed, error=%x\n", err); - return RPC_S_SERVER_UNAVAILABLE; + if (wait) ERR("Waiting for Pipe Instance\n"); + if (wait) { + if (!WaitNamedPipeA(pname, NMPWAIT_WAIT_FOREVER)) { + err = GetLastError(); + ERR("connection to %s failed, error=%x, wait %x\n", pname, err, wait); + return RPC_S_SERVER_UNAVAILABLE; + } + else + { + ERR("Pipe Instance Ready!!!!!!!!!!!!!!!!!!\n"); + } } } @@ -314,7 +321,7 @@ static RPC_STATUS rpcrt4_ncacn_np_open(RpcConnection* Connection) /* protseq=ncacn_np: named pipes */ pname = I_RpcAllocate(strlen(prefix) + strlen(Connection->Endpoint) + 1); strcat(strcpy(pname, prefix), Connection->Endpoint); - r = rpcrt4_conn_open_pipe(Connection, pname, FALSE); + r = rpcrt4_conn_open_pipe(Connection, pname, TRUE); I_RpcFree(pname); return r; diff --git a/reactos/dll/win32/syssetup/install.c b/reactos/dll/win32/syssetup/install.c index 66f981be038..59b32470bc4 100644 --- a/reactos/dll/win32/syssetup/install.c +++ b/reactos/dll/win32/syssetup/install.c @@ -481,6 +481,7 @@ EnableUserModePnpManager(VOID) if (hSCManager == NULL) { DPRINT1("Unable to open the service control manager.\n"); + DPRINT1("Last Error %d\n", GetLastError()); goto cleanup; } diff --git a/reactos/drivers/filesystems/npfs/fsctrl.c b/reactos/drivers/filesystems/npfs/fsctrl.c index decae593b86..e7085af0610 100644 --- a/reactos/drivers/filesystems/npfs/fsctrl.c +++ b/reactos/drivers/filesystems/npfs/fsctrl.c @@ -317,10 +317,106 @@ NpfsDisconnectPipe(PNPFS_CCB Ccb) return Status; } - static NTSTATUS NpfsWaitPipe(PIRP Irp, PNPFS_CCB Ccb) +{ + PLIST_ENTRY current_entry; + PNPFS_FCB Fcb; + PNPFS_CCB ServerCcb; + PFILE_PIPE_WAIT_FOR_BUFFER WaitPipe; + PLARGE_INTEGER TimeOut; + NTSTATUS Status; + PEXTENDED_IO_STACK_LOCATION IoStack; + PFILE_OBJECT FileObject; + PNPFS_VCB Vcb; + + IoStack = (PEXTENDED_IO_STACK_LOCATION)IoGetCurrentIrpStackLocation(Irp); + ASSERT(IoStack); + FileObject = IoStack->FileObject; + ASSERT(FileObject); + + DPRINT1("Waiting on Pipe %wZ\n", &FileObject->FileName); + + WaitPipe = (PFILE_PIPE_WAIT_FOR_BUFFER)Irp->AssociatedIrp.SystemBuffer; + + ASSERT(Ccb->Fcb); + ASSERT(Ccb->Fcb->Vcb); + + /* Get the VCB */ + Vcb = Ccb->Fcb->Vcb; + + /* Lock the pipe list */ + KeLockMutex(&Vcb->PipeListLock); + + /* File a pipe with the given name */ + Fcb = NpfsFindPipe(Vcb, + &FileObject->FileName); + + /* Unlock the pipe list */ + KeUnlockMutex(&Vcb->PipeListLock); + + /* Fail if not pipe was found */ + if (Fcb == NULL) + { + DPRINT1("No pipe found!\n", Fcb); + return STATUS_OBJECT_NAME_NOT_FOUND; + } + + /* search for listening server */ + current_entry = Fcb->ServerCcbListHead.Flink; + while (current_entry != &Fcb->ServerCcbListHead) + { + ServerCcb = CONTAINING_RECORD(current_entry, + NPFS_CCB, + CcbListEntry); + + if (ServerCcb->PipeState == FILE_PIPE_LISTENING_STATE) + { + /* found a listening server CCB */ + DPRINT("Listening server CCB found -- connecting\n"); + + return STATUS_SUCCESS; + } + + current_entry = current_entry->Flink; + } + + /* No listening server fcb found, so wait for one */ + + /* If a timeout specified */ + if (WaitPipe->TimeoutSpecified) + { + /* NMPWAIT_USE_DEFAULT_WAIT = 0 */ + if (WaitPipe->Timeout.QuadPart == 0) + { + TimeOut = &Fcb->TimeOut; + } + else + { + TimeOut = &WaitPipe->Timeout; + } + } + else + { + /* Wait forever */ + TimeOut = NULL; + } + + Status = KeWaitForSingleObject(&Ccb->ConnectEvent, + UserRequest, + KernelMode, + TRUE, + TimeOut); + + DPRINT("KeWaitForSingleObject() returned (Status %lx)\n", Status); + + return Status; +} + +NTSTATUS +NpfsWaitPipe2(PIRP Irp, + PNPFS_CCB Ccb) { PLIST_ENTRY current_entry; PNPFS_FCB Fcb; From 58e86efe046f0134aa04cdcab9ecf4f621c4e9a8 Mon Sep 17 00:00:00 2001 From: Colin Finck Date: Sun, 13 Mar 2011 22:00:28 +0000 Subject: [PATCH 283/287] [RAPPS] Adam Stachowicz (saibamenppl@gmail.com) - Fix mIRC version number in Rapps See issue #5999 for more details. svn path=/trunk/; revision=51044 --- reactos/base/applications/rapps/rapps/mirc.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/base/applications/rapps/rapps/mirc.txt b/reactos/base/applications/rapps/rapps/mirc.txt index 6bb148ca8fe..d07b7c05d76 100644 --- a/reactos/base/applications/rapps/rapps/mirc.txt +++ b/reactos/base/applications/rapps/rapps/mirc.txt @@ -2,7 +2,7 @@ [Section] Name = mIRC -Version = 7.17 +Version = 7.19 Licence = Shareware Description = The most popular client for the Internet Relay Chat (IRC). Size = 1.9M From 95dbb35059d816417a9825f69dae8f00de59b42e Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Mon, 14 Mar 2011 08:40:09 +0000 Subject: [PATCH 284/287] [RAPPS] Added French translation for all the available applications. Only strings that other translators have translated are translated here. Regarding OOo 2.4, as 2.4.3 version isn't available in French (wut?!), it has been set to 2.4.2. If anything wrong, let me know. svn path=/trunk/; revision=51046 --- reactos/base/applications/rapps/rapps/7zip.txt | 3 +++ reactos/base/applications/rapps/rapps/abiword.txt | 3 +++ reactos/base/applications/rapps/rapps/abiword28x.txt | 3 +++ reactos/base/applications/rapps/rapps/abyss.txt | 3 +++ .../base/applications/rapps/rapps/ac97forvirtualbox.txt | 6 ++++++ reactos/base/applications/rapps/rapps/audiograbber.txt | 3 +++ reactos/base/applications/rapps/rapps/comctl32ocx.txt | 4 ++++ reactos/base/applications/rapps/rapps/diablo2.txt | 3 +++ reactos/base/applications/rapps/rapps/dosblaster.txt | 3 +++ reactos/base/applications/rapps/rapps/dosbox.txt | 3 +++ reactos/base/applications/rapps/rapps/fap.txt | 3 +++ reactos/base/applications/rapps/rapps/firefox2.txt | 5 +++++ reactos/base/applications/rapps/rapps/firefox3.txt | 5 +++++ reactos/base/applications/rapps/rapps/firefox36.txt | 6 ++++++ reactos/base/applications/rapps/rapps/freebasic.txt | 3 +++ reactos/base/applications/rapps/rapps/glidewrapzbag.txt | 3 +++ reactos/base/applications/rapps/rapps/go-oo.txt | 3 +++ reactos/base/applications/rapps/rapps/irfanview.txt | 4 ++++ reactos/base/applications/rapps/rapps/irfanviewplugins.txt | 4 ++++ reactos/base/applications/rapps/rapps/kdewin.txt | 3 +++ reactos/base/applications/rapps/rapps/lbreakout2.txt | 3 +++ reactos/base/applications/rapps/rapps/lgeneral.txt | 3 +++ reactos/base/applications/rapps/rapps/libreoffice.txt | 3 +++ reactos/base/applications/rapps/rapps/lmarbles.txt | 3 +++ reactos/base/applications/rapps/rapps/mfc40.txt | 5 +++++ reactos/base/applications/rapps/rapps/mingw.txt | 3 +++ reactos/base/applications/rapps/rapps/mirandaim.txt | 3 +++ reactos/base/applications/rapps/rapps/mirc.txt | 3 +++ reactos/base/applications/rapps/rapps/mono2.txt | 3 +++ reactos/base/applications/rapps/rapps/mpc.txt | 3 +++ reactos/base/applications/rapps/rapps/msxml3.txt | 4 ++++ reactos/base/applications/rapps/rapps/net11.txt | 3 +++ reactos/base/applications/rapps/rapps/net20.txt | 3 +++ reactos/base/applications/rapps/rapps/net20sp2.txt | 5 ++++- reactos/base/applications/rapps/rapps/offbyone.txt | 3 +++ reactos/base/applications/rapps/rapps/openoffice2.4.txt | 7 +++++++ reactos/base/applications/rapps/rapps/openoffice3.0.txt | 6 ++++++ reactos/base/applications/rapps/rapps/openttd.txt | 3 +++ reactos/base/applications/rapps/rapps/opera.txt | 3 +++ reactos/base/applications/rapps/rapps/opera9.txt | 3 +++ reactos/base/applications/rapps/rapps/putty.txt | 3 +++ reactos/base/applications/rapps/rapps/python.txt | 2 ++ reactos/base/applications/rapps/rapps/remood.txt | 3 +++ reactos/base/applications/rapps/rapps/rosbe.txt | 3 +++ reactos/base/applications/rapps/rapps/rosbeamd64.txt | 3 +++ reactos/base/applications/rapps/rapps/rosbearm.txt | 3 +++ reactos/base/applications/rapps/rapps/sambatng.txt | 3 +++ reactos/base/applications/rapps/rapps/sbforvmware.txt | 6 ++++++ reactos/base/applications/rapps/rapps/scite.txt | 3 +++ reactos/base/applications/rapps/rapps/scummvm.txt | 3 +++ reactos/base/applications/rapps/rapps/sdl_mixer.txt | 3 +++ reactos/base/applications/rapps/rapps/sdl_runtime.txt | 4 ++++ reactos/base/applications/rapps/rapps/seamonkey.txt | 5 +++++ reactos/base/applications/rapps/rapps/smplayer.txt | 3 +++ reactos/base/applications/rapps/rapps/steam.txt | 3 +++ reactos/base/applications/rapps/rapps/superfinder.txt | 5 ++++- reactos/base/applications/rapps/rapps/tahoma.txt | 4 ++++ reactos/base/applications/rapps/rapps/thunderbird.txt | 6 ++++++ reactos/base/applications/rapps/rapps/tileworld.txt | 3 +++ reactos/base/applications/rapps/rapps/tuxpaint.txt | 3 +++ reactos/base/applications/rapps/rapps/ultravnc.txt | 3 +++ reactos/base/applications/rapps/rapps/utorrent.txt | 4 ++++ reactos/base/applications/rapps/rapps/vb5run.txt | 4 ++++ reactos/base/applications/rapps/rapps/vb6run.txt | 4 ++++ reactos/base/applications/rapps/rapps/vc2005run.txt | 4 ++++ reactos/base/applications/rapps/rapps/vc2005sp1run.txt | 4 ++++ reactos/base/applications/rapps/rapps/vc2008run.txt | 4 ++++ reactos/base/applications/rapps/rapps/vc2008sp1run.txt | 4 ++++ reactos/base/applications/rapps/rapps/vc6run.txt | 4 ++++ reactos/base/applications/rapps/rapps/vlc.txt | 7 +++++-- reactos/base/applications/rapps/rapps/winboard.txt | 3 +++ reactos/base/applications/rapps/rapps/wme9.txt | 3 +++ 72 files changed, 260 insertions(+), 4 deletions(-) diff --git a/reactos/base/applications/rapps/rapps/7zip.txt b/reactos/base/applications/rapps/rapps/7zip.txt index e5e8df83ae6..67b48b0d958 100644 --- a/reactos/base/applications/rapps/rapps/7zip.txt +++ b/reactos/base/applications/rapps/rapps/7zip.txt @@ -17,6 +17,9 @@ Description = Tool zum Erstellen und Öffnen von 7zip, zip, tar, rar und andrern [Section.040a] Description = Utilidad para crear y abrir 7zip, zip, tar, rar y otros archivos comprimidos. +[Section.040c] +Description = Utilitaire pour créer et ouvrir les fichiers 7zip, zip, tar, rar et autres archives. + [Section.0415] Description = Narzędzie do tworzenia i otwierania plików typu 7zip, zip, tar, i innych plików archiwizacyjnych. diff --git a/reactos/base/applications/rapps/rapps/abiword.txt b/reactos/base/applications/rapps/rapps/abiword.txt index 9ce5c9bb3c5..fa162dbfca7 100644 --- a/reactos/base/applications/rapps/rapps/abiword.txt +++ b/reactos/base/applications/rapps/rapps/abiword.txt @@ -17,6 +17,9 @@ Description = Textverarbeitung. [Section.040a] Description = Procesador de textos. +[Section.040c] +Description = Éditeur de texte. + [Section.0415] Description = Edytor tekstu. diff --git a/reactos/base/applications/rapps/rapps/abiword28x.txt b/reactos/base/applications/rapps/rapps/abiword28x.txt index 5a9b178efcf..5b39f0ff7fa 100644 --- a/reactos/base/applications/rapps/rapps/abiword28x.txt +++ b/reactos/base/applications/rapps/rapps/abiword28x.txt @@ -17,6 +17,9 @@ Description = Textverarbeitung. [Section.040a] Description = Procesador de textos. +[Section.040c] +Description = Éditeur de texte. + [Section.0415] Description = Edytor tekstu. diff --git a/reactos/base/applications/rapps/rapps/abyss.txt b/reactos/base/applications/rapps/rapps/abyss.txt index 8959327b617..22dd23368bd 100644 --- a/reactos/base/applications/rapps/rapps/abyss.txt +++ b/reactos/base/applications/rapps/rapps/abyss.txt @@ -14,6 +14,9 @@ CDPath = none [Section.0407] Description = Abyss Web Server ermöglicht es Webseiten auf Ihrem Computer zu hosten. Er unterstützt sichere SSL/TLS Verbindungen (HTTPS) sowie eine Vielfalt an Web Technologien. Er kann ebenfalls PHP, Perl, Python, ASP, ASP.NET, und Ruby on Rails Web Anwendungen ausführen, welche von Datenbanken, wie MySQL, SQLite, MS SQL Server, MS Access, oder Oracle unterstützt werden können. +[Section.040c] +Description = Abyss Web Server vous permet d'héberger vos sites internet sur votre ordinateur. Il supporte les connexions sécurisées SSL/TLS (HTTPS) ainsi qu'un grand nombre de technologies web. Il peut également faire tourner des applications web PHP, Perl, Python, ASP, ASP.Net, Ruby et Ruby on Rails, qui peuvent être associées à des bases de données telles que MySQL, SQLite, MS SQL Server, MS Access ou Oracle. + [Section.0415] Description = Abyss Web Server pozwala Ci na stworzenie serwera WWW na własnym komputerze. Ten program obsługuje zabezpieczone połączenia typu SSL/TLS (HTTPS) i wiele technologii Sieci. Może także uruchamiać zaawansowane aplikacje internetowe takie jak PHP, Perl, Python, ASP, ASP.NET, i Ruby on Rails. diff --git a/reactos/base/applications/rapps/rapps/ac97forvirtualbox.txt b/reactos/base/applications/rapps/rapps/ac97forvirtualbox.txt index 8454b861282..2045060f589 100644 --- a/reactos/base/applications/rapps/rapps/ac97forvirtualbox.txt +++ b/reactos/base/applications/rapps/rapps/ac97forvirtualbox.txt @@ -29,6 +29,12 @@ Licence = Desconocida Description = Descomprimir en la carpeta "Reactos" y reiniciar Reactos dos veces. URLSite = Desconocida +[Section.040c] +Name = Pilote AC97 pour VirtualBox +Licence = Inconnue +Description = Décompresser dans le dossier "ReactOS" puis redémarrer ReactOS deux fois. +URLSite = Inconnue + [Section.0415] Name = Sterownik AC97 dla VirtualBox Licence = Nieznana diff --git a/reactos/base/applications/rapps/rapps/audiograbber.txt b/reactos/base/applications/rapps/rapps/audiograbber.txt index 69aeee9926b..12b9ade82c8 100644 --- a/reactos/base/applications/rapps/rapps/audiograbber.txt +++ b/reactos/base/applications/rapps/rapps/audiograbber.txt @@ -17,6 +17,9 @@ Description = Ein sehr guter CD-Ripper/Audio-Datei-Konverter. [Section.040a] Description = Un buen CD Ripper/ conversor de archivos de audio. +[Section.040c] +Description = Un très bon extracteur de CD/convertisseur de fichier audio. + [Section.0415] Description = Bardzo dobry CD Ripper/konwerter plików audio. diff --git a/reactos/base/applications/rapps/rapps/comctl32ocx.txt b/reactos/base/applications/rapps/rapps/comctl32ocx.txt index 392e8faf26c..f0eac2345d5 100644 --- a/reactos/base/applications/rapps/rapps/comctl32ocx.txt +++ b/reactos/base/applications/rapps/rapps/comctl32ocx.txt @@ -19,6 +19,10 @@ Description = Datei wird von einigen Anwendungen benötigt. Licence = Desconocida Description = X es necesario para varias aplicaciones. +[Section.040c] +Licence = Inconnue +Description = Fichier nécessaire pour certaines applications. + [Section.0415] Licence = Nieznana Description = Microsoft Visual Basic 6.0 Common Controls jest używany przez część aplikacji. diff --git a/reactos/base/applications/rapps/rapps/diablo2.txt b/reactos/base/applications/rapps/rapps/diablo2.txt index df11f7be0a5..9c4b9b3ebf2 100644 --- a/reactos/base/applications/rapps/rapps/diablo2.txt +++ b/reactos/base/applications/rapps/rapps/diablo2.txt @@ -17,6 +17,9 @@ Description = Diablo 2 Shareware. zeckensacks glide wrapper wird zum Ausführen [Section.040a] Description = Diablo 2 Shareware. zeckensack's glide wrapper es necesario para su ejecución. +[Section.040c] +Description = Diablo 2 Shareware. zeckensack's glide wrapper est requis pour le faire tourner. + [Section.0415] Description = Diablo 2 Shareware. Do poprawnego działania wymagany jest zainstalowany zeckensacks glide wrapper. diff --git a/reactos/base/applications/rapps/rapps/dosblaster.txt b/reactos/base/applications/rapps/rapps/dosblaster.txt index a499b7a956c..28a5cb9f941 100644 --- a/reactos/base/applications/rapps/rapps/dosblaster.txt +++ b/reactos/base/applications/rapps/rapps/dosblaster.txt @@ -17,6 +17,9 @@ Description = DosBlaster ist eine Shell Extension, die es ermöglicht jede DOS A [Section.040a] Description = DosBlaster en una extensión Shell que permite abrir cualquier ejecutable DOS en DOSBox desde el botón derecho del ratón. Esta versión contiene DOSBox 0.70, pero puede ser actualizado facilmente instalando una nueva versión de DOSBox en la carpeta de DosBlaster. +[Section.040c] +Description = DosBlaster est une extension Shell qui permet d'ouvrir n'importe quel exécutable DOS dans DOSBox via un click droit. Cette version contient DOSBox 0.70 mais peut être simplement mise à jour en installant une nouvelle version de DOSBox dans les répertoires de DosBlaster. + [Section.0415] Description = DosBlaster to rozszerzenie powłoki, które umożliwia otwarcie każdego DOS-owego pliku wykonywalnego w DOSBox za pomocą prawego klawisza myszki. Ta wersja zawiera DosBox 0.70, ale można go łatwo zaktualizować, instalując nowszą wersje DOSBox do folderów DosBlaster. diff --git a/reactos/base/applications/rapps/rapps/dosbox.txt b/reactos/base/applications/rapps/rapps/dosbox.txt index 4d437c7c6ba..3d6d482b2e5 100644 --- a/reactos/base/applications/rapps/rapps/dosbox.txt +++ b/reactos/base/applications/rapps/rapps/dosbox.txt @@ -17,6 +17,9 @@ Description = DOSBox ist ein DOS Emulator. [Section.040a] Description = DOSBox es un emulador de DOS. +[Section.040c] +Description = DOSBox est un émulateur DOS. + [Section.0415] Description = DOSBox - emulator DOSa. diff --git a/reactos/base/applications/rapps/rapps/fap.txt b/reactos/base/applications/rapps/rapps/fap.txt index 0132c7ad621..1721065e569 100644 --- a/reactos/base/applications/rapps/rapps/fap.txt +++ b/reactos/base/applications/rapps/rapps/fap.txt @@ -14,6 +14,9 @@ CDPath = none [Section.0407] Description = Kleiner und einfacher Mediaplayer. +[Section.040c] +Description = Lecteur audio simple et léger. + [Section.0415] Description = Prosty i lekki odtwarzacz audio. diff --git a/reactos/base/applications/rapps/rapps/firefox2.txt b/reactos/base/applications/rapps/rapps/firefox2.txt index 5f9ccc54791..8805d25b374 100644 --- a/reactos/base/applications/rapps/rapps/firefox2.txt +++ b/reactos/base/applications/rapps/rapps/firefox2.txt @@ -26,6 +26,11 @@ Description = El más popular y uno de los mejores navegadores web gratuitos que URLSite = http://www.mozilla-europe.org/es/ URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/es-ES/Firefox%20Setup%202.0.0.20.exe +[Section.040c] +Description = Le navigateur web gratuit le plus populaire et l'un des meilleurs. +URLSite = http://www.mozilla-europe.org/fr/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/fr/Firefox%20Setup%202.0.0.20.exe + [Section.0414] Description = Mest populære og best også gratis nettleserene der ute. URLSite = http://www.mozilla-europe.org/no/ diff --git a/reactos/base/applications/rapps/rapps/firefox3.txt b/reactos/base/applications/rapps/rapps/firefox3.txt index f25f6dca509..efb4c4f578b 100644 --- a/reactos/base/applications/rapps/rapps/firefox3.txt +++ b/reactos/base/applications/rapps/rapps/firefox3.txt @@ -29,6 +29,11 @@ Size = 7.0M URLSite = http://www.mozilla-europe.org/es/ URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/es-ES/Firefox%20Setup%203.0.19.exe +[Section.040c] +Description = Le navigateur web gratuit le plus populaire et l'un des meilleurs. +URLSite = http://www.mozilla-europe.org/fr/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/fr/Firefox%20Setup%203.0.19.exe + [Section.0414] Description = Mest populære og best også gratis nettleserene der ute. Size = 7.0M diff --git a/reactos/base/applications/rapps/rapps/firefox36.txt b/reactos/base/applications/rapps/rapps/firefox36.txt index 882987fc0c0..193a268b877 100644 --- a/reactos/base/applications/rapps/rapps/firefox36.txt +++ b/reactos/base/applications/rapps/rapps/firefox36.txt @@ -23,6 +23,12 @@ Size = 8.1M URLSite = http://www.mozilla-europe.org/es/ URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.6.15/win32/es-ES/Firefox%20Setup%203.6.15.exe +[Section.040c] +Description = Le navigateur web gratuit le plus populaire et l'un des meilleurs. +Size = 8.1M +URLSite = http://www.mozilla-europe.org/fr/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.6.15/win32/fr/Firefox%20Setup%203.6.15.exe + [Section.0414] Description = Mest populære og best også gratis nettleserene der ute. Size = 8.1M diff --git a/reactos/base/applications/rapps/rapps/freebasic.txt b/reactos/base/applications/rapps/rapps/freebasic.txt index 97759aa8a41..082c8ed62e0 100644 --- a/reactos/base/applications/rapps/rapps/freebasic.txt +++ b/reactos/base/applications/rapps/rapps/freebasic.txt @@ -17,6 +17,9 @@ Description = Open Source BASIC Compiler. Die BASIC Syntax ist kompatibel zu QBA [Section.040a] Description = Compilador BASIC de código abierto. El lenguaje BASIC es compatible con QBASIC. +[Section.040c] +Description = Compilateur BASIC open source. La syntaxe du BASIC est compatible avec le QBASIC. + [Section.0415] Description = Otwarty kompilator BASIC, ze składnią kompatybilną z QBASIC. diff --git a/reactos/base/applications/rapps/rapps/glidewrapzbag.txt b/reactos/base/applications/rapps/rapps/glidewrapzbag.txt index 7870fbe4f98..856947a8700 100644 --- a/reactos/base/applications/rapps/rapps/glidewrapzbag.txt +++ b/reactos/base/applications/rapps/rapps/glidewrapzbag.txt @@ -17,6 +17,9 @@ Description = glidewrapper ist erforderlich um Diablo2 in ReactOS auszuführen. [Section.040a] Description = glidewrapper es necesario para ejecutar Diablo 2 en ReactOS. +[Section.040c] +Description = glidewrapper est nécessaire pour faire tourner Diablo 2 dans ReactOS. + [Section.0415] Description = glidewrapper jest potrzebny do uruchomienia Diablo2 w ReactOS-ie. diff --git a/reactos/base/applications/rapps/rapps/go-oo.txt b/reactos/base/applications/rapps/rapps/go-oo.txt index 39dbe608ad5..3b9682714e2 100644 --- a/reactos/base/applications/rapps/rapps/go-oo.txt +++ b/reactos/base/applications/rapps/rapps/go-oo.txt @@ -17,6 +17,9 @@ Description = Open Source Office Suite, basierend auf Open Office, aber viel bes [Section.040a] Description = La suite de ofimática de código abierto. +[Section.040c] +Description = Suite bureautique open source basée sur Open Office, mais bien meilleure. + [Section.0415] Description = Otwarty pakiet biurowy, bazujący na Open Office, ale znacznie lepszy. diff --git a/reactos/base/applications/rapps/rapps/irfanview.txt b/reactos/base/applications/rapps/rapps/irfanview.txt index 0edc06bfe38..1e4600455ec 100644 --- a/reactos/base/applications/rapps/rapps/irfanview.txt +++ b/reactos/base/applications/rapps/rapps/irfanview.txt @@ -19,6 +19,10 @@ Description = Anzeigeprogramm für alle Arten von Grafik-/Audio- oder Video-Date Licence = Gratuito (para uso personal) Description = Visor para toda clase de archivos de imagen,audio y video. +[Section.040c] +Licence = Gratuit (pour un usage personnel) +Description = Visionneur pour tous les types de fichiers graphiques/audio/vidéo. + [Section.0415] Licence = Freeware (dla użytku domowego) Description = Przeglądarka dla bardzo wielu typów obrazów, plików audio oraz wideo. diff --git a/reactos/base/applications/rapps/rapps/irfanviewplugins.txt b/reactos/base/applications/rapps/rapps/irfanviewplugins.txt index 03686ab053f..1ae86a3a4fb 100644 --- a/reactos/base/applications/rapps/rapps/irfanviewplugins.txt +++ b/reactos/base/applications/rapps/rapps/irfanviewplugins.txt @@ -19,6 +19,10 @@ Description = Zusätzlich Plugins zur Unterstützung von weiteren Dateitypen. Licence = Gratuito (para uso personal) Description = Complementos adicionales para soportar más formatos. +[Section.040c] +Licence = Gratuit (pour un usage personnel) +Description = Modules additionnels pour supporter plus de types de fichiers. + [Section.0415] Licence = Freeware (dla użytku domowego) Description = Wtyczki otwierające dodatkowe typy plików w Irfanview. diff --git a/reactos/base/applications/rapps/rapps/kdewin.txt b/reactos/base/applications/rapps/rapps/kdewin.txt index ced1b4a3a9e..8fbdaa8bd2b 100644 --- a/reactos/base/applications/rapps/rapps/kdewin.txt +++ b/reactos/base/applications/rapps/rapps/kdewin.txt @@ -14,6 +14,9 @@ CDPath = none [Section.0407] Description = KDE für Windows. +[Section.040c] +Description = KDE pour Windows. + [Section.0415] Description = KDE dla Windows. diff --git a/reactos/base/applications/rapps/rapps/lbreakout2.txt b/reactos/base/applications/rapps/rapps/lbreakout2.txt index 98c3262265d..2df8e90c02b 100644 --- a/reactos/base/applications/rapps/rapps/lbreakout2.txt +++ b/reactos/base/applications/rapps/rapps/lbreakout2.txt @@ -17,6 +17,9 @@ Description = Breakout-Klon verwendet SDL Bibliothek. [Section.040a] Description = Clon de Breakout usando las librerias SDL. +[Section.040c] +Description = Clone de casse-brique utilisant la bibliothèque SDL. + [Section.0415] Description = Klon Breakouta/Arkanoida napisany przy użyciu biblioteki SDL. diff --git a/reactos/base/applications/rapps/rapps/lgeneral.txt b/reactos/base/applications/rapps/rapps/lgeneral.txt index 0fe80aa68eb..e0d24ab1df9 100644 --- a/reactos/base/applications/rapps/rapps/lgeneral.txt +++ b/reactos/base/applications/rapps/rapps/lgeneral.txt @@ -17,6 +17,9 @@ Description = Panzer-General-Klon verwendet SDL Bibliotheken. [Section.040a] Description = Clon de Panzer General usando las librerias SDL. +[Section.040c] +Description = Clone de Pansez General utilisant la bibliothèque SDL. + [Section.0415] Description = Klon gry Panzer General napisany przy użyciu biblioteki SDL. diff --git a/reactos/base/applications/rapps/rapps/libreoffice.txt b/reactos/base/applications/rapps/rapps/libreoffice.txt index 0f5b2c088dd..b13e69e92db 100644 --- a/reactos/base/applications/rapps/rapps/libreoffice.txt +++ b/reactos/base/applications/rapps/rapps/libreoffice.txt @@ -17,6 +17,9 @@ Description = Vorher bekannt als OpenOffice. Open Source Office Suite. [Section.040a] Description = La suite de ofimática de código abierto. +[Section.040c] +Description = Précédemment appelé OpenOffice. Suite bureautique open source. + [Section.0415] Description = Otwarty pakiet biurowy. diff --git a/reactos/base/applications/rapps/rapps/lmarbles.txt b/reactos/base/applications/rapps/rapps/lmarbles.txt index 025508cc4ad..41e63fce9e9 100644 --- a/reactos/base/applications/rapps/rapps/lmarbles.txt +++ b/reactos/base/applications/rapps/rapps/lmarbles.txt @@ -17,6 +17,9 @@ Description = Atomix-Klon verwendet SDL Bibliotheken. [Section.040a] Description = Clon de Atomix usando las librerias SDL. +[Section.040c] +Description = Clone de Atomix utilisant la bibliothèque SDL. + [Section.0415] Description = Klon gry Atomix, używający biblioteki SDL. diff --git a/reactos/base/applications/rapps/rapps/mfc40.txt b/reactos/base/applications/rapps/rapps/mfc40.txt index c0d85391605..a7443bf7c69 100644 --- a/reactos/base/applications/rapps/rapps/mfc40.txt +++ b/reactos/base/applications/rapps/rapps/mfc40.txt @@ -21,6 +21,11 @@ Name = Visor OLE y Microsoft Foundation Classes Version 4 Licence = Desconocida Description = MFC 4 es necesario para varias aplicaciones. +[Section.040c] +Name = Visionneur OLE et Microsoft Foundation Classes version 4 +Licence = Inconnue +Description = MFC 4 est nécessaire pour certaines applications. + [Section.0415] Name = Przeglądarka OLE oraz MFC (Microsoft Foundation Classes) wersja 4 Licence = Nieznana diff --git a/reactos/base/applications/rapps/rapps/mingw.txt b/reactos/base/applications/rapps/rapps/mingw.txt index 054a2fb71c3..a1adf02d547 100644 --- a/reactos/base/applications/rapps/rapps/mingw.txt +++ b/reactos/base/applications/rapps/rapps/mingw.txt @@ -17,6 +17,9 @@ Description = Eine Portierung der GNU Werkzeugkette mit GCC, GDB, GNU make usw. [Section.040a] Description = Es una cadena de herramientas GNU con GCC, GDB, GNU make, etc. +[Section.040c] +Description = Un portage de la chaîne d'outils GNU avec GCC, GDB, GNU make, etc. + [Section.0415] Description = Kompilator GCC dla platformy Windows wraz z dodatkowymi narzędziami (GDB, make, itd.). diff --git a/reactos/base/applications/rapps/rapps/mirandaim.txt b/reactos/base/applications/rapps/rapps/mirandaim.txt index c872a4b025d..a2a7ded0b87 100644 --- a/reactos/base/applications/rapps/rapps/mirandaim.txt +++ b/reactos/base/applications/rapps/rapps/mirandaim.txt @@ -17,6 +17,9 @@ Description = Open source Multiprotokoll Instant Messaging Anwendung - funktioni [Section.040a] Description = Aplicación de mensajería instantánea multiprotocolo de código abierto - Puede no funcionar en su totalidad. +[Section.040c] +Description = Application de messagerie instantannée multi-protocoles open source - pourrait ne pas fonctionner complètement. + [Section.0415] Description = Otwarty komunikator internetowy, obsługujący wiele różnych protokołów (m.in. GG, Tlen, Jabber, ICQ, IRC) - może nie działać prawidłowo. diff --git a/reactos/base/applications/rapps/rapps/mirc.txt b/reactos/base/applications/rapps/rapps/mirc.txt index d07b7c05d76..05b5913e31b 100644 --- a/reactos/base/applications/rapps/rapps/mirc.txt +++ b/reactos/base/applications/rapps/rapps/mirc.txt @@ -17,6 +17,9 @@ Description = Der populärste Client für Internet Relay Chat (IRC). [Section.040a] Description = El más popular cliente para Internet Relay Chat (IRC). +[Section.040c] +Description = Le client le plus populaire pour l'Internet Relay Chat (IRC). + [Section.0415] Description = Najpopularniejszy klient IRC (Internet Relay Chat). diff --git a/reactos/base/applications/rapps/rapps/mono2.txt b/reactos/base/applications/rapps/rapps/mono2.txt index 309fc5d201c..5d2aefb6f19 100644 --- a/reactos/base/applications/rapps/rapps/mono2.txt +++ b/reactos/base/applications/rapps/rapps/mono2.txt @@ -11,6 +11,9 @@ URLSite = http://www.mono-project.com/Main_Page URLDownload = http://ftp.novell.com/pub/mono/archive/2.8.2/windows-installer/1/mono-2.8.2-gtksharp-2.12.10-win32-1.exe CDPath = none +[Section.040c] +Description = Framework .net open source. + [Section.0415] Description = Pakiet Mono .net Framework dla Programistów. diff --git a/reactos/base/applications/rapps/rapps/mpc.txt b/reactos/base/applications/rapps/rapps/mpc.txt index 253eb94b665..de3ce03e540 100644 --- a/reactos/base/applications/rapps/rapps/mpc.txt +++ b/reactos/base/applications/rapps/rapps/mpc.txt @@ -17,6 +17,9 @@ Description = Ein Mediaplayer. [Section.040a] Description = Reproductor multimedia. +[Section.040c] +Description = Un lecteur media. + [Section.0419] Description = Мультимедийный проигрыватель. diff --git a/reactos/base/applications/rapps/rapps/msxml3.txt b/reactos/base/applications/rapps/rapps/msxml3.txt index 4147a2ca074..a8eb9d1a62c 100644 --- a/reactos/base/applications/rapps/rapps/msxml3.txt +++ b/reactos/base/applications/rapps/rapps/msxml3.txt @@ -19,6 +19,10 @@ Description = MSXML3 wird von einige MSI Installern benötigt. Licence = Desconocida Description = MSXML3 para varios instaladores MSI. +[Section.040c] +Licence = Inconnue +Description = MSXML3 est nécessaire pour certains installateurs MSI. + [Section.0415] Licence = Nieznana Description = Niektóre spośród plików instalacyjnych MSI potrzebują parsera MSXML3. diff --git a/reactos/base/applications/rapps/rapps/net11.txt b/reactos/base/applications/rapps/rapps/net11.txt index 15966d9b229..24889b08e7d 100644 --- a/reactos/base/applications/rapps/rapps/net11.txt +++ b/reactos/base/applications/rapps/rapps/net11.txt @@ -11,5 +11,8 @@ URLSite = http://www.microsoft.com/downloads/details.aspx?FamilyId=262D25E3-F589 URLDownload = http://download.microsoft.com/download/a/a/c/aac39226-8825-44ce-90e3-bf8203e74006/dotnetfx.exe CDPath = none +[Section.040c] +Description = Microsoft .NET Framework version 1.1 - Paquet redistribuable. + [Section.0415] Description = Microsoft .NET Framework Wersja 1.1 - Pakiet Dystrybucyjny. diff --git a/reactos/base/applications/rapps/rapps/net20.txt b/reactos/base/applications/rapps/rapps/net20.txt index a29ed102861..bcb6a5feb24 100644 --- a/reactos/base/applications/rapps/rapps/net20.txt +++ b/reactos/base/applications/rapps/rapps/net20.txt @@ -11,5 +11,8 @@ URLSite = http://www.microsoft.com/downloads/details.aspx?FamilyID=0856eacb-4362 URLDownload = http://download.microsoft.com/download/5/6/7/567758a3-759e-473e-bf8f-52154438565a/dotnetfx.exe CDPath = none +[Section.040c] +Description = Microsoft .NET Framework version 2.0 - Paquet redistribuable. + [Section.0415] Description = Microsoft .NET Framework Wersja 2.0 - Pakiet Dystrybucyjny. diff --git a/reactos/base/applications/rapps/rapps/net20sp2.txt b/reactos/base/applications/rapps/rapps/net20sp2.txt index 1901bfe937e..1d144f0f8b8 100644 --- a/reactos/base/applications/rapps/rapps/net20sp2.txt +++ b/reactos/base/applications/rapps/rapps/net20sp2.txt @@ -11,5 +11,8 @@ URLSite = http://www.microsoft.com/downloads/details.aspx?familyid=5B2C0358-915B URLDownload = http://download.microsoft.com/download/c/6/e/c6e88215-0178-4c6c-b5f3-158ff77b1f38/NetFx20SP2_x86.exe CDPath = none +[Section.040c] +Description = Microsoft .NET Framework version 2.0 Service Pack 2. + [Section.0415] -Description = Microsoft .NET Framework Wersja 2.0 Service Pack 2. \ No newline at end of file +Description = Microsoft .NET Framework Wersja 2.0 Service Pack 2. diff --git a/reactos/base/applications/rapps/rapps/offbyone.txt b/reactos/base/applications/rapps/rapps/offbyone.txt index 733e710fa9b..cc3f0200a31 100644 --- a/reactos/base/applications/rapps/rapps/offbyone.txt +++ b/reactos/base/applications/rapps/rapps/offbyone.txt @@ -20,6 +20,9 @@ Description = Der Off-By-One-Browser ist ein sehr kleiner und schneller Webbrows [Section.040a] Description = Es un pequeño y rápido navegador web con completo soporte HTML 3.2. +[Section.040c] +Description = Le navigateur Off By One est un navigateur internet très petit et rapide avec un support complet de HTML 3.2. + [Section.0415] Description = Bardzo mała i szybka przeglądarka internetowa z pełną obsługą HTML 3.2. diff --git a/reactos/base/applications/rapps/rapps/openoffice2.4.txt b/reactos/base/applications/rapps/rapps/openoffice2.4.txt index 89434276526..03b1e31cfec 100644 --- a/reactos/base/applications/rapps/rapps/openoffice2.4.txt +++ b/reactos/base/applications/rapps/rapps/openoffice2.4.txt @@ -23,6 +23,13 @@ URLSite = http://es.openoffice.org/ Size = 113.9MB URLDownload = ftp://archive.services.openoffice.org/pub/openoffice-archive/localized/es/2.4.3/OOo_2.4.3_Win32Intel_install_es.exe +[Section.040c] +Version = 2.4.2 +Description = LA suite bureautique open source. +URLSite = http://fr.openoffice.org/ +Size = 113.9MB +URLDownload = ftp://archive.services.openoffice.org/pub/openoffice-archive/localized/fr/2.4.2/OOo_2.4.2_Win32Intel_install_fr.exe + [Section.0415] URLSite = http://pl.openoffice.org/ Description = Otwarty pakiet biurowy. diff --git a/reactos/base/applications/rapps/rapps/openoffice3.0.txt b/reactos/base/applications/rapps/rapps/openoffice3.0.txt index 8729cb6232c..2c215524af1 100644 --- a/reactos/base/applications/rapps/rapps/openoffice3.0.txt +++ b/reactos/base/applications/rapps/rapps/openoffice3.0.txt @@ -23,6 +23,12 @@ URLSite = http://es.openoffice.org/ Size = 132.0MB URLDownload = http://ftp.gwdg.de/pub/openoffice/localized/es/3.3.0/OOo_3.3.0_Win_x86_install_es.exe +[Section.040c] +Description = LA suite bureautique open source. +URLSite = http://fr.openoffice.org/ +Size = 132.0MB +URLDownload = http://ftp.gwdg.de/pub/openoffice/localized/fr/3.3.0/OOo_3.3.0_Win_x86_install_fr.exe + [Section.0415] Description = Otwarty pakiet biurowy. URLSite = http://pl.openoffice.org/ diff --git a/reactos/base/applications/rapps/rapps/openttd.txt b/reactos/base/applications/rapps/rapps/openttd.txt index 43d57387674..36610d223ae 100644 --- a/reactos/base/applications/rapps/rapps/openttd.txt +++ b/reactos/base/applications/rapps/rapps/openttd.txt @@ -17,6 +17,9 @@ Description = Open Source Klon der "Transport Tycoon Deluxe" Spiel-Engine. Sie b [Section.040a] Description = Clon del motor de juegos "Transport Tycoon Deluxe" de código abierto. Es necesaria una copia de Transport Tycoon. +[Section.040c] +Description = Clone open source du moteur de jeu "Transport Tycoon Deluxe". Vous aurez besoin d'une copie de Transport Tycoon. + [Section.0415] Description = Otwarty klon silnika gry "Transport Tycoon Deluxe". Do poprawnego działania potrzebna jest kopia gry Transport Tycoon. diff --git a/reactos/base/applications/rapps/rapps/opera.txt b/reactos/base/applications/rapps/rapps/opera.txt index 3f899459666..88a2e09815c 100644 --- a/reactos/base/applications/rapps/rapps/opera.txt +++ b/reactos/base/applications/rapps/rapps/opera.txt @@ -20,6 +20,9 @@ Description = Der populäre Opera Browser mit vielen fortschrittlichen Eigenscha [Section.040a] Description = Popular navegador web con muchas características avanzadas e incluye un cliente de correo y BitTorrent. +[Section.040c] +Description = Le populaire navigateur Opera avec beaucoup de fonctionnalités avancées, incluant un client mail et BitTorrent. + [Section.0415] Description = Popularna przeglądarka internetowa z wieloma zaawansowanymi funkcjami, zawierająca klientów: poczty oraz BitTorrent. diff --git a/reactos/base/applications/rapps/rapps/opera9.txt b/reactos/base/applications/rapps/rapps/opera9.txt index 72c275a95f4..ed714e5afb9 100644 --- a/reactos/base/applications/rapps/rapps/opera9.txt +++ b/reactos/base/applications/rapps/rapps/opera9.txt @@ -17,6 +17,9 @@ Description = Der populäre Opera Browser mit vielen fortschrittlichen Eigenscha [Section.040a] Description = Popular navegador web con muchas características avanzadas e incluye un cliente de correo y BitTorrent. +[Section.040c] +Description = Le populaire navigateur Opera avec beaucoup de fonctionnalités avancées, incluant un client mail et BitTorrent. + [Section.0415] Description = Popularna przeglądarka internetowa z wieloma zaawansowanymi funkcjami, zawierająca klientów: poczty oraz BitTorrent. diff --git a/reactos/base/applications/rapps/rapps/putty.txt b/reactos/base/applications/rapps/rapps/putty.txt index f920f3b2db3..1f087aa5760 100644 --- a/reactos/base/applications/rapps/rapps/putty.txt +++ b/reactos/base/applications/rapps/rapps/putty.txt @@ -17,6 +17,9 @@ Description = Ein freier SSH-, Telnet-, rlogin- und TCP-Client. [Section.040a] Description = Un ciente SSH, Telnet, rlogin y TCP gratuito. +[Section.040c] +Description = Un client SSH, Telnet, rlogin et raw TCP gratuit. + [Section.0415] Description = Darmowy klient obsługujący protokoły SSH, Telnet, rlogin oraz bezpośrednie TCP. diff --git a/reactos/base/applications/rapps/rapps/python.txt b/reactos/base/applications/rapps/rapps/python.txt index f18ae1ccfca..ebeded8ae8c 100644 --- a/reactos/base/applications/rapps/rapps/python.txt +++ b/reactos/base/applications/rapps/rapps/python.txt @@ -14,6 +14,8 @@ CDPath = none [Section.0407] Description = Eine sehr mächtige, dynamische Programmiersprache. +[Section.040c] +Description = Un langage de programmation dynamique remarquablement puissant. [Section.0415] Description = Potęży i dynamiczny język programowania. diff --git a/reactos/base/applications/rapps/rapps/remood.txt b/reactos/base/applications/rapps/rapps/remood.txt index 88f4e619431..7204462196a 100644 --- a/reactos/base/applications/rapps/rapps/remood.txt +++ b/reactos/base/applications/rapps/rapps/remood.txt @@ -14,6 +14,9 @@ CDPath = none [Section.0407] Description = ReMooD ist ein Port des Doom Legacy Sources. Es versucht das klassische Legacy Erfahrung zusammen mit neuen Features und mehr Stabilität zu bieten. +[Section.040c] +Description = ReMood est un portage du source de Doom Legacy. Son but est de fournir l'expérience classique de Legacy avec de nouvelles fonctionnalités et plus de stabilité. + [Section.0415] Description = Źródłowy port Doom. Jego celem jest zapewnienie rozrywki znanej z klasycznej wersji z nowymi funkcjami i lepszą stabilnością. diff --git a/reactos/base/applications/rapps/rapps/rosbe.txt b/reactos/base/applications/rapps/rapps/rosbe.txt index c8a6990a752..860d56f1370 100644 --- a/reactos/base/applications/rapps/rapps/rosbe.txt +++ b/reactos/base/applications/rapps/rapps/rosbe.txt @@ -20,6 +20,9 @@ Description = Erlaubt es Ihnen den ReactOS Source Code zu kompilieren. Im ReactO [Section.040a] Description = Te permite compilar el código de ReactOS. Para más instrucciones consulta la wiki de ReactOS. +[Section.040c] +Description = Vous permet de compiler le code source de ReactOS. Pour plus d'instruction, reportez-vous au wiki ReactOS. + [Section.0415] Description = Pozwala zbudować obraz płyty ReactOS ze źródeł. Więcej informacji na Wiki ReactOS. diff --git a/reactos/base/applications/rapps/rapps/rosbeamd64.txt b/reactos/base/applications/rapps/rapps/rosbeamd64.txt index 989cd3bcd19..fa2020461ac 100644 --- a/reactos/base/applications/rapps/rapps/rosbeamd64.txt +++ b/reactos/base/applications/rapps/rapps/rosbeamd64.txt @@ -20,6 +20,9 @@ Description = Erlaubt es Ihnen den ReactOS AMD64 Source Code zu kompilieren. Im [Section.040a] Description = Te permite compilar el código de ReactOS AMD64. Para más instrucciones consulta la wiki de ReactOS. +[Section.040c] +Description = Vous permet de compiler le code source de ReactOS pour AMD64. Pour plus d'instruction, reportez-vous au wiki ReactOS. + [Section.0415] Description = Pozwala zbudować obraz płyty ReactOS AMD64 ze źródeł. Więcej informacji na Wiki ReactOS. diff --git a/reactos/base/applications/rapps/rapps/rosbearm.txt b/reactos/base/applications/rapps/rapps/rosbearm.txt index 18eb22b61ff..d62a3705de5 100644 --- a/reactos/base/applications/rapps/rapps/rosbearm.txt +++ b/reactos/base/applications/rapps/rapps/rosbearm.txt @@ -17,6 +17,9 @@ Description = Erlaubt es Ihnen den ReactOS ARM Source Code zu kompilieren. Im Re [Section.040a] Description = Te permite compilar el código de ReactOS ARM. Para más instrucciones consulta la wiki de ReactOS. +[Section.040c] +Description = Vous permet de compiler le code source de ReactOS pour ARM. Pour plus d'instruction, reportez-vous au wiki ReactOS. + [Section.0415] Description = Pozwala zbudować obraz płyty ReactOS ARM ze źródeł. Więcej informacji na Wiki ReactOS. diff --git a/reactos/base/applications/rapps/rapps/sambatng.txt b/reactos/base/applications/rapps/rapps/sambatng.txt index 37dae7f7fec..25e630f09a1 100644 --- a/reactos/base/applications/rapps/rapps/sambatng.txt +++ b/reactos/base/applications/rapps/rapps/sambatng.txt @@ -17,6 +17,9 @@ Description = Dieses Werkzeug erlaubt den Zugriff auf Windows' gemeinsame Verzei [Section.040a] Description = Esta utilidad le permite acceder a sus carpetas e impresoras compartidas en Windows con ReactOS. +[Section.040c] +Description = Cet outil vous permet d'accéder à vos répertoire/imprimantes partagés Windows avec ReactOS. + [Section.0415] Description = Narzędzie pozwalające na dostęp z poziomu ReactOSa do współdzielonych folderów/drukarek Windows. diff --git a/reactos/base/applications/rapps/rapps/sbforvmware.txt b/reactos/base/applications/rapps/rapps/sbforvmware.txt index 4b73234b775..9c3949207b8 100644 --- a/reactos/base/applications/rapps/rapps/sbforvmware.txt +++ b/reactos/base/applications/rapps/rapps/sbforvmware.txt @@ -29,6 +29,12 @@ Licence = Desconocida Description = Descomprimir en la carpeta "Reactos" y reiniciar Reactos dos veces. URLSite = Desconocida +[Section.040c] +Name = Pilote SoundBlaster pour VMWare +Licence = Inconnue +Description = Dézippez dans le répertoire "ReactOS" puis redémarrez deux fois. +URLSite = Inconnue + [Section.0415] Name = Sterownik SoundBlaster dla VMWare Licence = Nieznana diff --git a/reactos/base/applications/rapps/rapps/scite.txt b/reactos/base/applications/rapps/rapps/scite.txt index 02a7793e4dd..eabb7b460bc 100644 --- a/reactos/base/applications/rapps/rapps/scite.txt +++ b/reactos/base/applications/rapps/rapps/scite.txt @@ -17,6 +17,9 @@ Description = SciTE ist ein SCIntilla basierter Text Editor. Ursprünglich wurde [Section.040a] Description = Editor de texto basado en SCIntilla. Originalmente creado para demostrar Scintilla, a crecido para ser un gran editor con capacidad para crear y ejecutar programas. +[Section.040c] +Description = SciTE est un éditeur de texte basé sur SCIntilla. Originelement réalisé pour montrer Scintilla, il a évolué pour devenir un éditeur généralement utile avec des options pour compiler et lancer des programmes. + [Section.0415] Description = SciTE to edytor tekstu bazowany na SCIntilla. Oryginalnie stworzony aby pokazać Scintille, stał sie ogólnie przydatnym edytorem z infrastrukturą potrzebną do tworzenia i uruchamiania programów. diff --git a/reactos/base/applications/rapps/rapps/scummvm.txt b/reactos/base/applications/rapps/rapps/scummvm.txt index 55fd2204af1..08032cf6abf 100644 --- a/reactos/base/applications/rapps/rapps/scummvm.txt +++ b/reactos/base/applications/rapps/rapps/scummvm.txt @@ -17,6 +17,9 @@ Description = Sam and Max, Day of the Tentacle usw in ReactOS. [Section.040a] Description = Sam and Max, Day of the Tentacle en ReactOS. +[Section.040c] +Description = Sam and Max, Day of the Tentacle, etc sur ReactOS. + [Section.0415] Description = Program pozwalający uruchomić stare gry przygodowe (Sam and Max, Day of the Tentacle, Monkey Island) w ReactOS. diff --git a/reactos/base/applications/rapps/rapps/sdl_mixer.txt b/reactos/base/applications/rapps/rapps/sdl_mixer.txt index 5f74ea6be10..c4736d72c74 100644 --- a/reactos/base/applications/rapps/rapps/sdl_mixer.txt +++ b/reactos/base/applications/rapps/rapps/sdl_mixer.txt @@ -20,6 +20,9 @@ Description = Erforderlich um einige Open Source Spiele auszuführen. Sie brauch [Section.040a] Description = Necesario para ejecutar varios juegos de código abierto. Necesita 7-Zip o una utilidad similar para extraerlo. +[Section.040c] +Description = Nécessaire pour faire tourner certains jeux open source. Vous aurez besoin de 7-Zip ou d'un outil similaire pour l'extraire. + [Section.0415] Description = Biblioteka wymagana przez niektóre gry (zwłaszcza te o otwartym źródle). Do jej rozpakowania potrzebny jest 7-Zip lub podobny program. diff --git a/reactos/base/applications/rapps/rapps/sdl_runtime.txt b/reactos/base/applications/rapps/rapps/sdl_runtime.txt index 4d572846270..854e59fe39b 100644 --- a/reactos/base/applications/rapps/rapps/sdl_runtime.txt +++ b/reactos/base/applications/rapps/rapps/sdl_runtime.txt @@ -19,6 +19,10 @@ Description = Erforderlich um einige Open Source Spiele auszuführen. Sie brauch Name = Libería Simple Direct Media Layer (SDL) Description = Necesario para ejecutar varios juegos de código abierto. Necesita 7-Zip o una utilidad similar para extraerlo. +[Section.040c] +Name = Bibliothèque Simple Direct Media Layer (SDL) +Description = Nécessaire pour faire tourner certains jeux open source. Vous aurez besoin de 7-Zip ou d'un outil similaire pour l'extraire. + [Section.0415] Name = Biblioteka uruchomieniowa Simple Direct Media Layer (SDL) Description = Wymagana przez wiele gier (głównie o otwartym źródle). Do jej rozpakowania potrzebny jest program 7-Zip lub podobny. diff --git a/reactos/base/applications/rapps/rapps/seamonkey.txt b/reactos/base/applications/rapps/rapps/seamonkey.txt index 659769cb55d..bc683c0651b 100644 --- a/reactos/base/applications/rapps/rapps/seamonkey.txt +++ b/reactos/base/applications/rapps/rapps/seamonkey.txt @@ -21,6 +21,11 @@ Description = La suite de Mozilla está viva. Es el primero y único navegador w Size = 10.1MB URLDownload = ftp://ftp.mozilla.org/pub/seamonkey/releases/2.0.12/win32/es-ES/SeaMonkey%20Setup%202.0.12.exe +[Section.040c] +Description = La suite Mozilla est en vie. Ceci est le seul et l'unique package navigateur, client mail, client chat et composer dont vous aurez besoin. +Size = 10.1MB +URLDownload = ftp://ftp.mozilla.org/pub/seamonkey/releases/2.0.12/win32/fr/SeaMonkey%20Setup%202.0.12.exe + [Section.0415] Description = Pakiet Mozilla żyje. W zestawie: przeglądarka, klient poczty, IRC oraz Edytor HTML - wszystko, czego potrzebujesz. Size = 11.0MB diff --git a/reactos/base/applications/rapps/rapps/smplayer.txt b/reactos/base/applications/rapps/rapps/smplayer.txt index de7520c1519..df7c50e96ca 100644 --- a/reactos/base/applications/rapps/rapps/smplayer.txt +++ b/reactos/base/applications/rapps/rapps/smplayer.txt @@ -18,6 +18,9 @@ URLSite = http://smplayer.sourceforge.net/index.php?tr_lang=de URLSite = http://smplayer.sourceforge.net/index.php?tr_lang=es Description = Interfaz gráfico para Mplayer (reproductor multimedia). +[Section.040a] +URLSite = http://smplayer.sourceforge.net/index.php?tr_lang=fr + [Section.0415] URLSite = http://smplayer.sourceforge.net/index.php?tr_lang=pl Description = Graficzna nakładka na MPlayer, otwarty odtwarzacz filmów. diff --git a/reactos/base/applications/rapps/rapps/steam.txt b/reactos/base/applications/rapps/rapps/steam.txt index 9d4a0af1012..25f7228f273 100644 --- a/reactos/base/applications/rapps/rapps/steam.txt +++ b/reactos/base/applications/rapps/rapps/steam.txt @@ -14,6 +14,9 @@ CDPath = none [Section.0407] Description = Die STEAM Spieleplattform, die von viele Spielen verwendet wird. +[Section.040c] +Description = La plateforme de jeu STEAM utilisée par beaucoup de jeux de nos jours. + [Section.0415] Description = STEAM - platforma, którą używa obecnie wiele gier. diff --git a/reactos/base/applications/rapps/rapps/superfinder.txt b/reactos/base/applications/rapps/rapps/superfinder.txt index 9098b11e8db..9375c1d1ce4 100644 --- a/reactos/base/applications/rapps/rapps/superfinder.txt +++ b/reactos/base/applications/rapps/rapps/superfinder.txt @@ -4,7 +4,7 @@ Name = Super Finder XT Version = 1.6.2.1 Licence = Freeware -Description = A fast and feature rich search Aapplication. +Description = A fast and feature rich search Application. Size = 4.5MB Category = 12 URLSite = http://fsl.sytes.net/ssearchxt.html @@ -14,5 +14,8 @@ CDPath = none [Section.0407] Description = Eine schnelle und effektive Suchanwendung. +[Section.040c] +Description = Une application de recherche rapide et riche en fonctionnalités. + [Section.0415] Description = Szybka i bogata w opcje aplikacja szukająca. diff --git a/reactos/base/applications/rapps/rapps/tahoma.txt b/reactos/base/applications/rapps/rapps/tahoma.txt index c5e57fdf4b4..b1fb42903fc 100644 --- a/reactos/base/applications/rapps/rapps/tahoma.txt +++ b/reactos/base/applications/rapps/rapps/tahoma.txt @@ -15,6 +15,10 @@ CDPath = none Licence = Unbekannt Description = Tahoma Font pack, der von einigen Anwendungen benötigt wird (Steam). +[Section.040c] +Licence = Inconnue +Description = Package pour la police Tahoma, nécessaire pour certaines applications (Steam). + [Section.0415] Description = Pakiet Czcionki Tahoma wymagany przez niektóre programy (np. Steam). diff --git a/reactos/base/applications/rapps/rapps/thunderbird.txt b/reactos/base/applications/rapps/rapps/thunderbird.txt index ec20df1a5f1..ebfa41ce65b 100644 --- a/reactos/base/applications/rapps/rapps/thunderbird.txt +++ b/reactos/base/applications/rapps/rapps/thunderbird.txt @@ -23,6 +23,12 @@ Size = 8.8M URLSite = http://www.mozilla-europe.org/es/products/thunderbird/ URLDownload = ftp://ftp.mozilla.org/pub/thunderbird/releases/3.1.9/win32/es-ES/Thunderbird%20Setup%203.1.9.exe +[Section.040c] +Description = Le plus populaire et l'un des meilleurs clients mail gratuits disponible. +Size = 8.8M +URLSite = http://www.mozilla-europe.org/fr/products/thunderbird/ +URLDownload = ftp://ftp.mozilla.org/pub/thunderbird/releases/3.1.9/win32/fr/Thunderbird%20Setup%203.1.9.exe + [Section.0415] Description = Najpopularniejszy i jeden z najlepszych darmowych klientów poczty. Size = 9.7M diff --git a/reactos/base/applications/rapps/rapps/tileworld.txt b/reactos/base/applications/rapps/rapps/tileworld.txt index fe9cd2eb972..9f465b31e91 100644 --- a/reactos/base/applications/rapps/rapps/tileworld.txt +++ b/reactos/base/applications/rapps/rapps/tileworld.txt @@ -17,6 +17,9 @@ Description = Schöner Klon von Chip's Challenge ursprünglich etnwickelt für A [Section.040a] Description = Clon de Chip's Challenge originalmente creado para Atari Lynx. Incluye el paquete gráfico gratuito CCLP2, así que no es necesario el original con copyright. +[Section.040c] +Description = Clone sympathique de Chip's Challenge originelment fait pour Atari Lynx. Il inclut le pack de graphisme gratuit CCLP2, ainsi vous n'avez pas besoin de l'original sous copyrigth. + [Section.0415] Description = Udany klon gry Chip's Challenge z Atari Lynx. Zawiera darmowy zestaw grafik CCLP2. diff --git a/reactos/base/applications/rapps/rapps/tuxpaint.txt b/reactos/base/applications/rapps/rapps/tuxpaint.txt index 60928f66842..a09f9217dfe 100644 --- a/reactos/base/applications/rapps/rapps/tuxpaint.txt +++ b/reactos/base/applications/rapps/rapps/tuxpaint.txt @@ -20,6 +20,9 @@ Description = Ein Open Source Bitmap Zeichenprogramm für kleine Kinder. [Section.040a] Description = Editor gráfico de imágenes pensado para niños de código abierto. +[Section.040c] +Description = Un éditeur graphic bitmap open source orienté pour les jeunes enfants. + [Section.0415] Description = Otwarty program graficzny przeznaczony głównie dla dzieci. diff --git a/reactos/base/applications/rapps/rapps/ultravnc.txt b/reactos/base/applications/rapps/rapps/ultravnc.txt index 7c107c1aba9..f70c0c1790a 100644 --- a/reactos/base/applications/rapps/rapps/ultravnc.txt +++ b/reactos/base/applications/rapps/rapps/ultravnc.txt @@ -14,6 +14,9 @@ CDPath = none [Section.040a] Description = Cliente/Servidor VNC de código abierto. +[Section.040c] +Description = Client/serveur VNC open source. + [Section.0415] Description = Otwarty klient/serwer VNC. diff --git a/reactos/base/applications/rapps/rapps/utorrent.txt b/reactos/base/applications/rapps/rapps/utorrent.txt index 82257fc4151..b7b7a14ad72 100644 --- a/reactos/base/applications/rapps/rapps/utorrent.txt +++ b/reactos/base/applications/rapps/rapps/utorrent.txt @@ -20,6 +20,10 @@ Description = Kleiner und schneller BitTorrent Client. Licence = Gratuito para uso no comercial Description = Pequeño y rápido cliente BitTorrent. +[Section.040c] +Licence = Gratuit pour une utilisation non-commerciale +Description = Client BitTorrent petit et rapide. + [Section.0415] Licence = Freeware (do użytku domowego) Description = Mały i szybki klient BitTorrent. diff --git a/reactos/base/applications/rapps/rapps/vb5run.txt b/reactos/base/applications/rapps/rapps/vb5run.txt index b916ea4ed5a..7be8b065a01 100644 --- a/reactos/base/applications/rapps/rapps/vb5run.txt +++ b/reactos/base/applications/rapps/rapps/vb5run.txt @@ -19,6 +19,10 @@ Description = Visual Basic 5 Laufzeitsystem. Licence = Desconocida Description = Librerias Visual Basic 5. +[Section.040c] +Licence = Inconnue +Description = Bibliothèque Visual Basic 5. + [Section.0415] Licence = Nieznana Description = Biblioteki uruchomieniowe Visual Basic 5. diff --git a/reactos/base/applications/rapps/rapps/vb6run.txt b/reactos/base/applications/rapps/rapps/vb6run.txt index 521a7fc1ba3..621ff9d20ba 100644 --- a/reactos/base/applications/rapps/rapps/vb6run.txt +++ b/reactos/base/applications/rapps/rapps/vb6run.txt @@ -19,6 +19,10 @@ Description = Visual Basic 6 Laufzeitsystem. Licence = Desconocida Description = Librerias Visual Basic 6. +[Section.040c] +Licence = Inconnue +Description = Bibliothèque Visual Basic -. + [Section.0415] Licence = Nieznana Description = Biblioteki uruchomieniowe Visual Basic 6. diff --git a/reactos/base/applications/rapps/rapps/vc2005run.txt b/reactos/base/applications/rapps/rapps/vc2005run.txt index 9f4f11f6f76..850e2f247fa 100644 --- a/reactos/base/applications/rapps/rapps/vc2005run.txt +++ b/reactos/base/applications/rapps/rapps/vc2005run.txt @@ -19,6 +19,10 @@ Description = Visual Studio 2005 Laufzeitsystem. Licence = Desconocida Description = Librerias Visual Studio 2005. +[Section.040c] +Licence = Inconnue +Description = Bibliothèque Visual Studio 2005. + [Section.0415] Licence = Nieznana Description = Biblioteki uruchomieniowe Visual Studio 2005. diff --git a/reactos/base/applications/rapps/rapps/vc2005sp1run.txt b/reactos/base/applications/rapps/rapps/vc2005sp1run.txt index 0e59740320b..92bd176ce98 100644 --- a/reactos/base/applications/rapps/rapps/vc2005sp1run.txt +++ b/reactos/base/applications/rapps/rapps/vc2005sp1run.txt @@ -19,6 +19,10 @@ Description = Visual Studio 2005 Laufzeitsystem SP1. Licence = Desconocida Description = Librerias Visual Studio 2005 SP1. +[Section.040c] +Licence = Inconnue +Description = Bibliothèque Visual Studio 2005 SP1. + [Section.0415] Licence = Nieznana Description = Biblioteki uruchomieniowe Visual Studio 2005 SP1. diff --git a/reactos/base/applications/rapps/rapps/vc2008run.txt b/reactos/base/applications/rapps/rapps/vc2008run.txt index a527fecdfef..7e5efcd5edf 100644 --- a/reactos/base/applications/rapps/rapps/vc2008run.txt +++ b/reactos/base/applications/rapps/rapps/vc2008run.txt @@ -19,6 +19,10 @@ Description = Visual Studio 2008 Laufzeitsystem. Licence = Desconocida Description = Librerias Visual Studio 2008. +[Section.040c] +Licence = Inconnue +Description = Bibliothèque Visual Studio 2008. + [Section.0415] Licence = Nieznana Description = Biblioteki uruchomieniowe Visual Studio 2008. diff --git a/reactos/base/applications/rapps/rapps/vc2008sp1run.txt b/reactos/base/applications/rapps/rapps/vc2008sp1run.txt index b72f27bc606..713c2a7b711 100644 --- a/reactos/base/applications/rapps/rapps/vc2008sp1run.txt +++ b/reactos/base/applications/rapps/rapps/vc2008sp1run.txt @@ -19,6 +19,10 @@ Description = Visual Studio 2008 SP1 Laufzeitsystem. Licence = Desconocida Description = Librerias Visual Studio 2008 SP1. +[Section.040c] +Licence = Inconnue +Description = Bibliothèque Visual Studio 2008 SP1. + [Section.0415] Licence = Nieznana Description = Biblioteki uruchomieniowe Visual Studio 2008 SP1. diff --git a/reactos/base/applications/rapps/rapps/vc6run.txt b/reactos/base/applications/rapps/rapps/vc6run.txt index 806b51504da..7349c590ac6 100644 --- a/reactos/base/applications/rapps/rapps/vc6run.txt +++ b/reactos/base/applications/rapps/rapps/vc6run.txt @@ -19,6 +19,10 @@ Description = Visual Studio 6 Laufzeitsystem. Licence = Desconocida Description = Librerias Visual Studio 2006. +[Section.040c] +Licence = Inconnue +Description = Bibliothèque Visual Studio 6. + [Section.0415] Licence = Nieznana Description = Biblioteki uruchomieniowe Visual Studio 6. diff --git a/reactos/base/applications/rapps/rapps/vlc.txt b/reactos/base/applications/rapps/rapps/vlc.txt index a4cb7b86bc9..793776448b2 100644 --- a/reactos/base/applications/rapps/rapps/vlc.txt +++ b/reactos/base/applications/rapps/rapps/vlc.txt @@ -17,11 +17,14 @@ Description = Ein Mediaplayer. [Section.040a] Description = Reproductor multimedia. -[Section.0419] -Description = Мультимедийный проигрыватель. +[Section.040c] +Description = Un lecteur media. [Section.0415] Description = Odtwarzacz multimediów. +[Section.0419] +Description = Мультимедийный проигрыватель. + [Section.0422] Description = Мультимедійний програвач. diff --git a/reactos/base/applications/rapps/rapps/winboard.txt b/reactos/base/applications/rapps/rapps/winboard.txt index 06a19e6caf6..1cdf14e6fe1 100644 --- a/reactos/base/applications/rapps/rapps/winboard.txt +++ b/reactos/base/applications/rapps/rapps/winboard.txt @@ -17,6 +17,9 @@ Description = WinBoard ist ein grafisches Schachbrett für Windows/ReactOS welch [Section.040a] Description = Tablero de ajedrez para Windows/ReactOS que puede ser utilizado como interfaz para GNU Chess, Crafty, y otros motores de ajedrez, para servidores de ajedrez en internet, y para partidas por correo electrónico. +[Section.040c] +Description = WinBoard est un jeu d'échec graphique pour Windows/ReactOS qui peut servir d'interface utilisateur pour GNU Chess, Crafty et d'autres moteurs d'échecs, pour les serveurs d'échec internet et pour le jeu d'échec par courriel. + [Section.0415] Description = Graficzna szachownica dla systemu Windows/ReactOS, która może służyć jako graficzna nakładka dla GNU Chess, Crafty, lub innych programów szachowych (w tym internetowych serwerów szachowych) lub szachów korespondencyjnych. diff --git a/reactos/base/applications/rapps/rapps/wme9.txt b/reactos/base/applications/rapps/rapps/wme9.txt index 842568e6f72..e053ec01580 100644 --- a/reactos/base/applications/rapps/rapps/wme9.txt +++ b/reactos/base/applications/rapps/rapps/wme9.txt @@ -17,6 +17,9 @@ Licence = Unbekannt [Section.040a] Licence = Desconocida +[Section.040a] +Licence = Inconnue + [Section.0415] Licence = Nieznana From 3f8643ca67e9e4f5c5680e2d63b0f338adc5b8c4 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Mon, 14 Mar 2011 12:48:28 +0000 Subject: [PATCH 285/287] [MSAFD] - Print the caller in MsafdReturnWithErrno - Initialize SockAsyncCompletionPort handle - Check if the creation of the completion port failed - Defer free of the socket information struct until the socket handle has been closed because the socket may have a pending select. When the socket is closed, the pending select is canceled, thus a apc routine is invoked which access the freed socket information struct. - Fixes mIRC crash - Should be merged to 0.3.13 branch svn path=/trunk/; revision=51047 --- reactos/dll/win32/msafd/misc/dllmain.c | 12 ++++++++---- reactos/dll/win32/msafd/msafd.h | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/reactos/dll/win32/msafd/misc/dllmain.c b/reactos/dll/win32/msafd/misc/dllmain.c index 3fb76c8c213..b2680e0bf28 100644 --- a/reactos/dll/win32/msafd/misc/dllmain.c +++ b/reactos/dll/win32/msafd/misc/dllmain.c @@ -27,7 +27,7 @@ CRITICAL_SECTION SocketListLock; LIST_ENTRY SockHelpersListHead = { NULL, NULL }; ULONG SockAsyncThreadRefCount; HANDLE SockAsyncHelperAfdHandle; -HANDLE SockAsyncCompletionPort; +HANDLE SockAsyncCompletionPort = NULL; BOOLEAN SockAsyncSelectCalled; @@ -562,12 +562,11 @@ WSPCloseSocket(IN SOCKET Handle, } LeaveCriticalSection(&SocketListLock); - HeapFree(GlobalHeap, 0, Socket); - /* Close the handle */ NtClose((HANDLE)Handle); NtClose(SockEvent); + HeapFree(GlobalHeap, 0, Socket); return MsafdReturnWithErrno(Status, lpErrno, 0, NULL); } @@ -2420,6 +2419,7 @@ BOOLEAN SockCreateOrReferenceAsyncThread(VOID) /* Check if the Thread Already Exists */ if (SockAsyncThreadRefCount) { + ASSERT(SockAsyncCompletionPort); return TRUE; } @@ -2430,7 +2430,11 @@ BOOLEAN SockCreateOrReferenceAsyncThread(VOID) IO_COMPLETION_ALL_ACCESS, NULL, 2); // Allow 2 threads only - + if (!NT_SUCCESS(Status)) + { + AFD_DbgPrint(MID_TRACE,("Failed to create completion port\n")); + return FALSE; + } /* Protect Handle */ HandleFlags.ProtectFromClose = TRUE; HandleFlags.Inherit = FALSE; diff --git a/reactos/dll/win32/msafd/msafd.h b/reactos/dll/win32/msafd/msafd.h index d872c97b4d6..52027581d0b 100755 --- a/reactos/dll/win32/msafd/msafd.h +++ b/reactos/dll/win32/msafd/msafd.h @@ -488,7 +488,7 @@ MsafdReturnWithErrno(NTSTATUS Status, } else { - DbgPrint("%s: Received invalid lpErrno pointer!\n", __FUNCTION__); + DbgPrint("%s: Received invalid lpErrno pointer! %s\n", __FUNCTION__); if (ReturnedBytes) *ReturnedBytes = (Status == STATUS_SUCCESS) ? Received : 0; From e15adf5dd52b48ae49dfe63e3b4a4fa235ca4a24 Mon Sep 17 00:00:00 2001 From: Colin Finck Date: Mon, 14 Mar 2011 14:31:19 +0000 Subject: [PATCH 286/287] [RAPPS] - Add a "mIRC 6" entry to have a working IRC client while keeping "mIRC 7" for testing. (see bug 6005) Keep in mind that the automatically downloaded app database is the same for previous releases, current releases and Trunk, so just changing the version for the release wouldn't have been a solution. - Add SumatraPDF 1.2 (working) to the app database. Patch by Vincenzo Cotugno (vins820 at hotmail dot com), German translation by me. - Change all .txt files to svn:eol-style CRLF, these are target files which should have Windows line-endings. svn path=/trunk/; revision=51048 --- .../base/applications/rapps/rapps/7zip.txt | 54 ++++---- .../base/applications/rapps/rapps/abiword.txt | 54 ++++---- .../applications/rapps/rapps/abiword28x.txt | 54 ++++---- .../base/applications/rapps/rapps/abyss.txt | 52 ++++---- .../rapps/rapps/ac97forvirtualbox.txt | 108 ++++++++-------- .../applications/rapps/rapps/audiograbber.txt | 54 ++++---- .../applications/rapps/rapps/comctl32ocx.txt | 64 +++++----- .../base/applications/rapps/rapps/diablo2.txt | 54 ++++---- .../applications/rapps/rapps/dosblaster.txt | 54 ++++---- .../base/applications/rapps/rapps/dosbox.txt | 54 ++++---- reactos/base/applications/rapps/rapps/fap.txt | 48 +++---- .../applications/rapps/rapps/firefox2.txt | 104 +++++++-------- .../applications/rapps/rapps/firefox3.txt | 118 +++++++++--------- .../applications/rapps/rapps/firefox36.txt | 108 ++++++++-------- .../applications/rapps/rapps/freebasic.txt | 54 ++++---- .../rapps/rapps/glidewrapzbag.txt | 54 ++++---- .../base/applications/rapps/rapps/go-oo.txt | 54 ++++---- .../applications/rapps/rapps/irfanview.txt | 64 +++++----- .../rapps/rapps/irfanviewplugins.txt | 64 +++++----- .../base/applications/rapps/rapps/kdewin.txt | 48 +++---- .../applications/rapps/rapps/lbreakout2.txt | 54 ++++---- .../applications/rapps/rapps/lgeneral.txt | 54 ++++---- .../applications/rapps/rapps/libreoffice.txt | 54 ++++---- .../applications/rapps/rapps/lmarbles.txt | 54 ++++---- .../base/applications/rapps/rapps/mfc40.txt | 74 +++++------ .../base/applications/rapps/rapps/mingw.txt | 54 ++++---- .../applications/rapps/rapps/mirandaim.txt | 54 ++++---- .../base/applications/rapps/rapps/mirc.txt | 54 ++++---- .../base/applications/rapps/rapps/mirc6.txt | 27 ++++ .../base/applications/rapps/rapps/mono2.txt | 42 +++---- reactos/base/applications/rapps/rapps/mpc.txt | 60 ++++----- .../base/applications/rapps/rapps/msxml3.txt | 64 +++++----- .../base/applications/rapps/rapps/net11.txt | 36 +++--- .../base/applications/rapps/rapps/net20.txt | 36 +++--- .../applications/rapps/rapps/net20sp2.txt | 36 +++--- .../applications/rapps/rapps/offbyone.txt | 60 ++++----- .../rapps/rapps/openoffice2.4.txt | 86 ++++++------- .../rapps/rapps/openoffice3.0.txt | 84 ++++++------- .../base/applications/rapps/rapps/openttd.txt | 54 ++++---- .../base/applications/rapps/rapps/opera.txt | 66 +++++----- .../base/applications/rapps/rapps/opera9.txt | 60 ++++----- .../base/applications/rapps/rapps/putty.txt | 54 ++++---- .../base/applications/rapps/rapps/python.txt | 48 +++---- .../base/applications/rapps/rapps/remood.txt | 48 +++---- .../base/applications/rapps/rapps/rosbe.txt | 60 ++++----- .../applications/rapps/rapps/rosbeamd64.txt | 60 ++++----- .../applications/rapps/rapps/rosbearm.txt | 54 ++++---- .../applications/rapps/rapps/sambatng.txt | 54 ++++---- .../applications/rapps/rapps/sbforvmware.txt | 108 ++++++++-------- .../base/applications/rapps/rapps/scite.txt | 54 ++++---- .../base/applications/rapps/rapps/scummvm.txt | 54 ++++---- .../applications/rapps/rapps/sdl_mixer.txt | 60 ++++----- .../applications/rapps/rapps/sdl_runtime.txt | 64 +++++----- .../applications/rapps/rapps/seamonkey.txt | 74 +++++------ .../applications/rapps/rapps/smplayer.txt | 60 ++++----- .../base/applications/rapps/rapps/steam.txt | 48 +++---- .../applications/rapps/rapps/sumatrapdf.txt | 18 +++ .../applications/rapps/rapps/superfinder.txt | 42 +++---- .../base/applications/rapps/rapps/tahoma.txt | 54 ++++---- .../applications/rapps/rapps/thunderbird.txt | 96 +++++++------- .../applications/rapps/rapps/tileworld.txt | 54 ++++---- .../applications/rapps/rapps/tuxpaint.txt | 60 ++++----- .../applications/rapps/rapps/ultravnc.txt | 48 +++---- .../applications/rapps/rapps/utorrent.txt | 74 +++++------ .../base/applications/rapps/rapps/vb5run.txt | 64 +++++----- .../base/applications/rapps/rapps/vb6run.txt | 64 +++++----- .../applications/rapps/rapps/vc2005run.txt | 64 +++++----- .../applications/rapps/rapps/vc2005sp1run.txt | 64 +++++----- .../applications/rapps/rapps/vc2008run.txt | 64 +++++----- .../applications/rapps/rapps/vc2008sp1run.txt | 64 +++++----- .../base/applications/rapps/rapps/vc6run.txt | 64 +++++----- reactos/base/applications/rapps/rapps/vlc.txt | 60 ++++----- .../applications/rapps/rapps/winboard.txt | 54 ++++---- .../base/applications/rapps/rapps/wme9.txt | 54 ++++---- 74 files changed, 2244 insertions(+), 2199 deletions(-) create mode 100644 reactos/base/applications/rapps/rapps/mirc6.txt create mode 100644 reactos/base/applications/rapps/rapps/sumatrapdf.txt diff --git a/reactos/base/applications/rapps/rapps/7zip.txt b/reactos/base/applications/rapps/rapps/7zip.txt index 67b48b0d958..84da1e5ef3f 100644 --- a/reactos/base/applications/rapps/rapps/7zip.txt +++ b/reactos/base/applications/rapps/rapps/7zip.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = 7-Zip -Version = 9.20 -Licence = LGPL -Description = Utility to create and open 7zip, zip, tar, rar and other archive files. -Size = 1.0M -Category = 12 -URLSite = http://www.7-zip.org/ -URLDownload = http://ovh.dl.sourceforge.net/project/sevenzip/7-Zip/9.20/7z920.exe -CDPath = none - -[Section.0407] -Description = Tool zum Erstellen und Öffnen von 7zip, zip, tar, rar und andrern Archiven. - -[Section.040a] -Description = Utilidad para crear y abrir 7zip, zip, tar, rar y otros archivos comprimidos. - -[Section.040c] -Description = Utilitaire pour créer et ouvrir les fichiers 7zip, zip, tar, rar et autres archives. - -[Section.0415] -Description = Narzędzie do tworzenia i otwierania plików typu 7zip, zip, tar, i innych plików archiwizacyjnych. - -[Section.0422] -Description = Утиліта для створення та відкриття 7zip, zip, tar, rar та інших архівних файлів. +; UTF-8 + +[Section] +Name = 7-Zip +Version = 9.20 +Licence = LGPL +Description = Utility to create and open 7zip, zip, tar, rar and other archive files. +Size = 1.0M +Category = 12 +URLSite = http://www.7-zip.org/ +URLDownload = http://ovh.dl.sourceforge.net/project/sevenzip/7-Zip/9.20/7z920.exe +CDPath = none + +[Section.0407] +Description = Tool zum Erstellen und Öffnen von 7zip, zip, tar, rar und andrern Archiven. + +[Section.040a] +Description = Utilidad para crear y abrir 7zip, zip, tar, rar y otros archivos comprimidos. + +[Section.040c] +Description = Utilitaire pour créer et ouvrir les fichiers 7zip, zip, tar, rar et autres archives. + +[Section.0415] +Description = Narzędzie do tworzenia i otwierania plików typu 7zip, zip, tar, i innych plików archiwizacyjnych. + +[Section.0422] +Description = Утиліта для створення та відкриття 7zip, zip, tar, rar та інших архівних файлів. diff --git a/reactos/base/applications/rapps/rapps/abiword.txt b/reactos/base/applications/rapps/rapps/abiword.txt index fa162dbfca7..1660ba30d72 100644 --- a/reactos/base/applications/rapps/rapps/abiword.txt +++ b/reactos/base/applications/rapps/rapps/abiword.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = AbiWord -Version = 2.6.8 -Licence = GPL -Description = Word processor. -Size = 5.6MB -Category = 6 -URLSite = http://www.abisource.com/ -URLDownload = http://www.abisource.com/downloads/abiword/2.6.8/Windows/abiword-setup-2.6.8.exe -CDPath = none - -[Section.0407] -Description = Textverarbeitung. - -[Section.040a] -Description = Procesador de textos. - -[Section.040c] -Description = Éditeur de texte. - -[Section.0415] -Description = Edytor tekstu. - -[Section.0422] -Description = Текстовий процесор. +; UTF-8 + +[Section] +Name = AbiWord +Version = 2.6.8 +Licence = GPL +Description = Word processor. +Size = 5.6MB +Category = 6 +URLSite = http://www.abisource.com/ +URLDownload = http://www.abisource.com/downloads/abiword/2.6.8/Windows/abiword-setup-2.6.8.exe +CDPath = none + +[Section.0407] +Description = Textverarbeitung. + +[Section.040a] +Description = Procesador de textos. + +[Section.040c] +Description = Éditeur de texte. + +[Section.0415] +Description = Edytor tekstu. + +[Section.0422] +Description = Текстовий процесор. diff --git a/reactos/base/applications/rapps/rapps/abiword28x.txt b/reactos/base/applications/rapps/rapps/abiword28x.txt index 5b39f0ff7fa..ab3d57460a5 100644 --- a/reactos/base/applications/rapps/rapps/abiword28x.txt +++ b/reactos/base/applications/rapps/rapps/abiword28x.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = AbiWord -Version = 2.8.6 -Licence = GPL -Description = Word processor. -Size = 7.9MB -Category = 6 -URLSite = http://www.abisource.com/ -URLDownload = http://www.abisource.com/downloads/abiword/2.8.6/Windows/abiword-setup-2.8.6.exe -CDPath = none - -[Section.0407] -Description = Textverarbeitung. - -[Section.040a] -Description = Procesador de textos. - -[Section.040c] -Description = Éditeur de texte. - -[Section.0415] -Description = Edytor tekstu. - -[Section.0422] -Description = Текстовий процесор. +; UTF-8 + +[Section] +Name = AbiWord +Version = 2.8.6 +Licence = GPL +Description = Word processor. +Size = 7.9MB +Category = 6 +URLSite = http://www.abisource.com/ +URLDownload = http://www.abisource.com/downloads/abiword/2.8.6/Windows/abiword-setup-2.8.6.exe +CDPath = none + +[Section.0407] +Description = Textverarbeitung. + +[Section.040a] +Description = Procesador de textos. + +[Section.040c] +Description = Éditeur de texte. + +[Section.0415] +Description = Edytor tekstu. + +[Section.0422] +Description = Текстовий процесор. diff --git a/reactos/base/applications/rapps/rapps/abyss.txt b/reactos/base/applications/rapps/rapps/abyss.txt index 22dd23368bd..89e0d78ba54 100644 --- a/reactos/base/applications/rapps/rapps/abyss.txt +++ b/reactos/base/applications/rapps/rapps/abyss.txt @@ -1,26 +1,26 @@ -; UTF-8 - -[Section] -Name = Abyss Web server X1 -Version = 2.6 -Licence = Freeware -Description = Abyss Web Server enables you to host your Web sites on your computer. It supports secure SSL/TLS connections (HTTPS) as well as a wide range of Web technologies. It can also run advanced PHP, Perl, Python, ASP, ASP.NET, and Ruby on Rails Web applications, which can be backed by databases such as MySQL, SQLite, MS SQL Server, MS Access, or Oracle. -Size = 0.8M -Category = 5 -URLSite = http://www.aprelium.com/ -URLDownload = http://www.aprelium.com/data/abwsx1.exe -CDPath = none - -[Section.0407] -Description = Abyss Web Server ermöglicht es Webseiten auf Ihrem Computer zu hosten. Er unterstützt sichere SSL/TLS Verbindungen (HTTPS) sowie eine Vielfalt an Web Technologien. Er kann ebenfalls PHP, Perl, Python, ASP, ASP.NET, und Ruby on Rails Web Anwendungen ausführen, welche von Datenbanken, wie MySQL, SQLite, MS SQL Server, MS Access, oder Oracle unterstützt werden können. - -[Section.040c] -Description = Abyss Web Server vous permet d'héberger vos sites internet sur votre ordinateur. Il supporte les connexions sécurisées SSL/TLS (HTTPS) ainsi qu'un grand nombre de technologies web. Il peut également faire tourner des applications web PHP, Perl, Python, ASP, ASP.Net, Ruby et Ruby on Rails, qui peuvent être associées à des bases de données telles que MySQL, SQLite, MS SQL Server, MS Access ou Oracle. - -[Section.0415] -Description = Abyss Web Server pozwala Ci na stworzenie serwera WWW na własnym komputerze. Ten program obsługuje zabezpieczone połączenia typu SSL/TLS (HTTPS) i wiele technologii Sieci. -Może także uruchamiać zaawansowane aplikacje internetowe takie jak PHP, Perl, Python, ASP, ASP.NET, i Ruby on Rails. -Mogą one zostać oparte o MySQL, SQLite, MS SQL Server, MS Access, lub Oracle. - -[Section.0422] -Description = Abyss Web Server дозволить вам утримувати веб-сайти на вашому комп'ютері. Від підтримує безпечні SSL/TLS з'єднання (HTTPS) та великий ряд веб-технологій. Він також запускає PHP, Perl, Python, ASP, ASP.NET, та Ruby on Rails веб-додатки, які можуть підтримуватись такими базами даних, як MySQL, SQLite, MS SQL Server, MS Access, чи Oracle. +; UTF-8 + +[Section] +Name = Abyss Web server X1 +Version = 2.6 +Licence = Freeware +Description = Abyss Web Server enables you to host your Web sites on your computer. It supports secure SSL/TLS connections (HTTPS) as well as a wide range of Web technologies. It can also run advanced PHP, Perl, Python, ASP, ASP.NET, and Ruby on Rails Web applications, which can be backed by databases such as MySQL, SQLite, MS SQL Server, MS Access, or Oracle. +Size = 0.8M +Category = 5 +URLSite = http://www.aprelium.com/ +URLDownload = http://www.aprelium.com/data/abwsx1.exe +CDPath = none + +[Section.0407] +Description = Abyss Web Server ermöglicht es Webseiten auf Ihrem Computer zu hosten. Er unterstützt sichere SSL/TLS Verbindungen (HTTPS) sowie eine Vielfalt an Web Technologien. Er kann ebenfalls PHP, Perl, Python, ASP, ASP.NET, und Ruby on Rails Web Anwendungen ausführen, welche von Datenbanken, wie MySQL, SQLite, MS SQL Server, MS Access, oder Oracle unterstützt werden können. + +[Section.040c] +Description = Abyss Web Server vous permet d'héberger vos sites internet sur votre ordinateur. Il supporte les connexions sécurisées SSL/TLS (HTTPS) ainsi qu'un grand nombre de technologies web. Il peut également faire tourner des applications web PHP, Perl, Python, ASP, ASP.Net, Ruby et Ruby on Rails, qui peuvent être associées à des bases de données telles que MySQL, SQLite, MS SQL Server, MS Access ou Oracle. + +[Section.0415] +Description = Abyss Web Server pozwala Ci na stworzenie serwera WWW na własnym komputerze. Ten program obsługuje zabezpieczone połączenia typu SSL/TLS (HTTPS) i wiele technologii Sieci. +Może także uruchamiać zaawansowane aplikacje internetowe takie jak PHP, Perl, Python, ASP, ASP.NET, i Ruby on Rails. +Mogą one zostać oparte o MySQL, SQLite, MS SQL Server, MS Access, lub Oracle. + +[Section.0422] +Description = Abyss Web Server дозволить вам утримувати веб-сайти на вашому комп'ютері. Від підтримує безпечні SSL/TLS з'єднання (HTTPS) та великий ряд веб-технологій. Він також запускає PHP, Perl, Python, ASP, ASP.NET, та Ruby on Rails веб-додатки, які можуть підтримуватись такими базами даних, як MySQL, SQLite, MS SQL Server, MS Access, чи Oracle. diff --git a/reactos/base/applications/rapps/rapps/ac97forvirtualbox.txt b/reactos/base/applications/rapps/rapps/ac97forvirtualbox.txt index 2045060f589..d5d1b3a6da0 100644 --- a/reactos/base/applications/rapps/rapps/ac97forvirtualbox.txt +++ b/reactos/base/applications/rapps/rapps/ac97forvirtualbox.txt @@ -1,54 +1,54 @@ -; UTF-8 - -[Section] -Name = AC97 Driver for VirtualBox -Version = 5.10.00.3610 -Licence = Unknown -Description = Unzip in the "ReactOS" folder then restart ReactOS twice. -Size = 186kB -Category = 13 -URLSite = Unknown -URLDownload = http://svn.reactos.org/packages/ac97_vbox.exe -CDPath = none - -[Section.0405] -Name = Ovladač AC97 pro VirtualBox -Licence = Neznámá -Description = Rozbalte do složky "ReactOS" a pak ReactOS dvakrát restartujte. -URLSite = Neznámá - -[Section.0407] -Name = AC97 Treiber für VirtualBox -Licence = Unbekannt -Description = Entpacken in das "ReactOS"-Verzeichnis und ReactOS zweimal neustarten. -URLSite = Unbekannt - -[Section.040a] -Name = Driver AC97 para VirtualBox -Licence = Desconocida -Description = Descomprimir en la carpeta "Reactos" y reiniciar Reactos dos veces. -URLSite = Desconocida - -[Section.040c] -Name = Pilote AC97 pour VirtualBox -Licence = Inconnue -Description = Décompresser dans le dossier "ReactOS" puis redémarrer ReactOS deux fois. -URLSite = Inconnue - -[Section.0415] -Name = Sterownik AC97 dla VirtualBox -Licence = Nieznana -Description = Rozpakuj zawartość w folderze "ReactOS" i dwukrotnie zrestartuj system. -URLSite = Nieznana - -[Section.0419] -Name = Драйвер AC97 для VirtualBox -Licence = Не указано -Description = Pазархивируйте содержимое в папку "ReactOS", затем дважды перезагрузите систему. -URLSite = Не указано - -[Section.0422] -Name = Драйвер AC97 для VirtualBox -Licence = Невідома -Description = Pозархівуйте вміст в теку "ReactOS" після чого двічі перезавантажте систему. -URLSite = Не вказано +; UTF-8 + +[Section] +Name = AC97 Driver for VirtualBox +Version = 5.10.00.3610 +Licence = Unknown +Description = Unzip in the "ReactOS" folder then restart ReactOS twice. +Size = 186kB +Category = 13 +URLSite = Unknown +URLDownload = http://svn.reactos.org/packages/ac97_vbox.exe +CDPath = none + +[Section.0405] +Name = Ovladač AC97 pro VirtualBox +Licence = Neznámá +Description = Rozbalte do složky "ReactOS" a pak ReactOS dvakrát restartujte. +URLSite = Neznámá + +[Section.0407] +Name = AC97 Treiber für VirtualBox +Licence = Unbekannt +Description = Entpacken in das "ReactOS"-Verzeichnis und ReactOS zweimal neustarten. +URLSite = Unbekannt + +[Section.040a] +Name = Driver AC97 para VirtualBox +Licence = Desconocida +Description = Descomprimir en la carpeta "Reactos" y reiniciar Reactos dos veces. +URLSite = Desconocida + +[Section.040c] +Name = Pilote AC97 pour VirtualBox +Licence = Inconnue +Description = Décompresser dans le dossier "ReactOS" puis redémarrer ReactOS deux fois. +URLSite = Inconnue + +[Section.0415] +Name = Sterownik AC97 dla VirtualBox +Licence = Nieznana +Description = Rozpakuj zawartość w folderze "ReactOS" i dwukrotnie zrestartuj system. +URLSite = Nieznana + +[Section.0419] +Name = Драйвер AC97 для VirtualBox +Licence = Не указано +Description = Pазархивируйте содержимое в папку "ReactOS", затем дважды перезагрузите систему. +URLSite = Не указано + +[Section.0422] +Name = Драйвер AC97 для VirtualBox +Licence = Невідома +Description = Pозархівуйте вміст в теку "ReactOS" після чого двічі перезавантажте систему. +URLSite = Не вказано diff --git a/reactos/base/applications/rapps/rapps/audiograbber.txt b/reactos/base/applications/rapps/rapps/audiograbber.txt index 12b9ade82c8..5f8ed5c0bf4 100644 --- a/reactos/base/applications/rapps/rapps/audiograbber.txt +++ b/reactos/base/applications/rapps/rapps/audiograbber.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = Audio Grabber -Version = 1.83 SE -Licence = Freeware -Description = A very good CD Ripper/Audio File Converter. -Size = 1.6MB -Category = 1 -URLSite = http://www.audiograbber.de/ -URLDownload = http://www.audiograbber.de/files/4898276276/agsetup183se.exe -CDPath = none - -[Section.0407] -Description = Ein sehr guter CD-Ripper/Audio-Datei-Konverter. - -[Section.040a] -Description = Un buen CD Ripper/ conversor de archivos de audio. - -[Section.040c] -Description = Un très bon extracteur de CD/convertisseur de fichier audio. - -[Section.0415] -Description = Bardzo dobry CD Ripper/konwerter plików audio. - -[Section.0422] -Description = Чудовий CD Ріппер/Конвертер аудіо файлів. +; UTF-8 + +[Section] +Name = Audio Grabber +Version = 1.83 SE +Licence = Freeware +Description = A very good CD Ripper/Audio File Converter. +Size = 1.6MB +Category = 1 +URLSite = http://www.audiograbber.de/ +URLDownload = http://www.audiograbber.de/files/4898276276/agsetup183se.exe +CDPath = none + +[Section.0407] +Description = Ein sehr guter CD-Ripper/Audio-Datei-Konverter. + +[Section.040a] +Description = Un buen CD Ripper/ conversor de archivos de audio. + +[Section.040c] +Description = Un très bon extracteur de CD/convertisseur de fichier audio. + +[Section.0415] +Description = Bardzo dobry CD Ripper/konwerter plików audio. + +[Section.0422] +Description = Чудовий CD Ріппер/Конвертер аудіо файлів. diff --git a/reactos/base/applications/rapps/rapps/comctl32ocx.txt b/reactos/base/applications/rapps/rapps/comctl32ocx.txt index f0eac2345d5..b0aac593814 100644 --- a/reactos/base/applications/rapps/rapps/comctl32ocx.txt +++ b/reactos/base/applications/rapps/rapps/comctl32ocx.txt @@ -1,32 +1,32 @@ -; UTF-8 - -[Section] -Name = Microsoft Visual Basic 6.0 Common Controls -Version = 6.0 -Licence = Unknown -Description = File needed by some applications. -Size = 914kB -Category = 14 -URLSite = http://www.microsoft.com/downloads/details.aspx?FamilyID=25437D98-51D0-41C1-BB14-64662F5F62FE&displaylang=en -URLDownload = http://download.microsoft.com/download/3/a/5/3a5925ac-e779-4b1c-bb01-af67dc2f96fc/VisualBasic6-KB896559-v1-ENU.exe -CDPath = none - -[Section.0407] -Licence = Unbekannt -Description = Datei wird von einigen Anwendungen benötigt. - -[Section.040a] -Licence = Desconocida -Description = X es necesario para varias aplicaciones. - -[Section.040c] -Licence = Inconnue -Description = Fichier nécessaire pour certaines applications. - -[Section.0415] -Licence = Nieznana -Description = Microsoft Visual Basic 6.0 Common Controls jest używany przez część aplikacji. - -[Section.0422] -Licence = Невідома -Description = Файл потрібен декотрим програмам. +; UTF-8 + +[Section] +Name = Microsoft Visual Basic 6.0 Common Controls +Version = 6.0 +Licence = Unknown +Description = File needed by some applications. +Size = 914kB +Category = 14 +URLSite = http://www.microsoft.com/downloads/details.aspx?FamilyID=25437D98-51D0-41C1-BB14-64662F5F62FE&displaylang=en +URLDownload = http://download.microsoft.com/download/3/a/5/3a5925ac-e779-4b1c-bb01-af67dc2f96fc/VisualBasic6-KB896559-v1-ENU.exe +CDPath = none + +[Section.0407] +Licence = Unbekannt +Description = Datei wird von einigen Anwendungen benötigt. + +[Section.040a] +Licence = Desconocida +Description = X es necesario para varias aplicaciones. + +[Section.040c] +Licence = Inconnue +Description = Fichier nécessaire pour certaines applications. + +[Section.0415] +Licence = Nieznana +Description = Microsoft Visual Basic 6.0 Common Controls jest używany przez część aplikacji. + +[Section.0422] +Licence = Невідома +Description = Файл потрібен декотрим програмам. diff --git a/reactos/base/applications/rapps/rapps/diablo2.txt b/reactos/base/applications/rapps/rapps/diablo2.txt index 9c4b9b3ebf2..43c9d50fe92 100644 --- a/reactos/base/applications/rapps/rapps/diablo2.txt +++ b/reactos/base/applications/rapps/rapps/diablo2.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = Diablo II -Version = 1.4 -Licence = Shareware -Description = Diablo 2 Shareware. zeckensack's glide wrapper is required to run it. -Size = 132MB -Category = 4 -URLSite = http://www.blizzard.com/diablo2/ -URLDownload = http://pub.zoneofgames.ru/demos/diabloiidemo.exe -CDPath = none - -[Section.0407] -Description = Diablo 2 Shareware. zeckensacks glide wrapper wird zum Ausführen benötigt. - -[Section.040a] -Description = Diablo 2 Shareware. zeckensack's glide wrapper es necesario para su ejecución. - -[Section.040c] -Description = Diablo 2 Shareware. zeckensack's glide wrapper est requis pour le faire tourner. - -[Section.0415] -Description = Diablo 2 Shareware. Do poprawnego działania wymagany jest zainstalowany zeckensacks glide wrapper. - -[Section.0422] -Description = Diablo 2 Shareware. Для запуску потрібен zeckensack's glide wrapper. +; UTF-8 + +[Section] +Name = Diablo II +Version = 1.4 +Licence = Shareware +Description = Diablo 2 Shareware. zeckensack's glide wrapper is required to run it. +Size = 132MB +Category = 4 +URLSite = http://www.blizzard.com/diablo2/ +URLDownload = http://pub.zoneofgames.ru/demos/diabloiidemo.exe +CDPath = none + +[Section.0407] +Description = Diablo 2 Shareware. zeckensacks glide wrapper wird zum Ausführen benötigt. + +[Section.040a] +Description = Diablo 2 Shareware. zeckensack's glide wrapper es necesario para su ejecución. + +[Section.040c] +Description = Diablo 2 Shareware. zeckensack's glide wrapper est requis pour le faire tourner. + +[Section.0415] +Description = Diablo 2 Shareware. Do poprawnego działania wymagany jest zainstalowany zeckensacks glide wrapper. + +[Section.0422] +Description = Diablo 2 Shareware. Для запуску потрібен zeckensack's glide wrapper. diff --git a/reactos/base/applications/rapps/rapps/dosblaster.txt b/reactos/base/applications/rapps/rapps/dosblaster.txt index 28a5cb9f941..022294c295b 100644 --- a/reactos/base/applications/rapps/rapps/dosblaster.txt +++ b/reactos/base/applications/rapps/rapps/dosblaster.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = DosBlaster -Version = 2.5 -Licence = GPL -Description = DosBlaster is a Shell extension which makes it possible to open any DOS executabe in DOSBox via right click. This version contains DOSBox 0.70, but can be simply updated by installing a newer DOSBox into the DosBlaster folders. -Size = 2.1MB -Category = 15 -URLSite = http://dosblaster.sourceforge.net/ -URLDownload = http://surfnet.dl.sourceforge.net/project/dosblaster/DosBlaster%202.5%20%28x86%29/Downloads/DosbasterSetup_2_5.exe -CDPath = none - -[Section.0407] -Description = DosBlaster ist eine Shell Extension, die es ermöglicht jede DOS Anwendung via Rechtsklick in DOSBox zu öffnen. Diese Version beinhaltet DOSBox 0.70, kann aber sehr einfach aktualisiert werden, indem man ein neueres DOSBox in die DosBlaster Ordner installiert. - -[Section.040a] -Description = DosBlaster en una extensión Shell que permite abrir cualquier ejecutable DOS en DOSBox desde el botón derecho del ratón. Esta versión contiene DOSBox 0.70, pero puede ser actualizado facilmente instalando una nueva versión de DOSBox en la carpeta de DosBlaster. - -[Section.040c] -Description = DosBlaster est une extension Shell qui permet d'ouvrir n'importe quel exécutable DOS dans DOSBox via un click droit. Cette version contient DOSBox 0.70 mais peut être simplement mise à jour en installant une nouvelle version de DOSBox dans les répertoires de DosBlaster. - -[Section.0415] -Description = DosBlaster to rozszerzenie powłoki, które umożliwia otwarcie każdego DOS-owego pliku wykonywalnego w DOSBox za pomocą prawego klawisza myszki. Ta wersja zawiera DosBox 0.70, ale można go łatwo zaktualizować, instalując nowszą wersje DOSBox do folderów DosBlaster. - -[Section.0422] -Description = DosBlaster це розширення оболонки, яке дозволяє запустити будь-який виконавчий файл DOS в DOSBox через правий клік. Ця версія містить DOSBox 0.70, але може бути оновлена встановленням новішої версії DOSBox в теки DosBlaster. +; UTF-8 + +[Section] +Name = DosBlaster +Version = 2.5 +Licence = GPL +Description = DosBlaster is a Shell extension which makes it possible to open any DOS executabe in DOSBox via right click. This version contains DOSBox 0.70, but can be simply updated by installing a newer DOSBox into the DosBlaster folders. +Size = 2.1MB +Category = 15 +URLSite = http://dosblaster.sourceforge.net/ +URLDownload = http://surfnet.dl.sourceforge.net/project/dosblaster/DosBlaster%202.5%20%28x86%29/Downloads/DosbasterSetup_2_5.exe +CDPath = none + +[Section.0407] +Description = DosBlaster ist eine Shell Extension, die es ermöglicht jede DOS Anwendung via Rechtsklick in DOSBox zu öffnen. Diese Version beinhaltet DOSBox 0.70, kann aber sehr einfach aktualisiert werden, indem man ein neueres DOSBox in die DosBlaster Ordner installiert. + +[Section.040a] +Description = DosBlaster en una extensión Shell que permite abrir cualquier ejecutable DOS en DOSBox desde el botón derecho del ratón. Esta versión contiene DOSBox 0.70, pero puede ser actualizado facilmente instalando una nueva versión de DOSBox en la carpeta de DosBlaster. + +[Section.040c] +Description = DosBlaster est une extension Shell qui permet d'ouvrir n'importe quel exécutable DOS dans DOSBox via un click droit. Cette version contient DOSBox 0.70 mais peut être simplement mise à jour en installant une nouvelle version de DOSBox dans les répertoires de DosBlaster. + +[Section.0415] +Description = DosBlaster to rozszerzenie powłoki, które umożliwia otwarcie każdego DOS-owego pliku wykonywalnego w DOSBox za pomocą prawego klawisza myszki. Ta wersja zawiera DosBox 0.70, ale można go łatwo zaktualizować, instalując nowszą wersje DOSBox do folderów DosBlaster. + +[Section.0422] +Description = DosBlaster це розширення оболонки, яке дозволяє запустити будь-який виконавчий файл DOS в DOSBox через правий клік. Ця версія містить DOSBox 0.70, але може бути оновлена встановленням новішої версії DOSBox в теки DosBlaster. diff --git a/reactos/base/applications/rapps/rapps/dosbox.txt b/reactos/base/applications/rapps/rapps/dosbox.txt index 3d6d482b2e5..3c10329fab5 100644 --- a/reactos/base/applications/rapps/rapps/dosbox.txt +++ b/reactos/base/applications/rapps/rapps/dosbox.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = DOSBox -Version = 0.74 -Licence = GPL -Description = DOSBox is a DOS emulator. -Size = 1.4MB -Category = 15 -URLSite = http://www.dosbox.com/ -URLDownload = http://ovh.dl.sourceforge.net/project/dosbox/dosbox/0.74/DOSBox0.74-win32-installer.exe -CDPath = none - -[Section.0407] -Description = DOSBox ist ein DOS Emulator. - -[Section.040a] -Description = DOSBox es un emulador de DOS. - -[Section.040c] -Description = DOSBox est un émulateur DOS. - -[Section.0415] -Description = DOSBox - emulator DOSa. - -[Section.0422] -Description = DOSBox - емулятор DOSу. +; UTF-8 + +[Section] +Name = DOSBox +Version = 0.74 +Licence = GPL +Description = DOSBox is a DOS emulator. +Size = 1.4MB +Category = 15 +URLSite = http://www.dosbox.com/ +URLDownload = http://ovh.dl.sourceforge.net/project/dosbox/dosbox/0.74/DOSBox0.74-win32-installer.exe +CDPath = none + +[Section.0407] +Description = DOSBox ist ein DOS Emulator. + +[Section.040a] +Description = DOSBox es un emulador de DOS. + +[Section.040c] +Description = DOSBox est un émulateur DOS. + +[Section.0415] +Description = DOSBox - emulator DOSa. + +[Section.0422] +Description = DOSBox - емулятор DOSу. diff --git a/reactos/base/applications/rapps/rapps/fap.txt b/reactos/base/applications/rapps/rapps/fap.txt index 1721065e569..420e1cffa19 100644 --- a/reactos/base/applications/rapps/rapps/fap.txt +++ b/reactos/base/applications/rapps/rapps/fap.txt @@ -1,24 +1,24 @@ -; UTF-8 - -[Section] -Name = Fox Audio Player -Version = 0.8.3 -Licence = GPL -Description = Simple and lightweight audio player. -Size = 1.85MB -Category = 1 -URLSite = http://foxaudioplayer.sourceforge.net/ -URLDownload = http://svn.reactos.org/packages/fap-0.8.3-win32-bin.exe -CDPath = none - -[Section.0407] -Description = Kleiner und einfacher Mediaplayer. - -[Section.040c] -Description = Lecteur audio simple et léger. - -[Section.0415] -Description = Prosty i lekki odtwarzacz audio. - -[Section.0422] -Description = Простий та маленький програвач аудіо файлів. +; UTF-8 + +[Section] +Name = Fox Audio Player +Version = 0.8.3 +Licence = GPL +Description = Simple and lightweight audio player. +Size = 1.85MB +Category = 1 +URLSite = http://foxaudioplayer.sourceforge.net/ +URLDownload = http://svn.reactos.org/packages/fap-0.8.3-win32-bin.exe +CDPath = none + +[Section.0407] +Description = Kleiner und einfacher Mediaplayer. + +[Section.040c] +Description = Lecteur audio simple et léger. + +[Section.0415] +Description = Prosty i lekki odtwarzacz audio. + +[Section.0422] +Description = Простий та маленький програвач аудіо файлів. diff --git a/reactos/base/applications/rapps/rapps/firefox2.txt b/reactos/base/applications/rapps/rapps/firefox2.txt index 8805d25b374..816bf597e62 100644 --- a/reactos/base/applications/rapps/rapps/firefox2.txt +++ b/reactos/base/applications/rapps/rapps/firefox2.txt @@ -1,52 +1,52 @@ -; UTF-8 - -[Section] -Name = Mozilla Firefox 2.0 -Version = 2.0.0.20 -Licence = MPL/GPL/LGPL -Description = The most popular and one of the best free Web Browsers out there. -Size = 5.8M -Category = 5 -URLSite = http://www.mozilla.com/en-US/ -URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/en-US/Firefox%20Setup%202.0.0.20.exe -CDPath = none - -[Section.0405] -Description = Nejpopulárnější a jeden z nejlepších svobodných webových prohlížečů. -URLSite = http://www.mozilla-europe.org/cs/ -URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/cs/Firefox%20Setup%202.0.0.20.exe - -[Section.0407] -Description = Der populärste und einer der besten freien Webbrowser. -URLSite = http://www.mozilla-europe.org/de/ -URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/de/Firefox%20Setup%202.0.0.20.exe - -[Section.040a] -Description = El más popular y uno de los mejores navegadores web gratuitos que hay. -URLSite = http://www.mozilla-europe.org/es/ -URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/es-ES/Firefox%20Setup%202.0.0.20.exe - -[Section.040c] -Description = Le navigateur web gratuit le plus populaire et l'un des meilleurs. -URLSite = http://www.mozilla-europe.org/fr/ -URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/fr/Firefox%20Setup%202.0.0.20.exe - -[Section.0414] -Description = Mest populære og best også gratis nettleserene der ute. -URLSite = http://www.mozilla-europe.org/no/ -URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/nb-NO/Firefox%20Setup%202.0.0.20.exe - -[Section.0415] -Description = Najpopularniejsza i jedna z najlepszych darmowych przeglądarek internetowych. -URLSite = http://www.mozilla-europe.org/pl/ -URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/pl/Firefox%20Setup%202.0.0.20.exe - -[Section.0419] -Description = Один из самых популярных и лучших бесплатных браузеров. -URLSite = http://www.mozilla-europe.org/ru/ -URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/ru/Firefox%20Setup%202.0.0.20.exe - -[Section.0422] -Description = Найпопулярніший та один з кращих безплатних веб-браузерів. -URLSite = http://www.mozilla-europe.org/uk/ -URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/uk/Firefox%20Setup%202.0.0.20.exe +; UTF-8 + +[Section] +Name = Mozilla Firefox 2.0 +Version = 2.0.0.20 +Licence = MPL/GPL/LGPL +Description = The most popular and one of the best free Web Browsers out there. +Size = 5.8M +Category = 5 +URLSite = http://www.mozilla.com/en-US/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/en-US/Firefox%20Setup%202.0.0.20.exe +CDPath = none + +[Section.0405] +Description = Nejpopulárnější a jeden z nejlepších svobodných webových prohlížečů. +URLSite = http://www.mozilla-europe.org/cs/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/cs/Firefox%20Setup%202.0.0.20.exe + +[Section.0407] +Description = Der populärste und einer der besten freien Webbrowser. +URLSite = http://www.mozilla-europe.org/de/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/de/Firefox%20Setup%202.0.0.20.exe + +[Section.040a] +Description = El más popular y uno de los mejores navegadores web gratuitos que hay. +URLSite = http://www.mozilla-europe.org/es/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/es-ES/Firefox%20Setup%202.0.0.20.exe + +[Section.040c] +Description = Le navigateur web gratuit le plus populaire et l'un des meilleurs. +URLSite = http://www.mozilla-europe.org/fr/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/fr/Firefox%20Setup%202.0.0.20.exe + +[Section.0414] +Description = Mest populære og best også gratis nettleserene der ute. +URLSite = http://www.mozilla-europe.org/no/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/nb-NO/Firefox%20Setup%202.0.0.20.exe + +[Section.0415] +Description = Najpopularniejsza i jedna z najlepszych darmowych przeglądarek internetowych. +URLSite = http://www.mozilla-europe.org/pl/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/pl/Firefox%20Setup%202.0.0.20.exe + +[Section.0419] +Description = Один из самых популярных и лучших бесплатных браузеров. +URLSite = http://www.mozilla-europe.org/ru/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/ru/Firefox%20Setup%202.0.0.20.exe + +[Section.0422] +Description = Найпопулярніший та один з кращих безплатних веб-браузерів. +URLSite = http://www.mozilla-europe.org/uk/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/2.0.0.20/win32/uk/Firefox%20Setup%202.0.0.20.exe diff --git a/reactos/base/applications/rapps/rapps/firefox3.txt b/reactos/base/applications/rapps/rapps/firefox3.txt index efb4c4f578b..76855309d81 100644 --- a/reactos/base/applications/rapps/rapps/firefox3.txt +++ b/reactos/base/applications/rapps/rapps/firefox3.txt @@ -1,59 +1,59 @@ -; UTF-8 - -[Section] -Name = Mozilla Firefox 3.0 -Version = 3.0.19 -Licence = MPL/GPL/LGPL -Description = The most popular and one of the best free Web Browsers out there. -Size = 7.2M -Category = 5 -URLSite = http://www.mozilla.com/en-US/ -URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/en-US/Firefox%20Setup%203.0.19.exe -CDPath = none - -[Section.0405] -Description = Nejpopulárnější a jeden z nejlepších svobodných webových prohlížečů. -Size = 7.0M -URLSite = http://www.mozilla-europe.org/cs/ -URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/cs/Firefox%20Setup%203.0.19.exe - -[Section.0407] -Description = Der populärste und einer der besten freien Webbrowser. -Size = 7.0M -URLSite = http://www.mozilla-europe.org/de/ -URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/de/Firefox%20Setup%203.0.19.exe - -[Section.040a] -Description = El más popular y uno de los mejores navegadores web gratuitos que hay. -Size = 7.0M -URLSite = http://www.mozilla-europe.org/es/ -URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/es-ES/Firefox%20Setup%203.0.19.exe - -[Section.040c] -Description = Le navigateur web gratuit le plus populaire et l'un des meilleurs. -URLSite = http://www.mozilla-europe.org/fr/ -URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/fr/Firefox%20Setup%203.0.19.exe - -[Section.0414] -Description = Mest populære og best også gratis nettleserene der ute. -Size = 7.0M -URLSite = http://www.mozilla-europe.org/no/ -URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/nb-NO/Firefox%20Setup%203.0.19.exe - -[Section.0415] -Description = Najpopularniejsza i jedna z najlepszych darmowych przeglądarek internetowych. -Size = 7.9M -URLSite = http://www.mozilla-europe.org/pl/ -URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/pl/Firefox%20Setup%203.0.19.exe - -[Section.0419] -Description = Один из самых популярных и лучших бесплатных браузеров. -Size = 7.8M -URLSite = http://www.mozilla-europe.org/ru/ -URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/ru/Firefox%20Setup%203.0.19.exe - -[Section.0422] -Description = Найпопулярніший та один з кращих безплатних веб-браузерів. -Size = 7.4M -URLSite = http://www.mozilla-europe.org/uk/ -URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/uk/Firefox%20Setup%203.0.19.exe +; UTF-8 + +[Section] +Name = Mozilla Firefox 3.0 +Version = 3.0.19 +Licence = MPL/GPL/LGPL +Description = The most popular and one of the best free Web Browsers out there. +Size = 7.2M +Category = 5 +URLSite = http://www.mozilla.com/en-US/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/en-US/Firefox%20Setup%203.0.19.exe +CDPath = none + +[Section.0405] +Description = Nejpopulárnější a jeden z nejlepších svobodných webových prohlížečů. +Size = 7.0M +URLSite = http://www.mozilla-europe.org/cs/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/cs/Firefox%20Setup%203.0.19.exe + +[Section.0407] +Description = Der populärste und einer der besten freien Webbrowser. +Size = 7.0M +URLSite = http://www.mozilla-europe.org/de/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/de/Firefox%20Setup%203.0.19.exe + +[Section.040a] +Description = El más popular y uno de los mejores navegadores web gratuitos que hay. +Size = 7.0M +URLSite = http://www.mozilla-europe.org/es/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/es-ES/Firefox%20Setup%203.0.19.exe + +[Section.040c] +Description = Le navigateur web gratuit le plus populaire et l'un des meilleurs. +URLSite = http://www.mozilla-europe.org/fr/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/fr/Firefox%20Setup%203.0.19.exe + +[Section.0414] +Description = Mest populære og best også gratis nettleserene der ute. +Size = 7.0M +URLSite = http://www.mozilla-europe.org/no/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/nb-NO/Firefox%20Setup%203.0.19.exe + +[Section.0415] +Description = Najpopularniejsza i jedna z najlepszych darmowych przeglądarek internetowych. +Size = 7.9M +URLSite = http://www.mozilla-europe.org/pl/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/pl/Firefox%20Setup%203.0.19.exe + +[Section.0419] +Description = Один из самых популярных и лучших бесплатных браузеров. +Size = 7.8M +URLSite = http://www.mozilla-europe.org/ru/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/ru/Firefox%20Setup%203.0.19.exe + +[Section.0422] +Description = Найпопулярніший та один з кращих безплатних веб-браузерів. +Size = 7.4M +URLSite = http://www.mozilla-europe.org/uk/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.0.19-real-real/win32/uk/Firefox%20Setup%203.0.19.exe diff --git a/reactos/base/applications/rapps/rapps/firefox36.txt b/reactos/base/applications/rapps/rapps/firefox36.txt index 193a268b877..d8a96e71e56 100644 --- a/reactos/base/applications/rapps/rapps/firefox36.txt +++ b/reactos/base/applications/rapps/rapps/firefox36.txt @@ -1,54 +1,54 @@ -; UTF-8 - -[Section] -Name = Mozilla Firefox 3.6 -Version = 3.6.15 -Licence = MPL/GPL/LGPL -Description = The most popular and one of the best free Web Browsers out there. -Size = 8.2M -Category = 5 -URLSite = http://www.mozilla.com/en-US/ -URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.6.15/win32/en-US/Firefox%20Setup%203.6.15.exe -CDPath = none - -[Section.0407] -Description = Der populärste und einer der besten freien Webbrowser. -Size = 8.1M -URLSite = http://www.mozilla-europe.org/de/ -URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.6.15/win32/de/Firefox%20Setup%203.6.15.exe - -[Section.040a] -Description = El más popular y uno de los mejores navegadores web gratuitos que hay. -Size = 8.1M -URLSite = http://www.mozilla-europe.org/es/ -URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.6.15/win32/es-ES/Firefox%20Setup%203.6.15.exe - -[Section.040c] -Description = Le navigateur web gratuit le plus populaire et l'un des meilleurs. -Size = 8.1M -URLSite = http://www.mozilla-europe.org/fr/ -URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.6.15/win32/fr/Firefox%20Setup%203.6.15.exe - -[Section.0414] -Description = Mest populære og best også gratis nettleserene der ute. -Size = 8.1M -URLSite = http://www.mozilla-europe.org/no/ -URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.6.15/win32/nb-NO/Firefox%20Setup%203.6.15.exe - -[Section.0415] -Description = Najpopularniejsza i jedna z najlepszych darmowych przeglądarek internetowych. -Size = 8.9M -URLSite = http://www.mozilla-europe.org/pl/ -URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.6.15/win32/pl/Firefox%20Setup%203.6.15.exe - -[Section.0419] -Description = Один из самых популярных и лучших бесплатных браузеров. -Size = 8.5M -URLSite = http://www.mozilla-europe.org/ru/ -URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.6.15/win32/ru/Firefox%20Setup%203.6.15.exe - -[Section.0422] -Description = Найпопулярніший та один з кращих безплатних веб-браузерів. -Size = 8.5M -URLSite = http://www.mozilla-europe.org/uk/ -URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.6.15/win32/uk/Firefox%20Setup%203.6.15.exe +; UTF-8 + +[Section] +Name = Mozilla Firefox 3.6 +Version = 3.6.15 +Licence = MPL/GPL/LGPL +Description = The most popular and one of the best free Web Browsers out there. +Size = 8.2M +Category = 5 +URLSite = http://www.mozilla.com/en-US/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.6.15/win32/en-US/Firefox%20Setup%203.6.15.exe +CDPath = none + +[Section.0407] +Description = Der populärste und einer der besten freien Webbrowser. +Size = 8.1M +URLSite = http://www.mozilla-europe.org/de/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.6.15/win32/de/Firefox%20Setup%203.6.15.exe + +[Section.040a] +Description = El más popular y uno de los mejores navegadores web gratuitos que hay. +Size = 8.1M +URLSite = http://www.mozilla-europe.org/es/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.6.15/win32/es-ES/Firefox%20Setup%203.6.15.exe + +[Section.040c] +Description = Le navigateur web gratuit le plus populaire et l'un des meilleurs. +Size = 8.1M +URLSite = http://www.mozilla-europe.org/fr/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.6.15/win32/fr/Firefox%20Setup%203.6.15.exe + +[Section.0414] +Description = Mest populære og best også gratis nettleserene der ute. +Size = 8.1M +URLSite = http://www.mozilla-europe.org/no/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.6.15/win32/nb-NO/Firefox%20Setup%203.6.15.exe + +[Section.0415] +Description = Najpopularniejsza i jedna z najlepszych darmowych przeglądarek internetowych. +Size = 8.9M +URLSite = http://www.mozilla-europe.org/pl/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.6.15/win32/pl/Firefox%20Setup%203.6.15.exe + +[Section.0419] +Description = Один из самых популярных и лучших бесплатных браузеров. +Size = 8.5M +URLSite = http://www.mozilla-europe.org/ru/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.6.15/win32/ru/Firefox%20Setup%203.6.15.exe + +[Section.0422] +Description = Найпопулярніший та один з кращих безплатних веб-браузерів. +Size = 8.5M +URLSite = http://www.mozilla-europe.org/uk/ +URLDownload = ftp://ftp.mozilla.org/pub/firefox/releases/3.6.15/win32/uk/Firefox%20Setup%203.6.15.exe diff --git a/reactos/base/applications/rapps/rapps/freebasic.txt b/reactos/base/applications/rapps/rapps/freebasic.txt index 082c8ed62e0..616b90384b4 100644 --- a/reactos/base/applications/rapps/rapps/freebasic.txt +++ b/reactos/base/applications/rapps/rapps/freebasic.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = FreeBASIC -Version = 0.21.1 -Licence = GPL/LGPL -Description = Open Source BASIC Compiler. The BASIC syntax is compatible to QBASIC. -Size = 5.9MB -Category = 7 -URLSite = http://www.freebasic.net/ -URLDownload = http://freefr.dl.sourceforge.net/project/fbc/Binaries%20-%20Windows/FreeBASIC%200.21.1/FreeBASIC-0.21.1-win32.exe -CDPath = none - -[Section.0407] -Description = Open Source BASIC Compiler. Die BASIC Syntax ist kompatibel zu QBASIC. - -[Section.040a] -Description = Compilador BASIC de código abierto. El lenguaje BASIC es compatible con QBASIC. - -[Section.040c] -Description = Compilateur BASIC open source. La syntaxe du BASIC est compatible avec le QBASIC. - -[Section.0415] -Description = Otwarty kompilator BASIC, ze składnią kompatybilną z QBASIC. - -[Section.0422] -Description = Відкритий компілятор BASIC. Синтаксис сумісний з QBASIC. +; UTF-8 + +[Section] +Name = FreeBASIC +Version = 0.21.1 +Licence = GPL/LGPL +Description = Open Source BASIC Compiler. The BASIC syntax is compatible to QBASIC. +Size = 5.9MB +Category = 7 +URLSite = http://www.freebasic.net/ +URLDownload = http://freefr.dl.sourceforge.net/project/fbc/Binaries%20-%20Windows/FreeBASIC%200.21.1/FreeBASIC-0.21.1-win32.exe +CDPath = none + +[Section.0407] +Description = Open Source BASIC Compiler. Die BASIC Syntax ist kompatibel zu QBASIC. + +[Section.040a] +Description = Compilador BASIC de código abierto. El lenguaje BASIC es compatible con QBASIC. + +[Section.040c] +Description = Compilateur BASIC open source. La syntaxe du BASIC est compatible avec le QBASIC. + +[Section.0415] +Description = Otwarty kompilator BASIC, ze składnią kompatybilną z QBASIC. + +[Section.0422] +Description = Відкритий компілятор BASIC. Синтаксис сумісний з QBASIC. diff --git a/reactos/base/applications/rapps/rapps/glidewrapzbag.txt b/reactos/base/applications/rapps/rapps/glidewrapzbag.txt index 856947a8700..e8024abfca8 100644 --- a/reactos/base/applications/rapps/rapps/glidewrapzbag.txt +++ b/reactos/base/applications/rapps/rapps/glidewrapzbag.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = GlidewrapZbag -Version = 0.84c -Licence = Freeware -Description = glidewrapper needed to run Diablo 2 on ReactOS. -Size = 249kB -Category = 3 -URLSite = http://www.zeckensack.de/glide/index.html -URLDownload = http://www.zeckensack.de/glide/archive/GlideWrapper084c.exe -CDPath = none - -[Section.0407] -Description = glidewrapper ist erforderlich um Diablo2 in ReactOS auszuführen. - -[Section.040a] -Description = glidewrapper es necesario para ejecutar Diablo 2 en ReactOS. - -[Section.040c] -Description = glidewrapper est nécessaire pour faire tourner Diablo 2 dans ReactOS. - -[Section.0415] -Description = glidewrapper jest potrzebny do uruchomienia Diablo2 w ReactOS-ie. - -[Section.0422] -Description = glidewrapper необхідний для запуску Diablo2 в ReactOS. +; UTF-8 + +[Section] +Name = GlidewrapZbag +Version = 0.84c +Licence = Freeware +Description = glidewrapper needed to run Diablo 2 on ReactOS. +Size = 249kB +Category = 3 +URLSite = http://www.zeckensack.de/glide/index.html +URLDownload = http://www.zeckensack.de/glide/archive/GlideWrapper084c.exe +CDPath = none + +[Section.0407] +Description = glidewrapper ist erforderlich um Diablo2 in ReactOS auszuführen. + +[Section.040a] +Description = glidewrapper es necesario para ejecutar Diablo 2 en ReactOS. + +[Section.040c] +Description = glidewrapper est nécessaire pour faire tourner Diablo 2 dans ReactOS. + +[Section.0415] +Description = glidewrapper jest potrzebny do uruchomienia Diablo2 w ReactOS-ie. + +[Section.0422] +Description = glidewrapper необхідний для запуску Diablo2 в ReactOS. diff --git a/reactos/base/applications/rapps/rapps/go-oo.txt b/reactos/base/applications/rapps/rapps/go-oo.txt index 3b9682714e2..28e9fa68f1a 100644 --- a/reactos/base/applications/rapps/rapps/go-oo.txt +++ b/reactos/base/applications/rapps/rapps/go-oo.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = Go-OO -Version = 3.2.1-11 -Licence = LGPL -Description = Open Source Office Suite, based on Open Office, but way better. -Size = 181.0MB -Category = 6 -URLSite = http://www.go-oo.org/ -URLDownload = http://go-oo.mirrorbrain.org/stable/win32/3.2.1/GoOo-3.2.1-11.exe -CDPath = none - -[Section.0407] -Description = Open Source Office Suite, basierend auf Open Office, aber viel besser. - -[Section.040a] -Description = La suite de ofimática de código abierto. - -[Section.040c] -Description = Suite bureautique open source basée sur Open Office, mais bien meilleure. - -[Section.0415] -Description = Otwarty pakiet biurowy, bazujący na Open Office, ale znacznie lepszy. - -[Section.0422] -Description = Відкритий офісний пакет. +; UTF-8 + +[Section] +Name = Go-OO +Version = 3.2.1-11 +Licence = LGPL +Description = Open Source Office Suite, based on Open Office, but way better. +Size = 181.0MB +Category = 6 +URLSite = http://www.go-oo.org/ +URLDownload = http://go-oo.mirrorbrain.org/stable/win32/3.2.1/GoOo-3.2.1-11.exe +CDPath = none + +[Section.0407] +Description = Open Source Office Suite, basierend auf Open Office, aber viel besser. + +[Section.040a] +Description = La suite de ofimática de código abierto. + +[Section.040c] +Description = Suite bureautique open source basée sur Open Office, mais bien meilleure. + +[Section.0415] +Description = Otwarty pakiet biurowy, bazujący na Open Office, ale znacznie lepszy. + +[Section.0422] +Description = Відкритий офісний пакет. diff --git a/reactos/base/applications/rapps/rapps/irfanview.txt b/reactos/base/applications/rapps/rapps/irfanview.txt index 1e4600455ec..044d478cef0 100644 --- a/reactos/base/applications/rapps/rapps/irfanview.txt +++ b/reactos/base/applications/rapps/rapps/irfanview.txt @@ -1,32 +1,32 @@ -; UTF-8 - -[Section] -Name = IrfanView -Version = 4.28 -Licence = Freeware (for personal use) -Description = Viewer for all kinds of graphics/audio files/video files. -Size = 1.3MB -Category = 3 -URLSite = http://www.irfanview.com/ -URLDownload = http://irfanview.tuwien.ac.at/iview428_setup.exe -CDPath = none - -[Section.0407] -Licence = Freeware für nichtkommerzielle Nutzung -Description = Anzeigeprogramm für alle Arten von Grafik-/Audio- oder Video-Dateien. - -[Section.040a] -Licence = Gratuito (para uso personal) -Description = Visor para toda clase de archivos de imagen,audio y video. - -[Section.040c] -Licence = Gratuit (pour un usage personnel) -Description = Visionneur pour tous les types de fichiers graphiques/audio/vidéo. - -[Section.0415] -Licence = Freeware (dla użytku domowego) -Description = Przeglądarka dla bardzo wielu typów obrazów, plików audio oraz wideo. - -[Section.0422] -Licence = Freeware (для домашнього використання) -Description = Переглядач для всіх видів графічних та аудіо/відео файлів. +; UTF-8 + +[Section] +Name = IrfanView +Version = 4.28 +Licence = Freeware (for personal use) +Description = Viewer for all kinds of graphics/audio files/video files. +Size = 1.3MB +Category = 3 +URLSite = http://www.irfanview.com/ +URLDownload = http://irfanview.tuwien.ac.at/iview428_setup.exe +CDPath = none + +[Section.0407] +Licence = Freeware für nichtkommerzielle Nutzung +Description = Anzeigeprogramm für alle Arten von Grafik-/Audio- oder Video-Dateien. + +[Section.040a] +Licence = Gratuito (para uso personal) +Description = Visor para toda clase de archivos de imagen,audio y video. + +[Section.040c] +Licence = Gratuit (pour un usage personnel) +Description = Visionneur pour tous les types de fichiers graphiques/audio/vidéo. + +[Section.0415] +Licence = Freeware (dla użytku domowego) +Description = Przeglądarka dla bardzo wielu typów obrazów, plików audio oraz wideo. + +[Section.0422] +Licence = Freeware (для домашнього використання) +Description = Переглядач для всіх видів графічних та аудіо/відео файлів. diff --git a/reactos/base/applications/rapps/rapps/irfanviewplugins.txt b/reactos/base/applications/rapps/rapps/irfanviewplugins.txt index 1ae86a3a4fb..7a116f1d9ef 100644 --- a/reactos/base/applications/rapps/rapps/irfanviewplugins.txt +++ b/reactos/base/applications/rapps/rapps/irfanviewplugins.txt @@ -1,32 +1,32 @@ -; UTF-8 - -[Section] -Name = IrfanView Plugins -Version = 4.28 -Licence = Freeware (for personal use) -Description = Additional Plugins for supporting more file types. -Size = 7.8MB -Category = 3 -URLSite = http://www.irfanview.com/ -URLDownload = http://irfanview.tuwien.ac.at/plugins/irfanview_plugins_428_setup.exe -CDPath = none - -[Section.0407] -Licence = Freeware für nichtkommerzielle Nutzung -Description = Zusätzlich Plugins zur Unterstützung von weiteren Dateitypen. - -[Section.040a] -Licence = Gratuito (para uso personal) -Description = Complementos adicionales para soportar más formatos. - -[Section.040c] -Licence = Gratuit (pour un usage personnel) -Description = Modules additionnels pour supporter plus de types de fichiers. - -[Section.0415] -Licence = Freeware (dla użytku domowego) -Description = Wtyczki otwierające dodatkowe typy plików w Irfanview. - -[Section.0422] -Licence = Freeware (для домашнього використання) -Description = Додаткові плагіни для підтримки більшої кількості файлових типів. +; UTF-8 + +[Section] +Name = IrfanView Plugins +Version = 4.28 +Licence = Freeware (for personal use) +Description = Additional Plugins for supporting more file types. +Size = 7.8MB +Category = 3 +URLSite = http://www.irfanview.com/ +URLDownload = http://irfanview.tuwien.ac.at/plugins/irfanview_plugins_428_setup.exe +CDPath = none + +[Section.0407] +Licence = Freeware für nichtkommerzielle Nutzung +Description = Zusätzlich Plugins zur Unterstützung von weiteren Dateitypen. + +[Section.040a] +Licence = Gratuito (para uso personal) +Description = Complementos adicionales para soportar más formatos. + +[Section.040c] +Licence = Gratuit (pour un usage personnel) +Description = Modules additionnels pour supporter plus de types de fichiers. + +[Section.0415] +Licence = Freeware (dla użytku domowego) +Description = Wtyczki otwierające dodatkowe typy plików w Irfanview. + +[Section.0422] +Licence = Freeware (для домашнього використання) +Description = Додаткові плагіни для підтримки більшої кількості файлових типів. diff --git a/reactos/base/applications/rapps/rapps/kdewin.txt b/reactos/base/applications/rapps/rapps/kdewin.txt index 8fbdaa8bd2b..d3b6383f61c 100644 --- a/reactos/base/applications/rapps/rapps/kdewin.txt +++ b/reactos/base/applications/rapps/rapps/kdewin.txt @@ -1,24 +1,24 @@ -; UTF-8 - -[Section] -Name = K Desktop Environment -Version = 0.9.8-1 -Licence = GPL -Description = KDE for Windows. -Size = 2.0MB -Category = 15 -URLSite = http://www.winkde.org/ -URLDownload = http://www.winkde.org/pub/kde/ports/win32/installer/kdewin-installer-gui-0.9.8-1.exe -CDPath = none - -[Section.0407] -Description = KDE für Windows. - -[Section.040c] -Description = KDE pour Windows. - -[Section.0415] -Description = KDE dla Windows. - -[Section.0422] -Description = KDE для Windows. +; UTF-8 + +[Section] +Name = K Desktop Environment +Version = 0.9.8-1 +Licence = GPL +Description = KDE for Windows. +Size = 2.0MB +Category = 15 +URLSite = http://www.winkde.org/ +URLDownload = http://www.winkde.org/pub/kde/ports/win32/installer/kdewin-installer-gui-0.9.8-1.exe +CDPath = none + +[Section.0407] +Description = KDE für Windows. + +[Section.040c] +Description = KDE pour Windows. + +[Section.0415] +Description = KDE dla Windows. + +[Section.0422] +Description = KDE для Windows. diff --git a/reactos/base/applications/rapps/rapps/lbreakout2.txt b/reactos/base/applications/rapps/rapps/lbreakout2.txt index 2df8e90c02b..82da4bb8ae2 100644 --- a/reactos/base/applications/rapps/rapps/lbreakout2.txt +++ b/reactos/base/applications/rapps/rapps/lbreakout2.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = LBreakout2 -Version = 2.4.1 -Licence = GPL -Description = Breakout Clone using SDL libs. -Size = 3.1MB -Category = 4 -URLSite = http://lgames.sourceforge.net/index.php?project=LBreakout2 -URLDownload = http://ovh.dl.sourceforge.net/project/lgames/binaries/lbreakout2-2.4.1-win32.exe -CDPath = none - -[Section.0407] -Description = Breakout-Klon verwendet SDL Bibliothek. - -[Section.040a] -Description = Clon de Breakout usando las librerias SDL. - -[Section.040c] -Description = Clone de casse-brique utilisant la bibliothèque SDL. - -[Section.0415] -Description = Klon Breakouta/Arkanoida napisany przy użyciu biblioteki SDL. - -[Section.0422] -Description = Клон Breakouta/Arkanoida, що використовує бібліотеки SDL. +; UTF-8 + +[Section] +Name = LBreakout2 +Version = 2.4.1 +Licence = GPL +Description = Breakout Clone using SDL libs. +Size = 3.1MB +Category = 4 +URLSite = http://lgames.sourceforge.net/index.php?project=LBreakout2 +URLDownload = http://ovh.dl.sourceforge.net/project/lgames/binaries/lbreakout2-2.4.1-win32.exe +CDPath = none + +[Section.0407] +Description = Breakout-Klon verwendet SDL Bibliothek. + +[Section.040a] +Description = Clon de Breakout usando las librerias SDL. + +[Section.040c] +Description = Clone de casse-brique utilisant la bibliothèque SDL. + +[Section.0415] +Description = Klon Breakouta/Arkanoida napisany przy użyciu biblioteki SDL. + +[Section.0422] +Description = Клон Breakouta/Arkanoida, що використовує бібліотеки SDL. diff --git a/reactos/base/applications/rapps/rapps/lgeneral.txt b/reactos/base/applications/rapps/rapps/lgeneral.txt index e0d24ab1df9..a3fd16d924b 100644 --- a/reactos/base/applications/rapps/rapps/lgeneral.txt +++ b/reactos/base/applications/rapps/rapps/lgeneral.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = LGeneral -Version = 1.1 -Licence = GPL -Description = Panzer General Clone using SDL libs. -Size = 2.0MB -Category = 4 -URLSite = http://lgames.sourceforge.net/index.php?project=LGeneral -URLDownload = http://ovh.dl.sourceforge.net/project/lgames/binaries/lgeneral-1.1-win32.exe -CDPath = none - -[Section.0407] -Description = Panzer-General-Klon verwendet SDL Bibliotheken. - -[Section.040a] -Description = Clon de Panzer General usando las librerias SDL. - -[Section.040c] -Description = Clone de Pansez General utilisant la bibliothèque SDL. - -[Section.0415] -Description = Klon gry Panzer General napisany przy użyciu biblioteki SDL. - -[Section.0422] -Description = Клон гри Panzer General, що використовує бібліотеки SDL. +; UTF-8 + +[Section] +Name = LGeneral +Version = 1.1 +Licence = GPL +Description = Panzer General Clone using SDL libs. +Size = 2.0MB +Category = 4 +URLSite = http://lgames.sourceforge.net/index.php?project=LGeneral +URLDownload = http://ovh.dl.sourceforge.net/project/lgames/binaries/lgeneral-1.1-win32.exe +CDPath = none + +[Section.0407] +Description = Panzer-General-Klon verwendet SDL Bibliotheken. + +[Section.040a] +Description = Clon de Panzer General usando las librerias SDL. + +[Section.040c] +Description = Clone de Pansez General utilisant la bibliothèque SDL. + +[Section.0415] +Description = Klon gry Panzer General napisany przy użyciu biblioteki SDL. + +[Section.0422] +Description = Клон гри Panzer General, що використовує бібліотеки SDL. diff --git a/reactos/base/applications/rapps/rapps/libreoffice.txt b/reactos/base/applications/rapps/rapps/libreoffice.txt index b13e69e92db..93805ef8f7d 100644 --- a/reactos/base/applications/rapps/rapps/libreoffice.txt +++ b/reactos/base/applications/rapps/rapps/libreoffice.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = LibreOffice -Version = 3.3.1 -Licence = LGPL -Description = Former called OpenOffice. Open Source Office Suite. -Size = 213.4MB -Category = 6 -URLSite = http://www.documentfoundation.org/ -URLDownload = http://download.documentfoundation.org/libreoffice/stable/3.3.1/win/x86/LibO_3.3.1_Win_x86_install_multi.exe -CDPath = none - -[Section.0407] -Description = Vorher bekannt als OpenOffice. Open Source Office Suite. - -[Section.040a] -Description = La suite de ofimática de código abierto. - -[Section.040c] -Description = Précédemment appelé OpenOffice. Suite bureautique open source. - -[Section.0415] -Description = Otwarty pakiet biurowy. - -[Section.0422] -Description = Відкритий офісний пакет. +; UTF-8 + +[Section] +Name = LibreOffice +Version = 3.3.1 +Licence = LGPL +Description = Former called OpenOffice. Open Source Office Suite. +Size = 213.4MB +Category = 6 +URLSite = http://www.documentfoundation.org/ +URLDownload = http://download.documentfoundation.org/libreoffice/stable/3.3.1/win/x86/LibO_3.3.1_Win_x86_install_multi.exe +CDPath = none + +[Section.0407] +Description = Vorher bekannt als OpenOffice. Open Source Office Suite. + +[Section.040a] +Description = La suite de ofimática de código abierto. + +[Section.040c] +Description = Précédemment appelé OpenOffice. Suite bureautique open source. + +[Section.0415] +Description = Otwarty pakiet biurowy. + +[Section.0422] +Description = Відкритий офісний пакет. diff --git a/reactos/base/applications/rapps/rapps/lmarbles.txt b/reactos/base/applications/rapps/rapps/lmarbles.txt index 41e63fce9e9..d2beeef014d 100644 --- a/reactos/base/applications/rapps/rapps/lmarbles.txt +++ b/reactos/base/applications/rapps/rapps/lmarbles.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = LMarbles -Version = 1.0.6 -Licence = GPL -Description = Atomix Clone using SDL libs. -Size = 1.4MB -Category = 4 -URLSite = http://lgames.sourceforge.net/index.php?project=LMarbles -URLDownload = http://ovh.dl.sourceforge.net/project/lgames/binaries/lmarbles-1.0.6-win32.exe -CDPath = none - -[Section.0407] -Description = Atomix-Klon verwendet SDL Bibliotheken. - -[Section.040a] -Description = Clon de Atomix usando las librerias SDL. - -[Section.040c] -Description = Clone de Atomix utilisant la bibliothèque SDL. - -[Section.0415] -Description = Klon gry Atomix, używający biblioteki SDL. - -[Section.0422] -Description = Клон гри Atomix, що використовує бібліотеки SDL. +; UTF-8 + +[Section] +Name = LMarbles +Version = 1.0.6 +Licence = GPL +Description = Atomix Clone using SDL libs. +Size = 1.4MB +Category = 4 +URLSite = http://lgames.sourceforge.net/index.php?project=LMarbles +URLDownload = http://ovh.dl.sourceforge.net/project/lgames/binaries/lmarbles-1.0.6-win32.exe +CDPath = none + +[Section.0407] +Description = Atomix-Klon verwendet SDL Bibliotheken. + +[Section.040a] +Description = Clon de Atomix usando las librerias SDL. + +[Section.040c] +Description = Clone de Atomix utilisant la bibliothèque SDL. + +[Section.0415] +Description = Klon gry Atomix, używający biblioteki SDL. + +[Section.0422] +Description = Клон гри Atomix, що використовує бібліотеки SDL. diff --git a/reactos/base/applications/rapps/rapps/mfc40.txt b/reactos/base/applications/rapps/rapps/mfc40.txt index a7443bf7c69..58e1f4ebe02 100644 --- a/reactos/base/applications/rapps/rapps/mfc40.txt +++ b/reactos/base/applications/rapps/rapps/mfc40.txt @@ -1,37 +1,37 @@ -; UTF-8 - -[Section] -Name = OLE Viewer and Microsoft Foundation Classes version 4 -Version = 4.0 -Licence = Unknown -Description = MFC 4 is needed by some applications. -Size = 865kB -Category = 14 -URLSite = http://support.microsoft.com/kb/122244/ -URLDownload = http://download.microsoft.com/download/ole/ole2v/3.5/w351/en-us/ole2v.exe -CDPath = none - -[Section.0407] -Name = OLE Anzeige und Microsoft Foundation Classes Version 4 -Licence = Unbekannt -Description = MFC 4 wird von einigen Anwendungen benötigt. - -[Section.040a] -Name = Visor OLE y Microsoft Foundation Classes Version 4 -Licence = Desconocida -Description = MFC 4 es necesario para varias aplicaciones. - -[Section.040c] -Name = Visionneur OLE et Microsoft Foundation Classes version 4 -Licence = Inconnue -Description = MFC 4 est nécessaire pour certaines applications. - -[Section.0415] -Name = Przeglądarka OLE oraz MFC (Microsoft Foundation Classes) wersja 4 -Licence = Nieznana -Description = Biblioteka MFC 4 jest używana przez część aplikacji. - -[Section.0422] -Name = Переглядач OLE та MFC (Microsoft Foundation Classes) версія 4 -Licence = Невідома -Description = Бібліотека MFC 4 необхідна декотрим програмам. +; UTF-8 + +[Section] +Name = OLE Viewer and Microsoft Foundation Classes version 4 +Version = 4.0 +Licence = Unknown +Description = MFC 4 is needed by some applications. +Size = 865kB +Category = 14 +URLSite = http://support.microsoft.com/kb/122244/ +URLDownload = http://download.microsoft.com/download/ole/ole2v/3.5/w351/en-us/ole2v.exe +CDPath = none + +[Section.0407] +Name = OLE Anzeige und Microsoft Foundation Classes Version 4 +Licence = Unbekannt +Description = MFC 4 wird von einigen Anwendungen benötigt. + +[Section.040a] +Name = Visor OLE y Microsoft Foundation Classes Version 4 +Licence = Desconocida +Description = MFC 4 es necesario para varias aplicaciones. + +[Section.040c] +Name = Visionneur OLE et Microsoft Foundation Classes version 4 +Licence = Inconnue +Description = MFC 4 est nécessaire pour certaines applications. + +[Section.0415] +Name = Przeglądarka OLE oraz MFC (Microsoft Foundation Classes) wersja 4 +Licence = Nieznana +Description = Biblioteka MFC 4 jest używana przez część aplikacji. + +[Section.0422] +Name = Переглядач OLE та MFC (Microsoft Foundation Classes) версія 4 +Licence = Невідома +Description = Бібліотека MFC 4 необхідна декотрим програмам. diff --git a/reactos/base/applications/rapps/rapps/mingw.txt b/reactos/base/applications/rapps/rapps/mingw.txt index a1adf02d547..fb31d173adf 100644 --- a/reactos/base/applications/rapps/rapps/mingw.txt +++ b/reactos/base/applications/rapps/rapps/mingw.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = MinGW -Version = 20100909 -Licence = Public domain/GPL -Description = A Port of the GNU toolchain with GCC, GDB, GNU make, etc. -Size = 568kb -Category = 7 -URLSite = http://mingw.org/ -URLDownload = http://ovh.dl.sourceforge.net/project/mingw/Automated%20MinGW%20Installer/mingw-get-inst/mingw-get-inst-20100909/mingw-get-inst-20100909.exe -CDPath = none - -[Section.0407] -Description = Eine Portierung der GNU Werkzeugkette mit GCC, GDB, GNU make usw. - -[Section.040a] -Description = Es una cadena de herramientas GNU con GCC, GDB, GNU make, etc. - -[Section.040c] -Description = Un portage de la chaîne d'outils GNU avec GCC, GDB, GNU make, etc. - -[Section.0415] -Description = Kompilator GCC dla platformy Windows wraz z dodatkowymi narzędziami (GDB, make, itd.). - -[Section.0422] -Description = Компілятор GCC для платформи Windows з додатковими інструментами GDB, GNU make, та ін. +; UTF-8 + +[Section] +Name = MinGW +Version = 20100909 +Licence = Public domain/GPL +Description = A Port of the GNU toolchain with GCC, GDB, GNU make, etc. +Size = 568kb +Category = 7 +URLSite = http://mingw.org/ +URLDownload = http://ovh.dl.sourceforge.net/project/mingw/Automated%20MinGW%20Installer/mingw-get-inst/mingw-get-inst-20100909/mingw-get-inst-20100909.exe +CDPath = none + +[Section.0407] +Description = Eine Portierung der GNU Werkzeugkette mit GCC, GDB, GNU make usw. + +[Section.040a] +Description = Es una cadena de herramientas GNU con GCC, GDB, GNU make, etc. + +[Section.040c] +Description = Un portage de la chaîne d'outils GNU avec GCC, GDB, GNU make, etc. + +[Section.0415] +Description = Kompilator GCC dla platformy Windows wraz z dodatkowymi narzędziami (GDB, make, itd.). + +[Section.0422] +Description = Компілятор GCC для платформи Windows з додатковими інструментами GDB, GNU make, та ін. diff --git a/reactos/base/applications/rapps/rapps/mirandaim.txt b/reactos/base/applications/rapps/rapps/mirandaim.txt index a2a7ded0b87..68ff3854ab0 100644 --- a/reactos/base/applications/rapps/rapps/mirandaim.txt +++ b/reactos/base/applications/rapps/rapps/mirandaim.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = Miranda IM -Version = 0.9.17 -Licence = GPL -Description = Open source multiprotocol instant messaging application - May not work completely. -Size = 3.0MB -Category = 5 -URLSite = http://www.miranda-im.org/ -URLDownload = http://miranda.googlecode.com/files/miranda-im-v0.9.17-unicode.exe -CDPath = none - -[Section.0407] -Description = Open source Multiprotokoll Instant Messaging Anwendung - funktioniert möglicherweise nicht vollständig. - -[Section.040a] -Description = Aplicación de mensajería instantánea multiprotocolo de código abierto - Puede no funcionar en su totalidad. - -[Section.040c] -Description = Application de messagerie instantannée multi-protocoles open source - pourrait ne pas fonctionner complètement. - -[Section.0415] -Description = Otwarty komunikator internetowy, obsługujący wiele różnych protokołów (m.in. GG, Tlen, Jabber, ICQ, IRC) - może nie działać prawidłowo. - -[Section.0422] -Description = Відкрита мультипротокольна програма миттєвих повідомлень - може не працювати повністю. +; UTF-8 + +[Section] +Name = Miranda IM +Version = 0.9.17 +Licence = GPL +Description = Open source multiprotocol instant messaging application - May not work completely. +Size = 3.0MB +Category = 5 +URLSite = http://www.miranda-im.org/ +URLDownload = http://miranda.googlecode.com/files/miranda-im-v0.9.17-unicode.exe +CDPath = none + +[Section.0407] +Description = Open source Multiprotokoll Instant Messaging Anwendung - funktioniert möglicherweise nicht vollständig. + +[Section.040a] +Description = Aplicación de mensajería instantánea multiprotocolo de código abierto - Puede no funcionar en su totalidad. + +[Section.040c] +Description = Application de messagerie instantannée multi-protocoles open source - pourrait ne pas fonctionner complètement. + +[Section.0415] +Description = Otwarty komunikator internetowy, obsługujący wiele różnych protokołów (m.in. GG, Tlen, Jabber, ICQ, IRC) - może nie działać prawidłowo. + +[Section.0422] +Description = Відкрита мультипротокольна програма миттєвих повідомлень - може не працювати повністю. diff --git a/reactos/base/applications/rapps/rapps/mirc.txt b/reactos/base/applications/rapps/rapps/mirc.txt index 05b5913e31b..64ca1bb5a56 100644 --- a/reactos/base/applications/rapps/rapps/mirc.txt +++ b/reactos/base/applications/rapps/rapps/mirc.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = mIRC -Version = 7.19 -Licence = Shareware -Description = The most popular client for the Internet Relay Chat (IRC). -Size = 1.9M -Category = 5 -URLSite = http://www.mirc.com/ -URLDownload = http://download.mirc.com/mirc719.exe -CDPath = none - -[Section.0407] -Description = Der populärste Client für Internet Relay Chat (IRC). - -[Section.040a] -Description = El más popular cliente para Internet Relay Chat (IRC). - -[Section.040c] -Description = Le client le plus populaire pour l'Internet Relay Chat (IRC). - -[Section.0415] -Description = Najpopularniejszy klient IRC (Internet Relay Chat). - -[Section.0422] -Description = Найпопулярніший клієнт IRC (Internet Relay Chat). +; UTF-8 + +[Section] +Name = mIRC 7 +Version = 7.19 +Licence = Shareware +Description = The most popular client for the Internet Relay Chat (IRC). +Size = 1.9M +Category = 5 +URLSite = http://www.mirc.com/ +URLDownload = http://download.mirc.com/mirc719.exe +CDPath = none + +[Section.0407] +Description = Der populärste Client für Internet Relay Chat (IRC). + +[Section.040a] +Description = El más popular cliente para Internet Relay Chat (IRC). + +[Section.040c] +Description = Le client le plus populaire pour l'Internet Relay Chat (IRC). + +[Section.0415] +Description = Najpopularniejszy klient IRC (Internet Relay Chat). + +[Section.0422] +Description = Найпопулярніший клієнт IRC (Internet Relay Chat). diff --git a/reactos/base/applications/rapps/rapps/mirc6.txt b/reactos/base/applications/rapps/rapps/mirc6.txt new file mode 100644 index 00000000000..1debcaa7e62 --- /dev/null +++ b/reactos/base/applications/rapps/rapps/mirc6.txt @@ -0,0 +1,27 @@ +; UTF-8 + +[Section] +Name = mIRC 6 +Version = 6.35 +Licence = Shareware +Description = The most popular client for the Internet Relay Chat (IRC). +Size = 1.9M +Category = 5 +URLSite = http://www.mirc.com/ +URLDownload = http://download.mirc.com/mirc635.exe +CDPath = none + +[Section.0407] +Description = Der populärste Client für Internet Relay Chat (IRC). + +[Section.040a] +Description = El más popular cliente para Internet Relay Chat (IRC). + +[Section.040c] +Description = Le client le plus populaire pour l'Internet Relay Chat (IRC). + +[Section.0415] +Description = Najpopularniejszy klient IRC (Internet Relay Chat). + +[Section.0422] +Description = Найпопулярніший клієнт IRC (Internet Relay Chat). diff --git a/reactos/base/applications/rapps/rapps/mono2.txt b/reactos/base/applications/rapps/rapps/mono2.txt index 5d2aefb6f19..3b4b6c0dfad 100644 --- a/reactos/base/applications/rapps/rapps/mono2.txt +++ b/reactos/base/applications/rapps/rapps/mono2.txt @@ -1,21 +1,21 @@ -; UTF-8 - -[Section] -Name = Mono .net Development Framework -Version = 2.8.2 -Licence = Unknown -Description = Open Source .net Framework. -Size = 77MB -Category = 14 -URLSite = http://www.mono-project.com/Main_Page -URLDownload = http://ftp.novell.com/pub/mono/archive/2.8.2/windows-installer/1/mono-2.8.2-gtksharp-2.12.10-win32-1.exe -CDPath = none - -[Section.040c] -Description = Framework .net open source. - -[Section.0415] -Description = Pakiet Mono .net Framework dla Programistów. - -[Section.0422] -Description = Відкритий .net Фреймворк. +; UTF-8 + +[Section] +Name = Mono .net Development Framework +Version = 2.8.2 +Licence = Unknown +Description = Open Source .net Framework. +Size = 77MB +Category = 14 +URLSite = http://www.mono-project.com/Main_Page +URLDownload = http://ftp.novell.com/pub/mono/archive/2.8.2/windows-installer/1/mono-2.8.2-gtksharp-2.12.10-win32-1.exe +CDPath = none + +[Section.040c] +Description = Framework .net open source. + +[Section.0415] +Description = Pakiet Mono .net Framework dla Programistów. + +[Section.0422] +Description = Відкритий .net Фреймворк. diff --git a/reactos/base/applications/rapps/rapps/mpc.txt b/reactos/base/applications/rapps/rapps/mpc.txt index de3ce03e540..5c369cf8fd9 100644 --- a/reactos/base/applications/rapps/rapps/mpc.txt +++ b/reactos/base/applications/rapps/rapps/mpc.txt @@ -1,30 +1,30 @@ -; UTF-8 - -[Section] -Name = Media Player Classic Home Cinema -Version = 1.5.0.2827 -Licence = GPL -Description = A media player. -Size = 4.9MB -Category = 1 -URLSite = http://mpc-hc.sourceforge.net/ -URLDownload = http://freefr.dl.sourceforge.net/project/mpc-hc/MPC%20HomeCinema%20-%20Win32/MPC-HC%20v1.5.0.2827_32%20bits/MPC-HomeCinema.1.5.0.2827.x86.exe -CDPath = none - -[Section.0407] -Description = Ein Mediaplayer. - -[Section.040a] -Description = Reproductor multimedia. - -[Section.040c] -Description = Un lecteur media. - -[Section.0419] -Description = Мультимедийный проигрыватель. - -[Section.0415] -Description = Odtwarzacz multimediów. - -[Section.0422] -Description = Мультимедійний програвач. +; UTF-8 + +[Section] +Name = Media Player Classic Home Cinema +Version = 1.5.0.2827 +Licence = GPL +Description = A media player. +Size = 4.9MB +Category = 1 +URLSite = http://mpc-hc.sourceforge.net/ +URLDownload = http://freefr.dl.sourceforge.net/project/mpc-hc/MPC%20HomeCinema%20-%20Win32/MPC-HC%20v1.5.0.2827_32%20bits/MPC-HomeCinema.1.5.0.2827.x86.exe +CDPath = none + +[Section.0407] +Description = Ein Mediaplayer. + +[Section.040a] +Description = Reproductor multimedia. + +[Section.040c] +Description = Un lecteur media. + +[Section.0419] +Description = Мультимедийный проигрыватель. + +[Section.0415] +Description = Odtwarzacz multimediów. + +[Section.0422] +Description = Мультимедійний програвач. diff --git a/reactos/base/applications/rapps/rapps/msxml3.txt b/reactos/base/applications/rapps/rapps/msxml3.txt index a8eb9d1a62c..788488af34c 100644 --- a/reactos/base/applications/rapps/rapps/msxml3.txt +++ b/reactos/base/applications/rapps/rapps/msxml3.txt @@ -1,32 +1,32 @@ -; UTF-8 - -[Section] -Name = Microsoft XML 3 -Version = 3.0 -Licence = Unknown -Description = MSXML3 is needed for some MSI Installers. -Size = 1.0MB -Category = 14 -URLSite = http://www.microsoft.com/downloads/details.aspx?FamilyID=28494391-052B-42FF-9674-F752BDCA9582&displaylang=en -URLDownload = http://download.microsoft.com/download/8/8/8/888f34b7-4f54-4f06-8dac-fa29b19f33dd/msxml3.msi -CDPath = none - -[Section.0407] -Licence = Unbekannt -Description = MSXML3 wird von einige MSI Installern benötigt. - -[Section.040a] -Licence = Desconocida -Description = MSXML3 para varios instaladores MSI. - -[Section.040c] -Licence = Inconnue -Description = MSXML3 est nécessaire pour certains installateurs MSI. - -[Section.0415] -Licence = Nieznana -Description = Niektóre spośród plików instalacyjnych MSI potrzebują parsera MSXML3. - -[Section.0422] -Licence = Невідома -Description = MSXML3 необхідна для декотрих MSI інсталяторів. +; UTF-8 + +[Section] +Name = Microsoft XML 3 +Version = 3.0 +Licence = Unknown +Description = MSXML3 is needed for some MSI Installers. +Size = 1.0MB +Category = 14 +URLSite = http://www.microsoft.com/downloads/details.aspx?FamilyID=28494391-052B-42FF-9674-F752BDCA9582&displaylang=en +URLDownload = http://download.microsoft.com/download/8/8/8/888f34b7-4f54-4f06-8dac-fa29b19f33dd/msxml3.msi +CDPath = none + +[Section.0407] +Licence = Unbekannt +Description = MSXML3 wird von einige MSI Installern benötigt. + +[Section.040a] +Licence = Desconocida +Description = MSXML3 para varios instaladores MSI. + +[Section.040c] +Licence = Inconnue +Description = MSXML3 est nécessaire pour certains installateurs MSI. + +[Section.0415] +Licence = Nieznana +Description = Niektóre spośród plików instalacyjnych MSI potrzebują parsera MSXML3. + +[Section.0422] +Licence = Невідома +Description = MSXML3 необхідна для декотрих MSI інсталяторів. diff --git a/reactos/base/applications/rapps/rapps/net11.txt b/reactos/base/applications/rapps/rapps/net11.txt index 24889b08e7d..4ba17e8c506 100644 --- a/reactos/base/applications/rapps/rapps/net11.txt +++ b/reactos/base/applications/rapps/rapps/net11.txt @@ -1,18 +1,18 @@ -; UTF-8 - -[Section] -Name = Microsoft .NET Framework Version 1.1 Redistributable Package -Version = 1.1 -Licence = Unknown -Description = Microsoft .NET Framework Version 1.1 Redistributable Package. -Size = 23.1MB -Category = 14 -URLSite = http://www.microsoft.com/downloads/details.aspx?FamilyId=262D25E3-F589-4842-8157-034D1E7CF3A3 -URLDownload = http://download.microsoft.com/download/a/a/c/aac39226-8825-44ce-90e3-bf8203e74006/dotnetfx.exe -CDPath = none - -[Section.040c] -Description = Microsoft .NET Framework version 1.1 - Paquet redistribuable. - -[Section.0415] -Description = Microsoft .NET Framework Wersja 1.1 - Pakiet Dystrybucyjny. +; UTF-8 + +[Section] +Name = Microsoft .NET Framework Version 1.1 Redistributable Package +Version = 1.1 +Licence = Unknown +Description = Microsoft .NET Framework Version 1.1 Redistributable Package. +Size = 23.1MB +Category = 14 +URLSite = http://www.microsoft.com/downloads/details.aspx?FamilyId=262D25E3-F589-4842-8157-034D1E7CF3A3 +URLDownload = http://download.microsoft.com/download/a/a/c/aac39226-8825-44ce-90e3-bf8203e74006/dotnetfx.exe +CDPath = none + +[Section.040c] +Description = Microsoft .NET Framework version 1.1 - Paquet redistribuable. + +[Section.0415] +Description = Microsoft .NET Framework Wersja 1.1 - Pakiet Dystrybucyjny. diff --git a/reactos/base/applications/rapps/rapps/net20.txt b/reactos/base/applications/rapps/rapps/net20.txt index bcb6a5feb24..3b01fbaf29b 100644 --- a/reactos/base/applications/rapps/rapps/net20.txt +++ b/reactos/base/applications/rapps/rapps/net20.txt @@ -1,18 +1,18 @@ -; UTF-8 - -[Section] -Name = Microsoft .NET Framework Version 2.0 Redistributable Package -Version = 2.0 -Licence = Unknown -Description = Microsoft .NET Framework Version 2.0 Redistributable Package. -Size = 22.4MB -Category = 14 -URLSite = http://www.microsoft.com/downloads/details.aspx?FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5 -URLDownload = http://download.microsoft.com/download/5/6/7/567758a3-759e-473e-bf8f-52154438565a/dotnetfx.exe -CDPath = none - -[Section.040c] -Description = Microsoft .NET Framework version 2.0 - Paquet redistribuable. - -[Section.0415] -Description = Microsoft .NET Framework Wersja 2.0 - Pakiet Dystrybucyjny. +; UTF-8 + +[Section] +Name = Microsoft .NET Framework Version 2.0 Redistributable Package +Version = 2.0 +Licence = Unknown +Description = Microsoft .NET Framework Version 2.0 Redistributable Package. +Size = 22.4MB +Category = 14 +URLSite = http://www.microsoft.com/downloads/details.aspx?FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5 +URLDownload = http://download.microsoft.com/download/5/6/7/567758a3-759e-473e-bf8f-52154438565a/dotnetfx.exe +CDPath = none + +[Section.040c] +Description = Microsoft .NET Framework version 2.0 - Paquet redistribuable. + +[Section.0415] +Description = Microsoft .NET Framework Wersja 2.0 - Pakiet Dystrybucyjny. diff --git a/reactos/base/applications/rapps/rapps/net20sp2.txt b/reactos/base/applications/rapps/rapps/net20sp2.txt index 1d144f0f8b8..ef47b60270b 100644 --- a/reactos/base/applications/rapps/rapps/net20sp2.txt +++ b/reactos/base/applications/rapps/rapps/net20sp2.txt @@ -1,18 +1,18 @@ -; UTF-8 - -[Section] -Name = Microsoft .NET Framework Version 2.0 Service Pack 2 -Version = 2.0SP2 -Licence = Unknown -Description = Microsoft .NET Framework Version 2.0 Service Pack 2 -Size = 23.8MB -Category = 14 -URLSite = http://www.microsoft.com/downloads/details.aspx?familyid=5B2C0358-915B-4EB5-9B1D-10E506DA9D0F -URLDownload = http://download.microsoft.com/download/c/6/e/c6e88215-0178-4c6c-b5f3-158ff77b1f38/NetFx20SP2_x86.exe -CDPath = none - -[Section.040c] -Description = Microsoft .NET Framework version 2.0 Service Pack 2. - -[Section.0415] -Description = Microsoft .NET Framework Wersja 2.0 Service Pack 2. +; UTF-8 + +[Section] +Name = Microsoft .NET Framework Version 2.0 Service Pack 2 +Version = 2.0SP2 +Licence = Unknown +Description = Microsoft .NET Framework Version 2.0 Service Pack 2 +Size = 23.8MB +Category = 14 +URLSite = http://www.microsoft.com/downloads/details.aspx?familyid=5B2C0358-915B-4EB5-9B1D-10E506DA9D0F +URLDownload = http://download.microsoft.com/download/c/6/e/c6e88215-0178-4c6c-b5f3-158ff77b1f38/NetFx20SP2_x86.exe +CDPath = none + +[Section.040c] +Description = Microsoft .NET Framework version 2.0 Service Pack 2. + +[Section.0415] +Description = Microsoft .NET Framework Wersja 2.0 Service Pack 2. diff --git a/reactos/base/applications/rapps/rapps/offbyone.txt b/reactos/base/applications/rapps/rapps/offbyone.txt index cc3f0200a31..582627c7392 100644 --- a/reactos/base/applications/rapps/rapps/offbyone.txt +++ b/reactos/base/applications/rapps/rapps/offbyone.txt @@ -1,30 +1,30 @@ -; UTF-8 - -[Section] -Name = Off By One Browser -Version = 3.5d -Licence = Freeware -Description = The Off By One Browser is a very small and fast web browser with full HTML 3.2 support. -Size = 0.98M -Category = 5 -URLSite = http://offbyone.com/ -URLDownload = http://offbyone.com/offbyone/images/OffByOneSetup.exe -CDPath = none - -[Section.0405] -Description = Off-By-One-Browser je velmi malý a rychlý webový prohlížeč s plnou podporou HTML 3.2. - -[Section.0407] -Description = Der Off-By-One-Browser ist ein sehr kleiner und schneller Webbrowser mit voller HTML 3.2 Unterstützung. - -[Section.040a] -Description = Es un pequeño y rápido navegador web con completo soporte HTML 3.2. - -[Section.040c] -Description = Le navigateur Off By One est un navigateur internet très petit et rapide avec un support complet de HTML 3.2. - -[Section.0415] -Description = Bardzo mała i szybka przeglądarka internetowa z pełną obsługą HTML 3.2. - -[Section.0422] -Description = Дуже малий та швидкий веб-браузер з повною підтримкою HTML 3.2. +; UTF-8 + +[Section] +Name = Off By One Browser +Version = 3.5d +Licence = Freeware +Description = The Off By One Browser is a very small and fast web browser with full HTML 3.2 support. +Size = 0.98M +Category = 5 +URLSite = http://offbyone.com/ +URLDownload = http://offbyone.com/offbyone/images/OffByOneSetup.exe +CDPath = none + +[Section.0405] +Description = Off-By-One-Browser je velmi malý a rychlý webový prohlížeč s plnou podporou HTML 3.2. + +[Section.0407] +Description = Der Off-By-One-Browser ist ein sehr kleiner und schneller Webbrowser mit voller HTML 3.2 Unterstützung. + +[Section.040a] +Description = Es un pequeño y rápido navegador web con completo soporte HTML 3.2. + +[Section.040c] +Description = Le navigateur Off By One est un navigateur internet très petit et rapide avec un support complet de HTML 3.2. + +[Section.0415] +Description = Bardzo mała i szybka przeglądarka internetowa z pełną obsługą HTML 3.2. + +[Section.0422] +Description = Дуже малий та швидкий веб-браузер з повною підтримкою HTML 3.2. diff --git a/reactos/base/applications/rapps/rapps/openoffice2.4.txt b/reactos/base/applications/rapps/rapps/openoffice2.4.txt index 03b1e31cfec..f2bc9ec0578 100644 --- a/reactos/base/applications/rapps/rapps/openoffice2.4.txt +++ b/reactos/base/applications/rapps/rapps/openoffice2.4.txt @@ -1,43 +1,43 @@ -; UTF-8 - -[Section] -Name = OpenOffice 2.4 -Version = 2.4.3 -Licence = LGPL -Description = THE Open Source Office Suite. -Size = 127MB -Category = 6 -URLSite = http://www.openoffice.org/ -URLDownload = ftp://archive.services.openoffice.org/pub/openoffice-archive/stable/2.4.3/OOo_2.4.3_Win32Intel_install_en-US.exe -CDPath = none - -[Section.0407] -Description = DIE Open Source Office Suite. -URLSite = http://de.openoffice.org/ -Size = 114.2MB -URLDownload = ftp://archive.services.openoffice.org/pub/openoffice-archive/localized/de/2.4.3/OOo_2.4.3_Win32Intel_install_de.exe - -[Section.040a] -Description = La suite de ofimática de código abierto. -URLSite = http://es.openoffice.org/ -Size = 113.9MB -URLDownload = ftp://archive.services.openoffice.org/pub/openoffice-archive/localized/es/2.4.3/OOo_2.4.3_Win32Intel_install_es.exe - -[Section.040c] -Version = 2.4.2 -Description = LA suite bureautique open source. -URLSite = http://fr.openoffice.org/ -Size = 113.9MB -URLDownload = ftp://archive.services.openoffice.org/pub/openoffice-archive/localized/fr/2.4.2/OOo_2.4.2_Win32Intel_install_fr.exe - -[Section.0415] -URLSite = http://pl.openoffice.org/ -Description = Otwarty pakiet biurowy. -URLDownload = ftp://archive.services.openoffice.org/pub/openoffice-archive/localized/pl/2.4.2/OOo_2.4.2_Win32Intel_install_pl.exe -Size = 113.9M - -[Section.0422] -URLSite = http://ua.openoffice.org/ -Description = Відкритий офісний пакет. -URLDownload = ftp://archive.services.openoffice.org/pub/openoffice-archive/localized/ru/2.4.3/OOo_2.4.3_Win32Intel_install_ru.exe -Size = 114.8M +; UTF-8 + +[Section] +Name = OpenOffice 2.4 +Version = 2.4.3 +Licence = LGPL +Description = THE Open Source Office Suite. +Size = 127MB +Category = 6 +URLSite = http://www.openoffice.org/ +URLDownload = ftp://archive.services.openoffice.org/pub/openoffice-archive/stable/2.4.3/OOo_2.4.3_Win32Intel_install_en-US.exe +CDPath = none + +[Section.0407] +Description = DIE Open Source Office Suite. +URLSite = http://de.openoffice.org/ +Size = 114.2MB +URLDownload = ftp://archive.services.openoffice.org/pub/openoffice-archive/localized/de/2.4.3/OOo_2.4.3_Win32Intel_install_de.exe + +[Section.040a] +Description = La suite de ofimática de código abierto. +URLSite = http://es.openoffice.org/ +Size = 113.9MB +URLDownload = ftp://archive.services.openoffice.org/pub/openoffice-archive/localized/es/2.4.3/OOo_2.4.3_Win32Intel_install_es.exe + +[Section.040c] +Version = 2.4.2 +Description = LA suite bureautique open source. +URLSite = http://fr.openoffice.org/ +Size = 113.9MB +URLDownload = ftp://archive.services.openoffice.org/pub/openoffice-archive/localized/fr/2.4.2/OOo_2.4.2_Win32Intel_install_fr.exe + +[Section.0415] +URLSite = http://pl.openoffice.org/ +Description = Otwarty pakiet biurowy. +URLDownload = ftp://archive.services.openoffice.org/pub/openoffice-archive/localized/pl/2.4.2/OOo_2.4.2_Win32Intel_install_pl.exe +Size = 113.9M + +[Section.0422] +URLSite = http://ua.openoffice.org/ +Description = Відкритий офісний пакет. +URLDownload = ftp://archive.services.openoffice.org/pub/openoffice-archive/localized/ru/2.4.3/OOo_2.4.3_Win32Intel_install_ru.exe +Size = 114.8M diff --git a/reactos/base/applications/rapps/rapps/openoffice3.0.txt b/reactos/base/applications/rapps/rapps/openoffice3.0.txt index 2c215524af1..4662cfee621 100644 --- a/reactos/base/applications/rapps/rapps/openoffice3.0.txt +++ b/reactos/base/applications/rapps/rapps/openoffice3.0.txt @@ -1,42 +1,42 @@ -; UTF-8 - -[Section] -Name = OpenOffice 3.3 -Version = 3.3.0 -Licence = LGPL -Description = THE Open Source Office Suite. -Size = 137.0MB -Category = 6 -URLSite = http://www.openoffice.org/ -URLDownload = http://ftp3.gwdg.de/pub/openoffice/stable/3.3.0/OOo_3.3.0_Win_x86_install_en-US.exe -CDPath = none - -[Section.0407] -Description = DIE Open Source Office Suite. -URLSite = http://de.openoffice.org/ -Size = 160.0MB -URLDownload = http://ftp3.gwdg.de/pub/openoffice/localized/de/3.3.0/OOo_3.3.0_Win_x86_install-wJRE_de.exe - -[Section.040a] -Description = La suite de ofimática de código abierto. -URLSite = http://es.openoffice.org/ -Size = 132.0MB -URLDownload = http://ftp.gwdg.de/pub/openoffice/localized/es/3.3.0/OOo_3.3.0_Win_x86_install_es.exe - -[Section.040c] -Description = LA suite bureautique open source. -URLSite = http://fr.openoffice.org/ -Size = 132.0MB -URLDownload = http://ftp.gwdg.de/pub/openoffice/localized/fr/3.3.0/OOo_3.3.0_Win_x86_install_fr.exe - -[Section.0415] -Description = Otwarty pakiet biurowy. -URLSite = http://pl.openoffice.org/ -Size = 134.0MB -URLDownload = http://ftp3.gwdg.de/pub/openoffice/localized/pl/3.3.0/OOo_3.3.0_Win_x86_install_pl.exe - -[Section.0422] -Description = Відкритий офісний пакет. -URLSite = http://ua.openoffice.org/ -Size = 133.0MB -URLDownload = http://ftp3.gwdg.de/pub/openoffice/localized/ru/3.3.0/OOo_3.3.0_Win_x86_install_ru.exe +; UTF-8 + +[Section] +Name = OpenOffice 3.3 +Version = 3.3.0 +Licence = LGPL +Description = THE Open Source Office Suite. +Size = 137.0MB +Category = 6 +URLSite = http://www.openoffice.org/ +URLDownload = http://ftp3.gwdg.de/pub/openoffice/stable/3.3.0/OOo_3.3.0_Win_x86_install_en-US.exe +CDPath = none + +[Section.0407] +Description = DIE Open Source Office Suite. +URLSite = http://de.openoffice.org/ +Size = 160.0MB +URLDownload = http://ftp3.gwdg.de/pub/openoffice/localized/de/3.3.0/OOo_3.3.0_Win_x86_install-wJRE_de.exe + +[Section.040a] +Description = La suite de ofimática de código abierto. +URLSite = http://es.openoffice.org/ +Size = 132.0MB +URLDownload = http://ftp.gwdg.de/pub/openoffice/localized/es/3.3.0/OOo_3.3.0_Win_x86_install_es.exe + +[Section.040c] +Description = LA suite bureautique open source. +URLSite = http://fr.openoffice.org/ +Size = 132.0MB +URLDownload = http://ftp.gwdg.de/pub/openoffice/localized/fr/3.3.0/OOo_3.3.0_Win_x86_install_fr.exe + +[Section.0415] +Description = Otwarty pakiet biurowy. +URLSite = http://pl.openoffice.org/ +Size = 134.0MB +URLDownload = http://ftp3.gwdg.de/pub/openoffice/localized/pl/3.3.0/OOo_3.3.0_Win_x86_install_pl.exe + +[Section.0422] +Description = Відкритий офісний пакет. +URLSite = http://ua.openoffice.org/ +Size = 133.0MB +URLDownload = http://ftp3.gwdg.de/pub/openoffice/localized/ru/3.3.0/OOo_3.3.0_Win_x86_install_ru.exe diff --git a/reactos/base/applications/rapps/rapps/openttd.txt b/reactos/base/applications/rapps/rapps/openttd.txt index 36610d223ae..6351e4ab1ae 100644 --- a/reactos/base/applications/rapps/rapps/openttd.txt +++ b/reactos/base/applications/rapps/rapps/openttd.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = OpenTTD -Version = 1.0.5 -Licence = GPL v2 -Description = Open Source clone of the "Transport Tycoon Deluxe" game engine. You need a copy of Transport Tycoon. -Size = 3.4MB -Category = 4 -URLSite = http://www.openttd.org/ -URLDownload = http://cz.binaries.openttd.org/openttd/binaries/releases/1.0.5/openttd-1.0.5-windows-win32.exe -CDPath = none - -[Section.0407] -Description = Open Source Klon der "Transport Tycoon Deluxe" Spiel-Engine. Sie benötigen eine Kopie von Transport Tycoon. - -[Section.040a] -Description = Clon del motor de juegos "Transport Tycoon Deluxe" de código abierto. Es necesaria una copia de Transport Tycoon. - -[Section.040c] -Description = Clone open source du moteur de jeu "Transport Tycoon Deluxe". Vous aurez besoin d'une copie de Transport Tycoon. - -[Section.0415] -Description = Otwarty klon silnika gry "Transport Tycoon Deluxe". Do poprawnego działania potrzebna jest kopia gry Transport Tycoon. - -[Section.0422] -Description = Відкритий клон двигуна гри "Transport Tycoon Deluxe". Вам потрібна копія гри Transport Tycoon. +; UTF-8 + +[Section] +Name = OpenTTD +Version = 1.0.5 +Licence = GPL v2 +Description = Open Source clone of the "Transport Tycoon Deluxe" game engine. You need a copy of Transport Tycoon. +Size = 3.4MB +Category = 4 +URLSite = http://www.openttd.org/ +URLDownload = http://cz.binaries.openttd.org/openttd/binaries/releases/1.0.5/openttd-1.0.5-windows-win32.exe +CDPath = none + +[Section.0407] +Description = Open Source Klon der "Transport Tycoon Deluxe" Spiel-Engine. Sie benötigen eine Kopie von Transport Tycoon. + +[Section.040a] +Description = Clon del motor de juegos "Transport Tycoon Deluxe" de código abierto. Es necesaria una copia de Transport Tycoon. + +[Section.040c] +Description = Clone open source du moteur de jeu "Transport Tycoon Deluxe". Vous aurez besoin d'une copie de Transport Tycoon. + +[Section.0415] +Description = Otwarty klon silnika gry "Transport Tycoon Deluxe". Do poprawnego działania potrzebna jest kopia gry Transport Tycoon. + +[Section.0422] +Description = Відкритий клон двигуна гри "Transport Tycoon Deluxe". Вам потрібна копія гри Transport Tycoon. diff --git a/reactos/base/applications/rapps/rapps/opera.txt b/reactos/base/applications/rapps/rapps/opera.txt index 88a2e09815c..cfca69373ad 100644 --- a/reactos/base/applications/rapps/rapps/opera.txt +++ b/reactos/base/applications/rapps/rapps/opera.txt @@ -1,33 +1,33 @@ -; UTF-8 - -[Section] -Name = Opera -Version = 11.01 -Licence = Freeware -Description = The popular Opera Browser with many advanced features and including a Mail and BitTorrent client. -Size = 8.9M -Category = 5 -URLSite = http://www.opera.com/ -URLDownload = http://get4.opera.com/pub/opera/win/1101/int/Opera_1101_int_Setup.exe -CDPath = none - -[Section.0405] -Description = Populární prohlížeč Opera s mnoha pokročilými vlastnostmi, včetně vestavené podpory pro e-mail a BitTorrent. - -[Section.0407] -Description = Der populäre Opera Browser mit vielen fortschrittlichen Eigenschaften, enthält einen Mail und BitTorrent Client. - -[Section.040a] -Description = Popular navegador web con muchas características avanzadas e incluye un cliente de correo y BitTorrent. - -[Section.040c] -Description = Le populaire navigateur Opera avec beaucoup de fonctionnalités avancées, incluant un client mail et BitTorrent. - -[Section.0415] -Description = Popularna przeglądarka internetowa z wieloma zaawansowanymi funkcjami, zawierająca klientów: poczty oraz BitTorrent. - -[Section.0419] -Description = Популярный браузер со многими дополнительными возможностями, включающий клиентов почты и BitTorrent. - -[Section.0422] -Description = Популярний браузер з багатьма додатковими можливостями, який включає в себе поштовий та BitTorrent клієнти. +; UTF-8 + +[Section] +Name = Opera +Version = 11.01 +Licence = Freeware +Description = The popular Opera Browser with many advanced features and including a Mail and BitTorrent client. +Size = 8.9M +Category = 5 +URLSite = http://www.opera.com/ +URLDownload = http://get4.opera.com/pub/opera/win/1101/int/Opera_1101_int_Setup.exe +CDPath = none + +[Section.0405] +Description = Populární prohlížeč Opera s mnoha pokročilými vlastnostmi, včetně vestavené podpory pro e-mail a BitTorrent. + +[Section.0407] +Description = Der populäre Opera Browser mit vielen fortschrittlichen Eigenschaften, enthält einen Mail und BitTorrent Client. + +[Section.040a] +Description = Popular navegador web con muchas características avanzadas e incluye un cliente de correo y BitTorrent. + +[Section.040c] +Description = Le populaire navigateur Opera avec beaucoup de fonctionnalités avancées, incluant un client mail et BitTorrent. + +[Section.0415] +Description = Popularna przeglądarka internetowa z wieloma zaawansowanymi funkcjami, zawierająca klientów: poczty oraz BitTorrent. + +[Section.0419] +Description = Популярный браузер со многими дополнительными возможностями, включающий клиентов почты и BitTorrent. + +[Section.0422] +Description = Популярний браузер з багатьма додатковими можливостями, який включає в себе поштовий та BitTorrent клієнти. diff --git a/reactos/base/applications/rapps/rapps/opera9.txt b/reactos/base/applications/rapps/rapps/opera9.txt index ed714e5afb9..51f6450bfc1 100644 --- a/reactos/base/applications/rapps/rapps/opera9.txt +++ b/reactos/base/applications/rapps/rapps/opera9.txt @@ -1,30 +1,30 @@ -; UTF-8 - -[Section] -Name = Opera -Version = 9.64 -Licence = Freeware -Description = The popular Opera Browser with many advanced features and including a Mail and BitTorrent client. -Size = 7.2M -Category = 5 -URLSite = http://www.opera.com/ -URLDownload = http://get4.opera.com/pub/opera/win/964/int/Opera_964_int_Setup.exe -CDPath = none - -[Section.0407] -Description = Der populäre Opera Browser mit vielen fortschrittlichen Eigenschaften, enthält einen Mail und BitTorrent Client. - -[Section.040a] -Description = Popular navegador web con muchas características avanzadas e incluye un cliente de correo y BitTorrent. - -[Section.040c] -Description = Le populaire navigateur Opera avec beaucoup de fonctionnalités avancées, incluant un client mail et BitTorrent. - -[Section.0415] -Description = Popularna przeglądarka internetowa z wieloma zaawansowanymi funkcjami, zawierająca klientów: poczty oraz BitTorrent. - -[Section.0419] -Description = Популярный браузер со многими дополнительными возможностями, включающий клиентов почты и BitTorrent. - -[Section.0422] -Description = Популярний браузер з багатьма додатковими можливостями, який включає в себе поштовий та BitTorrent клієнти. +; UTF-8 + +[Section] +Name = Opera +Version = 9.64 +Licence = Freeware +Description = The popular Opera Browser with many advanced features and including a Mail and BitTorrent client. +Size = 7.2M +Category = 5 +URLSite = http://www.opera.com/ +URLDownload = http://get4.opera.com/pub/opera/win/964/int/Opera_964_int_Setup.exe +CDPath = none + +[Section.0407] +Description = Der populäre Opera Browser mit vielen fortschrittlichen Eigenschaften, enthält einen Mail und BitTorrent Client. + +[Section.040a] +Description = Popular navegador web con muchas características avanzadas e incluye un cliente de correo y BitTorrent. + +[Section.040c] +Description = Le populaire navigateur Opera avec beaucoup de fonctionnalités avancées, incluant un client mail et BitTorrent. + +[Section.0415] +Description = Popularna przeglądarka internetowa z wieloma zaawansowanymi funkcjami, zawierająca klientów: poczty oraz BitTorrent. + +[Section.0419] +Description = Популярный браузер со многими дополнительными возможностями, включающий клиентов почты и BitTorrent. + +[Section.0422] +Description = Популярний браузер з багатьма додатковими можливостями, який включає в себе поштовий та BitTorrent клієнти. diff --git a/reactos/base/applications/rapps/rapps/putty.txt b/reactos/base/applications/rapps/rapps/putty.txt index 1f087aa5760..f73e9ea9287 100644 --- a/reactos/base/applications/rapps/rapps/putty.txt +++ b/reactos/base/applications/rapps/rapps/putty.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = PuTTY -Version = 0.60 -Licence = MIT -Description = A free SSH, Telnet, rlogin, and raw TCP client. -Size = 1.7MB -Category = 5 -URLSite = http://www.chiark.greenend.org.uk/~sgtatham/putty/ -URLDownload = http://the.earth.li/~sgtatham/putty/latest/x86/putty-0.60-installer.exe -CDPath = none - -[Section.0407] -Description = Ein freier SSH-, Telnet-, rlogin- und TCP-Client. - -[Section.040a] -Description = Un ciente SSH, Telnet, rlogin y TCP gratuito. - -[Section.040c] -Description = Un client SSH, Telnet, rlogin et raw TCP gratuit. - -[Section.0415] -Description = Darmowy klient obsługujący protokoły SSH, Telnet, rlogin oraz bezpośrednie TCP. - -[Section.0422] -Description = Безплатний SSH, Telnet, rlogin та raw TCP клієнт. +; UTF-8 + +[Section] +Name = PuTTY +Version = 0.60 +Licence = MIT +Description = A free SSH, Telnet, rlogin, and raw TCP client. +Size = 1.7MB +Category = 5 +URLSite = http://www.chiark.greenend.org.uk/~sgtatham/putty/ +URLDownload = http://the.earth.li/~sgtatham/putty/latest/x86/putty-0.60-installer.exe +CDPath = none + +[Section.0407] +Description = Ein freier SSH-, Telnet-, rlogin- und TCP-Client. + +[Section.040a] +Description = Un ciente SSH, Telnet, rlogin y TCP gratuito. + +[Section.040c] +Description = Un client SSH, Telnet, rlogin et raw TCP gratuit. + +[Section.0415] +Description = Darmowy klient obsługujący protokoły SSH, Telnet, rlogin oraz bezpośrednie TCP. + +[Section.0422] +Description = Безплатний SSH, Telnet, rlogin та raw TCP клієнт. diff --git a/reactos/base/applications/rapps/rapps/python.txt b/reactos/base/applications/rapps/rapps/python.txt index ebeded8ae8c..40aa3ead5d8 100644 --- a/reactos/base/applications/rapps/rapps/python.txt +++ b/reactos/base/applications/rapps/rapps/python.txt @@ -1,24 +1,24 @@ -; UTF-8 - -[Section] -Name = Python -Version = 2.7.1 -Licence = GPL/LGPL -Description = A remarkably powerful dynamic programming language. -Size = 15.0MB -Category = 7 -URLSite = http://www.python.org/ -URLDownload = http://www.python.org/ftp/python/2.7.1/python-2.7.1.msi -CDPath = none - -[Section.0407] -Description = Eine sehr mächtige, dynamische Programmiersprache. - -[Section.040c] -Description = Un langage de programmation dynamique remarquablement puissant. - -[Section.0415] -Description = Potęży i dynamiczny język programowania. - -[Section.0422] -Description = Дуже потужна динамічна мова програмування. +; UTF-8 + +[Section] +Name = Python +Version = 2.7.1 +Licence = GPL/LGPL +Description = A remarkably powerful dynamic programming language. +Size = 15.0MB +Category = 7 +URLSite = http://www.python.org/ +URLDownload = http://www.python.org/ftp/python/2.7.1/python-2.7.1.msi +CDPath = none + +[Section.0407] +Description = Eine sehr mächtige, dynamische Programmiersprache. + +[Section.040c] +Description = Un langage de programmation dynamique remarquablement puissant. + +[Section.0415] +Description = Potęży i dynamiczny język programowania. + +[Section.0422] +Description = Дуже потужна динамічна мова програмування. diff --git a/reactos/base/applications/rapps/rapps/remood.txt b/reactos/base/applications/rapps/rapps/remood.txt index 7204462196a..7a05e5dc8f9 100644 --- a/reactos/base/applications/rapps/rapps/remood.txt +++ b/reactos/base/applications/rapps/rapps/remood.txt @@ -1,24 +1,24 @@ -; UTF-8 - -[Section] -Name = ReMooD -Version = 0.8a -Licence = GPL -Description = ReMooD is a source port of Doom Legacy. It aims to provide the classic Legacy Experience with new features and more stability. -Size = 1.2M -Category = 4 -URLSite = http://remood.sourceforge.net/ -URLDownload = http://ovh.dl.sourceforge.net/project/remood/ReMooD/0.8a/remoodsetup-win32_08a.exe -CDPath = none - -[Section.0407] -Description = ReMooD ist ein Port des Doom Legacy Sources. Es versucht das klassische Legacy Erfahrung zusammen mit neuen Features und mehr Stabilität zu bieten. - -[Section.040c] -Description = ReMood est un portage du source de Doom Legacy. Son but est de fournir l'expérience classique de Legacy avec de nouvelles fonctionnalités et plus de stabilité. - -[Section.0415] -Description = Źródłowy port Doom. Jego celem jest zapewnienie rozrywki znanej z klasycznej wersji z nowymi funkcjami i lepszą stabilnością. - -[Section.0422] -Description = ReMooD э Портом вихідних кодів Doom Legacy. Його метою є додати нові можливості та стабільність до досвіду класичного Legacy. +; UTF-8 + +[Section] +Name = ReMooD +Version = 0.8a +Licence = GPL +Description = ReMooD is a source port of Doom Legacy. It aims to provide the classic Legacy Experience with new features and more stability. +Size = 1.2M +Category = 4 +URLSite = http://remood.sourceforge.net/ +URLDownload = http://ovh.dl.sourceforge.net/project/remood/ReMooD/0.8a/remoodsetup-win32_08a.exe +CDPath = none + +[Section.0407] +Description = ReMooD ist ein Port des Doom Legacy Sources. Es versucht das klassische Legacy Erfahrung zusammen mit neuen Features und mehr Stabilität zu bieten. + +[Section.040c] +Description = ReMood est un portage du source de Doom Legacy. Son but est de fournir l'expérience classique de Legacy avec de nouvelles fonctionnalités et plus de stabilité. + +[Section.0415] +Description = Źródłowy port Doom. Jego celem jest zapewnienie rozrywki znanej z klasycznej wersji z nowymi funkcjami i lepszą stabilnością. + +[Section.0422] +Description = ReMooD э Портом вихідних кодів Doom Legacy. Його метою є додати нові можливості та стабільність до досвіду класичного Legacy. diff --git a/reactos/base/applications/rapps/rapps/rosbe.txt b/reactos/base/applications/rapps/rapps/rosbe.txt index 860d56f1370..6106b47b3be 100644 --- a/reactos/base/applications/rapps/rapps/rosbe.txt +++ b/reactos/base/applications/rapps/rapps/rosbe.txt @@ -1,30 +1,30 @@ -; UTF-8 - -[Section] -Name = ReactOS Build Environment -Version = 1.5.1.1 -Licence = GPL -Description = Allows you to build the ReactOS Source. For more instructions see ReactOS wiki. -Size = 13.8MB -Category = 7 -URLSite = http://reactos.org/wiki/Build_Environment -URLDownload = http://ovh.dl.sourceforge.net/project/reactos/RosBE-Windows/i386/1.5.1/RosBE-1.5.1.1.exe -CDPath = none - -[Section.0405] -Description = Dovoluje zkompilovat zdrojový kód systému ReactOS. Pro další detaily viz. ReactOS wiki. - -[Section.0407] -Description = Erlaubt es Ihnen den ReactOS Source Code zu kompilieren. Im ReactOS-Wiki finden Sie dazu nähere Anweisungen. - -[Section.040a] -Description = Te permite compilar el código de ReactOS. Para más instrucciones consulta la wiki de ReactOS. - -[Section.040c] -Description = Vous permet de compiler le code source de ReactOS. Pour plus d'instruction, reportez-vous au wiki ReactOS. - -[Section.0415] -Description = Pozwala zbudować obraz płyty ReactOS ze źródeł. Więcej informacji na Wiki ReactOS. - -[Section.0422] -Description = Дозволяє зібрати ReactOS з вихідних кодів. За детальною інформацією дивіться в ReactOS Вікі. +; UTF-8 + +[Section] +Name = ReactOS Build Environment +Version = 1.5.1.1 +Licence = GPL +Description = Allows you to build the ReactOS Source. For more instructions see ReactOS wiki. +Size = 13.8MB +Category = 7 +URLSite = http://reactos.org/wiki/Build_Environment +URLDownload = http://ovh.dl.sourceforge.net/project/reactos/RosBE-Windows/i386/1.5.1/RosBE-1.5.1.1.exe +CDPath = none + +[Section.0405] +Description = Dovoluje zkompilovat zdrojový kód systému ReactOS. Pro další detaily viz. ReactOS wiki. + +[Section.0407] +Description = Erlaubt es Ihnen den ReactOS Source Code zu kompilieren. Im ReactOS-Wiki finden Sie dazu nähere Anweisungen. + +[Section.040a] +Description = Te permite compilar el código de ReactOS. Para más instrucciones consulta la wiki de ReactOS. + +[Section.040c] +Description = Vous permet de compiler le code source de ReactOS. Pour plus d'instruction, reportez-vous au wiki ReactOS. + +[Section.0415] +Description = Pozwala zbudować obraz płyty ReactOS ze źródeł. Więcej informacji na Wiki ReactOS. + +[Section.0422] +Description = Дозволяє зібрати ReactOS з вихідних кодів. За детальною інформацією дивіться в ReactOS Вікі. diff --git a/reactos/base/applications/rapps/rapps/rosbeamd64.txt b/reactos/base/applications/rapps/rapps/rosbeamd64.txt index fa2020461ac..357c303dfca 100644 --- a/reactos/base/applications/rapps/rapps/rosbeamd64.txt +++ b/reactos/base/applications/rapps/rapps/rosbeamd64.txt @@ -1,30 +1,30 @@ -; UTF-8 - -[Section] -Name = ReactOS Build Environment AMD64 Addon -Version = 1.4b -Licence = GPL -Description = Allows you to build the ReactOS AMD64 Source. For more instructions see ReactOS wiki. -Size = 15.4MB -Category = 7 -URLSite = http://reactos.org/wiki/Build_Environment/ -URLDownload = http://dreimer.bplaced.net/rosbe/RosBE64-1.4b.exe -CDPath = none - -[Section.0405] -Description = Dovoluje zkompilovat zdrojový kód systému ReactOS AMD64. Pro další detaily viz. ReactOS wiki. - -[Section.0407] -Description = Erlaubt es Ihnen den ReactOS AMD64 Source Code zu kompilieren. Im ReactOS-Wiki finden Sie dazu nähere Anweisungen. - -[Section.040a] -Description = Te permite compilar el código de ReactOS AMD64. Para más instrucciones consulta la wiki de ReactOS. - -[Section.040c] -Description = Vous permet de compiler le code source de ReactOS pour AMD64. Pour plus d'instruction, reportez-vous au wiki ReactOS. - -[Section.0415] -Description = Pozwala zbudować obraz płyty ReactOS AMD64 ze źródeł. Więcej informacji na Wiki ReactOS. - -[Section.0422] -Description = Дозволяє зібрати ReactOS AMD64 з вихідних кодів. За детальною інформацією дивіться в ReactOS Вікі. +; UTF-8 + +[Section] +Name = ReactOS Build Environment AMD64 Addon +Version = 1.4b +Licence = GPL +Description = Allows you to build the ReactOS AMD64 Source. For more instructions see ReactOS wiki. +Size = 15.4MB +Category = 7 +URLSite = http://reactos.org/wiki/Build_Environment/ +URLDownload = http://dreimer.bplaced.net/rosbe/RosBE64-1.4b.exe +CDPath = none + +[Section.0405] +Description = Dovoluje zkompilovat zdrojový kód systému ReactOS AMD64. Pro další detaily viz. ReactOS wiki. + +[Section.0407] +Description = Erlaubt es Ihnen den ReactOS AMD64 Source Code zu kompilieren. Im ReactOS-Wiki finden Sie dazu nähere Anweisungen. + +[Section.040a] +Description = Te permite compilar el código de ReactOS AMD64. Para más instrucciones consulta la wiki de ReactOS. + +[Section.040c] +Description = Vous permet de compiler le code source de ReactOS pour AMD64. Pour plus d'instruction, reportez-vous au wiki ReactOS. + +[Section.0415] +Description = Pozwala zbudować obraz płyty ReactOS AMD64 ze źródeł. Więcej informacji na Wiki ReactOS. + +[Section.0422] +Description = Дозволяє зібрати ReactOS AMD64 з вихідних кодів. За детальною інформацією дивіться в ReactOS Вікі. diff --git a/reactos/base/applications/rapps/rapps/rosbearm.txt b/reactos/base/applications/rapps/rapps/rosbearm.txt index d62a3705de5..4db452a36b6 100644 --- a/reactos/base/applications/rapps/rapps/rosbearm.txt +++ b/reactos/base/applications/rapps/rapps/rosbearm.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = ReactOS Build Environment ARM Addon -Version = 1.0 -Licence = GPL -Description = Allows you to build the ReactOS ARM Source. For more instructions see ReactOS wiki. -Size = 11.1MB -Category = 7 -URLSite = http://reactos.org/wiki/Build_Environment/ -URLDownload = http://ovh.dl.sourceforge.net/project/reactos/RosBE-Windows/arm/1.0/RosBE-ARM-1.0.exe -CDPath = none - -[Section.0407] -Description = Erlaubt es Ihnen den ReactOS ARM Source Code zu kompilieren. Im ReactOS-Wiki finden Sie dazu nähere Anweisungen. - -[Section.040a] -Description = Te permite compilar el código de ReactOS ARM. Para más instrucciones consulta la wiki de ReactOS. - -[Section.040c] -Description = Vous permet de compiler le code source de ReactOS pour ARM. Pour plus d'instruction, reportez-vous au wiki ReactOS. - -[Section.0415] -Description = Pozwala zbudować obraz płyty ReactOS ARM ze źródeł. Więcej informacji na Wiki ReactOS. - -[Section.0422] -Description = Дозволяє зібрати ReactOS ARM з вихідних кодів. За детальною інформацією дивіться в ReactOS Вікі. +; UTF-8 + +[Section] +Name = ReactOS Build Environment ARM Addon +Version = 1.0 +Licence = GPL +Description = Allows you to build the ReactOS ARM Source. For more instructions see ReactOS wiki. +Size = 11.1MB +Category = 7 +URLSite = http://reactos.org/wiki/Build_Environment/ +URLDownload = http://ovh.dl.sourceforge.net/project/reactos/RosBE-Windows/arm/1.0/RosBE-ARM-1.0.exe +CDPath = none + +[Section.0407] +Description = Erlaubt es Ihnen den ReactOS ARM Source Code zu kompilieren. Im ReactOS-Wiki finden Sie dazu nähere Anweisungen. + +[Section.040a] +Description = Te permite compilar el código de ReactOS ARM. Para más instrucciones consulta la wiki de ReactOS. + +[Section.040c] +Description = Vous permet de compiler le code source de ReactOS pour ARM. Pour plus d'instruction, reportez-vous au wiki ReactOS. + +[Section.0415] +Description = Pozwala zbudować obraz płyty ReactOS ARM ze źródeł. Więcej informacji na Wiki ReactOS. + +[Section.0422] +Description = Дозволяє зібрати ReactOS ARM з вихідних кодів. За детальною інформацією дивіться в ReactOS Вікі. diff --git a/reactos/base/applications/rapps/rapps/sambatng.txt b/reactos/base/applications/rapps/rapps/sambatng.txt index 25e630f09a1..a76bf5f5c74 100644 --- a/reactos/base/applications/rapps/rapps/sambatng.txt +++ b/reactos/base/applications/rapps/rapps/sambatng.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = Samba TNG -Version = 0.5-RC1 -Licence = GPL -Description = This tool allows you to access your Windows shared folders/printers with ReactOS. -Size = 2.1MB -Category = 5 -URLSite = http://samba-tng.org/ -URLDownload = http://svn.reactos.org/packages/samba-tng.exe -CDPath = none - -[Section.0407] -Description = Dieses Werkzeug erlaubt den Zugriff auf Windows' gemeinsame Verzeichnisse und Drucker aus ReactOS heraus. - -[Section.040a] -Description = Esta utilidad le permite acceder a sus carpetas e impresoras compartidas en Windows con ReactOS. - -[Section.040c] -Description = Cet outil vous permet d'accéder à vos répertoire/imprimantes partagés Windows avec ReactOS. - -[Section.0415] -Description = Narzędzie pozwalające na dostęp z poziomu ReactOSa do współdzielonych folderów/drukarek Windows. - -[Section.0422] -Description = Цей інструмент дозволяє отримати доступ до спільних тек/принтерів Windows з ReactOSа. +; UTF-8 + +[Section] +Name = Samba TNG +Version = 0.5-RC1 +Licence = GPL +Description = This tool allows you to access your Windows shared folders/printers with ReactOS. +Size = 2.1MB +Category = 5 +URLSite = http://samba-tng.org/ +URLDownload = http://svn.reactos.org/packages/samba-tng.exe +CDPath = none + +[Section.0407] +Description = Dieses Werkzeug erlaubt den Zugriff auf Windows' gemeinsame Verzeichnisse und Drucker aus ReactOS heraus. + +[Section.040a] +Description = Esta utilidad le permite acceder a sus carpetas e impresoras compartidas en Windows con ReactOS. + +[Section.040c] +Description = Cet outil vous permet d'accéder à vos répertoire/imprimantes partagés Windows avec ReactOS. + +[Section.0415] +Description = Narzędzie pozwalające na dostęp z poziomu ReactOSa do współdzielonych folderów/drukarek Windows. + +[Section.0422] +Description = Цей інструмент дозволяє отримати доступ до спільних тек/принтерів Windows з ReactOSа. diff --git a/reactos/base/applications/rapps/rapps/sbforvmware.txt b/reactos/base/applications/rapps/rapps/sbforvmware.txt index 9c3949207b8..9fac3b81bfd 100644 --- a/reactos/base/applications/rapps/rapps/sbforvmware.txt +++ b/reactos/base/applications/rapps/rapps/sbforvmware.txt @@ -1,54 +1,54 @@ -; UTF-8 - -[Section] -Name = SoundBlaster Driver for VMWare -Version = 5.12.1.5017 -Licence = Unknown -Description = Unzip in the "ReactOS" folder then restart ReactOS twice. -Size = 2.2MB -Category = 13 -URLSite = Unknown -URLDownload = http://svn.reactos.org/packages/sb_vmware.exe -CDPath = none - -[Section.0405] -Name = Ovladač SoundBlaster pro VMWare -Licence = Neznámá -Description = Rozbalte do složky "ReactOS" a pak ReactOS dvakrát restartujte. -URLSite = Neznámá - -[Section.0407] -Name = SoundBlaster Treiber für VMWare -Licence = Unbekannt -Description = Entpacken in das "ReactOS"-Verzeichnis und ReactOS zweimal neustarten. -URLSite = Unbekannt - -[Section.040a] -Name = Driver SoundBlaster para VMWare -Licence = Desconocida -Description = Descomprimir en la carpeta "Reactos" y reiniciar Reactos dos veces. -URLSite = Desconocida - -[Section.040c] -Name = Pilote SoundBlaster pour VMWare -Licence = Inconnue -Description = Dézippez dans le répertoire "ReactOS" puis redémarrez deux fois. -URLSite = Inconnue - -[Section.0415] -Name = Sterownik SoundBlaster dla VMWare -Licence = Nieznana -Description = Rozpakuj zawartość w folderze "ReactOS" i dwukrotnie zrestartuj system. -URLSite = Nieznana - -[Section.0419] -Name = Драйвер SoundBlaster для VMWare -Licence = Не указано -Description = Pазархивируйте содержимое в папку "ReactOS", затем дважды перезагрузите систему. -URLSite = Не указано - -[Section.0422] -Name = Драйвер SoundBlaster для VMWare -Licence = Невідома -Description = Pозархівуйте вміст в теку "ReactOS" після чого двічі перезавантажте систему. -URLSite = Не вказано +; UTF-8 + +[Section] +Name = SoundBlaster Driver for VMWare +Version = 5.12.1.5017 +Licence = Unknown +Description = Unzip in the "ReactOS" folder then restart ReactOS twice. +Size = 2.2MB +Category = 13 +URLSite = Unknown +URLDownload = http://svn.reactos.org/packages/sb_vmware.exe +CDPath = none + +[Section.0405] +Name = Ovladač SoundBlaster pro VMWare +Licence = Neznámá +Description = Rozbalte do složky "ReactOS" a pak ReactOS dvakrát restartujte. +URLSite = Neznámá + +[Section.0407] +Name = SoundBlaster Treiber für VMWare +Licence = Unbekannt +Description = Entpacken in das "ReactOS"-Verzeichnis und ReactOS zweimal neustarten. +URLSite = Unbekannt + +[Section.040a] +Name = Driver SoundBlaster para VMWare +Licence = Desconocida +Description = Descomprimir en la carpeta "Reactos" y reiniciar Reactos dos veces. +URLSite = Desconocida + +[Section.040c] +Name = Pilote SoundBlaster pour VMWare +Licence = Inconnue +Description = Dézippez dans le répertoire "ReactOS" puis redémarrez deux fois. +URLSite = Inconnue + +[Section.0415] +Name = Sterownik SoundBlaster dla VMWare +Licence = Nieznana +Description = Rozpakuj zawartość w folderze "ReactOS" i dwukrotnie zrestartuj system. +URLSite = Nieznana + +[Section.0419] +Name = Драйвер SoundBlaster для VMWare +Licence = Не указано +Description = Pазархивируйте содержимое в папку "ReactOS", затем дважды перезагрузите систему. +URLSite = Не указано + +[Section.0422] +Name = Драйвер SoundBlaster для VMWare +Licence = Невідома +Description = Pозархівуйте вміст в теку "ReactOS" після чого двічі перезавантажте систему. +URLSite = Не вказано diff --git a/reactos/base/applications/rapps/rapps/scite.txt b/reactos/base/applications/rapps/rapps/scite.txt index eabb7b460bc..a323c6d24a1 100644 --- a/reactos/base/applications/rapps/rapps/scite.txt +++ b/reactos/base/applications/rapps/rapps/scite.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = SciTE -Version = 2.24 -Licence = Freeware -Description = SciTE is a SCIntilla based Text Editor. Originally built to demonstrate Scintilla, it has grown to be a generally useful editor with facilities for building and running programs. -Size = 0.6M -Category = 7 -URLSite = http://www.scintilla.org/ -URLDownload = http://kent.dl.sourceforge.net/project/scintilla/SciTE/2.24/Sc224.exe -CDPath = none - -[Section.0407] -Description = SciTE ist ein SCIntilla basierter Text Editor. Ursprünglich wurde er erstellt, um Scintilla vorzuführen, wuchs aber zu einem nützlichen Editor mit der Fähigkeit Programme zu erstellen und auszuführen. - -[Section.040a] -Description = Editor de texto basado en SCIntilla. Originalmente creado para demostrar Scintilla, a crecido para ser un gran editor con capacidad para crear y ejecutar programas. - -[Section.040c] -Description = SciTE est un éditeur de texte basé sur SCIntilla. Originelement réalisé pour montrer Scintilla, il a évolué pour devenir un éditeur généralement utile avec des options pour compiler et lancer des programmes. - -[Section.0415] -Description = SciTE to edytor tekstu bazowany na SCIntilla. Oryginalnie stworzony aby pokazać Scintille, stał sie ogólnie przydatnym edytorem z infrastrukturą potrzebną do tworzenia i uruchamiania programów. - -[Section.0422] -Description = Текстовий редактор на основі SCIntilla. Був зібраний як презентація Scintilla, але виріс до редактора загального користування з засобами збирання та запуску програм. +; UTF-8 + +[Section] +Name = SciTE +Version = 2.24 +Licence = Freeware +Description = SciTE is a SCIntilla based Text Editor. Originally built to demonstrate Scintilla, it has grown to be a generally useful editor with facilities for building and running programs. +Size = 0.6M +Category = 7 +URLSite = http://www.scintilla.org/ +URLDownload = http://kent.dl.sourceforge.net/project/scintilla/SciTE/2.24/Sc224.exe +CDPath = none + +[Section.0407] +Description = SciTE ist ein SCIntilla basierter Text Editor. Ursprünglich wurde er erstellt, um Scintilla vorzuführen, wuchs aber zu einem nützlichen Editor mit der Fähigkeit Programme zu erstellen und auszuführen. + +[Section.040a] +Description = Editor de texto basado en SCIntilla. Originalmente creado para demostrar Scintilla, a crecido para ser un gran editor con capacidad para crear y ejecutar programas. + +[Section.040c] +Description = SciTE est un éditeur de texte basé sur SCIntilla. Originelement réalisé pour montrer Scintilla, il a évolué pour devenir un éditeur généralement utile avec des options pour compiler et lancer des programmes. + +[Section.0415] +Description = SciTE to edytor tekstu bazowany na SCIntilla. Oryginalnie stworzony aby pokazać Scintille, stał sie ogólnie przydatnym edytorem z infrastrukturą potrzebną do tworzenia i uruchamiania programów. + +[Section.0422] +Description = Текстовий редактор на основі SCIntilla. Був зібраний як презентація Scintilla, але виріс до редактора загального користування з засобами збирання та запуску програм. diff --git a/reactos/base/applications/rapps/rapps/scummvm.txt b/reactos/base/applications/rapps/rapps/scummvm.txt index 08032cf6abf..f5954442c32 100644 --- a/reactos/base/applications/rapps/rapps/scummvm.txt +++ b/reactos/base/applications/rapps/rapps/scummvm.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = ScummVM -Version = 1.2.1 -Licence = GPL -Description = Sam and Max, Day of the Tentacle, etc on ReactOS. -Size = 4.0MB -Category = 4 -URLSite = http://scummvm.org/ -URLDownload = http://dfn.dl.sourceforge.net/project/scummvm/scummvm/1.2.1/scummvm-1.2.1-win32.exe -CDPath = none - -[Section.0407] -Description = Sam and Max, Day of the Tentacle usw in ReactOS. - -[Section.040a] -Description = Sam and Max, Day of the Tentacle en ReactOS. - -[Section.040c] -Description = Sam and Max, Day of the Tentacle, etc sur ReactOS. - -[Section.0415] -Description = Program pozwalający uruchomić stare gry przygodowe (Sam and Max, Day of the Tentacle, Monkey Island) w ReactOS. - -[Section.0422] -Description = Дозволить грати Sam and Max, Day of the Tentacle та інші класичні ігри в ReactOS. +; UTF-8 + +[Section] +Name = ScummVM +Version = 1.2.1 +Licence = GPL +Description = Sam and Max, Day of the Tentacle, etc on ReactOS. +Size = 4.0MB +Category = 4 +URLSite = http://scummvm.org/ +URLDownload = http://dfn.dl.sourceforge.net/project/scummvm/scummvm/1.2.1/scummvm-1.2.1-win32.exe +CDPath = none + +[Section.0407] +Description = Sam and Max, Day of the Tentacle usw in ReactOS. + +[Section.040a] +Description = Sam and Max, Day of the Tentacle en ReactOS. + +[Section.040c] +Description = Sam and Max, Day of the Tentacle, etc sur ReactOS. + +[Section.0415] +Description = Program pozwalający uruchomić stare gry przygodowe (Sam and Max, Day of the Tentacle, Monkey Island) w ReactOS. + +[Section.0422] +Description = Дозволить грати Sam and Max, Day of the Tentacle та інші класичні ігри в ReactOS. diff --git a/reactos/base/applications/rapps/rapps/sdl_mixer.txt b/reactos/base/applications/rapps/rapps/sdl_mixer.txt index c4736d72c74..c1104f3adfb 100644 --- a/reactos/base/applications/rapps/rapps/sdl_mixer.txt +++ b/reactos/base/applications/rapps/rapps/sdl_mixer.txt @@ -1,30 +1,30 @@ -; UTF-8 - -[Section] -Name = Simple Direct Media Layer (SDL) Mixer -Version = 1.2.11 -Licence = LGPL -Description = Needed for some Open Source Games to run. You need 7-Zip or a similar Utility to extract it. -Size = 307kB -Category = 14 -URLSite = http://www.libsdl.org/projects/SDL_mixer/ -URLDownload = http://www.libsdl.org/projects/SDL_mixer/release/SDL_mixer-1.2.11-win32.zip -CDPath = none - -[Section.0405] -Description = Nutný pro spuštění některých open source her. K rozbalení je nutný 7-zip nebo podobný nástroj. - -[Section.0407] -Description = Erforderlich um einige Open Source Spiele auszuführen. Sie brauchen 7-Zip oder einen ähnlichen Entpacker um es zu entpacken. - -[Section.040a] -Description = Necesario para ejecutar varios juegos de código abierto. Necesita 7-Zip o una utilidad similar para extraerlo. - -[Section.040c] -Description = Nécessaire pour faire tourner certains jeux open source. Vous aurez besoin de 7-Zip ou d'un outil similaire pour l'extraire. - -[Section.0415] -Description = Biblioteka wymagana przez niektóre gry (zwłaszcza te o otwartym źródle). Do jej rozpakowania potrzebny jest 7-Zip lub podobny program. - -[Section.0422] -Description = Необхідний для роботи декотрих відкритих ігор. Вам потрібен 7-Zip або подібна утиліта щоб розпакувати його. +; UTF-8 + +[Section] +Name = Simple Direct Media Layer (SDL) Mixer +Version = 1.2.11 +Licence = LGPL +Description = Needed for some Open Source Games to run. You need 7-Zip or a similar Utility to extract it. +Size = 307kB +Category = 14 +URLSite = http://www.libsdl.org/projects/SDL_mixer/ +URLDownload = http://www.libsdl.org/projects/SDL_mixer/release/SDL_mixer-1.2.11-win32.zip +CDPath = none + +[Section.0405] +Description = Nutný pro spuštění některých open source her. K rozbalení je nutný 7-zip nebo podobný nástroj. + +[Section.0407] +Description = Erforderlich um einige Open Source Spiele auszuführen. Sie brauchen 7-Zip oder einen ähnlichen Entpacker um es zu entpacken. + +[Section.040a] +Description = Necesario para ejecutar varios juegos de código abierto. Necesita 7-Zip o una utilidad similar para extraerlo. + +[Section.040c] +Description = Nécessaire pour faire tourner certains jeux open source. Vous aurez besoin de 7-Zip ou d'un outil similaire pour l'extraire. + +[Section.0415] +Description = Biblioteka wymagana przez niektóre gry (zwłaszcza te o otwartym źródle). Do jej rozpakowania potrzebny jest 7-Zip lub podobny program. + +[Section.0422] +Description = Необхідний для роботи декотрих відкритих ігор. Вам потрібен 7-Zip або подібна утиліта щоб розпакувати його. diff --git a/reactos/base/applications/rapps/rapps/sdl_runtime.txt b/reactos/base/applications/rapps/rapps/sdl_runtime.txt index 854e59fe39b..c9377ae02c8 100644 --- a/reactos/base/applications/rapps/rapps/sdl_runtime.txt +++ b/reactos/base/applications/rapps/rapps/sdl_runtime.txt @@ -1,32 +1,32 @@ -; UTF-8 - -[Section] -Name = Simple Direct Media Layer (SDL) Runtime -Version = 1.2.14 -Licence = LGPL -Description = Needed for many Open Source Games to run. You need 7-Zip or a similar Utility to extract it. -Size = 145kB -Category = 14 -URLSite = http://www.libsdl.org/ -URLDownload = http://www.libsdl.org/release/SDL-1.2.14-win32.zip -CDPath = none - -[Section.0407] -Name = Simple Direct Media Layer (SDL) Laufzeitsystem -Description = Erforderlich um einige Open Source Spiele auszuführen. Sie brauchen 7-Zip oder einen ähnlichen Entpacker um es zu entpacken. - -[Section.040a] -Name = Libería Simple Direct Media Layer (SDL) -Description = Necesario para ejecutar varios juegos de código abierto. Necesita 7-Zip o una utilidad similar para extraerlo. - -[Section.040c] -Name = Bibliothèque Simple Direct Media Layer (SDL) -Description = Nécessaire pour faire tourner certains jeux open source. Vous aurez besoin de 7-Zip ou d'un outil similaire pour l'extraire. - -[Section.0415] -Name = Biblioteka uruchomieniowa Simple Direct Media Layer (SDL) -Description = Wymagana przez wiele gier (głównie o otwartym źródle). Do jej rozpakowania potrzebny jest program 7-Zip lub podobny. - -[Section.0422] -Name = Бібліотека Simple Direct Media Layer (SDL) -Description = Необхідна для роботи багатьох відкритих ігор. Вам потрібен 7-Zip або подібна утиліта щоб розпакувати її. +; UTF-8 + +[Section] +Name = Simple Direct Media Layer (SDL) Runtime +Version = 1.2.14 +Licence = LGPL +Description = Needed for many Open Source Games to run. You need 7-Zip or a similar Utility to extract it. +Size = 145kB +Category = 14 +URLSite = http://www.libsdl.org/ +URLDownload = http://www.libsdl.org/release/SDL-1.2.14-win32.zip +CDPath = none + +[Section.0407] +Name = Simple Direct Media Layer (SDL) Laufzeitsystem +Description = Erforderlich um einige Open Source Spiele auszuführen. Sie brauchen 7-Zip oder einen ähnlichen Entpacker um es zu entpacken. + +[Section.040a] +Name = Libería Simple Direct Media Layer (SDL) +Description = Necesario para ejecutar varios juegos de código abierto. Necesita 7-Zip o una utilidad similar para extraerlo. + +[Section.040c] +Name = Bibliothèque Simple Direct Media Layer (SDL) +Description = Nécessaire pour faire tourner certains jeux open source. Vous aurez besoin de 7-Zip ou d'un outil similaire pour l'extraire. + +[Section.0415] +Name = Biblioteka uruchomieniowa Simple Direct Media Layer (SDL) +Description = Wymagana przez wiele gier (głównie o otwartym źródle). Do jej rozpakowania potrzebny jest program 7-Zip lub podobny. + +[Section.0422] +Name = Бібліотека Simple Direct Media Layer (SDL) +Description = Необхідна для роботи багатьох відкритих ігор. Вам потрібен 7-Zip або подібна утиліта щоб розпакувати її. diff --git a/reactos/base/applications/rapps/rapps/seamonkey.txt b/reactos/base/applications/rapps/rapps/seamonkey.txt index bc683c0651b..82e5a0401ff 100644 --- a/reactos/base/applications/rapps/rapps/seamonkey.txt +++ b/reactos/base/applications/rapps/rapps/seamonkey.txt @@ -1,37 +1,37 @@ -; UTF-8 - -[Section] -Name = Mozilla SeaMonkey -Version = 2.0.12 -Licence = MPL/GPL/LGPL -Description = Mozilla Suite is alive. This is the one and only Browser, Mail, Chat, and Composer bundle you will ever need. -Size = 10.2MB -Category = 5 -URLSite = http://www.seamonkey-project.org/ -URLDownload = ftp://ftp.mozilla.org/pub/seamonkey/releases/2.0.12/win32/en-US/SeaMonkey%20Setup%202.0.12.exe -CDPath = none - -[Section.0407] -Description = Mozilla Suite lebt. Dies ist das einzige Browser-, Mail-, Chat- and Composerwerkzeug-Bundle welches Sie benötigen. -Size = 10.1MB -URLDownload = ftp://ftp.mozilla.org/pub/seamonkey/releases/2.0.12/win32/de/SeaMonkey%20Setup%202.0.12.exe - -[Section.040a] -Description = La suite de Mozilla está viva. Es el primero y único navegador web, gestor de correo, lector de noticias, Chat y editor HTML que necesitarás. -Size = 10.1MB -URLDownload = ftp://ftp.mozilla.org/pub/seamonkey/releases/2.0.12/win32/es-ES/SeaMonkey%20Setup%202.0.12.exe - -[Section.040c] -Description = La suite Mozilla est en vie. Ceci est le seul et l'unique package navigateur, client mail, client chat et composer dont vous aurez besoin. -Size = 10.1MB -URLDownload = ftp://ftp.mozilla.org/pub/seamonkey/releases/2.0.12/win32/fr/SeaMonkey%20Setup%202.0.12.exe - -[Section.0415] -Description = Pakiet Mozilla żyje. W zestawie: przeglądarka, klient poczty, IRC oraz Edytor HTML - wszystko, czego potrzebujesz. -Size = 11.0MB -URLDownload = ftp://ftp.mozilla.org/pub/seamonkey/releases/2.0.12/win32/pl/SeaMonkey%20Setup%202.0.12.exe - -[Section.0419] -Description = Продолжение Mozilla Suite. Включает браузер, почтовый клиент, IRC-клиент и HTML-редактор. -Size = 10.5MB -URLDownload = ftp://ftp.mozilla.org/pub/seamonkey/releases/2.0.12/win32/ru/SeaMonkey%20Setup%202.0.12.exe +; UTF-8 + +[Section] +Name = Mozilla SeaMonkey +Version = 2.0.12 +Licence = MPL/GPL/LGPL +Description = Mozilla Suite is alive. This is the one and only Browser, Mail, Chat, and Composer bundle you will ever need. +Size = 10.2MB +Category = 5 +URLSite = http://www.seamonkey-project.org/ +URLDownload = ftp://ftp.mozilla.org/pub/seamonkey/releases/2.0.12/win32/en-US/SeaMonkey%20Setup%202.0.12.exe +CDPath = none + +[Section.0407] +Description = Mozilla Suite lebt. Dies ist das einzige Browser-, Mail-, Chat- and Composerwerkzeug-Bundle welches Sie benötigen. +Size = 10.1MB +URLDownload = ftp://ftp.mozilla.org/pub/seamonkey/releases/2.0.12/win32/de/SeaMonkey%20Setup%202.0.12.exe + +[Section.040a] +Description = La suite de Mozilla está viva. Es el primero y único navegador web, gestor de correo, lector de noticias, Chat y editor HTML que necesitarás. +Size = 10.1MB +URLDownload = ftp://ftp.mozilla.org/pub/seamonkey/releases/2.0.12/win32/es-ES/SeaMonkey%20Setup%202.0.12.exe + +[Section.040c] +Description = La suite Mozilla est en vie. Ceci est le seul et l'unique package navigateur, client mail, client chat et composer dont vous aurez besoin. +Size = 10.1MB +URLDownload = ftp://ftp.mozilla.org/pub/seamonkey/releases/2.0.12/win32/fr/SeaMonkey%20Setup%202.0.12.exe + +[Section.0415] +Description = Pakiet Mozilla żyje. W zestawie: przeglądarka, klient poczty, IRC oraz Edytor HTML - wszystko, czego potrzebujesz. +Size = 11.0MB +URLDownload = ftp://ftp.mozilla.org/pub/seamonkey/releases/2.0.12/win32/pl/SeaMonkey%20Setup%202.0.12.exe + +[Section.0419] +Description = Продолжение Mozilla Suite. Включает браузер, почтовый клиент, IRC-клиент и HTML-редактор. +Size = 10.5MB +URLDownload = ftp://ftp.mozilla.org/pub/seamonkey/releases/2.0.12/win32/ru/SeaMonkey%20Setup%202.0.12.exe diff --git a/reactos/base/applications/rapps/rapps/smplayer.txt b/reactos/base/applications/rapps/rapps/smplayer.txt index df7c50e96ca..9cfd35f26b9 100644 --- a/reactos/base/applications/rapps/rapps/smplayer.txt +++ b/reactos/base/applications/rapps/rapps/smplayer.txt @@ -1,30 +1,30 @@ -; UTF-8 - -[Section] -Name = SMPlayer -Version = 0.6.9 -Licence = GPL -Description = SMPlayer. -Size = 14.2MB -Category = 1 -URLSite = http://smplayer.sourceforge.net/ -URLDownload = http://ovh.dl.sourceforge.net/project/smplayer/SMPlayer/0.6.9/smplayer-0.6.9-win32.exe -CDPath = none - -[Section.0407] -URLSite = http://smplayer.sourceforge.net/index.php?tr_lang=de - -[Section.040a] -URLSite = http://smplayer.sourceforge.net/index.php?tr_lang=es -Description = Interfaz gráfico para Mplayer (reproductor multimedia). - -[Section.040a] -URLSite = http://smplayer.sourceforge.net/index.php?tr_lang=fr - -[Section.0415] -URLSite = http://smplayer.sourceforge.net/index.php?tr_lang=pl -Description = Graficzna nakładka na MPlayer, otwarty odtwarzacz filmów. - -[Section.0422] -URLSite = http://smplayer.sourceforge.net/index.php?tr_lang=uk -Description = Графічний інтерфейс для MPlayer (мультимедійний плеєр). +; UTF-8 + +[Section] +Name = SMPlayer +Version = 0.6.9 +Licence = GPL +Description = SMPlayer. +Size = 14.2MB +Category = 1 +URLSite = http://smplayer.sourceforge.net/ +URLDownload = http://ovh.dl.sourceforge.net/project/smplayer/SMPlayer/0.6.9/smplayer-0.6.9-win32.exe +CDPath = none + +[Section.0407] +URLSite = http://smplayer.sourceforge.net/index.php?tr_lang=de + +[Section.040a] +URLSite = http://smplayer.sourceforge.net/index.php?tr_lang=es +Description = Interfaz gráfico para Mplayer (reproductor multimedia). + +[Section.040a] +URLSite = http://smplayer.sourceforge.net/index.php?tr_lang=fr + +[Section.0415] +URLSite = http://smplayer.sourceforge.net/index.php?tr_lang=pl +Description = Graficzna nakładka na MPlayer, otwarty odtwarzacz filmów. + +[Section.0422] +URLSite = http://smplayer.sourceforge.net/index.php?tr_lang=uk +Description = Графічний інтерфейс для MPlayer (мультимедійний плеєр). diff --git a/reactos/base/applications/rapps/rapps/steam.txt b/reactos/base/applications/rapps/rapps/steam.txt index 25f7228f273..615734a26d4 100644 --- a/reactos/base/applications/rapps/rapps/steam.txt +++ b/reactos/base/applications/rapps/rapps/steam.txt @@ -1,24 +1,24 @@ -; UTF-8 - -[Section] -Name = STEAM -Version = 1.0 -Licence = Freeware -Description = The STEAM Gaming platform used by many games these days. -Size = 1.5MB -Category = 4 -URLSite = http://steampowered.com/ -URLDownload = http://storefront.steampowered.com/download/SteamInstall.msi -CDPath = none - -[Section.0407] -Description = Die STEAM Spieleplattform, die von viele Spielen verwendet wird. - -[Section.040c] -Description = La plateforme de jeu STEAM utilisée par beaucoup de jeux de nos jours. - -[Section.0415] -Description = STEAM - platforma, którą używa obecnie wiele gier. - -[Section.0422] -Description = Ігрова платформа, що використовується багатьма іграми. +; UTF-8 + +[Section] +Name = STEAM +Version = 1.0 +Licence = Freeware +Description = The STEAM Gaming platform used by many games these days. +Size = 1.5MB +Category = 4 +URLSite = http://steampowered.com/ +URLDownload = http://storefront.steampowered.com/download/SteamInstall.msi +CDPath = none + +[Section.0407] +Description = Die STEAM Spieleplattform, die von viele Spielen verwendet wird. + +[Section.040c] +Description = La plateforme de jeu STEAM utilisée par beaucoup de jeux de nos jours. + +[Section.0415] +Description = STEAM - platforma, którą używa obecnie wiele gier. + +[Section.0422] +Description = Ігрова платформа, що використовується багатьма іграми. diff --git a/reactos/base/applications/rapps/rapps/sumatrapdf.txt b/reactos/base/applications/rapps/rapps/sumatrapdf.txt new file mode 100644 index 00000000000..abb9bc6926e --- /dev/null +++ b/reactos/base/applications/rapps/rapps/sumatrapdf.txt @@ -0,0 +1,18 @@ +; UTF-8 + +[Section] +Name = SumatraPDF +Version = 1.2 +Licence = GPLv3 +Description = Sumatra PDF is a slim, free, open-source PDF reader. Portable out of the box. +Size = 3.1MB +Category = 6 +URLSite = http://blog.kowalczyk.info/software/sumatrapdf/free-pdf-reader.html +URLDownload = http://kjkpub.s3.amazonaws.com/sumatrapdf/rel/SumatraPDF-1.2-install.exe +CDPath = none + +[Section.0407] +Description = Sumatra PDF ist ein freies, schlankes, Open-Source PDF-Anzeigeprogramm. + +[Section.0410] +Description = Sumatra PDF è un visualizzatore di file PDF. E' molto leggero ed è open source. diff --git a/reactos/base/applications/rapps/rapps/superfinder.txt b/reactos/base/applications/rapps/rapps/superfinder.txt index 9375c1d1ce4..350ac49bc84 100644 --- a/reactos/base/applications/rapps/rapps/superfinder.txt +++ b/reactos/base/applications/rapps/rapps/superfinder.txt @@ -1,21 +1,21 @@ -; UTF-8 - -[Section] -Name = Super Finder XT -Version = 1.6.2.1 -Licence = Freeware -Description = A fast and feature rich search Application. -Size = 4.5MB -Category = 12 -URLSite = http://fsl.sytes.net/ssearchxt.html -URLDownload = http://fsl.sytes.net/releases/setup_SuperFinderXT.exe -CDPath = none - -[Section.0407] -Description = Eine schnelle und effektive Suchanwendung. - -[Section.040c] -Description = Une application de recherche rapide et riche en fonctionnalités. - -[Section.0415] -Description = Szybka i bogata w opcje aplikacja szukająca. +; UTF-8 + +[Section] +Name = Super Finder XT +Version = 1.6.2.1 +Licence = Freeware +Description = A fast and feature rich search Application. +Size = 4.5MB +Category = 12 +URLSite = http://fsl.sytes.net/ssearchxt.html +URLDownload = http://fsl.sytes.net/releases/setup_SuperFinderXT.exe +CDPath = none + +[Section.0407] +Description = Eine schnelle und effektive Suchanwendung. + +[Section.040c] +Description = Une application de recherche rapide et riche en fonctionnalités. + +[Section.0415] +Description = Szybka i bogata w opcje aplikacja szukająca. diff --git a/reactos/base/applications/rapps/rapps/tahoma.txt b/reactos/base/applications/rapps/rapps/tahoma.txt index b1fb42903fc..68181fd4e0e 100644 --- a/reactos/base/applications/rapps/rapps/tahoma.txt +++ b/reactos/base/applications/rapps/rapps/tahoma.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = Microsoft Tahoma Font -Version = 1.0 -Licence = Unknown -Description = Tahoma Font pack needed by some apps (Steam). -Size = 305kB -Category = 14 -URLSite = http://support.microsoft.com/ -URLDownload = http://download.microsoft.com/download/office97pro/fonts/1/w95/en-us/tahoma32.exe -CDPath = none - -[Section.0407] -Licence = Unbekannt -Description = Tahoma Font pack, der von einigen Anwendungen benötigt wird (Steam). - -[Section.040c] -Licence = Inconnue -Description = Package pour la police Tahoma, nécessaire pour certaines applications (Steam). - -[Section.0415] -Description = Pakiet Czcionki Tahoma wymagany przez niektóre programy (np. Steam). - -[Section.0422] -Licence = Невідома -Description = Пакет шрифтів Tahoma, що необхідні деяким програмам (Steam). +; UTF-8 + +[Section] +Name = Microsoft Tahoma Font +Version = 1.0 +Licence = Unknown +Description = Tahoma Font pack needed by some apps (Steam). +Size = 305kB +Category = 14 +URLSite = http://support.microsoft.com/ +URLDownload = http://download.microsoft.com/download/office97pro/fonts/1/w95/en-us/tahoma32.exe +CDPath = none + +[Section.0407] +Licence = Unbekannt +Description = Tahoma Font pack, der von einigen Anwendungen benötigt wird (Steam). + +[Section.040c] +Licence = Inconnue +Description = Package pour la police Tahoma, nécessaire pour certaines applications (Steam). + +[Section.0415] +Description = Pakiet Czcionki Tahoma wymagany przez niektóre programy (np. Steam). + +[Section.0422] +Licence = Невідома +Description = Пакет шрифтів Tahoma, що необхідні деяким програмам (Steam). diff --git a/reactos/base/applications/rapps/rapps/thunderbird.txt b/reactos/base/applications/rapps/rapps/thunderbird.txt index ebfa41ce65b..644933e5867 100644 --- a/reactos/base/applications/rapps/rapps/thunderbird.txt +++ b/reactos/base/applications/rapps/rapps/thunderbird.txt @@ -1,48 +1,48 @@ -; UTF-8 - -[Section] -Name = Mozilla Thunderbird -Version = 3.1.9 -Licence = MPL/GPL/LGPL -Description = The most popular and one of the best free Mail Clients out there. -Size = 9.0M -Category = 5 -URLSite = http://www.mozilla-europe.org/en/products/thunderbird/ -URLDownload = ftp://ftp.mozilla.org/pub/thunderbird/releases/3.1.9/win32/en-US/Thunderbird%20Setup%203.1.9.exe -CDPath = none - -[Section.0407] -Description = Der populärste und einer der besten freien Mail-Clients. -Size = 8.8M -URLSite = http://www.mozilla-europe.org/de/products/thunderbird/ -URLDownload = ftp://ftp.mozilla.org/pub/thunderbird/releases/3.1.9/win32/de/Thunderbird%20Setup%203.1.9.exe - -[Section.040a] -Description = El más popular y uno de los mejores clientes mail que hay. -Size = 8.8M -URLSite = http://www.mozilla-europe.org/es/products/thunderbird/ -URLDownload = ftp://ftp.mozilla.org/pub/thunderbird/releases/3.1.9/win32/es-ES/Thunderbird%20Setup%203.1.9.exe - -[Section.040c] -Description = Le plus populaire et l'un des meilleurs clients mail gratuits disponible. -Size = 8.8M -URLSite = http://www.mozilla-europe.org/fr/products/thunderbird/ -URLDownload = ftp://ftp.mozilla.org/pub/thunderbird/releases/3.1.9/win32/fr/Thunderbird%20Setup%203.1.9.exe - -[Section.0415] -Description = Najpopularniejszy i jeden z najlepszych darmowych klientów poczty. -Size = 9.7M -URLSite = http://www.mozilla-europe.org/pl/products/thunderbird/ -URLDownload = ftp://ftp.mozilla.org/pub/thunderbird/releases/3.1.9/win32/pl/Thunderbird%20Setup%203.1.9.exe - -[Section.0419] -Description = Один из самых популярных и лучших бесплатных почтовых клиентов. -Size = 9.2M -URLSite = http://www.mozilla-europe.org/ru/products/thunderbird/ -URLDownload = ftp://ftp.mozilla.org/pub/thunderbird/releases/3.1.9/win32/ru/Thunderbird%20Setup%203.1.9.exe - -[Section.0422] -Description = Найпопулярніший та один з кращих поштових клієнтів. -Size = 9.2M -URLSite = http://www.mozillamessaging.com/uk/thunderbird/ -URLDownload = ftp://ftp.mozilla.org/pub/thunderbird/releases/3.1.9/win32/uk/Thunderbird%20Setup%203.1.9.exe +; UTF-8 + +[Section] +Name = Mozilla Thunderbird +Version = 3.1.9 +Licence = MPL/GPL/LGPL +Description = The most popular and one of the best free Mail Clients out there. +Size = 9.0M +Category = 5 +URLSite = http://www.mozilla-europe.org/en/products/thunderbird/ +URLDownload = ftp://ftp.mozilla.org/pub/thunderbird/releases/3.1.9/win32/en-US/Thunderbird%20Setup%203.1.9.exe +CDPath = none + +[Section.0407] +Description = Der populärste und einer der besten freien Mail-Clients. +Size = 8.8M +URLSite = http://www.mozilla-europe.org/de/products/thunderbird/ +URLDownload = ftp://ftp.mozilla.org/pub/thunderbird/releases/3.1.9/win32/de/Thunderbird%20Setup%203.1.9.exe + +[Section.040a] +Description = El más popular y uno de los mejores clientes mail que hay. +Size = 8.8M +URLSite = http://www.mozilla-europe.org/es/products/thunderbird/ +URLDownload = ftp://ftp.mozilla.org/pub/thunderbird/releases/3.1.9/win32/es-ES/Thunderbird%20Setup%203.1.9.exe + +[Section.040c] +Description = Le plus populaire et l'un des meilleurs clients mail gratuits disponible. +Size = 8.8M +URLSite = http://www.mozilla-europe.org/fr/products/thunderbird/ +URLDownload = ftp://ftp.mozilla.org/pub/thunderbird/releases/3.1.9/win32/fr/Thunderbird%20Setup%203.1.9.exe + +[Section.0415] +Description = Najpopularniejszy i jeden z najlepszych darmowych klientów poczty. +Size = 9.7M +URLSite = http://www.mozilla-europe.org/pl/products/thunderbird/ +URLDownload = ftp://ftp.mozilla.org/pub/thunderbird/releases/3.1.9/win32/pl/Thunderbird%20Setup%203.1.9.exe + +[Section.0419] +Description = Один из самых популярных и лучших бесплатных почтовых клиентов. +Size = 9.2M +URLSite = http://www.mozilla-europe.org/ru/products/thunderbird/ +URLDownload = ftp://ftp.mozilla.org/pub/thunderbird/releases/3.1.9/win32/ru/Thunderbird%20Setup%203.1.9.exe + +[Section.0422] +Description = Найпопулярніший та один з кращих поштових клієнтів. +Size = 9.2M +URLSite = http://www.mozillamessaging.com/uk/thunderbird/ +URLDownload = ftp://ftp.mozilla.org/pub/thunderbird/releases/3.1.9/win32/uk/Thunderbird%20Setup%203.1.9.exe diff --git a/reactos/base/applications/rapps/rapps/tileworld.txt b/reactos/base/applications/rapps/rapps/tileworld.txt index 9f465b31e91..985eb61e8a8 100644 --- a/reactos/base/applications/rapps/rapps/tileworld.txt +++ b/reactos/base/applications/rapps/rapps/tileworld.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = Tile World -Version = 1.3.0 -Licence = GPL -Description = Nice Clone of Chip's Challenge originally made for the Atari Lynx. Includes free CCLP2 Graphics Pack, so you dont need the copyrighted Original. -Size = 1.2MB -Category = 4 -URLSite = http://www.muppetlabs.com/~breadbox/software/tworld/ -URLDownload = http://www.muppetlabs.com/~breadbox/pub/software/tworld/tworld-1.3.0-win32-CCLP2.exe -CDPath = none - -[Section.0407] -Description = Schöner Klon von Chip's Challenge ursprünglich etnwickelt für Atari Lynx. Enthält CCLP2 Graphics Pack, deshalb wird das urheberrechtlich geschützte Original nicht benötigt. - -[Section.040a] -Description = Clon de Chip's Challenge originalmente creado para Atari Lynx. Incluye el paquete gráfico gratuito CCLP2, así que no es necesario el original con copyright. - -[Section.040c] -Description = Clone sympathique de Chip's Challenge originelment fait pour Atari Lynx. Il inclut le pack de graphisme gratuit CCLP2, ainsi vous n'avez pas besoin de l'original sous copyrigth. - -[Section.0415] -Description = Udany klon gry Chip's Challenge z Atari Lynx. Zawiera darmowy zestaw grafik CCLP2. - -[Section.0422] -Description = Чудовий клон гри Chip's Challenge для Atari Lynx. Включено безплатний графічний пакет CCLP2, тому вам не потрібен оригінальний. +; UTF-8 + +[Section] +Name = Tile World +Version = 1.3.0 +Licence = GPL +Description = Nice Clone of Chip's Challenge originally made for the Atari Lynx. Includes free CCLP2 Graphics Pack, so you dont need the copyrighted Original. +Size = 1.2MB +Category = 4 +URLSite = http://www.muppetlabs.com/~breadbox/software/tworld/ +URLDownload = http://www.muppetlabs.com/~breadbox/pub/software/tworld/tworld-1.3.0-win32-CCLP2.exe +CDPath = none + +[Section.0407] +Description = Schöner Klon von Chip's Challenge ursprünglich etnwickelt für Atari Lynx. Enthält CCLP2 Graphics Pack, deshalb wird das urheberrechtlich geschützte Original nicht benötigt. + +[Section.040a] +Description = Clon de Chip's Challenge originalmente creado para Atari Lynx. Incluye el paquete gráfico gratuito CCLP2, así que no es necesario el original con copyright. + +[Section.040c] +Description = Clone sympathique de Chip's Challenge originelment fait pour Atari Lynx. Il inclut le pack de graphisme gratuit CCLP2, ainsi vous n'avez pas besoin de l'original sous copyrigth. + +[Section.0415] +Description = Udany klon gry Chip's Challenge z Atari Lynx. Zawiera darmowy zestaw grafik CCLP2. + +[Section.0422] +Description = Чудовий клон гри Chip's Challenge для Atari Lynx. Включено безплатний графічний пакет CCLP2, тому вам не потрібен оригінальний. diff --git a/reactos/base/applications/rapps/rapps/tuxpaint.txt b/reactos/base/applications/rapps/rapps/tuxpaint.txt index a09f9217dfe..f4c6e4d6528 100644 --- a/reactos/base/applications/rapps/rapps/tuxpaint.txt +++ b/reactos/base/applications/rapps/rapps/tuxpaint.txt @@ -1,30 +1,30 @@ -; UTF-8 - -[Section] -Name = TuxPaint -Version = 0.9.21c -Licence = GPL -Description = An Open Source bitmap graphics editor geared towards young children. -Size = 11MB -Category = 3 -URLSite = http://tuxpaint.org/ -URLDownload = http://ovh.dl.sourceforge.net/project/tuxpaint/tuxpaint/0.9.21c/tuxpaint-0.9.21c-win32-installer.exe -CDPath = none - -[Section.0405] -Description = Open source bitmapový editor určený dětem. - -[Section.0407] -Description = Ein Open Source Bitmap Zeichenprogramm für kleine Kinder. - -[Section.040a] -Description = Editor gráfico de imágenes pensado para niños de código abierto. - -[Section.040c] -Description = Un éditeur graphic bitmap open source orienté pour les jeunes enfants. - -[Section.0415] -Description = Otwarty program graficzny przeznaczony głównie dla dzieci. - -[Section.0422] -Description = Відкритий графічний редактор для малих дітей. +; UTF-8 + +[Section] +Name = TuxPaint +Version = 0.9.21c +Licence = GPL +Description = An Open Source bitmap graphics editor geared towards young children. +Size = 11MB +Category = 3 +URLSite = http://tuxpaint.org/ +URLDownload = http://ovh.dl.sourceforge.net/project/tuxpaint/tuxpaint/0.9.21c/tuxpaint-0.9.21c-win32-installer.exe +CDPath = none + +[Section.0405] +Description = Open source bitmapový editor určený dětem. + +[Section.0407] +Description = Ein Open Source Bitmap Zeichenprogramm für kleine Kinder. + +[Section.040a] +Description = Editor gráfico de imágenes pensado para niños de código abierto. + +[Section.040c] +Description = Un éditeur graphic bitmap open source orienté pour les jeunes enfants. + +[Section.0415] +Description = Otwarty program graficzny przeznaczony głównie dla dzieci. + +[Section.0422] +Description = Відкритий графічний редактор для малих дітей. diff --git a/reactos/base/applications/rapps/rapps/ultravnc.txt b/reactos/base/applications/rapps/rapps/ultravnc.txt index f70c0c1790a..b8017499130 100644 --- a/reactos/base/applications/rapps/rapps/ultravnc.txt +++ b/reactos/base/applications/rapps/rapps/ultravnc.txt @@ -1,24 +1,24 @@ -; UTF-8 - -[Section] -Name = UltraVNC -Version = 1.0.9.5 -Licence = GPL -Description = Open-source VNC client/server. -Size = 2.1MB -Category = 5 -URLSite = http://www.uvnc.com/ -URLDownload = http://support1.uvnc.com/download/1095/UltraVNC_1.0.9.5_Setup.exe -CDPath = none - -[Section.040a] -Description = Cliente/Servidor VNC de código abierto. - -[Section.040c] -Description = Client/serveur VNC open source. - -[Section.0415] -Description = Otwarty klient/serwer VNC. - -[Section.0422] -Description = Відкритий VNC клієнт/сервер. +; UTF-8 + +[Section] +Name = UltraVNC +Version = 1.0.9.5 +Licence = GPL +Description = Open-source VNC client/server. +Size = 2.1MB +Category = 5 +URLSite = http://www.uvnc.com/ +URLDownload = http://support1.uvnc.com/download/1095/UltraVNC_1.0.9.5_Setup.exe +CDPath = none + +[Section.040a] +Description = Cliente/Servidor VNC de código abierto. + +[Section.040c] +Description = Client/serveur VNC open source. + +[Section.0415] +Description = Otwarty klient/serwer VNC. + +[Section.0422] +Description = Відкритий VNC клієнт/сервер. diff --git a/reactos/base/applications/rapps/rapps/utorrent.txt b/reactos/base/applications/rapps/rapps/utorrent.txt index b7b7a14ad72..7747b2b6102 100644 --- a/reactos/base/applications/rapps/rapps/utorrent.txt +++ b/reactos/base/applications/rapps/rapps/utorrent.txt @@ -1,37 +1,37 @@ -; UTF-8 - -[Section] -Name = µTorrent -Version = 2.2.1 -Licence = Freeware for non-commercial uses -Description = Small and fast BitTorrent Client. -Size = 390K -Category = 5 -URLSite = http://www.utorrent.com/ -URLDownload = http://download.utorrent.com/2.2.1/utorrent.exe -CDPath = none - - -[Section.0407] -Licence = Freeware für nichtkommerzielle Nutzung -Description = Kleiner und schneller BitTorrent Client. - -[Section.040a] -Licence = Gratuito para uso no comercial -Description = Pequeño y rápido cliente BitTorrent. - -[Section.040c] -Licence = Gratuit pour une utilisation non-commerciale -Description = Client BitTorrent petit et rapide. - -[Section.0415] -Licence = Freeware (do użytku domowego) -Description = Mały i szybki klient BitTorrent. - -[Section.0419] -Licence = Бесплатная для некоммерческого использования -Description = Маленький и быстрый клиент BitTorrent. - -[Section.0422] -Licence = Безплатна для некомерційного використання -Description = Маленький і швидкий клієнт BitTorrent. +; UTF-8 + +[Section] +Name = µTorrent +Version = 2.2.1 +Licence = Freeware for non-commercial uses +Description = Small and fast BitTorrent Client. +Size = 390K +Category = 5 +URLSite = http://www.utorrent.com/ +URLDownload = http://download.utorrent.com/2.2.1/utorrent.exe +CDPath = none + + +[Section.0407] +Licence = Freeware für nichtkommerzielle Nutzung +Description = Kleiner und schneller BitTorrent Client. + +[Section.040a] +Licence = Gratuito para uso no comercial +Description = Pequeño y rápido cliente BitTorrent. + +[Section.040c] +Licence = Gratuit pour une utilisation non-commerciale +Description = Client BitTorrent petit et rapide. + +[Section.0415] +Licence = Freeware (do użytku domowego) +Description = Mały i szybki klient BitTorrent. + +[Section.0419] +Licence = Бесплатная для некоммерческого использования +Description = Маленький и быстрый клиент BitTorrent. + +[Section.0422] +Licence = Безплатна для некомерційного використання +Description = Маленький і швидкий клієнт BitTorrent. diff --git a/reactos/base/applications/rapps/rapps/vb5run.txt b/reactos/base/applications/rapps/rapps/vb5run.txt index 7be8b065a01..12fb70ef3e9 100644 --- a/reactos/base/applications/rapps/rapps/vb5run.txt +++ b/reactos/base/applications/rapps/rapps/vb5run.txt @@ -1,32 +1,32 @@ -; UTF-8 - -[Section] -Name = Visual Basic 5 Runtime -Version = 5.0 -Licence = Unknown -Description = Visual Basic 5 Runtime. -Size = 970kB -Category = 14 -URLSite = http://support.microsoft.com/kb/180071/ -URLDownload = http://download.microsoft.com/download/vb50pro/utility/1/win98/en-us/msvbvm50.exe -CDPath = none - -[Section.0407] -Licence = Unbekannt -Description = Visual Basic 5 Laufzeitsystem. - -[Section.040a] -Licence = Desconocida -Description = Librerias Visual Basic 5. - -[Section.040c] -Licence = Inconnue -Description = Bibliothèque Visual Basic 5. - -[Section.0415] -Licence = Nieznana -Description = Biblioteki uruchomieniowe Visual Basic 5. - -[Section.0422] -Licence = Невідома -Description = Бібліотеки Visual Basic 5. +; UTF-8 + +[Section] +Name = Visual Basic 5 Runtime +Version = 5.0 +Licence = Unknown +Description = Visual Basic 5 Runtime. +Size = 970kB +Category = 14 +URLSite = http://support.microsoft.com/kb/180071/ +URLDownload = http://download.microsoft.com/download/vb50pro/utility/1/win98/en-us/msvbvm50.exe +CDPath = none + +[Section.0407] +Licence = Unbekannt +Description = Visual Basic 5 Laufzeitsystem. + +[Section.040a] +Licence = Desconocida +Description = Librerias Visual Basic 5. + +[Section.040c] +Licence = Inconnue +Description = Bibliothèque Visual Basic 5. + +[Section.0415] +Licence = Nieznana +Description = Biblioteki uruchomieniowe Visual Basic 5. + +[Section.0422] +Licence = Невідома +Description = Бібліотеки Visual Basic 5. diff --git a/reactos/base/applications/rapps/rapps/vb6run.txt b/reactos/base/applications/rapps/rapps/vb6run.txt index 621ff9d20ba..542b977c95d 100644 --- a/reactos/base/applications/rapps/rapps/vb6run.txt +++ b/reactos/base/applications/rapps/rapps/vb6run.txt @@ -1,32 +1,32 @@ -; UTF-8 - -[Section] -Name = Visual Basic 6 Runtime -Version = 6.0 -Licence = Unknown -Description = Visual Basic 6 Runtime. -Size = 1.0MB -Category = 14 -URLSite = http://support.microsoft.com/kb/192461/ -URLDownload = http://download.microsoft.com/download/5/a/d/5ad868a0-8ecd-4bb0-a882-fe53eb7ef348/VB6.0-KB290887-X86.exe -CDPath = none - -[Section.0407] -Licence = Unbekannt -Description = Visual Basic 6 Laufzeitsystem. - -[Section.040a] -Licence = Desconocida -Description = Librerias Visual Basic 6. - -[Section.040c] -Licence = Inconnue -Description = Bibliothèque Visual Basic -. - -[Section.0415] -Licence = Nieznana -Description = Biblioteki uruchomieniowe Visual Basic 6. - -[Section.0422] -Licence = Невідома -Description = Бібліотеки Visual Basic 6. +; UTF-8 + +[Section] +Name = Visual Basic 6 Runtime +Version = 6.0 +Licence = Unknown +Description = Visual Basic 6 Runtime. +Size = 1.0MB +Category = 14 +URLSite = http://support.microsoft.com/kb/192461/ +URLDownload = http://download.microsoft.com/download/5/a/d/5ad868a0-8ecd-4bb0-a882-fe53eb7ef348/VB6.0-KB290887-X86.exe +CDPath = none + +[Section.0407] +Licence = Unbekannt +Description = Visual Basic 6 Laufzeitsystem. + +[Section.040a] +Licence = Desconocida +Description = Librerias Visual Basic 6. + +[Section.040c] +Licence = Inconnue +Description = Bibliothèque Visual Basic -. + +[Section.0415] +Licence = Nieznana +Description = Biblioteki uruchomieniowe Visual Basic 6. + +[Section.0422] +Licence = Невідома +Description = Бібліотеки Visual Basic 6. diff --git a/reactos/base/applications/rapps/rapps/vc2005run.txt b/reactos/base/applications/rapps/rapps/vc2005run.txt index 850e2f247fa..50b68787d2c 100644 --- a/reactos/base/applications/rapps/rapps/vc2005run.txt +++ b/reactos/base/applications/rapps/rapps/vc2005run.txt @@ -1,32 +1,32 @@ -; UTF-8 - -[Section] -Name = Microsoft Visual C++ 2005 Redistributable Package -Version = 7.0 -Licence = Unknown -Description = Visual Studio 2005 Runtime. -Size = 2.6MB -Category = 14 -URLSite = http://www.microsoft.com/Downloads/details.aspx?displaylang=en&FamilyID=32bc1bee-a3f9-4c13-9c99-220b62a191ee -URLDownload = http://download.microsoft.com/download/6/B/B/6BB661D6-A8AE-4819-B79F-236472F6070C/vcredist_x86.exe -CDPath = none - -[Section.0407] -Licence = Unbekannt -Description = Visual Studio 2005 Laufzeitsystem. - -[Section.040a] -Licence = Desconocida -Description = Librerias Visual Studio 2005. - -[Section.040c] -Licence = Inconnue -Description = Bibliothèque Visual Studio 2005. - -[Section.0415] -Licence = Nieznana -Description = Biblioteki uruchomieniowe Visual Studio 2005. - -[Section.0422] -Licence = Невідома -Description = Бібліотеки Visual Studio 2005. +; UTF-8 + +[Section] +Name = Microsoft Visual C++ 2005 Redistributable Package +Version = 7.0 +Licence = Unknown +Description = Visual Studio 2005 Runtime. +Size = 2.6MB +Category = 14 +URLSite = http://www.microsoft.com/Downloads/details.aspx?displaylang=en&FamilyID=32bc1bee-a3f9-4c13-9c99-220b62a191ee +URLDownload = http://download.microsoft.com/download/6/B/B/6BB661D6-A8AE-4819-B79F-236472F6070C/vcredist_x86.exe +CDPath = none + +[Section.0407] +Licence = Unbekannt +Description = Visual Studio 2005 Laufzeitsystem. + +[Section.040a] +Licence = Desconocida +Description = Librerias Visual Studio 2005. + +[Section.040c] +Licence = Inconnue +Description = Bibliothèque Visual Studio 2005. + +[Section.0415] +Licence = Nieznana +Description = Biblioteki uruchomieniowe Visual Studio 2005. + +[Section.0422] +Licence = Невідома +Description = Бібліотеки Visual Studio 2005. diff --git a/reactos/base/applications/rapps/rapps/vc2005sp1run.txt b/reactos/base/applications/rapps/rapps/vc2005sp1run.txt index 92bd176ce98..40a8a5dee88 100644 --- a/reactos/base/applications/rapps/rapps/vc2005sp1run.txt +++ b/reactos/base/applications/rapps/rapps/vc2005sp1run.txt @@ -1,32 +1,32 @@ -; UTF-8 - -[Section] -Name = Microsoft Visual C++ 2005 SP1 Redistributable Package -Version = 7.1 -Licence = Unknown -Description = Visual Studio 2005 Runtime SP1. -Size = 2.6MB -Category = 14 -URLSite = http://www.microsoft.com/downloads/details.aspx?FamilyID=200b2fd9-ae1a-4a14-984d-389c36f85647&displaylang=en -URLDownload = http://download.microsoft.com/download/e/1/c/e1c773de-73ba-494a-a5ba-f24906ecf088/vcredist_x86.exe -CDPath = none - -[Section.0407] -Licence = Unbekannt -Description = Visual Studio 2005 Laufzeitsystem SP1. - -[Section.040a] -Licence = Desconocida -Description = Librerias Visual Studio 2005 SP1. - -[Section.040c] -Licence = Inconnue -Description = Bibliothèque Visual Studio 2005 SP1. - -[Section.0415] -Licence = Nieznana -Description = Biblioteki uruchomieniowe Visual Studio 2005 SP1. - -[Section.0422] -Licence = Невідома -Description = Бібліотеки Visual Studio 2005 SP1. +; UTF-8 + +[Section] +Name = Microsoft Visual C++ 2005 SP1 Redistributable Package +Version = 7.1 +Licence = Unknown +Description = Visual Studio 2005 Runtime SP1. +Size = 2.6MB +Category = 14 +URLSite = http://www.microsoft.com/downloads/details.aspx?FamilyID=200b2fd9-ae1a-4a14-984d-389c36f85647&displaylang=en +URLDownload = http://download.microsoft.com/download/e/1/c/e1c773de-73ba-494a-a5ba-f24906ecf088/vcredist_x86.exe +CDPath = none + +[Section.0407] +Licence = Unbekannt +Description = Visual Studio 2005 Laufzeitsystem SP1. + +[Section.040a] +Licence = Desconocida +Description = Librerias Visual Studio 2005 SP1. + +[Section.040c] +Licence = Inconnue +Description = Bibliothèque Visual Studio 2005 SP1. + +[Section.0415] +Licence = Nieznana +Description = Biblioteki uruchomieniowe Visual Studio 2005 SP1. + +[Section.0422] +Licence = Невідома +Description = Бібліотеки Visual Studio 2005 SP1. diff --git a/reactos/base/applications/rapps/rapps/vc2008run.txt b/reactos/base/applications/rapps/rapps/vc2008run.txt index 7e5efcd5edf..b6bf3443feb 100644 --- a/reactos/base/applications/rapps/rapps/vc2008run.txt +++ b/reactos/base/applications/rapps/rapps/vc2008run.txt @@ -1,32 +1,32 @@ -; UTF-8 - -[Section] -Name = Microsoft Visual C++ 2008 Redistributable Package -Version = 8.0 -Licence = Unknown -Description = Visual Studio 2008 Runtime. -Size = 4.3MB -Category = 14 -URLSite = http://www.microsoft.com/DOWNLOADS/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&displaylang=en -URLDownload = http://download.microsoft.com/download/9/7/7/977B481A-7BA6-4E30-AC40-ED51EB2028F2/vcredist_x86.exe -CDPath = none - -[Section.0407] -Licence = Unbekannt -Description = Visual Studio 2008 Laufzeitsystem. - -[Section.040a] -Licence = Desconocida -Description = Librerias Visual Studio 2008. - -[Section.040c] -Licence = Inconnue -Description = Bibliothèque Visual Studio 2008. - -[Section.0415] -Licence = Nieznana -Description = Biblioteki uruchomieniowe Visual Studio 2008. - -[Section.0422] -Licence = Невідома -Description = Бібліотеки Visual Studio 2008. +; UTF-8 + +[Section] +Name = Microsoft Visual C++ 2008 Redistributable Package +Version = 8.0 +Licence = Unknown +Description = Visual Studio 2008 Runtime. +Size = 4.3MB +Category = 14 +URLSite = http://www.microsoft.com/DOWNLOADS/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&displaylang=en +URLDownload = http://download.microsoft.com/download/9/7/7/977B481A-7BA6-4E30-AC40-ED51EB2028F2/vcredist_x86.exe +CDPath = none + +[Section.0407] +Licence = Unbekannt +Description = Visual Studio 2008 Laufzeitsystem. + +[Section.040a] +Licence = Desconocida +Description = Librerias Visual Studio 2008. + +[Section.040c] +Licence = Inconnue +Description = Bibliothèque Visual Studio 2008. + +[Section.0415] +Licence = Nieznana +Description = Biblioteki uruchomieniowe Visual Studio 2008. + +[Section.0422] +Licence = Невідома +Description = Бібліотеки Visual Studio 2008. diff --git a/reactos/base/applications/rapps/rapps/vc2008sp1run.txt b/reactos/base/applications/rapps/rapps/vc2008sp1run.txt index 713c2a7b711..0f05a041bc6 100644 --- a/reactos/base/applications/rapps/rapps/vc2008sp1run.txt +++ b/reactos/base/applications/rapps/rapps/vc2008sp1run.txt @@ -1,32 +1,32 @@ -; UTF-8 - -[Section] -Name = Microsoft Visual C++ 2008 SP1 Redistributable Package -Version = 8.0 -Licence = Unknown -Description = Visual Studio 2008 SP1 Runtime. -Size = 4.0MB -Category = 14 -URLSite = http://www.microsoft.com/downloads/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displaylang=en -URLDownload = http://download.microsoft.com/download/d/d/9/dd9a82d0-52ef-40db-8dab-795376989c03/vcredist_x86.exe -CDPath = none - -[Section.0407] -Licence = Unbekannt -Description = Visual Studio 2008 SP1 Laufzeitsystem. - -[Section.040a] -Licence = Desconocida -Description = Librerias Visual Studio 2008 SP1. - -[Section.040c] -Licence = Inconnue -Description = Bibliothèque Visual Studio 2008 SP1. - -[Section.0415] -Licence = Nieznana -Description = Biblioteki uruchomieniowe Visual Studio 2008 SP1. - -[Section.0422] -Licence = Невідома -Description = Бібліотеки Visual Studio 2008 SP1. +; UTF-8 + +[Section] +Name = Microsoft Visual C++ 2008 SP1 Redistributable Package +Version = 8.0 +Licence = Unknown +Description = Visual Studio 2008 SP1 Runtime. +Size = 4.0MB +Category = 14 +URLSite = http://www.microsoft.com/downloads/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displaylang=en +URLDownload = http://download.microsoft.com/download/d/d/9/dd9a82d0-52ef-40db-8dab-795376989c03/vcredist_x86.exe +CDPath = none + +[Section.0407] +Licence = Unbekannt +Description = Visual Studio 2008 SP1 Laufzeitsystem. + +[Section.040a] +Licence = Desconocida +Description = Librerias Visual Studio 2008 SP1. + +[Section.040c] +Licence = Inconnue +Description = Bibliothèque Visual Studio 2008 SP1. + +[Section.0415] +Licence = Nieznana +Description = Biblioteki uruchomieniowe Visual Studio 2008 SP1. + +[Section.0422] +Licence = Невідома +Description = Бібліотеки Visual Studio 2008 SP1. diff --git a/reactos/base/applications/rapps/rapps/vc6run.txt b/reactos/base/applications/rapps/rapps/vc6run.txt index 7349c590ac6..9ed5a088034 100644 --- a/reactos/base/applications/rapps/rapps/vc6run.txt +++ b/reactos/base/applications/rapps/rapps/vc6run.txt @@ -1,32 +1,32 @@ -; UTF-8 - -[Section] -Name = Microsoft Visual C++ 6 Redistributable Package -Version = 6.0 -Licence = Unknown -Description = Visual Studio 6 Runtime. -Size = 1.7MB -Category = 14 -URLSite = http://support.microsoft.com/kb/259403/ -URLDownload = http://download.microsoft.com/download/vc60pro/update/1/w9xnt4/en-us/vc6redistsetup_enu.exe -CDPath = none - -[Section.0407] -Licence = Unbekannt -Description = Visual Studio 6 Laufzeitsystem. - -[Section.040a] -Licence = Desconocida -Description = Librerias Visual Studio 2006. - -[Section.040c] -Licence = Inconnue -Description = Bibliothèque Visual Studio 6. - -[Section.0415] -Licence = Nieznana -Description = Biblioteki uruchomieniowe Visual Studio 6. - -[Section.0422] -Licence = Невідома -Description = Бібліотеки Visual Studio 6. +; UTF-8 + +[Section] +Name = Microsoft Visual C++ 6 Redistributable Package +Version = 6.0 +Licence = Unknown +Description = Visual Studio 6 Runtime. +Size = 1.7MB +Category = 14 +URLSite = http://support.microsoft.com/kb/259403/ +URLDownload = http://download.microsoft.com/download/vc60pro/update/1/w9xnt4/en-us/vc6redistsetup_enu.exe +CDPath = none + +[Section.0407] +Licence = Unbekannt +Description = Visual Studio 6 Laufzeitsystem. + +[Section.040a] +Licence = Desconocida +Description = Librerias Visual Studio 2006. + +[Section.040c] +Licence = Inconnue +Description = Bibliothèque Visual Studio 6. + +[Section.0415] +Licence = Nieznana +Description = Biblioteki uruchomieniowe Visual Studio 6. + +[Section.0422] +Licence = Невідома +Description = Бібліотеки Visual Studio 6. diff --git a/reactos/base/applications/rapps/rapps/vlc.txt b/reactos/base/applications/rapps/rapps/vlc.txt index 793776448b2..ae94d897561 100644 --- a/reactos/base/applications/rapps/rapps/vlc.txt +++ b/reactos/base/applications/rapps/rapps/vlc.txt @@ -1,30 +1,30 @@ -; UTF-8 - -[Section] -Name = VLC media player -Version = 1.1.7 -Licence = GPL -Description = A media player. -Size = 19.4MB -Category = 1 -URLSite = http://www.videolan.org/vlc/ -URLDownload = http://kent.dl.sourceforge.net/project/vlc/1.1.7/win32/vlc-1.1.7-win32.exe -CDPath = none - -[Section.0407] -Description = Ein Mediaplayer. - -[Section.040a] -Description = Reproductor multimedia. - -[Section.040c] -Description = Un lecteur media. - -[Section.0415] -Description = Odtwarzacz multimediów. - -[Section.0419] -Description = Мультимедийный проигрыватель. - -[Section.0422] -Description = Мультимедійний програвач. +; UTF-8 + +[Section] +Name = VLC media player +Version = 1.1.7 +Licence = GPL +Description = A media player. +Size = 19.4MB +Category = 1 +URLSite = http://www.videolan.org/vlc/ +URLDownload = http://kent.dl.sourceforge.net/project/vlc/1.1.7/win32/vlc-1.1.7-win32.exe +CDPath = none + +[Section.0407] +Description = Ein Mediaplayer. + +[Section.040a] +Description = Reproductor multimedia. + +[Section.040c] +Description = Un lecteur media. + +[Section.0415] +Description = Odtwarzacz multimediów. + +[Section.0419] +Description = Мультимедийный проигрыватель. + +[Section.0422] +Description = Мультимедійний програвач. diff --git a/reactos/base/applications/rapps/rapps/winboard.txt b/reactos/base/applications/rapps/rapps/winboard.txt index 1cdf14e6fe1..9e58a153fd0 100644 --- a/reactos/base/applications/rapps/rapps/winboard.txt +++ b/reactos/base/applications/rapps/rapps/winboard.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = WinBoard -Version = 4.2.7b -Licence = GPL 3 -Description = WinBoard is a graphical chessboard for the Windows/ReactOS that can serve as a user interface for GNU Chess, Crafty, and other chess engines, for the Internet Chess Servers, and for electronic mail correspondence chess. -Size = 5.9MB -Category = 4 -URLSite = http://www.gnu.org/software/xboard/ -URLDownload = ftp://ftp.gnu.org/old-gnu/xboard/winboard/winboard-4_2_7b.exe -CDPath = none - -[Section.0407] -Description = WinBoard ist ein grafisches Schachbrett für Windows/ReactOS welches als Nutzerinterface für GNU Chess, Crafty oder andere Schachprogramme, für Internet Schachserver und für Briefschach dient. - -[Section.040a] -Description = Tablero de ajedrez para Windows/ReactOS que puede ser utilizado como interfaz para GNU Chess, Crafty, y otros motores de ajedrez, para servidores de ajedrez en internet, y para partidas por correo electrónico. - -[Section.040c] -Description = WinBoard est un jeu d'échec graphique pour Windows/ReactOS qui peut servir d'interface utilisateur pour GNU Chess, Crafty et d'autres moteurs d'échecs, pour les serveurs d'échec internet et pour le jeu d'échec par courriel. - -[Section.0415] -Description = Graficzna szachownica dla systemu Windows/ReactOS, która może służyć jako graficzna nakładka dla GNU Chess, Crafty, lub innych programów szachowych (w tym internetowych serwerów szachowych) lub szachów korespondencyjnych. - -[Section.0422] -Description = Графічна шахматна дошка для Windows/ReactOS, що може слугувати графічним інтерфейсом для GNU Chess, Crafty, та інших шахматних двигунів, для серверів інтернет-шахмат та для шахматної переписки по е-мейл. +; UTF-8 + +[Section] +Name = WinBoard +Version = 4.2.7b +Licence = GPL 3 +Description = WinBoard is a graphical chessboard for the Windows/ReactOS that can serve as a user interface for GNU Chess, Crafty, and other chess engines, for the Internet Chess Servers, and for electronic mail correspondence chess. +Size = 5.9MB +Category = 4 +URLSite = http://www.gnu.org/software/xboard/ +URLDownload = ftp://ftp.gnu.org/old-gnu/xboard/winboard/winboard-4_2_7b.exe +CDPath = none + +[Section.0407] +Description = WinBoard ist ein grafisches Schachbrett für Windows/ReactOS welches als Nutzerinterface für GNU Chess, Crafty oder andere Schachprogramme, für Internet Schachserver und für Briefschach dient. + +[Section.040a] +Description = Tablero de ajedrez para Windows/ReactOS que puede ser utilizado como interfaz para GNU Chess, Crafty, y otros motores de ajedrez, para servidores de ajedrez en internet, y para partidas por correo electrónico. + +[Section.040c] +Description = WinBoard est un jeu d'échec graphique pour Windows/ReactOS qui peut servir d'interface utilisateur pour GNU Chess, Crafty et d'autres moteurs d'échecs, pour les serveurs d'échec internet et pour le jeu d'échec par courriel. + +[Section.0415] +Description = Graficzna szachownica dla systemu Windows/ReactOS, która może służyć jako graficzna nakładka dla GNU Chess, Crafty, lub innych programów szachowych (w tym internetowych serwerów szachowych) lub szachów korespondencyjnych. + +[Section.0422] +Description = Графічна шахматна дошка для Windows/ReactOS, що може слугувати графічним інтерфейсом для GNU Chess, Crafty, та інших шахматних двигунів, для серверів інтернет-шахмат та для шахматної переписки по е-мейл. diff --git a/reactos/base/applications/rapps/rapps/wme9.txt b/reactos/base/applications/rapps/rapps/wme9.txt index e053ec01580..994896f5907 100644 --- a/reactos/base/applications/rapps/rapps/wme9.txt +++ b/reactos/base/applications/rapps/rapps/wme9.txt @@ -1,27 +1,27 @@ -; UTF-8 - -[Section] -Name = Windows Media Encoder 9 -Version = 9.0 -Licence = Unknown -Description = Windows Media Encoder 9 -Size = 9.5MB -Category = 14 -URLSite = http://www.microsoft.com/downloads/details.aspx?FamilyID=5691ba02-e496-465a-bba9-b2f1182cdf24 -URLDownload = http://download.microsoft.com/download/8/1/f/81f9402f-efdd-439d-b2a4-089563199d47/WMEncoder.exe -CDPath = none - -[Section.0407] -Licence = Unbekannt - -[Section.040a] -Licence = Desconocida - -[Section.040a] -Licence = Inconnue - -[Section.0415] -Licence = Nieznana - -[Section.0422] -Licence = Невідома +; UTF-8 + +[Section] +Name = Windows Media Encoder 9 +Version = 9.0 +Licence = Unknown +Description = Windows Media Encoder 9 +Size = 9.5MB +Category = 14 +URLSite = http://www.microsoft.com/downloads/details.aspx?FamilyID=5691ba02-e496-465a-bba9-b2f1182cdf24 +URLDownload = http://download.microsoft.com/download/8/1/f/81f9402f-efdd-439d-b2a4-089563199d47/WMEncoder.exe +CDPath = none + +[Section.0407] +Licence = Unbekannt + +[Section.040a] +Licence = Desconocida + +[Section.040a] +Licence = Inconnue + +[Section.0415] +Licence = Nieznana + +[Section.0422] +Licence = Невідома From 123516873b1eb04e6c5e3acffb5045d1e381845e Mon Sep 17 00:00:00 2001 From: Giannis Adamopoulos Date: Mon, 14 Mar 2011 15:59:21 +0000 Subject: [PATCH 287/287] [win32k] - Partly revert r51031 svn path=/trunk/; revision=51050 --- .../subsystems/win32/win32k/ntuser/message.c | 12 +- .../subsystems/win32/win32k/ntuser/msgqueue.c | 173 ++++++++++++------ 2 files changed, 125 insertions(+), 60 deletions(-) diff --git a/reactos/subsystems/win32/win32k/ntuser/message.c b/reactos/subsystems/win32/win32k/ntuser/message.c index 0ee2514a03c..0822009f541 100644 --- a/reactos/subsystems/win32/win32k/ntuser/message.c +++ b/reactos/subsystems/win32/win32k/ntuser/message.c @@ -1459,21 +1459,19 @@ co_IntSendMessageWithCallBack( HWND hWnd, Message->lResult = 0; Message->QS_Flags = 0; Message->SenderQueue = NULL; // mjmartin, you are right! This is null. - IntReferenceMessageQueue(Win32Thread->MessageQueue); Message->CallBackSenderQueue = Win32Thread->MessageQueue; + + IntReferenceMessageQueue(Window->head.pti->MessageQueue); Message->CompletionCallback = CompletionCallback; Message->CompletionCallbackContext = CompletionCallbackContext; - Message->HookMessage = MSQ_NORMAL; // | MSQ_SENTNOWAIT + Message->HookMessage = MSQ_NORMAL | MSQ_SENTNOWAIT; Message->HasPackedLParam = (lParamBufferSize > 0); - Message->DispatchingListEntry.Flink = NULL; + Message->QS_Flags = QS_SENDMESSAGE; - - IntReferenceMessageQueue(Window->head.pti->MessageQueue); - MsqWakeQueue(Window->head.pti->MessageQueue, QS_SENDMESSAGE, FALSE); InsertTailList(&Window->head.pti->MessageQueue->SentMessagesListHead, &Message->ListEntry); - //IntDereferenceMessageQueue(Window->head.pti->MessageQueue); + IntDereferenceMessageQueue(Window->head.pti->MessageQueue); RETURN(TRUE); diff --git a/reactos/subsystems/win32/win32k/ntuser/msgqueue.c b/reactos/subsystems/win32/win32k/ntuser/msgqueue.c index 430b2c6687e..f225950dfd6 100644 --- a/reactos/subsystems/win32/win32k/ntuser/msgqueue.c +++ b/reactos/subsystems/win32/win32k/ntuser/msgqueue.c @@ -406,42 +406,6 @@ MsqDestroyMessage(PUSER_MESSAGE Message) ExFreeToPagedLookasideList(&MessageLookasideList, Message); } -VOID FASTCALL -MsqDestroySentMessage(PUSER_MESSAGE_QUEUE MessageQueue, PUSER_SENT_MESSAGE SentMessage) -{ - /* remove the message from the dispatching list if needed */ - if (SentMessage->DispatchingListEntry.Flink != NULL) - { - RemoveEntryList(&SentMessage->DispatchingListEntry); - } - - /* wake the sender's thread */ - if (SentMessage->CompletionEvent != NULL) - { - KeSetEvent(SentMessage->CompletionEvent, IO_NO_INCREMENT, FALSE); - } - - /* dereference message queues */ - IntDereferenceMessageQueue(MessageQueue); - if (SentMessage->SenderQueue) - { - IntDereferenceMessageQueue(SentMessage->SenderQueue); - } - if (SentMessage->CallBackSenderQueue) - { - IntDereferenceMessageQueue(SentMessage->CallBackSenderQueue); - } - - /* free lParam if needed */ - if (SentMessage->HasPackedLParam == TRUE && SentMessage->Msg.lParam) - { - ExFreePool((PVOID)SentMessage->Msg.lParam); - } - - /* free the message */ - ExFreePoolWithTag(SentMessage, TAG_USRMSG); -} - BOOLEAN FASTCALL co_MsqDispatchOneSentMessage(PUSER_MESSAGE_QUEUE MessageQueue) { @@ -505,10 +469,13 @@ co_MsqDispatchOneSentMessage(PUSER_MESSAGE_QUEUE MessageQueue) RemoveEntryList(&Message->ListEntry); /* remove the message from the dispatching list if needed, so lock the sender's message queue */ - if (Message->DispatchingListEntry.Flink != NULL) + if (!(Message->HookMessage & MSQ_SENTNOWAIT)) { - RemoveEntryList(&Message->DispatchingListEntry); - Message->DispatchingListEntry.Flink = NULL; + if (Message->DispatchingListEntry.Flink != NULL) + { + /* only remove it from the dispatching list if not already removed by a timeout */ + RemoveEntryList(&Message->DispatchingListEntry); + } } /* still keep the sender's message queue locked, so the sender can't exit the MsqSendMessage() function (if timed out) */ @@ -524,11 +491,16 @@ co_MsqDispatchOneSentMessage(PUSER_MESSAGE_QUEUE MessageQueue) *Message->Result = Result; } + if (Message->HasPackedLParam == TRUE) + { + if (Message->Msg.lParam) + ExFreePool((PVOID)Message->Msg.lParam); + } + /* Notify the sender. */ if (Message->CompletionEvent != NULL) { KeSetEvent(Message->CompletionEvent, IO_NO_INCREMENT, FALSE); - Message->CompletionEvent = NULL; /* prevent MsqDestroySentMessage from setting this event again */ } /* Call the callback if the message was sent with SendMessageCallback */ @@ -541,7 +513,15 @@ co_MsqDispatchOneSentMessage(PUSER_MESSAGE_QUEUE MessageQueue) Result); } - MsqDestroySentMessage(MessageQueue, Message); + /* Only if it is not a no wait message */ + if (!(Message->HookMessage & MSQ_SENTNOWAIT)) + { + IntDereferenceMessageQueue(Message->SenderQueue); + IntDereferenceMessageQueue(MessageQueue); + } + + /* free the message */ + ExFreePoolWithTag(Message, TAG_USRMSG); /* do not hangup on the user if this is reentering */ if (!SaveMsg) pti->pcti->CTI_flags &= ~CTI_INSENDMESSAGE; @@ -571,14 +551,16 @@ MsqRemoveWindowMessagesFromQueue(PVOID pWindow) { PostedMessage = CONTAINING_RECORD(CurrentEntry, USER_MESSAGE, ListEntry); - /* set CurrentEntry to next before destroying message */ - CurrentEntry = CurrentEntry->Flink; - if (PostedMessage->Msg.hwnd == Window->head.h) { RemoveEntryList(&PostedMessage->ListEntry); ClearMsgBitsMask(MessageQueue, PostedMessage->QS_Flags); MsqDestroyMessage(PostedMessage); + CurrentEntry = MessageQueue->PostedMessagesListHead.Flink; + } + else + { + CurrentEntry = CurrentEntry->Flink; } } @@ -589,9 +571,6 @@ MsqRemoveWindowMessagesFromQueue(PVOID pWindow) { SentMessage = CONTAINING_RECORD(CurrentEntry, USER_SENT_MESSAGE, ListEntry); - /* set CurrentEntry to next before destroying message */ - CurrentEntry = CurrentEntry->Flink; - if(SentMessage->Msg.hwnd == Window->head.h) { DPRINT("Notify the sender and remove a message from the queue that had not been dispatched\n"); @@ -599,7 +578,41 @@ MsqRemoveWindowMessagesFromQueue(PVOID pWindow) RemoveEntryList(&SentMessage->ListEntry); ClearMsgBitsMask(MessageQueue, SentMessage->QS_Flags); - MsqDestroySentMessage(MessageQueue, SentMessage); + /* remove the message from the dispatching list if neede */ + if ((!(SentMessage->HookMessage & MSQ_SENTNOWAIT)) + && (SentMessage->DispatchingListEntry.Flink != NULL)) + { + RemoveEntryList(&SentMessage->DispatchingListEntry); + } + + /* wake the sender's thread */ + if (SentMessage->CompletionEvent != NULL) + { + KeSetEvent(SentMessage->CompletionEvent, IO_NO_INCREMENT, FALSE); + } + + if (SentMessage->HasPackedLParam == TRUE) + { + if (SentMessage->Msg.lParam) + ExFreePool((PVOID)SentMessage->Msg.lParam); + } + + /* Only if it is not a no wait message */ + if (!(SentMessage->HookMessage & MSQ_SENTNOWAIT)) + { + /* dereference our and the sender's message queue */ + IntDereferenceMessageQueue(MessageQueue); + IntDereferenceMessageQueue(SentMessage->SenderQueue); + } + + /* free the message */ + ExFreePoolWithTag(SentMessage, TAG_USRMSG); + + CurrentEntry = MessageQueue->SentMessagesListHead.Flink; + } + else + { + CurrentEntry = CurrentEntry->Flink; } } } @@ -633,7 +646,7 @@ co_MsqSendMessage(PUSER_MESSAGE_QUEUE MessageQueue, Timeout.QuadPart = (LONGLONG) uTimeout * (LONGLONG) -10000; - /* FIXME - increase reference counter of sender's message queue here - isn't it done? */ + /* FIXME - increase reference counter of sender's message queue here */ Message->Msg.hwnd = Wnd; Message->Msg.message = Msg; @@ -643,9 +656,9 @@ co_MsqSendMessage(PUSER_MESSAGE_QUEUE MessageQueue, Message->Result = &Result; Message->lResult = 0; Message->QS_Flags = 0; - IntReferenceMessageQueue(ThreadQueue); Message->SenderQueue = ThreadQueue; Message->CallBackSenderQueue = NULL; + IntReferenceMessageQueue(ThreadQueue); Message->CompletionCallback = NULL; Message->CompletionCallbackContext = 0; Message->HookMessage = HookMessage; @@ -1414,7 +1427,35 @@ MsqCleanupMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue) DPRINT("Notify the sender and remove a message from the queue that had not been dispatched\n"); - MsqDestroySentMessage(MessageQueue, CurrentSentMessage); + /* remove the message from the dispatching list if needed */ + if ((!(CurrentSentMessage->HookMessage & MSQ_SENTNOWAIT)) + && (CurrentSentMessage->DispatchingListEntry.Flink != NULL)) + { + RemoveEntryList(&CurrentSentMessage->DispatchingListEntry); + } + + /* wake the sender's thread */ + if (CurrentSentMessage->CompletionEvent != NULL) + { + KeSetEvent(CurrentSentMessage->CompletionEvent, IO_NO_INCREMENT, FALSE); + } + + if (CurrentSentMessage->HasPackedLParam == TRUE) + { + if (CurrentSentMessage->Msg.lParam) + ExFreePool((PVOID)CurrentSentMessage->Msg.lParam); + } + + /* Only if it is not a no wait message */ + if (!(CurrentSentMessage->HookMessage & MSQ_SENTNOWAIT)) + { + /* dereference our and the sender's message queue */ + IntDereferenceMessageQueue(MessageQueue); + IntDereferenceMessageQueue(CurrentSentMessage->SenderQueue); + } + + /* free the message */ + ExFreePool(CurrentSentMessage); } /* notify senders of dispatching messages. This needs to be cleaned up if e.g. @@ -1425,9 +1466,36 @@ MsqCleanupMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue) CurrentSentMessage = CONTAINING_RECORD(CurrentEntry, USER_SENT_MESSAGE, ListEntry); + /* remove the message from the dispatching list */ + if(CurrentSentMessage->DispatchingListEntry.Flink != NULL) + { + RemoveEntryList(&CurrentSentMessage->DispatchingListEntry); + } + DPRINT("Notify the sender, the thread has been terminated while dispatching a message!\n"); - MsqDestroySentMessage(MessageQueue, CurrentSentMessage); + /* wake the sender's thread */ + if (CurrentSentMessage->CompletionEvent != NULL) + { + KeSetEvent(CurrentSentMessage->CompletionEvent, IO_NO_INCREMENT, FALSE); + } + + if (CurrentSentMessage->HasPackedLParam == TRUE) + { + if (CurrentSentMessage->Msg.lParam) + ExFreePool((PVOID)CurrentSentMessage->Msg.lParam); + } + + /* Only if it is not a no wait message */ + if (!(CurrentSentMessage->HookMessage & MSQ_SENTNOWAIT)) + { + /* dereference our and the sender's message queue */ + IntDereferenceMessageQueue(MessageQueue); + IntDereferenceMessageQueue(CurrentSentMessage->SenderQueue); + } + + /* free the message */ + ExFreePool(CurrentSentMessage); } /* tell other threads not to bother returning any info to us */ @@ -1438,7 +1506,6 @@ MsqCleanupMessageQueue(PUSER_MESSAGE_QUEUE MessageQueue) DispatchingListEntry); CurrentSentMessage->CompletionEvent = NULL; CurrentSentMessage->Result = NULL; - CurrentSentMessage->DispatchingListEntry.Flink = NULL; // yeah! /* do NOT dereference our message queue as it might get attempted to be locked later */