Compare commits

...

2586 Commits

Author SHA1 Message Date
Aleksey Bragin
6cb08c7fd3 - Move the last two items out from "unmaintained" thus restoring branches directory hierarchy.
- Delete "unmaintained" (it was a bad temporary solution after all).

svn path=/branches/cis/; revision=36848
2008-10-20 16:50:26 +00:00
Aleksey Bragin
bfb890a68d Move unmaintained stuff (cis, os2, rosky, vms, and msvc6) to a respective branch [01/02]
svn path=/branches/unmaintained/; revision=24496
2006-10-13 09:00:21 +00:00
Art Yerkes
a8e91f11af Fixen. Delete is still broken.
We now use BalancedRoot->Parent as the nil element and distinguish it from
the embedded element.
Fix null and root macros, assert macro and some other stuff.

svn path=/trunk/; revision=24495
2006-10-13 07:02:04 +00:00
Aleksey Bragin
20d422c02d - Fix a mistake in low memory pages allocation algorithm (commit-reviewers, where are you? :))
svn path=/trunk/; revision=24494
2006-10-12 20:46:07 +00:00
Hervé Poussineau
3dce4b0486 Read object security descriptors from .inf file. Apply them for registry keys and services and display a message for files
svn path=/trunk/; revision=24493
2006-10-12 09:01:16 +00:00
Hervé Poussineau
32ac32df07 Better stubs for RpcImpersonateClient and RpcRevertToSelf (taken from Wine)
svn path=/trunk/; revision=24492
2006-10-12 08:57:21 +00:00
Hervé Poussineau
cc0716b65d Send right security descriptor to InitializeObjectAttributes, so ntoskrnl won't fail
The code was working because we never tried to call RegCreateKeyEx with a security descriptor...

svn path=/trunk/; revision=24491
2006-10-11 23:11:59 +00:00
Hervé Poussineau
47ef13cf4a Replace incomplete and broken implementations of ConvertStringSecurityDescriptorToSecurityDescriptorW and ConvertStringSidToSidW by new ones
svn path=/trunk/; revision=24490
2006-10-11 22:14:05 +00:00
Hervé Poussineau
dc1d41df49 Add some definitions
svn path=/trunk/; revision=24489
2006-10-11 21:57:22 +00:00
Hervé Poussineau
a29de84b89 Don't try to signal init event, as it has been removed in r24413/24414
svn path=/trunk/; revision=24488
2006-10-11 18:25:22 +00:00
Thomas Bluemel
5cb6da33e5 Fixed InterlockedExchangeAdd
svn path=/trunk/; revision=24487
2006-10-11 17:41:42 +00:00
KJK::Hyperion
11962157c1 How could so much be so wrong in so little code is something future generations will forever ponder in vain. Fixed constraints on inline asm outputs for compare-exchange intrinsics
svn path=/trunk/; revision=24486
2006-10-11 16:07:45 +00:00
Thomas Bluemel
c0c399894e Some header upgrades
svn path=/trunk/; revision=24485
2006-10-11 11:44:40 +00:00
Thomas Bluemel
d395d0ad39 Fix polling of ShutdownNotify
svn path=/trunk/; revision=24484
2006-10-11 10:34:36 +00:00
Aleksey Bragin
e81472d5d0 - Add global var for keeping size of NLS data in pages
- Restructure memory-map building loop to create special descriptor for NLS data
- Fix a bug in memory-map building loop which lead to not covering last XXX pages of memory

svn path=/trunk/; revision=24483
2006-10-10 15:20:03 +00:00
Art Yerkes
79e9d9d8aa Added 'austin' AVL implementation and provide a binding for the AVL functions
in generictable.

Not tested, (but nothing relies on it yet).

Austin is
 Copyright (C) 2000 Kaz Kylheku <kaz@ashi.footprints.net>
 Copyright (C) 2000 Carl van Tast <vanTast@netway.at>

Copying, reuse and modification are permitted on liberal terms.

svn path=/trunk/; revision=24482
2006-10-10 12:31:16 +00:00
Aleksey Bragin
a8e5dde037 Add a stub to peloader.c
svn path=/trunk/; revision=24481
2006-10-10 10:42:07 +00:00
Aleksey Bragin
3bef467687 - Implement WinLdrLoadBootDrivers() / WinLdrLoadDeviceDriver() - to be able to load boot-time drivers
- Perform hardware detection in the beginning (I had to insert RegInitializeRegistry() hack because MachHwDetect initializes certain stuff in registry)
- Convert info from hwdetect to suitable form in LPB (code by Alex Ionescu, just moved/adapted). Debug routine added to output its contents.
- Move allocation memory for NlsData into "phase 0" (AllocateAndInitLPB)
- Fixed SystemRoot to be of a correct form (later will be autogenerated of course, now just for reference)

svn path=/trunk/; revision=24480
2006-10-10 10:38:45 +00:00
Filip Navara
493f953a0c Fix setting of SystemBootDevice and SystemStartOptions in registry.
Fix detection of MiniNT systems.

svn path=/trunk/; revision=24479
2006-10-10 00:22:04 +00:00
Filip Navara
7bbb81a0d4 Sort the key indexes in CM.
svn path=/trunk/; revision=24478
2006-10-09 23:43:06 +00:00
Hervé Poussineau
ca6e7110f5 - Start NetLogon service (lsass.exe)
- Fix lots of problems in error handling
- Some general cleanup

svn path=/trunk/; revision=24477
2006-10-09 19:19:28 +00:00
Hervé Poussineau
e16a26e1f2 Formatting and add a call to StartServiceCtrlDispatcher
svn path=/trunk/; revision=24476
2006-10-09 19:16:47 +00:00
Magnus Olsen
f86ee0a05c make our msvcrt bit more windows nt4/2000 compatible
do not link _i64toa and _i64tow to ntdll they are missing in windows nt4/windows 2000 ntdll. 

svn path=/trunk/; revision=24475
2006-10-09 18:42:24 +00:00
Magnus Olsen
80c28a9405 fixed so our taskmgr works in windows 2000
svn path=/trunk/; revision=24474
2006-10-09 18:01:56 +00:00
Thomas Bluemel
ca392ef651 Make sure the compiler doesn't optimize away writes to video memory
svn path=/trunk/; revision=24473
2006-10-09 16:37:27 +00:00
Thomas Bluemel
8a80403d2a Some portability fixes that address possible alignment issues. Read R. Chen's blog 10/06/06 for more information.
svn path=/trunk/; revision=24472
2006-10-09 15:09:50 +00:00
Aleksey Bragin
182fc37942 Revert r24430 changes (by Magnus Olsen) since they are incorrect (additionally confirmed by Filip Navara)
svn path=/trunk/; revision=24471
2006-10-09 15:02:33 +00:00
Thomas Bluemel
b79edc3b52 Fix compilation with GCC4
svn path=/trunk/; revision=24470
2006-10-09 14:59:10 +00:00
Thomas Bluemel
2600e04b68 Strings should be const char *. Fixes compilation with GCC4
svn path=/trunk/; revision=24469
2006-10-09 14:54:40 +00:00
Thomas Bluemel
b8dd6657bc Strings should be const char *. Fixes compilation with GCC4
svn path=/trunk/; revision=24468
2006-10-09 14:43:16 +00:00
Mindflyer
c255fa82a3 Change copyright to 1996-2006, because
a) our earliest version records show 1996
b) we are now in 2006

svn path=/trunk/; revision=24467
2006-10-09 12:37:03 +00:00
Aleksey Bragin
b6df2387ba Fix mkhive compiling by adding _NTSYSTEM_ define. This is needed after Thomas' fixes to headers.
svn path=/trunk/; revision=24466
2006-10-09 08:07:19 +00:00
Alex Ionescu
4ffb9d2c3e - Some misc changes to fix some of the 250+ warnings in the MSVC build.
svn path=/trunk/; revision=24465
2006-10-09 05:59:18 +00:00
Alex Ionescu
6951a4887c - Bootvid rewrite by Filip Navara (with some fixes by myself)
- HAL DMA enhancements by Filip Navara.
- CSRSS Console enhancements by Filip Navara.
- Win32k Primitive Queue/Input/Painting/Focus enhancements by Filip Navara.
- Other misc win32k/CSR bug fixes by Filip Navara.
- The new bootvid code has some bugs, but try out a GUI Boot!

svn path=/trunk/; revision=24464
2006-10-09 04:00:34 +00:00
Alex Ionescu
3012ee8072 - Initialize the registry in one shot, and allow it to fail and do the associated CONFIG_INIT_FAILED bugcheck.
- Initialize Io in one shot, with IoInitSystem.
- Locate the system DLL a bit later, since on the boot CD this creates a small incompatibility due to the wrong path being in use.

svn path=/trunk/; revision=24463
2006-10-09 01:16:28 +00:00
Alex Ionescu
b772538a22 - Add RtlInitEmptyAnsiString to DDK.
- Fix a pretty bad stack/memory corruption bug related to IoReassignSystemRoot.
- Combine IoInit2 and IoInit3 into IoInitSystem, and make it return a BOOLEAN, and handle error with the appropriate IO1_INIT_FAILED bugcheck. Will combine IoInit1 soon.

svn path=/trunk/; revision=24462
2006-10-08 23:46:26 +00:00
Alex Ionescu
2b1ade4723 - Remove InitSharedUserDataPage since this entire function is not needed anymore due to the recent ARC improvements.
- Call IoAssignDriverLetters with the proper parameters, and give it a chance to update the SystemRoot path (although our version doesn't yet do this).

svn path=/trunk/; revision=24461
2006-10-08 22:50:26 +00:00
Alex Ionescu
d4b5fef3d6 - Finalize ARC Boot changes:
* Rename IoCreateArcNames to IopCreateArcNames and set it to NTAPI, as well as pass the loader block as a parameter.
  * Reduce buffers to 128 bytes, since ARC Paths don't get longer then that.
  * Optimize stack usage by using a single ANSI_STRING instead of 3 or 4.
  * Optimize stack usage by using a single ansi buffer, not 2 or more.

svn path=/trunk/; revision=24458
2006-10-08 21:38:45 +00:00
Alex Ionescu
b5f79593de - Optimize IopApplyRosCdromArcHack by not searching for the second copy of ntoskrnl if we already found the first.
- Also optimize stack usage by only using an ANSI buffer instead of having another Unicode buffer and unicode strings. Saves 530 bytes of stack.

svn path=/trunk/; revision=24457
2006-10-08 21:16:20 +00:00
Alex Ionescu
5e214ceaa0 - Part 2.5 of ARC Boot changes. Re-factor IoCreateArcNames not to use a list-entry of detected disk from pool that gets looped and de-referenced, but instead use a simple loop which calls a function that gets disk information one-by-one (IopGetDiskInformation), so that it's used on the spot instead of allocated, linked, and retrieved later.
- Inline IopAssignArcNamesToDisk to reduce some stack size abuse and too much parameter shuffling.
- Stack use is still very inefficient, will fix next.

svn path=/trunk/; revision=24456
2006-10-08 21:09:00 +00:00
Thomas Bluemel
73c2dc5053 Some header fixes
svn path=/trunk/; revision=24454
2006-10-08 20:28:03 +00:00
Alex Ionescu
1047de88bf - Greatly simplify and optimize IoCreateArcNames by using ARC data from FreeLDR/NTLDR (now nearly 100% compatible!) instead of querying registry data (which FreeLdr had already set up, so we cached those values like ntldr does).
- Last step is to stop using a list of drives and pool allocated entries, to optimize memory usage and re-factor the code.

svn path=/trunk/; revision=24453
2006-10-08 19:59:53 +00:00
Alex Ionescu
c537eb20f2 - Have FreeLDR fill out ARC_DISK_SIGNATURE information for each detected disk, as it's filling the registry.
- Add code to KiRosFrldrLpbToLpb to convert this array to the official ARC_DISK_INFORMATION structure that contains LIST_ENTRYies for each ARC_DISK_SIGNATURE, and initialize the ArcDiskSignatureListHead.
- The end result will be that in the next patch we can remove a bunch of registry-reading code in IoCreateArcNames.

svn path=/trunk/; revision=24452
2006-10-08 19:34:16 +00:00
Alex Ionescu
7a1b73cf84 - Part 2 of ARC boot changes: Major modifications done to the existing code, as well as re-formatting and cleanup. Floppy ARC names are not created anymore (they don't exist), and CD-ROM ARC name is only created 1) when there is a boot CD and 2) only for the boot CD. This mimics NT functionality.
- Optimize some code paths, mostly by not querying the whole GET_DRIVE_GEOMETRY IRP twice and reducing some buffer usage. Also re-factor some code better into smaller functions.
- Document and work around currently FreeLDR incompatibility (lack of ARC_DISK_INFORMATION) data in LoaderBlock.

svn path=/trunk/; revision=24451
2006-10-08 16:58:03 +00:00
Aleksey Bragin
b234cb305e - Add dumping boot drivers list, remove unneded comment
- Implement WinLdrScanRegistry() (based on freeldr's already existing implementation) which searches for boot-loading drivers
- Implement WinLdrAddDriverToList() - it correctly fills an entry in the BootDriversList in LoaderParameterBlock

svn path=/trunk/; revision=24444
2006-10-08 10:06:06 +00:00
Aleksey Bragin
3c3080f16b - Add simple support functions to be able to use more RTL in FreeLdr
svn path=/trunk/; revision=24442
2006-10-08 08:54:44 +00:00
Alex Ionescu
6d262bb755 - Whoops, don't call IopReassignSystemRoot twice.
svn path=/trunk/; revision=24441
2006-10-08 07:59:30 +00:00
Alex Ionescu
66f4128216 - Part 1 of ARC boot cleanups/changes: Create a valid \\SystemRoot symbolic link as the system is booting, which points to the ARC name, then, once drivers have loaded, re-assign it to the proper NT Device name. Added proper security descriptors and flags to symbolic links, as well as proper bugchecks when required.
- Kept and cleaned up the ROS hack for CD-ROM boot.

svn path=/trunk/; revision=24440
2006-10-08 07:53:37 +00:00
Alex Ionescu
9307f32ce3 - More re-shuffling of initialization calls, including enabling access to the blue screen much much earlier (no point in doing it so late, but this change is not that useful since soon we'll have bootvid).
- Split Po init in two, so the early Po init (which we'll need to do eventually) doesn't depent on the later Po init (which uses a PnP notification which depends on the Io system).
- Make I/O initialize quite a bit later.

svn path=/trunk/; revision=24439
2006-10-08 04:47:26 +00:00
Alex Ionescu
4b00ba5d4d - Inline and make some slight correctiions to KiInitailizeSystemClock, since it's based on the Ex subsystem, not Ke. Add code for boot-time timezone bias, but currently disabled because I need to implement a function to read configuration registry data at startup.
- Improve Init bugchecks to give the exact module that failed. Add Kd initilization in the same block as the other subsystems.
- Rename and re-arrange some initlization calls.

svn path=/trunk/; revision=24438
2006-10-08 04:05:27 +00:00
Alex Ionescu
9088db842e - Stub LdrVerifyMappedImageMatchesChecksum.
- Separate locating the system DLL from initializing it.
- Implement split-phase PsInitSystem for Phase 0 and 1, and make system dll initialization as part of phase 1.
- Add MmVerifyImageIsOkForMpUse and MmCheckSystemImage to validate the system DLL.
- Add a separate bugcheck for each failure in PsLocateSystemDll, matching with the NT bugchecks that would occur.

svn path=/trunk/; revision=24437
2006-10-08 02:10:34 +00:00
Alex Ionescu
ebd9a573ec - In NTLDR boot, try to get the first kernel physical address from the loader entries.
- Fixup HAL's image base in the loader parameter block, since we load it at a different place then freeldr tells us.
- We've reached a dead end in NTLDR compatibility. Out memory manager initialization code makes some assumptions which are totally incompatible with the page table state that NTLDR gives us.

svn path=/trunk/; revision=24436
2006-10-08 00:04:03 +00:00
Alex Ionescu
378f64d047 - FreeLDR: Create the loader entry for ntoskrnl now that FreeLDR PE-loads it since last year. This lets us remove a large hack in ntoskrnl which was manually creating the entry and filling it in.
- Rename some LastKrnl... addresses into MmFreeLdr to easily identify them, and remove the need to use MmFreeLdrMemLower and MmFreeLdrPageDirectoryStart.
- Remove the static KERNEL_BASE definition based on a GCC-specific external. Everything now uses the actual module entry's saved base address.
- Fix a Ps Initialization hack and properly set the boot PDE.
- Add a hack for NTLDR's lack of MmFreeLdrMemHigher and MmFreeLdrPageDirectoryEnd.

svn path=/trunk/; revision=24435
2006-10-07 22:23:35 +00:00
Ged Murphy
f8fa7d16f8 move the string parsing routine into it's own function so it can be used with DeviceProblemWizard_RunDLL when required.
svn path=/trunk/; revision=24434
2006-10-07 15:02:43 +00:00
Ged Murphy
71bc38ca20 testing ros-diffs
svn path=/trunk/; revision=24433
2006-10-07 14:35:22 +00:00
Aleksey Bragin
a40bc5ff5f - Add structure for describing boot-loaded drivers
svn path=/trunk/; revision=24432
2006-10-07 13:07:25 +00:00
Alex Ionescu
b53f179583 - Fix calls to HvInitializeHive
svn path=/trunk/; revision=24431
2006-10-06 23:11:49 +00:00
Magnus Olsen
2db2156bb3 Fixed control apps windows, Let me known if it create any regress.
svn path=/trunk/; revision=24430
2006-10-06 21:59:42 +00:00
Aleksey Bragin
41c8741041 - Load and initialize in-memory registry
- Query NLS file names from registry instead of hardcoding
- Move loading of NLS data to WinLdrLoadAndScanSystemHive()

svn path=/trunk/; revision=24429
2006-10-06 21:20:36 +00:00
Alex Ionescu
e2295b6e85 - Fix calls to HvInitializeHive due to my last patch. Proof that Fireball doesn't properly test his commits... I broke Freeldr building before his commit, yet he commited it anyway even though freeldr couldn't build ;). Just kidding.
svn path=/trunk/; revision=24428
2006-10-06 20:52:50 +00:00
Aleksey Bragin
0b9fa0e21a - Make arc-path passed to the kernel look a bit more correct (still a hack of course)
- Add KdCom.dll loading along with ntoskrnl.exe and hal.dll
- Move registry-related code to a new file wlregistry.c
- WinLdrLoadAndScanSystemHive() is going to combine loading, initializing and parsing registry. NLS / OEM font data loading is marked with FIXMEs now, since it needs going into that routine (because registry tells the file names, not hardcoding them)

svn path=/trunk/; revision=24427
2006-10-06 20:28:55 +00:00
Alex Ionescu
9bfa61479f - Add PROFILE_ACPI_DOCKING_STATE.
- Fix HvInitialize definition to match more closely NT's since I need some of the extra parameters for the cm rewrite.
- Implement ExInitializePushLock and ExConvertPushLockSharedToExclusive macros.

svn path=/trunk/; revision=24426
2006-10-06 19:29:25 +00:00
Ged Murphy
6318f42ad0 fix a TCHAR brain lapse...
svn path=/trunk/; revision=24425
2006-10-06 17:10:57 +00:00
Ged Murphy
2380e7bb33 implemented DeviceProperties_RunDLLW and DeviceProperties_RunDLLA
svn path=/trunk/; revision=24424
2006-10-06 16:08:54 +00:00
Alex Ionescu
a4c366b659 - Add internal EX_CALLBACK Object to NDK. (Callback blocks are a new NT 5.2 kernel mechanism much like RunOncs blocks in Vista user-mode). They're managed by rundown protection and fast-referencing through interlocked calls to push/pop/sychrnonize system callbacks.
- Add ObOpenObjectByName to NDK, since this API is not documented in official headers.

svn path=/trunk/; revision=24422
2006-10-06 06:36:35 +00:00
Alex Ionescu
45d84c9668 - Guard some current cmlib includes against new cm branch
- Remove NTSYSAPI from NtBuildNumber definition in NDK.

svn path=/trunk/; revision=24416
2006-10-05 23:01:38 +00:00
Alex Ionescu
8859463623 - Remove SMSS's code for signaling the "init" event.
- Make ExpInitNls responsible for NLS initialization in Phase 0 as well, to clean up the code in ExpInitailizeExecutive a bit.
- Initialize the system time/clock in Phase 1, not in Phase 0.
- Do HAL Phase1 initialization as the first step in Phase 1 initialization, then initialize the system clock (since the HAL's RTC is now configured).
- Do Ob Phase 1 init in Phase 1 initialization, not in phase 0.
- Do Ke Phase 1 init after HAL, Ob and Ex phase 1 inits.
- Initialize NLS for Phase 1 after Ke Phase 1, instead of much later.

svn path=/trunk/; revision=24414
2006-10-05 16:38:58 +00:00
Alex Ionescu
093d1a3aba - Get rid of the completely convoluted way that Phase 1 initialization was being ended, with umpteen events and waits and timeouts all synchronized from user-mode and do a simple 5-second wait to determine if smss started OK or not.
- Promote the Phase 1 initialization thread by jumping directly into the zero-page thread, and remove manual zero-page thread initialization code since we simply jump into its main routine.
- 100 less lines of code :)

svn path=/trunk/; revision=24413
2006-10-05 16:14:28 +00:00
Alex Ionescu
eb8c705ce9 - Put all Phase 1 Ex* Initialization in ExpInitSystemPhase1 and clean up associated deprecated calls.
- Call ExpInitializePushLocks since we weren't doing this before.

svn path=/trunk/; revision=24412
2006-10-05 15:13:59 +00:00
Alex Ionescu
3f66fcf605 - Rewrite ExpLoadInitialProcess by inlining and simplifying what the call to RtlCreateProcsesParameters should do, and also create our own custom environment with the same arguments that NT's smss gets.
- This optimizes booting as well as gets use the differnet SESSIONY_INITIALIZATION_FAILED, where Y is a number representing which step of the process parameter/envieonment creation failed.

svn path=/trunk/; revision=24411
2006-10-05 14:49:20 +00:00
Aleksey Bragin
3727f8fc7d - Add #ifdef DEBUG / #endif to fix compile. FreeLdr's debug macros needs some improvement in the future...
svn path=/trunk/; revision=24410
2006-10-05 09:15:44 +00:00
Alex Ionescu
5162751ab3 - Use KeLoaderBlock for registry hive loading.
- Get rid of the CACHED_MODULE array and associated structures and stop using them, get rid of ParseAndCacheLoadedModules. Stop using KeLoadedModules and KeLoadedModuleCount outside of freeldr.c.
- Except for MmInit1, the kernel should now be totally isolated from FreeLDR-specific data.

svn path=/trunk/; revision=24409
2006-10-05 02:02:27 +00:00
Alex Ionescu
0bfcd77883 - Implement ExpInitNls to initialize the NLS Section using the new semantics recently implemented. Works pretty much like the previous code in rtl/nls.c except it uses the new variable names as well as maps a view of the NLS Table into the system process.c
- Delete rtl/nls.c and all the associated deprecated code.
- Do MmInit1 and SharedUserData stuff *after* initializing the initial thread, to avoid an ASSERT during bootup.

svn path=/trunk/; revision=24408
2006-10-05 01:44:54 +00:00
Ged Murphy
52d60b023b add a few more icons to the device imagelist
svn path=/trunk/; revision=24407
2006-10-04 22:29:18 +00:00
Christoph von Wittich
a387e6f9f8 -removed unused var
svn path=/trunk/; revision=24406
2006-10-04 22:06:00 +00:00
Aleksey Bragin
b103aa1ece - Add most needed memory-manipulating functions. Some places are really crappy (like WinLdrSetProcessorContext's IDT filling), will be fixed soon.
- FIXME: Since FreeLdr doesn't really keep track of which memory is of which type, this code has a massive hack for guessing the memory type, which is incorrect for future usage

svn path=/trunk/; revision=24405
2006-10-04 21:58:36 +00:00
Christoph von Wittich
a361366988 -support debugging of control panel applets
svn path=/trunk/; revision=24404
2006-10-04 21:47:43 +00:00
Christoph von Wittich
245dca159a -don't use GetLastError with Reg* functions
-remove @16 from def file (msvc doesn't like it)

svn path=/trunk/; revision=24403
2006-10-04 21:47:08 +00:00
Aleksey Bragin
602923e572 - Fix warning in winldr.c
- Implement WinLdrAllocateDataTableEntry() used for allocating and initializing the DTE
- Implement WinLdrLoadImage(), which uses LdrRelocateImageWithBias() from RTL, calling it with loader name "FLx86" (RTL should treat it differently -- ROS/WinLdr-specific behavior)

svn path=/trunk/; revision=24402
2006-10-04 21:36:56 +00:00
Aleksey Bragin
76abbb4423 - Remove some crap from the LoadAndBootWindows()
- Change debugging checkpoint to online-asm (all this is temporary), since any code after while(1){}; seems to be just optimized away by gcc
- Uncomment NDEBUG for now

svn path=/trunk/; revision=24401
2006-10-04 21:11:16 +00:00
Thomas Bluemel
32dcc834ed Fix broken resources
svn path=/trunk/; revision=24400
2006-10-04 19:55:53 +00:00
Ged Murphy
a595b4c7da add some overlay icons needed for devmgmt
svn path=/trunk/; revision=24399
2006-10-04 19:04:16 +00:00
Thomas Bluemel
948a1f9045 Fix almost the same bug in LdrGetProcedureAddress as in r24397
svn path=/trunk/; revision=24398
2006-10-04 18:46:57 +00:00
Thomas Bluemel
80da4a434c - Fix binary search algorithm in LdrGetProcedureAddress
- Fix temporary ntdll export hack (r24395)

svn path=/trunk/; revision=24397
2006-10-04 16:51:51 +00:00
Ged Murphy
7e6d549b19 - Open the device propsheet for child items (not parents as there isn't much point)
- Tag the Device ID onto the treeview items and provide functionality to tear it down
- Remove/change some code which wasn't needed to speed up opening time3
- We now have a pretty functional device manager. However it's heavily reliant on devmgr.dll, therefore functionality per device will rely on how complete this lib is.

svn path=/trunk/; revision=24396
2006-10-04 16:39:45 +00:00
Alex Ionescu
d0cb64ce3d - Implement XPSP2+ syscall stub that uses indirect pointer instead of executable code inside KUSER_SHARED_DATA.
- Someone (FILIP!) please fix LdrGetProcedureAddress. It's broken and I had to rename an ntdll export to make it work (see comments).
- Make sure you REBUILD CLEAN. This commit changes NCITool!!!
- Setup some NPX-related CPU features in SharedUserData during KiInitializeKernel.
- Remove some now-deprecated initialization functions.

svn path=/trunk/; revision=24395
2006-10-04 16:00:36 +00:00
Thomas Bluemel
48236aa642 Don't compile with -Wconversion since we have function callbacks that have parameters with sizes different from int without forward declarations. Fixes superfluous warnings.
svn path=/trunk/; revision=24394
2006-10-04 15:19:23 +00:00
Aleksey Bragin
778bad347c - Format code of InstallFatBootcodeToPartition(), changing from tabs+spaces mix to tabs only (use "ignore whitespaces" settings to view other changes)
- Change installation logic when installing to a NTLDR's boot.ini: Firstly freeldr.ini is checked for existence, and either created or updated, then boot.ini is checked for having a proper entry, and if needed - entry is added. Fixes related bugs (having more and more ReactOS entries, no entry added if freeldr.ini already exists in the root folder)

svn path=/trunk/; revision=24392
2006-10-04 12:26:12 +00:00
Magnus Olsen
41dea75354 this file some have forget set eol-style native
fixed

svn path=/trunk/; revision=24391
2006-10-04 10:59:01 +00:00
Magnus Olsen
07725072f3 1. move all languages file to own folder
2. fixed sub languages on allot languages rc files
3. add LMH1 Norwegian translations.

See issue #1698 for more details.

svn path=/trunk/; revision=24389
2006-10-04 06:58:03 +00:00
Alex Ionescu
38a5188c8e - Fix boot crash due to last patch, forgot that SharedUserDAta wasn't available yet.
svn path=/trunk/; revision=24388
2006-10-04 05:59:56 +00:00
Alex Ionescu
a6056d1fa9 - Fix KUSER_SHARED_DATA in winddk.h
- Scanfor NOEXECUTE/EXECUTE/OPTIN/OPTOUT/ALWAYSON/ALWAYSOFF load strings and set the appropriate NX policy in KUSER_SHARED_DATA as well as kernel CPU Feature flags.

svn path=/trunk/; revision=24387
2006-10-04 05:48:46 +00:00
Alex Ionescu
1e4f141555 - Add KF_XMMI64 feature flag for SSE2 and detect it.
- Detect Hyper-Threading and set Local APIC ID (put back Thomas's code that he added in an old revision and that I had accidentally removed and forgotten to re-convert into the new KiGetFeatureBits function).
- Add code to set the kernel MX Csr Mask in the FX Save Area.
- Startup the sysenter handler on the DPC stack.
- Detect and notify users with broken Pentiums.
- Do some NPX checks to forcefully disable any FPU flags that might be set (SSE, MMX, 3DNOW) if the NPX is disabled.

svn path=/trunk/; revision=24386
2006-10-04 05:29:30 +00:00
Alex Ionescu
917979cceb - Make Kernel initialization (KeInit2) portable/more complete. KeInit2 becomes KeInitSystem, the portable part, with a call to KiInitMachineDependent, the arch-specific part.
- Do all CPU configuration through IPIs and synchronize with potential multiple CPUs.
- Add mtrr.c and patpge.c for future support of MTRR, AMD K6 MTRR, PGE and PAT support, with initilization calls in each of them (which only print out a "Sorry" message).
- Add some stubbed code for extra initizliation to do later once some detection things are fixed.

svn path=/trunk/; revision=24385
2006-10-04 03:37:11 +00:00
Ged Murphy
ad0184614e update comctl32 to Wine-0.9.22 to get the new imagelist code.
svn path=/trunk/; revision=24384
2006-10-03 22:46:26 +00:00
Ged Murphy
2ef79f3efe add LPCDLGTEMPLATE definition
svn path=/trunk/; revision=24383
2006-10-03 22:43:46 +00:00
Ged Murphy
f1775cc055 fix processor display
svn path=/trunk/; revision=24382
2006-10-03 20:51:35 +00:00
Thomas Bluemel
99379a7e2c Fix warning
svn path=/trunk/; revision=24381
2006-10-03 20:04:39 +00:00
Ged Murphy
a2d3c5fe33 - Implement the context menu (mouse only at the moment) makeing it accessable when the cursor over the item only
- open the propsheet when double clicking child items
- make 'properties' bold

svn path=/trunk/; revision=24380
2006-10-03 19:55:15 +00:00
Hervé Poussineau
21dd51fc8b Copy i8042prt driver from 0.3.1 branch to trunk. Try #2
svn path=/trunk/; revision=24379
2006-10-03 18:04:03 +00:00
Hervé Poussineau
90b4dc09c7 Of course, I've added one level in directory structure in 24377. Delete the whole i8042prt driver and retry
(Sorry, this revision won't build)

svn path=/trunk/; revision=24378
2006-10-03 18:03:28 +00:00
Hervé Poussineau
273908b19f Copy i8042prt driver from 0.3.1 branch to trunk
svn path=/trunk/; revision=24377
2006-10-03 18:00:04 +00:00
Hervé Poussineau
b207566c12 Add back registry entries from i8042prt/kbdclass/mouclass
svn path=/trunk/; revision=24376
2006-10-03 17:57:29 +00:00
Thomas Bluemel
fd990e9ada Fix displaying Win32 errors (the Reg* APIs don't set the last error code!)
svn path=/trunk/; revision=24375
2006-10-03 17:02:36 +00:00
Thomas Bluemel
7b5fcdd9fa Fix displaying the size of the RAM
svn path=/trunk/; revision=24374
2006-10-03 16:25:13 +00:00
Hervé Poussineau
30189808bf Fix a few warnings
svn path=/trunk/; revision=24373
2006-10-03 14:28:21 +00:00
Ged Murphy
640d89daad set processor information in the sysdm control panel applet
svn path=/trunk/; revision=24372
2006-10-02 23:35:43 +00:00
Andrew Munger
2167cc7a61 Patch from ShadowFlare, bug 1838.
"The current implementation continues to register or unregister additional DLLs
that were specified, even if one of the earlier ones failed.  The behavior on
the Microsoft version is different; if one fails, it stops there instead of
continuing.  Some installers may possibly depend on this behavior."

svn path=/trunk/; revision=24371
2006-10-02 22:21:37 +00:00
Aleksey Bragin
835bb80157 - Add registry entry for usbdriver.sys's legacy loading. Commented out by default.
- Add usbdriver.sys to bootcd

svn path=/trunk/; revision=24370
2006-10-02 21:28:01 +00:00
Aleksey Bragin
903c277247 - Change CONNECT_DATA to DEV_CONNECT_DATA
- Add the last bit to the usb mouse driver to make it functional - recognition by mouclass.sys, and sending input data to it
- Misc small changes

Now USB mouse works in 2nd stage (you need to add usbdriver.sys as a legacy driver to the registry certainly)

TODO, but not of the top priority:
- Make unloading correct

svn path=/trunk/; revision=24369
2006-10-02 21:23:41 +00:00
Hervé Poussineau
c99914fdac Disable keyboard and mouse before checking the i8042 controller.
Flush queue before enabling them

svn path=/trunk/; revision=24368
2006-10-02 21:14:40 +00:00
Hervé Poussineau
3674f2ef32 Fix 2 typos (spotted by Fireball)
svn path=/trunk/; revision=24367
2006-10-02 19:36:14 +00:00
Ged Murphy
3193a5d7e9 - display system RAM on the general page.
- fixes bug 1835

svn path=/trunk/; revision=24366
2006-10-02 18:51:31 +00:00
Hervé Poussineau
b2aeafcad4 Implement CMP_WaitNoPendingInstallEvents
Wait for Pnp manager to finish its job before displaying the 2nd stage setup
Thanks Filip for his precious help on the umpnpmgr.exe side (not thread-safe as Single linked list functions are not implemented in ntdll)

svn path=/trunk/; revision=24365
2006-10-02 18:46:39 +00:00
Ged Murphy
4cfbdb6f63 - Only call SetupDiGetClassDevs once for each class, this makes load time 3 times faster although I'm still not happy with it. We may have to enumerate the drivers in the background.
- use UINT for 1 bit flags, reduce the width a little and check the menu.

svn path=/trunk/; revision=24364
2006-10-02 18:14:58 +00:00
Alex Ionescu
04c5f92621 - Combine SeInit1 and SeInit2 into SeInit since both can be done together now.
- Call PsInitSystem instead of PspInitPhase0, since PsInitsystem is the "external" phase-choosing routine.
- Implement ExComputeTickCountMultiplier to create a 24-bit precision remainder + whole integer of the ms/clock tick used in SharedUserData.
- Set the OS version and Machine Type (i386/PPC (<3 Arty) in SharedUserData.
- Move some HAL calls in Phase 2 (actually Phase 1...), same for KeInit2.
- Break into KDBG a bit earlier.

svn path=/trunk/; revision=24363
2006-10-02 15:52:58 +00:00
Alex Ionescu
06142d4e0d - Setup memory limits in shared user data.
- Loop security descriptors to find NLS data and make a copy of it in kernel pool, because the NLS buffer from NTLDR will be freed on NT. Also discovered a bug in Freeldr where it doesn't allocate ths NLS files sequentially, leaving a hole of 0x1000 between them. Added a hack to compensate (won't break NTLDR booting, just will waste 8KB of memory).
- Allocate the system call count table on checked builds.
- Refactor Ob/Se booting to match more closely NT, and so that we can do Se initialization in one shot.

svn path=/trunk/; revision=24362
2006-10-02 15:05:03 +00:00
Thomas Bluemel
62ac7ad5c9 Fix some warnings
svn path=/trunk/; revision=24361
2006-10-02 13:29:55 +00:00
Alex Ionescu
afa1de7c81 - Implement Phase 0 Ex initialization (Resource, Lookaside initialization) and generic Ex initialization routine.
- Clear the crypto exponent on boot-up.
- Set default global flags for checked builds.
- Set NtSystemRoot (SharedUserData) to C:<NT BOOT PATH> on startup.
- Cleanup lookas.c file and implement routines to initialize the system lookaside list in phase 0.

svn path=/trunk/; revision=24360
2006-10-02 13:23:03 +00:00
Thomas Bluemel
526efd2ee7 Define NTOSAPI before including ntddk.h to avoid including function prototypes with dllimport
svn path=/trunk/; revision=24359
2006-10-02 12:22:17 +00:00
Alex Ionescu
7fcf928e38 - Continue implementation of KiRosFrldrLpbToNtLpb by parsing the FreeLDR command line and:
* Removing the ARC Boot path and splitting it into the ARC Boot Device Name, the ARC HAL Device Name, and the NT Boot and HAL Path Names, saved in their respective LoaderBlock pointers.
  * Converting every slash to a space. ("/DEBUGPORT" -> " DEBUGPORT")
  * Now we can fully parse and read NTLDR command lines.
- Update various code in the kernel to:
  * Use LoaderBlock->ArcDeviceNamePath & friends instead of the command line.
  * Stop depending on slashes, and instead use strstr for parameters.

svn path=/trunk/; revision=24358
2006-10-02 05:40:36 +00:00
Aleksey Bragin
5c112af711 - Add a check to the boot.ini-changing code, to prevent creation of a new ReactOS entry after each installation.
svn path=/trunk/; revision=24356
2006-10-01 21:48:05 +00:00
Andrew Munger
e6adaebbce Resource sync from trunk.
Merged 24269, 24281, 24285, 24292, 24294-24295,
24298-24299, and 24303.

svn path=/branches/ros-branch-0_3_1/; revision=24355
2006-10-01 21:32:47 +00:00
Aleksey Bragin
5cf4352021 - Implement loading of NLS data, SYSTEM hive data (just simple loading into memory, without any kind of parsing or even checking if that data is correct)
- Add a function for creating a stub of hardware config (config consisting of only one node - root)
- Implement two steps of LPB initialization (names Phase 0 and Phase 1 are used internally by me, and doesn't correspond to anything)
- Implement a WinLdrSetupForNt, which allocates and initializes some specific structures (PCR, TSS, GDT, IDT)
- Respectively enable calls to these functions from LoadAndBootWindows()

svn path=/trunk/; revision=24354
2006-10-01 21:15:15 +00:00
Aleksey Bragin
eb998b4eaf - Comment out xbox memory detection for now (until fully switched to NT-style LPB)
- Fix HalpInitializePhase0() prototype
- Add halxbox back to build

svn path=/trunk/; revision=24353
2006-10-01 21:07:25 +00:00
Alex Ionescu
0c1b724e79 - Un-optimize KeGetPcr and make it use fs:20h instead of hard-coding the 0xFF.... address, because someone decided that ROS should have a different KPCR address then NT.
- This gets NTLDR working with ReactOS and I can boot all the way to MmInit1 (which fails due to missing KeMemoryMap & freeldr data).
- Serial port output works with DPRINT1 as well ;-)

svn path=/trunk/; revision=24352
2006-10-01 20:27:36 +00:00
Alex Ionescu
2855e1f08f - Do MmInit1 in KiInitializeKernel so we can access SharedUserData from it (we'll need to setup the CPU Features there).
- Cleanup some external/prototype mess and put them nicely into headers.

svn path=/trunk/; revision=24351
2006-10-01 19:43:18 +00:00
Aleksey Bragin
3d9d36ccff - Add new type of debug print for windows loader
- Add address conversion routines for windows loader
- Add stubs for PE loading, memory operations
- Add some code to the LoadAndBootWindows()

Some notes:
- The windows loader is going to become some kind of a library in future, shared at least between freeldr and EFI loader.
- The code in windows loader is specific to i386 architecture for now, but I add it to the "freeldr_base". I better separate it a bit later, after discussion with arty (because I hardly want compatibility with loading windows on PPC).

svn path=/trunk/; revision=24350
2006-10-01 19:39:49 +00:00
Andrew Munger
b5dbaf9282 Merge the one line fix from 24273 v. 24276.
svn path=/branches/ros-branch-0_3_1/; revision=24349
2006-10-01 19:29:03 +00:00
Alex Ionescu
71e329a125 - Do MmInit1 much earlier in the boot phase (right at the beginning of ExpInitalizeExecutive). This gives us access to things like SharedUserData, which NT has since NTLDR. Will try moving it up even higher.
- Also move some ROS-specific/Freeldr hacks on top of the file so they'll be easier to remove later when needed.
- Fix a bug in ExInitPoolLookasidePointers which was making us overwrite low-memory.
- Initialize NLS tables during Phase 0, so that the associated APIs can work earlier.
- Bugcheck if HAL Phase 0 initialization failed, and force interrupts enabled after the HAL is ready.

svn path=/trunk/; revision=24348
2006-10-01 19:27:10 +00:00
Alex Ionescu
9f40202dfc - Add setupblk.h from TinyKRNL with all the definitions for NT's SETUPLDR structures (SETUP_LOADER_BLOCK and hardware configuration stuff). Update KiRosFrldrLpbToNtLpb to setup the Flags field of this block to "Text-Mode Setup Active" when we know that we're in ROS text mode.
- Update ExpInitializeExecutive to check for a valid setup block and detect text-mode and network installation modes. Use ExpInTextModeSetup instead of SetupMode variable, to make detection compatible with NTLDR.

svn path=/trunk/; revision=24347
2006-10-01 18:27:59 +00:00
Alex Ionescu
cbfbbdb7f1 - Implement ExpIsLoaderValid to validate the LOADER_PARAMETER_BLOCK's extension for the right size and version (we currently support 5.2 and over).
- Add code in KiRosFrldrLpbToNtLpb to setup a LOADER_PARAMETER_EXTENSION and set the right version and size.
- Initialize the per-CPU PRCB Paged/NPaged lookaslide pool lists.
- Add code to support application CPUs booting in ExpInitializeExecutive, and pass the loaderblock as a parameter.

svn path=/trunk/; revision=24346
2006-10-01 18:01:38 +00:00
Alex Ionescu
0adfdd1ace - Implement static compile-time assertions and use them for structure field checks. Thanks to Thomas and KJK.
svn path=/trunk/; revision=24345
2006-10-01 15:52:10 +00:00
Alex Ionescu
4f1804b0c0 - Use __readfsdword instead of de-referencing the Boot PCR, which is not queried for Application CPUs. (And put the Goto back where it was). Thanks to Thomas Weidenmueller for noticing.
svn path=/trunk/; revision=24344
2006-10-01 15:22:42 +00:00
KJK::Hyperion
41ecee90f7 Fixed:
- _InterlockedCompareExchange64 (more efficient handling of 64-bit operands)
 - __writecr0, __writecr3, __writecr4 (for real this time)

svn path=/trunk/; revision=24343
2006-10-01 14:49:07 +00:00
Thomas Bluemel
70da417c02 Fix usage of a uninitialized variable, unnecessary goto not replaced by a if(...) statement
svn path=/trunk/; revision=24342
2006-10-01 14:02:08 +00:00
Thomas Bluemel
d7978d0054 fix __writecr0, __writecr3 and __writecr4
svn path=/trunk/; revision=24341
2006-10-01 12:33:24 +00:00
Thomas Bluemel
408d13caaa Fix function name (fixes a redefinition error)
svn path=/trunk/; revision=24340
2006-10-01 12:19:36 +00:00
Hervé Poussineau
5895844509 Add ufatx.dll, to be able to create FATX (Xbox file system) partitions
svn path=/trunk/; revision=24339
2006-10-01 10:11:46 +00:00
Hervé Poussineau
72a9a3af12 Rewrite SetupDiGetClassImageListExW and SetupDiGetClassImageIndex which were completly wrong
Add stub for SetupDiDestroyClassImageList
Now, you can see some icons in device manager

svn path=/trunk/; revision=24338
2006-10-01 09:05:19 +00:00
Alex Ionescu
ebafbecc80 - Fix Ki386InitializeTss to use dynamic GDT calculated from KiGetMachineBootPointers instead of static internal address. Now NTLDR boots us all the way to HalInitializeProcessor.
svn path=/trunk/; revision=24337
2006-10-01 07:31:33 +00:00
Alex Ionescu
7c753a339a - Put IDT in RW .data section
- Fix Ki386InitializeTss to properly set Boot TSS descriptor data (set it to 32-bits). Also properly setup the DF/NMI Task Gates in the IDT.

svn path=/trunk/; revision=24336
2006-10-01 07:24:24 +00:00
Alex Ionescu
00564d63b7 - Clear KPCR->TEB during bootstrap as well.
- Use KPCR_PROCESSOR_NUMBER instead of 0x130.

svn path=/trunk/; revision=24335
2006-10-01 06:46:08 +00:00
Alex Ionescu
aebf830821 - Add two more lines in boot.S which detect boot-by-NTLDR and jump into KiSystemService (I thought FreeLdr didn't use the entrypoint, but it looks like it does, so this hack is needed). Detection is done by checking for the high bit in the PLOADER_PARAMETER_BLOCK pointer, which will be set on NT.
- Fix a double bug in KiSystemStartup. First, we were setting KPCR->Number instead of KPRCB->Number. Second, we were using KeGetPcr instead of __writefsdword. It worked on ROS because KeGetPcr is hard-coded to ROS's KPCR buffer.

svn path=/trunk/; revision=24334
2006-10-01 06:43:26 +00:00
Alex Ionescu
790760dcf4 - Remove all the remaining code in boot.S and make KiRosPrepareForSystemStartup fastcall. Now NtProcessStartup just does a jmp to KiRosPrepareForSystemStartup without any other code.
- Use freeldr's stack during all of freeldr.c, and only switch to the boot stack in KiSystemStartup before calling KiInitializeKernel. This is what NT does as well (it piggybacks on NTLDR's stack until then). This allowed us to clean boot.S and now we can boot from NTLDR properly.

svn path=/trunk/; revision=24333
2006-10-01 06:08:05 +00:00
Alex Ionescu
380f89c205 - Fully use KeLoaderBlock->InLoadOrderListHead for driver loading and symbol lookups, instead of KeLoaderModules/KeLoaderModuleCount. Still not 100% compatible with NTLDR (since it uses BootDriverListHead with a special structure), but much closer to a portable design that doesn't rely on static kernel data.
- Change some internal functions to use UNICODE_STRING instead of PCHAR since this is how LdrEntry->BaseDllName is, and also it's closer to NT Design.

svn path=/trunk/; revision=24331
2006-10-01 05:05:57 +00:00
Andrew Munger
32b3c2fdf9 WaxDragon curses BrandonTurner.
svn path=/branches/ros-branch-0_3_1/; revision=24330
2006-10-01 04:57:50 +00:00
Andrew Munger
786ac12c99 Oops. I forgot the branch has a config.rbuild...
svn path=/branches/ros-branch-0_3_1/; revision=24329
2006-10-01 04:47:34 +00:00
Andrew Munger
550317611d Sync win32k and gdi32_winetest from trunk.
Merged 24228-24229, 24231, 24234-24239,
24255-24257, 24260-24264, 24266-24268,
24270-24271, 24287-24288.

svn path=/branches/ros-branch-0_3_1/; revision=24328
2006-10-01 04:37:32 +00:00
Hervé Poussineau
fbe45c7180 Give enough space to retrieve full device class description
svn path=/trunk/; revision=24326
2006-09-30 23:37:44 +00:00
KJK::Hyperion
ae3c3041f4 Fixes to un-break trunk:
* Disabling XBox HAL for now (TEMPORARY MEASURE)
 * Port MP HAL to the new loader structures

svn path=/trunk/; revision=24325
2006-09-30 23:35:17 +00:00
Hervé Poussineau
7227204f68 Better resources handling in serial driver.
All: copy lower device flags to FDO. This prevents the serial mouse to use buffered I/O

svn path=/trunk/; revision=24324
2006-09-30 23:06:51 +00:00
Hervé Poussineau
b606a6771c Do not expect a call to AddDevice with a NULL Pdo. Those are not guaranteed
svn path=/trunk/; revision=24323
2006-09-30 22:41:23 +00:00
Hervé Poussineau
3f47783c54 Implement SetupDiGetDriverInstallParamsW
Add support for DI_FLAGSEX_INSTALLEDDRIVER

svn path=/trunk/; revision=24322
2006-09-30 20:42:47 +00:00
Hervé Poussineau
b0e0c40c5d i8042prt manages PS/2 ports, not PS/2 devices. Take it into account when browsing devices detected by freeldr.
svn path=/trunk/; revision=24321
2006-09-30 19:09:10 +00:00
Hervé Poussineau
c1e52bcfca Fix wrong default registry value, which was possibly leading to non PS/2 keyboard detection at startup
svn path=/trunk/; revision=24320
2006-09-30 17:26:31 +00:00
Thomas Bluemel
41f18c74da Recalculate property sheet sizes after adding/removing sheets.
svn path=/trunk/; revision=24319
2006-09-30 16:31:35 +00:00
Alex Ionescu
c25e3321b0 - Complete much more of KiRosFrldrLpbtoNtLpb. We now:
- Create a LDR_DATA_TABLE entry for each module (driver, hal, kernel) and properly fill it out and insert it into the loader block.
  - Use the NLS data block to hold pointers to the NLS tables.
  - Use the ->RegistryBase/Length loader block members to hold pointers to the SYSTEM hive.
  - Create a MEMORY_ALLOCATION_DESCRIPTOR for each type of memory currently used (LoaderNlsData, LoaderRegistrydata, LoaderSystemCode, LoaderHalCode, LoaderBootDriver).
  - Changes are currently UNUSED!
- Revert LOADER_PARAMETER_BLOCK change, it actually really is PNLS_DATA_BLOCK.

svn path=/trunk/; revision=24318
2006-09-30 16:04:23 +00:00
Alex Ionescu
13ccbc28b2 - Re-remove intrinics from winddk.h
- Fix a typo in LOADER_PARAMETER_BLOCK

svn path=/trunk/; revision=24317
2006-09-30 14:57:30 +00:00
Magnus Olsen
10bd13604b adding back __readcr4 and __readcr3 to winddk.h for gcc does not have it. come bit futer build trunk
svn path=/trunk/; revision=24316
2006-09-30 14:43:41 +00:00
KJK::Hyperion
52fb2adb7c Corrected DWORD operand typo (%l -> %k)
svn path=/trunk/; revision=24315
2006-09-30 14:40:12 +00:00
Thomas Bluemel
b1a25bba1d Fix GCC4 warnings
svn path=/trunk/; revision=24314
2006-09-30 11:54:37 +00:00
Magnus Olsen
767b7de159 hopply this will fix hal_xbox build not tested.
svn path=/trunk/; revision=24313
2006-09-30 11:33:21 +00:00
Magnus Olsen
ce35dd9b7b fix build of blue again gcc does not have _disable and _enable, but MSVC have it.
svn path=/trunk/; revision=24312
2006-09-30 10:52:41 +00:00
Ged Murphy
c3a99cfb3e implement refresh, although it runs at a snails pace until the multiple SetupDiGetClassDevs call issue is fixed
svn path=/trunk/; revision=24311
2006-09-30 10:39:36 +00:00
Ged Murphy
c2e551ecea stop icon from changing when selected.
This change doesn't seem quite right to me, but it works for now

svn path=/trunk/; revision=24310
2006-09-30 10:31:28 +00:00
Ged Murphy
f8df38ff88 add a line at the root of the tree for user ergonomics :)
svn path=/trunk/; revision=24309
2006-09-30 10:18:04 +00:00
Alex Ionescu
540d96660c - Save processor state in the PKPRCB in KiInitializeKernel.
- Set the booting CPU as idle if no next thread was scheduled.
- Raise IRQL to HIGH_LEVEL upon exiting KiInitializeKernel to match the re-lowering to DISPATCH_LEVEL in KiSystemStartup (and subsequent interrupt flush).

svn path=/trunk/; revision=24308
2006-09-30 07:04:49 +00:00
Alex Ionescu
f516d2846e - Add loop around the KiFreezeExecutionLock before continuing OS boot.
- Only check for break-in on the Boot CPU.
- Set priority to 0 *Before* lowering to DISPATCH_LEVEL.
- Also force interrupts to be enabled before lowering IRQL.
- Also set the idle thread's wait irql to DISPATCH_LEVEL (might fix some odd crashes) and set it as Running on UP builds (on SMP builds this is done in other code).

svn path=/trunk/; revision=24307
2006-09-30 06:18:45 +00:00
Alex Ionescu
eb0f964be3 - Fix some bugs in intrin.h (missing __inline__ statments in some locations, which were causing warnings due to "static").
- Remove intrinsics in winddk.h since they're now properly done in intrin.h (thanks KJK!!!)
- Make freeldr.c setup the boot KTSS like NTLDR does, so that the GDT entry for it is valid (and remove the code that was doing this from Ki386InitializeTss)
- Refactor KiSystemStartup to use 100% dynamic pointers and machine data queried from the Loader Block or actual GDT/IDT/Selectors in memory, isntead of hard-coded ntoskrnl offsets. This makes it possible to be loaded by NTLDR, which sets these system structures up by itself. (we do it in freeldr.c, as hacks).

svn path=/trunk/; revision=24306
2006-09-30 05:42:22 +00:00
Alex Ionescu
8b1ba6c11a - Use LOADER_PARAMETER_BLOCK everywhere in ReactOS except freeldr.c
- Implemented KiRosFrldrLpbtoNtLpb to do a lightweight conversion and setup. Next patches will try to get rid of PLOADER_MODULE and use LDR_DATA_TABLE_ENTRY as well as increase bootstrap compatibility.

svn path=/trunk/; revision=24305
2006-09-30 03:33:50 +00:00
Andrew Munger
723627e679 Merge 24208, 24236, 24242, and 24259 from trunk. LiveCD fixes.
svn path=/branches/ros-branch-0_3_1/; revision=24304
2006-09-30 02:54:20 +00:00
Ged Murphy
79e7a43785 - update french timedate resource file
- patch by Sylvain Petreolle

svn path=/trunk/; revision=24303
2006-09-29 18:04:15 +00:00
Aleksey Bragin
cad356e2d8 Add devmgmt to the build system, thus fixing make bootcd
svn path=/trunk/; revision=24302
2006-09-29 17:57:20 +00:00
Ged Murphy
1533a93526 add devmgmt.exe as it's usable in ROS now
svn path=/trunk/; revision=24301
2006-09-29 17:34:50 +00:00
Aleksey Bragin
b652b371db - Implement device creating, with the specified DeviceExtension
- Add stub for processing IRPs sent to the mouse driver

TODO (will be done once problem with load-order will be resolved):
- Store mouclass's callback address
- Actually call it thus making driver working
- Cleanup routines

svn path=/trunk/; revision=24300
2006-09-29 17:07:48 +00:00
Ged Murphy
c89da0aef0 there's always one that gets away ...
svn path=/trunk/; revision=24299
2006-09-29 17:07:17 +00:00
Ged Murphy
db3ddf3123 - Add the device imagelist icons to setupapi.
- It appears SetupDiGetClassImageListExW will need some work before these are usable though.

svn path=/trunk/; revision=24298
2006-09-29 16:56:24 +00:00
Ged Murphy
91b9b125db - fix the treeview so it displays parent and child devices
- display the device icons for each item
- other bits and bats I'm too lazy to list
- it still load slowly due to multiple calls to SetupDiGetClassDevs. Need to think of a better way of gathering the info. For now though, it works.

svn path=/trunk/; revision=24297
2006-09-29 16:38:38 +00:00
Aleksey Bragin
4da7594216 - Change in CONNECT_DATA for drivers so that they get direct pointer to the raw configuration data returned by the device
- Spelling fixes
- More debug prints added to ease debugging
- Added entries for mouse and keyboard drivers (keyboard is currently commented out)
- Implemented actual usb mouse driver - contains 1 hack aimed to correct determining the endpoint. Driver fully works except for actually sending data to win32k/HID driver stack

svn path=/trunk/; revision=24296
2006-09-29 09:08:20 +00:00
Ged Murphy
1d1b74fa19 change run icon as a few people wanted something more fitting and add 2 more icons to the system imagelist
svn path=/trunk/; revision=24295
2006-09-28 22:57:09 +00:00
Ged Murphy
cc033012dd new timedate and powercfg icons
svn path=/trunk/; revision=24294
2006-09-28 22:14:00 +00:00
Ged Murphy
c31fb83895 rename folder to make it clear
svn path=/trunk/; revision=24293
2006-09-28 22:03:03 +00:00
Ged Murphy
0d942e1cef fix the floppy icons and add 2 new ones for network drives.
svn path=/trunk/; revision=24292
2006-09-28 22:01:07 +00:00
Ged Murphy
4aa949d1df - Reserve enough space on the heap to store the GUID
- Thanks to Thomas for restoring my sanity

svn path=/trunk/; revision=24291
2006-09-28 21:36:12 +00:00
Ged Murphy
afcf1f7b14 clean up irregularities
svn path=/trunk/; revision=24290
2006-09-28 21:15:51 +00:00
Ged Murphy
7c67a5ec0d Initial development of a devmgmt.msc clone.
Unusable at the moment though.

svn path=/trunk/; revision=24289
2006-09-28 20:05:17 +00:00
Magnus Olsen
2e3507e05d NtGdiCreateDIBitmap
fixed 2 more hiden bugs (cause some crash/bsod) but not the bug I am searching for. 

svn path=/trunk/; revision=24288
2006-09-28 19:08:07 +00:00
Magnus Olsen
9e939c11e9 fix a hidden bug in IntCreateBitmapIndirect
svn path=/trunk/; revision=24287
2006-09-28 18:32:09 +00:00
Hervé Poussineau
eeef3f67ba Support mount manager in disk.sys
svn path=/trunk/; revision=24286
2006-09-28 16:33:12 +00:00
Ged Murphy
c191e989a6 update a few cpl icons
svn path=/trunk/; revision=24285
2006-09-27 22:40:18 +00:00
Magnus Olsen
86e57e8c93 hpoussin forget change this regkey to SOFTWARE\\Microsoft\\WindowsNT\\CurrentVersion\\Winlogon"
svn path=/trunk/; revision=24284
2006-09-27 17:30:08 +00:00
Thomas Bluemel
28d82c0229 Don't use BOOL for 1 bit flags because it's signed.
svn path=/trunk/; revision=24283
2006-09-27 12:43:50 +00:00
Thomas Bluemel
87099f3ca6 Move the memory in RtlpDeleteData instead of copying it because the source and destination may be overlapping.
svn path=/trunk/; revision=24282
2006-09-27 12:28:25 +00:00
Hervé Poussineau
fa9c62c9a0 Patch by Matthias Kupfer
Fix tiny typo in all rc-files "%" -> "%s"
See issue #1828 for more details.

svn path=/trunk/; revision=24281
2006-09-26 21:08:11 +00:00
Hervé Poussineau
36032a956d Fix format build.
Why dependency tracking didn't detect this problem? Another mystery...

svn path=/trunk/; revision=24280
2006-09-26 19:52:55 +00:00
Hervé Poussineau
2c56c7d7e8 Merge from Wine:
Frank Richter <frank.richter@gmail.com>
setupapi: Duplicate behaviour of native SetupGetInfInformation with NULL ReturnBuffer and certain ReturnBufferSizes.

svn path=/trunk/; revision=24279
2006-09-26 19:44:17 +00:00
Hervé Poussineau
21ff1ddb3d Fix some warnings in winlogon code
Change winlogon registry key to "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" for compatibility reasons, as some programs read it directly

svn path=/trunk/; revision=24278
2006-09-26 19:18:02 +00:00
Hervé Poussineau
572541f16a Two more constants found in FMIFS...
svn path=/trunk/; revision=24277
2006-09-26 19:12:39 +00:00
Alex Ionescu
54403619f8 - In some far, far away galaxy, a long, long time ago, Greatlord will learn to fix 1-line bugs and/or talk to the developers responsible instead of reverting their code...until then....
svn path=/trunk/; revision=24276
2006-09-26 05:29:46 +00:00
Magnus Olsen
7a0843f8af fixed overlaping memory problem with RtlMoveMemory. The rewrite of RtlMoveMemory did not handling overlaping memory. it shows with ntdll_winetest rtl, use the old asm version from the string.a instead
svn path=/trunk/; revision=24273
2006-09-25 23:46:32 +00:00
Magnus Olsen
b3f30cb100 restore files mem.c and memgen.c
restore no i386 arch define in rbuild
do not remove it, it is for build on no i386 platform
the was accident delete in r23830 

svn path=/trunk/; revision=24272
2006-09-25 23:26:08 +00:00
Magnus Olsen
56c76b3069 NtGdiSetViewportExtEx
fix a bsd by moving in some value to seh last
 we can run gdi32_winetest mapping without bsd

svn path=/trunk/; revision=24271
2006-09-25 21:28:09 +00:00
Magnus Olsen
4c2f6e8647 implement PEN_GetObject, we can now get pen from GetopjectType. and manger pass some new wine test
svn path=/trunk/; revision=24270
2006-09-25 20:12:43 +00:00
Johannes Anderwald
ff8121c676 * fix typo in german resource file spotted by pilic
* fix bug 1797
* set svn-eolstyle:native property
See issue #1797 for more details.

svn path=/trunk/; revision=24269
2006-09-25 19:28:40 +00:00
Magnus Olsen
888f16ea6f NtGdiRestoreDC
1. fix do not delete all hdc and the restore hdc. 
2. fix calc of SaveLevel the calc are not perfect

we only have 6 fails when we try restore dc now with wine gdi32 test dc 

svn path=/trunk/; revision=24268
2006-09-25 18:50:40 +00:00
Saveliy Tretiakov
b79a852fe5 - PATH_RoundRect from wine
- RtlCopyMemory -> memcpy


svn path=/trunk/; revision=24267
2006-09-25 08:06:20 +00:00
Magnus Olsen
604ab3e4c0 Fixed some bugs in win32k function BITMAP_GetObject.
svn path=/trunk/; revision=24266
2006-09-25 05:25:11 +00:00
Magnus Olsen
6f10b47b94 update winetest gdi32 with more wine test
svn path=/trunk/; revision=24264
2006-09-24 22:27:00 +00:00
Magnus Olsen
2b9e96e558 fixed another build break by me :(
svn path=/trunk/; revision=24263
2006-09-24 21:17:31 +00:00
Magnus Olsen
08256d0670 sorry I broken the build it fixed now
svn path=/trunk/; revision=24262
2006-09-24 21:10:36 +00:00
Magnus Olsen
9b6f293ce5 adding more missing struct need them later in winetest
svn path=/trunk/; revision=24261
2006-09-24 20:53:47 +00:00
Magnus Olsen
235dd5fe2b adding more missing struct
svn path=/trunk/; revision=24260
2006-09-24 20:28:57 +00:00
Art Yerkes
350e281e1c Fix use of unicode for unix host regardless of -fshort-wchar.
svn path=/trunk/; revision=24259
2006-09-24 20:14:44 +00:00
KJK::Hyperion
29b494be56 Cosmetic changes
svn path=/trunk/; revision=24258
2006-09-24 18:07:21 +00:00
Saveliy Tretiakov
2047460d02 memcpy -> RtlCopyMemory
assert -> ASSERT


svn path=/trunk/; revision=24257
2006-09-24 17:10:58 +00:00
Saveliy Tretiakov
a5b535fee4 - Implement NtGdiStrokePath and NtGdiStrokeAndFillPath (based on wine)
- Get rid of PATH_GetPathFromDc()


svn path=/trunk/; revision=24256
2006-09-24 17:02:29 +00:00
Saveliy Tretiakov
a04da34bc0 More prototypes
svn path=/trunk/; revision=24255
2006-09-24 17:01:46 +00:00
Hervé Poussineau
f1d365f767 Don't hardcode the list of available filesystems in fmifs.dll, but store it in the registry.
Adding a filesystem is now only a matter of creating a u{FS}.dll + one registry entry to be able to use normal format.exe/chkdsk.exe/...

svn path=/trunk/; revision=24254
2006-09-24 13:42:24 +00:00
Hervé Poussineau
9cea0fddde Display available file systems in usage screen
svn path=/trunk/; revision=24253
2006-09-24 12:50:51 +00:00
Hervé Poussineau
c492ac0ccc Implement QueryAvailableFileSystemFormat and SetLabel in fmifs.dll
Fix a few prototypes

svn path=/trunk/; revision=24252
2006-09-24 11:55:58 +00:00
Hervé Poussineau
e84a6d47b1 [FORMATTING] Replace spaces by tabs
svn path=/trunk/; revision=24251
2006-09-24 11:08:27 +00:00
Hervé Poussineau
7c4cca9870 Add a filter command in KDBG, which is a wrapper around NtSetDebugFilterState/NtSetDebugFilterState.
svn path=/trunk/; revision=24250
2006-09-24 10:39:43 +00:00
Magnus Olsen
595ffab596 Update some gdi32 winetest
svn path=/trunk/; revision=24249
2006-09-24 09:43:16 +00:00
Magnus Olsen
9e99515740 adding two more missing define
svn path=/trunk/; revision=24248
2006-09-24 09:41:28 +00:00
Magnus Olsen
9f553707a1 adding OBJ_COLORSPACE it was missing, need it soon
svn path=/trunk/; revision=24247
2006-09-24 09:24:23 +00:00
Magnus Olsen
7f9492fc2f tested in dib16
Fixed all wine test for brush, zero fualt now
passing all 32 test fine. 
gdi32 bitmap test only 7 fails now

svn path=/trunk/; revision=24246
2006-09-24 08:36:56 +00:00
Hervé Poussineau
2abe11c82a Revert r24233, which leads to have the header written too late in debug log and was preventing a crash during the first DbgPrint calls when using GDB
Replace it by another fix (not tested)

svn path=/trunk/; revision=24245
2006-09-24 07:38:53 +00:00
Magnus Olsen
c32cdd8bfb revers 24232 for cause some other unknown regress.
I need found a better way to solv the null termeting strings

svn path=/trunk/; revision=24244
2006-09-24 07:30:43 +00:00
Hervé Poussineau
7bfdc5ceb7 Allow digits in computer name.
http://www.reactos.org/bugzilla/show_bug.cgi?id=1806#c2 still needs to be checked
See issue #1806 for more details.

svn path=/trunk/; revision=24243
2006-09-24 06:25:49 +00:00
Art Yerkes
5d46ef1a26 Fix mkhive on unix.
svn path=/trunk/; revision=24242
2006-09-24 02:58:31 +00:00
Hervé Poussineau
939cbfc4c7 Report correct interrupt resources to ntoskrnl
svn path=/trunk/; revision=24241
2006-09-23 22:26:28 +00:00
Hervé Poussineau
68434f2227 Add default destination for driver files in keyboard.inf
svn path=/trunk/; revision=24240
2006-09-23 22:09:18 +00:00
Hervé Poussineau
9e314810ae Skip keyboard detection in freeldr, as it doesn't work in Qemu 0.8.2
svn path=/trunk/; revision=24239
2006-09-23 20:21:41 +00:00
Aleksey Bragin
cd007816d8 Change #defines of bios memory types to a proper enum. Makes it easier to distinguish BIOS memory types and FreeLoader's memory types (in future).
svn path=/trunk/; revision=24238
2006-09-23 16:50:39 +00:00
Hervé Poussineau
0e779901fc Do not display the group name of a service if it doesn't exists
svn path=/trunk/; revision=24237
2006-09-23 16:06:15 +00:00
Hervé Poussineau
edeb548dd1 Subkeys names should be case insensitive.
Fixes the 'make install' problem, where shell was not starting at third boot

svn path=/trunk/; revision=24236
2006-09-23 16:01:02 +00:00
Magnus Olsen
52b43f7ae9 IntGdiCreateSolidBrush
Remove the if table I did. 
Remove Color = Color & 0xffffff to Color = Color
that gave same result and pass equal many wine test. 
we still have some werid xlate bugs some where, for set/get pixel. I should have remove Color & 0xffffff in frist place. but the code did look right.  


svn path=/trunk/; revision=24235
2006-09-23 15:54:11 +00:00
Magnus Olsen
2d24316959 fixed some more setpixel bugs
svn path=/trunk/; revision=24234
2006-09-23 12:33:54 +00:00
Aleksey Bragin
e126931cb0 - Issue a synchronous invalidate device relations request instead of asynchronous (eliminates the "can't open \SystemRoot\ bugcheck during 2nd stage startup)
- Comment out usbport/usbhub/etc from bootcd, they will be enabled once they don't crash and/or slow down system.

svn path=/trunk/; revision=24233
2006-09-23 09:34:34 +00:00
Magnus Olsen
cc70b77eca add NULL termate on ansi string when WideCharToMultiByteCP doing wchar to ansi converting.
svn path=/trunk/; revision=24232
2006-09-23 07:28:44 +00:00
Magnus Olsen
63535f6e15 remove folder gdi for all gdi test are in gdi32
svn path=/trunk/; revision=24231
2006-09-23 06:19:28 +00:00
Andrew Munger
8f9a18cfff Merge 24219-24222, and 24209 from trunk.
svn path=/branches/ros-branch-0_3_1/; revision=24230
2006-09-22 21:45:35 +00:00
Magnus Olsen
cfe10b7a75 Implement BRUSH_GetObject it is not perfect, it return wrong color in some case. But we get down from 20 to 11 fails in wine test.
Wine say GetObject (HANDLE obj, INT Count, PVOID * Buffer) if Buffer is NULL return the requeuer size in bytes

svn path=/trunk/; revision=24229
2006-09-22 20:19:49 +00:00
Magnus Olsen
391e807b81 finish implement NtGdiCloseEnhMetaFile it is not fully tested it can contain bugs
svn path=/trunk/; revision=24228
2006-09-22 17:26:20 +00:00
Magnus Olsen
230edc01b6 merges ros-branch-0_3_1 r24226 to trunk with arty permission. "ARP query support. Thanks to WaxDragon for encouragement and debugging."
svn path=/trunk/; revision=24227
2006-09-22 08:10:11 +00:00
Art Yerkes
50ee081131 ARP query support.
Thanks to WaxDragon for encouragement and debugging.

svn path=/branches/ros-branch-0_3_1/; revision=24226
2006-09-22 06:36:16 +00:00
Aleksey Bragin
2a0160473e Add an MM api to get the memory map from Freeldr's memory manager (as opposed to MachGetMemoryMap which gets architecture-specfic memory map returned by BIOS/firmware/etc).
Currently this api is unused, it's going to be used by windows/reactos bootloader in future.

svn path=/trunk/; revision=24224
2006-09-21 17:25:41 +00:00
Saveliy Tretiakov
7d1faef9ee Fix boot with /DEBUGPORT=GDB and /DEBUGPORT=COM1. I don't know why, but this works...
svn path=/trunk/; revision=24223
2006-09-21 07:42:21 +00:00
Magnus Olsen
d42d3c29c0 set GetLastErrorMsg if CreateFontIndirectA(NULL) are use as inputparam . it make same beauvoir as CreateFontIndirectW
svn path=/trunk/; revision=24222
2006-09-21 02:47:37 +00:00
James Tabor
6d8ba42532 Fix CreateFontIndirectA so it will not bigcheck with a null pointer.
svn path=/trunk/; revision=24221
2006-09-20 21:34:08 +00:00
James Tabor
18733c4397 Kill debug prints.
svn path=/trunk/; revision=24220
2006-09-20 21:09:30 +00:00
James Tabor
fff3bf11fa Gdi32 font.c:
- Patch by Dmitry Timoshkov
  - If there is no space for strings GetOutlineTextMetricsA should not indicate that they present.

svn path=/trunk/; revision=24219
2006-09-20 20:36:27 +00:00
Hervé Poussineau
f1cf836837 Big update of i8042prt driver. The driver is now plug&play compliant and some mouse driver filters may be installed.
svn path=/trunk/; revision=24218
2006-09-20 18:56:04 +00:00
Hervé Poussineau
d2241f8ec4 If boot resources are provided, use them instead of using resource requirements.
In all cases, translate the resource list before calling the driver

svn path=/trunk/; revision=24217
2006-09-20 18:16:24 +00:00
Aleksey Bragin
364cdf1951 - Add ability to allocate either "low" or "high" pages
- Don't display a warning to user if allocating memory at certain address fails
- Change debug prints so they tell in which function allocation failed
- Include RTL and LDR headers from NDK, so that it's possible to use functions from RTL in FreeLdr in future

svn path=/trunk/; revision=24216
2006-09-20 16:54:54 +00:00
Saveliy Tretiakov
b9ade034f9 Fix booting with /DEBUGPORT=GDB and Pice too.
svn path=/trunk/; revision=24215
2006-09-20 15:00:17 +00:00
Hervé Poussineau
9907e96a49 Save correct boot resources lists in registry
svn path=/trunk/; revision=24214
2006-09-20 14:46:21 +00:00
Magnus Olsen
3138af456a commit rc languages to xml parser for the webservre and standalone.
svn path=/trunk/; revision=24213
2006-09-20 14:38:37 +00:00
Thomas Bluemel
8e90ccee4d Some tchar fixes
svn path=/trunk/; revision=24212
2006-09-20 09:54:00 +00:00
Thomas Bluemel
d0e354f6c1 Fix warnings
svn path=/trunk/; revision=24211
2006-09-20 09:27:59 +00:00
Brandon Turner
59c2e127cc Add a config.rbuild and set DBG=0
svn path=/branches/ros-branch-0_3_1/; revision=24210
2006-09-19 17:38:10 +00:00
Andrew Munger
14d0c5f34a Initialize h_alises with a length 1 array containing a terminating null as specified. Patch by arty. (Fixes ncftp connection)
svn path=/trunk/; revision=24209
2006-09-19 04:25:14 +00:00
James Tabor
f8fcca6f06 Kill some warnings.
svn path=/trunk/; revision=24208
2006-09-18 23:37:22 +00:00
Andrew Munger
ece02ec90c Bump to 0.3.1-SVN
svn path=/branches/ros-branch-0_3_1/; revision=24207
2006-09-18 22:59:55 +00:00
Ged Murphy
3f0a7fb997 - Add a cute custom control to sysdm allowing dialogs to display hyperlink style text which can open web pages and run exe's.
- see the general page, and the user account dialog for examples.

svn path=/trunk/; revision=24205
2006-09-18 22:25:00 +00:00
Andrew Munger
d00d45c34e Reapply entrypoint fix, patch from Usurp.
svn path=/trunk/; revision=24204
2006-09-18 21:49:12 +00:00
The Wine Synchronizer
d3cd32d90d Autosyncing with Wine HEAD
svn path=/trunk/; revision=24203
2006-09-18 16:59:16 +00:00
The Wine Synchronizer
d88a99e18e Autosyncing with Wine HEAD
svn path=/trunk/; revision=24202
2006-09-18 16:52:25 +00:00
The Wine Synchronizer
9e9bd06847 Autosyncing with Wine HEAD
svn path=/trunk/; revision=24201
2006-09-18 16:51:34 +00:00
The Wine Synchronizer
1b0a889e2b Autosyncing with Wine HEAD
svn path=/trunk/; revision=24200
2006-09-18 16:50:11 +00:00
The Wine Synchronizer
446242dfb2 Autosyncing with Wine HEAD
svn path=/trunk/; revision=24199
2006-09-18 16:49:02 +00:00
The Wine Synchronizer
2cb8454522 Autosyncing with Wine HEAD
svn path=/trunk/; revision=24198
2006-09-18 16:47:55 +00:00
The Wine Synchronizer
11c17d1dc0 Autosyncing with Wine HEAD
svn path=/trunk/; revision=24197
2006-09-18 16:46:41 +00:00
The Wine Synchronizer
04b927e3ff Autosyncing with Wine HEAD
svn path=/trunk/; revision=24196
2006-09-18 16:45:21 +00:00
Hervé Poussineau
a11691c3c4 Autosyncing with Wine HEAD
svn path=/trunk/; revision=24195
2006-09-18 16:41:29 +00:00
The Wine Synchronizer
82845620c6 Autosyncing with Wine HEAD
svn path=/trunk/; revision=24194
2006-09-18 16:36:06 +00:00
The Wine Synchronizer
8bde95b20e Autosyncing with Wine HEAD
svn path=/trunk/; revision=24193
2006-09-18 16:32:05 +00:00
The Wine Synchronizer
fab72e48ec Autosyncing with Wine HEAD
svn path=/trunk/; revision=24192
2006-09-18 16:28:29 +00:00
Hervé Poussineau
ed5305eeae Autosyncing with Wine HEAD
svn path=/trunk/; revision=24191
2006-09-18 14:34:40 +00:00
Johannes Anderwald
f8b5e46f8b * fix build
svn path=/trunk/; revision=24190
2006-09-18 10:58:00 +00:00
Aleksey Bragin
a42c7ad876 Fix some defines used in fiber.S in kernel32.dll (fixes build)
svn path=/trunk/; revision=24189
2006-09-18 08:56:28 +00:00
Magnus Olsen
6e100cf43f revert 24179 it was bad idea. and wrong way todo it on
See issue #21478 for more details.

svn path=/trunk/; revision=24188
2006-09-18 05:13:17 +00:00
Alex Ionescu
8b094bf093 - Implement FPU Exception Handler.
- We can now properly handle FPU faults (wrote a small test for invalid fpu precision).
- OpenGL probably still doesn't work, as there might be some bugs around the place. However, you should not see FPU Bugchecks anymore.

svn path=/trunk/; revision=24187
2006-09-18 02:33:21 +00:00
Alex Ionescu
03c36d1a35 - Implement Trap 16: Math Coprocessor Fault. Happens during Floating Point precision error test that I wrote. Simply calls shared NPX handler in KiTrap7.
- Implement some extra checks in KiTrap7 and start coding the NPX shared handler. We *almost* have full FPU support now... (trying to get this done for tomorrow morning so that Greatlord can sent me the 15 000$ he promised...)

svn path=/trunk/; revision=24186
2006-09-18 01:07:13 +00:00
Alex Ionescu
d228dcccad - On SMP systems, update KPROCESS->ActiveProcessors and assert their validty. Needed for a similar assertion and check in KiSwapProcess which we already have.
- Also on SMP, make sure to clear the KTHREAD's swap-busy lock after the actual swap has been done.

svn path=/trunk/; revision=24185
2006-09-18 00:34:13 +00:00
Alex Ionescu
2ea699f94e - Assert that the current CPU is the one the thread is supposed to be running on.
- Get CR0, read the KTHREAD NPX State, disable interrupts and verify if the NPX state is dirty. If it is, then reload CR0 with the new value. Re-enable interrupts. This sequence should make FPU work during context switching, but I haven't tested yet. At the very least, it should get rid of TRAP_FAULT_UNKNOWN blue screen.
- Set TEB in the same time as the selector is being configured, not way earlier.

svn path=/trunk/; revision=24184
2006-09-18 00:30:30 +00:00
Alex Ionescu
63da586075 - Fix some bugs in LDT switch (EDI->EBP)
- Turn simple bugcheck into BugCheckEx with information that the helpfile says it should have.

svn path=/trunk/; revision=24183
2006-09-18 00:17:53 +00:00
Alex Ionescu
8de07ee7b4 - Don't update CR3 in KTSS, it's not used.
- Don't read a useless stack pointer anymore.
- Update KTSS_ESP0 near the end of context switching, not at the beginning anymore.
- Same for IOPM and I/O Redirection Map Base Address.

svn path=/trunk/; revision=24182
2006-09-18 00:10:58 +00:00
Alex Ionescu
eaf28f0509 - Stop doing cli/sti doing context switching (For now, since it's only needed for FPU, which isn't yet done).
- Stop using XP KPCR fields for storing stack values, they're not used inside the kernel anymore and now have 2003 values (WMI tracing, etc).
- Move parts of the process switch (LDT reload) out-of-line.

svn path=/trunk/; revision=24181
2006-09-18 00:02:46 +00:00
Alex Ionescu
b52483ba9a - Add func.endfunc decoration.
- Add code to wait for SwapBusy == FALSE on SMP.
- Add stub code to check for new PCR fields in 2003. Currently disabled because thread swap code still uses XP fields.
- Check for active DPCs at the end of thread swap, not at the beginning.
- Set PRCB->IdleThread outside of the thread swap routine.
- Don't set the thread state to running inside the swap routine, we already do it outside.

svn path=/trunk/; revision=24180
2006-09-17 23:17:07 +00:00
Magnus Olsen
70cca480e5 implemet GdiReleaseDC it redirect to NtUserReleaseDC(HWD hwd, HDC hdc) now
svn path=/trunk/; revision=24179
2006-09-17 22:10:24 +00:00
Alex Ionescu
3e709fbbd9 - Fix some insidious bugs in exception handling, mostly related to the art of unwinding (RtlUnwind).
- Can't name specifics, but probably fixes multiple SEH/application bugs/regressions since about 6-8 months ago. Fixes my personal SEH test from 22 failures/crashes/BSODs to 22 succeesses...
- Also fixes some crashes in kernel-kqemu mode.

svn path=/trunk/; revision=24178
2006-09-17 21:09:10 +00:00
Magnus Olsen
45f71f78c8 did delete NtGdiDeleteObjectApp at end of NtGdiCloseEnhMetaFile by mistake. radding it
svn path=/trunk/; revision=24177
2006-09-17 20:42:59 +00:00
Magnus Olsen
fa61787952 Activate CloseEnhMetaFile in gdi32.
We do not leak memory from CreateEnhMetaFile.
 

svn path=/trunk/; revision=24176
2006-09-17 20:22:27 +00:00
Magnus Olsen
d3eeef4046 NtGdiCloseEnhMetaFile
1. translate EMF_Create_HENHMETAFILE to reactos 
2. Delete hdc.

NtGdiCreateEnhMetaFile
1. Set hdc ownership. 


svn path=/trunk/; revision=24175
2006-09-17 20:21:01 +00:00
Alex Ionescu
23dc37d575 - Cleanup except_asm.s and add .func/.endfunc and fix some double definitions.
svn path=/trunk/; revision=24174
2006-09-17 18:44:52 +00:00
Alex Ionescu
b820ec4930 - Fix a bug in KeRaiseUserExceptionDispatcher which was causing us not to set the Exception Address (EIP) in the EH record.
- Fix a terrible stack corruption bug in KeRaiseUserExceptionDispatcher which was causing us to eventually fuck up the stack in user mode (0x14 bytes instead of 0x50 bytes were reserved).
- Protect User-mode Callbacks with SEH, and use STATUS_POP_CALLBACK_STACK.
- Fix another nasty stack corruption bug in user-mode APC delivery.
- Protect User-mode APC delivery with SEH.
- Fix SEH handlers to return EXCEPTION_EXECUTE_HANDLER isntead of ExceptionContinueSearch.

svn path=/trunk/; revision=24173
2006-09-17 17:31:52 +00:00
Magnus Olsen
4493c99327 fast implemet of NtGdiCloseEnhMetaFile
follow thing need be done before it is finish but it will slov leaked memory and filehandle from NtGdiCreateEnhMetaFile
for we have NtGdiCreateEnhMetaFile implement. NtGdiCloseEnhMetaFile is base on wine cvs 15/9-2006
Todo
1. Rewrite it to own api call IntGdiCloseEmhMetaFile
2. Use Zw and Int direcly so we do not need todo  context swith each call
3. Translate follow api to kernel api 
   // hMapping = CreateFileMappingW(Dc->hFile, NULL, PAGE_READONLY, 0, 0, NULL);
   // Dc->emh = MapViewOfFile(hMapping, FILE_MAP_READ, 0, 0, 0);
   // hmf = EMF_Create_HENHMETAFILE( Dc->emh, (Dc->hFile != 0) );


 

svn path=/trunk/; revision=24172
2006-09-17 15:47:29 +00:00
Hervé Poussineau
6afc1a0152 Define some registry entries as not volatile, to prevent new installation of device at each boot
svn path=/trunk/; revision=24171
2006-09-17 15:42:50 +00:00
Hervé Poussineau
3ab77c0239 DeviceNode->ResourceList and DeviceNode->ResourceListTranslated should not share memory with DeviceNode->BootResources
svn path=/trunk/; revision=24170
2006-09-17 15:24:55 +00:00
Alex Ionescu
adb93d9531 - A missing "return" statement to KiDispatchException which was causing all user-mode exceptions to become second-chance and thus crash the app. mIRC works again, and probably numerous other apps (mozilla as well i think, since it had the same issue)
svn path=/trunk/; revision=24169
2006-09-17 15:01:57 +00:00
Hervé Poussineau
551811ac52 Disable some code I did during the last day to repair ReactOS boot. Let's hope it is enough
svn path=/trunk/; revision=24168
2006-09-17 14:27:17 +00:00
Magnus Olsen
5c66b358e1 Upgrade from dejavu font 2.9 to 2.10
reason 
1. Bugfix some charters that did not show in Windows/ReactOS
2. Fixing space between some charters 
3. Dejvau san font support 100% folllow Latin Extended-B, Latin Extended-C, Greek and Coptic, Superscripts and Subscripts, Currency Symbols.
4. and allot more new charters 

svn path=/trunk/; revision=24167
2006-09-17 13:37:59 +00:00
Hervé Poussineau
ac233d6e61 Don't go further than end of string when writing value to registry
svn path=/trunk/; revision=24166
2006-09-17 12:20:44 +00:00
Hervé Poussineau
f271868696 Don't enable acpi service by default, it would be automatically installed if necessary
svn path=/trunk/; revision=24165
2006-09-17 12:17:44 +00:00
Magnus Olsen
15732d3ae2 implement last part of NtGdiCreateEnhMetaFile
it can now create file.  (add ntdll.a to rbuild need RtlDosPathNameToNtPathName_U api)

svn path=/trunk/; revision=24164
2006-09-17 10:56:13 +00:00
Hervé Poussineau
b6919c977d Merge from Wine:
James Hawkins <truiken@gmail.com>
- Add stubs for SetupOpenLog, SetupCloseLog, and SetupLogError
- Implement pSetupGetField, with tests.

svn path=/trunk/; revision=24162
2006-09-17 10:34:51 +00:00
Hervé Poussineau
f07b34a9d0 I don't know how to save REG_LINK info on disk, so ignore them. Incidently, fixes "make install_registry"
svn path=/trunk/; revision=24156
2006-09-17 08:44:17 +00:00
Alex Ionescu
8ef78cb6e6 - Create a KD-compatible KiDebugRoutine and piggyback KDBG on it.
- Create separate GDB entry hack routine.
- Fix booting with /BREAK and continuing after an INT3/ASSERTion.

svn path=/trunk/; revision=24155
2006-09-17 07:06:35 +00:00
Alex Ionescu
bee17dc290 - Large cleanup of psmgr.c. Move all externs and prototype, into headers, reformat and re-arrange the code.
- Optimize PspLookupUserEntrypoints to use static ANSI_STRINGs instead of building them at runtime.
- Fix mapping/loading of the System DLL so that it's loaded as executable code, not read-only code. Also fix a handle leak of the section, and re-factor some code into smaller shared functions to reduce code duplication.

svn path=/trunk/; revision=24154
2006-09-17 05:20:24 +00:00
Hervé Poussineau
1b0d4ce154 Install VMware driver using UpdateDriverForPlugAndPlayDevicesW function.
Installing a driver is not as easy as copying files and adding some registry entries, especially when autogenerated PnP ids change...

svn path=/trunk/; revision=24153
2006-09-17 00:28:19 +00:00
Hervé Poussineau
68bee00b1d Make IoInvalidateDeviceRelations really asynchronous
Implement IoSynchronousInvalidateDeviceRelations

svn path=/trunk/; revision=24152
2006-09-16 23:30:57 +00:00
Johannes Anderwald
5d0d792e67 * update comments
* remove unused members in ConsoleInfo struct
* update global struct on UDN_DELTAPOS events
* update WindowSize ScreenBuffer member when bigger / smaller on scroll events

svn path=/trunk/; revision=24151
2006-09-16 21:41:57 +00:00
Hervé Poussineau
5ed7c7746e Fix compilation (3 variables were unused)
svn path=/trunk/; revision=24150
2006-09-16 21:21:05 +00:00
Hervé Poussineau
47f4f5c36a Change detection method to see if a driver is a legacy one
Fix last issues with PCI driver

svn path=/trunk/; revision=24149
2006-09-16 20:53:27 +00:00
Alex Ionescu
78ef70deda - Fix one of the oldest hacks in ReactOS: KeGetCurrentThread() and PsGetcurrentProcess used to be NULL during early boot stage. We also didn't have an official idle therad/process. Also system intialization was not in its sepearte thread. Changes:
- Implemented SeAssignPrimaryToken.
   - Setup Boot/System Token for Idle Process in SeInit2.
   - Remove ROS hack in SeCaptureSubjectContextEx.
   - Call SeAssignPrimaryToken in PspInitializeProcessSecurty when called for the Initial Process creation.
   - Implement PsInitiailizeQuotaSystem and set PspDefauptQuotaBlock for the idle process so that it can be used for the initial process.
   - Rewrite Process Manager Phase 0 initialization from scratch, to create a new initial system process and thread which will be used for Phase 1 (in ROS, phase 2) initialization of the executive.
   - Fix a bug in PspCreateProcess which was using an uninitialized value of SectionObject in some cases, instead of NULL.
   - Call PsInitailizeQuotaSystem from ObInit, and also create the system handle table inside the idle process, and make it the ObpKernelHandleTable.
   - Do Executive Phase 0 Initialization at APC_LEVEL.
   - Start idle thread at HIGH_PRIORITY then lower it to 0 once the Initial Thread is setup, so that it can run, then keep priority to 0 at DISPATCH_LEVEL and jump into idle loop code.
   - Add NtYieldExecution to idle loop code since it's now being used.
   - Fix IoGetCurrentProcess which was previously hacked.
   - Remove some checks for Thread == NULL in ke_x.h, since this is now impossible.
   - Split Phase 0/1 initialization in ex\init.c, since one runs in a separate thread now. Also don't lower IRQL to PASSIVE_LEVEL anymore (run at APC_LEVEL).

svn path=/trunk/; revision=24148
2006-09-16 20:37:49 +00:00
Alex Ionescu
0d996fd421 - Revert part of 24108 which was scanning the process's thread ready list and making the threads ready. This shouldn't currently happen on ReactOS but it seems that happens on Fireball's machine and crashes it, so I'm reverting it.
svn path=/trunk/; revision=24147
2006-09-16 20:27:53 +00:00
Hervé Poussineau
25e2b01535 Don't crash if PCI AddDevice is called with a NULL Pdo (happens if pci.sys is considered as a legacy driver)
svn path=/trunk/; revision=24146
2006-09-16 20:22:54 +00:00
Martin Fuchs
30f438bb7b explorer: minor code cleanup
svn path=/trunk/; revision=24145
2006-09-16 15:41:17 +00:00
Martin Fuchs
fcfeb83217 "Debug Release" mix configuration for notifyhook project file
svn path=/trunk/; revision=24144
2006-09-16 15:40:24 +00:00
Martin Fuchs
a06bdc9503 explorer: handle child window creation errors
svn path=/trunk/; revision=24143
2006-09-16 15:39:07 +00:00
Magnus Olsen
bb1f92d0d3 fixed a memory I accident created when to free a hdc
svn path=/trunk/; revision=24142
2006-09-16 06:40:37 +00:00
Alex Ionescu
5acd247d8e - Implement most of the Ring 3/0 Invalid Opcode handler. Stops apps like mIRC from BSODing the system anymore.
svn path=/trunk/; revision=24141
2006-09-16 06:03:04 +00:00
James Tabor
6b30b92bf0 I think this was on Ged mind.
svn path=/trunk/; revision=24140
2006-09-16 05:29:25 +00:00
Art Yerkes
f20c6b89df Not sure where LicenseDialogProc is supposed to come from. For now, we'll
disable it until it gets fixed.

svn path=/trunk/; revision=24139
2006-09-16 01:56:51 +00:00
Alex Ionescu
d664420182 - Merge in my latest Dispatcher changes for KeWaitForMultipleObject, which are basically the same kind of changes as have been done for KeDelay/KeWaitForSingle. (Optimizations and readability improvements).
- Also fixed a previous bug where we didn't respect alertable waits anymore for KeWaitForMultiple...
- Remove krnlfun entry, the rest of dispatcher changes are tied to the new timer implementation for later.

svn path=/trunk/; revision=24138
2006-09-16 00:07:02 +00:00
Magnus Olsen
aa64d1177f Implement NtGdiCreateEnhMetaFile it is base on wine cvs 15/9-2006 version of CreateEnhMetaFileW in wine gdi32.dll
Our are not complete it can not create the file.
But we parseing now some NULL pointer test and some other test in winetest for gdi32. 

 

svn path=/trunk/; revision=24137
2006-09-15 23:24:04 +00:00
Hervé Poussineau
dfda3eceff Fix "normal" formatting, by removing differences between quick and normal formatting.
Normal formatting is quick formatting + fill sectors with 0 (not done yet)

svn path=/trunk/; revision=24136
2006-09-15 17:04:18 +00:00
Ged Murphy
4db2ab349a enable system info (again)
svn path=/trunk/; revision=24135
2006-09-15 16:45:00 +00:00
Ged Murphy
c09e1c12ab - add hardware profile and start and recovery dialogs
- popup a message box for dialogs not yet implemented

svn path=/trunk/; revision=24134
2006-09-15 16:37:26 +00:00
Aleksey Bragin
4094a71f3e Fix typos in comments
svn path=/trunk/; revision=24133
2006-09-15 16:07:11 +00:00
Aleksey Bragin
ee7e88e8ec Add missing "NTAPI"
svn path=/trunk/; revision=24132
2006-09-15 16:01:50 +00:00
Aleksey Bragin
04a96186b4 Revert a change in debug.h introduced in 19329 by Hartmut Birr. Freeldr's debug output doesn't expect any DbgPrint call to result in a "__FILE__:__LINE__ output_string" substitution.
Now FreeLdr's debug output looks good again.

svn path=/trunk/; revision=24131
2006-09-15 10:45:53 +00:00
Magnus Olsen
ed022d17fd arcoding winetest CreateEnhMetaFileA all param can be NULL
and we fail on this. But this is only one bugfix, We need bugfix win32k now. To completed the bugfix

svn path=/trunk/; revision=24130
2006-09-15 10:36:50 +00:00
Hervé Poussineau
b73a685a79 Assume bus number #0 if not specified in resource list
svn path=/trunk/; revision=24129
2006-09-15 09:09:18 +00:00
Hervé Poussineau
2a1513dc5c - Fix Freeldr to correctly send reported resources (at least PCI buses and PS/2 devices)
- Let Root bus report BootResources
- If no resource requirement are found, use the boot resource list (not sure of this one)

svn path=/trunk/; revision=24128
2006-09-15 06:48:01 +00:00
Hervé Poussineau
3daa4394f7 Check for ACPI BIOS identifier, to prevent double enumeration of devices
Move boot resource informations to Root\ key (if available)
Add a missing \0 at the end of hardwareId list

svn path=/trunk/; revision=24127
2006-09-14 22:29:07 +00:00
Ged Murphy
af77fee9dd fix a few dialog asthetics
svn path=/trunk/; revision=24126
2006-09-14 21:51:56 +00:00
Ged Murphy
faa4bd22bb put system info back in
svn path=/trunk/; revision=24125
2006-09-14 20:46:06 +00:00
Hervé Poussineau
7ac40876f4 Report to registry hardware found by Freeloader.
See issue #645 for more details.

svn path=/trunk/; revision=24124
2006-09-14 20:30:35 +00:00
Magnus Olsen
eccbefcccb thx fireball fixing a spelling fault
svn path=/trunk/; revision=24123
2006-09-14 20:00:28 +00:00
Ged Murphy
da666d1ce5 sneaky little blighter
svn path=/trunk/; revision=24122
2006-09-14 19:12:48 +00:00
Ged Murphy
4732ef2b6a start to overhaul sysdm.cpl and make it more like XP's, which is much more user friendly
- completely rewrite the resource file to make it readable and logical
- do the same with the resource.h file (I'll cry if anyone messes these 2 up, it's mega neat now ... ;p)
- add the ReactOS logo to the first page (general tab)
- move the licence to it's own dialog accessable from the general tab
- rearrange the computer name and hardware pages
- delete the user profile page and add it as a separate dialog accessable from the advanced page
- add an error reporting button (as per XP) which opens a web browser directly to bugzilla.
- loads of other little alterations.
*note, I've dissabled language files until I've finished messing with the resources*

svn path=/trunk/; revision=24121
2006-09-14 19:09:56 +00:00
Magnus Olsen
a413ba4de2 forget this file thx Quip at irc
svn path=/trunk/; revision=24120
2006-09-14 19:02:56 +00:00
Magnus Olsen
e1ba479b2c 1. move all languages to own folder
2. accepted LMH1 languages patch (with small modification)

See issue #1696 for more details.

svn path=/trunk/; revision=24119
2006-09-14 17:33:25 +00:00
Magnus Olsen
5f0ec93a17 translations patch accepted from LMH1 (with small modification from me)
See issue #1695 for more details.

svn path=/trunk/; revision=24118
2006-09-14 17:26:08 +00:00
Magnus Olsen
3e4ab62cca 1. move all languages to own folder
2. accepted LMH1 languages patch (with small modification)
3. fixed right sublang on few languages rc files
See issue #1685 for more details.

svn path=/trunk/; revision=24117
2006-09-14 17:17:51 +00:00
Magnus Olsen
eb39f6f8dc translations patch accepted from LMH1 (with small modification from me)
See issue #1679 for more details.

svn path=/trunk/; revision=24116
2006-09-14 16:53:53 +00:00
Ged Murphy
d667517b42 start to rewrite the virtmem code to remove many bugs and make it more readable.
I'm currently working on enhancements to sysdm, but it's probably better to commit this separately 

svn path=/trunk/; revision=24115
2006-09-14 16:49:11 +00:00
Magnus Olsen
4a1ee5a228 adding Japanese keyboard to reactos installer
svn path=/trunk/; revision=24114
2006-09-14 16:40:40 +00:00
Magnus Olsen
3f285b2d73 adding Japanese keyboard drv patch from ja731j (real name : Simon Hanae mail : ja731j at ja731j dot homeip dot net
See issue #1795 for more details.

svn path=/trunk/; revision=24113
2006-09-14 16:39:35 +00:00
Aleksey Bragin
efcc4447c1 Reapply fixed half of 24020 (relocation update in rtl). Tested on vmware and real hardware.
svn path=/trunk/; revision=24112
2006-09-14 16:37:05 +00:00
Saveliy Tretiakov
63ae604355 Fix typo. palate -> pallete
svn path=/trunk/; revision=24111
2006-09-14 16:04:08 +00:00
Alex Ionescu
1b75e6549e - Converted some macros to inlined functions.
- Modified KeDelayExecutionThread and KeWaitForSingleObject to be much simpler and readable, reducing some of the loops and continues, and 4th-level indentation. Also packed up common wait initialization at the beginning of the function, and into two new inline functions: KxDelayThreadWait and KxSingleThreadWait. No actual semantic changes, just re-ordering.
- Rename KiUnwakeQueue to KiActivateWaiterQueue.

svn path=/trunk/; revision=24110
2006-09-14 15:48:02 +00:00
Aleksey Bragin
bb617c9ac9 Sylvain Petreolle: Fix a typo in the code (palGDI -> sysGDI)
svn path=/trunk/; revision=24109
2006-09-14 15:40:16 +00:00
Alex Ionescu
74703ca408 - Implement KeReadyThread that wraps KiReadyThread so that \ps doesn't have to worry about dispatcher lock.
- Make sure all a process's threads are ready if they're on the ready queue, during attachment.
- Merge in KiReadyThread from scheduler code, with a small code change to keep working with ROS's scheduler lists instead.

svn path=/trunk/; revision=24108
2006-09-14 12:13:32 +00:00
Magnus Olsen
beb74a2356 remove entrypoint in rbuild files.
1. This change are right but binutils setting
   PE header flags wrongs for cpl/dll wrong

2. Remove entrypoint for cpl until this bug have
   been fixed in binutils.
    

svn path=/trunk/; revision=24107
2006-09-14 09:10:13 +00:00
Aleksey Bragin
4309a525f4 Show the value, not the address in memory! (Thanks to Dmitry Philippov)
svn path=/trunk/; revision=24106
2006-09-14 08:27:08 +00:00
Aleksey Bragin
d64332beb2 Mikhail Zvyozdochkin: If I enter directly DNS server address in TCP/IP properties window, and after it open this window again, DNS server address is not retrieved to text field.
Patch 1746

svn path=/trunk/; revision=24105
2006-09-14 08:20:50 +00:00
Magnus Olsen
dc1e819150 Fixing two NULL pointer crash in win32k.
I do not known if I done right in NtGdiRealizePalette step2, step2 is not tested.  

svn path=/trunk/; revision=24104
2006-09-14 07:43:20 +00:00
Alex Ionescu
20425875ce - Implement KiAcquireDispatcherObject, KiReleaseDispatcherObject, used on SMP for dispatcher objects which use the volatile long member in the dispatcher header (such as gates).
- Implement KiTryThreadLock which tries to acquire the lock but exits if it can't, isntead of looping.
- Re-factor KeWaitForGate to make it SMP-safe by acquiring various locks when required.
- Fixed up KeSignalGateBoostPriority so it can also be SMP-safe, and also fix what exactly happens when the gate is signaled (directly make the other thread ready instead of doing a KiUnwaitThread on it).
- Split KxAcquireSpinLock/KxReleaseSpinLock into SMP vs UP like the other routines.

svn path=/trunk/; revision=24103
2006-09-14 05:53:51 +00:00
Alex Ionescu
d53352c677 - Implement KiUnlinkThread to unlink a thread from its wait blocks, handle queue and timer activation/removal.
- Don't play with priorities in KiAbortWaitThread anymore, since we'll soon support Win2003 delayed "adjust increment" functionality, so that the code is not repeated many times.
- Rename KiAbortWaitThread to KiUnwaitThread, make it use KiUnlinkThread and delayed adjustment.
- Implement KxUnwaitThread and KxUnwaitThreadForEvent, optimized versions of KiWaitTest that can be used in special circumstances (notification events, thread termination, process signalling).
- Optimize KeSetEvent by handling signaled notification events without acquiring the dispatcher lock, and by using new inlined routines described above.
- Reimplement KeSetEventBoostPriority properly to actually do boosting.
- Fixup KeRundownQueue with a more typical/proper LIST_ENTRY loop.
- Let me know if you see regressions...

svn path=/trunk/; revision=24102
2006-09-14 03:49:20 +00:00
Alex Ionescu
c440454c10 - Update Kernel Fun.
svn path=/trunk/; revision=24101
2006-09-13 21:46:32 +00:00
Magnus Olsen
a2a7c9632f Greek keyboard layout changes by Apal
See issue #1631 for more details.

svn path=/trunk/; revision=24100
2006-09-13 19:08:41 +00:00
Saveliy Tretiakov
5971670b9b Separate NtGdiModifyWorldTransform and IntGdiModifyWorldTransform for internal usage.
svn path=/trunk/; revision=24099
2006-09-13 16:50:19 +00:00
KJK::Hyperion
182b4dc71d <intrin.h> compatibility header. Implements Visual C++ intrinsics in GCC. Licensed very liberally, please keep it that way
svn path=/trunk/; revision=24098
2006-09-13 14:07:41 +00:00
Saveliy Tretiakov
457e0142bd Move IntGdiGradientFill and IntSystemParametersInfo prototypes to header files.
Delete DestroyThreadWindows prototype (function does not exist).


svn path=/trunk/; revision=24097
2006-09-13 13:43:39 +00:00
Saveliy Tretiakov
0eabb5d7bc Move UserDrawIconEx and UserGetCurIconObject prototyepes to header file.
svn path=/trunk/; revision=24096
2006-09-13 13:03:17 +00:00
Saveliy Tretiakov
e6c1f9ca4b Add UnattendSetupEnabled key for enabling\disabling unattended setup without editing rbuild files.
Modifing rbuild files all the time is not handy and slows down build process.


svn path=/trunk/; revision=24095
2006-09-13 12:33:59 +00:00
Alex Ionescu
63142230b2 - Rename kqueue.c to devque. KQUEUE (kernel queues) are implemented in queue.c, and this filename always confused me. Why would you name KDEVICE_QUEUE into kqueue.c, when you already have KQUEUE in queue.c?!
- Rename exception.c to except.c, mostly due to MSVC's incompatibility with multiple identically named files.
- SVN delete usercall.c leftover.
- Fix KeSetPriorityAndQuantumProcess to use Queued Spinlocks and KiAcquireProcess/ThreadLock when needed.

svn path=/trunk/; revision=24094
2006-09-13 03:02:40 +00:00
Alex Ionescu
630f3d1e69 - Cleanup ipi.c, reformat, and re-organize.
- Undefine all functions for UP builds, except KeIpiGenericCall.
- Implement KeIpiGenericCall for UP builds and add @implemented tag.

svn path=/trunk/; revision=24093
2006-09-13 02:25:32 +00:00
Alex Ionescu
31e4c651c4 - Renamed device.c to config.c and removed all irrelevant code from it, leaving only the two KeFindConfigurationEntry*** functions in it.
- Also fixed the above for incorrect formatting/excessive whitespace.
- The other routines in device.c were moved to cpu.c, since they deal with CPU-specific things.
- Cleaned up KeFlushEntireTb.
- Added inlined routines for setting/getting CR, and also getting GDTR, IDTR, LDTR, TR. Used to implement KiSaveProcessorControlState.
- Implemented KeSaveStateForHibernate.

svn path=/trunk/; revision=24092
2006-09-13 02:08:22 +00:00
Alex Ionescu
b4aab80937 - Fix a typo that happened after-the-fact.
svn path=/trunk/; revision=24091
2006-09-13 02:04:33 +00:00
Alex Ionescu
7687187bf0 - Implement KxAcquireSpinLock/KxReleaseSpinLock for inline acquisition of spinlocks, SMP, UP and DBG. (on DBG builds, we OR the spinlock value with the KTHREAD address, then compare on release.)
- Make In-Stack QSLs a complete no-op in UP, we were still touching some fields.
- Cleanup and re-organize spinlock.c

svn path=/trunk/; revision=24090
2006-09-13 01:41:17 +00:00
Alex Ionescu
07a0973e21 - Remove usercall.c from portable part of Ke and add it to ke\i386. The implementation is slightly arch-specific.
- Remove code in userapc.c and move it into usercall.c, since both functions basically deal with user-mode callouts.
- Handle STATUS_CALLBACK_POP_STACK and add the status to ntstatus.h
- Also handle future support for GDI Batch flushing.

svn path=/trunk/; revision=24089
2006-09-13 01:00:50 +00:00
Alex Ionescu
a614833b08 - Use inlined guarded region routines instead of duplicating code.
- Add @implemented tags.

svn path=/trunk/; revision=24088
2006-09-13 00:35:56 +00:00
Alex Ionescu
d99f96a295 - Implement KiAcquireDeviceQueueLock/KiReleaseDeviceQueueLock for locking KDEVICE_QUEUEs, since they can be used from Threaded DPCs which don't execute at DISPATCH_LEVEL, so the lock needs to be acquired differently.
- Add ASSERT_DEVICE_QUEUE and ASSERTify + reformat kqueue.c.
- Implement KeRemoveByKeyDeviceQueueIfBusy.
- Cleanup exception.c
- Remove dangerous/broken KeGetCurrentIrql() define.

svn path=/trunk/; revision=24087
2006-09-13 00:20:46 +00:00
Aleksey Bragin
c0cda24302 Just one entrypoint="0" is enough
svn path=/trunk/; revision=24086
2006-09-12 21:33:56 +00:00
Hervé Poussineau
6ed6c1661e Don't call notification procedures with APC disabled, it may lead to some strange results.
Thanks Alex for the time he took to help me to debug this issue

svn path=/trunk/; revision=24085
2006-09-12 21:18:22 +00:00
Ged Murphy
3fd92a4f96 Revert changes from r23620 until a better solution can be found as it breaks opening of cpl applets with VS.
The 'DebugSettings' should be stored in the .user file.

svn path=/trunk/; revision=24084
2006-09-12 21:02:39 +00:00
Aleksey Bragin
3b58ac1932 Fix last things preventing me from compiling the tree:
vsnprintt -> _vsnprintf in the wine/unicode.h and in riched20

svn path=/trunk/; revision=24083
2006-09-12 18:51:05 +00:00
Hervé Poussineau
2140d54ca5 Start to support GUID_DEVICE_SYS_BUTTON interface. It is required to handle keyboards with power buttons (wake/sleep/power)
(This commit is done now to be able to debug an APC problem)

svn path=/trunk/; revision=24082
2006-09-12 15:19:51 +00:00
Hervé Poussineau
fec5904b50 [AUDIT] This file only include other files, so it can't be dirty.
Additionally, define GUID_DEVICE_SYS_BUTTON

svn path=/trunk/; revision=24081
2006-09-12 15:19:17 +00:00
Alex Ionescu
2829cc5982 - Re-merge 24062+24063, with a minor difference, they work now.
svn path=/trunk/; revision=24080
2006-09-12 13:54:52 +00:00
Alex Ionescu
6b1e4db5b5 - Partial revert of r20462/63. New HAL/Po/Ki code remains, but restored the original PsIdleThread code. I know what the bug is but I'm too tired to fix it, so I'd rather revert the broken part.
- Install + 2nd stage + boot to desktop will not work in qemu, kernel-kqemu and vmware (all wax and I tested).

svn path=/trunk/; revision=24079
2006-09-12 05:37:14 +00:00
Alex Ionescu
978da5c0af - Revert 24020 (good code, but buggy) and 24041 (bad code/revision).
- This gets us as far as 24061(+24048) for booting.

svn path=/trunk/; revision=24078
2006-09-12 05:21:27 +00:00
Aleksey Bragin
4e03e0ec4a Those two #ifdefs were wrong on my setup (straightforward RosBE 3.4.2, and also updated to 3.4.4). So:
1. Removed the stricmp guard
2. Added a #ifdef->#undef solution

If this break compilation on linux or on gcc 4 on win32 (very low probability, if any), let's think further.

svn path=/trunk/; revision=24076
2006-09-11 21:40:50 +00:00
Saveliy Tretiakov
17189649af For windows with WS_EX_DLGMODALFRAME sysmenu can be opened only by right mouse click
svn path=/trunk/; revision=24074
2006-09-11 15:49:42 +00:00
Hervé Poussineau
6f5c6f23d3 Fix halmp compilation
svn path=/trunk/; revision=24073
2006-09-11 14:35:46 +00:00
Saveliy Tretiakov
68f5e47ce6 This testapp demonstrates WS_SYSMENU + WS_EX_DLGMODALFRAME behavior
and shows that DrawCaption does care about WS_EX_DLGMODALFRAME and WS_EX_TOOLWINDOW.


svn path=/trunk/; revision=24072
2006-09-11 13:09:12 +00:00
Saveliy Tretiakov
529631027a Fix WS_SYSMENU+WS_EX_DLGMODALFRAME bug.
Fixes Messagebox broblem and some others.

svn path=/trunk/; revision=24071
2006-09-11 13:07:12 +00:00
Aleksey Bragin
d263039fe9 Add missing header
svn path=/trunk/; revision=24070
2006-09-11 13:01:39 +00:00
Hervé Poussineau
60fb482ad4 Fix compilation on Linux hosts - try #2
We can't use the _WIN32 symbol which is automatically defined once you include psdk/windef.h ...

svn path=/trunk/; revision=24069
2006-09-11 12:42:35 +00:00
Alex Ionescu
5fb31962db - Implement KiReleaseProcessLockFromDpcLevel and use it in KeTerminateThread. We were lowering to PASSIVE during thread termination, and then doing a context switch at PASSIVE, which you can guess is pretty bad.
svn path=/trunk/; revision=24068
2006-09-11 12:00:02 +00:00
Hervé Poussineau
07dc58982f We want to support hives version 1.3+ (up to 1.5 currently). Fix test accordingly
svn path=/trunk/; revision=24067
2006-09-11 11:28:54 +00:00
Hervé Poussineau
7b79f44d6b Better handling of REG_LINK values
Try to fix Linux build (thanks Usurp on IRC)

svn path=/trunk/; revision=24066
2006-09-11 11:04:33 +00:00
Saveliy Tretiakov
4f6a751b6f Implement NtGdiCloseFigure (Fixes BSOD!)
svn path=/trunk/; revision=24065
2006-09-11 11:01:35 +00:00
Saveliy Tretiakov
059fb2c54e Implement NtGdiFlattenPath
svn path=/trunk/; revision=24064
2006-09-11 10:43:42 +00:00
Alex Ionescu
c19a362969 - Implement HalProcessorIdle.
- Fix KiIdleLoop to actuall load the PCR in EBX. It was using a completely random value.
- Call the Processor Idle Routine now, isntead of hard-coding STI+HLT. This routine had already been setup during bootup by PoInitailizePrcb.
- Implemented PopIdle0 and made it call HalProcessorIdle. No performance/throttling is done yet.

svn path=/trunk/; revision=24063
2006-09-11 06:50:19 +00:00
Alex Ionescu
81997fc0bc - Implement and export HalClearSoftawareInterrupt (currently implemented to match the hacked ROS version, no new version written yet).
- Implement CPU Idle Loop in assembly for UP and SMP systems. Differences:
  * Runs with interrupts off most of the time, except when it does interrupt cycling at each iteration.
  * Calls KiRetireDpcList directly, instead of going through KiDispatchInterrupt.
  * Support for new scheduler and immediate thread switch.
  * Support for Idle Scheduler.
  * Support for HAL/ACPI/CPU Driver-defined "Idle Function". currently disabled and STI+HLT harcoded instead.
- Removed ps/idle.c and dumped the hack code directly in psmgr.c wher eit's used.

svn path=/trunk/; revision=24062
2006-09-11 06:22:26 +00:00
Alex Ionescu
a0fac81cfd - Add the actual missing code to KiQuantumEnd. It's asserted to make sure it'll never execute (yet).
- Add KiExitDispatcher from my new scheduler code. Same as KiQuantumEnd, added an assertion to make sure it doesn't enter in code paths that shouldn't yet happen.

svn path=/trunk/; revision=24061
2006-09-11 05:26:38 +00:00
Alex Ionescu
6c853c9c32 - Fix a critical bug in KiComputeNewPriority.
- Fix a bug in KiSetPriorityThread which wasn't setting *released = FALSE, which left the var uninitailized and usually = TRUE on the stack.
- Half-copy KiQuantumEnd from my new scheduler code. Main difference is usage of newly created locks, support for quantum-disable and RT threads, and usage of KiComputeNewPriority.

svn path=/trunk/; revision=24060
2006-09-11 05:21:18 +00:00
Alex Ionescu
8028be67cb - Fix KiDeliverApc prototype for PPC compatibilty.
- Fixup comment header for KiDeliverApc and KiInsertQueueApc.
- Set APC trap frame during APC delivery. We actually weren't doing this before (I'm kind of amazed at ROS's previous functionality due to importance of this bug!).
- Use proper in-stack queued spinlock mechanisms.
- Make sure that the Kernel APC list didn't become empty while we acquired the APC lock after the first verification.
- Validate IRQL on return from APC routines, to catch bad code.

svn path=/trunk/; revision=24059
2006-09-11 04:34:25 +00:00
Alex Ionescu
d011801cef - Fix lock acquisition/release mismathces in KiInsertQueueApc.
- Support and document InsertApcEnvironment KAPC_ENVIRONMENT type.
- Fixup formatting and ASSERTify.
- Acquire dispatcher lock when insereting an APC into another thread.
- Use delayed interrupt request on SMP systems (and fixup KiRequestApcInterrupt accordingly).

svn path=/trunk/; revision=24058
2006-09-11 03:14:26 +00:00
Alex Ionescu
52b3dfb608 - Fix stupid typo.
svn path=/trunk/; revision=24057
2006-09-11 02:30:38 +00:00
Alex Ionescu
90a7bca112 - Add new KAPC_ENVIRONMENT mode: InsertApcEnvironment.
- Fixup KeInitalizeApc like all the other functions.
- Don't use an expensive 48-byte RtlZeroMemory instead of just clearing two members.

svn path=/trunk/; revision=24056
2006-09-11 02:28:09 +00:00
Alex Ionescu
8b90aed6be - Fix comment headers for KeFlushQueueApc, KeInsertQueueApc.
- ASSERTify KeInsertQueueApc and some formatting fixes.

svn path=/trunk/; revision=24055
2006-09-11 02:17:57 +00:00
Alex Ionescu
c9607ffe89 - Fix for Windows Kernel APC Data-Free Local Privilege Escalation Vulnerability (re-initialize the list head after cleaning it, so that the list is circular).
- Optimize KeFlushQueueApc: we can check if the Kernel-Mode APC list is empty without acquiring the lock. If it's empty, we can quit immediately, if not, then we'll acquire and check it again. For user APCs we always need to acquire the lock, though.

svn path=/trunk/; revision=24054
2006-09-11 02:09:13 +00:00
Alex Ionescu
43a412db60 - Add ASSERT_APC definition.
- Fix KeRemoveQueueApc comment header and clean up function.
- Acquire dispatcher lock at DPC level during ApcListEntry read/write.

svn path=/trunk/; revision=24053
2006-09-11 01:45:11 +00:00
Alex Ionescu
4b35027c0f - Cleanup RepairList, KiMoveApcState.
- Fixup comments for KeAreApcsDisabled.
- Implement and add comment header to KeAreAllApcsDisabled.

svn path=/trunk/; revision=24052
2006-09-11 01:30:24 +00:00
Alex Ionescu
2fea34f0e1 - Re-implement KiRequestApcInterrupt in ke_x.h. Make it work by CPU number (as documented) instead of comparing PRCBs.
- Move NtQueueApcThread to ps/state.c since it's a Ps-level function.
- Make NtQueueApcThread use POOL_QUOTA_FAIL_INSTEAD_OF_RAISE and add that flag to our DDK. Also fix the check for SystemThread by looking at the flag, not checking if TEB == NULL. Also fix a memory leak and comment header.
- Fix comment header in KiInitalizeUserApc.

svn path=/trunk/; revision=24051
2006-09-11 01:15:03 +00:00
Alex Ionescu
1462b71058 - Re-organize apc.c into private/public functions (no code change).
- Move KiInitializeUserApc to ke/i386/userapc.c. The routine is non-portable.
- Force Ring 3 state into User APC TrapFrame to maintain system integrity and coherency. Also respect IOPL.
- Use SEH handling routine just like when handling exceptions, to properly re-direct a crash here. Thanks to KJK again for showing me how to write these kinds of routines.

svn path=/trunk/; revision=24050
2006-09-11 00:54:12 +00:00
Alex Ionescu
4d94e0557f - Fix KeEnterCriticalRegion/KeLeaveCriticalRegion by moving to ke_x and adding ASSERTs, and change the code in apc.c to call these inlined versions instead. Also fix comment headers for these functions in apc.c to match the official standard.
svn path=/trunk/; revision=24049
2006-09-11 00:26:17 +00:00
Alex Ionescu
38759195cb - We only need to update the page directory for the current stack, not the whole ETHREAD. (the page fault will be handled).
- Release dispatcher lock from DPC level in KiAttachProcess.
- Add missing decoration/assert to KeAttachProcess, and only acquire APC lock after we've made the invalid attach test. Also acquire dispatcher lock at DPC level here and in KeStackAttachProcess.
- Loop in KeUnStachDetachProcess to avoid the case where we acquired the APC lock while a kernel APC was pending. Keep releaing the loop and re-attemping acquire until it has been delivered.
- Add Decoration for *ServiceTable* functions.

svn path=/trunk/; revision=24048
2006-09-10 23:41:08 +00:00
Alex Ionescu
d7ae142cf1 - KPROCSES Flags are LONG, not ULONG.
- Add some missing decoration.
- NUMA node semantics for KeInitializeProcess are only required on SMP builds.
- Allow KeInitailizeProcess to receive an argument specifying if alignment faults should be enabled or not.
- Use KiComputeIopmOffset to get the IopmOFfset instead of setting -1

svn path=/trunk/; revision=24047
2006-09-10 23:17:22 +00:00
Aleksey Bragin
5e7a9fc74e Create a place for some R&D work about booting Windows from inside of FreeLdr
svn path=/trunk/; revision=24046
2006-09-10 21:32:02 +00:00
Alex Ionescu
faa5f58b84 - Remove KeGetCurrentProcess. This API doesn't exist.
- Add assertions to relevant functions in process.c and re-format some code.
- Check for invalid APC state in KeDetachProcess.
- Decrease process stack count while holding the Dispatcher Lock at DPC level.
- Implement KiSwapProcess in ctxswitch.S and add SMP-support and LDT swap support for the future, as well as updating the IOPM base in the TSS.

svn path=/trunk/; revision=24044
2006-09-10 20:23:02 +00:00
Aleksey Bragin
54a6548aa7 Fix inconsistent formatting and other trails of GreatLord's fixing
svn path=/trunk/; revision=24043
2006-09-10 20:12:16 +00:00
Saveliy Tretiakov
6a37552f9e implement NtGdiPathToRegion
svn path=/trunk/; revision=24042
2006-09-10 19:42:09 +00:00
Alex Ionescu
344fd08452 - No need to apply the ROS Page hack inside thread switching, since the process is the same.
svn path=/trunk/; revision=24041
2006-09-10 19:41:31 +00:00
Alex Ionescu
ecb32725f7 - Add ASSERT_EVENT.
- Same changes to event.c as with the other files.
- Remove lock property, these files have already been audited as clean and were unlocked.

svn path=/trunk/; revision=24040
2006-09-10 19:14:03 +00:00
Alex Ionescu
b5c8cf43e7 - Add ASSERT_MUTANT and ASSERT_SEMAPHORE to our DDK.
- Cleanup mutex.c and sem.c. No real code changes, just add ASSERTs, STDCALL->NTAPI, IN/OUT decoration.
- One change though, in KeReleaseMutant, use KeLeaveCriticalRegion instead of manually writing down the code, it's more readable this way.

svn path=/trunk/; revision=24039
2006-09-10 18:47:53 +00:00
Alex Ionescu
da15ddafc8 - Get completely rid of old Dispatcher Lock macros and use new ones.
- apc.c -> Also multiple optimizations to use the APC lock instead of the full-fledged dispatcher lock.
- gate.c -> Use APC lock as well, the full dispatcher lock isn't required because a thread can only wait on one and only one gate.
- process.c -> Optimize the code to use the Process and/or APC lock instead of the dispatcher lock. Also delay acquiring the locks after some checks, to make the exit paths simpler.
- More fixes are teh needed.

svn path=/trunk/; revision=24038
2006-09-10 18:26:50 +00:00
Thomas Bluemel
63346a8dda Fix difference in signedness warning
svn path=/trunk/; revision=24037
2006-09-10 18:22:48 +00:00
Thomas Bluemel
ac14f5a033 Fix LdrRelocateImageWithBias prototype: Strings in C are neither signed nor unsigned, and they are constants. Fixes warnings with GCC4
svn path=/trunk/; revision=24036
2006-09-10 17:16:59 +00:00
Alex Ionescu
4300e4effe - Update the last remaining old function, KeSetBasePriority. Use new locks and assertions, and also make use of KiComputeNewPriority.
svn path=/trunk/; revision=24035
2006-09-10 17:13:55 +00:00
Alex Ionescu
1ee6196a10 - Reposition and update KeQueryBasePriorityThread to use the new locks.
- Update KeSetAFfinityThread, KeSetPriorityThread with new locks and assertions (plus the current ROS scheduler hack).

svn path=/trunk/; revision=24034
2006-09-10 17:05:07 +00:00
Alex Ionescu
678df444b7 - Update KeRevertToUserAffinityThread, KeSetSystemAffinityThread to use new lock functions, and add code to support future scheduler.
- Update KeSetIdealProcessorThread to properly do Ideal CPU logic instead of blindgly setting it (most importantly, respect UserIdealProcessor and SystemAffinityActive seettings).

svn path=/trunk/; revision=24033
2006-09-10 16:55:03 +00:00
Alex Ionescu
d3a7b531f3 - Re-organize all internal functions in 3 groups:
- 1) Utility (FindRightmost/LeftMost Set, etc)
   - 2) State (Alert, AlertResume, ForceResume, Freeze, Resume, Rundown, Start, Suspend, TestAlert)
   - 3) Un/Initialization (KeInitThread, KeInitializeThread, KeUninitThread).

svn path=/trunk/; revision=24032
2006-09-10 16:38:02 +00:00
Aleksey Bragin
a9d0596841 - Add msvcrt linking where needed
- Change "rintf" unixism to ceil() and data conversion to integer type

svn path=/trunk/; revision=24031
2006-09-10 16:32:37 +00:00
Alex Ionescu
af9e8a64e7 - Remove KeSetPreviousMode, KeDisableThreadApcQueueing.
- Stargint reorganizing some public functions to the bottom of the file.
- Don't hold lock during KeSetKernelStackSwapEnable.

svn path=/trunk/; revision=24030
2006-09-10 16:30:49 +00:00
Alex Ionescu
1b223aebfb - Implement KiAcquireProcessLock, KiReleaseProcessLock.
- Update KeFreezeAllThreads to use the Process and APC In-Stack Queued Spinlock.
- Update KeTerminateThread to use the Process Lock. Call KiRundownThread to cleanup the NPX thread. Add some assertions for Stack in/out-paging. Use KiSetThreadSwapBusy for proper SMP vs UP building.
- NUMA Node semantics in KeStartThread only need to be done for CONFIG_SMP builds, so #ifed them appropriately. Also made it use the Process In-Stack QSL.

svn path=/trunk/; revision=24029
2006-09-10 16:25:57 +00:00
Alex Ionescu
e61739c38c - Fix definition of SYNCH_LEVEL.
- Implement KeAcquireInStackQueuedSpinLockRaiseToSynch for UP systems.
- Implement KiAcquireApcLock, KiAcquireApcLockAtDpcLevel, KiReleaseApcLock, KiReleaseApcLockFromDpcLevel.
- KeResumeThread, KeSuspendThread, KeAlertThread, KeForceResumeThread, KeTestAlertThread, KeAlertResumeThread are now the first to use the new APC In-Stack Queued Spinlock for sychronization.

svn path=/trunk/; revision=24028
2006-09-10 16:09:58 +00:00
Hervé Poussineau
bd33d79025 Initialize MainResource and PagingIoResource fields in FSRTL_COMMON_FCB_HEADER structure
svn path=/trunk/; revision=24027
2006-09-10 15:58:29 +00:00
Hervé Poussineau
6702dd5240 Let mkhive use cmlib. "make install" now works and this let the livecd go further than before
svn path=/trunk/; revision=24026
2006-09-10 15:39:11 +00:00
Hervé Poussineau
2ca81c5573 Fix some warnings
svn path=/trunk/; revision=24025
2006-09-10 15:26:48 +00:00
Alex Ionescu
aafcd436d5 - Thread Support cleanup 1: Separate kthread.c into thrdobj.c (Exported and globally accesible functions dealing with the KTHREAD object) and thrdschd.c (Fully internal thread scheduling routines for Ke* only).
- Also fix KeSetAffinityThread to return the old affinity, instead of NTSTATUS and move NtYieldExecution from Ps to Ke, and move NtDelayExecution to wait.c
- No code changes.

svn path=/trunk/; revision=24024
2006-09-10 15:23:20 +00:00
Aleksey Bragin
f9b0ee1a03 vsnprintf -> _vsnprintf
svn path=/trunk/; revision=24023
2006-09-10 15:07:02 +00:00
Alex Ionescu
d2cb3868b7 - Add some definitions to ketypes.h
- Fix multiple bugs in KTHREAD/KPROCESS where signed char values were marked as unsigned (and define SCHAR in ntdef.h)
- Change prototype of KiSwapThread for future compatibility.
- Fix prototype of KeSetIdealProcessorThread.
- Add KiAcquireDispatcherLock, KiReleaseDispatcherLock, KiAcquireDispatcherLockAtDpcLevel, KiReleaseDispatcherLockFromDpcLevel to ke_x.h for future use.
- Add KiInsertDeferredReadyList, KiRescheduleThread, KiSetThreadSwapBusy, KiRundownThread, KiCheckDeferredReadyList for future use.
- Add KiAcquirePrcbLock, KiReleasePrcbLock, KiAcquireThreadLock, KiReleaseThreadLock for future use.
- Add KxQueueReadyThread, KiSelectReadyThread for future use.
- Add KiComputeNewPriority for future use.

svn path=/trunk/; revision=24022
2006-09-10 14:43:12 +00:00
Aleksey Bragin
098292d473 These DPRINT1s are ONLY for Magnus' debuggin session.
Correcting his mistake of commiting them to the tree.

(taskmgr.exe should work again)

svn path=/trunk/; revision=24021
2006-09-10 14:23:13 +00:00
Aleksey Bragin
b52f7b069b - Implement enable/disable of protection for PE sections in ntdll
- Finally get rid of duplicated relocation code in ntdll by using the relocate function from RTL and enable/disable protection
- Some improvements added to RTL's relocation function, it's split up into two functions now

svn path=/trunk/; revision=24020
2006-09-10 13:33:30 +00:00
Hervé Poussineau
65df8c2bad Revert part of r23972. Now we can boot again
(+ fix a little bug)

svn path=/trunk/; revision=24019
2006-09-10 10:26:58 +00:00
Aleksey Bragin
a9bca34078 Dmitry Philippov: Fix GCC4 warning
svn path=/trunk/; revision=24018
2006-09-10 09:31:44 +00:00
Aleksey Bragin
e90bd22c08 [AUDIT]
- Code duplication for relocation
- Widely documented PE loading algorithms
- Conclusion: clean

svn path=/trunk/; revision=24017
2006-09-10 08:35:30 +00:00
Aleksey Bragin
746299a0da - Move and slightly modify the relocation code to RTL, change its prototype so that it can be used in future in freeldr, ntdll and in kernel (right now there is code duplication, which is removed from kernel by this commit).
svn path=/trunk/; revision=24016
2006-09-10 08:00:57 +00:00
Hervé Poussineau
0fbf1539ac At last, enable screensaver
svn path=/trunk/; revision=24013
2006-09-10 02:22:12 +00:00
Hervé Poussineau
96bb2d5365 Add stub for SPI_GETSCREENSAVEACTIVE (which always return TRUE at the moment...)
svn path=/trunk/; revision=24012
2006-09-10 02:20:29 +00:00
Hervé Poussineau
c965755754 Remove screensaver implementation of win32k (ie revert revision 22879).
svn path=/trunk/; revision=24011
2006-09-10 01:20:53 +00:00
Hervé Poussineau
b61c75703c LastInputTick value should be in milliseconds, according to the help of GetTickCount in MSDN
svn path=/trunk/; revision=24010
2006-09-10 01:08:35 +00:00
Hervé Poussineau
54ad3ea87b Add missing entrypoint="0" directive in rbuild files [Part 2/2]
svn path=/trunk/; revision=24009
2006-09-09 22:55:57 +00:00
Hervé Poussineau
ae5f6b945d Add missing entrypoint="0" directive in rbuild files [Part 1/2]
svn path=/trunk/; revision=24008
2006-09-09 22:33:07 +00:00
Hervé Poussineau
bc6649b746 Put a NULL entry point if explicitly asked for. Thanks w3seek for his help on this issue
svn path=/trunk/; revision=24007
2006-09-09 20:39:50 +00:00
Christoph von Wittich
e10a07af00 *add support for the new SVN 1.4.x binary format
svn path=/trunk/; revision=24006
2006-09-09 20:38:41 +00:00
Magnus Olsen
eb1866f25c Implement GetLastInput base on bug 1753 patch by P43LOk,
It did not catch the last input tick  from keyboard or mouse. 
This code is not tested in reactos, but should work. 
See issue #1753 for more details.

svn path=/trunk/; revision=24005
2006-09-09 19:41:12 +00:00
Saveliy Tretiakov
70a18c5a4e Implement NtGdiGetPath (based on wine)
svn path=/trunk/; revision=24004
2006-09-09 19:26:43 +00:00
Hervé Poussineau
0f51b5f0bc Implement registry handle closing notifications in ntoskrnl
svn path=/trunk/; revision=24003
2006-09-09 19:08:37 +00:00
The Wine Synchronizer
4246de3191 Autosyncing with Wine HEAD
svn path=/trunk/; revision=24002
2006-09-09 17:48:42 +00:00
Hervé Poussineau
b5957ce896 Fix MsiDatabaseIsTablePersistentA/W prototype
Update msi_ros.diff file for upcoming update

svn path=/trunk/; revision=24001
2006-09-09 17:42:28 +00:00
Hervé Poussineau
8e420b3974 Implement "Check volume" page in usetup.
Doesn't work yet because VfatChkdsk() is not implemented

svn path=/trunk/; revision=24000
2006-09-09 17:11:03 +00:00
Hervé Poussineau
07f8340c15 Use Guid specified in device info set (if available) in SetupDiGetClassDevsExW.
Update some documentation (taken from Wine)

svn path=/trunk/; revision=23999
2006-09-09 17:10:51 +00:00
Hervé Poussineau
8dcf1980fe Set 2nd stage setup to language selected in registry
Try to use GetLastInputInfo API instead of a keyboard/mouse hook for screensaver (not enabled yet)

svn path=/trunk/; revision=23998
2006-09-09 17:10:42 +00:00
Hervé Poussineau
52d59f6a4f Don't use buffered input when reading username/password in text mode
svn path=/trunk/; revision=23997
2006-09-09 17:09:45 +00:00
Hervé Poussineau
4ca190a004 Remove useless member in DESKTOP_OBJECT structure
svn path=/trunk/; revision=23996
2006-09-09 17:09:33 +00:00
Hervé Poussineau
1dc7b0f6af Add VfatChkdsk() prototype
svn path=/trunk/; revision=23995
2006-09-09 16:47:09 +00:00
Saveliy Tretiakov
52c652809d revert last commit
svn path=/trunk/; revision=23993
2006-09-09 14:49:11 +00:00
Saveliy Tretiakov
b2dbae0fab Messageboxes shouldn't have WS_SYSMENU
svn path=/trunk/; revision=23992
2006-09-09 14:38:07 +00:00
Art Yerkes
812b97ae66 Correct bug in cache which could cause us to lose the last block of a file.
This is wierd and insidious, and probably was the cause of n00bs not being
able to boot on occasion.

svn path=/trunk/; revision=23990
2006-09-09 13:47:45 +00:00
Saveliy Tretiakov
68c6a664cf Replace MmCopyFromCaller with probing and seh.
svn path=/trunk/; revision=23988
2006-09-09 13:19:03 +00:00
Aleksey Bragin
e6bb607c6f [AUDIT]
- PE loading/relocating/fixups/etc is greatly documented in a number of sources (e.g. good russian-language article - http://www.uinc.ru/articles/41/, it has links to a different media describing loading process of PE)
- Nothing suspicious found in the code itself

svn path=/trunk/; revision=23987
2006-09-09 12:22:40 +00:00
Saveliy Tretiakov
c439fb86f7 Add winetests to bootcd
svn path=/trunk/; revision=23986
2006-09-09 11:42:52 +00:00
Aleksey Bragin
249e8c91ba Dmitry Philippov: GCC 4 compiling fixes for PackMgr and tests/wm_paint
svn path=/trunk/; revision=23985
2006-09-09 11:41:24 +00:00
KJK::Hyperion
dd77d1676b modified Resources/hresult.xml
Added S_OK and S_FALSE

modified   Resources/ntstatus.xml
    Added all possible STATUS_WAIT_XX codes as STATUS_WAIT_0 + XX

modified   TechBot.Console/App.config
    Don't use hard-coded paths, please!

modified   TechBot.Library/ErrorCommand.cs
    New and improved !error command, now performs heuristics to catch all possible or likely uses

modified   TechBot.Library/HresultCommand.cs
    Removed useless field

modified   TechBot.Library/NumberParser.cs
    Made a couple of methods static

modified   TechBot.Library/TechBotService.cs
    Disable !api until it fails gracefully

svn path=/trunk/; revision=23984
2006-09-09 10:53:28 +00:00
Art Yerkes
25c11e5f6e Make UNIMPLEMENTED available everywhere and remove some #ifdef cruft.
svn path=/trunk/; revision=23983
2006-09-09 09:41:09 +00:00
Thomas Bluemel
94a97e085a Added missing definitions
svn path=/trunk/; revision=23982
2006-09-09 09:26:26 +00:00
James Tabor
03a2724000 User32 static.c:
- Patch by Dmitry Timoshkov, modified for ReactOS.
    - Use computed icon rectangle if SS_CENTERIMAGE style is set.

svn path=/trunk/; revision=23981
2006-09-08 22:30:46 +00:00
Aleksey Bragin
9233af3e50 Add a bit of error reporting
svn path=/trunk/; revision=23980
2006-09-08 22:00:39 +00:00
The Wine Synchronizer
1869f86db6 Autosyncing with Wine HEAD
svn path=/trunk/; revision=23979
2006-09-08 20:13:51 +00:00
The Wine Synchronizer
8377230a7b Autosyncing with Wine HEAD
svn path=/trunk/; revision=23978
2006-09-08 20:12:06 +00:00
The Wine Synchronizer
5a367d19d2 Autosyncing with Wine HEAD
svn path=/trunk/; revision=23977
2006-09-08 20:08:45 +00:00
The Wine Synchronizer
527fb9fa9b Autosyncing with Wine HEAD
svn path=/trunk/; revision=23976
2006-09-08 19:33:33 +00:00
Aleksey Bragin
335e03625a Fix invalid charset (DOS -> Windows)
svn path=/trunk/; revision=23975
2006-09-08 15:39:34 +00:00
Hervé Poussineau
9243a83d80 Adapt usetup to handle more easily additional filesystems
This also prepares ground for the Chkdsk disk page

svn path=/trunk/; revision=23974
2006-09-07 22:42:28 +00:00
Alex Ionescu
e6fd23de2c - 1>Build Time 0:04
1>ReactOS Kernel - 0 error(s), 253 warning(s)
- Add winerror.h to ps/win32.c so it can get the Win32 error definition it needs (winerror.h doesn't add any other nasty win32 headers, so this isn't really a header policy violation).
- Fix prototypes of KdEnableDebugger and KdDisableDebugger.
- Write one of the cleanest and most ingenious hacks I've ever come up with it, which bypasses the incompatibility of hard-coded WDK externals.

svn path=/trunk/; revision=23973
2006-09-07 22:38:06 +00:00
Alex Ionescu
254f6b62ac - More MSVC fixes (down to 19 errors):
- Header changes: fix FILE_LOCK_INFO, LARGE_MCB, BASE_MCB, MM_SYSTEMSIZE.
- Remove many things in W32API which are incorrectly there (due to winnt being used by the win32api DDK). Defined them in the NDK instead, where appropriate (mostly definitions that are present in user-mode headers, but not kernel-mode headers).
- Hacked the ERESOURCE functions to define a special ERESOURCE_XP type. This is necessary because ERESOURCE is an opaque-yet-exported structure, and its structure changed in Vista.
- Removed support for IMAGE_SCN_TYPE_NO_LOAD. It is a reserved field and Windows does not "respect" it. (sections marked as no-load will still be loaded by NT).

svn path=/trunk/; revision=23972
2006-09-07 21:36:15 +00:00
Hervé Poussineau
7d80cdabff Add ufat.dll and the optional ufatx.dll (to be added later to repository)
svn path=/trunk/; revision=23971
2006-09-07 20:57:02 +00:00
Hervé Poussineau
8c22629a9e [FORMATTING] Fix tab/space mess by replacing them by 4 spaces. No code change
svn path=/trunk/; revision=23970
2006-09-07 20:15:45 +00:00
Hervé Poussineau
1b337150cc Update prototypes
svn path=/trunk/; revision=23969
2006-09-07 19:46:18 +00:00
James Tabor
2fad285b14 Removed NtUserGetKeyboardType, there was no win32k.db entry for it.
svn path=/trunk/; revision=23968
2006-09-07 19:23:39 +00:00
Thomas Bluemel
3a4bb3b8dc Yes we should do it as WINE. Fixes a buffer overflow in RtlDetermineDosPathNameType_U()
svn path=/trunk/; revision=23967
2006-09-07 19:20:42 +00:00
Hervé Poussineau
2417bf273f Correctly handle optional parameters
svn path=/trunk/; revision=23966
2006-09-07 19:16:47 +00:00
Hervé Poussineau
022504ad3c Some 64 bits fixes (approved by Filip)
svn path=/trunk/; revision=23965
2006-09-07 19:13:37 +00:00
Hervé Poussineau
a2548c11a4 Fix format.exe compilation
svn path=/trunk/; revision=23964
2006-09-07 18:08:00 +00:00
Hervé Poussineau
24ff7a71b4 Fix compilation
svn path=/trunk/; revision=23963
2006-09-07 17:55:51 +00:00
Hervé Poussineau
0d173915ac Correctly implement autochk, which now calls the ChkdskEx function in u{FS}.dll.
svn path=/trunk/; revision=23962
2006-09-07 17:54:23 +00:00
Hervé Poussineau
611b577fd6 Add a stub for FAT12/16/32 chkdsk
svn path=/trunk/; revision=23961
2006-09-07 17:44:08 +00:00
Hervé Poussineau
eb50899ee0 Declare prototype for ChkdskEx function in u{FS}.dll
svn path=/trunk/; revision=23960
2006-09-07 17:39:42 +00:00
Magnus Olsen
3387c46e16 fixed win32k build, trunks builds again thanks w3seek for the help
svn path=/trunk/; revision=23959
2006-09-07 17:35:31 +00:00
Hervé Poussineau
8f329a8565 Fix typo: _GNUC_ -> __GNUC__
svn path=/trunk/; revision=23958
2006-09-07 13:47:14 +00:00
Magnus Olsen
861ae4bcca fixed rosapps so it compiles again
svn path=/trunk/; revision=23957
2006-09-07 11:10:27 +00:00
Magnus Olsen
01acfd4778 fixed follow test, acclertor, alive, alphablend, bitblt, button, button2, capclock, carets, combotst, dibtest, dirdlg, DxHalTest, edit, enhmetafile, enumfonts, enumwnd, enumws, gradient, hello, hivtest, icontest, lineclip, linetest, mdi, midtest
svn path=/trunk/; revision=23956
2006-09-07 10:31:37 +00:00
Magnus Olsen
433252a084 fixed ctm, kill, lsdd, man, regexpl, tcat can be build again
svn path=/trunk/; revision=23955
2006-09-07 10:01:22 +00:00
Magnus Olsen
d6a960a884 fixed so packmgr builds again
svn path=/trunk/; revision=23954
2006-09-07 09:53:25 +00:00
Magnus Olsen
c410304d3c fixed waring msg newline
svn path=/trunk/; revision=23953
2006-09-07 09:46:50 +00:00
Magnus Olsen
d287153576 fixed all network apps in rosapps.
svn path=/trunk/; revision=23952
2006-09-07 09:42:17 +00:00
Magnus Olsen
e3d7c1e7aa 1. fixed mc build again
2. fixed some warnings

svn path=/trunk/; revision=23951
2006-09-07 09:17:39 +00:00
Johannes Anderwald
4d044a7f0d * fix building ntoskrnl
svn path=/trunk/; revision=23950
2006-09-07 09:06:47 +00:00
Magnus Olsen
a5ea7e70cd fixed gdb2 build thx hpoussin for the host info
svn path=/trunk/; revision=23949
2006-09-07 08:50:42 +00:00
Magnus Olsen
fa303561af fixed build for ddraw_demo
svn path=/trunk/; revision=23948
2006-09-07 08:29:06 +00:00
Magnus Olsen
e32b3e7588 fixed build for maze again
svn path=/trunk/; revision=23947
2006-09-07 08:26:54 +00:00
Magnus Olsen
b780b50b58 fixed build for touch again
svn path=/trunk/; revision=23946
2006-09-07 08:23:54 +00:00
Magnus Olsen
49b27aaae4 fixed mode can be compile again.
svn path=/trunk/; revision=23945
2006-09-07 08:20:29 +00:00
Magnus Olsen
bff34182eb update shlguid, remove the dublacte guid, winefiles can be build now again
svn path=/trunk/; revision=23944
2006-09-07 07:14:49 +00:00
Magnus Olsen
d6fbed40b0 include psdk shlguid.h
svn path=/trunk/; revision=23943
2006-09-07 07:13:07 +00:00
Magnus Olsen
e50296456b Fixed so explorer can be compiling again.
Have not tested with rest of reactos if this break any anything. 

svn path=/trunk/; revision=23942
2006-09-07 06:36:33 +00:00
Alex Ionescu
dd25974e25 - More MSVC fixes:
Additions or changes to headers: FSRTL_PER_FILEOBJECT_CONTEXT, FsRtlAreNamesEqual uses CONST buffers, KiIpiGenericCall + PKPIP_BROADCAST_WORKER, MmPageEntireDriver returns PVOID, Obf(De)referenceObject return LONG_PTR, KeGetPreviousMode is ExGetPreviousMode. KeGetCurrentPrcb is reimplemented in inline, MAX_PATH exposed to drivers.
- Changes: STATIC->static. static __inline ->FORCEINLINE. STDCALL -> NTAPI (Some). WORD/DWORD/BYTE -> NT Types.
- Kernel bugs fixed: Some string concatenations were broken, some functions had wrong return values.

svn path=/trunk/; revision=23941
2006-09-07 05:07:34 +00:00
Thomas Bluemel
17e434d5bd Add user32 to build notifyhook
svn path=/trunk/; revision=23940
2006-09-06 21:44:06 +00:00
Brandon Turner
80562db631 Link to shell32 so we can use CommandLineToArgvW when compiling unicode. Thanks to Usurp for finding the problem.
svn path=/trunk/; revision=23939
2006-09-06 21:17:23 +00:00
Johannes Anderwald
29a8ffa699 * add console.dll to bootcd
* add setting for unattended GUI setup (disabled)

svn path=/trunk/; revision=23938
2006-09-06 21:12:06 +00:00
Art Yerkes
e1ba8f15ae Fix this properly: specify the search path among our various header sets.
svn path=/trunk/; revision=23937
2006-09-06 20:58:02 +00:00
Art Yerkes
d7a2739bdf Ditto.
svn path=/trunk/; revision=23936
2006-09-06 20:31:11 +00:00
Art Yerkes
ec6a7a35c4 Added _fpreset prototype. Not sure why this isn't picked up here.
svn path=/trunk/; revision=23935
2006-09-06 20:30:28 +00:00
Thomas Bluemel
3c13ad4c32 Delete empty directory
svn path=/trunk/; revision=23934
2006-09-06 20:10:02 +00:00
Thomas Bluemel
02a7a31265 - Force using the import libraries built by ReactOS only, don't use the ones that come with the mingw compiler (doesn't work for CPP!)
- Import the mingw startup library and customized it a little. _tmain() is now supported, compiling an application as unicode is now just a matter of setting the module attribute unicode="true"
- Fixed .rbuild files to import all libraries neccessary
- Various GUID header changes and hacks to get everything to build/link properly
- Fixed the IShellView2 interface

svn path=/trunk/; revision=23933
2006-09-06 20:00:41 +00:00
Magnus Olsen
292bb9268e [Audlt] this file was written by filip for mingw w32sapi, and it contain few GUID from wine to keep wine dsound happy.
I did add the GUID from wine. 

svn path=/trunk/; revision=23932
2006-09-06 19:57:19 +00:00
Magnus Olsen
d009b08d81 [Audlt] this file was written by filip for mingw w32sapi and it same as mingw w32aspi,
svn path=/trunk/; revision=23931
2006-09-06 19:51:03 +00:00
Johannes Anderwald
753aa1c0e2 * halfplement reading / writing Console User settings
* remove hardcoded constants
* shuffle initialization code :-)
* changing console text / background color now works :-)))))))
* changing cursor works only for one input (needs be investigated)

svn path=/trunk/; revision=23930
2006-09-06 19:37:53 +00:00
Thomas Bluemel
7aae13b091 Fixed difference in signedness warnings
svn path=/trunk/; revision=23929
2006-09-06 19:28:35 +00:00
Thomas Bluemel
84269d7917 Fixed difference in signedness warnings
svn path=/trunk/; revision=23928
2006-09-06 18:59:30 +00:00
Aleksey Bragin
7f0a82ce58 Fix MSVC 2005 compilation (Platform SDK is correctly included)
svn path=/trunk/; revision=23927
2006-09-06 18:43:35 +00:00
Saveliy Tretiakov
1fc89de847 Some win32k docs (from win32k rewrite branch).
svn path=/trunk/; revision=23926
2006-09-06 16:31:03 +00:00
Alex Ionescu
f0af84da4e - MSVC Build Fixes
svn path=/trunk/; revision=23925
2006-09-06 12:19:00 +00:00
Magnus Olsen
173cb3c677 update it.rc languages translation by gabrielilardi at hotmail.it (Gabriel ilardi)
svn path=/trunk/; revision=23924
2006-09-05 20:46:24 +00:00
Saveliy Tretiakov
90759eb5a2 Call NtUserDrawCaption directly
svn path=/trunk/; revision=23923
2006-09-05 16:28:20 +00:00
Johannes Anderwald
4da1de7ca1 * msvc compiling fix
svn path=/trunk/; revision=23922
2006-09-05 10:14:40 +00:00
Brandon Turner
d6d0d40cad Implement CryptSignHashW based WINE and old CryptSignHashA. Change CryptSignHashA to call CryptSignHashW.
svn path=/trunk/; revision=23921
2006-09-04 22:51:28 +00:00
Hervé Poussineau
d5168c3b05 Allow allow lower case when being called
svn path=/trunk/; revision=23920
2006-09-04 22:16:43 +00:00
Hervé Poussineau
aa34958d1b Add a hack to enable formatting (was broken since at least r20156)
svn path=/trunk/; revision=23919
2006-09-04 21:58:38 +00:00
Johannes Anderwald
478f24b02b * use ConsoleInfo struct directly
* change type in global struct (avoid buffer overflow when reading value from registry)

svn path=/trunk/; revision=23918
2006-09-04 21:26:49 +00:00
Hervé Poussineau
94b07b79db Add ufat.dll, to be able to format drives to FAT and FAT32 format
svn path=/trunk/; revision=23917
2006-09-04 20:55:39 +00:00
Thomas Bluemel
7ed51f5c9e rename version.h to ver.h to avoid a possible conflict with include/reactos/version.h
svn path=/trunk/; revision=23916
2006-09-04 20:14:48 +00:00
Hervé Poussineau
90d5c19850 Remove Vfat(x)Initialize and Vfat(x)Cleanup which were empty
Remove vfatlib dependancy of fmifs.dll (Providers like ufat.dll are loaded dynamically at startup)

svn path=/trunk/; revision=23915
2006-09-04 19:27:19 +00:00
Hervé Poussineau
132cf4ece8 [FORMATTING] Add standard headers
Replace the mix of tabs/spaces by tabs
Replace STDCALL by NTAPI

svn path=/trunk/; revision=23914
2006-09-04 17:11:14 +00:00
Hervé Poussineau
4ba3312a81 Add prototypes for some fmifs.dll functions.
These have been found with trial and error on a MS Windows XP SP2 system with MS Visual Studio 2003

svn path=/trunk/; revision=23913
2006-09-04 16:46:13 +00:00
Hervé Poussineau
e094312326 Fix compilation of rosapps with gcc 3.4.5.
Thanks Gge on IRC

svn path=/trunk/; revision=23912
2006-09-04 16:29:00 +00:00
Johannes Anderwald
c12e6bbcba * move reading / applying options out of console.dll
* remove unused code
* notify win32csr when a property has changed

svn path=/trunk/; revision=23911
2006-09-04 13:13:42 +00:00
KJK::Hyperion
8ee7f4296b PSEH was based on clean-room reverse engineering (read: trial-and-error) and on the pre-existing work of Matt Pietrek, just like the exception handling code used in Wine. I, the author, declare it clean
svn path=/trunk/; revision=23910
2006-09-04 12:04:54 +00:00
James Tabor
ab4e2c9cf4 User32 bitmap.c:
- Patch by Michael Kaufmann
  - CopyImage: Handle the flags LR_COPYDELETEORG, LR_CREATEDIBSECTION, and LR_MONOCHROME.

svn path=/trunk/; revision=23906
2006-09-04 03:08:18 +00:00
James Tabor
76b17ae494 User32 combo.c:
- Patch by Dmitry Timoshkov
  - do not force repainting on WM_WINDOWPOSCHANGED in combobox, it
    breaks Z-order based painting.
  - do nothing in the combobox WM_ERASEBKGND handler do all painting in
    WM_PAINT like Windows does.


svn path=/trunk/; revision=23905
2006-09-04 03:03:14 +00:00
Magnus Olsen
09a8680165 Adding small hack to getting SetPixel color right when it is more that 3 bytes long.
This hack allown us pass one more test. (Debuging in progress)

svn path=/trunk/; revision=23904
2006-09-03 22:54:22 +00:00
Alex Ionescu
9fbb616938 - Final cleanup for now:
- main.c -> freeldr.c + cleanups and nice formatitng.
  - Move out variables that were in main.c to ex\init.c or cpu.c, depending.
  - Separate i386/kernel.c into i386/kiinit.c for X86-specific intiailization, and /krnlinit.c for portable initialization across all architectures. Also move out global variables appropriately.
  - main_asm.S -> cpu.S

svn path=/trunk/; revision=23903
2006-09-03 21:06:30 +00:00
Hervé Poussineau
00abb85d36 Reorder the file
Add some more defines/typdefs from Wine sspi.h
Fix a few typos

svn path=/trunk/; revision=23902
2006-09-03 21:02:09 +00:00
Alex Ionescu
c65323691c - Add Ke386SetInterruptDescriptorTable inlined function to set the IDT.
- Rename and fixup initial stacks, instead of using 16 different variables all with confusining meanings and values. Define P0BootStack as the initial kernel stack, and KiDoubleFaultStack as the double-fault trap (and initial DPC) stack.
- Fix call to KiInitializePcr which was setting an incorrect DPC stack.
- Make space on the initial stack for a KTRAP_FRAME as well, not only for the FPU save area.
- Also push initial CR0 NPX state on the initial stack.
- Load the IDT and GDT directly in KiRosPrepareForSystemStartup.
- Completely rewrite main_asm.S in Intel syntax and clean it up.

svn path=/trunk/; revision=23901
2006-09-03 19:57:55 +00:00
Aleksey Bragin
4eebe5e53f Add comptypeDIB definition to headers
svn path=/trunk/; revision=23900
2006-09-03 19:38:16 +00:00
Magnus Olsen
7fe1969532 Fixed one more bug, we did create wrong bpp if we got HDC = NULL for CreateDIBitmap, when I read wine code
it is always 1Bpp and 1Plans and we are doing same now if HDC is NULL, some wine test deepness on it. 
Hopply it will take care of some program problem. 

svn path=/trunk/; revision=23899
2006-09-03 18:16:08 +00:00
Alex Ionescu
c6f105da0b - Add Ke386SetFs, Ds, Es (using Ke386SetSeg) and Ke386SetTr new inlined commands.
- Also setup an NMI Task gate after the double fault task gate. Will be useful when we hand to handle NMIs later.
- Setup FS in KiSystemStartup and initialize the TSS before the PCR. Also add a bit more support for SMP systems (To skip boot-cpu-only initialization).
- Also setup DS/ES directly in KiSystemStartup.
- Initialize KD at phase 0 in KiSystemStartup, not in KiInitializeKernel, and also check for debug break at this time.

svn path=/trunk/; revision=23898
2006-09-03 17:18:08 +00:00
Hervé Poussineau
25090facc3 Allow setup to detect extended partitions
svn path=/trunk/; revision=23896
2006-09-03 12:32:15 +00:00
Alex Ionescu
d8155f97a7 - Remove LDT initialization, LDT shouldn't be initialized at bootup.
- Move LDT-only GDT routines to ldt.c
- Cleanup formatting of GDT-related exported function stubs in gdt.c and rename file to abios.c. Those routines deal specifically with the ABIOS GDT selectors and are for ABIOS support.
- Move the lone 2 routines in fpu.c to cpu.c.

svn path=/trunk/; revision=23895
2006-09-03 07:13:02 +00:00
Alex Ionescu
6b42f391e0 - Fix KTSS definition.
- Add GetSegment inlines (ie: GetSs, GetDs, etc)
- Fix up definition of KiBootGdt to use KGDTENTRY instead of USHORT. Also define KiGdtDescriptor using KDESCRIPTOR.
- Remove GDT initialization code completely. The GDT is already initialized on boot.
- Remove tss.c and add KiInitializeTss(2) to setup a TSS and proper IOPM/Interrupt Direction map settings for V86/VDM.
- Copy the TSS code over but prettyify it to use NT/NDK structures instead of ugly USHORT typecasts.

svn path=/trunk/; revision=23894
2006-09-03 06:51:03 +00:00
Magnus Olsen
00f50dd922 Fixed some more wine test for NtGdiGetDIBits
FIxed so we can now create BITMAPCOREHEADER bitmap (Bugs in NtGdiGetDIBits did stop create of it) 



svn path=/trunk/; revision=23892
2006-09-02 23:58:53 +00:00
Magnus Olsen
7aa07b393c 1. Copy DIB_GetBitmapInfo from wine cvs (date 2/9-2006)
2. Bugfix NtGdiGetDIBits the BITMAPCOREHEADER is not same as BITMAPINFOHEADER
   we now separate it in if(Bits==NULL) that will allow us pass two more wine tests
   follow winetest is working now 
   1. bitmap.c 227 Test failed: GetDIBits doesn't work with a BITMAPCOREHEADER 
   2. bitmap.c 233 GetDIBits doesn't work with a BITMAPCOREHEADER 
   both of them are fixed now 

svn path=/trunk/; revision=23891
2006-09-02 21:02:03 +00:00
Aleksey Bragin
7bfe48177c Separate Device Manager code (what was left from it in hub.c) from Hub code
svn path=/trunk/; revision=23890
2006-09-02 20:32:50 +00:00
Alex Ionescu
252a2d1598 - Part 2 of 2: Implement KiDispatchInterrupt in assembly since it's 1) Perf-critical 2) Requires us to switch the stack to the DPC stack, which is unsafe (and impossible, unless inlining) in C.
svn path=/trunk/; revision=23889
2006-09-02 19:53:24 +00:00
Alex Ionescu
0f9c7bdf03 - Part 1.5 of 2: Re-factor KiDispatchInterrupt to separate DPC delivery routine (so that it can stay in C, since KiDispatch should be done in ASM so we can switch stacks).
- Use interrupt enable/disable instead of raising to HIGH_LEVEL.
  - Better use and pairing of locks.
  - Fix a lot of race conditions in DPC dispatching, due to the fact almost all data we're touching is ultra-volatile and can change at any time depending on various locks being held/released + interrupt state.
  - Add stub code/support for tick-hased table-based timer implementation and deferred threads.

svn path=/trunk/; revision=23888
2006-09-02 19:12:31 +00:00
Alex Ionescu
7802140549 - Fix a bug in RtlFillMemory.
- Fix overlap check comments.

svn path=/trunk/; revision=23887
2006-09-02 16:36:48 +00:00
Alex Ionescu
38ca1d7d77 - Add missing volatile statements to KPROCESS, KTHREAD, KPRCB and KDPC_DATA.
- Fix KDPC definition in DDK. You can always count on the w32api to get even the simplest structures wrong.
- Fix memory overwrite bug in KiInitSpinlocks.
- Part 1 of 2: Cleanup and improve DPC implementation to add partial support for Threaded DPCs and remove SMP vs non-SMP ifdefs. (At the expense of, oh God, 5 wasted CPU cycles!).

svn path=/trunk/; revision=23886
2006-09-02 16:19:00 +00:00
Aleksey Bragin
ea0c0daec0 Add forgotten "xs-native.cpp" to the MSVC project of ROS Explorer
svn path=/trunk/; revision=23885
2006-09-02 11:27:36 +00:00
The Wine Synchronizer
99b4a1d7ee Autosyncing with Wine HEAD
svn path=/trunk/; revision=23883
2006-09-02 06:27:09 +00:00
The Wine Synchronizer
8dff62e1f8 Autosyncing with Wine HEAD
svn path=/trunk/; revision=23882
2006-09-02 06:24:20 +00:00
Alex Ionescu
aa69c69afb - Move machine-specific initializations to KeInit2.
- Initialize bugcheck messages much earlier, separate clock initialization from KeInit2.
- Completely move out and isolate ROS/FREELDR PE loading hacks to KiRosPrepareForSystemStartup so that KiSystemStartup is clean of them.

svn path=/trunk/; revision=23881
2006-09-02 05:10:16 +00:00
Alex Ionescu
ea01969067 - More Initialization changes:
- Initialize bugcheck lists, timer DPC, profile list/locks, timer lists, the swap lists and syscall table as part of KiInitSystem (portable).
   - Add more initialization for the initial/idle process+thread (some code disabled due to dispatcher problems).
   - Add code to support future Timer implementation (based on tick-hashes)
   - Separate post-boostrap initialization code in KiInitializeKernel.
   - Add some support for future SMP paths.
   - Create a DPC stack.
- Changes based on WI4 and my automated parsing tool.

svn path=/trunk/; revision=23880
2006-09-02 04:40:09 +00:00
Alex Ionescu
deed4ed0d6 - More kernel initialization changes and cleanups.
- Start support for an initial boot thread.

svn path=/trunk/; revision=23879
2006-09-02 02:59:44 +00:00
Thomas Bluemel
dbf97f3b50 Fix creating the console system menu items
svn path=/trunk/; revision=23878
2006-09-01 23:18:23 +00:00
Hervé Poussineau
c2d18fb0b6 Add softpub.h header
svn path=/trunk/; revision=23877
2006-09-01 23:06:32 +00:00
The Wine Synchronizer
abb022f081 Autosyncing with Wine HEAD
svn path=/trunk/; revision=23876
2006-09-01 22:47:57 +00:00
Hervé Poussineau
e1d577c47c Add a stub sensapi.dll. This is a step to fix bug 1751
svn path=/trunk/; revision=23875
2006-09-01 22:41:31 +00:00
Hervé Poussineau
43d85c0abc Add some error codes (taken from Wine)
svn path=/trunk/; revision=23874
2006-09-01 22:10:56 +00:00
Thomas Bluemel
00c354405e Don't call BeginPaint/EndPaint while processing a WM_DRAWITEM message
svn path=/trunk/; revision=23873
2006-09-01 21:53:31 +00:00
Thomas Bluemel
c474673ac7 disable code that dereferences a random pointer
svn path=/trunk/; revision=23871
2006-09-01 18:56:06 +00:00
Thomas Bluemel
13e3041822 Don't leak a reference in NtReleaseSemaphore() in case KeReleaseSemaphore() raises and exception
svn path=/trunk/; revision=23870
2006-09-01 18:41:00 +00:00
Thomas Bluemel
4a586b2eb2 remove superfluous dereference
svn path=/trunk/; revision=23869
2006-09-01 18:20:44 +00:00
Ged Murphy
61059050bb - Use a more generic print service
- don't assign a service name at the start as it causes problems when query(ex) doesn't supply one.
- Simplify the service starting code.
- Add missing options to the print type
- rewrite the querying functionality to be cleaner, and use existing code.
- remove the braces I left, used for collapsing dbg info

svn path=/trunk/; revision=23868
2006-09-01 16:55:36 +00:00
Eric Kohl
9e843c89fc Fix indentation, no code changes.
svn path=/trunk/; revision=23867
2006-09-01 15:49:50 +00:00
Alex Ionescu
a85e942346 - More initialization cleanup.
svn path=/trunk/; revision=23866
2006-09-01 13:13:08 +00:00
Hervé Poussineau
562f8391e8 Fix build when compilation units are enabled for usetup.c
svn path=/trunk/; revision=23865
2006-09-01 12:58:56 +00:00
Alex Ionescu
5244a29dad - Fix bugs in RtlCompareMemory, RtlCompareMemoryULong
svn path=/trunk/; revision=23864
2006-09-01 12:38:57 +00:00
Eric Kohl
6b8b0b56b2 Remove trailing whitespace
svn path=/trunk/; revision=23863
2006-09-01 11:16:32 +00:00
Hervé Poussineau
f05d1bb617 Fix option selection in bootcd
Fix SetupOpenFileQueue, SetupCloseFileQueue and SetupCommitFileQueueW prototypes to match setupapi.dll ones

svn path=/trunk/; revision=23862
2006-09-01 09:53:33 +00:00
Alex Ionescu
30f4d83978 - Add back defines accidentaly removed.
svn path=/trunk/; revision=23854
2006-09-01 03:19:25 +00:00
Alex Ionescu
ad9fdb1ae3 - Fix bug in RtlZero, Fill, Move memory where the last 1-3 bytes weren't being copied.
svn path=/trunk/; revision=23853
2006-09-01 03:15:32 +00:00
Alex Ionescu
369f93b984 - Multiple changes to low-level Kernel initalization sequence to bring it a bit closer to Windows.
- Main difference is new CPU detection algorithms for ID, cache, etc, as well as using KF_ Kernel Feature bits instead of x86 CPU features (For portability).
- Also many many other cleanups and re-sequencing.

svn path=/trunk/; revision=23852
2006-09-01 03:05:30 +00:00
Ged Murphy
3c411c196d forgot to turn debugging off
svn path=/trunk/; revision=23850
2006-08-31 22:51:28 +00:00
Alex Ionescu
01081d279e - Some cleanups
- Add support for recovering from user-mode win32k callback fault.
- Also add support for debug register saving/reloading during user-mode callbacks and return.

svn path=/trunk/; revision=23849
2006-08-31 18:10:11 +00:00
Ged Murphy
158e4c116a first commit of an overhaul of sc.exe
- establish a connection to the SCM for each separate request, allowing the minimum privlidges required, instead of a generic (over privlidged) one.
- start to move service printing to separate functions and reduce code duplication
- make output 100% as per Windows
- fix some commands, e.g. 'interrogate'
- improve error checking
- improve code structure

svn path=/trunk/; revision=23848
2006-08-31 17:59:02 +00:00
Eric Kohl
8537a75fba Pass additional arguments to a service when it is started by a call to StartService.
svn path=/trunk/; revision=23846
2006-08-31 17:16:19 +00:00
Alex Ionescu
5a633f8fc9 - Remove some deprecated code and custom ROS exports/code.
svn path=/trunk/; revision=23845
2006-08-31 17:10:58 +00:00
Thomas Bluemel
87ab1c53a7 Add stubs for the condition variable functions
svn path=/trunk/; revision=23844
2006-08-31 16:56:49 +00:00
Aleksey Bragin
26b82125e5 Change a very ugly done DbgPrint() function to a good implementation. Now Freeldr shows all DPRINTs from e.g. cmlib correctly.
svn path=/trunk/; revision=23843
2006-08-31 16:08:17 +00:00
Aleksey Bragin
5cd8b68023 Sylvain Petreolle: Partly fix unicode build of cmd (a typo)
svn path=/trunk/; revision=23842
2006-08-31 14:14:42 +00:00
Hervé Poussineau
02d5b53e84 Add ATTACH_PARENT_PROCESS constant
svn path=/trunk/; revision=23841
2006-08-31 14:11:33 +00:00
Hervé Poussineau
1ebc320243 Remove some code duplication when calling PopupError
Add ConAttachConsole stub

svn path=/trunk/; revision=23840
2006-08-31 12:35:39 +00:00
Hervé Poussineau
8b597b0970 Fix build for Linux people, where gcc claims that it doesn't support I64 for printf. Thanks Usurp on IRC
svn path=/trunk/; revision=23839
2006-08-31 12:31:34 +00:00
Hervé Poussineau
ed70ab7f26 Fix Linux build (filename case problem...) Thanks gregj on IRC
svn path=/trunk/; revision=23837
2006-08-31 11:09:05 +00:00
Hervé Poussineau
cc2684d474 Cleanup in .inf file handling of usetup:
- Equivalent setupapi functions have the same protoype as in Win32 API
- Extra functions have the INF_* prefix

svn path=/trunk/; revision=23836
2006-08-31 09:13:03 +00:00
Hervé Poussineau
f52bca045b Clean up console functions in usetup. We now have 2 categories:
- The same functions as in Win32 Console API, prefixed with Con
- The helpers (which call Con* functions) prefixed with CONSOLE_
Do according changes in other files

svn path=/trunk/; revision=23834
2006-08-31 06:14:25 +00:00
Alex Ionescu
e870b20916 - Don't do fast system calls with the wrong DS/ES selectors.
- Properly load DS/ES on system startup and GDT load
- Use proper DS/ES during deprecated IRQ handling.
- Always use GS as 0 for all of the above.
- *FINALLY* fixes the oldest bug there ever was -> DS/ES corruption noticed in VMWare (And recently in QEMU+KERNELKQEMU, since it behaves internally like vmware). Hacks in trap code have FINALLY been removed!

svn path=/trunk/; revision=23833
2006-08-31 05:25:58 +00:00
Alex Ionescu
d2ba2fdc17 - Implement more parts of the GPF Handler.
- Add support for lazy loading.
- QEMU + -kernel-qemu seems to work now.
- Hack away the Win32k bug that's been there for ages (copy to user-mode from kernel-mode failing due to probe due to incorrect previous mode). It's not the right fix, but nobody seems to be willing to fix it, and it doesn't make anything less stable, sicne the actually copy is in SEH anyway. It opens a security vuln. (wow, not like we have 15000) in exchange for fixing dozens of win32k bugs and failures.

svn path=/trunk/; revision=23832
2006-08-31 04:10:33 +00:00
Pablo Borobia
e82f58c755 Testing commit
svn path=/trunk/; revision=23831
2006-08-31 03:12:14 +00:00
Alex Ionescu
e4e58dde50 - Write new, optimized, small, working and clean functions (fixes booting, last few commits broke it for me):
- RtlCompareMemory
    - RtlCompareMemoryUlong
    - RtlFillMemory
    - RtlFillMemoryUlong
    - RtlFillMemoryUlongUlong
    - RtlMoveMemory
    - RtlZeroMemory
    - RtlPrefetchMemoryNonTemporal
    - RtlUshortByteSwap
    - RtlUlongByteSwap
    - RtlUlonglongByteSwap

svn path=/trunk/; revision=23830
2006-08-31 01:20:55 +00:00
Thomas Bluemel
5b8d955fb7 Fix difference in signedness warnings
svn path=/trunk/; revision=23829
2006-08-30 21:47:38 +00:00
Thomas Bluemel
1fcf9ceba0 Use the new ProbeForWriteIoStatusBlock macro
svn path=/trunk/; revision=23828
2006-08-30 21:45:17 +00:00
Thomas Bluemel
176e324621 - Fix some probing macros
- Add probing macros for IO_STATUS_BLOCK structures
- Added two inline functions ProbeArrayForRead() and ProbeArrayForWrite(), mainly for use in win32k as they also check for integer overflows.

svn path=/trunk/; revision=23827
2006-08-30 21:44:12 +00:00
Magnus Olsen
0d6e03c305 Wrote RtlUshotByteSwap RtlUlongByteSwap and RtlUlonglongByteSwap to asm code.
but we need a C api for header to linking it right. Put the asm version to i386 

svn path=/trunk/; revision=23826
2006-08-30 21:17:53 +00:00
Thomas Bluemel
73120d4d50 Revert r23824. This needs to go into the clipboard branch for now.
svn path=/trunk/; revision=23825
2006-08-30 20:59:32 +00:00
Pablo Borobia
0effbf25dc * added GetLayout definition
* added Clipboards definitions
* added GetLastInputInfo definition

svn path=/trunk/; revision=23824
2006-08-30 20:56:17 +00:00
Thomas Bluemel
a65807043a Revert r23810, r23811, r23813. The clipboard changes are in the clipboard branch for now.
svn path=/trunk/; revision=23823
2006-08-30 20:40:07 +00:00
Hervé Poussineau
15d6307da5 mpr.dll can now be autosynced with Wine
svn path=/trunk/; revision=23822
2006-08-30 20:37:56 +00:00
Ged Murphy
08ecb38f3b update msi wine regtest
svn path=/trunk/; revision=23821
2006-08-30 20:37:49 +00:00
Ged Murphy
0ce8d02acc update comctl32 winetest
svn path=/trunk/; revision=23818
2006-08-30 20:28:33 +00:00
Hervé Poussineau
42b655b8f9 avifil32.dll can now be autosynced with Wine
svn path=/trunk/; revision=23816
2006-08-30 20:16:11 +00:00
Hervé Poussineau
85bfb7d006 wineimport.cmd (>= r23814) is now able to handle msi.dll autosync. Mark it as such.
svn path=/trunk/; revision=23815
2006-08-30 20:01:42 +00:00
Pablo Borobia
fc86ed2df2 * Added more clipboard regression tests
svn path=/trunk/; revision=23813
2006-08-30 19:46:40 +00:00
Hervé Poussineau
4c7a515ebc Add msi_ros.diff
svn path=/trunk/; revision=23812
2006-08-30 19:41:09 +00:00
Pablo Borobia
38bee199b7 shel32.dll part:
* Clipboard implemtation in win32k and user32
* Added a clipboard system for each Window Station
* GetLastInputInfo implementation
* GetLayout in win32k Stubs
* Shell32 changes to cut/copy & paste link/paste
* Implemented ALT+PrintScreen to clipboard

svn path=/trunk/; revision=23811
2006-08-30 19:35:54 +00:00
Pablo Borobia
5a624910f1 user32.dll part:
* Clipboard implemtation in win32k and user32
* Added a clipboard system for each Window Station
* GetLastInputInfo implementation
* GetLayout in win32k Stubs
* Shell32 changes to cut/copy & paste link/paste
* Implemented ALT+PrintScreen to clipboard

svn path=/trunk/; revision=23810
2006-08-30 19:35:22 +00:00
Alex Ionescu
3d10f77c92 - It should now be safe to remove the V86 ESP0 hack, since V86 mode works fine (tested on VMWare/QEmu).
svn path=/trunk/; revision=23809
2006-08-30 19:29:16 +00:00
Hervé Poussineau
21aef1a7a7 Update MSI to current Wine version.
Autosync will be put in place very soon for this dll.

svn path=/trunk/; revision=23808
2006-08-30 19:24:26 +00:00
Ged Murphy
6d52441d10 [WINESYNC]
update comctl32 to Wine_0.9.20

svn path=/trunk/; revision=23807
2006-08-30 19:18:49 +00:00
Thomas Bluemel
900bf1a753 Implement Slim Reader/Writer (SRW) locks:
- Implement AcquireSRWLockExclusive(), AcquireSRWLockShared(), InitializeSRWLock(), ReleaseSRWLockExclusive(), ReleaseSRWLockShared()
- NOTE: Some versions of GCC have a code generation bug with specially aligned structures on the stack. If compiled with such a compiler, the code might trigger special assertions. Pushlocks are also affected by this compiler bug.
- NOTE: The algorithms are most likely not the same as in Windows. Applications are supposed to treat the lock variables as opaque data, therefore it shouldn't matter.

svn path=/trunk/; revision=23806
2006-08-30 19:02:42 +00:00
Hervé Poussineau
538082297d Fix MsiGetFeatureStateA/W and MsiGetComponentStateA/W prototypes
svn path=/trunk/; revision=23805
2006-08-30 18:08:21 +00:00
Magnus Olsen
ec839eb8e2 Kill inline asm code compete in RtlUlongByteSwap for it doing swap wrong.
we go back using the C version. Thanks Fireball  

svn path=/trunk/; revision=23804
2006-08-30 17:51:36 +00:00
Alex Ionescu
7ea78797f2 - Fix KeRaiseUserException (can't use "return" from SEH_HANDLE).
svn path=/trunk/; revision=23803
2006-08-30 17:01:58 +00:00
Alex Ionescu
5fc996c43e - Some fixes to KiDispatchException: Add support for forwarding exception back to user-mode, protect against V86 or invalid-stack faults, handle stack overflow exception while handling usermode exception (Thanks KJK for the SEH_FILTER help). Decrement EIP by one when hitting an INT3, to get the correct address.
- Remove two associated kernel fun entries.

svn path=/trunk/; revision=23802
2006-08-30 16:58:12 +00:00
Eric Kohl
99e4b3809f - fix indentation and remove trailing whitespace
- StartServiceA/W: terminate argument buffer with a double zero.

svn path=/trunk/; revision=23801
2006-08-30 10:53:37 +00:00
Hervé Poussineau
a301256472 Add missing includes in .rc file
Sort them in alphabetical order

svn path=/trunk/; revision=23800
2006-08-30 10:40:59 +00:00
Magnus Olsen
0b5c566337 Implement RtlRandomEx by copy RtlRandom code.
ms have two different implement, One random is faster that other, (in some doc I read (maybe from osr) some year ago),  the RtlRandomEx  is not document in the free ddk/sdk, but it is include in ddk/ifs kit, according the doc. 

svn path=/trunk/; revision=23799
2006-08-30 10:13:01 +00:00
Johannes Anderwald
5a487c19e7 * remove useless cast
svn path=/trunk/; revision=23798
2006-08-30 09:45:08 +00:00
Johannes Anderwald
29b76a30a2 - fix definition of FONTENUMPROC
svn path=/trunk/; revision=23797
2006-08-30 09:17:47 +00:00
Alex Ionescu
841fa5cc41 - Update kernel fun.
svn path=/trunk/; revision=23796
2006-08-30 06:56:06 +00:00
Alex Ionescu
1b0f8e7e81 - Implement RtlCaptureStackBackTrace and RtlWalkFrameChain and add definitions to ntifs.h
- Get rid of KeRosGetStackFrames and replace usage by RtlWalkFrameChain or RtlCaptureStackBackTrace, depending.
- Remove this entry from Kernel Fun.

svn path=/trunk/; revision=23795
2006-08-30 06:52:10 +00:00
Alex Ionescu
a9bb1c6668 - Add about two dozen new bugcheck codes and strings.
- Major cleanup of exp.c to move out deprecated and old code.
- Use KdDebuggerNotPresent to determine if KDBG is there or not. KdDebuggerEnable is now set whenever booting with debugging -- even if only serial port or screen debugging.
- Complete cleanup and major rewrite/improvement of bugcheck code:
  - Moved stack dump routines to bug.c and cleaned them up. Next step is to remove most of them and implement them properly as part of RtlCaptureStackBackTrace and RtlWalkFrameChain.
  - Use InbvDisplayString for everything now. BSODs will only truly show on screen. (however, part of the KeBugCheckWithTf improvements, a special "if debugger enabled" BSOD will also be displayed for debugging purposes).
  - Do checksum calculation in bugcheck callbacks.
  - Detect and display which drivers belong to which EIP.
  - Implemented code to select the proper verbose BSOD message depending on the bug check code.
  - Also implemented code to detect a variety of "known" bug check codes and to recover more data on them, and/or modify them accordingly. Sadly ROS doesn't yet make use of most of these codes.
  - Factored out and split some code into individual routines.
  - Look and functionality is now identical to Windows XP.
  - Stack trace will only be shown if KDBG isn't connected. If KDBG is connected you can do "bt" anyway (which is more powerful).

svn path=/trunk/; revision=23794
2006-08-30 05:22:56 +00:00
Alex Ionescu
655e78f3cc - Jesus Christ... will Hell freeze over before someone finally listens and implements a proper PE loader in Freeloader?
svn path=/trunk/; revision=23793
2006-08-30 01:22:41 +00:00
Hervé Poussineau
ab77204ef9 Implement RegNtPreEnumerateValueKey/RegNtPostEnumerateValueKey registry callbacks.
Add missing callbacks in some paths
Fix a few typos

svn path=/trunk/; revision=23792
2006-08-29 23:01:52 +00:00
Brandon Turner
7b27e1c573 Better rand() implementation. This should fix the problem where you get 0 every time you use rand()
svn path=/trunk/; revision=23791
2006-08-29 22:27:48 +00:00
Magnus Olsen
0a5a03e8d1 found more inline asm.
1. move all inline asm to folder i386
2. to do : seh.s should be rewrites to intel syntax 
3. to do : almost all c files in folders i386 need be convert to true asm instead using inline asm 
4. add dection for x86 arch in rbuild for each found I have done 


svn path=/trunk/; revision=23790
2006-08-29 19:14:18 +00:00
Magnus Olsen
d43aed9f5c Audult : code is from djgpp most of it, ReactOS own code is like two line long
svn path=/trunk/; revision=23789
2006-08-29 19:10:12 +00:00
Magnus Olsen
f4b5816b23 [Audut] clean, after locking at the header I can see clear they comes from wine/djgpp with small changes in some headers that is ros specify.
svn path=/trunk/; revision=23788
2006-08-29 18:31:06 +00:00
Magnus Olsen
40e426cce5 Detect i386 asm code for setjump (we only have one asm version I add arch dections for it in rbuild
svn path=/trunk/; revision=23787
2006-08-29 18:03:24 +00:00
Magnus Olsen
3c0cd4da37 1. Rewote atan.c to pure asm
2. Rewote log10 to pure asm
3. Delete unuse c/asm files like ceil, cos, fabs, flor, sin, sqrt, and tan 
4. Switch to rtl asm version of pow 
5. Follow need be convert to asm atan2, exp, fmod, ldexp
6. Follow need c version  atan2, exp, fmod, ldexp, atan, log10, pow
7. Add i386 arch dections in rbuild for asm/inline asm so we using only i386 asm on x86 cpu 
 

svn path=/trunk/; revision=23784
2006-08-29 17:51:13 +00:00
Alex Ionescu
8453270af7 - Implement GetSideSidFromToken. Patch by Grzegorz Jaśkiewicz.
svn path=/trunk/; revision=23781
2006-08-29 15:22:53 +00:00
Magnus Olsen
ae4f64c515 Copied remotely
svn path=/trunk/; revision=23780
2006-08-29 15:08:14 +00:00
Magnus Olsen
cbab61db9c Copied remotely
svn path=/trunk/; revision=23779
2006-08-29 15:08:10 +00:00
Magnus Olsen
2a1e87e35e Copied remotely
svn path=/trunk/; revision=23778
2006-08-29 15:08:01 +00:00
Magnus Olsen
99dfca5a2c Copied remotely
svn path=/trunk/; revision=23777
2006-08-29 15:07:57 +00:00
Magnus Olsen
aff35f6703 Copied remotely
svn path=/trunk/; revision=23776
2006-08-29 15:05:07 +00:00
Magnus Olsen
ec9e57b10e Copied remotely
svn path=/trunk/; revision=23775
2006-08-29 15:04:58 +00:00
Magnus Olsen
261a9da3bd Copied remotely
svn path=/trunk/; revision=23774
2006-08-29 15:03:41 +00:00
Magnus Olsen
9f6a6f34c0 Copied remotely ceil from rtl to crt/math/i386
svn path=/trunk/; revision=23773
2006-08-29 15:02:41 +00:00
Magnus Olsen
2934b1b61e Created folder remotely
here we prepare copy asm version of math api from rtl asm version

svn path=/trunk/; revision=23772
2006-08-29 15:01:19 +00:00
Magnus Olsen
a260e8be5d add back change long to long_ptr change did not think about it was correct thx hpussin
svn path=/trunk/; revision=23771
2006-08-29 14:25:55 +00:00
Magnus Olsen
eda0d576b0 revert 23768 for this member does not exists in psdk or ddk in windows.
and that reason is it wrong. I told the author of the patch on the irc 
this changes was wrong. 

svn path=/trunk/; revision=23770
2006-08-29 14:13:42 +00:00
Christoph von Wittich
3a3cd44034 fix indentation
svn path=/trunk/; revision=23769
2006-08-29 13:01:47 +00:00
Hervé Poussineau
4b05210f15 Add some missing SIDs. Fix bug 1772.
See http://www.msfn.org/board/lofiversion/index.php/t43597.html for the list of authorities

svn path=/trunk/; revision=23768
2006-08-29 11:27:50 +00:00
Hervé Poussineau
f4763c0ce0 Fix bug 1770. Patch by Grzegorz Jaskiewicz
svn path=/trunk/; revision=23767
2006-08-29 11:02:08 +00:00
Magnus Olsen
2cac0acc13 put in if define i386 for asm version of cos, sin, atan2, floor, ceil we do not have a C version of those commands in rbuild file
svn path=/trunk/; revision=23766
2006-08-29 08:28:50 +00:00
Alex Ionescu
28122cd8d9 - Complete and utter reimplementation of V86 Mode for Ke386CallBios. Details below. Tested on QEMU/VMWARE. May give you a breakpoint/crash on real hardware - please let me know the V86 opcode displayed on the debug log/screen if this is the case *if you see such a message*.
- Got rid of all the previous related assembly code and implemented Ki386SetupAndExitToV86Mode and Ki386BiosCallREturnAddress.
- Implemented GPF (Trap 13) code for V86 faults (which will happen in V86 mode). Implement a generic Ki386HandleOpcodeV86 handler that increments counts and calls the right opcode handler.
- Implemented an Opcode Table Entry Index and Opcode Table array for mapping opcodes that caused a GPF to their V86 handlers/emulators.
- Implemented handlers for PUSHF, POPF, CLI, STI, IRETD and INTnn, which is what QEMU/VMWare and *most* VIDEO ROM BIOS code should use.
- Created a /vdm tree and moved all NTVDM/VDM specific code there.
- Halfplemented VdmStart/EndExecution APIs which the BIOS ROM V86 implementation is built upon. Currently don't handle VDM at all, only this V86 mode.
- Also added code for NtVdmControl and fixed up CSRSS and ACPI's calls to this API.
- Added detection and FIXMEs for support of VMEs in VMWare, Bochs and real hardware (VME is not yet supported).
- Move exp.c fixmes to krnlfun and remove kernel fun entries that this patch fixes.

svn path=/trunk/; revision=23763
2006-08-28 23:56:35 +00:00
Alex Ionescu
9d1c606794 [AUDIT] - Our CSRSS implementation is too different and incompatible for NT to have possibly been done through non-clean methods. Clean methods were probably not even used, except for reading documentation, since most of the code seems to be based on guesses and original implementations. (As a simple example, NT's CSRSS is 4kb, with all actions done by a server DLL. ROS has none of this).
svn path=/trunk/; revision=23762
2006-08-28 23:55:50 +00:00
Thomas Bluemel
d5f1f3ceca Move the __ALIGNED attribute to the correct position in the definition of EX_PUSH_LOCK_WAIT_BLOCK
svn path=/trunk/; revision=23761
2006-08-28 20:20:03 +00:00
Ged Murphy
96ff7d566c couple of minor fixes.
svn path=/trunk/; revision=23760
2006-08-28 19:33:28 +00:00
Thomas Bluemel
ca9ef93e32 "Fix" using an uninitialized variable (line 950) in lines 1334-1337. Yes I'm back, for now!
svn path=/trunk/; revision=23759
2006-08-28 18:15:46 +00:00
Johannes Anderwald
6e015da993 * fix another typo :-)
svn path=/trunk/; revision=23758
2006-08-28 07:13:40 +00:00
Magnus Olsen
c8385edeec fixing the spelling english spelling thanks mifritscher to notice it.
svn path=/trunk/; revision=23757
2006-08-27 22:20:33 +00:00
Magnus Olsen
18adfbcd79 Commit one part from big patch from Pablo Borobia (pborobia at gmail dot com) he is done the clipboard project
1. implement detail show for network. 

Magnus Olsen (me) aka GreatLord
I did review ncpa changes, he did only forget free the memory when detail propers was exit. I set erly style on file
that was not set. I also update most .rc so they contain the english res text. please translators translate this. 



svn path=/trunk/; revision=23756
2006-08-27 21:44:53 +00:00
Hervé Poussineau
becdf59777 Add French and Bengali resources to build
Sort files by alphabetical order

svn path=/trunk/; revision=23755
2006-08-27 20:56:34 +00:00
Hervé Poussineau
ffc884d4ca Add guard to prevent multiple inclusions (not used yet)
svn path=/trunk/; revision=23754
2006-08-27 20:23:26 +00:00
Johannes Anderwald
a5d8d20855 * improve error checking (by hpoussin)
* use correct CLSID -> now auto-start apps from %ALLUSERSPROFILE% can be started too

svn path=/trunk/; revision=23753
2006-08-27 20:01:14 +00:00
Johannes Anderwald
fbfe8c9245 * auto-start apps in autostart folder
* currently only works for current user
* SHGetFolderPathW CSIDL_ALTSTARTUP fails (All Users\...)

svn path=/trunk/; revision=23752
2006-08-27 19:22:48 +00:00
Christoph von Wittich
d3112a4a86 added vdmdbg.dll to bootcd
svn path=/trunk/; revision=23751
2006-08-27 19:08:20 +00:00
Johannes Anderwald
a80ab420d2 * fix warning
* set svn-eol-style native

svn path=/trunk/; revision=23750
2006-08-27 18:14:53 +00:00
Magnus Olsen
1a375085e9 reapplay rev 23614, it we have now russain letters and other contrus special letters.
The bug I experis before was reletate to ntoslnrl and is complete gone. I have now reboot and boot around 10-20 times
and run same program. But we see all unicode -> ansi problem with this change if u select russan in reactos 

svn path=/trunk/; revision=23749
2006-08-27 16:51:11 +00:00
Hervé Poussineau
43eef84aa9 Set user locale at login. User interface may now be (again) in other languages than English
svn path=/trunk/; revision=23747
2006-08-27 15:18:20 +00:00
Magnus Olsen
217e03e8e8 sorry wrong version
svn path=/trunk/; revision=23746
2006-08-27 14:55:31 +00:00
Magnus Olsen
a962c1d8c0 fix a crash in quake
svn path=/trunk/; revision=23745
2006-08-27 14:53:32 +00:00
Christoph von Wittich
0d7f6179b7 forgot to commit these files
svn path=/trunk/; revision=23744
2006-08-27 14:20:17 +00:00
Christoph von Wittich
5a6172f875 added LiveCDRegTest and BootCDRegTest targets
svn path=/trunk/; revision=23743
2006-08-27 13:28:23 +00:00
Christoph von Wittich
454bef01db renamed isoboot_regtest.asm to isobtrt.asm to comply with ISO-9660 standard
svn path=/trunk/; revision=23742
2006-08-27 13:26:43 +00:00
Klemens Friedl
b32b0a47c8 samba-tng: update the description
svn path=/trunk/; revision=23741
2006-08-27 12:28:22 +00:00
Christoph von Wittich
ec61eadeca * added bootloader which can be used for automated regression tests using buildbot
svn path=/trunk/; revision=23740
2006-08-27 11:59:01 +00:00
Christoph von Wittich
1424ff8a8c added GetSiteSidFromToken stub
svn path=/trunk/; revision=23739
2006-08-27 11:44:21 +00:00
Johannes Anderwald
c71c15d905 * make edit controls look standard
* GeT rId oF aNNoyIng DOt In EdiT cONtROl

svn path=/trunk/; revision=23738
2006-08-27 10:28:05 +00:00
Johannes Anderwald
8895520e58 * store static colors in global struct to make it thread-safe
svn path=/trunk/; revision=23737
2006-08-27 09:50:29 +00:00
Johannes Anderwald
adcaf80140 * auto-select correct radio button
* only repaint required on up/down notifications events

svn path=/trunk/; revision=23736
2006-08-27 09:42:16 +00:00
Johannes Anderwald
7a535d12d5 * dont code during night :-))))
svn path=/trunk/; revision=23735
2006-08-27 00:51:43 +00:00
Johannes Anderwald
f8feed90ce * optimize a few code paths
* add error checking in various places
* implement painting console image

svn path=/trunk/; revision=23734
2006-08-27 00:46:50 +00:00
Magnus Olsen
ab519c08f9 forget commit rbuild file for win32k
svn path=/trunk/; revision=23733
2006-08-26 23:27:49 +00:00
Magnus Olsen
6518b5361d for 24bpp
1. Remove inline asm for hline and implement a asm version of it in intel syntax. 
   (optimzeing of this version can be done better, but it for be done for now)
2. set eorly style on file I forget. 



svn path=/trunk/; revision=23732
2006-08-26 23:26:39 +00:00
Aleksey Bragin
c5edc7e6d3 - Typecast a param so that it doesn't give an error in gcc
- Make cmlib compilable as a makefile target "cmlib_host" (needed for linking with mkhive)

svn path=/trunk/; revision=23731
2006-08-26 21:19:34 +00:00
Magnus Olsen
1a6675e3d7 fpr 32bpp
1. Remove inline asm from hline and convert it to own asm file with intel syntax. 
2. Reimplement colorfill inline asm version and convert it to own asm file with intel syntax. 
   the asm code can be optimze bit more. But for done 

svn path=/trunk/; revision=23730
2006-08-26 21:18:33 +00:00
Aleksey Bragin
2857ff8136 Add testsets to building process too, so that they don't bitrot (compile time is neglectable)
svn path=/trunk/; revision=23729
2006-08-26 21:11:08 +00:00
Aleksey Bragin
0e407eb6b4 Don't crash during disconnection if a device doesn't have a driver
svn path=/trunk/; revision=23728
2006-08-26 21:09:11 +00:00
Aleksey Bragin
f0549011c0 Dmitry Philippov:
- Implement RTL_QUERY_REGISTRY_DELETE (which simply deletes the key after querying)
 - Fix REG_MULTI_SZ to actually walk through the whole data, not stopping at the first encountered 0 character. This makes the "ntdll_winetest.exe reg" test behave exactly as on Windows XP

svn path=/trunk/; revision=23727
2006-08-26 20:45:30 +00:00
Magnus Olsen
32a1a90cc7 fix a typo
svn path=/trunk/; revision=23726
2006-08-26 19:44:47 +00:00
Magnus Olsen
f73c521e7e adding 640x480x32, 800x600x32, 1024x768x32 select for vbe. accoding to VBE 2.0 spec this mode shall always be while for graphic card with vbe 2.0 or higher.
svn path=/trunk/; revision=23725
2006-08-26 19:40:24 +00:00
Klemens Friedl
b5e0a940b1 add samba-tng to the packmgr repo
svn path=/trunk/; revision=23724
2006-08-26 18:43:44 +00:00
Alex Ionescu
c5c008ec96 - Even though in assembly we return the BOOLEAN in all of EAX, HalBeginSystemInterrupt should, in theory, only use AL and we shouldn't make assumptions about any other bits. So chang ethe code to or al, al, instead of or eax, eax.
svn path=/trunk/; revision=23723
2006-08-26 16:23:59 +00:00
Alex Ionescu
1db10cc5ad - Remove useless stack operations in KiInterruptDispatch that I used for debugging.
svn path=/trunk/; revision=23722
2006-08-26 16:07:31 +00:00
Alex Ionescu
3213baa7ae - Fix some bugs in KiChainedDispatch.
svn path=/trunk/; revision=23721
2006-08-26 16:04:29 +00:00
Alex Ionescu
9e78b36f2e - Fix a bug during exceptions, thanks to W3seek, nice find.
svn path=/trunk/; revision=23720
2006-08-26 15:40:27 +00:00
Magnus Olsen
0e96db4bf5 bug 1769 : from w3seek : Implement some new functions
svn path=/trunk/; revision=23719
2006-08-26 14:28:34 +00:00
Johannes Anderwald
b4e91152db * show selected static control via DrawFocusRect
svn path=/trunk/; revision=23718
2006-08-26 13:43:15 +00:00
Magnus Olsen
a7216d7b12 do right typecast for ReadFile so it compiles on gcc 4.x
svn path=/trunk/; revision=23717
2006-08-26 10:01:03 +00:00
Magnus Olsen
def45d4b5a fixed one waring that thomas got with gcc 4.x
svn path=/trunk/; revision=23716
2006-08-26 09:57:38 +00:00
Hervé Poussineau
916f69a7cb Fix a missing referencing in PsImpersonateClient (dereferenced in PsRevertThreadToSelf)
PspWriteTebImpersonationInfo may be used to set or to clear impersonation info => remove an extra assignment

svn path=/trunk/; revision=23715
2006-08-26 08:46:18 +00:00
Alex Ionescu
617e78ebf0 - Transform TRAP_PROLOG into a GAS macro.
- Remove code in the page fault handler which was corrupting the trap frame.
- Remove some ROS hacks that dealt with the fact the trap frame was getting corrupted, since now it isn't anymore.
- Enable code that checks for Teb->GdiBatchCount during win32k system calls. The bugs that were mentionned in the #if 0 are fixed.

svn path=/trunk/; revision=23714
2006-08-26 06:14:32 +00:00
Brandon Turner
9f5f1ce315 * Implement: /low, /normal, /high, /realtime, /belownormal, and /abovenormal
* Correctly build the string used to create the process.

svn path=/trunk/; revision=23713
2006-08-25 23:12:50 +00:00
Hervé Poussineau
ec5899ca4f Implement IOCTL_SERIAL_WAIT_ON_MASK
Better implementation of IOCTL_SERIAL_SET_WAIT_MASK
Remove "Serial:" prefix on debug output

svn path=/trunk/; revision=23712
2006-08-25 22:07:10 +00:00
Alex Ionescu
3c97814afe - Hervé est un Dieu qui mérite une infinité de bières et de femmes vierges (et nues).
- This should fix booting on VMWare.

svn path=/trunk/; revision=23711
2006-08-25 20:18:34 +00:00
Magnus Olsen
bf4ff7bb94 forget this file thx christ
svn path=/trunk/; revision=23710
2006-08-25 18:26:26 +00:00
Magnus Olsen
87b9d209fd Add frist version of ReactOS net command. I finish frist step early that I calc, you need samba-tng rpcclient to use net command in your path. net command only support follow command "net start, net start serivce_display name, net stop", more will follow later.
The help text I need some help with to fill in the info how thuse command work and design the help text better. 
 


svn path=/trunk/; revision=23709
2006-08-25 17:50:26 +00:00
Hervé Poussineau
10782a0cfa Add an assert in IntEngCreateXlate
svn path=/trunk/; revision=23708
2006-08-25 15:49:31 +00:00
Alex Ionescu
397f1f88d2 - Viva la deprecation! Trunk should now boot and the installer should work.
- Basically revert the new HAL/KERNEL IRQ code by putting the old one in, but without the actual pain of svn reverting and losing all the previous code.
- The old code goes in ntoskrnl\deprecated, and we only add a comment to the .rbuild file, re-export an old function, and initialize the old code in kernel.c. All the other kernel changes stay in-place to be tested.
- Same for hal, basically replace irq.S with irql.c in the .rbuild file, and disable the call to Halpinit1. All the other changes remain.

svn path=/trunk/; revision=23707
2006-08-25 14:50:01 +00:00
Alex Ionescu
bb00cadd67 - Fix some bugs
svn path=/trunk/; revision=23706
2006-08-25 14:15:11 +00:00
Aleksey Bragin
3f4b7e4705 - Enable PIRQ when initializing UHCI, this solves the "no irq" problem on some UHC controllers (most popular type of such controller is the one emulated by VMWare)
- Fix a mistake in the source code resulting in a bugcheck
- Add _X86 to .rbuild (by Thomas)

svn path=/trunk/; revision=23705
2006-08-25 13:20:13 +00:00
Johannes Anderwald
50746a376e * share common painting code
* align static control in same way

svn path=/trunk/; revision=23704
2006-08-25 12:19:42 +00:00
Ged Murphy
a6c41b9d22 delete old dir
svn path=/trunk/; revision=23703
2006-08-25 10:12:28 +00:00
Ged Murphy
7adefa6232 move uptime to rosapps so Alex doesn't blow up into teeny weeny pieces ;)
svn path=/trunk/; revision=23702
2006-08-25 10:11:57 +00:00
Alex Ionescu
387c84f0f5 - Add some debugging code to see why trap frames are screwed up.
svn path=/trunk/; revision=23701
2006-08-25 04:11:45 +00:00
Alex Ionescu
38a0558e07 - We do not speak about the v86 hack.
- This should fix the V86 GPF error.

svn path=/trunk/; revision=23700
2006-08-25 02:23:47 +00:00
Alex Ionescu
b23894894d - Get rid of some code.
svn path=/trunk/; revision=23699
2006-08-25 02:22:50 +00:00
Alex Ionescu
35778c9f25 - If SeCaptureSubjectContextEx is called without a process, at least NULL-initialize the context to catch dereferences of invalid pointers.
svn path=/trunk/; revision=23698
2006-08-25 01:04:44 +00:00
Alex Ionescu
7d305ec8e6 - Fix compiling/linking problems.
- Remove KrnlFun entry - IRQs are now done through a typical NT/ROS trap frame and are synchronized and compatible with trap.S.
- Enable 2nd entry interrupt calls in HalBeginSystemInterrupt, since IRQs now use the right trap frame.

svn path=/trunk/; revision=23697
2006-08-25 00:46:41 +00:00
Ged Murphy
31cc308502 add an 'uptime' command.
Available in either Windows or Linux output. (defaulted to Windows)

svn path=/trunk/; revision=23696
2006-08-25 00:33:27 +00:00
Alex Ionescu
425592dd06 - The last piece of the puzzle: we had to initialize the IDR in HalInitProcessor to set it to the default of 0xFFFFFFB so that we don't get IRQ 0 and IRQ 1 until we're ready to handle them, which was causing the clock interrupt to be called too early.
- Remove irqhand.S and all other remaining pieces of deprecated code.

svn path=/trunk/; revision=23695
2006-08-25 00:30:26 +00:00
Alex Ionescu
5d9935a1fa - Got rid of the deprecated stuff left in irq.c and directly implemented it as part of irqhand.S (which is also deprecated).
- Cleaned up irq.c. Fixed file header, function prototypes, includes, etc, and moved general definitions and externs to ke.h

svn path=/trunk/; revision=23694
2006-08-24 23:25:37 +00:00
Johannes Anderwald
52f5a2cccc * handle PSN_APPLY effectively
* remove no longer used callback
* reenable PropSheet_Changed macros
* fix styles for dialog

svn path=/trunk/; revision=23693
2006-08-24 20:55:13 +00:00
Alex Ionescu
fe2d752e93 - Fix some bugs in clock.S
- Enable clock.S versions of KeUpdateSystem/RunTime and export them properly.
- Enable systimer.S to call into kernel's KeUpdateSystemTime.
- Enable Hal's Clock Interrupt during Phase 1.
- Remove most of the code that was still left in irq.c
- Only one large problem remains now, which is the spurious firing of the clock interrupt before we're ready to handle it... I will try to fix this today.

svn path=/trunk/; revision=23692
2006-08-24 19:17:14 +00:00
Andrew Munger
d43585136b DBG=0 fixes, patch by Physicus.
svn path=/trunk/; revision=23691
2006-08-24 18:48:15 +00:00
Christoph von Wittich
3dd85ba73d some more msvc warning fixes
svn path=/trunk/; revision=23690
2006-08-24 17:23:07 +00:00
Hervé Poussineau
cd01646b34 Fix all warnings detected by gcc 4.2
Patch by Thomas Weidenmueller

svn path=/trunk/; revision=23689
2006-08-24 16:58:12 +00:00
Christoph von Wittich
0c186af160 fixed some warnings (patch by w3seek)
svn path=/trunk/; revision=23688
2006-08-24 16:39:14 +00:00
Hervé Poussineau
71391c6a4f Build usbdriver without warning, at least with gcc 3.4.2
svn path=/trunk/; revision=23687
2006-08-24 16:21:16 +00:00
Christoph von Wittich
6db46bea8e fixed some warnings
svn path=/trunk/; revision=23686
2006-08-24 16:06:12 +00:00
Aleksey Bragin
342cd42b44 Fix a lot of annoying warnings, leaving basically only ehci.c and gendrv.c as big warnings providers
svn path=/trunk/; revision=23685
2006-08-24 12:58:52 +00:00
Aleksey Bragin
2036235837 Dmitry Philippov: Implement SmProcessFileRenameList()
svn path=/trunk/; revision=23684
2006-08-24 11:06:48 +00:00
Aleksey Bragin
1b82756b34 Temporary fix a call to KeUpdateSystemTime(), passing third CLOCK_INCREMENT's value (100000) as third param.
svn path=/trunk/; revision=23683
2006-08-24 09:32:32 +00:00
Aleksey Bragin
be7b345087 Fix compiling
svn path=/trunk/; revision=23682
2006-08-24 09:01:22 +00:00
Alex Ionescu
721fa0869e - Add more missing offsets to asm.h (as always, taken from ks386.inc)
- Fix incorrect KPCR_PRCB_DPC_ROUTINE_ACTIVE which was totally wrong (And could've caused a crash in the context swicher)
- Also fix the definition of KRCB which was off-by-4 after about offset ~0x500. It wasn't causing problems because assembly code only used < 0x500.
- Write the ASM implementation of KeUpdateRunTime (not used yet).

svn path=/trunk/; revision=23681
2006-08-24 07:48:50 +00:00
Alex Ionescu
065837f112 - Make KeUpdateSystemTime independent, so that it returns and exits from the current ROSterrupt by itself.
- Make KeUpdateRunTime increase the interrupt count, check for V86 as well as for user-mode by using the CS and EFLAGS (isntead of PreviousMode), also only request DPCs if DpcInterruptRequested isn't already set, and only perform Quantum End if this isn't the idle thread.
- Add clock.S which will have the clock interrupt handlers of the kernel (UpdateSystemTime and UpdateRunTime) and ultimately replace the only reason irqhand.S is still around (the clock interrupt). Implement the current version of KeUpdateSystemTime in assembly, with stack optimizations since we'll be called from the HAL later.

svn path=/trunk/; revision=23680
2006-08-24 06:52:33 +00:00
Alex Ionescu
5e7ef1d665 - Update KeUpdateSystemTime to use variable increments.
- Update KeTickCount properly instead of an ugly timecast hack.
- Also update UserSharedData->TickCount.
- Get rid of KiRawTicks.
- Properly update KiTickOffset at the end.

svn path=/trunk/; revision=23679
2006-08-24 06:27:29 +00:00
Alex Ionescu
8b82c0d641 - Write a basic Clock Interrupt handler in the HAL (doesn't deal with changing increments yet, just like current ROS). It will call KeUpdateSystemTime once ready.
- Implement KeDisconnectInterrupt with the new implementation.
- Put Clock Interrupt initialization in the right place (might still be too late: must investigate more).
- Added a debug print when unexpected interrupts are called, just noticed this happens on my checked machine, and it's a useful tracing tool.

svn path=/trunk/; revision=23678
2006-08-24 05:36:50 +00:00
Alex Ionescu
15899302f6 - Completely re-implement IRQ support (KeInitialize/Connect/Disconnect) interrupt using the same model as NT. Implementation was done by analyzing various of my systems at runtime with WinDBG and tracing through some of the code and dumping relevant objects.
- Uses new code added to trap.s for generic dispatching, as well as the NT implementation which copies a "template" into the ->DispatchCode array of every KINTERRUPT object.
- Also adds support for chained interrupts, but this hasn't been tested yet. Floating interrupts are not supported on NT it seems, so I haven't implemented those at all.
- KiDisableInterrupt not yet re-implemented, and timer code is still piggybacked on the old implementation.

svn path=/trunk/; revision=23677
2006-08-24 02:53:40 +00:00
Alex Ionescu
c8c71fcd5c - Implement Chained and Normal generic interrupt handlers.
- Make generated handlers have a proper .func symbol for symbol data.
- Make IDT writable, the page shouldn't be read-only.
- Change some symbol names.

svn path=/trunk/; revision=23676
2006-08-24 01:53:54 +00:00
Aleksey Bragin
b899ba11ba - Add a new level of debug verbosity
- Fix a bunch of warnings by Thomas and me

svn path=/trunk/; revision=23675
2006-08-23 22:17:09 +00:00
Alex Ionescu
5870fa3d6c - Enable the code in KeInitializeInterrupt that copies the Interrupt Template to the KINTERRUPT object and modifies the template pointer to point to the KINTERRUPT.
- Add the template code in trap.s.

svn path=/trunk/; revision=23674
2006-08-23 19:02:00 +00:00
Alex Ionescu
abe9e92dcf - Get rid of some large debugging functions that were called at all times, and don't manually deliver user APCs anymore, since the HAL handles it now.
svn path=/trunk/; revision=23673
2006-08-23 18:09:44 +00:00
Alex Ionescu
da725d9d30 - Fix some bugs in INT_PROLOG so that it can be used in cases like Unexepcted interrupts, where we don't want to push a fake error code, and want to use our own parameter.
svn path=/trunk/; revision=23672
2006-08-23 18:02:52 +00:00
Hervé Poussineau
daedfda3d4 Allow to change more easily the prefix of remote interface functions in services.exe
This is a step to share this file with Samba-TNG
Thanks to Elrond from Samba-TNG for help

svn path=/trunk/; revision=23671
2006-08-23 17:57:34 +00:00
Alex Ionescu
c0ad9f32d3 - [AUDIT] After spending some time looking at the current HAL, I believe it to be clean and written by authors which had knowledge of system internals and have always used clean-rooming. As well, the difference in implementation, complete and utter incompatibility with NT as well as the presence of some Linux-based code confirms this.
- Fix function definitions of HalQueryRealTimeClock, HalGetEnvironmentVariable. They were defined in the NDK in one way, but implemented another way, and since the HAL didn't include its own NDK file, the compiler didn't realize this. Calls of these functions might've experienced serious problems.
- Also fix HalHandleNmi and HalInitSystem definitions.
- Add stub code to actually setup the Clock Interrupt.

svn path=/trunk/; revision=23670
2006-08-23 17:28:39 +00:00
Alex Ionescu
8401f43ab0 - Switch PRIMARY_VECTOR_BASE to 0x30 instead of 0x40, as it should be.
svn path=/trunk/; revision=23669
2006-08-23 16:58:43 +00:00
Aleksey Bragin
7ad1947410 - Unmess header files a little - create one header file (usbdriver.h) which includes all other needed headers, also splitting a bit.
Also split out the roothub driver and device manager from hub.c (which was over 4500 SLOC)
- Enable PCH usage
- Reduced a few warnings

svn path=/trunk/; revision=23668
2006-08-23 12:36:08 +00:00
Aleksey Bragin
edaf50a0e7 Add accidentally deleted line (a call to WideCharToMultiByte() )
svn path=/trunk/; revision=23667
2006-08-23 08:24:37 +00:00
Alex Ionescu
4ade91ae66 - Kill two more hacks. IDR isn't hacked at 0xFFFFFFA on startup anymore, and the PIC is correctly set to 0xFA at startup.
svn path=/trunk/; revision=23666
2006-08-23 06:59:11 +00:00
Alex Ionescu
7fa6c080b5 - Enable 2nd entry for HalEndSystemInterrupt but not actually using the optimized 2nd entry since ROS IRQs are currently built with a completely different trap frame.
svn path=/trunk/; revision=23665
2006-08-23 06:51:54 +00:00
Alex Ionescu
9ac4b05366 - Fix some IDR->IRR bugs.
- Enable 2ndEntry for HalpEndSoftwareInterrupt (pending interrupt inside an interrupt).

svn path=/trunk/; revision=23664
2006-08-23 06:42:25 +00:00
Alex Ionescu
280da54a61 - Switch HalEndSystemInterrupt to ASM version and get completely rid of the irql.C file.
svn path=/trunk/; revision=23663
2006-08-23 06:38:46 +00:00
Alex Ionescu
a82987f860 - Switch to ASM version of KfLowerIrql
svn path=/trunk/; revision=23662
2006-08-23 06:35:33 +00:00
Alex Ionescu
de56d52a1b - Fix bugs in ASM version of KfLowerIrql (not yet used)
- Fix bugs in INT_PROLOG.
- Fix an important bug in TRAP_EPILOG which was causing register restoration to happen at all times (such as in Kei386EoiHelper/KiServiceExit2 when it shouldn't happen).
- Add DRx restoration from trap frame, if DR7 is set.
- Added and fixed some debugging assertions in TRAP_EPILOG.

svn path=/trunk/; revision=23661
2006-08-23 06:33:52 +00:00
Alex Ionescu
c30a8d1cd4 - Duplicate code between the remaining functions (KfLowerIRql and HalEndSystemInterrupt) so testing the switch to their ASM versions will be easier.
- Use same table as in ASM code.

svn path=/trunk/; revision=23660
2006-08-23 01:23:11 +00:00
Alex Ionescu
955d04b6ff - Disable interrupts while in HalpLowerIrql
- Properly handle IRR.
- Call IRR Handlers through the SWINT table.

svn path=/trunk/; revision=23659
2006-08-23 01:07:14 +00:00
Alex Ionescu
9f38dc5900 - Deliver APCs through a proper interrupt gate as well.
svn path=/trunk/; revision=23658
2006-08-23 00:51:08 +00:00
Alex Ionescu
44804d565e - Call KiDispatchInterrupt through an interrupt gate instead of directly.
svn path=/trunk/; revision=23657
2006-08-23 00:49:35 +00:00
Alex Ionescu
bbd5e3237f - Remove HalpEndSystemInterrupt since we were already doing that code in HalpLowerIrql.
svn path=/trunk/; revision=23656
2006-08-23 00:39:52 +00:00
Alex Ionescu
a2c9ae57c3 - Use the IRR to determine APC delivery.
svn path=/trunk/; revision=23655
2006-08-22 23:41:39 +00:00
Alex Ionescu
132b7c834f - Add the code necessary in the C version of KeLowerIRql to properly mask the PIC, and enable #ifed code in ASM KeRaiseIrql to mask the PIC, since it now works.
svn path=/trunk/; revision=23654
2006-08-22 22:45:45 +00:00
Alex Ionescu
fcdd76f501 - Get rid of the peculiar idea that the HAL should manually hack into ntoskrnl through a hack export and hackishly call the registered device interrupt handlers. This is why computers have a PIC in the first place...
svn path=/trunk/; revision=23653
2006-08-22 22:20:02 +00:00
Alex Ionescu
fcda0db1c6 - Switch to ASM version of HalEnableSystemInterrupt
svn path=/trunk/; revision=23652
2006-08-22 22:13:01 +00:00
Alex Ionescu
f5f0688575 - Use the IDR in the PCR intead of a local picmask.
- Use ASM version of HalBeginSystemInterrupt.

svn path=/trunk/; revision=23651
2006-08-22 22:10:52 +00:00
Aleksey Bragin
23b6ae75fb Dmitry Philippov:
- Add a test case for a multisz value which has zero-sized strings
- Add a test case for query registry delete

All tests are known to be passed on Windows XP SP2

svn path=/trunk/; revision=23650
2006-08-22 21:45:57 +00:00
Alex Ionescu
4e5173d7d0 - Commit current work on IRQ rewrite. Currently in a very ugly/dirty state of flux between the new ASM code (with tiny hacks) and the old C code (with giant hacks). I feel that this is a good/stable middle ground before continuing further with the changes.
svn path=/trunk/; revision=23649
2006-08-22 20:50:52 +00:00
Christoph von Wittich
746195690d * some msvc /W4 fixes
svn path=/trunk/; revision=23648
2006-08-22 20:06:30 +00:00
Hervé Poussineau
b7578b2c4b Fix GCC 4 build. Patch by Thomas Weidenmüller
svn path=/trunk/; revision=23647
2006-08-22 18:53:50 +00:00
Art Yerkes
acad050569 Fix elrond bug. DNS timeouts now work properly even in the absence of ICMP
destination unreachable or a proper response.

svn path=/trunk/; revision=23646
2006-08-22 06:23:00 +00:00
Alex Ionescu
67096f53f5 - Implement GENERATE_IDT_STUBS/GENERATE_INT_HANDLERS
- Generate actual Unexpected Interrupt entries in the IDT for INTs > 0x30 (basically IRQs).
- Generated all 208 Unexpected Interrupt Handlers for all INTs (using a single macro line) and implement a "Tail" function to handle them instead of bugchecking like before (they're now sent to HAL properly).
- Implement INT_PROLOG macro to create KTRAP_FRAME for interrupts (similar to traps).
- Part 1 of major changes to come....

svn path=/trunk/; revision=23645
2006-08-21 22:40:23 +00:00
Ged Murphy
9281b0c841 - Cleanup / rewrite much of the ip config code
- Move hardcoded strings into a resource file ready for translation
- Query registry data for friendly names, etc. We can remove some of this when the XP/vista API, GetAdaptersAddresses is implemented.
- tested in Windows, untested in ROS...

svn path=/trunk/; revision=23644
2006-08-21 19:28:18 +00:00
Hervé Poussineau
b8d9b16369 Fix compilation of ntoskrnl
svn path=/trunk/; revision=23643
2006-08-21 17:16:36 +00:00
Magnus Olsen
1288ce8d7c Update version number to 0.3.x
svn path=/trunk/; revision=23642
2006-08-21 15:04:20 +00:00
Johannes Anderwald
043df7bed9 * colors.c: add error checking
* console.c: add defaults
* layout: halfplement layout dialog

svn path=/trunk/; revision=23641
2006-08-21 10:57:14 +00:00
Magnus Olsen
038473fdfd revers 23614 it cause unexped regress in some api, the code need be goto thung pretty hard even try remove hardcode font in win32k, and it cause regress there and there. and cause regreess on boot time to time. sorry it took me most night figout out why. But I do not yet how to solv it.
svn path=/trunk/; revision=23640
2006-08-21 05:14:22 +00:00
Art Yerkes
58cdf1c29b Added gdi32, because we depend on CreateSolidBrush and kin.
svn path=/trunk/; revision=23639
2006-08-21 04:41:11 +00:00
Art Yerkes
ae19f2956d - Fixed timeout calculation.
- Fixed a couple of leaks.

svn path=/trunk/; revision=23638
2006-08-21 03:59:02 +00:00
Alex Ionescu
0ba60c4b62 - Delete bios.c and usertrap.c
- Add Ke entries to KernelFun!

svn path=/trunk/; revision=23637
2006-08-21 03:49:02 +00:00
Alex Ionescu
f038f4a895 - Gutted out KiTrapHandler. Now it is only a gateway for GPF/UD for V86 mode.
- Removed all the code in userptrap.c and removed KiKernelTrapHandler.
- Set Traps 11, 12, 16 and 17 as unhandled for now(Segment fault, stack fault, fpu fault and alignment fault). We weren't really "handling" them in the past either.
- I probably need to implement GPF handler for non-V86 mode to support Lazy segment loading and fix the vmware syscall bug that has been haunting me for two years.

svn path=/trunk/; revision=23636
2006-08-21 03:31:53 +00:00
Alex Ionescu
775b443831 - Call KiSystemFatalException directly instead of duplicating the code 5 times.
svn path=/trunk/; revision=23635
2006-08-21 03:03:52 +00:00
Alex Ionescu
03f23a9e0a - Convert 8, 9, 10, 15/F
svn path=/trunk/; revision=23634
2006-08-21 03:01:47 +00:00
Alex Ionescu
162d423eff - Switch 4, 5, 6 to common ASM dispatcher as well.
svn path=/trunk/; revision=23633
2006-08-21 02:32:08 +00:00
Alex Ionescu
4bb966cd9a - Implement generic exception dispatcher for traps (kind-of analogous to KiKernelTrapHandler/KiUserTrapHandler but in assembly and more generic/compact).
- Switch Traps 0, 1  to it.
- Trap 2 is NMI, bugcheck immediately since we can't handle them yet.

svn path=/trunk/; revision=23632
2006-08-21 02:01:07 +00:00
Alex Ionescu
c43ef4fb30 - Fixes to CONTEXT<->KTRAP_FRAME conversion.
svn path=/trunk/; revision=23631
2006-08-21 01:07:01 +00:00
Brandon Turner
4c9f6c31bb Label NtReadFileScatter as unimplemented.
svn path=/trunk/; revision=23630
2006-08-21 00:02:33 +00:00
Johannes Anderwald
44f2cc5731 * colors.c: implement color dialog (reading from registry is not yet supported)
* font.c/layout.c/console.c/options.c: add UNREFERENCED_PARAMETER macros, fix sharing of global struct
* console.def: fix building with MSVC

svn path=/trunk/; revision=23629
2006-08-20 23:55:08 +00:00
Alex Ionescu
74f108bb28 - Detect NPX/FPU in simple assembly and XMMI/SSE2 by using CPU Feature flags, replacing the old asm+c mess.
- Handle FPU/SSE saving in the CONTEXT<->KTRAP_FRAME routines directly, and using KiFlushNPXState assembly function.
- Implement a naive Trap 7 (FPU Fault) handler in assembly that properly does most of the work required to handle an FPU fault. Not yet complete however since it almost ignores user-mode faults (just like trunk). FPU isn't done in ctx switching yet.
- Remove all the other .c code that dealt with FPU stuff and had become incompatible since more then a year ago.

svn path=/trunk/; revision=23628
2006-08-20 23:53:07 +00:00
Michele Cicciotti
aabf06072b modified porting-tools/rdesktop-core-tester/activex.cpp
modified   porting-tools/rdesktop-core-tester/rdesktop-core-tester.cpp
    And from the chrysalis out came... the caterpillar. MissTosca stops just short of being demonstrable. I'll keep working on it, but the Google Summer of Code is, for all intent and purposes, over. The matter is in the hands of my judges now. Wish me luck

modified   rdesktop/iso.c
modified   rdesktop/proto.h
modified   rdesktop/rdesktop.h
modified   rdesktop/rdp.c
    Very minor fixes

modified   rdesktop/tcp.c
    Use asynchronous I/O and alertable waits to allow aborting the protocol thread ASAP

svn path=/trunk/; revision=23627
2006-08-20 21:02:10 +00:00
Art Yerkes
9cb66d7953 Add the ability to specify DNS servers and make adns work right in case they
are specified.

svn path=/trunk/; revision=23626
2006-08-20 20:51:54 +00:00
Alex Ionescu
43d5f7e90d - Remove some FPU deprecated constants and use the new ones.
- Deliver APCs on return from context switch with pending kernel APCs.

svn path=/trunk/; revision=23625
2006-08-20 20:27:03 +00:00
Alex Ionescu
893a8bcac6 - Don't use EFLAGS to store the Wait IRQL, just push directly, it's cleaner.
- Detect if kernel APCs are pending and request APC_LEVEL software interrupt from HAL if they are, returning with the right apc status.
- Also update INT21 VDM Descriptor handler when updating LDT descriptor.

svn path=/trunk/; revision=23624
2006-08-20 20:09:25 +00:00
Alex Ionescu
017e14551b - Damn copy/paste bug.
svn path=/trunk/; revision=23623
2006-08-20 20:02:18 +00:00
Alex Ionescu
baf87a4cfb - Fix bug 1764 reported by alexvlas.
svn path=/trunk/; revision=23622
2006-08-20 20:00:56 +00:00
Alex Ionescu
233e643648 - Add support for APC-delivery after context-switch (not yet programmed)
- Detect and crash if context switch is done inside a DPC.
- Switch kernel stack a bit earlier
- Don't switch address space if we're still in the same process, and fix some duplicated code that was mixed up together.
- Move LDT setup out-of-line.

svn path=/trunk/; revision=23621
2006-08-20 19:55:32 +00:00
Johannes Anderwald
9348f70d7d * implement debugger settings for Control Panel Applets for MSVC2005
* in order to use, start the vcproj save sln and restart && enjoy

svn path=/trunk/; revision=23620
2006-08-20 19:19:21 +00:00
Alex Ionescu
58257141b3 - Some micro-architectural changes and cleanups.
svn path=/trunk/; revision=23619
2006-08-20 19:08:57 +00:00
Aleksey Bragin
f448f3bae0 [FORMATTING]
svn path=/trunk/; revision=23616
2006-08-20 14:01:17 +00:00
Magnus Olsen
4e7aa7365f do not hard code to Bitstream Vera Sans use MS Shell Dlg instead
svn path=/trunk/; revision=23615
2006-08-20 12:46:02 +00:00
Magnus Olsen
35b13e8bb0 Fixed some hard code font name
1. Bitstream Vera Sans to MS Sans Serif
2. Bitstream Vera Sans Mono to Courier New
This fixed some problem that bug 1191 mentor but not all. 
I tested this change in ReactOS 
1. using BootCD install whole process and run some ros own program
   and tested cmd. No problem was found with this change. 

svn path=/trunk/; revision=23614
2006-08-20 12:42:30 +00:00
Michele Cicciotti
be56b5e77c modified porting-tools/rdesktop-core-tester/activex.cpp
modified   porting-tools/rdesktop-core-tester/rdesktop-core-tester.vcproj
modified   porting-tools/rdesktop-core-tester/stdafx.h
    Support acting as both the stand-alone DLL (mstscax.dll) and the redistributable (msrdp.ocx)
    Wrap the non-standard "sealed" keyword in a macro
    Almost all state now correctly passed between rdesktop-core and the ActiveX
    Some debugging aids
    Prepared a functional DllMain
    Pulled in Common Controls, needed for the full-screen titlebar

modified   rdesktop/rdesktop.h
modified   rdesktop/rdp.c
modified   rdesktop/secure.c
    Minor clean-up

svn path=/trunk/; revision=23613
2006-08-19 21:44:41 +00:00
Michele Cicciotti
efcb331e18 modified porting-tools/rdesktop-core-tester/activex.cpp
Getting closer and closer and closer yet...

modified   porting-tools/rdesktop-core-tester/mstsclib_h.h
modified   porting-tools/rdesktop-core-tester/mstsclib_i.c
modified   porting-tools/rdesktop-core-tester/mstsclib_redist_h.h
modified   porting-tools/rdesktop-core-tester/mstsclib_redist_i.c
    Regenerated, no code changes

modified   porting-tools/rdesktop-core-tester/rdesktop-core-tester.cpp
modified   rdesktop/cache.c
modified   rdesktop/iso.c
modified   rdesktop/licence.c
modified   rdesktop/mcs.c
modified   rdesktop/orders.c
modified   rdesktop/parse.h
modified   rdesktop/proto.h
modified   rdesktop/pstcache.c
modified   rdesktop/rdesktop.h
modified   rdesktop/rdp.c
modified   rdesktop/rdp5.c
modified   rdesktop/secure.c
modified   rdesktop/tcp.c
    Trimmed down rdesktop-core library to the maximum extent possible
    Handle errors gracefully
    Use actual Unicode strings
    Fixed most warnings
    Added hooks for events happening inside the protocol's main loop

modified   porting-tools/rdesktop-core-tester/stdafx.cpp
    Clean-up

svn path=/trunk/; revision=23612
2006-08-19 18:40:53 +00:00
Aleksey Bragin
10f76ae52b Fix a bit of warnings
svn path=/trunk/; revision=23611
2006-08-19 18:09:30 +00:00
Aleksey Bragin
1f4c3ee955 - Brandon Turner's warning fixing patch
- When compiled with gcc we assume that CPU can't do TSC (the function will be rewritten anyway since it's weird to use inline assembly in a driver)
- Changed to the correct .rc file, removed duplicate one (ehci.rc)
- usbdriver now compiles with reactos build system

svn path=/trunk/; revision=23610
2006-08-19 16:53:49 +00:00
Johannes Anderwald
6da011c669 * implement console resources
* based on a patch by Lohnegrim

svn path=/trunk/; revision=23609
2006-08-19 10:35:00 +00:00
Brandon Turner
cd6e6b75c6 include sndvol32 on the bootcd. this fixes bug 1754
svn path=/trunk/; revision=23606
2006-08-18 23:48:02 +00:00
Aleksey Bragin
c0f94a72fc According to Filip Navara, HCELL's structure is
1. No plans to support NT 3.x hives (thus no need for OldCell / NewCell)
2. Cmlib is a bit architecturally different from NT's implementation:
"... i don't need the UserData, because that is what i return ... i don't consider it part of the header anymore"

svn path=/trunk/; revision=23605
2006-08-18 22:03:36 +00:00
Brandon Turner
5cd8f73f12 Don't redefine HIWORD or LOWORD if they are defined already.
Make 2 new macros USE_NON_PENDING_IRQL, USE_BASIC_NON_PENDING_IRQL and use accordingly to remove warnings

svn path=/trunk/; revision=23604
2006-08-18 21:37:02 +00:00
Aleksey Bragin
9bd9265d9f Fixes:
- missing ";" at eol
 - some compatibility issues with newer WDK's files

svn path=/trunk/; revision=23603
2006-08-18 21:00:43 +00:00
Aleksey Bragin
430d3e90b8 Import "USB Driver stack project for Windows NT 4.0" by Zhiming/Woodhead (mypublic99@yahoo.com).
It supports UHCI/EHCI controllers.
Don't expect it to compile with ReactOS build environment. I intend to do some work on it, and use this place to keep my changes, before it's suitable for ReactOS.


"I would like to see it useful for ReactOS" (c) woodhead

 

svn path=/trunk/; revision=23602
2006-08-18 20:37:55 +00:00
Magnus Olsen
4fec2ff8db fixed msvs build
svn path=/trunk/; revision=23601
2006-08-18 09:15:26 +00:00
Magnus Olsen
2384d41068 fixed to error that was show in msvs when it compiles
svn path=/trunk/; revision=23600
2006-08-18 09:06:28 +00:00
Brandon Turner
4316d67743 minor grammatical / wording fixes. bug 1747
svn path=/trunk/; revision=23599
2006-08-18 01:51:44 +00:00
Ged Murphy
00a97e886c don't read the 0000 key.
stops the annoying 'Missing NetCfgInstanceId Entry' message box when running in Windows.

svn path=/trunk/; revision=23598
2006-08-17 20:23:10 +00:00
Ged Murphy
0731e09013 match up taskmgr with current icon theme
svn path=/trunk/; revision=23597
2006-08-17 19:11:17 +00:00
Ged Murphy
369176ea9d Don't allow ws2_32 access to apps with bad setup data
(commit correct version this time)

svn path=/trunk/; revision=23596
2006-08-17 16:48:36 +00:00
Ged Murphy
885da5be07 Don't allow ws2_32 access to apps with bad setup data
svn path=/trunk/; revision=23595
2006-08-17 16:44:54 +00:00
Alex Ionescu
22917c0ebe - Properly disable impersonation in PsDisableImpersonation if it was previously enabled, instead of not disabling it. (fix a wrong check). Thanks to Arty.
svn path=/trunk/; revision=23588
2006-08-16 03:17:21 +00:00
James Tabor
a2976ce0d4 Only lower word is used with dwTypeData as bitmap handle.
svn path=/trunk/; revision=23587
2006-08-15 18:05:18 +00:00
Ged Murphy
b01f9a2937 [AUDIT]
iprtprio
unimplemented

svn path=/trunk/; revision=23585
2006-08-14 21:48:55 +00:00
Ged Murphy
3eb1c6a341 Add debug print
svn path=/trunk/; revision=23584
2006-08-14 21:35:51 +00:00
Alex Ionescu
361a28608d - Get rid of "ChunkSize" through a sickening hack (however this should make the Hv* interface compatible enough for me to resume work on the cm branch).
svn path=/trunk/; revision=23583
2006-08-14 21:09:41 +00:00
Magnus Olsen
207e201632 uppdate Dejavu font from 2.7 to 2.9
svn path=/trunk/; revision=23582
2006-08-14 19:48:29 +00:00
Johannes Anderwald
b94a1c980f * create a directory "system" under %SystemRoot% to make dumb apps work
* fixes bug 879

svn path=/trunk/; revision=23581
2006-08-14 17:40:41 +00:00
Ged Murphy
546f463b79 [AUDIT]
ws2_32
- All exported functions are fully documented on MSDN
- All internal functions are clearly written with no signs of reversing
- Reformat all code to ReactOS standard

svn path=/trunk/; revision=23580
2006-08-14 17:26:36 +00:00
James Tabor
4fe1ff2259 - User32: menu, patch by Michael Kaufmann. Fix the keyboard navigation and some graphical glitches for multi-column menus.
svn path=/trunk/; revision=23579
2006-08-14 14:44:40 +00:00
Alex Ionescu
d634e929b4 - Make HHIVE part of EREGISTRY_HIVE, similarly to NT.
- Get rid of Opaque member and paramter..

svn path=/trunk/; revision=23578
2006-08-14 14:16:00 +00:00
Alex Ionescu
055aceee0e - Parameter changes to HvInitialize
svn path=/trunk/; revision=23577
2006-08-14 12:50:09 +00:00
Alex Ionescu
b25952bbc1 - CELL_HEADER -> HCELL.
svn path=/trunk/; revision=23576
2006-08-14 12:22:00 +00:00
Alex Ionescu
b2ff1d22b8 - Fix small build brekage.
- Fix HBIN definition.

svn path=/trunk/; revision=23575
2006-08-14 12:15:26 +00:00
Alex Ionescu
da51ac07a6 - VALUE_CELL => CM_KEY_VALUE
svn path=/trunk/; revision=23574
2006-08-14 12:01:20 +00:00
Alex Ionescu
aa9cca267c - KEY_CELL => CM_KEY_NODE
svn path=/trunk/; revision=23573
2006-08-14 11:57:47 +00:00
Alex Ionescu
a627f5639b - Start using some NT structures (need to get rid of "Opaque").
svn path=/trunk/; revision=23572
2006-08-14 11:35:48 +00:00
Aleksey Bragin
75b35d0b0f - Change class.c to Wine-style debugging prints, add a bit of TRACEs, WARNs and ERRs (channel-based debugging output would really help a lot...)
- Fix IntMapDesktopView() to actually store the created mapping in a global list of mappings. Previously, any operation to map an address from such heap resulted in a NULL.
As a side-effect, "user32_winetest.exe class" went from 31 to 27 failures.

svn path=/trunk/; revision=23571
2006-08-13 21:43:53 +00:00
Aleksey Bragin
48ed6cd4d0 Dmitry Philippov: In MoveFileWithProgressW()
- Change alloca() to RtlAllocateHeap() and add missing freeing of the allocated space
    - Fix incorrect FileNameLength param in call to NtSetInformationFile()
    - Add support for MOVEFILE_REPLACE_EXISTING flag

svn path=/trunk/; revision=23570
2006-08-13 19:49:34 +00:00
Aleksey Bragin
81ff664e0c Dmitry Philippov: Add more tests for delayed file operations
svn path=/trunk/; revision=23569
2006-08-13 19:12:53 +00:00
Johannes Anderwald
2d95178395 * fix registry BSOD when no value exists
* fixes bug 1750
* thnx to P43LOk for bug report

svn path=/trunk/; revision=23568
2006-08-13 18:57:28 +00:00
Johannes Anderwald
0b11700c2c * add registry test code from bug 1750 by P43LOk
svn path=/trunk/; revision=23567
2006-08-13 18:52:57 +00:00
Art Yerkes
b194f1db87 Accept a NULL ResourceList if the caller is just asking how big the result
will be, as indicated by a zero BufferSize.

svn path=/trunk/; revision=23566
2006-08-13 07:05:14 +00:00
James Tabor
4e777dcafd - User32: menu, Patch by Aric Stewart, Implement MNS_NOTIFYBYPOS. Added WM_MENUCOMMAND to winuser.h.
svn path=/trunk/; revision=23565
2006-08-13 04:48:34 +00:00
Michele Cicciotti
2c5ded9a8c modified porting-tools/mstscax/mstscax.cpp
Guard against NULL pointers in certain methods
   Append a newline to debug messages
   Support a couple forgotten VARIANT types
   Corrected implementations of IUnknown::QueryInterface
   Better debug output for IDispatch::GetIDsOfNames and IDispatch::Invoke
   Debug output for IQuickActivate

modified   porting-tools/rdesktop-core-tester/activex.cpp
   Way too many changes to list. Basically, I wrote an ActiveX control without any help from third party libraries such as ATL. It was educative, but not terribly fun. Very nearly there
   All properties of the control are now supported, aligned to the behavior of the original control, version 5.2. Parameter validation and range enforcement eveeywhere

modified   porting-tools/rdesktop-core-tester/mstsclib.idl
   Reindented
   Removed explicit __stdcall convention
   Added alternate interface ids/class ids for compatibility with the msrdp.ocx redistributable. Code does not support this yet

modified   porting-tools/rdesktop-core-tester/mstsclib.rc
added      porting-tools/rdesktop-core-tester/mstsclib_redist.idl
added      porting-tools/rdesktop-core-tester/mstsclib_redist.rc
modified   porting-tools/rdesktop-core-tester/rdesktop-core-tester.vcproj
added      porting-tools/rdesktop-core-tester/typelib.rh
   Support two type libraries for compatibility with the msrdp.ocx redistributable. Code does not support this yet

modified   porting-tools/rdesktop-core-tester/mstsclib_h.h
modified   porting-tools/rdesktop-core-tester/mstsclib_i.c
added      porting-tools/rdesktop-core-tester/mstsclib_redist_h.h
added      porting-tools/rdesktop-core-tester/mstsclib_redist_i.c
   Auto-generated files, for the poor souls without MIDL

modified   porting-tools/rdesktop-core-tester/stdafx.h
   Added missing OLE header
   Corrected typo

svn path=/trunk/; revision=23564
2006-08-12 20:40:12 +00:00
Johannes Anderwald
eb1be244ca * implement unattend switch for intl
* makes ReactOS gui setup run unattended (untill VmWare popsup)

svn path=/trunk/; revision=23563
2006-08-12 19:32:57 +00:00
Johannes Anderwald
e1dde86798 * make rundll32 work w/o kernel32 hack
* thnx to Alex_Ionescu for hint

svn path=/trunk/; revision=23562
2006-08-12 19:29:08 +00:00
Johannes Anderwald
b08d57c6a7 revert my useless code
svn path=/trunk/; revision=23561
2006-08-12 18:16:17 +00:00
Johannes Anderwald
d68fdca31f disable code for now
svn path=/trunk/; revision=23560
2006-08-12 17:41:38 +00:00
Johannes Anderwald
2d88d68e4d * handle special case
svn path=/trunk/; revision=23559
2006-08-12 17:29:38 +00:00
James Tabor
219faa9936 Remove hack for TS messages.
svn path=/trunk/; revision=23558
2006-08-12 15:55:03 +00:00
James Tabor
8d995ea23d Implement SendNotifyMessage. Needs more testing.
svn path=/trunk/; revision=23557
2006-08-12 15:50:45 +00:00
Ged Murphy
635b9fb393 fix a few resource leaks
svn path=/trunk/; revision=23556
2006-08-12 15:17:29 +00:00
Ged Murphy
7c636c8e1f [AUDIT]
smdll.dll
This is a ReactOS native library

svn path=/trunk/; revision=23555
2006-08-12 14:55:16 +00:00
Magnus Olsen
7fda8aece2 revers Revision: 23549 | * allocate a terminating zero for every parsed argument
The code cause a regress. and the old code is 100% correct. I spoken with janderwald about it
*argc can be 0 when it call to CommandLineToArgv and he did not think of it. and agrument 
agrc is always 1, but that can not be take into accunt. for u do not paraser how many argc it exists
you parser the current argv, like is it 0, is it 1 so on. 

 


svn path=/trunk/; revision=23554
2006-08-12 14:51:51 +00:00
Ged Murphy
bdea0e74a9 [AUDIT]
samlib.dll
Confirmed to be clean by Eric Kohl

svn path=/trunk/; revision=23553
2006-08-12 14:48:29 +00:00
Ged Murphy
c79e850942 revert 23551, wrong directory.
As my penance, I'll review this one next ;)

svn path=/trunk/; revision=23552
2006-08-12 14:47:31 +00:00
Ged Murphy
b386ef68c8 [AUDIT]
samlib.dll
Confirmed to be clean by Eric Kohl

svn path=/trunk/; revision=23551
2006-08-12 14:44:58 +00:00
Johannes Anderwald
2066acf1fa * remove unused export
svn path=/trunk/; revision=23550
2006-08-12 14:22:40 +00:00
Johannes Anderwald
9ab72b3399 * allocate a terminating zero for every parsed argument
svn path=/trunk/; revision=23549
2006-08-12 14:17:44 +00:00
Johannes Anderwald
c20e99d518 * unhack calling international control panel applet by using rundll32
svn path=/trunk/; revision=23548
2006-08-12 14:14:52 +00:00
Johannes Anderwald
336ae5366e * put application name in quotes when lpCommandLine is != NULL
svn path=/trunk/; revision=23547
2006-08-12 14:10:31 +00:00
Ged Murphy
4a4efbf11b [AUDIT]
packet.dll
3rd party lib from winpcap

svn path=/trunk/; revision=23546
2006-08-12 11:01:41 +00:00
Aleksey Bragin
ac3d2f0869 - Remove non-needed checks from GetClassInfoA/W, because they are performed in GetClassInfoExA/W or not performed in Windows at all
- So now GetClassInfoA/W implementations are correct and all hacks are moved to GetClassInfoExA/W. This doesn't fix Abiword, but might fix direct calls to GetClassInfoExA/W which might fail due to not set "cbSize" member of WNDCLASS struct.
I marked this as HACKHACK for further investigation and removal.


svn path=/trunk/; revision=23545
2006-08-11 21:24:11 +00:00
Aleksey Bragin
a31fa06b4d Computer name must always be uppercased, even despite it is an example
svn path=/trunk/; revision=23544
2006-08-11 09:05:24 +00:00
Aleksey Bragin
e91fadbcbd Revert one meaningless change from the previous patch
svn path=/trunk/; revision=23543
2006-08-10 20:56:48 +00:00
Art Yerkes
9834923eaf Added missing return.
svn path=/trunk/; revision=23542
2006-08-10 19:52:55 +00:00
Hervé Poussineau
65cde24d6c "Unicodify" msgina
Add stubs for locking/unlocking

svn path=/trunk/; revision=23541
2006-08-10 18:41:23 +00:00
Hervé Poussineau
e3d8854be7 Add code to start the screensaver from winlogon
This code should replace the existing one in win32k/csrss, but is not activated (yet) due to some bugs:
- Calling SetWindowsHookEx with WH_KEYBOARD_LL gives a BSOD when pressing a key
- Time field in PKBDLLHOOKSTRUCT/PMSLLHOOKSTRUCT should be in milliseconds
- Screen saver parameters can't be retrieved with SystemParametersInfoW
- Probably others...

Plus a few less important ones:
- When sending a message with HWND_BROADCAST, the invisible SAS window doesn't get the message
- When calling (NtUser)SystemParametersInfo, WM_SETTINGSCHANGE message is not sent
- desk.cpl doesn't save (some) screensaver parameters to registry

svn path=/trunk/; revision=23540
2006-08-10 18:37:03 +00:00
Martin Fuchs
3318c29301 some commentary changes
svn path=/trunk/; revision=23539
2006-08-09 21:27:05 +00:00
Martin Fuchs
f465feb351 refresh shell background in response to system color changes
svn path=/trunk/; revision=23538
2006-08-09 20:10:41 +00:00
Aleksey Bragin
ccf643d45b Dmitriy Philippov (shedon@mail.ru):
- The MOVEFILE_DELAY_UNTIL_REBOOT flag is incorrect processed in the MoveFileWithProgressW function.
- The add_boot_rename_entry function contains too many bugs, it crashes when
deleting operation is performed, it does not save old entry in registry, etc...

Fixes are based on the testing application located in reactos/base/application/testsets/smss/movefile


svn path=/trunk/; revision=23537
2006-08-09 19:46:07 +00:00
Aleksey Bragin
46d49263c2 Dmitriy Philippov (shedon@mail.ru): Add test application for move file after reboot function of smss.exe / kernel32.dll
svn path=/trunk/; revision=23536
2006-08-09 19:42:50 +00:00
Hervé Poussineau
3be6aa3601 Check if logoff succeeded before continuing
Check if shutdown succeeded before calling kernel

svn path=/trunk/; revision=23534
2006-08-09 14:29:12 +00:00
Hervé Poussineau
4419e2ce2a A thread may exit with a status code of 0.
svn path=/trunk/; revision=23533
2006-08-09 12:46:41 +00:00
Hervé Poussineau
009c9838df Fix a bug in NtQueryInformationThread, which was leading to its unusability in user mode
svn path=/trunk/; revision=23532
2006-08-09 12:15:18 +00:00
Aleksey Bragin
f253f896e7 - Add tracing to class.c
- Slightly change header to match the new style

svn path=/trunk/; revision=23531
2006-08-09 10:00:04 +00:00
Hervé Poussineau
6007fa59ce Remove HandleExitWindows, and move its code to HandleLogoff and HandleShutdown
Lots of cleanup

svn path=/trunk/; revision=23530
2006-08-09 06:31:02 +00:00
Andrew Munger
844073d973 Update the hardcoded ViewCVS URL. Now packmgr works on the bootcd.
svn path=/trunk/; revision=23529
2006-08-08 21:19:11 +00:00
James Tabor
e2f4a9bdf8 Fix build, for NDEBUG.
svn path=/trunk/; revision=23528
2006-08-08 20:51:59 +00:00
Andrew Munger
16837dffa3 Correct the path to the package.dll for packmgr.
svn path=/trunk/; revision=23526
2006-08-08 20:13:27 +00:00
James Tabor
43bcb034b6 - DrawCaption
- Patch by Saveliy Tretiakov, new NtUserDrawCaption implementation.
    See URL for more details, http://www.reactos.org/archives/public/ros-dev/2006-July/008575.html


svn path=/trunk/; revision=23525
2006-08-08 20:00:53 +00:00
Aleksey Bragin
0468c25a60 Force -fno-sibling-call-optimisation to every module's CFLAGs. This fixes *numerous* bugs (thanks to a bug in GCC itself), even in DBG=1 builds!
Just an example, comctl32.dll doesn't crash anymore in LISTVIEW_Callback().

Thanks to Dmitriy Philippov (aka Shedon) for encountering the comctl32 bug and investigating it!

svn path=/trunk/; revision=23524
2006-08-08 12:41:56 +00:00
Hervé Poussineau
cd084157bd Give a valid name to the event
svn path=/trunk/; revision=23523
2006-08-08 11:10:59 +00:00
Hervé Poussineau
6889ad333c Patch by Filip Navara: Remove the call to HvFree, as the hive was not initialized
svn path=/trunk/; revision=23522
2006-08-08 09:31:19 +00:00
Eric Kohl
4d64dd44c6 - Implement ScmStartServiceA and revert the last modification of StartServiceA.
- Fix EnumServicesStatusExW.

svn path=/trunk/; revision=23521
2006-08-07 22:13:26 +00:00
Hervé Poussineau
2f021d099e - Start lsass.exe sooner, as Gina can call LsaRegisterLogonProcess in WlxInitialize
- Check that loaded Gina has all needed functions
- Set security attributes on windowstation and desktops

svn path=/trunk/; revision=23520
2006-08-07 17:18:58 +00:00
Hervé Poussineau
30c988c9be Call ScmrStartServiceW in StartServiceA to prevent code duplicating between ScmrStartServiceA/W in services.exe
svn path=/trunk/; revision=23519
2006-08-07 17:04:48 +00:00
Johannes Anderwald
552dc71367 * GUI settings for unattended setup
svn path=/trunk/; revision=23518
2006-08-07 13:32:31 +00:00
Johannes Anderwald
1547291dcc * make 2nd stage setup semi-unattendable (locale page is missing)
* to enable add the boot\bootdata\unattend.inf                          6   optional
to boot\bootdata\packages\reactos.dff

svn path=/trunk/; revision=23517
2006-08-07 13:31:11 +00:00
Hervé Poussineau
6845ab891c Add missing svn:eol-style property
svn path=/trunk/; revision=23516
2006-08-07 11:11:15 +00:00
Hervé Poussineau
dca537db04 Skip first call to AddDevice
svn path=/trunk/; revision=23515
2006-08-07 11:03:35 +00:00
Hervé Poussineau
8fb3dbf0ac Remove extra call to SETUP_CreateDevicesList
svn path=/trunk/; revision=23514
2006-08-07 11:02:14 +00:00
Hervé Poussineau
2d8c75910e Return code is really a NTSTATUS, not an unsigned int
svn path=/trunk/; revision=23513
2006-08-07 09:56:33 +00:00
Hervé Poussineau
2d7a591549 Move some more standard types in a common header
Thanks to Elrond from Samba-TNG for help

svn path=/trunk/; revision=23512
2006-08-07 09:48:54 +00:00
The Wine Synchronizer
7c4786c712 [FORMATTING]
Fix file headers to match coding style, and include reference to all programmers.

No code change.

svn path=/trunk/; revision=23511
2006-08-07 07:54:08 +00:00
Hervé Poussineau
157b8e865c Put standard types in a common header
Thanks to Elrond from Samba-TNG for help

svn path=/trunk/; revision=23510
2006-08-06 22:45:51 +00:00
Aleksey Bragin
f792bc36a0 Relax restriction on the segment in NtSetLdtEntries(). Look into diff for details. Thanks to Myria for providing information.
There were no reasons found which can proof that this change could lead to security issues.

svn path=/trunk/; revision=23509
2006-08-06 22:02:02 +00:00
Aleksey Bragin
4a57b7984a Goodbye REGISTRY_ERROR bsod!
- Change UserMode -> KernelMode in ObReferenceObject*() calls, because that calls failed
- Remove Cm-specific hack from Ob

"advapi32_winetest.exe registry" shows 0 failures on the first run and 2 failures on further runs.
I suppose there might be a leakage in the CM. To be investigated further (or wait till complete Cm rewrite in October).

svn path=/trunk/; revision=23508
2006-08-06 21:15:55 +00:00
Hervé Poussineau
15e0dc6523 SECURITY_NT_NON_UNIQUE_RID -> SECURITY_NT_NON_UNIQUE
svn path=/trunk/; revision=23507
2006-08-06 20:33:34 +00:00
Aleksey Bragin
310cebde9f - Change DbgPrint prototype back to Alex's fix. His change was correct and my commit was wrong.
- Respectively fix all occurences of DbgPrint()'s wrong prototypes throughout the tree
- HACKHACK: Change KeNumberProcessors definition in "else" branch of NTDDI_VERSION #if. I'm not sure how to properly fix this and for now I marked this place. Probably NTDDI_VERSION should be set correctly in ntoskrnl and other modules which use this variable. 

svn path=/trunk/; revision=23506
2006-08-06 19:57:24 +00:00
Hervé Poussineau
afb2063fd3 Fix an infinite loop if environment variable is not defined
svn path=/trunk/; revision=23505
2006-08-06 18:44:27 +00:00
Hervé Poussineau
887690f26d Move code around files to be more like Wine. No code change.
svn path=/trunk/; revision=23504
2006-08-06 18:37:39 +00:00
Hervé Poussineau
918b7c6c45 Implement CreateWellKnownSid and IsWellKnownSid, by ripping the Wine implementation (created by Robert Reif)
svn path=/trunk/; revision=23503
2006-08-06 18:22:36 +00:00
Hervé Poussineau
b1079a9149 Add more SID defines
svn path=/trunk/; revision=23502
2006-08-06 18:08:16 +00:00
Hervé Poussineau
63e6cdc364 Cleanup shutdown code path. Now, the user can logoff and logon again.
svn path=/trunk/; revision=23501
2006-08-06 15:47:04 +00:00
Hervé Poussineau
b229f6fcb2 Update French translation
svn path=/trunk/; revision=23500
2006-08-06 15:40:47 +00:00
Hervé Poussineau
6d3b584805 Fix a few referencing bugs (Object type must be specified if AccessMode is UserMode)
svn path=/trunk/; revision=23499
2006-08-06 15:38:56 +00:00
Hervé Poussineau
82aec77c32 STDCALL -> NTAPI
Update my mail address

svn path=/trunk/; revision=23498
2006-08-06 15:37:21 +00:00
Hervé Poussineau
6821c84844 Fix return type in .idl file
(advapi32.dll and services.exe already agreed on a error code status as return type)

svn path=/trunk/; revision=23497
2006-08-06 14:29:19 +00:00
Hervé Poussineau
705830858c - Add dsgetdc.h header
- Add missing constants SECURITY_MIN_SID_SIZE/SECURITY_MAX_SID_SIZE
- Define FreeInheritedFromArray only when _WIN32_WINNT >= 0x0501

svn path=/trunk/; revision=23496
2006-08-06 12:03:31 +00:00
Magnus Olsen
d68102ed54 forget remove one line in DirectDraw_GetAvailableVidMem sorry
svn path=/trunk/; revision=23495
2006-08-06 10:29:56 +00:00
Magnus Olsen
803578b8bc fixing some bugs in DirectDraw_GetAvailableVidMem
svn path=/trunk/; revision=23494
2006-08-06 10:28:08 +00:00
Magnus Olsen
1df8bd39ee Bugfix DirectDraw_AddRef
svn path=/trunk/; revision=23493
2006-08-06 09:56:21 +00:00
Magnus Olsen
f5b7920569 fixing ddraw regress instead bsod or fail create surface, now it fail on attach surface
svn path=/trunk/; revision=23492
2006-08-06 08:47:18 +00:00
Aleksey Bragin
dc159816df [AUDIT]
Configuration Manager

Cm part of the kernel was developed from scratch for a long time ago, and based only on legally clean information sources. After going through the code, it doesn't have any signs of questionable origin.
Authorship information will be added during formatting of the code.

svn path=/trunk/; revision=23491
2006-08-05 21:39:29 +00:00
Aleksey Bragin
8310980ff6 Fix the last definition of DbgPrint
svn path=/trunk/; revision=23490
2006-08-05 21:17:55 +00:00
Aleksey Bragin
4a9752bbe4 Fix DbgPrint / DbgPrintEx definitions to use PCCHAR instead of PCCH (recent WDK uses PCCHAR).
This change fixes compiling.

svn path=/trunk/; revision=23489
2006-08-05 20:57:36 +00:00
Alex Ionescu
3646d0b420 - Fix another incorrect DbgPrint prototype.
svn path=/trunk/; revision=23488
2006-08-05 16:50:36 +00:00
Alex Ionescu
86e31ea51a - Fix how DDK is included.
svn path=/trunk/; revision=23487
2006-08-05 16:50:23 +00:00
Alex Ionescu
4a84399353 - mangledDDK had no idea what a const char is, now it does.
- mangledDDK had wrong prototypes of DbgPrint/Ex.
- PSEH too.
- Fixed ntoskrnl headers to build with Windows 2003 header definitions. Make handle.c force usage of Windows 2000 header definitions, because the handle code is Win2K.
- mangledDDK had wrong KeNumberProcessors definition.

svn path=/trunk/; revision=23486
2006-08-05 16:49:07 +00:00
Alex Ionescu
9d109579e3 - DDK Compatibility fixes.
svn path=/trunk/; revision=23484
2006-08-05 16:27:20 +00:00
Aleksey Bragin
7f1a5332e2 Convert \ to / path separator in .rc files (fixes linux building process)
svn path=/trunk/; revision=23482
2006-08-05 13:38:51 +00:00
Magnus Olsen
5cf9d852b7 1. move rc languages to folder lang
2. Adding rsrc.rc so u can open rc file in vs 
3. fixing sublang id for some languages  so it can be open in vs

svn path=/trunk/; revision=23481
2006-08-05 11:55:35 +00:00
Magnus Olsen
db565c34cd 1. move rc languages to folder lang
2. Adding rsrc.rc so u can open rc file in vs 
3. fixing sublang id for some languages  so it can be open in vs

svn path=/trunk/; revision=23480
2006-08-05 11:43:49 +00:00
Magnus Olsen
c196fd1221 1. move rc languages to folder lang
2. Adding rsrc.rc so u can open rc file in vs 
3. fixing sublang id for almost all languages  so it can be open in vs
ToDO
each langues have diffent menu and dialog for some have update En.rc and not the rest of the languages file 
Never only update En.rc update all other languages file same time so we have same desgin and option and dialog
box on each languages. 

svn path=/trunk/; revision=23479
2006-08-05 10:37:42 +00:00
Magnus Olsen
a86f6c873d forget this file thx fireball
svn path=/trunk/; revision=23478
2006-08-05 10:08:29 +00:00
Magnus Olsen
8c69a85ea6 1. move rc languages to folder lang
2. Adding rsrc.rc so u can open rc file in vs 
3. fixing sublang id for hu.rc so it can be open in vs

svn path=/trunk/; revision=23477
2006-08-05 09:29:13 +00:00
Magnus Olsen
812c059223 1. move rc languages to folder lang
2. Adding rsrc.rc so u can open rc file in vs 

svn path=/trunk/; revision=23476
2006-08-05 09:21:21 +00:00
Aleksey Bragin
3a9d44aa99 Change "\" to "/", so it compiles both on Linux and Windows.
svn path=/trunk/; revision=23475
2006-08-05 09:15:18 +00:00
Magnus Olsen
f5c9f4acdb 1. move rc languse to folder lang
2. Adding rsrc.rc so u can open rc file in vs 
3. Fixing Ru and Hu sublang id. so they showing in vs instead for unkown langues. 

svn path=/trunk/; revision=23474
2006-08-05 09:05:28 +00:00
Magnus Olsen
5004195fad move rc languse to folder lang
svn path=/trunk/; revision=23473
2006-08-05 09:03:04 +00:00
Magnus Olsen
60bdf62560 move the lang filr to folder lang
(do not use torstensvn to move file, torstensvn can not manger move all file at once, only command base svn)

svn path=/trunk/; revision=23472
2006-08-05 08:43:23 +00:00
Aleksey Bragin
591d64daec Moved language resource files to lang subdir.
svn path=/trunk/; revision=23471
2006-08-05 08:35:32 +00:00
Magnus Olsen
7f27d73fda Moved remotely
svn path=/trunk/; revision=23470
2006-08-05 08:30:47 +00:00
Magnus Olsen
20a0e7fdb3 Moved remotely
svn path=/trunk/; revision=23469
2006-08-05 08:30:39 +00:00
Magnus Olsen
fc71bab6eb Moved remotely
svn path=/trunk/; revision=23468
2006-08-05 08:30:26 +00:00
Magnus Olsen
055745600b Moved remotely
svn path=/trunk/; revision=23467
2006-08-05 08:30:18 +00:00
Magnus Olsen
81e2c1b0e0 Moved remotely
svn path=/trunk/; revision=23466
2006-08-05 08:30:11 +00:00
Magnus Olsen
714ccb42ca Moved remotely
svn path=/trunk/; revision=23465
2006-08-05 08:30:03 +00:00
Magnus Olsen
ac06d7203f Moved remotely
svn path=/trunk/; revision=23464
2006-08-05 08:29:58 +00:00
Magnus Olsen
0ac77c3f8c Moved remotely
svn path=/trunk/; revision=23463
2006-08-05 08:29:49 +00:00
Magnus Olsen
d2fd2cd3fa Moved remotely
svn path=/trunk/; revision=23462
2006-08-05 08:28:29 +00:00
Magnus Olsen
c24caedf13 Created folder remotely
svn path=/trunk/; revision=23461
2006-08-05 08:27:21 +00:00
Magnus Olsen
937ceea974 finsih the move of langues rc
svn path=/trunk/; revision=23460
2006-08-05 08:26:42 +00:00
Magnus Olsen
300d54c674 Moved remotely
svn path=/trunk/; revision=23459
2006-08-05 08:13:11 +00:00
Magnus Olsen
254a2e45f6 Moved remotely
svn path=/trunk/; revision=23458
2006-08-05 08:12:46 +00:00
Magnus Olsen
99db1b9c92 Moved remotely
svn path=/trunk/; revision=23457
2006-08-05 08:12:31 +00:00
Magnus Olsen
ec9f9a3f13 Moved remotely
svn path=/trunk/; revision=23456
2006-08-05 08:12:03 +00:00
Magnus Olsen
d22731eceb Moved remotely
svn path=/trunk/; revision=23455
2006-08-05 08:11:50 +00:00
Magnus Olsen
6c109b3daa Moved remotely
svn path=/trunk/; revision=23454
2006-08-05 08:11:34 +00:00
Magnus Olsen
ef91589118 Created folder remotely
we store all langues rc file to folder lang

svn path=/trunk/; revision=23453
2006-08-05 08:10:44 +00:00
James Tabor
79b9b1a431 Patch by Dan Hipschman, Call SetLastError in CreateWindowEx when WS_CHILD is set with no parent.
svn path=/trunk/; revision=23452
2006-08-05 01:48:20 +00:00
Ged Murphy
c44fecf418 change definition to ensure calling of unicode
svn path=/trunk/; revision=23449
2006-08-04 23:40:16 +00:00
Brandon Turner
4ea471d5a5 update the help for exit to include /b
svn path=/trunk/; revision=23448
2006-08-04 21:24:57 +00:00
Hervé Poussineau
56a847b2ca Implement /CMDCONS switch, which allows the user to start in text mode
Autologon should only be done once (when starting the computer, not after the user has logged out)
Remove the status message dialog only in GUI

svn path=/trunk/; revision=23447
2006-08-04 19:44:35 +00:00
Aleksey Bragin
41fb06f69a Add an entry to enable unattended 1st stage setup (commented out by default).
In order to get unattended setup working:
1. Copy unattend.inf.sample to unattend.inf, adjust as needed
2. Uncomment the line in bootdata.rbuild to include it into bootcd

svn path=/trunk/; revision=23446
2006-08-04 19:28:54 +00:00
Hervé Poussineau
3455731503 Try to implement a working shutdown.
Sorry, I had to disable some code to close user processes in subsystems/win32/csrss/win32csr/exitros.c

svn path=/trunk/; revision=23445
2006-08-04 15:39:44 +00:00
Hervé Poussineau
3008860064 We should be able to set ThreadImpersonationToken information with NtSetInformationThread
svn path=/trunk/; revision=23444
2006-08-04 13:52:16 +00:00
Hervé Poussineau
c5245d5b4b - Remove now useless entries about PCI bus, as StartService is now working in 2nd stage setup
- Add Netlogon service (lsass.exe)

svn path=/trunk/; revision=23443
2006-08-04 12:01:27 +00:00
Hervé Poussineau
06797ae112 - Specify *W at the end of function calls, and remove the need to define UNICODE
- Rename MsGina to Gina
- Start services.exe before running 2nd stage setup

svn path=/trunk/; revision=23442
2006-08-04 11:37:18 +00:00
Ged Murphy
6777e6905f fix loading of current values for ip and dhcp
svn path=/trunk/; revision=23441
2006-08-03 22:20:44 +00:00
Ged Murphy
2175834be0 - load the current IP address when switching from dhcp to manual.
- this isn't how Windows behaves, but it should be as it makes life slightly easier in most cases

svn path=/trunk/; revision=23440
2006-08-03 21:29:09 +00:00
Ged Murphy
7288929ef0 doh, rushed code leads to leaked resources.
thanks lkjasa for pointing it out.

svn path=/trunk/; revision=23439
2006-08-03 20:32:10 +00:00
Ged Murphy
728a261829 size the buffer dynamically to avoid potentially overflowing it
svn path=/trunk/; revision=23438
2006-08-03 19:06:12 +00:00
Ged Murphy
c6b0db6688 Add a header to the prop sheet and correct a variable spelling
fixes bug 1731
patch from itay.perl@gmail.com

svn path=/trunk/; revision=23437
2006-08-03 18:01:47 +00:00
Christoph von Wittich
53af48a8b2 -removed DefWindowProc from the Dialog WndProcs
svn path=/trunk/; revision=23436
2006-08-03 15:57:10 +00:00
Hervé Poussineau
5ef94aacb7 Don't try to remove a status message if none have been displayed and GINA has not been initialized
svn path=/trunk/; revision=23435
2006-08-03 15:14:14 +00:00
Hervé Poussineau
603ac11c9a Simplify management of loggedout window
Implement locking/unlocking of the workstation (only by code, not the associated dialogs)

svn path=/trunk/; revision=23434
2006-08-03 13:54:44 +00:00
Hervé Poussineau
e202c810ac Implement shutdown and unlocking
Remove some useless code
Implement Timeout for dialogs

svn path=/trunk/; revision=23433
2006-08-03 13:50:40 +00:00
James Tabor
21ea0d9494 Fix build
svn path=/trunk/; revision=23432
2006-08-03 01:30:40 +00:00
Christoph von Wittich
26dbfdec15 -splitted resource file into en.rc and msgina.rc
-prettyfied msgina a bit
-fixed line endings

svn path=/trunk/; revision=23430
2006-08-03 00:32:32 +00:00
James Tabor
a0f6dcc406 Fixed typo, btw this fixes most of the edit tests.
svn path=/trunk/; revision=23429
2006-08-03 00:01:05 +00:00
James Tabor
db09492d5f - Win32k
- CreateWindowsEx: Patch based on janderwald patch.
    1. Reading and follow wine source (user/win.c & winex11.drv/window.c), I noticed that cs->hwndParent is unmodified when passed to the children via WM_NC/CREATE.
    2. Reordered the "fine the parent" code, based on wine. I've tested this change for last two weeks.

svn path=/trunk/; revision=23428
2006-08-02 23:39:53 +00:00
Hervé Poussineau
4546ac2820 Fix compilation
svn path=/trunk/; revision=23427
2006-08-02 22:49:02 +00:00
Ged Murphy
972b814ded disable the floating toolbars by default until they are useful.
svn path=/trunk/; revision=23425
2006-08-02 21:52:20 +00:00
Hervé Poussineau
d194ee80a5 Winlogon:
- Register CTRL+ALT+DELETE notification
- Better session loop between all GINA dialogs
- Display a dialog box if GINA DLL cannot be loaded
GINA:
- Add an graphical and text interface to enter username/password
- Take care of autologon parameters in registry

svn path=/trunk/; revision=23424
2006-08-02 21:01:37 +00:00
Johannes Anderwald
d99c9b45f0 .c files are not executable files
svn path=/trunk/; revision=23423
2006-08-02 20:51:13 +00:00
Hervé Poussineau
0d5fd6cd68 - Implement INF_STYLE_OLDNT style in SetupOpenInfFileW
- Add some documentation in header file

svn path=/trunk/; revision=23422
2006-08-02 20:45:13 +00:00
Ged Murphy
5b8e3e2f5b fix MSI build warnings
svn path=/trunk/; revision=23421
2006-08-02 20:01:22 +00:00
Ged Murphy
64a6bb9b0e remove wine file. This should now be defined in our psdk
svn path=/trunk/; revision=23420
2006-08-02 20:00:45 +00:00
Johannes Anderwald
31b43700f6 add description on how to bypass MBR installation page
svn path=/trunk/; revision=23419
2006-08-02 18:59:06 +00:00
Johannes Anderwald
6c41639b61 * make ReactOS textmode setup full-unattendable
svn path=/trunk/; revision=23418
2006-08-02 18:58:07 +00:00
Michele Cicciotti
6556fec93f modified porting-tools/mstscax/mstscax.cpp
modified   porting-tools/mstscax/stdafx.h
   Added support for aggregation (ActiveX controls are expected to be aggregable)
   Added IMsRdpClientAdvancedSettings4 stub
   Added some other minor stubs

added      porting-tools/rdesktop-core-tester/activex.cpp
modified   porting-tools/rdesktop-core-tester/stdafx.h
modified   porting-tools/rdesktop-core-tester/rdesktop-core-tester.vcproj
   Full stubs for RDP client ActiveX control

added      porting-tools/rdesktop-core-tester/mstsclib.idl
added      porting-tools/rdesktop-core-tester/mstsclib.rc
added      porting-tools/rdesktop-core-tester/mstsclib_h.h
added      porting-tools/rdesktop-core-tester/mstsclib_i.c
   IDL definition file and type library resource for the ActiveX control. MIDL-generated files temporarily committed

modified   porting-tools/rdesktop-core-tester/rdesktop-core-tester.cpp
   Overall cleanup
   GDI code now uses SaveDC/RestoreDC instead of multiple calls
   Virtual Channel API stubs

modified   rdesktop/bitmap.c
   Re-enable optimizations

modified   rdesktop/channels.c
   Magic numbers are evil

modified   rdesktop/mcs.c
modified   rdesktop/rdesktop.h
   MCS channel ids were superfluous

modified   rdesktop/rdesktop-core.vcproj
modified   rdesktop/secure.c
modified   rdesktop/types.h
   Removed virtual channels implementation, preparing to replace with extensible, multithreaded, Windows-compatible implementation

svn path=/trunk/; revision=23417
2006-08-02 14:21:45 +00:00
Martin Fuchs
2a4389576a fix GCC build error "explicit qualification in declaration of MLStorage::..." for ibrowser
svn path=/trunk/; revision=23416
2006-08-02 12:20:14 +00:00
Martin Fuchs
a16732d63c fix GCC build error "explicit qualification in declaration of MLStorage::..."
svn path=/trunk/; revision=23415
2006-08-02 12:11:24 +00:00
Ged Murphy
6193e2092b - sync MSI to Wine 0.9.18
- note, it still has the swprintf warnings which I'll fix tomorrow (if someone reminds me ;) )
- MSI Wine test is now in trunk, if anyone has chance to do a before and after test ...

svn path=/trunk/; revision=23414
2006-08-01 23:12:11 +00:00
Ged Murphy
5e15912284 add msi wine regression test
svn path=/trunk/; revision=23410
2006-08-01 22:48:23 +00:00
James Tabor
1d2d013384 - User32
- Dialog.c Partial sync to wine. 
  - Add WinPosActivateOtherWindow to winpos.c, activate another window when the dialog gets hidden in EndDialog.
  - Misc fixes and changes.

svn path=/trunk/; revision=23409
2006-08-01 21:14:45 +00:00
Hervé Poussineau
963218942e Use the locally modified StartupInfo, instead of the one the caller gave us
svn path=/trunk/; revision=23407
2006-08-01 15:59:14 +00:00
The Wine Synchronizer
e184a78b53 Revert 23354 (causes a bugcheck). It will be committed when Alex has time to fix that issue.
svn path=/trunk/; revision=23405
2006-08-01 12:50:11 +00:00
Martin Fuchs
9940e41a7b fix output of XML document types
svn path=/trunk/; revision=23403
2006-08-01 09:23:41 +00:00
Filip Navara
eb035c3d8f Fix the damn detection code.
svn path=/trunk/; revision=23401
2006-08-01 03:43:51 +00:00
Martin Fuchs
2005844309 cleanup project files
svn path=/trunk/; revision=23400
2006-07-31 23:49:13 +00:00
Martin Fuchs
0887b49c1b move string constants into XMLStorage namespace
svn path=/trunk/; revision=23399
2006-07-31 23:46:20 +00:00
Martin Fuchs
8cb05b5ab7 IBrowser: update XMLStorage library and remove Expat dependency
svn path=/trunk/; revision=23398
2006-07-31 23:23:19 +00:00
Martin Fuchs
350cddb3d6 Explorer: update XMLStorage library and remove Expat dependency
svn path=/trunk/; revision=23397
2006-07-31 23:21:55 +00:00
Andrew Munger
4a89b0422d Fix the build on linux (for real). Patch from hpoussin, who checked that it didn't break the win32 build.
This also reverts 23394.

svn path=/trunk/; revision=23396
2006-07-31 22:34:55 +00:00
Martin Fuchs
56781e4522 ibrowser resources: fix norwegian sublanguage ID
svn path=/trunk/; revision=23395
2006-07-31 22:29:45 +00:00
Eric Kohl
5bcb07458e Fix missing _strnicmp on Linux.
svn path=/trunk/; revision=23394
2006-07-31 20:20:10 +00:00
Brandon Turner
899a4ac7b8 Implement the reading and writing of pagefile settings. We should not longer have to edit it by hand in regedit. This works 100% flawlessly in win2k3 but has not been tested in ros yet. Patch by Christian Wallukat (cwallukat@gmx.at) and myself.
svn path=/trunk/; revision=23381
2006-07-30 23:14:02 +00:00
The Wine Synchronizer
ad4cd97427 Autosyncing with Wine HEAD
svn path=/trunk/; revision=23380
2006-07-30 21:27:45 +00:00
Eric Kohl
1edf91632a Updated information about widl.
svn path=/trunk/; revision=23378
2006-07-30 13:39:42 +00:00
Eric Kohl
945bcdf5e8 This modification is required for use with the WINE widl.
svn path=/trunk/; revision=23377
2006-07-30 13:02:53 +00:00
Eric Kohl
9c239fd76f Synchronize with current WINE widl 20060729.
svn path=/trunk/; revision=23376
2006-07-30 12:58:24 +00:00
Hervé Poussineau
6c4f49b5cd - Create a window to receive the CTRL+ALT+DELETE event (not working yet)
- Remove support for console start (it is the role of msgina, not winlogon)
- Implement some simple functions

svn path=/trunk/; revision=23375
2006-07-30 08:38:35 +00:00
Hervé Poussineau
6b63d81fbd Implement SM_REMOTESESSION message
svn path=/trunk/; revision=23374
2006-07-29 23:55:07 +00:00
Hervé Poussineau
754546cdfc Add autologon information (not used yet)
svn path=/trunk/; revision=23373
2006-07-29 23:13:17 +00:00
Christoph von Wittich
9cff1db692 fix ASSERT in ndis, now the Realtek 8029AS (ne2000) driver is working
svn path=/trunk/; revision=23368
2006-07-29 20:23:44 +00:00
Aleksey Bragin
6698793717 Move two helper macros into cm.h, and uncomment DPRINTs using them in registry code
svn path=/trunk/; revision=23365
2006-07-29 20:01:38 +00:00
Alex Ionescu
17509fb1e5 - Added profiling for possible Nt I/O function optimizations. Booting and running Firefox gave an amazing "0 missed optimizations", so defintely, this has been moved down on the priority list. Also merged all tracing TODOs in one entry and added device.c tracing TODO.
- Fix IRP Cancellation and enable all calls to IopQueueIrpToThread and IopUnqueueIrpFromThread. This seems to work properly now and the kernel fun entry for it has been removed. All remaining Io TODOs are now low priority.

svn path=/trunk/; revision=23354
2006-07-29 19:26:13 +00:00
Hervé Poussineau
8775e940c1 Remove no longer needed hack
svn path=/trunk/; revision=23353
2006-07-29 17:59:04 +00:00
Alex Ionescu
ca2a89a457 - Add another paramter to IopCleanupFailedIrp to free an optional buffer being specified to it. This way we don't leak some allocated buffers when IRP allocation fails.
- Create inlined IopUnQueueIrpFromThread to match IopQueueIrpToThread.

svn path=/trunk/; revision=23352
2006-07-29 16:56:26 +00:00
Alex Ionescu
1c28eb66f4 - Add SEH to all iofunc.c functions that required it. (note: Some SEH might seem "useless" to have been added. This is because we don't use Pool Quotas yet, which generate exceptions which will later need to be handled).
- Implement IopExceptionCleanup as a generic cleanup handler for SEH exceptions.

svn path=/trunk/; revision=23351
2006-07-29 16:35:05 +00:00
Magnus Olsen
3d997c8dae fixing the language so it can be edit from vs, open the rsrc.rc file in vs to edit a languages.
svn path=/trunk/; revision=23350
2006-07-29 15:56:00 +00:00
Magnus Olsen
66b40e74ee rename some file from xml to rbuild.
Now all rename is done. 

svn path=/trunk/; revision=23349
2006-07-29 15:23:19 +00:00
Aleksey Bragin
bcd159805c Add 2nd half of the Filip Navara's cmlib. Now both freeldr and ntoskrnl utilise the same base library to access the registry.
Remember that you need to recreate binary hives, your old reactos registry isn't compatible (due to slight difference in the on-disk structure).

svn path=/trunk/; revision=23348
2006-07-29 14:43:32 +00:00
Magnus Olsen
677d2a40df Remove welcome from rosapps, we already it in reactos/base/....
svn path=/trunk/; revision=23347
2006-07-29 14:34:22 +00:00
Magnus Olsen
f50ffbf8c4 remove welcome from rbuild file
svn path=/trunk/; revision=23346
2006-07-29 14:33:39 +00:00
Magnus Olsen
3524699490 Remove format from rosapps, we already it in reactos/base/....
svn path=/trunk/; revision=23345
2006-07-29 14:32:05 +00:00
Magnus Olsen
ae5ead0153 Fixing some renname of xml to rbuild
svn path=/trunk/; revision=23344
2006-07-29 14:26:28 +00:00
Magnus Olsen
f909be8aaa rename some file from xml to rbuild.
svn path=/trunk/; revision=23343
2006-07-28 21:30:18 +00:00
Magnus Olsen
6b19073a39 sorry for the typo
svn path=/trunk/; revision=23342
2006-07-28 21:21:38 +00:00
Magnus Olsen
6bd161c5b8 some forgot fixing rosapps change the xml to rbuild.
fixed that in trunks

svn path=/trunk/; revision=23341
2006-07-28 21:15:46 +00:00
Magnus Olsen
3a43d2db6c adding more and find to livecd and bootcd
svn path=/trunk/; revision=23340
2006-07-28 21:05:48 +00:00
Magnus Olsen
307c8c7494 building more and find
svn path=/trunk/; revision=23339
2006-07-28 21:04:25 +00:00
Magnus Olsen
30c6b3bace making rosapps build again
svn path=/trunk/; revision=23338
2006-07-28 21:00:14 +00:00
Magnus Olsen
c8183964de copy cmdutils.rbuild
svn path=/trunk/; revision=23337
2006-07-28 20:57:04 +00:00
Aleksey Bragin
793b990edb Actually add cmlib itself
svn path=/trunk/; revision=23336
2006-07-28 20:50:05 +00:00
Magnus Olsen
d01cb10386 Moved cmdutils command more remotely
svn path=/trunk/; revision=23335
2006-07-28 20:48:20 +00:00
Magnus Olsen
397361df50 Moved cmdutils command find remotely
svn path=/trunk/; revision=23334
2006-07-28 20:47:22 +00:00
Magnus Olsen
05066fce58 prepare move for cmdutils more and find for they are necessary cmd command for allot bat files.
Fireball agrees to it. 

svn path=/trunk/; revision=23333
2006-07-28 20:43:58 +00:00
Aleksey Bragin
b6fc604db0 - Add Filip Navara's cmlib
- Use cmlib in Freeldr and Setupldr (patch by Filip Navara)
- Fix some HIVE definition and checksum calculation in mkhive and ntoskrnl (so they btoh create a compatible registry)

TODO: Apply 2nd half of the patch, which makes ntoskrnl using cmlib.

This commit is dedicated to Filip Navara's constant promises to commit cmlib and to recent small Arty vs. Alex debate on irc :)

svn path=/trunk/; revision=23332
2006-07-28 20:25:47 +00:00
Magnus Olsen
02f0e4b7ac patch from LMH1 : Bug#: 1684 : Norwegian translation
svn path=/trunk/; revision=23331
2006-07-28 20:03:29 +00:00
Aleksey Bragin
b9673c3ca0 Add message's spy into user32.dll. In order to enable, just uncomment #define YDEBUG in spy.c file and optionally set the messages you want to include / exclude in the registry (HKCU\ReactOS\Debug).
When it's turned off (YDEBUG is not defined), it doesn't provide any slow-down to the system.

DefWindowProc() functions are slightly refactored to have one exit point instead of numerous returns in a switch-case statement.

FIXME: maybe DPRINTs will be changed to DbgPrint because it's pointless to display path to the spy.c file everytime.

svn path=/trunk/; revision=23330
2006-07-28 13:52:23 +00:00
Alex Ionescu
3d97c16cd1 - Mega whammy jammy fix commit:
- Fix bootcd by fixing some bugs in CDFS (same as in VFAT).
  - Fix Broken Installers and other I/O programs that couldn't, for example, create temporary directories.
  - Fix Firefox installers and other apps crashing due to a bug in NtSetInformationFile.
  - Fix File Objects being referenced twice resulting in IRP_MJ_CLOSE/CLEANUP never being sent and several memory leaks.
  - Fix File Object Lock being incorrectly created and then misused by mm/section code.
  - Fix creation of File Object before setting up the IRP, to properly cleanup during failures.
- Add failure code if ObCreateObject fails.

svn path=/trunk/; revision=23328
2006-07-27 22:26:40 +00:00
Aleksey Bragin
27f7e69bf7 Improve a few headers by adding missing definitions and structures (taken from Wine).
Versioning might not be correct.

svn path=/trunk/; revision=23327
2006-07-27 20:34:04 +00:00
Alex Ionescu
280c7a5a59 - Add kernel fun entry:
- Find out why 7zip can't create temporary folders due to deferred I/O
    completion in IopParseDevice when creating a new File Object.. 
Thanks to encoded.

svn path=/trunk/; revision=23326
2006-07-27 20:18:22 +00:00
Alex Ionescu
48d3c8e74f - Enable IopReferenceDeviceObject in IopParseDevice (not much use for now except OS "Correctness" and identifying broken drivers). DO referencing isn't fully used in the kernel yet.
- Fix broken drivers: i8042 and videoprt. NDIS might be broken too, but downloading worked fine for me, so it's not hitting the check in IopParseDevice.

svn path=/trunk/; revision=23325
2006-07-27 20:16:48 +00:00
Alex Ionescu
bef11ebb29 - Set DRVO_INITAILIZED flag for intiailized driver objects.
- Loop the list of devices created by the driver's DriverEntry and remove the DO_DEVICE_INITIALIZING flag.

svn path=/trunk/; revision=23324
2006-07-27 19:56:38 +00:00
Alex Ionescu
6e6d9ed927 - Fix some last STDCALL->NTAPI problems.
- Generate KUSER_SHARED_DATA cookie if it doesn't already exist when a user-mode thread runs.
- Remove the last Ps entry from kernel fun.

svn path=/trunk/; revision=23323
2006-07-27 18:28:26 +00:00
Alex Ionescu
22b41d9acf - Reimplement and activate NtQueryInformationThread.
- Remove kernel fun entry.

svn path=/trunk/; revision=23322
2006-07-27 17:09:42 +00:00
Andrew Munger
306688e01b "PnPify" ne2000, patch from Filip.
This allows the ne2000 driver to work with (and without) the new qemu acpi settings.

svn path=/trunk/; revision=23320
2006-07-27 16:52:03 +00:00
Alex Ionescu
248996ff72 - Reimplement and activate NtSetInformationThread.
svn path=/trunk/; revision=23319
2006-07-27 16:43:03 +00:00
Aleksey Bragin
148bbcc210 Add sm.exe to bootcd
svn path=/trunk/; revision=23318
2006-07-27 11:37:23 +00:00
Aleksey Bragin
96c732942d Fix sm.exe's compilation
svn path=/trunk/; revision=23315
2006-07-27 11:03:36 +00:00
Magnus Olsen
e95b8ee1f2 forgot the file.
patch from LMH1  : Bug#:  1682  :  Norwegian translation
note : sm are not include in building process, the source code have got begin to be rotten, it 
       can not longer be build. shall we delete it ? or shall some look into and make it
       work again, I am not voluntary todo either of it. some else for todo that. 

svn path=/trunk/; revision=23314
2006-07-27 08:36:37 +00:00
Magnus Olsen
27f868593a patch from LMH1 : Bug#: 1682 : Norwegian translation
note : sm are not include in building process, the source code have got begin to be rotten, it 
       can not longer be build. shall we delete it ? or shall some look into and make it
       work again, I am not voluntary todo either of it. some else for todo that. 

svn path=/trunk/; revision=23313
2006-07-27 08:35:46 +00:00
Magnus Olsen
a88bf9a848 patch from LMH1 : Bug#: 1681 : Norwegian translation
svn path=/trunk/; revision=23311
2006-07-27 08:21:29 +00:00
Magnus Olsen
82d4e57ee2 patch from LMH1 : Bug#: 1680 : Norwegian translation
svn path=/trunk/; revision=23310
2006-07-27 08:17:00 +00:00
Magnus Olsen
bdcc4dd0cb patch from LMH1 : Bug#: 1687 : Norwegian translation
svn path=/trunk/; revision=23309
2006-07-27 07:59:35 +00:00
Magnus Olsen
692e79dc80 patch from LMH1 : Bug#: 1686 : Norwegian translation
svn path=/trunk/; revision=23308
2006-07-27 07:55:55 +00:00
Magnus Olsen
03b940bdba patch from LMH1 : Bug#: 1683 : Norwegian translation
svn path=/trunk/; revision=23307
2006-07-27 07:50:33 +00:00
Magnus Olsen
57404c2c93 patch from LMH1 : Bug#: 1700 : Norwegian translation
svn path=/trunk/; revision=23306
2006-07-27 07:46:08 +00:00
Alex Ionescu
29a0553ced - Remove PspGetImagePath and use the new SeLocateProcessImageName instead.
It's still not fully XP-compatible, because it should return the entire name with the \Device\HardDisk0 path, but that is easily fixable by modifying the OB Type info for the device object to also use IopQueryNameFile (TODO).
- Update kernel fun with specifics about Cc-branch dereference bug and re-prioritize an I/O Bug.

svn path=/trunk/; revision=23305
2006-07-27 05:03:03 +00:00
James Tabor
55483dc7f6 - Part 2, Menu.c, cosmetic fixes. Fixed most of all the drawing issues. One outstanding needed fix is Lazarus. There maybe some tweaking needed, over all menus look nice.
svn path=/trunk/; revision=23304
2006-07-27 01:21:21 +00:00
Alex Ionescu
de6dc70c56 - Implement XP-style process name auditing to store the full name of the process in EPROCESS instead of only the first 16 ascii characters. This is required for one of the newer Info process classes. Implemented SeInitializeProcessAuditName and SeLocateProcessImageName.
- Remove #ifed out code in PspCreateProcess which was attempting to create the name structure. Add code to MmCreateProcessAddressSpace to initialize the audit name after the 16-byte name.
- Implement some helper APIs for better code refactoring.
- TODO: Get rid of PspGetImagePath and wrap around SeLocateProcessImageName instead.

svn path=/trunk/; revision=23303
2006-07-27 00:22:36 +00:00
Alex Ionescu
f0166aaf6e - Fix multiple bugs in VfatGetNameInformation:
* Return the file name length even if the buffer is too small, that's the whole point of the "Query length before comitting a buffer" principle.
  * FSDs are not supposed to null-terminate the buffer, nor expect the caller to send a buffer large enough for null-termination.
  * Added a hack in IopQueryFile to handle another VFAT bug which makes it return the total number of bytes written in IoStatus.Information instead of the total number of bytes *left untouched*.There are probably many other broken things due to this.
- Fix some length calculation bugs in IopQueryFile.

svn path=/trunk/; revision=23302
2006-07-27 00:13:14 +00:00
Johannes Anderwald
c0e140d91b * Ukrainian translation by Temarez (bug 1713)
* fix a warning

svn path=/trunk/; revision=23301
2006-07-26 20:41:38 +00:00
Alex Ionescu
4a34b5d7b6 - More kernel fun
svn path=/trunk/; revision=23298
2006-07-26 07:18:06 +00:00
Maarten Bosma
37fbfe0d73 Added module list needed to generate the xml. It contains all Kernel, KernelModeDLL, NativeDLL and Win32DLL modules. I produced it by hacking rbuild.
svn path=/trunk/; revision=23295
2006-07-25 21:45:23 +00:00
Maarten Bosma
f83c1d1963 Copy the needed xsl file from trunk\cis to tools\rgenstat\web.
svn path=/trunk/; revision=23294
2006-07-25 21:34:21 +00:00
Ged Murphy
c4abac4743 Export CPlApplet() as stdcall
patch from Thomas Weidenmueller 

svn path=/trunk/; revision=23293
2006-07-25 21:19:31 +00:00
Alex Ionescu
986d920762 - Fix a bug in LPC creation (missing one handle) and LPC closing (was not properly closing the port). This caused LPC_PORT_CLOSED never to be sent, and thus CSRSS never received and never closed its handle of the process, meaning that all win32 processes leaked.
- As a result, processes can die again, and also be killed by Task Manager.
- And finally, "Exit" in cmd.exe as well as pressing the "x" button work.

svn path=/trunk/; revision=23292
2006-07-25 20:21:24 +00:00
Ged Murphy
fb050d7eb5 quick build fix
Code needs fixing (and formatting) correctly.

svn path=/trunk/; revision=23291
2006-07-25 20:02:26 +00:00
Alex Ionescu
a9183e6f8f - Hack FPU handler. 2nd stage installation now works if you had a crash, as well as any other crash where your trace indidicated one of the following: "CoordLpToDP", "KiHandleFpuFault".
svn path=/trunk/; revision=23290
2006-07-25 19:49:53 +00:00
Magnus Olsen
b1961cb16c Move some stuff from createsurface to startup.c
Bugfix some other stuff

svn path=/trunk/; revision=23289
2006-07-25 19:20:49 +00:00
Magnus Olsen
4ca3d3c07b rewrote Main_DDrawSurface_AddAttachedSurface lite so we are using Gdientry DdattachSurface and using wine attach code.
to keep Hal compatible. 
 

svn path=/trunk/; revision=23288
2006-07-25 17:31:07 +00:00
Magnus Olsen
21f9a961c8 Implement Main_DDrawSurface_EnumAttachedSurfaces after wine desgin of it
we need rewrite Createsurface and Implement AttahedSurface 
Thanks to wine code and some wine devloper to expain how it works

I got one more directx sdk sample working parlty with this change. 


svn path=/trunk/; revision=23287
2006-07-25 16:57:57 +00:00
Magnus Olsen
0b21a745a5 fixing bsod in GetAttachSurface when pointer is NULL
svn path=/trunk/; revision=23286
2006-07-25 16:04:10 +00:00
Maarten Bosma
2e4a553ff9 Also committed the red leds because they are way better readable.
svn path=/trunk/; revision=23285
2006-07-25 14:59:13 +00:00
Maarten Bosma
cb544d38c3 Apal (Bug 1632): "I tested winemine but I really didn't enjoy the color combination, so I decided to change it a little bit so as to appear more like classic Windows' minesweeper!"
svn path=/trunk/; revision=23284
2006-07-25 14:43:00 +00:00
Magnus Olsen
3fadd1de23 Implement Main_DDrawSurface_GetAttachedSurface after wine desgin of it
we need rewrite Createsurface and Implement AttahedSurface 
Thanks to wine code and some wine devloper to expain how it works

svn path=/trunk/; revision=23283
2006-07-25 12:21:00 +00:00
Magnus Olsen
c9bdabd39c patch from LMH1 : Bug#: 1678 : Norwegian translation
svn path=/trunk/; revision=23282
2006-07-25 09:02:45 +00:00
Magnus Olsen
23904d50da patch from LMH1 : Bug#: 1677 : Norwegian translation
svn path=/trunk/; revision=23281
2006-07-25 08:57:37 +00:00
Magnus Olsen
174722893e patch from LMH1 : Bug#: 1676 : Norwegian translation
svn path=/trunk/; revision=23280
2006-07-25 08:41:07 +00:00
Johannes Anderwald
2a6b31d0e7 Ukraianian translation by Temarez
svn path=/trunk/; revision=23279
2006-07-25 07:12:28 +00:00
Johannes Anderwald
667ed9aa18 Ukraianian translation by Temarez
svn path=/trunk/; revision=23278
2006-07-25 07:10:14 +00:00
Johannes Anderwald
0c45200a84 Ukraianian translation by Temarez
svn path=/trunk/; revision=23277
2006-07-25 07:06:38 +00:00
Johannes Anderwald
b3d053f7bd Ukraianian translation by Temarez
svn path=/trunk/; revision=23276
2006-07-25 07:03:34 +00:00
Johannes Anderwald
e42675c8e7 Ukraianian translation by Temarez
svn path=/trunk/; revision=23275
2006-07-25 07:02:51 +00:00
James Tabor
b8da24b40b Broken explorer popups with IsBadString, revert string pointer checking. Misc fix to win32k menu and removed byposition flag check and save.
svn path=/trunk/; revision=23274
2006-07-25 00:50:35 +00:00
Magnus Olsen
f1470917fa 1. Cleanup some stuff
2. Fixing the build again
3. Fixing a memory leak.

svn path=/trunk/; revision=23273
2006-07-24 22:02:13 +00:00
Magnus Olsen
6561a4a6b2 Kill more of the old design.
svn path=/trunk/; revision=23272
2006-07-24 21:51:31 +00:00
The Wine Synchronizer
0f10d5736f Alexey Minnekhanov:
- Registry keys are created if they don't exist
 - "Custom colors" are stored in the registry too now (tested to work under Windows XP)
 - Fixed a check during adding of a new wallpaper to the list. Now it will actually deny addition of the same wallpaper image more than once
 - Some TAB -> Spaces fixes

svn path=/trunk/; revision=23271
2006-07-24 21:24:10 +00:00
Magnus Olsen
36b80aa9b3 Kill more of the old design.
svn path=/trunk/; revision=23270
2006-07-24 21:00:01 +00:00
Magnus Olsen
af150158bb Kill more of the old design.
svn path=/trunk/; revision=23269
2006-07-24 19:13:31 +00:00
Magnus Olsen
44cab3a37e Sorry I have create a mess in ddraw.c
1. found why createsurface did stop working, fixed
2. Split some surface member betwin gbl and lcl struct 
3. Reimplement the revert I did, implement Revision: 23263 and Revision: 23262 again
4. Revert new createsurface code and setdisplay mode code that was intrudes 
5. Alot other changes as well. 
6. Todo Need remove the old code for HAL and HEL split. 
7. move Our ddraw working again with apps it did work with.
8. Almost complete kill the file ddraw_hal.c some api is left be kill for at moment they are in use




svn path=/trunk/; revision=23268
2006-07-24 18:29:02 +00:00
Hervé Poussineau
5b0708bb5f Entries in HKLM\SYSTEM\CurrentControlSet\Control\NLS\Locale should be of type REG_SZ, not REG_DWORD
svn path=/trunk/; revision=23267
2006-07-24 16:46:23 +00:00
Magnus Olsen
8a9ccfa7da revert Revision: 23263 and Revision: 23262 something is wrong with them
svn path=/trunk/; revision=23266
2006-07-24 15:37:03 +00:00
Hervé Poussineau
1a11ca877f Don't try to free twice a pointer.
svn path=/trunk/; revision=23264
2006-07-24 12:14:26 +00:00
Magnus Olsen
8f7ebb2923 Kill a ungly hack; I will rewrite it later
svn path=/trunk/; revision=23263
2006-07-24 08:34:18 +00:00
Magnus Olsen
836b9930a0 1. move some member from global DirectDraw struct to Surface struct.
2. Free some memory I forget
3. Move some surface code to startup.c for it is global info. 
4. Cleaning up bit more in ddraw_main.c 

Regress to createsurface for some apps that did work. 
Can not be help at moment. only 1 ms dx sdk 6 directdraw apps work, and DrFred demo apps. 
will fix this regress later. 
 

svn path=/trunk/; revision=23262
2006-07-24 08:31:22 +00:00
Magnus Olsen
a937d122c1 Revert 23251 it causing regress and it is ungly hack
svn path=/trunk/; revision=23261
2006-07-24 06:28:30 +00:00
Alex Ionescu
9b5a87cdac - Fix trace macro to print line number in decimal, not hex.
- Implement PspSetCrossThreadFlag and PspClearCrossThreadFlag and use them. Thanks to Thomas for the idea.
- Fix a bug in Fast Referencing, thanks to Thomas.

svn path=/trunk/; revision=23260
2006-07-23 21:38:31 +00:00
Magnus Olsen
5cfb6a6d48 really small change using DDSURFACEDESC2 instead of DDSURFACEDESC, for these struct basic same but DDSURFACEDESC2 have few more member at end. and it is type casted around DDSURFACEDESC when it pass down. u can found that info in msdn, ddk, sdk
svn path=/trunk/; revision=23259
2006-07-23 20:54:53 +00:00
Magnus Olsen
7b88a669e2 Forget remove ref in rosdraw.h
svn path=/trunk/; revision=23258
2006-07-23 20:39:46 +00:00
Magnus Olsen
414ef85877 1. start Cleaning up ddraw_main.c
2. Implement (not tested) CreatePalette it can use HAL or HEL 
3. change DirectDraw_Addref and DirectDraw_Release using document dwRefCnt in DDRAWI_DIRECTDRAW_LCL
4. change Palette_Addref and Palette_Release using document dwRefCnt in DDRAWI_DDRAWPALETTE_GBL

more cleanup will follow

svn path=/trunk/; revision=23257
2006-07-23 20:38:28 +00:00
Alex Ionescu
251250ad96 - Temporarly disable screensaver code. Sorry greatlord but you're creating 150 realtime threads per minute and killing the system with the code. Please fix it.
- Fix some incorrect tracing macro usage and make it add the current line.
- Re-organize I/O bugs per priority.

svn path=/trunk/; revision=23256
2006-07-23 20:12:45 +00:00
Magnus Olsen
c9ef32aff5 Forget commit some changes
svn path=/trunk/; revision=23255
2006-07-23 19:57:36 +00:00
Alex Ionescu
881a60f895 - Add tracing in process/thread.c as well.
- Add a new tracing class/macro for reference counts and add it in kill/process/thread.c.
- Remove tracing TODO from kernel fun.

svn path=/trunk/; revision=23254
2006-07-23 19:45:16 +00:00
Magnus Olsen
6cf55b644f Patch from w3seek
svn path=/trunk/; revision=23253
2006-07-23 19:14:19 +00:00
Magnus Olsen
92583a9250 1. Implement check for DDCREATE_HARDWAREONLY and DDCREATE_EMULATIONONLY in CreateDraw and CreateDrawEx
2. Implement activate of DDCREATE_HARDWAREONLY and DDCREATE_EMULATIONONLY in StartupDirectDraw
3. Fix correct return value when pUnkOuter is not NULL in CreateDraw and CreateDrawEx

Now we can activate deactive HAL or HEL and use one of thuse interface.

svn path=/trunk/; revision=23252
2006-07-23 19:03:41 +00:00
Johannes Anderwald
bef2c32a89 * use supplied parent window handle when class is of type system
* this is temp hack for getting edit controls with notification windows going
* reduces user32_winetest.exe from 43 to 2 total faults

svn path=/trunk/; revision=23251
2006-07-23 18:12:19 +00:00
Alex Ionescu
e685ced6d0 - Add ObGetObjectSecurity calls like in PspCreateProcess to check the thread's level of access towards itself.
- Add code to handle two more failure (the last, afaics) cases.
- Get rid of 2 kernel fun entries.

svn path=/trunk/; revision=23250
2006-07-23 17:56:57 +00:00
Alex Ionescu
3774a4b259 - Acquire Process lock when touching the thread list entry and incrementing the process' active threads.
- Set the Thread Create Time on creation, I had forgotten this!
- Handle failures for thread-safety/race conditions. If the process was deleted or the thread terminated behind our back, then go through a manual un-initalization code path.
- Just like previous process patch, add code to now create an access state with SeCreateAccessStateEx.
- Handle failure of ObInsertObject.

svn path=/trunk/; revision=23249
2006-07-23 17:45:30 +00:00
Alex Ionescu
78ffb6aecc - Make use of PsChangeQuantumTable on system startup to setup the raw priority separation.
- Call PspComputeQuantumAndPriority in PspCreateProcess to calculate process base priority and quantum for child threads.
- Add security code to calculate process's access rights to itself, as documented in WI II.

svn path=/trunk/; revision=23248
2006-07-23 17:01:43 +00:00
Magnus Olsen
b1bc28f878 1. Remove more dead code after all commit
2. Move Cleanup code to own file.

svn path=/trunk/; revision=23247
2006-07-23 15:37:57 +00:00
Magnus Olsen
a845d3f67d Implement HELDdSetmode
1. it is hacked, this small hack need be rewriten later. 
   But lest we got back same compatible we had with our ddraw.dll
   in windows. 

svn path=/trunk/; revision=23246
2006-07-23 15:09:06 +00:00
Magnus Olsen
5bd92faae5 Remove alot HAL and HEL split and make the split into startup.c instead.
it will save us the time to write same code twice. and it is extream 
easy to adding HEL api. U can look at ddk and sdk how Dd* api works
and write then proper HEL for it. 

1. I have break the HEL version of set display for we need it follow DdSetMode 
   and no code have been rewriten for it yet.


 

svn path=/trunk/; revision=23245
2006-07-23 13:13:07 +00:00
Eric Kohl
534e2e28c0 Implement CM_Get_Log_Conf_Priority[_Ex] and add PNP_GetLogConfPriority stub.
svn path=/trunk/; revision=23242
2006-07-23 10:35:27 +00:00
Magnus Olsen
c1ecf8175e Now is the move of all startup code complete.
Starting redesign it. and alot of files will be delete

svn path=/trunk/; revision=23241
2006-07-23 10:21:30 +00:00
Magnus Olsen
bbc166ce1d move more code into startup.c
svn path=/trunk/; revision=23240
2006-07-23 10:12:08 +00:00
Johannes Anderwald
11459c8cc4 * add ukrainian translation by Temarez
* fixes bug 1706

svn path=/trunk/; revision=23239
2006-07-23 09:59:30 +00:00
Magnus Olsen
a3842a1f4e Start cleaing up DDraw.dll I start moving all startup code for HAL and HEL to startup.c. It will kill alot of files and code
and we can adodate our ddraw to wine ddraw design, at end. 

svn path=/trunk/; revision=23238
2006-07-23 09:57:15 +00:00
Johannes Anderwald
ca4d6063a2 * add automatic powrprof diff for winesync
svn path=/trunk/; revision=23237
2006-07-23 09:56:59 +00:00
Alex Ionescu
1223ca9cab - Refactor SeCaptureSubjectContext into SeCaptureSubjectContextEx and SeCreateAccessState into SeCreateAccessStateEx. The *Ex routines allow specifying a custom process/thread which isn't the current one. This is useful when creating a new process or thread since we're not actually in it.
- Implemented a bit more security calls in PspCreateProcess as seen in WI II. We now create an AccessState.
- Also write the PID in the ObjectTable.

svn path=/trunk/; revision=23236
2006-07-23 08:20:57 +00:00
Alex Ionescu
a92eec4397 - SeAccessCheck should assume failure if no SD was passed. Also fixes bugcheck on startup since processes don't currently have SDs.
svn path=/trunk/; revision=23235
2006-07-23 07:24:20 +00:00
Alex Ionescu
a818a86bf9 - Fixup PSTRACE to print much nicer output and actually work.
- Add tracing for security.c and kill.c.

svn path=/trunk/; revision=23234
2006-07-23 07:13:19 +00:00
Alex Ionescu
90ea51a96b - ImperstionationLocale -> ImpersonationLocale.
- Implement PspWriteTebImpersonationInfo for setting the impersonation locale and impersonation status in the TEB (since User-mode needs to read this value and we don't want to NtQueryInformationThread for it each time to read the ETHERAD flag).
- Complete the implementation of PspSetPrimaryToken to recalculate a process's access rights to itself based on a new primary token.
- Reorganize ps.h header like ob.h and io.h, implement Tracing support but not the tracing itself yet.
- Get rid of some deprecated cruft.

svn path=/trunk/; revision=23233
2006-07-23 05:43:28 +00:00
Alex Ionescu
04e0d8c7bf [AUDIT] - The entire /kd directory is clear. We do not implement any Kd support in ReactOS, and I very much doubt someone implemented GDB or BOCHS support based reverse-engineering NT since NT happens not to have a GDB/BOCHS stub built-in (what a surprise!).
svn path=/trunk/; revision=23232
2006-07-23 05:43:00 +00:00
Alex Ionescu
59c6a927a2 - CT_ACTIVE_IMPERSTIONATION_INFO_BIT -> CT_ACTIVE_IMPERSONATION_INFO_BIT
- Added Process and Thread locking inlined functions for Ps Security functions.
- Thread safety is your friend! Huge rework of almost all the functions in ps/security.c to use the process/thread pushlocks and use interlocked operations when dealing with the ActiveImpersonationInfo thread flag.
- Added PAGED_CODE().
- Added checks for Processes with Jobs for the day that will happen.
- PsAssignImpersoonationToken with a NULL token handle means simply to revert to self.
- Don't ignore the HandleAttributes in NtOpenProcessTokenEx.
- Use SeTokenType to make sure the token passed is an impersonation token.
- Remove some fixed bugs in krnlfun.c, add more TODOs.

svn path=/trunk/; revision=23231
2006-07-22 22:57:42 +00:00
Klemens Friedl
0cc0655c20 Add software patent setting to build config template.
Implement the setting in freetype2 (rbuild file).

svn path=/trunk/; revision=23230
2006-07-22 19:38:18 +00:00
Alex Ionescu
7af4849812 - Implement KiRecalculateDueTime to handle cases where a timeout wait has been interupted by an APC or alerted, and it needs to be recalculated in the relative case. (This fixes the "contact alex" bugcheck).
svn path=/trunk/; revision=23229
2006-07-22 17:19:09 +00:00
Brandon Turner
d310e2ae8c Fix typo.
svn path=/trunk/; revision=23228
2006-07-22 17:03:00 +00:00
Brandon Turner
25b81049eb Partially implement:
NtUserCallHwndOpt
NtUserGetThreadState
Implement
GetProgmanWindow
GetTaskmanWindow
This is (kinda)part of bug 1668

svn path=/trunk/; revision=23227
2006-07-22 16:50:23 +00:00
Alex Ionescu
db04986dce - Give winlogon SE_ASSIGNPRIMARYTOKEN_PRIVILEGE because it was lacking it and would fail under this kernel patch.
- PspAssignPrimaryToken was good enough for actually *assigning* the token, but when NtSetInfoProcess is called with ProcessPrimaryToken, we want to do a lot more then just randomly assigning it. Added PspSetPrimaryToken which first verifies if the token being assigned is a child token and if not, checks for SeAssignPrimaryTokenPrivilege. Also added a fixme for more code that's needed, to actually re-calculate the process's granted access towards itself. Also added thread-safety.

svn path=/trunk/; revision=23226
2006-07-22 16:03:12 +00:00
Eric Kohl
e553dd4145 Implement CM_Get_Next_Log_Conf[_Ex] and add PNP_GetNextLogConf stub.
svn path=/trunk/; revision=23225
2006-07-22 14:45:14 +00:00
James Tabor
7f907bd0ac Fix for TrackMouseEvent by Dmitry Timoshkov, wine port.
svn path=/trunk/; revision=23224
2006-07-22 07:04:44 +00:00
Brandon Turner
1c87e124a6 you can thank me later jim ;)
svn path=/trunk/; revision=23223
2006-07-22 05:50:06 +00:00
James Tabor
db1b46702a Put back revision 23192
svn path=/trunk/; revision=23222
2006-07-22 05:37:33 +00:00
James Tabor
07b6ddc2b6 -Part 1
-Win32k and User32
  - Menu.c: Made set menu items selective masking. Setting masks fixed the garbage going into the item structure. Now right justify menu bar works. There are some more cosmetic issues left to do. I have those ready next week or so. Running wine menu test fail due to exception in kernel32 IsBadStringPtrA&W isbad.c. Funny? Does PSEH work in user mode? The string test is needed. Misc fixed, some restructuring and Wine ports. Please let me know if it breaks something.

svn path=/trunk/; revision=23221
2006-07-22 05:28:44 +00:00
Brandon Turner
4a6251c297 Revert my backspace patch from before. I found a better way to handle backspaces which doesnt break backspacing in ftp.exe(and some of apps) while still fixing ncftp.exe.
svn path=/trunk/; revision=23220
2006-07-22 05:16:26 +00:00
Hervé Poussineau
c1d9e2bb6c Get rid of TCHAR variables. Use WCHAR instead.
svn path=/trunk/; revision=23219
2006-07-21 22:15:21 +00:00
Brandon Turner
a6bd824e02 Fix the horribly broken SetProgramWindow implementation
svn path=/trunk/; revision=23218
2006-07-21 21:11:46 +00:00
Alex Ionescu
da390966cc - Add bugcheck CRITICAL_OBJECT_TERMINATED
- Implement PspCatchCriticalBreak and fix the 5 or so FIXMEs that depended on it.

svn path=/trunk/; revision=23216
2006-07-21 19:59:16 +00:00
Hervé Poussineau
4dfbe6ea8c Add a hack to be able to use serial mice again (IRP_MJ_CLOSE is not set after IoGetDeviceObjectPointer() + ObDereferenceObject())
svn path=/trunk/; revision=23215
2006-07-21 19:49:32 +00:00
Alex Ionescu
2f2139d851 - Implement Kernel, Memory Manager and Process Manager APIs for the following concepts (not yet used):
- Process Quantum.
  - Fixed and Variable Quantum Tables.
  - Long and Short Quantum Variability.
  - Priority Separation and Separation Masks.
  - Foreground Quantum Table.
  - Process Priority, Priority Modes and Priority Classes.
  - Virtual Memory Priority
  - Job Scheduling Classes
- Implement PsSetProcessPriorityByClass.

svn path=/trunk/; revision=23214
2006-07-21 19:28:38 +00:00
Hervé Poussineau
3ea8db48b1 Fix regression introduced in r23174, which prevented autochk to work
svn path=/trunk/; revision=23212
2006-07-21 19:00:28 +00:00
The Wine Synchronizer
9924c52e90 Autosyncing with Wine HEAD
svn path=/trunk/; revision=23211
2006-07-21 13:07:57 +00:00
The Wine Synchronizer
fb4c0e59ed Autosyncing with Wine HEAD
svn path=/trunk/; revision=23210
2006-07-21 13:07:51 +00:00
The Wine Synchronizer
6c0bd6bc60 Autosyncing with Wine HEAD
svn path=/trunk/; revision=23209
2006-07-21 13:05:13 +00:00
The Wine Synchronizer
d2f18185df Autosyncing with Wine HEAD
svn path=/trunk/; revision=23208
2006-07-21 13:05:07 +00:00
The Wine Synchronizer
9046d40509 Autosyncing with Wine HEAD
svn path=/trunk/; revision=23207
2006-07-21 13:05:00 +00:00
The Wine Synchronizer
5a5dc9a1c4 Autosyncing with Wine HEAD
svn path=/trunk/; revision=23206
2006-07-21 13:04:55 +00:00
The Wine Synchronizer
e1450f1b74 Autosyncing with Wine HEAD
svn path=/trunk/; revision=23205
2006-07-21 13:04:49 +00:00
Aleksey Bragin
c280f26aa5 Update autosyncing status of Wine-shared DLLs
svn path=/trunk/; revision=23204
2006-07-21 12:49:46 +00:00
The Wine Synchronizer
b82b5be98b Autosyncing with Wine HEAD
svn path=/trunk/; revision=23203
2006-07-21 11:30:20 +00:00
The Wine Synchronizer
4a1626a594 Autosyncing with Wine HEAD
svn path=/trunk/; revision=23202
2006-07-21 11:20:23 +00:00
The Wine Synchronizer
fb9067d427 Autosyncing with Wine HEAD
svn path=/trunk/; revision=23201
2006-07-21 11:13:18 +00:00
Magnus Olsen
74739f95d9 patch from LMH1 : Bug#: 1675 : Norwegian translation
svn path=/trunk/; revision=23200
2006-07-21 10:23:55 +00:00
Alex Ionescu
0355e26a86 - Use safe referencing.
- Fix a bug in PsGetNextProcess(Thread) since we now use safe referencing and the lookup loop can continue.

svn path=/trunk/; revision=23199
2006-07-20 18:47:35 +00:00
Alex Ionescu
5da6c3508f - Refactor NtSuspend/ResumeThread into PsSuspend/ResumeThread.
- Implement NtSuspend/ResumeProcess with PsSuspend/ResumeProcess.
- Improve the previous code to use rundown protection and be thread-safe.

svn path=/trunk/; revision=23198
2006-07-20 18:29:54 +00:00
Alex Ionescu
e9600e4c9c - Add Pushlock support for GCC (Thanks Thomas!)
- Remove a bunch of deprecated crap from ps.h
- Get rid of PsLockProcess, PsUnlockProcess. Use the process pushlock instead.
- When assigning the job, only acquiring rundown protection is enough.
- Use interlocked intrinsics for setting the ExceptionPort instead of locking the entire process object.
- Disable locking in ProcessSessionInformation for NtSetInformationProcess. The whole API seems wrong anyway, on my XP machine calling it does not change the session or change any token data. To verify later...

svn path=/trunk/; revision=23197
2006-07-20 17:44:30 +00:00
Michele Cicciotti
82aa6e1250 Too many changes to list here! just see screenshot: http://img352.imageshack.us/my.php?image=socloseta2.png (not pictured: artifacts due to sometimes-broken handling of window region refreshing)
The graphics, mouse and keyboard are virtually done. Mouse wheel works. Still some bugs in the handling of binary raster operation codes, but less than before. Fixed polyline. Fixed all cursor issues. Fully supports text output. Fixed a resource leak where all clipping region were slowly leaked. Now closes cleanly on server disconnect

Moving on to more fun things!

Many thanks to filip & WaxDragon for the code of the previous Win32 port, it was misleading at times but very useful overall!

svn path=/trunk/; revision=23196
2006-07-20 17:11:00 +00:00
Alex Ionescu
40a3a52a7b - Add some final missing annotations to kill.c
[AUDIT]
 - Most of the functions are documented at length in Windows Internals II and at a more high-level fashion in Windows Internals 4 and were based on that information. Undocumented routines were based of the operations done in the documented ones (for example, freeing buffers that we know were allocated, etc).

svn path=/trunk/; revision=23195
2006-07-20 16:30:07 +00:00
Alex Ionescu
a92681004e - Move a bunch of externs to ps.h and delete many dupped/tripped ones.
- Change FAST_MUTEX PsActiveProcessMutex to KGUARDED_MUTEX.
- Define PS Flags and use them, isntead of magic numbers. (For magic mushrooms, you'll have to wait a while, these aren't implemented yet).

svn path=/trunk/; revision=23194
2006-07-20 16:26:10 +00:00
Alex Ionescu
a74eda7fe8 - Fix Win32K thread rundown bug, fixes shutdown crash and other bugchecks where some ASSERT(Class->windows) wasn't 0.
- Close the right debug handle instead of some random value.
- Some generic formatting cleanup.

svn path=/trunk/; revision=23193
2006-07-20 15:46:10 +00:00
Alex Ionescu
502215cb1c - Simplify PsGetNextProcess so it works like PsGetNextProcessThread.
- Reformat and annotate parts of process.c
- Remove PsGetWin32Process, PsGetWin32Thread and implement/export the real functions PsGetCurrentProcessWin32Process, PsGetCurrentThreadWin32Thread, change win32k to use them.
- Initailize and use process rundown.
- Set corrent GrantedAccess.
- Remove an extra incorrect reference we were adding to processes.
- Implement PsIsProcessBeingDebugged.
- Make the same changes to NtOpenProcess that we did previously to NtOpenThread.

svn path=/trunk/; revision=23192
2006-07-20 14:53:47 +00:00
Aleksey Bragin
18726a1fac Spaces -> TABs, no contents change
svn path=/trunk/; revision=23191
2006-07-20 09:32:50 +00:00
Magnus Olsen
e0377113db start spliting up my code. I been writing
1. DD_CALLBACKS code writen by me have been move to dd.c 

2. follow DD_CALLBACKS api is working as they should 
   NtGdiDdWaitForVerticalBlank, NtGdiDdCanCreateSurface, NtGdiDdGetScanLine

3. follow api does not working as it should, is it gdi32 problem or win32k problem for it ?
   NtGdiDdCreateSurface

4. Start rewriten surf callback and cleanup some code 
   alot wrong with them.

5. start moving surface callback to ddsurf.c 
 

 

svn path=/trunk/; revision=23189
2006-07-20 07:23:21 +00:00
Hervé Poussineau
7b45b10011 Rename twain32.rbuild to twain_32.rbuild
svn path=/trunk/; revision=23188
2006-07-20 07:09:20 +00:00
Hervé Poussineau
85a4e7f1ba Delete now useless twain directory
svn path=/trunk/; revision=23186
2006-07-20 06:38:33 +00:00
Hervé Poussineau
a5440df642 Forgot to commit this file with previous commit ;)
svn path=/trunk/; revision=23185
2006-07-20 06:27:35 +00:00
Hervé Poussineau
19dabc7661 Copy twain directory to twain_32
svn path=/trunk/; revision=23184
2006-07-20 06:26:09 +00:00
Filip Navara
602677e8f5 Fix a bug in RtlMultiByteToUnicodeSize. Credits belong to whoever debugged it.
svn path=/trunk/; revision=23183
2006-07-20 06:25:51 +00:00
Hervé Poussineau
2c1a305f03 Rename twain32.rbuild to twain_32.rbuild
svn path=/trunk/; revision=23182
2006-07-20 06:15:24 +00:00
Alex Ionescu
50f095a47e - Fix for bug 1703. reported by gkrupa.
svn path=/trunk/; revision=23181
2006-07-20 05:39:40 +00:00
Alex Ionescu
d4cceffe59 [AUDIT]
- 90% of the functions in this file are 1 line functions which set or get a value from ETHREAD.
 - The other 4 functions are related to User and System Thread Startup APCs, which are documented in gruesome detail and pseudo-code in Windows Internals 4 and Windows Internals II, as well as the main Thread Creation routine (PspCreateThread) which is one of the most well documented internal routines of NT. Code was developped in conjuction with WI4 and WI II.

svn path=/trunk/; revision=23180
2006-07-20 05:37:12 +00:00
Alex Ionescu
ed65a3293e - Move ExGetPreviousMode to \ex, it's not a Ps function
- Organize thread.c into private/public functions properly.
- Do another pass of formatting fixes and function annotation.
- Fix a bug in PspSystemStartup.
- Properly hold object references towards a thread that's being created.
- Set the Thread->GrantedAccess value.
- Update NtOpenThread to use an Access State since these work now and Ob respects them, and also add a special hack present on NT: If the SeDEbugPrivilege is present, then the caller will get full thread access regardless of his rights.

svn path=/trunk/; revision=23179
2006-07-20 05:33:03 +00:00
Alex Ionescu
88aac74efb - More kernel fun.
svn path=/trunk/; revision=23178
2006-07-20 03:10:32 +00:00
Alex Ionescu
9bd4990de5 [AUDIT]
- PspGetImagePath: internal to ROS and reads the image path pretty differently from how NT does it.
 - NtQuery/Set functions: although huge in size, they are just a set of 2-10 line sub-functions which only transfer data from EPROCESS into a usermode structure or vice-versa. Fully documented in Nebett's book, and we have many test cases in the tree which show their clean implementation.
 - Also, our nice automatgic buffer validation and size checks are 100% Thomas's genius and not used in NT at all.
 - Thus, file is clean.

svn path=/trunk/; revision=23177
2006-07-20 03:09:40 +00:00
Alex Ionescu
6e8d8b5e84 - Formatting cleanup and optimizations to NtSetInformationProcess.
svn path=/trunk/; revision=23176
2006-07-20 03:05:46 +00:00
Alex Ionescu
2278c2914f - Major formatting cleanup and optimizations to NtQueryInformationProcess so that it does not burn the eyes of anyone that might attempt to read it.
svn path=/trunk/; revision=23175
2006-07-20 00:13:09 +00:00
Alex Ionescu
69995705e9 - Cleanup the mess in query.c by reformatting the code to remove tab/space confusion and 2-space identation.
- Removed the InfoClass tables and got rid of the thread semi-infoclass table. Created a real InfoClass stub table for thread information
- Moved info class tables to a new header, ps_i.h
- Simplified syntax of info class macros so that sizeof() is done automatically for the type/alignment.
- Reformatted the tables completely to present them in a plesing, ordered, readable fashion.
- Added some missing info classes.
- Added ARRAYSIZE, RTL_NUMBER_OF(V1/V2) and used them in the info code.
- *TEMPORARILY* disable NtQuery/SetThreadInformation until next patch when it can be made to work.

svn path=/trunk/; revision=23174
2006-07-19 23:21:19 +00:00
Aleksey Bragin
d78c254a8d Revert 23170, since these registry keys should not be mandatory (simple test case: delete this registry entry in Windows XP using regedit, open desk.cpl, choose your params, click apply - all registry entries will be re-created).
Fix for reactos desk.cpl will follow.

svn path=/trunk/; revision=23173
2006-07-19 19:43:55 +00:00
Maarten Bosma
6eca31ac9d - Use clipper so we can use a normal instead of a popup window
- Fix my old coding style and get rid of main.h
- Change he color to pink for alternation

svn path=/trunk/; revision=23172
2006-07-19 10:30:30 +00:00
Aleksey Bragin
d1ecea1424 Alexey Minnekhanov (minlexx@rambler.ru):
- Implement setting of desktop background color. This feature is tested to work in Windows XP, however in ReactOS the setting currently does no effect.
- Improve russian translation, also check and fix layout/placement (so that russian words actually fit)

svn path=/trunk/; revision=23171
2006-07-19 08:45:21 +00:00
Aleksey Bragin
85f58646b3 Add HKCU\Control Panel\Colors\Background key for storing desktop background color (Windows XP stores it in this key)
svn path=/trunk/; revision=23170
2006-07-19 08:40:38 +00:00
James Tabor
bf0906f9ed User32 Implement MenuTrackKbdMenuBar, it does work but, alt f works but hit alt again goes into a message loop. So hit alt f than esc esc. If hit alt f than alt v or something else the popup menu stays displayed until the program has terminated.
svn path=/trunk/; revision=23169
2006-07-19 07:10:56 +00:00
Magnus Olsen
ed119adcef hacking NtGdiDdResetVisrgn so it lest say clip have not change. for now
svn path=/trunk/; revision=23168
2006-07-19 02:14:26 +00:00
Magnus Olsen
64918dadb2 more source cleanup
svn path=/trunk/; revision=23167
2006-07-19 02:03:22 +00:00
Magnus Olsen
342b9f2cdb small cleanup of the code in this file.
and alot of callbacks working as they should if a drv support it.

svn path=/trunk/; revision=23166
2006-07-19 01:49:55 +00:00
Magnus Olsen
0353857608 Complete NtGdiDdQueryDirectDrawObject now we support all 3d callbacks.
svn path=/trunk/; revision=23165
2006-07-19 01:40:06 +00:00
Magnus Olsen
f2f19d2e9a cleanup NtGdiDdCreateSurface
we can now create a surface from DdCreateSurface. 

svn path=/trunk/; revision=23164
2006-07-19 00:41:18 +00:00
Magnus Olsen
5483a9b9dc Fixing small bug in DdCreateSurface
svn path=/trunk/; revision=23163
2006-07-19 00:39:03 +00:00
Magnus Olsen
fdcc54dc69 framebuf
Implement DdCreateSurface not tested. 
Bugfix the prototyped. 

svn path=/trunk/; revision=23162
2006-07-18 23:56:48 +00:00
Aleksey Bragin
d457403caf Add traceprints, and temporarily comment out NDEBUG
svn path=/trunk/; revision=23161
2006-07-18 19:06:30 +00:00
Magnus Olsen
8fdd3538a9 rewrote NtGdiDdQueryDirectDrawObject for I must have been drunk when I wrote it frist time.
Now we manger getting gdientry2 working more or less here is a log how far I have come 
I have not implement create surface for the drv yet. But it showing lest how far dxhaltest
comes. as u all can see it is not far before we getting dx hal working out of the box from
win32k and gdi32. I will thank all people that have been invlove in this, DrFred to helping debug betwin ddraw.dll gdi32.dll 
with his sniffer apps, Alex for GdiEntry2, and some other help, W3seek, Filip, GvG help me to understand how our win32k how it works
and some other info. to make so far posible, it is now posible to load a graphic driver directx hal support in ros. But I do not known how well it works yet, after it is the frist public version that working so far.  
 
ddraw.c:60) NtGdiDdCreateDirectDrawObject
ddraw.c:140) DirectDraw return handler 0x3b6001e4
ddraw.c:170) NtGdiDdQueryDirectDrawObject
ddraw.c:247) Found DirectDraw CallBack for 2D and 3D Hal
ddraw.c:170) NtGdiDdQueryDirectDrawObject
ddraw.c:247) Found DirectDraw CallBack for 2D and 3D Hal
ddraw.c:432) NtGdiDdCanCreateSurface
ddraw.c:348) NtGdiDdCreateSurface

svn path=/trunk/; revision=23160
2006-07-18 19:04:41 +00:00
Magnus Olsen
b1863c2944 DrvGetDirectDrawInfo
fixing a bug I did set halinfo to wrong size

svn path=/trunk/; revision=23159
2006-07-18 18:55:11 +00:00
James Tabor
83ef67c550 Little patch, help distinguish between Bitmap and Text drawing or do both. dwTypeData is a pointer going to the user not the true text pointer of the menu item and should not be used for checking if menu item has text.
svn path=/trunk/; revision=23158
2006-07-18 17:29:34 +00:00
Aleksey Bragin
8c7446addd Add two more test cases into ex timer testing
svn path=/trunk/; revision=23157
2006-07-18 16:49:11 +00:00
Magnus Olsen
97f449127c pathc from w3seek : bug 1702 : Fix BitScanReverse()
svn path=/trunk/; revision=23156
2006-07-18 16:36:54 +00:00
Magnus Olsen
55b8810a2b setup almost all info it need in DrvGetDirectDrawInfo, left todo is the rop table.
and debugging see if everything went right. it is eunght for me continue on next 
step in debugging  

svn path=/trunk/; revision=23155
2006-07-18 15:57:42 +00:00
Hervé Poussineau
353c1f9a6e Disable a few more warnings when using pshpackX.h/poppack.h
svn path=/trunk/; revision=23154
2006-07-18 15:50:13 +00:00
Hervé Poussineau
3dd1713e53 Fix headers, so MSVC can use them
svn path=/trunk/; revision=23153
2006-07-18 15:30:22 +00:00
Alex Ionescu
3d6bddb98f [AUDIT] security.c is mostly composed of trivial implementations of APIs that transfer one set of data from another, or simply wrap around complex Se* functions which do the actual work. There are one or two slightly more complex APIs (~15-20 lines), but they were written by Eric/Thomas, which are well-known for always writing clean code.
[FORMATTING] Re-formatted file properly, ordered functions and annotated them, added proper programmer credits, etc.
- Pushlocks need to be acquired in a -critical-, not -guarded- region.
- PsDisableImpersonation should return FALSE if it was already disbled.
- Don't forget to reference the token in PsReferenceEffectiveToken.
- PsImpersonateClient should still return success if it was given no token.
- PsImperstonateClient should de-reference the token if there is already active impersonation info.

svn path=/trunk/; revision=23152
2006-07-18 15:13:55 +00:00
Johannes Anderwald
fff24ee1dd add mouse properties registry keys
svn path=/trunk/; revision=23151
2006-07-18 14:48:53 +00:00
Hervé Poussineau
930a4d2351 Fix warnings detected by MSVC
svn path=/trunk/; revision=23150
2006-07-18 14:41:55 +00:00
Hervé Poussineau
b37ee32a56 Fix some 'unreferenced variable' warnings
svn path=/trunk/; revision=23149
2006-07-18 14:40:55 +00:00
Hervé Poussineau
999b44ccf2 Fix some 'unreferenced variable' warnings
svn path=/trunk/; revision=23148
2006-07-18 14:39:37 +00:00
Hervé Poussineau
c05ceaf190 Fix wrong library names in export files
svn path=/trunk/; revision=23147
2006-07-18 14:38:35 +00:00
Alex Ionescu
9170a29ef7 [AUDIT] - State.c is clean, it is merely a collection of trivial ~10 line wrappers around the actual kernel (Ke) functions which do the work.
- Rename suspend.c to state.c (since it also had resume APIs) and add alert APIs from kthread to it too.
- Fix a bug in one of the alert APIs which was probing for a valid pointer even if the caller had given NULL (which is valid if the caller doesn't want the previous state returned).

svn path=/trunk/; revision=23146
2006-07-18 14:34:06 +00:00
Hervé Poussineau
d9f7a999cf Fix some 'unreferenced variable' warnings
svn path=/trunk/; revision=23145
2006-07-18 13:56:00 +00:00
Hervé Poussineau
1a781d5bf4 Fix a warning (unused variable)
svn path=/trunk/; revision=23144
2006-07-18 13:55:22 +00:00
Johannes Anderwald
72301905a6 * check parameters
svn path=/trunk/; revision=23143
2006-07-18 13:45:37 +00:00
Johannes Anderwald
78bc2ae282 * check parameters in CreateAcceleratorTableA/W and DestroyAcceleratorTable
svn path=/trunk/; revision=23142
2006-07-18 13:44:39 +00:00
Magnus Olsen
adbc8e954a fill the DDHALINFO almost to 100% now, we are mising the rops table.
Almost all info that need be send back for frist call is done, 

svn path=/trunk/; revision=23141
2006-07-18 13:23:38 +00:00
Saveliy Tretiakov
a55aa2f49f Revert 21223 (was not good idea...)
svn path=/trunk/; revision=23140
2006-07-18 13:14:12 +00:00
Saveliy Tretiakov
5f77e6ae34 Add Andrew Munger (waxdragon) to credits.
svn path=/trunk/; revision=23139
2006-07-18 12:33:30 +00:00
Saveliy Tretiakov
ba51348c89 Add missing return value checks. Finally fix bug #1526
svn path=/trunk/; revision=23138
2006-07-18 12:19:07 +00:00
Saveliy Tretiakov
6a97df1eec Testapps for NtUserDrawCaption. (I sent the patch to ros-dev for review)
svn path=/trunk/; revision=23137
2006-07-18 11:59:22 +00:00
Hervé Poussineau
f0e080241f Correctly return information to caller
svn path=/trunk/; revision=23136
2006-07-18 11:55:40 +00:00
Saveliy Tretiakov
073eaa0b04 Make guiconsole window movable and respond to minimize and close buttons (regression caused by r22822)
svn path=/trunk/; revision=23135
2006-07-18 11:45:28 +00:00
Magnus Olsen
380d90d8a1 adding NULL pointer check for ppdev, pHalInfo, pdwNumHeaps, pdwNumFourCCCodes
fill in more info for DDHALINFO it is not complete yet.

svn path=/trunk/; revision=23134
2006-07-18 08:54:32 +00:00
Alex Ionescu
6cf95d5263 - Move ps/locale.c to ex/locale.c, since it has nothing to do with Process/Thread management (locale settings are part of the executive).
- Cleanup formatting in the file and add proper credits (Thomas and Eric).
- Create internal Exp* functions for Setting/Getting the user langid, since they need to be called 2, 3 times by other code and thus shared.
- Remove some deprecated code, make the functions themselves initialize the default ID when called for the first time (which should be done by winlogon --> it seems this isn't done yet?).
- Set default locale to 0x409 instead of 0x0.

svn path=/trunk/; revision=23133
2006-07-18 01:58:10 +00:00
Alex Ionescu
26331352ea - Kernel Fun
svn path=/trunk/; revision=23132
2006-07-18 00:51:09 +00:00
Alex Ionescu
a9bcf7b487 [AUDIT] - notify.c contains trivial (3 or 4 lines of code) implementations of adding a pointer to an array, and then looping said array and calling a pointer. Your grandmother could code this.
- Cleanup notify.c and fix the return value of PsSetCreateProcessNotifyRoutine.
- Create ps_x.h for inlined Ps routines and put the internal routines which call the registered callbacks in it.

svn path=/trunk/; revision=23131
2006-07-17 22:18:44 +00:00
Magnus Olsen
65316d9faa start implement DrvGetDirectDrawInfo it is not complete only around 1/3 is done
svn path=/trunk/; revision=23130
2006-07-17 22:14:58 +00:00
Hervé Poussineau
2c59aa9330 - kbdclass/mouclass should be able to return more than one keystroke/mouse move during a IRP_MJ_READ.
- Better cleanup in case of error in ClassAddDevice
- Registering the interface is optional. Don't fail in case of error.

svn path=/trunk/; revision=23129
2006-07-17 22:13:40 +00:00
Johannes Anderwald
de3f42794a * unlink menu object from window object on destroy
svn path=/trunk/; revision=23128
2006-07-17 19:16:30 +00:00
Alex Ionescu
7ddd4aa708 [FORMATTING] - Cleanup win32.c
[AUDIT] - Only function of interest is PsConverToGuiThread, heavily documented at:
http://www.windowsitlibrary.com/Content/356/07/1.html
http://www.osronline.com/lists_archive/ntdev/thread4614.html
http://www.i.u-tokyo.ac.jp/edu/training/ss/lecture/new-documents/Lectures/17-Win32K/Win32K.ppt

svn path=/trunk/; revision=23127
2006-07-17 17:32:58 +00:00
Magnus Olsen
d0ba1357ee more code, from alex patch I got over one year ago, thanks alex for all help and for all code he wrote.
and sorry for the mess at moment in the file. it will be pretty large update to this file, for the patch have been lying on my 
harddisk for some time. 



svn path=/trunk/; revision=23126
2006-07-17 16:27:13 +00:00
Alex Ionescu
e0dbaebab5 - Export Ps(S)GetContextThread
svn path=/trunk/; revision=23125
2006-07-17 14:31:15 +00:00
Alex Ionescu
1ee9504d8d - Factor out NtSet/GetContextThread implementation into PsGet/SetContexThread, new exported kernel APIs available to drivers, and export them.
- If the caller didn't request extended registers, don't probe the full CONTEXT structure.
- Use the proper trap frame in the kernel APC responsible for the context read/write.
- Always go through the APC instead of directly calling the Ke routine.
- Cleanup the code.
[AUDIT] - Mark file as clean. The NT APIs are stubs around the Ps APIs which simply setup an APC and stack context to an APC function that is again, merely a wrapper around the Ke function (which is not in this file).

svn path=/trunk/; revision=23124
2006-07-17 14:30:53 +00:00
Magnus Olsen
e1a8b7eeff patch from LMH1 : Bug#: 1674 : Norwegian translation
svn path=/trunk/; revision=23122
2006-07-17 08:20:16 +00:00
Magnus Olsen
445d240e4b patch from LMH1 : Bug#: 1644 : Norwegian translation
svn path=/trunk/; revision=23121
2006-07-17 08:14:27 +00:00
Magnus Olsen
1cb4e18908 patch from Apal : bug 1429 : greek translation
svn path=/trunk/; revision=23120
2006-07-17 07:53:10 +00:00
Magnus Olsen
7fef6a44ac patch from Apal : bug 1429 : greek translation
svn path=/trunk/; revision=23119
2006-07-17 07:49:42 +00:00
Magnus Olsen
00298de6bc patch from Apal : bug 1429 : greek translation
svn path=/trunk/; revision=23118
2006-07-17 07:38:53 +00:00
Magnus Olsen
5cb7a4f594 patch from Apal : bug 1429 : greek translation
svn path=/trunk/; revision=23117
2006-07-17 07:35:06 +00:00
Magnus Olsen
74bd4ace29 patch from LMH1 : Bug#: 1643 : Norwegian translation
svn path=/trunk/; revision=23116
2006-07-17 07:23:27 +00:00
Magnus Olsen
6924da266a patch from LMH1 : Bug#: 1642 : Norwegian translation
svn path=/trunk/; revision=23115
2006-07-17 07:18:36 +00:00
Alex Ionescu
8db06b0b73 - Fix two small bugs in NtQueryDirectoryObject.
- RDISK Count, Windowstation list enumeration now work on startup.
- Explorer's object viewer now works again.

svn path=/trunk/; revision=23114
2006-07-17 03:49:40 +00:00
Alex Ionescu
0957e22a49 - Finish up implementation of NtQueryDirectoryObject by doing the final conversion.
svn path=/trunk/; revision=23113
2006-07-17 03:24:41 +00:00
Alex Ionescu
96722f7c02 - Fix definition of OBJECT_DIRECTORY_INFORMATION
- Implement most of NtQueryDirectoryObject. It lacks the last step of converting the absolute buffer to a relative one. I have no idea why the old code was re-implemented in a recent commit when I clearly said I would fix this tonight.

svn path=/trunk/; revision=23112
2006-07-17 03:16:15 +00:00
Alex Ionescu
8baa71bb63 - Added another MSVC intrinsic to gcc (BitScanReverse). Thanks to Vampyre.
- Added very basic and skeletal NUMA code when creating a thread and process, currently only does some basic affinity checks and settings.
- Added a table and helper function (KeFindNextRightSetAffinity) for calculating affinity masks and sets.
- Split KeInitailizeThread into KeStartThread and KeInitThread, and modified Ps code to use the calls. Now added a failure case where Init fails, but we don't have to backout the entire effects of a "Start".
- Changes based on WI4 and Windows Internals II.

svn path=/trunk/; revision=23111
2006-07-17 01:40:10 +00:00
Magnus Olsen
7c1513c7eb patch from LMH1 : Bug#: 1641 : Norwegian translation
svn path=/trunk/; revision=23110
2006-07-17 01:15:56 +00:00
Magnus Olsen
2a8df0cc3d patch from LMH1 : Bug#: 1637 : Norwegian translation
svn path=/trunk/; revision=23109
2006-07-17 01:10:56 +00:00
Magnus Olsen
e5278ff085 patch from temarez : Bug#: 1635 : Ukrainian translation update and some new translations
svn path=/trunk/; revision=23108
2006-07-17 00:51:49 +00:00
Magnus Olsen
3774cda832 patch from temarez : Bug#: 1635 : Ukrainian translation update and some new translations
svn path=/trunk/; revision=23107
2006-07-17 00:49:43 +00:00
Magnus Olsen
d96e5ccf7b patch from temarez : Bug#: 1635 : Ukrainian translation update and some new translations
svn path=/trunk/; revision=23106
2006-07-17 00:49:01 +00:00
Magnus Olsen
61883a6c33 patch from temarez : Bug#: 1635 : Ukrainian translation update and some new translations
svn path=/trunk/; revision=23105
2006-07-17 00:48:07 +00:00
Magnus Olsen
1743dd24ee patch from temarez : Bug#: 1635 : Ukrainian translation update and some new translations
svn path=/trunk/; revision=23104
2006-07-17 00:47:19 +00:00
Magnus Olsen
2258ebff5f patch from temarez : Bug#: 1635 : Ukrainian translation update and some new translations
svn path=/trunk/; revision=23103
2006-07-17 00:46:30 +00:00
Magnus Olsen
1ffbaf7d4a patch from temarez : Bug#: 1635 : Ukrainian translation update and some new translations
svn path=/trunk/; revision=23102
2006-07-17 00:45:10 +00:00
Magnus Olsen
539e91e037 patch from temarez : Bug#: 1635 : Ukrainian translation update and some new translations
svn path=/trunk/; revision=23101
2006-07-17 00:42:34 +00:00
Magnus Olsen
69c0fb3bfc patch from : Fork : Bug#: 1633 : Norwegian translation
svn path=/trunk/; revision=23100
2006-07-17 00:36:20 +00:00
Magnus Olsen
5b8262fc5d patch from : Fork : Bug#: 1633 : Norwegian translation
svn path=/trunk/; revision=23099
2006-07-17 00:33:59 +00:00
Magnus Olsen
243cd7fe80 patch from : Fork : Bug#: 1633 : Norwegian translation
svn path=/trunk/; revision=23098
2006-07-17 00:31:16 +00:00
Magnus Olsen
c1bf3efbbe patch from : Fork : Bug#: 1633 : Norwegian translation
svn path=/trunk/; revision=23097
2006-07-17 00:27:59 +00:00
Magnus Olsen
fddc4b77ba patch from Apal : Bug#: 1630 : Greek Translation files for explorer
svn path=/trunk/; revision=23096
2006-07-17 00:04:45 +00:00
Magnus Olsen
85afb97623 more code, from alex patch I got over one year ago, thanks alex for all help and for all code he wrote.
and sorry for the mess at moment in the file. it will be pretty large update to this file, for the patch have been lying on my 
harddisk for some time. 

+ remove dead code same time, almost whole alex big patch are in. 
+ clean up need 
+ Gdientry2 need some bugfix, but lest we got one now. 
+ vbe drv framebuf interface need some more dx hal api before it functions.


svn path=/trunk/; revision=23095
2006-07-16 23:32:57 +00:00
Aleksey Bragin
cb979df177 - Fix "ret 0" to "ret 4" in a fastcall function taking 3 parameters.
- Fix some prototypes in comments, so they correspond to reality

svn path=/trunk/; revision=23094
2006-07-16 21:40:11 +00:00
Hervé Poussineau
e66f23066f Implement NtQueryDirectoryObject, based on code which was deleted in revision 20004
svn path=/trunk/; revision=23093
2006-07-16 21:15:16 +00:00
Magnus Olsen
b4d66b0066 more code, from alex patch I got over one year ago, thanks alex for all help and for all code he wrote.
and sorry for the mess at moment in the file. it will be pretty large update to this file, for the patch have been lying on my 
harddisk for some time. 

1. Cleanup GdiEntry1 and optimze it by alex
    

svn path=/trunk/; revision=23092
2006-07-16 21:10:13 +00:00
Magnus Olsen
63acffc926 more code, from alex patch I got over one year ago, thanks alex for all help and for all code he wrote.
and sorry for the mess at moment in the file. it will be pretty large update to this file, for the patch have been lying on my 
harddisk for some time. 

svn path=/trunk/; revision=23091
2006-07-16 20:35:25 +00:00
Aleksey Bragin
edcb8de7a6 Alexey Minnekhanov: Improve monitor.bmp for desk.cpl
svn path=/trunk/; revision=23090
2006-07-16 20:10:48 +00:00
Aleksey Bragin
359a5de1ec Slightly improve debug prints in IoInvalidateDeviceRelations()
svn path=/trunk/; revision=23089
2006-07-16 20:05:18 +00:00
Magnus Olsen
7601691d1b Start implement code that alex for one year ago, thanks alex for all help and for all code he wrote.
and sorry for the mess at moment in the file. it will be pretty large update to this file, for the patch have been lying on my 
harddisk for some time. 

svn path=/trunk/; revision=23088
2006-07-16 19:03:46 +00:00
Magnus Olsen
3e29a1f5b1 start implement of gdientry2, for moment it return incorrect info. and does not fill some stuff right.
we are return alot of kernel pointer and does not setup alot stuff right, see it as start ground.
I do not want lose this start code again. it will be add in modifcate alot.   

svn path=/trunk/; revision=23087
2006-07-16 18:12:13 +00:00
Aleksey Bragin
3cf55b986d [AUDIT]
fmifs.dll

It is completely clean, because it's only stubs without any code. The only pair of coded functions are trivial "pass-through"/wrappers.

svn path=/trunk/; revision=23086
2006-07-16 17:38:03 +00:00
Alex Ionescu
03d4c9af39 - Added constants for all the ETHREAD flags so when we use Interlocked operations to edit them, a nice symbolic name is there isntead of a magic hex value.
- Fixed a bug in PspUserThreadStartup which was causing us to notify the debugger for system threads or hidden threads, instead of vice-versa.
- Documented cookie generation for Thomas.
- Threads were incorrectly created with KernelMode access instead of PreviousMode.
- Initialize the thread's rundown protection and use the process's.
- Handle failure when TEB = NULL.
- The LPC Semaphore has a limit of 1, not 0x7FFF.

svn path=/trunk/; revision=23085
2006-07-16 17:19:21 +00:00
Hervé Poussineau
72185bb72b [FORMATTING] Replace tabs by spaces
Replace some DPRINT1 by DPRINT

svn path=/trunk/; revision=23084
2006-07-16 17:00:39 +00:00
Ged Murphy
2f8950ce51 {AUDIT]
rossym
ROS specific lib

svn path=/trunk/; revision=23083
2006-07-16 15:32:42 +00:00
Johannes Anderwald
63a3c06ea0 * check return value of RtlDeleteAtomFromAtomTable
* simply, optimize, bugfix UserRegisterClass 
* allow de-registration for system classes
* set ERROR_CLASS_DOES_NOT_EXIST in case of errors
* reduces user32_winetest.exe class errors to 31 failures

svn path=/trunk/; revision=23082
2006-07-16 15:16:55 +00:00
Johannes Anderwald
6a8b5b1b25 * GetClassInfo should return NULL for hInst when hInst is UserHInstance
* fixes one bug found by user32_winetest.exe class.c

svn path=/trunk/; revision=23081
2006-07-16 14:57:34 +00:00
Magnus Olsen
0d759ca707 Framebuf drv
Implement : DdCanCreateSurface
Stub : DdCreateSurface
adding struct ddpfDisplay and dxHalInfo
ddpfDisplay are being filld but not use
dxHalInfo are not fill it is rater large work getting it right 


svn path=/trunk/; revision=23080
2006-07-16 14:54:59 +00:00
Ged Murphy
4b2f6b62b4 add Wine cabinet regression tests
svn path=/trunk/; revision=23079
2006-07-16 14:24:37 +00:00
Aleksey Bragin
61938c2ebc [AUDIT]
- Doxyfile: not a code file at all
- ntdll.h / ntdllp.h: nothing copyrightable or reversengineerable in these files, it's a few functions prototypes only. Thus clean.

svn path=/trunk/; revision=23078
2006-07-16 13:55:11 +00:00
Aleksey Bragin
de67bf2622 [AUDIT]
- setup.c: This is a fully ReactOS-specific code, thus clean

svn path=/trunk/; revision=23077
2006-07-16 13:51:13 +00:00
Aleksey Bragin
e7729711e5 [AUDIT]
- setup.rc / lsass.rc: nothing copyrightable exists in this files
- lsass.c: some partly #if 0...#endif'ed stub. Doesn't implement any functionality, thus clean (and useless probably)
- win32err.c: a small error-printing function taken from Mark Russinovich's chkdskx source code. Contains nothing which could be thought as copyright-infringement, and the function overall is a few lines only

svn path=/trunk/; revision=23076
2006-07-16 13:46:47 +00:00
Johannes Anderwald
a4b70302ef * dont succeed if found Class is local and hInstance is NULL
* set hInstance to input value given when nonzero, zero for global classes and to the actual value of class when its local
* reduces the user32_winetest.exe failures by 20 error to 44

svn path=/trunk/; revision=23075
2006-07-16 12:24:09 +00:00
Eric Kohl
8135ef1f04 Implement CM_Get_First_Log_Conf[_Ex] and add PNP_GetFirstLogConf stub.
svn path=/trunk/; revision=23074
2006-07-16 12:11:26 +00:00
Magnus Olsen
fc29d1edf0 Clean up NtGdiDdCreateDirectDrawObject and confirm it working.
1. Fix create hdc when it is NULL that is need to get ms windows xp d3dx.dll working in ReactOS, if some want try it. 

 

svn path=/trunk/; revision=23073
2006-07-16 12:03:41 +00:00
Magnus Olsen
d16a694b91 Start adding basic directdraw hal 2d interface, so we have a directdraw hal interface to test with, for vmware server does not come with directdraw interface for the the driver. for now everthing is stubed.
svn path=/trunk/; revision=23072
2006-07-16 11:46:30 +00:00
James Tabor
0a02efc6e2 Fix typo
svn path=/trunk/; revision=23071
2006-07-16 01:40:36 +00:00
James Tabor
c1685e75b7 User32: Menu.c I found a small problem with drawing menu popups. This fixes the problem.
svn path=/trunk/; revision=23070
2006-07-16 00:33:50 +00:00
Magnus Olsen
a7dcf72d50 disable the screensaver from bootcd and livecd
reason : qemu and vmware 5.0 / 5.5 is afacted by same bug, it does not reading the timeout value right. 
         I need figout why, it is working in vmware server as it should 

svn path=/trunk/; revision=23069
2006-07-15 23:50:51 +00:00
Magnus Olsen
64e3f510fe Tempary fixing kbdclass and mouse class u can not call on IoDeleteDevice before disabler the keyboard or mouse driver other wise it will bsod at shoutdown of ReactOS, create the frist boot problem. that we have seen on BootCD; Hpoussin I have comment out iodevice for now, please look at it when u got time.
svn path=/trunk/; revision=23068
2006-07-15 20:14:44 +00:00
Alex Ionescu
78874d1548 - Remove some debug prints that are not needed anymore
- NtCurrentTeb now returns the TEB instead of the KCPR, so re-enable the codepath that set the CurrentLocale and IdealProcessor in the TEB from the KTHREAD.

svn path=/trunk/; revision=23067
2006-07-15 20:10:13 +00:00
Magnus Olsen
1af6dae1c1 reverting : patch from w3seek :Bug #: 1669 : Probing macros improvements and fixes
reason    : it break second boot, at when u press on finsh buttom 
            with the mouse or wait until auto rest kick in,
            but we still have one more regress to found for 
            second boot when u leave from vmware at center 
            point the setup will crash (when u toch the keyboard)
            lest the mouse does not cause the bsod any longer.
            I will inform w3seek about it when he comes online

 

svn path=/trunk/; revision=23066
2006-07-15 19:10:07 +00:00
James Tabor
d61db42063 -User32: Fixed GetMenuItemInfoA so it should work closely to spec and reimplemented GetMenuItemInfoW so it should do the same. Added a string flag to GetMenuStringW. Tested with explorer, winefile, VIDE, Lazarus (nochg) and Miranda. Wine menu test 1178 failures now.
svn path=/trunk/; revision=23065
2006-07-15 01:40:10 +00:00
Alex Ionescu
1d5f17dc97 - Add IN/OUT annotations for KeWaitForSIngleObject
- Set the wait block outside the loop, small optimization in case we get alerted by an APC and have to loop again.
- Set the wait block pointer in the KTHREAD structure only *after* checking if a wait is actually needed. That way, if the object is already signaled, we don't set anything in the WaitBlockList.
- Small optimization: only set the caller's WAitBlock as the next wait block if a timer wasn't specificed, else we ended up overwriting the value.
- Small optimziation: don't write the thread in the wait block, this is a wait for a signle object so this isn't needed.

svn path=/trunk/; revision=23063
2006-07-14 21:45:27 +00:00
Aleksey Bragin
7e51a54974 Add tests for Create/Open/Set/Cancel Timer in Executive. Under Win2003 SP1 works perfectly, however ReactOS hangs.
svn path=/trunk/; revision=23062
2006-07-14 21:04:31 +00:00
Magnus Olsen
8c3ad7c90d [AUDLT] This code are clean and written by filip.
svn path=/trunk/; revision=23061
2006-07-14 17:20:21 +00:00
Alex Ionescu
891d788fca - Implement Safe Referencing (an internal method for referencing objects when race conditions are possible)
- Implement two Vista APIs and export them: ObIsKernelHandle and ObDeleteObjectDeferDelete. ZOMG! Vista APIs in the kernel!

svn path=/trunk/; revision=23060
2006-07-14 15:26:19 +00:00
Alex Ionescu
514aa8290f - Fix a serious bug in Kernel Queues. A condition existed where an inserted kernel queue with a timeout would crash the system once the thread waiting on it had its wait aborted or completed.
- Thanks a lot to Thomas for his brutal test application which allowed me to discover this bug and the bugs addressed in the previous commits (related to the wait list and thread scheduler list corruption).

svn path=/trunk/; revision=23057
2006-07-14 02:26:44 +00:00
Alex Ionescu
1f1857f96d - Add KiCheckThreadStackSwap and KiAddThreadToWaitList macros
- Initialize PRCBs' Wait Lists
- Fix a ghastly implementation fault where the the queue code was correctly removing the thread from its wait list, but where this wait list was actually connected to the _SCHEDULER_ and ended up removing a thread behind its back, causing bizarre issues and w3seek's ASSERT(State == Ready) bug. Fixed this by using the macros above and PRCB Wait List and properly inserting a waiting thread into that list, and then removing it when unblocking it or removing a queue.

svn path=/trunk/; revision=23056
2006-07-14 01:03:27 +00:00
Alex Ionescu
8d372c2271 - Fix utterly messed up unblocking/readying thread logic.
- KiUnblockThread becomes KiReadyThread and doesn't perform priority modifications anymore. Also removed a large block of code that was #if 0ed out.
- KiAbortWaitThread now does priority modifications (and better then before), then calls KiReadyThread.
- Inserting a queue now *READIES A THREAD ONLY* instead of removing all its waits!

svn path=/trunk/; revision=23055
2006-07-13 22:52:18 +00:00
Magnus Olsen
eab221b08b Activate screensaver for bootcd
rember fullpath should be c:\reactos\system32\matrix.scr but we use matrix.scr as key path for getting this working on livecd.
But the desk.cpl apps should save full path to it. (and it does it in windows and reactos before ros cm broken it did in ros). 

svn path=/trunk/; revision=23054
2006-07-13 22:42:40 +00:00
Magnus Olsen
85a2492f52 last fix for getting screensaver working on livecd it is rugh hack
svn path=/trunk/; revision=23053
2006-07-13 22:38:30 +00:00
Hervé Poussineau
d0bbf9199b In case of error, free the input data buffer only if we just allocated it.
svn path=/trunk/; revision=23052
2006-07-13 22:20:54 +00:00
Alex Ionescu
19ff9cb593 - More cleanup of wait.c
- Set the right wait status in KiAbortWaitThread.
- Don't ignore priority boost (increments) when aborting waits.
- When satisfying a mutant, insert if into the the head of the back-link, not the forward-link.

svn path=/trunk/; revision=23051
2006-07-13 22:19:57 +00:00
Alex Ionescu
fc546e804a - Cleanup + formatting fixes for wait.c
- Move some inlined functions from ke.h to ke_x.h
- Add checks for special apc disabled (guarded regions) in wait code.

svn path=/trunk/; revision=23050
2006-07-13 21:48:45 +00:00
Eric Kohl
b41eb98534 Implement CM_Free_Log_Conf[_Ex] and add PNP_FreeLogConf stub.
svn path=/trunk/; revision=23049
2006-07-13 21:28:01 +00:00
Magnus Olsen
20ce435a3b 1. Fixing so the screensaver only start one time when ReactOS starting.
2. Fixing so the screensaver do not restart it self. 
Alesky here is the bugfix I promies, it will not longer see alot start screen msg. 
One bug remains before the reg key will be adding as defualt for matrix.scr so it 
can run from livecd as well



svn path=/trunk/; revision=23047
2006-07-13 21:21:30 +00:00
Aleksey Bragin
9d2f75b905 Added a check for a non-null WndProc into IntCallWndProcA/W. Instead of bugchecking, it shows a DPRINT1 now to inform about a bug.
As a side effect, mIRC now works in ReactOS.

svn path=/trunk/; revision=23046
2006-07-13 20:47:59 +00:00
Alex Ionescu
d7e7bd087e [FORMATTING] - Cleanup timer.c
svn path=/trunk/; revision=23045
2006-07-13 19:43:10 +00:00
Alex Ionescu
bdde4622cc - Don't make the timer signaled in KeSetTimerEx if it already expired.
- Only call KiWaitTest on timers if they have waiters.
- Fix list looping in KiExpireTimers.

svn path=/trunk/; revision=23044
2006-07-13 19:04:39 +00:00
Magnus Olsen
07eacf79df 1. Remove guithreadinfo from the make file. for it not longer builds.
2. Adding a test apps for starting directdraw hal interface, that I have keep within few ros devs, and one wine devs, 
   it also being using in 2-3 diffent company same code. I known which company that using it with my written premitions 
   I give them on icq or email. But u need a document how to use kernel, d3d, mocomp interface,and some more how to access
   them. I only show how to start dx hal the interface and using so call IDrawDraw interface. in this apps. 
  

svn path=/trunk/; revision=23043
2006-07-13 19:00:05 +00:00
Magnus Olsen
e862b8b461 patch from w3seek :Bug #: 1667 : NTOSKRNL: Fix GCC4 warning and return correct error code in NtSignalAndWaitForSingleObject
svn path=/trunk/; revision=23041
2006-07-13 12:30:56 +00:00
Aleksey Bragin
d5f8964338 Free the buffer as MSDN says
svn path=/trunk/; revision=23040
2006-07-13 07:17:13 +00:00
Alex Ionescu
77203d0406 - Add some TIMER values to the ddk.
- Add DPC Settings (Queue Depths, Rates, etc)
- Cleanup System/Run Time Update code.
- Always increase kernel time in PRCB when inside kernel-mode code.
- Get rid of superflous interlocked commands when not needed.
- Improve detection of DPC vs non-DPC time.
- Respect and apply DPC queue/rate rules.
- Allow future use of non-fulltick time increments.

svn path=/trunk/; revision=23039
2006-07-13 06:23:34 +00:00
Alex Ionescu
e037b1c36b - Add ASSERT_QUEUE macro.
- Cleanup queue.c
- Add some ASSERTs
- Properly check for SPecialApcDisable before aborting a wait.
- Fix a bug in KiWaitQueue which was causing us not to remove the queue from the thread's wait list.

svn path=/trunk/; revision=23038
2006-07-13 05:20:43 +00:00
Alex Ionescu
5ecb728b0e - Fix KiAcquireMutexContended, it was broken in contended cases.
- Inline Acquiring/Leaving guarded regions and the gmutex code, instead of going through 3-4 indirect calls.
- Add a mountain of ASSERTs to detect incorrect usage/state.
- Set ->SpecialApcDisable in the Guarded Mutex.
- Fix broken KTHREAD definition. SpecialApcDisable and KernelApcDisable were incorrectly marked as USHORT instead of SHORT, which could cause severe trouble under optimized builds (At least under MSVC, since MSVC wouldn't allow a negative number in an unsigned short).
- Use GM_LOCK_BIT_V.
- Fix broken KeTryToAcquireGuardedMutex prototype.
- Fix broken KGUARDED_MUTEX typedef and add bit values.
- Fix broken Interlocked* prototypes in regards to volatileness.

svn path=/trunk/; revision=23037
2006-07-13 04:20:18 +00:00
James Tabor
b71f24ddc1 -User32: Consolidated InsertMenu and ModifyMenu A&W flags processing. Misc changes too, some based on wine.
svn path=/trunk/; revision=23036
2006-07-12 22:43:45 +00:00
Ged Murphy
f13b4799a6 DIALOG -> DIALOGEX to correctly handle MS Shell Dlg
svn path=/trunk/; revision=23035
2006-07-12 21:52:08 +00:00
Magnus Olsen
7611f8028a patch from w3seek :Bug #: 1669 : Probing macros improvements and fixes
svn path=/trunk/; revision=23034
2006-07-12 21:42:08 +00:00
Magnus Olsen
c80f9e7cea patch from w3seek : Bug#: 1671 : RTL: Fix checking the SACL data area in the Win64 version of RtlSelfRelativeToAbsoluteSD2
svn path=/trunk/; revision=23033
2006-07-12 21:36:05 +00:00
Aleksey Bragin
1d5bff3624 - Fix a mistake with outputting always non-initialized buffer in a DPRINT1
- Add a branch for stopping the screensaver
- Prettify the tracing debug message (it shows now if it's a start or a stop request)
- Add a success-check for RegOpenKeyExW too

svn path=/trunk/; revision=23032
2006-07-12 21:33:14 +00:00
Johannes Anderwald
d94f7c6e2b conio.c:
* create a CSRSS_SCREEN_BUFFER object before TuiInit/GuiInit 
  -> required for variable screen buffer sizes
* improve error handling in CsrCreateScreenBuffer

guiconsole.c:
* directly store WindowSize in CSRSS_CONSOLE struct
* read ScreenBufferSize value from registry and store result in CSRSS_SCREEN_BUFFER 
* use default values for ScreenBufferSize / WindowSize

tuiconsole.c:
* set screenbuffer size to size of physical console size in init

svn path=/trunk/; revision=23031
2006-07-12 21:06:21 +00:00
Hervé Poussineau
b06a110bee Symbolic link should start with \??\, to be able to open the object from kernel mode
svn path=/trunk/; revision=23030
2006-07-12 20:41:28 +00:00
Johannes Anderwald
c19c207f4e * set FontName array to max of LF_FACESIZE
* read WindowSize from registry
* create GUI_CONSOLE_DATA directly in GuiInitConsole
* wait untill GuiWindow has been created (needed for synchronization with variable window sizes)

svn path=/trunk/; revision=23028
2006-07-12 16:48:58 +00:00
Hervé Poussineau
b042f11818 Implement the 'You need to reboot' wizard page, and use it instead of the network message box.
Main advantage is that the message box doesn't appear anymore during second stage setup.

svn path=/trunk/; revision=23027
2006-07-12 15:30:09 +00:00
Aleksey Bragin
fe866c5c43 Stub one more WMI api used by drivers. Kernel just ignores WMI information for now, but drivers are happy since they successfully submit it.
svn path=/trunk/; revision=23026
2006-07-12 14:00:21 +00:00
The Wine Synchronizer
a7e2f91d3f Autosyncing with Wine HEAD
svn path=/trunk/; revision=23024
2006-07-12 12:40:40 +00:00
Johannes Anderwald
48786b8392 revert prev commit
svn path=/trunk/; revision=23023
2006-07-12 12:36:31 +00:00
Aleksey Bragin
8008e440cd Add flags for CryptAcquireCertificatePrivateKey() API
svn path=/trunk/; revision=23022
2006-07-12 12:27:46 +00:00
Johannes Anderwald
e2ff912acc * remove unused/unimplemented clb library
* you need to delete Makefile.auto after this commit

svn path=/trunk/; revision=23021
2006-07-12 12:27:26 +00:00
Johannes Anderwald
9d114d7b18 * norwegian translation by LMH1 from bug(1645)
svn path=/trunk/; revision=23020
2006-07-12 12:08:39 +00:00
Johannes Anderwald
484c24fda3 * set svn:eolstyle native
svn path=/trunk/; revision=23019
2006-07-12 12:00:34 +00:00
Johannes Anderwald
50b81c4cb2 * fix a typo
* fix identation
* bugreport & patch by Jones111
* fixes bug 1656

svn path=/trunk/; revision=23018
2006-07-12 11:55:14 +00:00
Hervé Poussineau
2c576de1f1 Enable plug and play manager in livecd.
svn path=/trunk/; revision=23017
2006-07-12 11:54:04 +00:00
Hervé Poussineau
604e593d4d LiveCD change: don't directly name the shell executable in SYSTEM\Setup key, but run setup.exe, which then loads syssetup.dll, which then runs the selected shell.
This is the first step to do custom operations when running the livecd.

svn path=/trunk/; revision=23016
2006-07-12 11:30:17 +00:00
Filip Navara
7a738ccc46 Fix the RET insns for @InterlockedCompareExchange@12. Spotted by Alex & Aleksey.
svn path=/trunk/; revision=23015
2006-07-11 22:45:45 +00:00
Alex Ionescu
d2e356eda6 - Implement Fast Referencing and fix EX_FAST_REF definition.
- Implement ObReferenceEx and ObDereferenceEx.
- Split off ObpDeferObjectCompletion. A new win2003/vista API requires direct acess to being able to defer deletes.
- Fix some bugs in Process Token management and make it all properly use Fast Referencing.
- When duplicating a token in a new process, don't de-reference it before it's even created, and also insert it.
- Change ExpChangeRundown macro to fix warnings in msvc.

svn path=/trunk/; revision=23013
2006-07-11 19:45:16 +00:00
Johannes Anderwald
f8aab41375 * fix typo
* patch & bug report by Coviti
* fixes bug 1663
* set svn:eol-style native for other resource files

svn path=/trunk/; revision=23012
2006-07-11 17:52:38 +00:00
Alex Ionescu
59a0d277ae - Fix up some stuff in Kernel Gates support.
- Fix up some implementation bugs in Executive Rundown support.

svn path=/trunk/; revision=23011
2006-07-11 15:36:44 +00:00
Hervé Poussineau
05917e3fee Don't change PortData pointer, as it is allocated memory, and so, it is easier to free it when needed.
svn path=/trunk/; revision=23010
2006-07-11 13:38:59 +00:00
Hervé Poussineau
9976565e9f [FORMATTING] Replace tabs by spaces.
No code change

svn path=/trunk/; revision=23009
2006-07-11 13:01:00 +00:00
The Wine Synchronizer
e00e9c842b Autosyncing with Wine HEAD
svn path=/trunk/; revision=23008
2006-07-10 21:39:10 +00:00
The Wine Synchronizer
2a02dd2d72 Autosyncing with Wine HEAD
svn path=/trunk/; revision=23007
2006-07-10 21:32:49 +00:00
The Wine Synchronizer
ca1ba81a06 Autosyncing with Wine HEAD
svn path=/trunk/; revision=23006
2006-07-10 21:25:32 +00:00
Aleksey Bragin
9afe9c3b5c [FORMATTING] / [AUDIT]
- Cleanup a big coding-style mess
- Add UNIMPLEMENTED macro in empty functions (otherwise we will never know if they are being called by a 3rd-party driver)
- Add proper debug headers inclusion in every file
- Add documentation headers into almost every file (except mcb.c and context.c - will be added later)
- Standardize per-file headers (some files still lack contributors names, they will be added later too)

No code change except for adding UNIMPLEMENTED macros in the code. Name.c unlocked because the implementations of functions are trivial and in fact could be derived from their names. Not documented functions will be further reviewed.

svn path=/trunk/; revision=23005
2006-07-10 21:03:26 +00:00
Magnus Olsen
5dd17c2315 fixing broken asm code.
tcslen, wsclen did not check if the string was null or not. 
Adding a NULL pointer check. This make user32 test working and alot other apps. 
  

svn path=/trunk/; revision=23004
2006-07-10 20:02:12 +00:00
Magnus Olsen
06f4494f85 Fixing two user mode crash for menu.
Do not try reading from NULL pointer and compare the value. 
This let me come bit futer with user32_winetest.exe, but we still have some user mode crash with menu. 
  


svn path=/trunk/; revision=23003
2006-07-10 19:32:24 +00:00
Christoph von Wittich
fa1e866a00 -get rid of DllMain@12 because MSVC defaults to_DllMainCRTStartup@12 when using CRT
svn path=/trunk/; revision=23001
2006-07-10 18:16:28 +00:00
Johannes Anderwald
5cfd59e722 * make resources compilable with msvc
svn path=/trunk/; revision=23000
2006-07-10 16:22:03 +00:00
Magnus Olsen
ebb0cc9c2b Fixing a small bug, value where never devliver from SPI and that did make screensaver start direcky and start mulitetimes.
svn path=/trunk/; revision=22998
2006-07-10 15:02:43 +00:00
Johannes Anderwald
a1586aefb1 * set svn:eol-style native
svn path=/trunk/; revision=22997
2006-07-10 14:11:12 +00:00
Johannes Anderwald
c9130e29e7 * fix a few msvc compilation errors (MS powercfg.h does not use include guards)
svn path=/trunk/; revision=22996
2006-07-10 13:47:11 +00:00
Johannes Anderwald
71b51f58d6 * make resource files msvc compilable
* fix size of text in various languages

svn path=/trunk/; revision=22995
2006-07-10 13:30:17 +00:00
Aleksey Bragin
98e2bc66e5 Add DPRINT1s for failures, and added UNIMPLEMENTED macro in the unimplemented export function
svn path=/trunk/; revision=22994
2006-07-10 13:10:22 +00:00
Aleksey Bragin
6f20e7b31b Thomas Weidenmueller: Fix GCC4 warnings
svn path=/trunk/; revision=22993
2006-07-10 11:42:28 +00:00
Aleksey Bragin
c3ecaa36f1 - Remove IopGetLowestDevice() call from IoRegisterDeviceInterface() (hpoussin approved this change)
- Add a few DPRINTs to easier see failures of exported APIs

svn path=/trunk/; revision=22992
2006-07-10 09:54:50 +00:00
Aleksey Bragin
645a3280f5 Sync with Wine: Update EDIT_EM_SetMargins in EDIT control.
svn path=/trunk/; revision=22991
2006-07-10 08:56:02 +00:00
Aleksey Bragin
e11e4547e1 Dmitry Philippov: Fix a bug with firstly overwriting the value, and then trying to use variable for comparation (should be vice-versa: firstly compared what was passed, then overwrite with a new value)
svn path=/trunk/; revision=22990
2006-07-10 08:33:02 +00:00
James Tabor
496f31dce3 - User32 menu
- Fixed and modified MenuDrawBitmapItem, MenuGetBitmapItemSize and MenuCalcItemSize. Based on Wine ports.
 - Fixed menu bar drawing and maintained most callback changes (for Miranda). Implemented flat menu support. Some other misc changes. Owner drawing is still broken (Free pascal project Lazarus). Run user32_crosstest from Wine, still more rewriting is needed.

svn path=/trunk/; revision=22989
2006-07-10 05:52:41 +00:00
Magnus Olsen
7ad01239f2 Implement SPI_GETFLATMENU and SPI_SETFLATMENU after jimtabor request not tested if it work
svn path=/trunk/; revision=22988
2006-07-10 01:48:46 +00:00
Magnus Olsen
b38fbf4730 putting back Christoph_vW patch that was revert by me
svn path=/trunk/; revision=22987
2006-07-10 01:45:03 +00:00
Magnus Olsen
92751bd955 putting back Christoph_vW patch that was revert by me
svn path=/trunk/; revision=22986
2006-07-10 01:33:10 +00:00
Magnus Olsen
52c172d21e Changes for Screen saver And implement
1. Time value can be changes use SPI_SETSCREENSAVETIMEOUT to set the new value, current insate value are set to 30sec
2. SPI_GETSCREENSAVETIMEOUT Get the screen saver timeout value.
3. Dectect if screen saver is running with SPI_GETSCREENSAVERRUNNING
4. Set the state of screen saver with  SPI_SETSCREENSAVERRUNNING <- this is internal api see msdn 
 
Implement for mouse
1. SPI_GETWHEELSCROLLLINES I am but unsure if win32k need more changes it seam like it is only a counter that should be set/get a value and user apps take care of the rest. Implement it for jimtabor did request it. 
2. SPI_GETWHEELSCROLLCHARS  I am but unsure if win32k need more changes it seam like it is only a counter that should be set/get a value and user apps take care of the rest.

svn path=/trunk/; revision=22985
2006-07-10 00:26:56 +00:00
Magnus Olsen
f89c0df588 adding #define SPI_GETWHEELSCROLLCHARS thanks alex for the value
svn path=/trunk/; revision=22984
2006-07-10 00:11:12 +00:00
Michele Cicciotti
9cb9eef811 modified rdesktop/channels.c
modified   rdesktop/constants.h
modified   rdesktop/types.h
   Commented out definitions of standard Windows constants and types

modified   rdesktop/licence.c
modified   rdesktop/secure.c
   TODO annotations

modified   rdesktop/proto.h
   Commented out prototypes for rdpdr, rdpsnd, cliprdr, etc. functions that will be rewritten *and* use a new API

modified   rdesktop/rdesktop.h
modified   rdesktop/rdp.c
modified   rdesktop/tcp.c
   Big big mess, many temporary modifications to have a working prototype ASAP

added      MissTosca.sln
added      mstsc/mstsc.cpp
added      mstsc/mstsc.vcproj
added      mstsc/stdafx.cpp
added      mstsc/stdafx.h
added      mstscax/mstscax.cpp
added      mstscax/mstscax.vcproj
added      mstscax/stdafx.cpp
added      mstscax/stdafx.h
   Created skeleton project files for Visual C++ 2005

added      rdesktop/rdesktop-core.vcproj
   Isolated the bare core of rdesktop. Required little to no porting

added      porting-tools/rdesktop-core-tester
added      porting-tools/rdesktop-core-tester/rdesktop-core-tester.cpp
added      porting-tools/rdesktop-core-tester/rdesktop-core-tester.vcproj
added      porting-tools/rdesktop-core-tester/stdafx.cpp
added      porting-tools/rdesktop-core-tester/stdafx.h
   Tester application. The screenshots were made with this. Partial (buggy!) implementation of GUI and keyboard input

svn path=/trunk/; revision=22983
2006-07-09 23:57:54 +00:00
Hervé Poussineau
aea3ddc7c8 First argument doesn't need to be a physical device object, it only needs to be in a PDO driver stack.
svn path=/trunk/; revision=22982
2006-07-09 22:08:24 +00:00
Aleksey Bragin
8892a1ea62 Implement proper error-handling in IoRegisterDeviceInterface() (based on testing and MSDN documentation)
svn path=/trunk/; revision=22981
2006-07-09 22:02:03 +00:00
Aleksey Bragin
b77e8f5145 Add two simple tests for IoRegisterDeviceInterface() explaining which fields IoRegisterDeviceInterface() checks for mandatory presence (WDK is not clear about this)
svn path=/trunk/; revision=22980
2006-07-09 21:39:49 +00:00
Aleksey Bragin
2948f5ecdf Re-apply fixes to CPL accidentally reverted by Magnus's reverting commit
svn path=/trunk/; revision=22979
2006-07-09 21:10:40 +00:00
Magnus Olsen
beeb6f5df2 Thanks for x person found a bug, he did not be mentor with name. One of our helper with dx stuff that want be anonymous for now
svn path=/trunk/; revision=22978
2006-07-09 20:28:30 +00:00
Maarten Bosma
555c9d0ec0 Add comments from cc-branch headers to trunk to make the header patch smaller.
svn path=/trunk/; revision=22977
2006-07-09 19:37:39 +00:00
Alex Ionescu
f4539b7037 - Massive re-write of some parts of Ps, based on a patch I wrote almost a year ago and peer-reviewed with Thomas and Filip. Causes some shutdown regressions and process leaks (will fix). Needs more work. Changelog:
- Architectural changes to match information in Windows Internals 4 and other documented sources of information (Windows Internals II by Probert). Code should match Win2003 layout.
    - Handle almost any possible process/thread sub structure and add its cleanup code stubs, so that when we actually implement them, we won't forget to clean them up in the process code.
    - Add interlocked usage of process and thread flags in order to make everything more thread-safe.
    - Better handle cases where threads die instantly, race conditions, and other weird issues.
    - Better handle process termination and thread termination.
    - Implement NtCreateProcessEx and update PspCreateProcess/NtCreateProcess.
    - Improve cleanup of process object in PspProcessDelete.
    - Optimize some things like User Thread startup.
    - Add some extra asserts, paged_code checks and also user-mode security check.
    - Implement helper API PsGetNextProcessThread
    - Optimize thread reaper (thanks Filip)
    - Do proper referencing/dereferencing of thread/processes (thanks Thomas)
    - Document FIXMEs needed for Ps code to be up to standards and complete.

svn path=/trunk/; revision=22976
2006-07-09 18:54:13 +00:00
Magnus Olsen
d5dbbd1211 reverting : revison 22930 to 22932, 22938 to 22940, 22943, 22945, 22950, 22953 to 22954, 22959 to 22961, 22965
Reason : CRT/RTL/STRING are being static linkend into evething and cause CSR crash when it booting to GUI
         and some of the changes are wrong in rbuild as well. Do not hardcode example mingw32-ld name 
         keep it to ld for it is the make file detmer the name of ld when it is building. and some other 
         changes are also question about. It also fix so we can build ReactOS with MinGW 3.4.2 again and
         BinUtils 2.15.91, it was also other problem with this changes.  

svn path=/trunk/; revision=22973
2006-07-09 16:25:25 +00:00
Ged Murphy
ab8a344656 check reg for NTP setting
fix a few typos and msvc warnings

svn path=/trunk/; revision=22972
2006-07-09 16:19:39 +00:00
Magnus Olsen
ae1a33083a last patch Alex ask for this be revert for it should be fixed in another place.
svn path=/trunk/; revision=22971
2006-07-09 15:33:33 +00:00
Alex Ionescu
450d11e3f1 - Small build fix
svn path=/trunk/; revision=22970
2006-07-09 15:25:14 +00:00
Aleksey Bragin
a814cbbe42 Fix the build, thanks to Magnus Olsen
svn path=/trunk/; revision=22969
2006-07-09 12:33:47 +00:00
Alex Ionescu
ee67c24dce - Separate functions that deal with driver-related registry code, grouping, tagging, indexing, sorting into drvrlist.c... this code should eventually become part of Cm instead.
svn path=/trunk/; revision=22968
2006-07-09 02:34:32 +00:00
Alex Ionescu
9b422ef6c6 - Simplify IopReinitializeBootDrivers and IopReinitializeDrivers.
- For some strange reason, boot drivers were re-initailized *after* system drivers.

svn path=/trunk/; revision=22967
2006-07-09 02:21:13 +00:00
Alex Ionescu
2eaab734d7 - Add a typedef for PFS_FILTER_CALLBACKS when the IFS isn't included.
svn path=/trunk/; revision=22966
2006-07-09 01:03:37 +00:00
Christoph von Wittich
c6931157dd -remove nostdlib from KernelModeDlls to fix linking of bzip2
svn path=/trunk/; revision=22965
2006-07-09 00:56:23 +00:00
Magnus Olsen
df8822f30d patch from Vassily Tarasov bug 1658 : Implement GetUserObjectSecurity()and SetUserObjectSecurity()
svn path=/trunk/; revision=22964
2006-07-09 00:16:51 +00:00
Johannes Anderwald
9656ee1e85 * use font properties from registry when available
svn path=/trunk/; revision=22963
2006-07-09 00:13:40 +00:00
Alex Ionescu
17c27b70cd - Allocate Re-Init entries with a tag
- Fix IoAllocateDriverObjectExtension and IoGetDriverObjectExtension:
  - They were using the wrong structure (a made up one).
  - They were saving the extension where the Driver Object's base address should be.
  - Memory leaks.
  - Sometimes holding the lock too long.
- Created EXTENDED_DRIVER_OBJECT structure in NDK, since parts of the documented one are hidden (much like EXTENDED_DEVICE_OBJECT).
- Fixed IopDeleteDriver to free what it should.
- Fixed IoCreateDriver to handle more failure cases.

svn path=/trunk/; revision=22962
2006-07-09 00:01:31 +00:00
Christoph von Wittich
2849b81889 -removed -nostdlib from kernel32
-fixed some msvc errors

svn path=/trunk/; revision=22961
2006-07-08 23:32:03 +00:00
Christoph von Wittich
79a5eee6f5 -use /noentry flag when entrypoint is set to "0"
svn path=/trunk/; revision=22960
2006-07-08 23:23:08 +00:00
Christoph von Wittich
dd81cc1343 fix compilation with msvc
svn path=/trunk/; revision=22959
2006-07-08 23:12:51 +00:00
Alex Ionescu
e7e794c543 - A long long time ago there was a stupid kernel that created MDLs for R/W requests even when the length of the buffer was 0. He had another stupid friend called CDFS which attempted to read the MDL before checking if the buffer size is also 0. When cdfs's friend, the kernel, grew smarter and stopped allocating MDLs, cdfs didn't catch on and cried every time this happened. CDFS now caught up. (thanks to Greatlord for finding the regression).
svn path=/trunk/; revision=22958
2006-07-08 23:02:50 +00:00
Christoph von Wittich
1058843806 remove -nostdlib
svn path=/trunk/; revision=22957
2006-07-08 22:15:41 +00:00
Eric Kohl
1c1c562871 Implement CM_Free_Log_Conf_Handle.
svn path=/trunk/; revision=22956
2006-07-08 22:15:16 +00:00
Magnus Olsen
63d0c1d55a Revert : small part from 22849 wine sync
Reason : put back ReactOS specify code, to make icon transplant. 


svn path=/trunk/; revision=22955
2006-07-08 22:14:37 +00:00
Christoph von Wittich
43800d3c90 remove -nostdlib
svn path=/trunk/; revision=22954
2006-07-08 22:13:10 +00:00
Christoph von Wittich
513463d73f -remove -nostdlib to fix build of msvcrt
-don't set --enable-stdcall-fixup twice

svn path=/trunk/; revision=22953
2006-07-08 22:07:34 +00:00
Johannes Anderwald
3f6c1f228c * add missing string to stringtable -> now the menu fully works
* spotted by Greatlord

svn path=/trunk/; revision=22952
2006-07-08 22:06:54 +00:00
Christoph von Wittich
45153f58c7 -link to opengl32 to fix build of glu32
svn path=/trunk/; revision=22951
2006-07-08 22:04:57 +00:00
Christoph von Wittich
81bdd493c9 -removed -nostdlib to fix build
svn path=/trunk/; revision=22950
2006-07-08 21:39:22 +00:00
Eric Kohl
42c3759b94 Implement CM_Add_Empty_Log_Conf[_Ex] and add PNP_AddEmptyLogConf stub.
svn path=/trunk/; revision=22949
2006-07-08 21:37:32 +00:00
Aleksey Bragin
b9ed9b1450 [AUDIT] + [FORMATTING]
- Coding style applied (make file's header proper, add headers for every function)
- All functions except one are documented in MSDN
- One undocumented function will undergo further examination and documentation

svn path=/trunk/; revision=22948
2006-07-08 21:33:25 +00:00
Magnus Olsen
d22007aa7c Install dejavu font on livecd and bootcd and
change everthing to dejavu fonts. Rember console apps can not use dejavu font for it will regress. 
that is the reasson we keep old bitstream fonts for now. and another problem is bitstream font is
hardcode into console apps (example cmd), it have been hard code in csrss and maybe some more place. 

svn path=/trunk/; revision=22947
2006-07-08 20:49:55 +00:00
Magnus Olsen
998ca67436 fixing last bug for jolite file names. now we can use so long file name we like.
I was force fixing this bug for getting dejavu font to be install on livecd
I was hopping some else have fixing this long standing bug. 

svn path=/trunk/; revision=22946
2006-07-08 20:45:33 +00:00
Christoph von Wittich
512a5f6cd8 -fixed msvc errors
svn path=/trunk/; revision=22945
2006-07-08 20:32:22 +00:00
Magnus Olsen
6366fa9ddc commit import Dejavu font to ReactOS, we need keep bitstream font for Console apps for it is hard code there and there, for console apps, example let cmd working without regress. Now we need change the reactos reg and to the packages.diff.
svn path=/trunk/; revision=22944
2006-07-08 20:05:44 +00:00
Christoph von Wittich
2a83771501 -don't use PROJECT_LFLAGS for freeldr because ld != mingw32-ld
svn path=/trunk/; revision=22943
2006-07-08 19:44:36 +00:00
Alex Ionescu
58695ec272 - Write some TODOs. I'm now done with I/O IRP APIs and File Object handling. Let me know of regressions.
- Next up... driver loading.

svn path=/trunk/; revision=22942
2006-07-08 19:41:20 +00:00
Alex Ionescu
8395aae6a0 - Zero out the OPEN_PACKET and only set non-zero members in functions that use it.
- NtCancelIoFile:
  - Don't use macro-based list looping.
  - Update operation counts.
  - Wait 10ms instead of 100ms.

svn path=/trunk/; revision=22941
2006-07-08 19:28:08 +00:00
Christoph von Wittich
0535c5d920 -fixed some msvc /W4 warnings
svn path=/trunk/; revision=22940
2006-07-08 19:14:12 +00:00
Christoph von Wittich
c742e77e3b -don't use an entrypoint when entrypoint is set to "0"
svn path=/trunk/; revision=22939
2006-07-08 19:13:39 +00:00
Christoph von Wittich
0c95e11038 -fixed some msvc /W4 warnings and errors
svn path=/trunk/; revision=22938
2006-07-08 19:00:35 +00:00
Alex Ionescu
bc388c2ea3 - Don't use FILE_ATTRIBUTE_NORMAL for mailslots/namedpipes.
svn path=/trunk/; revision=22937
2006-07-08 18:59:18 +00:00
Alex Ionescu
b256a775b7 [FORMATTING] - STDCALL->NTAPI changes, tab->Spaces, name decoration, etc.
- Add Eric's name since when I copied security.c into file.c, I forgot to add his name as well for that code.

svn path=/trunk/; revision=22936
2006-07-08 18:57:51 +00:00
Alex Ionescu
909fdbdc9c - Implemented NtDeleteFile, also a piece of cake now that we have IopParseDevice done.
svn path=/trunk/; revision=22935
2006-07-08 18:47:26 +00:00
Alex Ionescu
c4cfd65ad0 - Implement IoFastQueryNetworkAttributes which is now a piece of cake thanks to a properly implemented IopParseDevice.
svn path=/trunk/; revision=22934
2006-07-08 18:35:17 +00:00
Alex Ionescu
0a2769494f - Add support for cases when the FSD that actually did the FO create wasn't the one to whom we went the IRP.
- Also add support for detecting volume opens and setting the FO_VOLUME_OPEN flag.

svn path=/trunk/; revision=22933
2006-07-08 18:30:59 +00:00
Christoph von Wittich
884482b6aa -fixed msvc /W4 warnings and errors
svn path=/trunk/; revision=22932
2006-07-08 18:30:34 +00:00
Christoph von Wittich
a9a4a3d059 -use msvc compatible def files
svn path=/trunk/; revision=22931
2006-07-08 18:25:19 +00:00
Christoph von Wittich
3e7b4d7fc2 -fix msvc dll entrypoint
-fix PROJECT_LFLAGS
-added --enable-stdcall-fixup to PROJECT_LFLAGS

svn path=/trunk/; revision=22930
2006-07-08 18:24:11 +00:00
Alex Ionescu
2002b5b96a - Remove a ROS hack in IopCloseFile.
svn path=/trunk/; revision=22929
2006-07-08 18:19:39 +00:00
Alex Ionescu
6555616bb6 - Uber-optimize IopQueryAttributesFile by using the OPEN_PACKET mechanism to query file attributes, instead of doing lots of slow native calls.
- Modify IopParseDevice to detect when OPEN_PACKET optimizations are in use (query or deletion (deletion not yet implemented)) and have some codepaths be slightly different and use DUMMY_FILE_OBJECT.
- Implement QueryOnly case in IopParseDevice to handle attribute queries.
- Add a missing dereference, and remove an extra DO reference.

svn path=/trunk/; revision=22928
2006-07-08 18:17:26 +00:00
Aleksey Bragin
8ac94d67d0 - Remove extern (I don't see a reason to use it in function declarations)
- Add co_CsrNotifyScreenSaver(), so win32k builds properly
- Make style better

svn path=/trunk/; revision=22927
2006-07-08 18:05:06 +00:00
Alex Ionescu
12e1a16066 - Massively improve File I/O by using deferred I/O completion for MJ_(MAILSLOT/FILE/NAMEDPIPE)CREATE and manually completing the IRP.
svn path=/trunk/; revision=22926
2006-07-08 17:07:24 +00:00
Alex Ionescu
a49990d5ac - Add proper failure case for IRP allocation failure
- Only initialize the FO's lock for Synch I/O
- Add some missing comments
- Fixup some formatting

svn path=/trunk/; revision=22925
2006-07-08 16:45:53 +00:00
Christoph von Wittich
536df67dff -fixed some msvc /W4 warnings
svn path=/trunk/; revision=22924
2006-07-08 16:45:13 +00:00
Christoph von Wittich
c40550a8ca -revert 22909
-take care of ModuleDefinitionFile

svn path=/trunk/; revision=22923
2006-07-08 16:44:38 +00:00
Johannes Anderwald
56fd6ce005 * halfplement reading console properties
* thnx to Alex_Ionescu for advice on how get HKCU path

svn path=/trunk/; revision=22922
2006-07-08 16:00:08 +00:00
Christoph von Wittich
386a355fb8 -get rid of wine headers in Debug/Release/Speed configurations
svn path=/trunk/; revision=22916
2006-07-08 12:09:50 +00:00
Christoph von Wittich
cf82ae7be8 -remove winsock2.h which is causing errors when building with msvc
svn path=/trunk/; revision=22915
2006-07-08 12:08:56 +00:00
Ged Murphy
757901f02a revert r22910
there are a few issues with both the resource files and the code.
I suggest working on intl_new however as intl is soon to be deleted.

svn path=/trunk/; revision=22912
2006-07-08 10:37:37 +00:00
Christoph von Wittich
551d3ecaaa -fixed some msvc /W4 warnings
svn path=/trunk/; revision=22911
2006-07-08 10:22:35 +00:00
Ged Murphy
b6ec400d02 apply patch from bug 1653.
patch by Mrkaras.
unfortunately, this applet is soon the be replaced.

svn path=/trunk/; revision=22910
2006-07-08 10:20:35 +00:00
Christoph von Wittich
4a0cb7579d -use correct RuntimeLibrary for DLLs
svn path=/trunk/; revision=22909
2006-07-08 10:12:57 +00:00
Christoph von Wittich
1cfcb1d9f5 -fixed msvc /W4 warnings
-removed ntdll dependency

svn path=/trunk/; revision=22908
2006-07-08 10:00:15 +00:00
Alex Ionescu
1b176ca010 - Fix boot.
svn path=/trunk/; revision=22907
2006-07-08 04:13:50 +00:00
Magnus Olsen
c693aa7a2b remove a miss use assert in ProtocolReceive, I have talk with arty about it.
svn path=/trunk/; revision=22906
2006-07-07 21:43:49 +00:00
Alex Ionescu
045ca1dd86 - Add some more proper handling of ref/dereferencing in IopParseDevice.
svn path=/trunk/; revision=22905
2006-07-07 17:53:34 +00:00
Alex Ionescu
aa2513791b - Make an I/O Tagged copy of the file name and properly handle failure.
svn path=/trunk/; revision=22904
2006-07-07 17:29:12 +00:00
Alex Ionescu
d6e384ce39 - Implement IopCheckVpbMounted and use it in IopParseDevice as documented in NT File System Internals.
- Add some missing ref/deref calls for DOs and VPBs.

svn path=/trunk/; revision=22903
2006-07-07 17:18:52 +00:00
Alex Ionescu
979b777dd5 - Use a simpler and more robust way to detect direct device opens and save it in a variable that's read when needed, instead of having multiple large code paths.
svn path=/trunk/; revision=22902
2006-07-07 16:26:05 +00:00
Andrew Munger
70cd383c59 Add a \n so the output under linux looks correct. Every other printf had a \n, no idea why this one didn't.
svn path=/trunk/; revision=22901
2006-07-07 16:23:44 +00:00
Magnus Olsen
be4f6702f4 Change in the auto screen saver startup code in win32k
1. Fixing allot better sync for the timeout counter 
2. Change the hard code value to 30 sec instead for 15 sec
3. The start of screen saver are 30.0 sec to 30.9 sec for 
   we can not start on exactly on the x.0 sec but betwin  

svn path=/trunk/; revision=22900
2006-07-07 16:22:46 +00:00
Andrew Munger
6f734d6123 Convert sequence number to network byte order before sending it on the wire.
svn path=/trunk/; revision=22898
2006-07-07 13:23:10 +00:00
Hervé Poussineau
51cb8f8eac Fix typo (UNICODE -> _UNICODE)
svn path=/trunk/; revision=22897
2006-07-06 21:58:48 +00:00
Magnus Olsen
49ac5c3e0e Commit my autostart code for screen saver for now it is hardcode to 15 sec timeout
svn path=/trunk/; revision=22896
2006-07-06 20:42:45 +00:00
Aleksey Bragin
9135556ab7 Imitate success in WMI registration, so that drivers depending on it won't fail. (However DPRINT1 is inserted, so that devs notice the driver wants WMI)
svn path=/trunk/; revision=22895
2006-07-06 20:31:17 +00:00
Magnus Olsen
52d8aae119 Screen Saver win32csr part
1. Clean up the code
2. Adding FIXME text
3. Fixing a bug cause screen saver was autostart whole time after timeout accord.


svn path=/trunk/; revision=22894
2006-07-06 19:35:16 +00:00
Christoph von Wittich
69ac6cf7f8 fixed some warnings (msvc /W4)
svn path=/trunk/; revision=22893
2006-07-06 16:26:40 +00:00
Christoph von Wittich
305978e29e fixed about 70 warnings (msvc /W4)
svn path=/trunk/; revision=22892
2006-07-06 16:25:42 +00:00
Christoph von Wittich
e0f209d6c1 added winver back to build
svn path=/trunk/; revision=22891
2006-07-06 16:24:51 +00:00
Maarten Bosma
b8990f331f [FORMATING] Replace Tabs with spaces to uniform the code.
svn path=/trunk/; revision=22890
2006-07-06 15:14:06 +00:00
The Wine Synchronizer
ad50c49167 Update Wine-syncing doc
svn path=/trunk/; revision=22888
2006-07-06 11:23:09 +00:00
The Wine Synchronizer
51e37a94c6 Autosyncing with Wine HEAD
svn path=/trunk/; revision=22887
2006-07-06 11:22:04 +00:00
The Wine Synchronizer
532c10cebd Delete unneeded makefile
svn path=/trunk/; revision=22886
2006-07-06 11:18:46 +00:00
The Wine Synchronizer
04d864f341 Autosyncing with Wine HEAD
svn path=/trunk/; revision=22885
2006-07-06 11:10:26 +00:00
The Wine Synchronizer
fa1bcb1434 Autosyncing with Wine HEAD
svn path=/trunk/; revision=22884
2006-07-06 10:52:10 +00:00
The Wine Synchronizer
03475ee8e9 Autosyncing with Wine HEAD
svn path=/trunk/; revision=22883
2006-07-06 10:19:03 +00:00
Alex Ionescu
790e2352f2 - Allocate a copy of the EA buffer even for kernel-mode requests, also make the call use a tagged buffer.
- Document call to ObOpenObjectByName
- Properly handle and document all possible cases (parse failures vs I/o failures vs both), and handle dereferencing and status codes nicely.
- Detect if the FSD is reparsing, which we don't support now (we'll bugcheck for now, so we can quickly detect this later instead of handling it wrong).

svn path=/trunk/; revision=22882
2006-07-06 03:40:16 +00:00
Magnus Olsen
4bbd216eab Save Screen Saver you select with right value to the system register when u select apply or ok
svn path=/trunk/; revision=22881
2006-07-06 02:29:16 +00:00
Magnus Olsen
7339d03e09 Fixing one bug, do not list current screensaver twice.
svn path=/trunk/; revision=22880
2006-07-06 01:55:53 +00:00
Magnus Olsen
393a276f68 Commit initiate work of implement of autostart of screen saver.
svn path=/trunk/; revision=22879
2006-07-06 01:44:01 +00:00
Alex Ionescu
0f2c6e474b - Move the code in IoCreateFile inside IopParseDevice where it belongs. Currently only a raw move and hacks to make it not regress anything, but in the future we can now finally start applying some important fixes for proper communication with FSDs and setting a myriad of flags and settings required. Will also allow for some nice optimizations in the future.
svn path=/trunk/; revision=22878
2006-07-05 23:55:45 +00:00
Ged Murphy
51cd8da6b7 update Wine file.
svn path=/trunk/; revision=22877
2006-07-05 22:52:42 +00:00
Ged Murphy
b20974cc24 Sync to Wine-0_9_16:
*no changes since 0.9.11 ...

Sync to Wine-0_9_11:
Byeong-Sik Jeon <wjsqudtlr@gmail.com>
- commdlg: Updated Korean translation.
Ulrich Czekalla <ulrich@codeweavers.com>
- commdlg: Properly set and retrieve colour value from combo box .
Mike McCormack <mike@codeweavers.com>
- commdlg: Malformed filters are still added to the filter combo box.
 
Sync to Wine-0_9_10:
Mike McCormack <mike@codeweavers.com>
- comdlg32: Use a property for the color dialog's information.
- comdlg32: Remove the property when destroy the dialog box.
 
Sync to Wine-0_9_8:
Vitaliy Margolen <wine-patch@kievinfo.com>
- commdlg: Add font sizes 6 and 7 to font select dialog.
Henning Gerhardt <henning.gerhardt@web.de>
- commdlg: Update German resource.
Petr Tesarik <hat@tesarici.cz>
- commdlg: Czech language resources encoding fix.
Dmitry Timoshkov <dmitry@codeweavers.com>
- Add support for CDM_HIDECONTROL message in the file open dialog.
Andrey Turkin <pancha@mail.nnov.ru>
- commdlg: IShellBrowser sets IShellView window's control id to 5002.
Fatih Ac <fasici@linux-sevenler.org>
- commdlg: Turkish translation.
 
Sync to Wine-0_9_7:
Michael Kaufmann <hallo@michael-kaufmann.ch>
- commdlg: File open dialog: Use the specified instance handle for
  custom dialog templates.
 
Sync to Wine-0_9_6:
YunSong Hwang <hys545@dreamwiz.com>
- commdlg: Updated Korean translation.
Ulrich Czekalla <ulrich@codeweavers.com>
- commdlg: If provided use and update hDevMode in the PAGESETUPDLG struct.
  Update the dmDefaultSourcea return value inside hDevMode.
Stefan Br¹ns <stefan.bruens@rwth-aachen.de>
- commdlg: Makes return value of FILEDLG95_SendFileOK dependent of
  return value, not of DWL_MSGRESULT.
 
Sync to Wine-0_9_5:
Dan Kegel <dank@kegel.com>
- commdlg: Let the color picker respond properly to keystrokes.

svn path=/trunk/; revision=22876
2006-07-05 22:48:31 +00:00
Alex Ionescu
9307b5a3b7 - Begin attempt at usage of the OPEN_PACKET for I/O Create operations. Currently we only build it and verify it, and I've fixed up IopCreateFile.
svn path=/trunk/; revision=22871
2006-07-05 20:56:03 +00:00
Alex Ionescu
0e84e0e3c1 - Silence TCP/IP.
- Prototye fix.

svn path=/trunk/; revision=22870
2006-07-05 20:36:56 +00:00
Alex Ionescu
cca46c3214 - Simplify IopParseDevice by removing duplicate code.
svn path=/trunk/; revision=22869
2006-07-05 20:08:08 +00:00
Alex Ionescu
54c6ba2513 [FORMATTING] - Fix formatting in IoCreateFile
svn path=/trunk/; revision=22868
2006-07-05 19:55:25 +00:00
Magnus Olsen
284101e016 [AUDIT] after looking through code no signs of reverse engineering were found. Almost ever thing is almost complete from djgpp, few funcion is writen by us
svn path=/trunk/; revision=22867
2006-07-05 19:09:29 +00:00
Magnus Olsen
bea2e9174e [AUDIT] after looking through code no signs of reverse engineering were found.
1. Follow fix need be done remove hardcode exe, cmd extions in wstart* use PATHEXT to found right excutions.


svn path=/trunk/; revision=22866
2006-07-05 18:57:25 +00:00
Magnus Olsen
2711a8c0ae [AUDIT] after looking through code no signs of reverse engineering were found. Alot stuff taken from wine, it contain hard code string like date, contry names, that need to move to msvcrt dll rc file
svn path=/trunk/; revision=22865
2006-07-05 18:49:03 +00:00
Magnus Olsen
dffe30bd96 [AUDIT] after looking through code no signs of reverse engineering were found. Almost all code is from djgpp, few functions is from us.
svn path=/trunk/; revision=22864
2006-07-05 18:43:17 +00:00
Magnus Olsen
adfdf54371 [AUDIT] after looking through code no signs of reverse engineering were found.
svn path=/trunk/; revision=22863
2006-07-05 18:36:44 +00:00
Magnus Olsen
016d44f812 [AUDIT] after looking through code no signs of reverse engineering were found, and most code is base on djgpp
svn path=/trunk/; revision=22862
2006-07-05 18:34:01 +00:00
Ged Murphy
a976fc233e clean up code and use HeapAlloc + fix memory leaks
svn path=/trunk/; revision=22861
2006-07-05 15:29:37 +00:00
Alex Ionescu
ce56d2bf07 - Make IoCreateFile use deferred I/O completion.
- Fixed a bug in TCP/IP that was making it complete IRP_MJ_CREATE with STATUS_SUCCESS yet with the IRP marked as pending.

svn path=/trunk/; revision=22859
2006-07-05 06:45:00 +00:00
Alex Ionescu
5338d133b3 [AUDIT] - Almost all the functions are stubs, except for some LSA functions which merely seem to be wrappers that build LPC messages for the actual LSA Server to implement (which isn't part of these files).
- Add some stubs during my attempt to load Google Talk (forget about it!). However WINE implements all these functions entirely so maybe we should just sync with them?

svn path=/trunk/; revision=22858
2006-07-05 06:43:46 +00:00
Alex Ionescu
32472d9eff - Ongoing IoCreateFile fixes:
- Start with empty object
  - Set the type/size in the object header
  - Don't rudely ignore the following flags: FILE_WRITE_THROUGH, FILE_SEQUENTIAL_ONLY, FILE_RANDOM_ACCESS, OBJ_CASE_INSENSITIVE; they are not merely decorative.
  - Set correct IRP flags for IRP_CREATE_OPERATION so that the I/O manager knows how to deal with the request (also set SYNCH_API flag).
  - Deferred mode not yet enabled.
  - Simplify the way we set the parameters for pipes/mailslots/files.
  - Don't close the handle of an invalid FO.

svn path=/trunk/; revision=22857
2006-07-05 04:16:37 +00:00
Alex Ionescu
cea9a8ea57 - Fix IopcloseFile... I'm not sure it was working right after the Ob changes, so it's possible some devices weren't getting IRP_MJ_CLEANUP... also made it lock the FO and detect malformed FOs (more spam for you on the debug logs!) -- but this is one problem I'm planning on fixing.
svn path=/trunk/; revision=22856
2006-07-05 02:02:44 +00:00
Alex Ionescu
6fc8c860f1 - The FO's lock is a Synch event, not a notification event!
svn path=/trunk/; revision=22855
2006-07-05 00:22:09 +00:00
Alex Ionescu
b450016579 - Finally fix IoCreateStreamFileObject. I had fixed it a long time ago but back then it was causing regressions. It now properly creates a handle for the FO and sets the right flags.
svn path=/trunk/; revision=22854
2006-07-05 00:17:34 +00:00
Alex Ionescu
ef41fc2623 - Fix IopQueryNameFile to properly validate and calculate lengths at each step of the way and to support incomplete buffers. Previously, dangerous assumptions were made about the buffers and the actual required length was never returned.
svn path=/trunk/; revision=22853
2006-07-04 23:31:42 +00:00
Alex Ionescu
0342a00bde - Fix and combine the creation of I/O Object Types, it was a complete mess with missing attributes and dangerous bugs (Adapters and Controllers had IopParseDevice as a parse routine and the same pool charge as a deivice object, etc.)
svn path=/trunk/; revision=22852
2006-07-04 22:41:47 +00:00
Alex Ionescu
9ed248e63a - Add locking in IopDeleteFile, and only check for completion context or name if the file has a DO, otherwise those shouldn't exist.
- Added support for device objects as well in IopSecurityFile, since the code is similar. Also fixed sync semantics for file objects, and made other little small fixes.

svn path=/trunk/; revision=22851
2006-07-04 22:28:23 +00:00
Ged Murphy
f1260d7115 update Wine doc
svn path=/trunk/; revision=22850
2006-07-04 21:45:05 +00:00
Ged Murphy
94384e8058 Sync to Wine-0_9_16:
Alexandre Julliard <julliard@winehq.org>
- comctl32: Don't use sizeof in traces to avoid printf format warnings.
Dmitry Timoshkov <dmitry@codeweavers.com>
- comctl32: Return FALSE in the WM_CLOSE PROPSHEET_DialogProc handler.
Mike McCormack <mike@codeweavers.com>
- comctl32: Use the listview's background colour when drawing with imagelist.
- comctl32: Arrange the listview after deleting all items so we will place iconsat the top again.

svn path=/trunk/; revision=22849
2006-07-04 21:33:34 +00:00
Ged Murphy
21d56df85d update ROS code to call new tests
svn path=/trunk/; revision=22848
2006-07-04 21:05:16 +00:00
Ged Murphy
df1bfe81ba update comctl32 regression tests to Wine-0_9_16, which now includes listview testing
svn path=/trunk/; revision=22847
2006-07-04 20:58:29 +00:00
Ged Murphy
4334d625a1 revert r22824 as requested by Fireball.
The auto sync didn't work as expected.

svn path=/trunk/; revision=22843
2006-07-04 19:27:14 +00:00
Aleksey Bragin
762103b6c0 Revert netapi and mpr winesyncs (needs to be re-applied correctly next time)
svn path=/trunk/; revision=22842
2006-07-04 19:22:00 +00:00
Aleksey Bragin
04bed5affc Revert cards.dll and crypt32.dll autowinesync.
svn path=/trunk/; revision=22841
2006-07-04 19:14:19 +00:00
James Tabor
e27f4b8e40 - CreateWindowExa/W
svn path=/trunk/; revision=22840
2006-07-04 18:26:49 +00:00
Aleksey Bragin
4f0a4cd681 ROS-specific patch for autosyncing with Wine
svn path=/trunk/; revision=22839
2006-07-04 17:33:54 +00:00
Alex Ionescu
fbfa3c8507 - Misc formatting fixes.
svn path=/trunk/; revision=22838
2006-07-04 16:53:29 +00:00
Alex Ionescu
cd3a5651b9 - Fix NtSetInformationFile to use correct sync/async semantics and use deferred I/O completion. This routine doesn't use IopSyncronous/Asyncronous helper routines because it can be optimized to handle some Information classes in-line (not currently being done except for Completion Ports, like the previous code).
svn path=/trunk/; revision=22837
2006-07-04 16:50:56 +00:00
Alex Ionescu
e5d57b0b41 - Fix NtQueryInformationFile to use correct sync/async semantics and use deferred I/O completion. This routine doesn't use IopSyncronous/Asyncronous helper routines because it can be optimized to handle some Information classes in-line (not currently being done).
svn path=/trunk/; revision=22836
2006-07-04 15:36:55 +00:00
Johannes Anderwald
e325f17cb8 fix build
svn path=/trunk/; revision=22835
2006-07-04 15:15:45 +00:00
The Wine Synchronizer
ba0d1ad833 Autosyncing with Wine
svn path=/trunk/; revision=22834
2006-07-04 14:20:20 +00:00
The Wine Synchronizer
17984c4182 Autosyncing with Wine
svn path=/trunk/; revision=22833
2006-07-04 14:17:14 +00:00
The Wine Synchronizer
a40ef44f44 Autosyncing with Wine
svn path=/trunk/; revision=22832
2006-07-04 14:14:41 +00:00
The Wine Synchronizer
238674ba55 Autosyncing with Wine
svn path=/trunk/; revision=22831
2006-07-04 14:12:07 +00:00
The Wine Synchronizer
0cb90dcf00 Autosyncing with Wine
svn path=/trunk/; revision=22830
2006-07-04 14:09:35 +00:00
The Wine Synchronizer
263c708067 Autosyncing with Wine
svn path=/trunk/; revision=22829
2006-07-04 14:04:07 +00:00
The Wine Synchronizer
a70872436e Autosyncing with Wine
svn path=/trunk/; revision=22828
2006-07-04 13:58:40 +00:00
The Wine Synchronizer
c7b8d82ee6 Autosyncing with Wine
svn path=/trunk/; revision=22827
2006-07-04 13:55:42 +00:00
The Wine Synchronizer
8405953e75 Autosyncing with Wine
svn path=/trunk/; revision=22826
2006-07-04 13:51:21 +00:00
The Wine Synchronizer
bed42ce391 Autosyncing with Wine
svn path=/trunk/; revision=22824
2006-07-04 13:46:00 +00:00
The Wine Synchronizer
1bdd35fc6e Autosyncing with Wine
svn path=/trunk/; revision=22823
2006-07-04 13:41:25 +00:00
Johannes Anderwald
6b7b808d5a * halfplemented console system menu
svn path=/trunk/; revision=22822
2006-07-04 13:36:57 +00:00
The Wine Synchronizer
bb69f46634 Autosyncing with Wine
svn path=/trunk/; revision=22821
2006-07-04 13:33:18 +00:00
Johannes Anderwald
2cb63fcb9b * remove unreferenced parameters warning in font.c layout.c colors.c
* remove global structure g_ConsoleInfo
* implemented reading/writing of options dialog settings
* added apply dialog
* thnx to w3seek for help

svn path=/trunk/; revision=22820
2006-07-04 13:22:05 +00:00
The Wine Synchronizer
4b35b55e7a Autosyncing with Wine
svn path=/trunk/; revision=22819
2006-07-04 12:05:13 +00:00
James Tabor
979f9f7d1a - NtUser/CreateWindowExA/W:
- During testing I found one application not working with the new mdi support changes. VIDE from the Vgui C++ project was creating a bugcheck trying to access kernel space. Just for precautions I moved the kernel code back into user32. After testing the application, it worked fine. So, I'm reordering the execution of CreateWindowEx. Keeping a small part in kernel space and the rest in user. This has caused code duplication in user32, but I want to set this straight first. I will sort out the code duplication later. Sorry for the mess.

svn path=/trunk/; revision=22818
2006-07-04 05:56:25 +00:00
James Tabor
b43b9aa85e Restore tinus patches.
svn path=/trunk/; revision=22817
2006-07-04 02:32:33 +00:00
James Tabor
bc28737725 Wine port for DefWindowProcAW WM_NCCREATE help SetText.
svn path=/trunk/; revision=22816
2006-07-03 22:36:09 +00:00
Magnus Olsen
cb6818f2df patch from LMH1 : see bug 1606
NORWEGIAN translations

svn path=/trunk/; revision=22815
2006-07-03 22:28:49 +00:00
Johannes Anderwald
fc2be1d1ce [AUDIT]
* unlock win32csr
* win32csr is totally different implemented from NT Version 
* audit reviewed by Alex_Ionescu

svn path=/trunk/; revision=22814
2006-07-03 22:08:47 +00:00
James Tabor
f985e4b908 Move hBmpClose to the MDICLIENTINFO structure and modified MDI_RestoreFrameMenu to support the change.
svn path=/trunk/; revision=22813
2006-07-03 22:04:42 +00:00
Magnus Olsen
6d2332c2fb Commit bug 1347, patch from w3seek
This patch implements the function TreeResetNamedSecurityInfoA. However, as it's not even implemented in windows, the code is disabled by default.


svn path=/trunk/; revision=22812
2006-07-03 21:43:04 +00:00
Magnus Olsen
3292d82ef6 forget this file sorry
svn path=/trunk/; revision=22811
2006-07-03 21:40:20 +00:00
Magnus Olsen
3bd0205d06 test case for QueueUserWorkItem from bug 1609
by w3seek

svn path=/trunk/; revision=22810
2006-07-03 21:29:32 +00:00
Johannes Anderwald
ac9badbafc set svn:eol-style:native
svn path=/trunk/; revision=22809
2006-07-03 20:27:46 +00:00
Magnus Olsen
76db5b581b 5 of 4 commit (sorry my svn clinet is crazy for moment)
Commit w3seek patch from bug 1609 : file attachment (id=910) 
The attached patch implements QueueUserWorkItem()/RtlQueueWorkItem() (lacks
optimizations!!!). WINE's latest rpcrt4 relies on it.

1. Implement QueueUserWorkItem()/RtlQueueWorkItem() :
2. A slightly optimized 
3. Supports WT_TRANSFER_IMPERSONATION
4. Slightly improved handling of growing/shrinking the pool by assuming work items with WT_EXECUTELONGFUNCTION run longer
5. Fixes a hack that made a worker thread always terminate if there were at least one more thread available




svn path=/trunk/; revision=22808
2006-07-03 20:27:38 +00:00
Magnus Olsen
ae94c696ac 4 of 4 commit (sorry my svn clinet is crazy for moment)
Commit w3seek patch from bug 1609 : file attachment (id=910) 
The attached patch implements QueueUserWorkItem()/RtlQueueWorkItem() (lacks
optimizations!!!). WINE's latest rpcrt4 relies on it.

1. Implement QueueUserWorkItem()/RtlQueueWorkItem() :
2. A slightly optimized 
3. Supports WT_TRANSFER_IMPERSONATION
4. Slightly improved handling of growing/shrinking the pool by assuming work items with WT_EXECUTELONGFUNCTION run longer
5. Fixes a hack that made a worker thread always terminate if there were at least one more thread available




svn path=/trunk/; revision=22807
2006-07-03 20:26:58 +00:00
Magnus Olsen
34861fa5e2 3 of 4 commit (sorry my svn clinet is crazy for moment)
Commit w3seek patch from bug 1609 : file attachment (id=910) 
The attached patch implements QueueUserWorkItem()/RtlQueueWorkItem() (lacks
optimizations!!!). WINE's latest rpcrt4 relies on it.

1. Implement QueueUserWorkItem()/RtlQueueWorkItem() :
2. A slightly optimized 
3. Supports WT_TRANSFER_IMPERSONATION
4. Slightly improved handling of growing/shrinking the pool by assuming work items with WT_EXECUTELONGFUNCTION run longer
5. Fixes a hack that made a worker thread always terminate if there were at least one more thread available




svn path=/trunk/; revision=22806
2006-07-03 20:24:46 +00:00
Magnus Olsen
f9fa435673 2 of 4 commit (sorry my svn clinet is crazy for moment)
Commit w3seek patch from bug 1609 : file attachment (id=910) 
The attached patch implements QueueUserWorkItem()/RtlQueueWorkItem() (lacks
optimizations!!!). WINE's latest rpcrt4 relies on it.

1. Implement QueueUserWorkItem()/RtlQueueWorkItem() :
2. A slightly optimized 
3. Supports WT_TRANSFER_IMPERSONATION
4. Slightly improved handling of growing/shrinking the pool by assuming work items with WT_EXECUTELONGFUNCTION run longer
5. Fixes a hack that made a worker thread always terminate if there were at least one more thread available




svn path=/trunk/; revision=22805
2006-07-03 20:23:48 +00:00
Magnus Olsen
d2bab053ae 1 of 4 commit (sorry my svn clinet is crazy for moment)
Commit w3seek patch from bug 1609 : file attachment (id=910) 
The attached patch implements QueueUserWorkItem()/RtlQueueWorkItem() (lacks
optimizations!!!). WINE's latest rpcrt4 relies on it.

1. Implement QueueUserWorkItem()/RtlQueueWorkItem() :
2. A slightly optimized 
3. Supports WT_TRANSFER_IMPERSONATION
4. Slightly improved handling of growing/shrinking the pool by assuming work items with WT_EXECUTELONGFUNCTION run longer
5. Fixes a hack that made a worker thread always terminate if there were at least one more thread available




svn path=/trunk/; revision=22804
2006-07-03 20:23:10 +00:00
James Tabor
abedc7b76b Restored sequence for setting WindowObject and callers styles.
svn path=/trunk/; revision=22803
2006-07-03 20:04:17 +00:00
Magnus Olsen
a0e5355f01 wrong propyty on inlcude file it is not a executable format
svn path=/trunk/; revision=22802
2006-07-03 19:59:50 +00:00
Johannes Anderwald
7b888e6f12 * dont perform IntValidateWindowStationHandle in UserCreateMenu when current process is CsrProcess
* this makes system menu for cmd.exe display
* patch reviewed by w3seek and tested by me

svn path=/trunk/; revision=22801
2006-07-03 19:25:48 +00:00
Aleksey Bragin
65045dfa79 Fix a typo (should have been commented from the beginning) in autochk: this removes UM exception in autochk during bootup
svn path=/trunk/; revision=22800
2006-07-03 16:51:19 +00:00
Hervé Poussineau
2bd2be9797 Add a big warning about installing custom drivers
svn path=/trunk/; revision=22799
2006-07-03 15:04:46 +00:00
Hervé Poussineau
41badff137 Define DLL_WINE_PREATTACH constant
svn path=/trunk/; revision=22798
2006-07-03 14:00:16 +00:00
Hervé Poussineau
19c1803cbb Add missing constants
svn path=/trunk/; revision=22796
2006-07-03 10:19:42 +00:00
James Tabor
afe9ebf1f4 -NtUserCreateWindowEx: Removed not about setting WS_CHILD.
svn path=/trunk/; revision=22795
2006-07-03 07:54:45 +00:00
James Tabor
f638f11734 -NtUserCreateWindowEx: Don't force WS_CHILD set, it could be WS_POPUP.
svn path=/trunk/; revision=22794
2006-07-03 07:52:22 +00:00
Hervé Poussineau
5167c901d3 Add more defines for anonymous structure/union names
svn path=/trunk/; revision=22793
2006-07-03 07:43:28 +00:00
James Tabor
8307280bc9 - NtUser/CreateWindowExA/W:
- Add support for WS_EX_MDICHILD. Reordered sequence for setting WindowObject and callers styles.
  - Synced mdi.c from Wine. Added support function MDI_GetId help return IDMenu.
  - Thanks to GreatLord for helping.

svn path=/trunk/; revision=22792
2006-07-03 04:33:29 +00:00
Alex Ionescu
0ffb1da110 - NtQueryDirectoryFile:
- Setup a buffer/MDL and the correct IRP flags so that that I/O manager can handle allocation, copy, free for us.
  - Setup the search pattern as an auxiliary buffer so that the I/O Mgr can track that one for us as well.
  - Update to use the correct sync semantics/routines.
  - Use deferred I/O completion.
- Outline TODOs and workplan for iofunc.c

svn path=/trunk/; revision=22791
2006-07-03 02:50:16 +00:00
Alex Ionescu
933ef1952d - NtWriteFile:
- Allow async i/o access on mailslots, without a byte offset.
  - Fix sync semantics just like for the other functions until now.
  - Fix a potential object leak in  a failure case.
  - Don't call IoBuildSyncronousFsdRequest since we want to build the IRP ourselves.
  - Use deferred I/O as an optimization.

svn path=/trunk/; revision=22790
2006-07-03 01:17:14 +00:00
Alex Ionescu
c4bc69cfd7 - NtReadFile:
- Allow async i/o access on mailslots, without a byte offset.
  - Fix sync semantics just like for the other functions until now.
  - Fix a potential object leak in  a failure case.
  - Don't call IoBuildSyncronousFsdRequest since we want to build the IRP ourselves.
  - Use deferred I/O as an optimization.

svn path=/trunk/; revision=22789
2006-07-02 23:02:38 +00:00
Alex Ionescu
2ea73a1428 - Same sort of changes for NtSetVolumeInformationFile.
svn path=/trunk/; revision=22788
2006-07-02 22:19:29 +00:00
Alex Ionescu
b17492f448 - Fix sync usage in NtQueryVolumeInformationFile, set the right IRP flags so that the I/O manager can handle copying the data back and freeing the buffer, and enable deferred completion.
svn path=/trunk/; revision=22787
2006-07-02 22:14:20 +00:00
Alex Ionescu
7dc0e5e4e8 - Add proper sync handling to NtUnlockFile.
svn path=/trunk/; revision=22786
2006-07-02 22:07:20 +00:00
Aleksey Bragin
d063cd0281 Mikhail Zvyozdochkin: Fix compiling on linux (adding missing headers inclusion)
svn path=/trunk/; revision=22785
2006-07-02 22:03:40 +00:00
Aleksey Bragin
feaabba4dc Mikhail Zvyozdochkin: Fix compiling on linux (adding proper include path for halxbox)
svn path=/trunk/; revision=22784
2006-07-02 21:59:04 +00:00
Hervé Poussineau
ff2f32e1fc Delete now useless code
svn path=/trunk/; revision=22782
2006-07-02 21:35:31 +00:00
Hervé Poussineau
6213ba017a Delete now useless code
svn path=/trunk/; revision=22781
2006-07-02 21:35:06 +00:00
Hervé Poussineau
b4a471a78a Rename richedit to riched32 and lzexpand to lz32
svn path=/trunk/; revision=22780
2006-07-02 21:33:02 +00:00
Eric Kohl
327a05db0f Implement CM_Open_DevNode_Key and add CM_Open_DevNode_Key_Ex stub.
svn path=/trunk/; revision=22777
2006-07-02 19:20:45 +00:00
Alex Ionescu
8a2e062765 - More of the same for NtNotifyChangeDirectoryFile.
svn path=/trunk/; revision=22776
2006-07-02 19:11:26 +00:00
Alex Ionescu
363f94ff5d - NtLockFile:
- Add proper sync operation.
  - Set the APC Routine/Context in the IRP instead of ignoring them.
  - Dereference the event on failure.
  - Set the allocated buffer as AuxiliaryBuffer so the I/O manager fres it.

svn path=/trunk/; revision=22775
2006-07-02 19:01:17 +00:00
Alex Ionescu
125c2ebaac - Temporarily disable queueing IRPs to their threads, since raising to APC_LEVEL seems to cause some weird user-mode exceptions.
svn path=/trunk/; revision=22774
2006-07-02 18:47:54 +00:00
Hervé Poussineau
1dc3c727a1 Implement IopReinitializeBootDrivers, on the model of IopReinitializeDrivers
svn path=/trunk/; revision=22773
2006-07-02 18:34:21 +00:00
Alex Ionescu
bd7e79620d - Move NtCancelIoFile and NtDeleteFile to file.c, they don't deal with IRPs.
- Create IopFinalizeAsynchronousIo to deal with Sync APIs working on Async file objects, which need to be waited on differently and have the IOSB copied manually.
- Update NtFlushBuffersFile to new semantics (ie, usage of the new implemented functions).

svn path=/trunk/; revision=22772
2006-07-02 18:20:37 +00:00
Alex Ionescu
a6a473a94d - Same changes for IoSertInformation: Lock the FO, queue the IRP, support alerted I/O, etc...
svn path=/trunk/; revision=22771
2006-07-02 16:41:49 +00:00
Alex Ionescu
588b81a0ba - Combine IoQueryVolumeInformation and IoQueryFileInformation
- Fix them to lock the fileobject for synch operations, use IopCleanupFailedIrp, queue the IRP in the thread's list, support aborting the I/o operation through IopAbortInterruptedIrp, and properly wait for comlpetion.

svn path=/trunk/; revision=22770
2006-07-02 16:35:05 +00:00
Alex Ionescu
13ef11ff23 - Start of heavy work on iofunc.c:
- Created our new friends: IopCleanupFailedIrp, IopAbortInterruptedIrp, IopPerformSynchronousRequest, IopLockFileObject, IopUnlockFileObject, IopQueueIrpToThread, IopUpdateOperationCount.
  - What does this mean: We actually queue IRPs to their thread! We actually respect I/O transfers being interrupted/alerted! We actually respect I/O operation counts! We actually LOCK FILE OBJECTS instead of randomly using them! We now support Deferred (read: MUCH faster) I/O completion.
- First function blessed: IopDeviceFsIoControl.
- Also simplified access rights check and fixedup some formatting.

svn path=/trunk/; revision=22769
2006-07-02 16:20:10 +00:00
Alex Ionescu
fbddf0d1ac - Fix formatting of some newly added functions before starting heavy work.
svn path=/trunk/; revision=22768
2006-07-02 14:26:25 +00:00
Alex Ionescu
fcb77c4c3d - Move IoGetBaseFileSystemDeviceObject to device.c and make it check for FO_DIRECT_DEVICE_OPEN, which it wasn't before (and also code it in a less confusing way like the other IoGetXxxDeviceObject APIs)
- Mask out the DO_VERIFY_VOLUME flag when mounting a device.

svn path=/trunk/; revision=22767
2006-07-02 06:28:29 +00:00
Alex Ionescu
130980ccde - Small optimization: don't bother to get the File System Listhead we'll parse if we're going to fail because of wrong VPB flags later... get the list only after we're sure we need it.
svn path=/trunk/; revision=22766
2006-07-02 06:18:55 +00:00
Alex Ionescu
ff429eb9f3 - Use IoIsErrorUserInoduced to check if we couldn't mount the device because it was not actually inserted, was unrocognized, write-protected, etc... and completely break out of the mounting procedure if so.
- Also use FsRtlIsTotalDeviceFailure to check if the error was a fatal device error (like a CRC error) and abandon mounting in this case as well.

svn path=/trunk/; revision=22765
2006-07-02 06:15:52 +00:00
Alex Ionescu
23be4d46c6 - Implement IopInitailizeVpbForMount for the purpose of setting up the VPB for a newly mounted DO. It properly references the VPB and sets up its stack size and flags, adding support for VPB_RAW_MOUNT. Also sets the VPB pointer in the DevObjExtension.
- Fix a bug which was causing us to incorrectly unlock the device if it was already locked by the caller isntead of by IopMountVolume.
- When loading the file system, make sure to unlock the device object if we had locked it in IopMountVolume, as well as to re-lock it afterwards. Also handle a potential race condition due to this unloacking, in which the VPB might've become mounted behind our back, and simply return success if this happened.

svn path=/trunk/; revision=22764
2006-07-02 06:11:19 +00:00
Alex Ionescu
93454acf2b - Improve list looping to remove gotos.
- Dereference the device object in case of failure.
- Add some optimizations to quickly skip invalid raw mounting.
- Add support for VPB_RAW_MOUNT.
- Allow raw mount if this is the only device on the list.
- Make the success case go through shared exit, otherwise the device wasn't getting unlocked previously.

svn path=/trunk/; revision=22763
2006-07-02 05:52:47 +00:00
Alex Ionescu
320000e093 - If the device to be mounted is an attachee, find the base device object
- Reference the device object being mounted.
- If the file system being mounted is an atachee, find its base device object too, and increase the IRP Stack for each attached FSD.
- Fix IRP parameters with this new information.

svn path=/trunk/; revision=22762
2006-07-02 05:44:27 +00:00
Alex Ionescu
e5811a1b35 - Mount the FS inline to avoid sending 6 parameters to a function only called once.
- Set the right IRP flags for a mount operation.
- Don't ignore AllowRawMount flag.
- Don't waste time passing or clearing unused flags/data on the IRP/Io Stack.

svn path=/trunk/; revision=22761
2006-07-02 05:37:55 +00:00
Alex Ionescu
2dfe23b2f6 - Respect DeviceIsLocked flag and Alertable in IopMountVolume
- Don't mount if the VPB is alread ymoutned or being removed
- Bugcheck the system if we failed to mount the boot partition.

svn path=/trunk/; revision=22760
2006-07-02 05:30:45 +00:00
Alex Ionescu
e3ec87ef6d - Fix the hack in the previous commit which broke FS support.
svn path=/trunk/; revision=22759
2006-07-02 04:33:45 +00:00
Alex Ionescu
8da2913330 - Simplify/modularize FS registration by using distinct lists for each type of FS (Tape/Disk/Network/Cdrom).
- Optimize by using directly the device queue instead of allocating a structure for each FS registered.
- Hack IopMountVolume to manage this new model. Improved version coming in next patch to deal with some bugs.

svn path=/trunk/; revision=22758
2006-07-02 02:04:04 +00:00
Alex Ionescu
23e06403c7 - Get rid of the stupid LIST_FOR_EACH macros in FS Notifcation APIs.
- Each new change request should be queued at the end of the list, not at the head.
- Also, reference the device object for each registration, since one more object is holding a pointer to it, likewise, dereference the object on deregistration.
- IopLoadFileSystem should use the base FSD in case the device object is an attachee. Also, use IoBuildDEviceIoControlRequest to minimize the IRP setup to only a couple of lines.

svn path=/trunk/; revision=22757
2006-07-02 01:44:53 +00:00
Alex Ionescu
fe8b3cfda1 - Implement some functions to handle VPB Referencing/Dereferencing.
- IoVerifyVolume:
  - Send the IRP to the base FSD, in case the current FSD is an attachee
  - Set correct flags in the IRP to notify that this is a mount operation using PAGING I/O semantics.
  - Don't ignore AllowRawMount parameter.
  - We want to mount the File System on *FAILURE*, not on SUCCESS!
  - Add reference/dereferencing to the VPB.

svn path=/trunk/; revision=22756
2006-07-02 01:35:45 +00:00
Alex Ionescu
042e74885b - Some small changes to some prototypes/names for upcoming functionality.
svn path=/trunk/; revision=22755
2006-07-02 01:29:12 +00:00
Alex Ionescu
bc0260bc30 - Correct function name
svn path=/trunk/; revision=22754
2006-07-02 01:23:18 +00:00
Magnus Olsen
b5cc6d65cd remove STYLEX DS_SHELLFONT
svn path=/trunk/; revision=22753
2006-07-02 01:11:07 +00:00
Magnus Olsen
573f5162e1 revert Revision: 22668 this change is also incorrect. now the rc file is more less okay again
svn path=/trunk/; revision=22752
2006-07-02 00:45:08 +00:00
Magnus Olsen
7d6b93dd57 revert complete wrong changes 22742
svn path=/trunk/; revision=22751
2006-07-02 00:10:13 +00:00
Magnus Olsen
766a36d23a Adding langues type (LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US) to en.rc some forget adding it. it is wrong type as well fixing it later. it should be LANG_NETURAL.
svn path=/trunk/; revision=22750
2006-07-01 23:59:33 +00:00
Alex Ionescu
e7423e0ba3 [FORMATTING] - Cleanup formatting before starting to work on the file.
svn path=/trunk/; revision=22749
2006-07-01 22:47:52 +00:00
Alex Ionescu
3ea25ef417 - Add some more functions that just build IRPs to send to devices into iofunc.c from vpb.c
- Add IoCheckQuerySetvolumeInformation to util.c from vpb.c with other similar functions
- Add the actual VPB functions in vpc.c to fs.c, and rename fs.c to volume.c, because it already contained Volume APIs, and now with VPB, even more so. It also still contains the FileSystem stuff, which is of course also generically part of "volumes".
- Delete vpb.c, rename fs.c to volume.c.

svn path=/trunk/; revision=22748
2006-07-01 21:58:29 +00:00
Alex Ionescu
9bb57a0fc7 - Move efi.c to \ex, because the functions are related to environmental variables, not I/O.
- Create \wmi directory and put wmi.c, since it's the start of a large chunk of the XP+ kernel dedicated to WMI support.
- Separate \io into \iomgr and \pnpmgr

svn path=/trunk/; revision=22747
2006-07-01 21:51:06 +00:00
Alex Ionescu
6446e5f7e9 - Add definitions for additional DOE flags to NDK.
- I/O Packet APIs improvements Part 2:
  - Implement IoSetStartIoAttributes
  - Obey StartIo Flags set by IoSetStartIoAttributes and change Packet functions to Windows XP/2003 semantics by supporting non-cancelable packets and deferred Start I/O calling.

svn path=/trunk/; revision=22746
2006-07-01 21:29:50 +00:00
Eric Kohl
e61c9cc0d7 Enable CM_Connect_MachineW to connect to the local machine.
svn path=/trunk/; revision=22745
2006-07-01 21:01:59 +00:00
Alex Ionescu
51989fa847 - Move IopInitialize/StartDevice to PnP Manager
- I/O Packet APIs fixes Part 1:
  - Clear the current IRP before parsing the Device Queues
  - Respect Cancelable parameter in IoStartNextPacket(ByKey) instead of ignoring it (acquire the cancel lock when it's requested)
  - Raise IRQL to DISPATCH_LEVEL in IoStartPacket instead of expecting the caller to do it and crashing. Also only use Cancel Lock if a Cancel Function was specified.
  - Actually handle the case where the IRP Was cancelled right after insert and the Cancel Routine has to be called.

svn path=/trunk/; revision=22744
2006-07-01 18:56:09 +00:00
Alex Ionescu
036139907e - Implement IoRegisterLastchanceShutdownNotification based on IoRegisterShutdownNotification
- Modify IoUnregisterShudownNotification to loop both lists now.
- Used the lock in IoShutdownREgisteredDevices when looping the list, and changed it to send IRP_MJ_SHUTDOWN to the attached DO. Also fixed a memory leak where the shutdown entry wasn't being freed, and optimized the function only to initialize the event once (And simply clear it each time).
- Moved IoSynchronousInvalidateDeviceRelations to PnP

svn path=/trunk/; revision=22743
2006-07-01 18:26:22 +00:00
Johannes Anderwald
f39240e913 * DS_SHELLFONT is an style not an EXSTYLE.
svn path=/trunk/; revision=22742
2006-07-01 18:04:00 +00:00
Alex Ionescu
fcb5f1cfb6 - Use IoGetDevObjExtension and STDCALL->NTAPI.
- Fix some bugs in IoGetRelatedDeviceObject: We should make sure that FO_DIRECT_DEVICE_OPEN isn't set when reading from the VPB's DO, otherwise we return the FO's DO directly. Also check for attachment before trying to get any attached device.

svn path=/trunk/; revision=22741
2006-07-01 17:51:45 +00:00
Alex Ionescu
28692c3bed - Add IoGetDevObjExtension for getting the PEXTENDED_DEVOBJ_EXTENSION from a device object instead of always doing a huge typecast.
- Implement device unloading through IopUnloadDevice and device referencing through IopReferenceDeviceObject and IopDereferenceDeviceObject, and make IoDeleteDevice and IoDetachDevice unload the device on 0 reference count. Doesn't fully work yet.
- Simplify IoGetAttachedDEvice/IoGetAttachedDeviceReference not to use an extra stack variable.

svn path=/trunk/; revision=22740
2006-07-01 17:40:03 +00:00
Magnus Olsen
903f298c70 No change in the source code. It if only to test if new slave build server works or not
svn path=/trunk/; revision=22739
2006-07-01 12:08:35 +00:00
Johannes Anderwald
c5ca23f46b move english resource code into own file
svn path=/trunk/; revision=22738
2006-07-01 09:59:38 +00:00
Saveliy Tretiakov
36e0982b7e Reduce code dublication
svn path=/trunk/; revision=22737
2006-07-01 06:52:41 +00:00
Alex Ionescu
ff6b13eb13 - IopGetDevicePointer: Close the handle if we were able to acquire it.
- IoAttachDevice/IoAttachDeviceByPointer: Fail with STATUS_NO_SUCH_DEVICE if we couldn't attach.
- IoAttachDEviceTodEviceStackSafe: VPBs don't get inherited.
- IoCreateDevice: Only set OBJ_PERMAMENT if the caller requested it.
- IoCreateDevice: Return a NULL Device object if we failed to create it.
- IoCreateDevice: Set alignment requirement to 0, x86 doesn't need it.

svn path=/trunk/; revision=22736
2006-07-01 04:21:19 +00:00
Alex Ionescu
7a5dbe8152 [FORMATTING] - Fix STDCALL->NTAPI and some other commenting/formatting issues.
[AUDIT] - File doesn't even have a function over 3 lines long, no reason to lock it.

svn path=/trunk/; revision=22735
2006-07-01 03:45:00 +00:00
Alex Ionescu
c31f4054ec - Add some missing IO_ERROR definitions to the DDK and add some tags
- Fix IoSetThreadHardErrorMode... it was reading the TEB instead of the PETHREAD.
- Optimize Error Logging: Use a static work item instead of allocating one each time, and don't use a spinlock for the buffer count, when we can use interlocked functions instead.
- Log Entries can have Device AND/OR Driver Objects, not just a single one. They must also be referenced/dereferenced on allocation/free.
- Rewrite IopLogWorker to properly deal with Device/Driver objects and querying their names, as well as with additional strings that the caller might be sending.

svn path=/trunk/; revision=22734
2006-07-01 03:36:15 +00:00
Magnus Olsen
3f9f57f91e 1. revert my last changes to this file
2. Did solv the heapfree null check with if statement

svn path=/trunk/; revision=22733
2006-06-30 22:26:19 +00:00
Magnus Olsen
11963867d1 CreateServiceA
1. Do not try todo HeapFree when pointer is NULL in cleanup:
2. Remove goto cleanup code
3. Rewrote the code so it does not need goto 

 

svn path=/trunk/; revision=22732
2006-06-30 22:07:54 +00:00
Hervé Poussineau
a05350a500 - Simplify GetFileExt
svn path=/trunk/; revision=22731
2006-06-30 21:54:25 +00:00
Hervé Poussineau
1d4a994372 Pass the correct object type and desired access to ObOpenObjectByName
svn path=/trunk/; revision=22730
2006-06-30 21:49:12 +00:00
Hervé Poussineau
5179858da1 Use ObOpenObjectByPointer instead of creating ourselves the IRP_MJ_CREATE/CLEANUP/CLOSE IRPs
svn path=/trunk/; revision=22729
2006-06-30 21:47:42 +00:00
Hervé Poussineau
f8b990739a In ObOpenObjectByPointer, always pass right mapping to SeCreateAccessState, instead of relying on a optional/incorrect parameter
svn path=/trunk/; revision=22728
2006-06-30 21:34:53 +00:00
Alex Ionescu
d3ccc7eb41 - Better organize some APIs that were a bit all over the place. No code/formatting changes.
svn path=/trunk/; revision=22727
2006-06-30 19:37:45 +00:00
Alex Ionescu
dec64724df [AUDIT] - These are yet more < 10 line wrappers.
[FORMATTING] - Fixup file headers, formatting and some comments.

svn path=/trunk/; revision=22726
2006-06-30 19:09:39 +00:00
Alex Ionescu
f5270b0105 [FORMATTING] - Tabs->spaces and proper prototype formatting.
svn path=/trunk/; revision=22725
2006-06-30 19:01:01 +00:00
Alex Ionescu
991efbb62a [AUDIT] - Irq.c is another lame wrapper.
- Remlock's code was written by Filip Navara and is clean. My additions are based on wdm.h and only add size checks and fix two visible bugs.
- Add basic support/detection for debug I/O remove blocks (we bugcheck if we identify one though).
- Simplify IoReleaseRemoveLockAndWaitEx
- Remove locks are SYNCH events, not Notification events!
- Make sure IoConnectInterrupt returns NULL to the caller on failure.

svn path=/trunk/; revision=22724
2006-06-30 18:54:34 +00:00
Alex Ionescu
ea4351d9bd [AUDIT] - iocomp.c, event.c, iowork.c, mdl.c, timer.c, symlink.c are all simple wrappers around either executive, kernel or object manager code, and they are trivial implementations usually less then 10 lines and heavily documented in public sources.
svn path=/trunk/; revision=22723
2006-06-30 18:16:27 +00:00
Alex Ionescu
d1ebf29520 - Io*SymbolicLink should use OBJ_CASE_INSENSITIVE
- Use DELETE instead of SYMBOLIC_LINK_ALL_ACCESS when deleting.
- Fix formatting in timer.c
- Clear the IO_TIMER structure when creating it.

svn path=/trunk/; revision=22722
2006-06-30 18:14:54 +00:00
Alex Ionescu
b42accc93a - Fix formatting/function order
- Use only one SEH block in NtRemoveIoCompletion
- Get the completion status from the IRP, not from the Mini-Packet, if the completion came from an IRP and not a Mini-Packet.

svn path=/trunk/; revision=22721
2006-06-30 17:53:00 +00:00
Hervé Poussineau
cabeb71d14 Don't try to allocate 0 byte (spotted by Alex Ionescu)
svn path=/trunk/; revision=22720
2006-06-30 17:38:12 +00:00
Alex Ionescu
ed3df3667f - Refactor Io*Event APIs to call an internal worker function instead of duplicating the same code twice.
- Optimize Io*Work APIs and initialize the event on allocation, not on queue!!

svn path=/trunk/; revision=22719
2006-06-30 16:56:18 +00:00
Magnus Olsen
2e185ea41a Small clean up
1. Remove goto in the code, goto is slow and should be avoid.
2. reformat for adding {} around some code.
3. remove some NULL check after I did remove goto that is not longer need it.  
 

svn path=/trunk/; revision=22718
2006-06-30 16:42:21 +00:00
Alex Ionescu
f13cb8709c - Fix IRP/Completion packet lookaside allocation. We weren't setting a zone size, and I/O Completion packets were also using the wrong size.
- Rewrite I/O MDl support to use lookaside lists for allocations below 23 pages (same as on NT). This is is an incredible performance optimization because MDLs are often allocated and de-allocated during I/O operations, and using the lookaside list decreases pool fragmentation and slowdown.
- Rewrite IoBuildPartialMdl. It did not work like documented in the DDK and also had a bug documented by Microsoft as being in XP.

svn path=/trunk/; revision=22717
2006-06-30 15:59:06 +00:00
Magnus Olsen
77aa2de357 sorry I did broke the comping some typo
svn path=/trunk/; revision=22716
2006-06-30 15:53:57 +00:00
Magnus Olsen
0432c7ee70 fixing strip working right strip -sx does not working u must type strip -s -x not togther as -sx, I did add -X direcly after it will strip away local informations as well
svn path=/trunk/; revision=22715
2006-06-30 15:38:30 +00:00
Saveliy Tretiakov
90f398225a Alex Ionescu said that check for Expanded==NULL must stay...
svn path=/trunk/; revision=22714
2006-06-30 15:12:55 +00:00
Saveliy Tretiakov
e6a334b469 Silence debug messages.
Check for Expanded==NULL is useless, because it's done in HeapFree (thx hpoussin).


svn path=/trunk/; revision=22713
2006-06-30 15:07:23 +00:00
Saveliy Tretiakov
df5296300e Read configuration from registry
svn path=/trunk/; revision=22712
2006-06-30 14:53:24 +00:00
Saveliy Tretiakov
5d1d716b06 Add some registry settings for eventlog
svn path=/trunk/; revision=22711
2006-06-30 14:52:01 +00:00
Alex Ionescu
81ba9a4b08 - Name decorate and fix some formatting snafus.
svn path=/trunk/; revision=22709
2006-06-30 05:58:23 +00:00
Alex Ionescu
f39a0e3e68 - Create iofunc.c and put all functions that ultimately create a system IRP to send to a device in it, thus clearing up irp.c and file.c and making the code base more modular.
- File.c now includes only functions dealing with the FILE_OBJECT itself.

svn path=/trunk/; revision=22708
2006-06-30 05:45:02 +00:00
Alex Ionescu
c41f64ebf3 - More name-decoration, tracing, comments, etc.
- Handle cases where we ran out of memory while trying to allocate the IRP
- Make sure the IRP can be re-used in IoReuseIrp.

svn path=/trunk/; revision=22707
2006-06-30 04:46:53 +00:00
Alex Ionescu
caaa87bbdc - Add more tracing/name decoration/comments.
- Bugcheck if cancelling and IRP that's already been completed.
- Bugcheck if attempting to call a driver with an IRP that's already past its maximum stack size.
- Make sure that when we free an IRP, it's not associated to a thread anymore, nor having any drivers that think it's valid.

svn path=/trunk/; revision=22706
2006-06-30 04:29:32 +00:00
Alex Ionescu
78277ca08f - Add more name/prototype decoration and API tracing.
- Don't handle IRP_MJ_POWER in IoBuildAsyncronousFsdRequest.
- Use IoAllocateMdl instead of being a cowboy and using MmCreateMdl.
- Handle failure/out-of-memory cases in IoBuildAsyncronousFsdRequest
- Free the input buffer on failure in IoBuildDeviceIoControlRequest
- Handle failure in IoBuildSyncronousFsdREquest.

svn path=/trunk/; revision=22705
2006-06-30 03:48:03 +00:00
Alex Ionescu
8d2254b37e - Fix I/O Completion (IopCompleteRequest/IofCompleteRequest) for the first time after the 40-thread long flame war last year:
- Don't read pointers from the file object or IRP before they are actually used, because in some parts of the code, these pointers could change before we actually use them.
  - Get rid of the #if 1/#if 0 nonsense hbirr had added.
  - Properly check for success/warning/failure cases (thanks to Filip for checking this out with me last year)
  - Handle scenarios when the IRP is marked IRP_CREATE_OPERATION
  - Bugcheck if IofCompleteRequest is called twice on the same IRP
  - Copy the master IRP's thread to the associated IRP
  - Free the Auxiliary Buffer if there is one.
  - Some formatting fixes, and majorly recomment the code to make it a lot clearer and more verbose on some of the more intricate details.
  - Remove some hacks which I don't think are needed anymore. If you notice regressions due to this patch let me know ASAP.

svn path=/trunk/; revision=22704
2006-06-30 03:15:56 +00:00
Alex Ionescu
14f7e184f3 - Completely reformat io.h to same style as ob.h and add I/O Tracing.
- Fix irp.c file header
- IopRemoveThreadIrp:
  - Get the DeviceObject and I/O Stack *before* going back to dispatch, otherwise race conditions will happen.
  - Don't complete and IRP if it's already been through two stacks.
  - Remove the IRP from the thread's IRP list before re-initializing the list, or else the IRP was lost.
  - Make sure we have an error log entry before writing to it.

svn path=/trunk/; revision=22703
2006-06-29 23:52:45 +00:00
Alex Ionescu
72dd9f4111 [FORMATTING] - Cleanup before I start working on it... there were lots of weird formatting errors caused by my old IDE back when I was working on it.
[AUDIT] - The routines in this file mostly come from documented information in "NT File System Internals" by Rajeev Nagar which has pseudo-code for a lot of them, and other WDM Books and information.

svn path=/trunk/; revision=22702
2006-06-29 23:01:09 +00:00
Christoph von Wittich
99c66c095c fixed some warnings (msvc)
svn path=/trunk/; revision=22701
2006-06-29 22:32:06 +00:00
Christoph von Wittich
23b77e8fd7 fixed some warnings (msvc)
svn path=/trunk/; revision=22700
2006-06-29 22:12:40 +00:00
Johannes Anderwald
cbfccc50b9 * finished reading console options.c
* thnx for everyone helping with this commit (you know who you are)

svn path=/trunk/; revision=22699
2006-06-29 21:40:22 +00:00
Johannes Anderwald
e7fdae5613 * fix resource inconsistency (pointed out by Lohnegrim)
* halfplemented reading console options

svn path=/trunk/; revision=22698
2006-06-29 20:19:26 +00:00
Alex Ionescu
9478fc9049 - Activate the Grim Reaper and remove a hard-coded bugcheck. This fixes random bugchecks and especially bugchecks on shutdown.
svn path=/trunk/; revision=22697
2006-06-29 19:24:10 +00:00
Alex Ionescu
4c630fdc31 - Fixes in ObCreateObjectType to pass Fireball's (and some of my own local) ob tests:
- Fix a check in ObpFreeObject which was causing a bugcheck if the object had a handle database (fixes another kmtest failure/crash).
  - Verify parameters passed to ObCreateObjectType based on behaviour seen on Windows 2003 (I might've missed some, these are the ones I tested for). This fixes 2 of the kmtest failures.
  - Also make sure the object type's name doesn't have a slash in the name.
  - Also make sure we don't allow creating two object types with the same name.
  - Also use our own local copy of the object name and copy it.

svn path=/trunk/; revision=22696
2006-06-29 19:03:24 +00:00
Johannes Anderwald
3dd2bff814 * compile console with pch support
svn path=/trunk/; revision=22695
2006-06-29 18:19:51 +00:00
Johannes Anderwald
de285c4081 * add ReactOS Console configuration DLL
svn path=/trunk/; revision=22693
2006-06-29 18:10:15 +00:00
Alex Ionescu
ec719832c0 - Fix the last two Ob reference counting bugs:
- Don't de-reference the object when duplicating it (not sure why this was left there). This fixes all the "misbehaving object: Event" messages in the console and fixes those regressions.
  - Don't reference the object when doing a lookup (not sure why this was there either). This made it impossible to kill named objects, since ObpDeleteNameCheck did a lookup before killing them, and the lookup ended up adding a reference.
- Cm still needs fixing!

svn path=/trunk/; revision=22692
2006-06-29 18:07:53 +00:00
Saveliy Tretiakov
0e79c3011a Fix thread synchronization, use critical sections.
Rewrite some functions (optimize).


svn path=/trunk/; revision=22691
2006-06-29 17:36:04 +00:00
Brandon Turner
410ae9c26b Unicode fixes and error checking.
svn path=/trunk/; revision=22690
2006-06-29 15:08:10 +00:00
Johannes Anderwald
cdbfb24b12 * fix building of win32k_test
svn path=/trunk/; revision=22689
2006-06-29 14:39:53 +00:00
Johannes Anderwald
92f587b398 * auto select items which are started automatically
* read disabled autostart items

svn path=/trunk/; revision=22688
2006-06-29 13:33:59 +00:00
Alex Ionescu
1c69156be9 - Cleanup the checks for mishbeaving objects a bit, and now quit the Dereference routine instead of doing the dereference. This has the advantage making console applications work again (note: this is NOT a fix. I'm just making the situation less bad until I fix ObDuplicateObject since that seems to be messing Events up, and until Cm gets fixed).
svn path=/trunk/; revision=22686
2006-06-29 05:20:16 +00:00
Alex Ionescu
d02a403c94 - This patch finally enables closing handles for real, when NtClose is called. This means that File handles, processes, and all other NT Objects finally die (no more "file in use" and unkillable processes). On the other hand, this makes the registry code unhappy and unravelled a bug in ObDuplicateObject.
- Booting/installing still works, but the system will possibly be unstable. However I'm choosing to commit this because it shows correct Ob behavior and will allow Art to fix Cm's referencing properly.
- Implement ObCheckObjectAccess and call it to perform access verification checks.
- Properly create devices, processes and controllers with an extra reference count, so that when the code closes their handle they don't die.
- Check for invalid uses of ObfDereferenceObject for our current debugging purposes.
- Add SEH to NtQueryObject.

svn path=/trunk/; revision=22685
2006-06-29 05:05:27 +00:00
Art Yerkes
61cb74d018 Fixed reference counting in CmiConnectHive and CmiDisconnectHive.
No longer need hacks to check reference counts.
Deleted a ton of wierd code.
Fixed bug where we allocated uninitialized memory for child nodes we never
populated.
Now reference counting mirrors pointers exactly:
 - Hold one reference for the parent key pointer
 - Hold one reference for the list entry in the connected hive list

svn path=/trunk/; revision=22684
2006-06-29 03:48:43 +00:00
Brandon Turner
c6661f1f9e expand %* to batch file params.
bug: #1629

svn path=/trunk/; revision=22683
2006-06-29 02:48:52 +00:00
Alex Ionescu
bbfd29210c - Add some hacks to Cm to allow creating registry keys that finish with a backslash (this works under NT).
- Also add a REALLY nasty hack that forces OBJ_CASE_INSENSITIVE on all Registry APIs... this is needed because we seem to completely mess up case sensitivity otherwise and any user-mode caller that doesn't specify that flag will fail.
- These two fixes fix all the WINE failures for the "ntdll reg" test and should increase compatibility with some applications.
- Runtime Library Registry Wrappers Fixes and Optimizations:
  - Use an array of registry paths instead of duplicating them
  - Fix implenmentation of RTL_REGISTRY_HANDLE.
  - Verify all Appends for failure before continuing.
  - Use the strict minimum key permissions isntead of KEY_ALL_ACCESS.
  - Don't use OBJ_OPENIF
  - Use CAPS for \\REGISTRY\\USER (required to match a Windows quirk exposed by a WINE test)
  - Use the correct length in RtlpNtQueryValueKey
  - Generic cleanups, formatting and commenting.

svn path=/trunk/; revision=22682
2006-06-29 00:30:36 +00:00
Alex Ionescu
96c859e6a6 - Sync RtlBitmap* implementation with WINE: Fixes 278 regression failures (for a total of 0 now).
- Also adds implementations for RtlFindMostSignificantBit , RtlFindLeastSignificantBit, RtlFindNextForwardRunClear, RtlFindClearRuns.
- The RtlBitmap* package is essential for compatibility with NTFS.SYS and other File System Drivers, but these fixes should not really improve user-mode app. compat.

svn path=/trunk/; revision=22679
2006-06-28 20:51:51 +00:00
Aleksey Bragin
81f5e26099 Mikhail Zvyozdochkin: Fix compilation of msafd without precompiled header (also fixes compilation process on linux)
svn path=/trunk/; revision=22678
2006-06-28 20:27:41 +00:00
Alex Ionescu
78a7bd2051 [AUDIT] - Unlock these files, they're just lame wrappers around the NT Kernel APIs that handle them and they're tested by WINE tests.
svn path=/trunk/; revision=22677
2006-06-28 19:52:45 +00:00
Alex Ionescu
abee505e57 - Rewrite all synch object wrappers in kernel32 to use a single unified method of implementation:
- A->W converstion through static TEB buffer.
  - Failure if opening without a name.
  - Special warning code for objects that already exist (fixes some WINE test failures and probably makes a myriad of applications work).
  - Use BasepConvertObjectAttributes when creating an object to remove code duplication.
- InitializeCrticalSectionAndSpinCount shouldn't raise an exception on failure.
- Optimize WaitForMultipleObjects to cache 8 objects on the stack instead of only 3.
- Reformat and comment all the files to ROS standards.

svn path=/trunk/; revision=22676
2006-06-28 17:08:35 +00:00
Alex Ionescu
561c27e0d3 - Implement, export and NDKize: DbgUiGetThreadDebugObject, DbgUiDebugActiveProcess, DbgUiStopDebugging, NtSetInformationDebugObject.
- Make CheckRemoteDebuggerPresent fail if no process was specified.
- Implement DebugActiveProcess, DebugActiveProcessStop, DebugBreakProcess, DebugSetProcessKillOnExit.
- Add *.vcproj to ignore lists.

svn path=/trunk/; revision=22675
2006-06-28 17:02:37 +00:00
Aleksey Bragin
1a65517f18 [FORMATTING]
- Amend file header slightly
- Add functions headers

svn path=/trunk/; revision=22674
2006-06-28 15:56:09 +00:00
Aleksey Bragin
76b7211579 [FORMATTING]
- Amend file header slightly
- Add function header
- STDCALL -> NTAPI

svn path=/trunk/; revision=22673
2006-06-28 14:02:39 +00:00
Aleksey Bragin
981fde0f9f [AUDIT]
- Add proper function headers, including links to publically-available documentation
- One internal function is subject to further review/audit

svn path=/trunk/; revision=22672
2006-06-28 13:53:30 +00:00
Aleksey Bragin
6ef4e4d9d4 [AUDIT]
- Add proper function headers, including links to documentation
- All exported functions have publically-available information sources
- The only internal function is actually quite self-explanatory by its name
- Implementation is partly wrong as pointed by Gunnar

svn path=/trunk/; revision=22671
2006-06-28 12:52:08 +00:00
Johannes Anderwald
de2a826959 * add EXSTYLE DS_SHELLFONT for dialogs having "MS Shell Dlg"
* fix typos 
* change sublang identifiers to SUBLANG_NEUTRAL
* patch by EmuandCo

svn path=/trunk/; revision=22668
2006-06-27 22:01:50 +00:00
Johannes Anderwald
bd7821cda6 our friends using case sensitive filesystems should also play with International Control panel applet
svn path=/trunk/; revision=22667
2006-06-27 16:11:57 +00:00
Hervé Poussineau
e66e011656 Fix case of resource files, so our friends using case sensitive filesystems will be able to play Solitaire ;)
svn path=/trunk/; revision=22665
2006-06-27 11:56:44 +00:00
Hervé Poussineau
1a5e9cdfd8 Don't be so aggressive in debug messages.
svn path=/trunk/; revision=22664
2006-06-27 11:09:23 +00:00
Johannes Anderwald
29c3268f4e add ukrainian translation by temarez bug (1628)
svn path=/trunk/; revision=22663
2006-06-27 10:40:01 +00:00
Johannes Anderwald
0e72e420b1 add ukraiain translation by temarez bug (1628)
svn path=/trunk/; revision=22662
2006-06-27 10:38:36 +00:00
Johannes Anderwald
94ad288b3c fix displaying status bar when notepad was resized
bug report by Apal
patch by Apal && w3seek
fixes bug 1625

svn path=/trunk/; revision=22660
2006-06-27 10:02:33 +00:00
Alex Ionescu
4903b28f61 - Fix all the failures in the RTLSTR Wine test by merging our old rtl string routines with Wine's. We now pass all 2300 something tests.
svn path=/trunk/; revision=22653
2006-06-27 04:09:03 +00:00
Alex Ionescu
bc5d1b0581 - Catch illegal call to Ob functions when ObjectAttributes == NULL and return distinguished status code for this situation (STATUS_INVALID_PARAMETER), instead of failing due to access violation.
- Create the BNO Global and Local symbolic links in kernel32.
- We pass all the Ob+Native tests in ntdll_winetest om now (we fail some named pipe ones, but I have no idea why WINE calls them "Object Manager" related...)

svn path=/trunk/; revision=22652
2006-06-27 03:06:26 +00:00
Alex Ionescu
7c3d15c5f9 - Fix another critical bug in ObInsertObject: don't overwrite the lookup status with the handle creation status. If the lookup returned something like OBJECT_NAME_EXISTS (which is a success + warning), we don't want to overwrite it with ObpCreateHandle's STATUS_SUCCESS. This should fix a large number of regressions (and also fixes many WINE ntdll "om" tests).
- We also now correctly dereference the object in ObInsertObject, which should reduce one source of leaks (But there is still one). OTOH, this makes the Cm code crash at shutdown (I'll fix this ASAP, this fix is worth having atm.)

svn path=/trunk/; revision=22651
2006-06-27 01:52:16 +00:00
Alex Ionescu
e498da59d9 - ObpCreateUnnamedHandle/ObpCreateHandle => Reference the object before calling ExCreateHandle.
- Fix two critical bugs in ObInsertObject: We were creating a handle for the wrong object (in ObInsertObject) and we were not passing the ReferencedObject parameter to ObpCreateHandle, so that object was never being returned properly to the caller.
- ObfDereferenceObject shouldn't check for the OB_FLAG_PERMANENT flag, or else it would never be possible to kill permanent objects while in kernel mode (permanent objects only apply to user-mode handles).

svn path=/trunk/; revision=22650
2006-06-27 01:16:17 +00:00
Alex Ionescu
71dda51555 - Lesson One: Don't revert commits because your eyes are inventing the word "copyright". I tried really hard, I really did, but I could not find even the word "copy", much less "copyright".
- Lesson Two: What do you know! En and De.rc actually *are* our files, not James Brown's (his is sol.rc, which hasn't been altered with a ROS Header).
- Lesson Three: It is official (voted) ROS Policy that all ROS files have a header. Reverting this header violated it.

svn path=/trunk/; revision=22649
2006-06-26 23:50:03 +00:00
Ged Murphy
93eae33135 You can't really claim copyright for translating a resource file.
Secondly, it's not even our code to put headers in. It's James Browns from catch22.net

svn path=/trunk/; revision=22648
2006-06-26 23:02:54 +00:00
Alex Ionescu
12156b1e8e - Same fixes for LocalAlloc/LocalReAlloc
- We now pass all 278+49 WINE Regression Tests related to Heap/Memory.

svn path=/trunk/; revision=22647
2006-06-26 22:50:02 +00:00
Alex Ionescu
2410073dc4 - Fix a typo in a comparison (& vs &&) which was breaking GlobalReAlloc in some cases.
- Fix a missing | (OR) in GlobalAlloc which created an invalid handle if the first allocation was of size 0.

svn path=/trunk/; revision=22646
2006-06-26 22:48:12 +00:00
Johannes Anderwald
2eddc82aca add missing includes
svn path=/trunk/; revision=22645
2006-06-26 20:18:52 +00:00
Johannes Anderwald
e18611f0ad add missing include
svn path=/trunk/; revision=22644
2006-06-26 20:15:58 +00:00
Johannes Anderwald
fe9c547879 * move english resource file to own file
* add german translation
* patch provided by Daniel "EmuandCo" Reimer

svn path=/trunk/; revision=22643
2006-06-26 20:14:36 +00:00
Johannes Anderwald
721b8ace94 fix include
svn path=/trunk/; revision=22642
2006-06-26 19:37:26 +00:00
Johannes Anderwald
926eca70dc remove unecessary include
svn path=/trunk/; revision=22641
2006-06-26 19:30:49 +00:00
Alex Ionescu
0a68278291 - Fix the build...I hope/think
svn path=/trunk/; revision=22640
2006-06-26 17:18:20 +00:00
Alex Ionescu
23321b6dc3 - Sync with WINE's latest Heap implementation and try to remove some of the differences we had, and also document the ones which must be kept (our support for RTL_HEAP_COMMIT_ROUTINE and usage of user/kernel-mode lock APIs, etc). This reduces the heap/alloc regression tests to only 1 issue (which I'm working on fixing).
svn path=/trunk/; revision=22639
2006-06-26 17:03:17 +00:00
Maarten Bosma
3654e13467 Remove all curses except 'semprini'.
svn path=/trunk/; revision=22638
2006-06-26 16:39:23 +00:00
Alex Ionescu
47326ac113 - Move the SDK to /PSDK or else we'll never get MSVC compiling right.
svn path=/trunk/; revision=22637
2006-06-26 15:32:53 +00:00
Alex Ionescu
f110fe92c5 - STDCALL -> NTAPI
svn path=/trunk/; revision=22636
2006-06-26 14:23:44 +00:00
Alex Ionescu
b0459692fe - Minor header fixes
svn path=/trunk/; revision=22635
2006-06-26 14:10:10 +00:00
Aleksey Bragin
baaaee3af6 - Change user32 to Wine-compatible debug-print messages system. TRACE/FIXME/ERR and DPRINT/DPRINT1 are supported now in every file, however they are turned on in a different way: you have to place "#define YDEBUG" before #include <wine/debug.h> in order to get debug messages coming from this file
- Give more space to user32.dll by changing preferred loading base

svn path=/trunk/; revision=22634
2006-06-26 13:16:43 +00:00
Aleksey Bragin
9cc30a5902 - Sort the list by address
- Lowercase addresses

svn path=/trunk/; revision=22633
2006-06-26 12:51:18 +00:00
Aleksey Bragin
afa9b4e4e7 Add baseaddress into dhcpcsvc.dll, removing relocation during startup
svn path=/trunk/; revision=22632
2006-06-26 09:41:51 +00:00
Aleksey Bragin
7f0a19c743 - Sync edit control with Wine code
- Add imm32 dependency to user32, which is needed for edit control. This may not be a good solution, since Windows XP's user32.dll doesn't import imm32.dll. So maybe in future this should change to dynamic binding instead. But for now it works
- Update Wine-sync doc

This update reduces number of failing "user32_winetest.exe edit" tests from 44 to 43.

svn path=/trunk/; revision=22631
2006-06-26 09:20:47 +00:00
Magnus Olsen
16240136f4 revert Revision: 22614 w3seek told it was complete wrong for search path is not working as they should. that reason it does not work.
svn path=/trunk/; revision=22630
2006-06-26 00:44:25 +00:00
Michele Cicciotti
b25bd32027 mstscax.dll sniffer: loads between mstsc.exe and the real mstscax.dll (renamed to mstscax_.dll) and dumps on debug output as much as possible of the interaction between the two. Not complete yet (doesn't sniff events) but good enough
svn path=/trunk/; revision=22629
2006-06-26 00:28:15 +00:00
Michele Cicciotti
aba8c10e53 Directory for a number of tools I'll write and use as a porting aid
svn path=/trunk/; revision=22628
2006-06-26 00:19:36 +00:00
Michele Cicciotti
4a780802f4 Small fix for debugging purposes under Cygwin: keymaps must have UNIX line endings because of a limitation in how rdesktop parses them
svn path=/trunk/; revision=22627
2006-06-26 00:17:10 +00:00
Michele Cicciotti
e6ead68fae First step of the rdesktop port: make code re-entrant
Most of the code (minus sound support) has been made re-entrant. All global variables have been turned into fields of a huge (huge!) structure passed around as a pointer argument (think C++ "this"). Changes have been tested in Cygwin, works perfectly

svn path=/trunk/; revision=22626
2006-06-26 00:07:25 +00:00
Michele Cicciotti
92f97021f6 See above
svn path=/trunk/; revision=22625
2006-06-26 00:02:44 +00:00
Michele Cicciotti
032c061628 Making room for future expansions to the family...
svn path=/trunk/; revision=22624
2006-06-26 00:02:23 +00:00
Michele Cicciotti
8d68848605 There! Hello rdesktop, please lie down on that table, don't worry, this won't hurt in the slightest!
svn path=/trunk/; revision=22623
2006-06-26 00:01:49 +00:00
Michele Cicciotti
ec3cd438bb Almost there...
svn path=/trunk/; revision=22622
2006-06-26 00:01:08 +00:00
Michele Cicciotti
f71e429edf Not quite there...
svn path=/trunk/; revision=22621
2006-06-26 00:00:48 +00:00
Michele Cicciotti
01f3e24360 Welcome rdesktop!
svn path=/trunk/; revision=22620
2006-06-26 00:00:00 +00:00
Michele Cicciotti
fb2aaa54a0 Make room for the rdesktop port/cannibalization
svn path=/trunk/; revision=22619
2006-06-25 23:56:15 +00:00
Michele Cicciotti
4404007712 Creating base directory for the Remote Desktop client - mstsc.exe, mstscax.dll, rdesktop port, etc.
svn path=/trunk/; revision=22618
2006-06-25 23:54:39 +00:00
Magnus Olsen
e7b2d710ef fixing link for explorer and regedit thanks apal for the patch see bug 1626
svn path=/trunk/; revision=22614
2006-06-25 22:34:49 +00:00
Eric Kohl
1378d2051b Add missing prototypes and definitions.
svn path=/trunk/; revision=22613
2006-06-25 22:16:43 +00:00
Ged Murphy
ac845a0b7f give rpcss a group name
stops exception being raised when debugging services.exe

svn path=/trunk/; revision=22611
2006-06-25 11:19:59 +00:00
Aleksey Bragin
8a4d747fe3 Sync wsprintf.c with Wine: very minor changes(STDCALL->WINAPI, CDECL->WINAPIV), no changes in code logic.
svn path=/trunk/; revision=22610
2006-06-25 10:54:32 +00:00
Aleksey Bragin
1263dd0ee5 Update Wine-syncs doc
svn path=/trunk/; revision=22609
2006-06-25 10:39:21 +00:00
Aleksey Bragin
e17e93569f Sync DDE with Wine
svn path=/trunk/; revision=22608
2006-06-25 10:38:48 +00:00
Hervé Poussineau
4721afc693 Let StartService really start the service.
This enables the plug and play manager during second stage setup

svn path=/trunk/; revision=22607
2006-06-25 00:52:40 +00:00
Hervé Poussineau
2a008d3e8b StartServiceCtrlDispatcher must be called during main, and does return only at service stop.
svn path=/trunk/; revision=22606
2006-06-25 00:51:28 +00:00
Christoph von Wittich
beca141ae2 export LsaLookupNames2 - now pcsx2 starts up
svn path=/trunk/; revision=22605
2006-06-25 00:18:24 +00:00
Hervé Poussineau
4fde697f9d I forgot the ! when committing revision 22589.
svn path=/trunk/; revision=22603
2006-06-24 23:12:31 +00:00
Hervé Poussineau
5fcea60cd1 Fix the build
svn path=/trunk/; revision=22602
2006-06-24 23:04:22 +00:00
Eric Kohl
92d62b0f19 Implement CM_Set_HW_Prof_Flags[_Ex]A/W.
svn path=/trunk/; revision=22600
2006-06-24 22:57:53 +00:00
Hervé Poussineau
78baad6812 Update msiquery.h header (sync with Wine)
svn path=/trunk/; revision=22599
2006-06-24 22:34:49 +00:00
Magnus Olsen
b9782f4327 fix some problem to edit main.cpl rc with vc but not all
svn path=/trunk/; revision=22590
2006-06-24 21:19:34 +00:00
Hervé Poussineau
aa481c7afb Don't redefine UNICODE_STRING/STRING (may happen if winternl.h is already included)
svn path=/trunk/; revision=22589
2006-06-24 21:14:41 +00:00
Hervé Poussineau
6d736e0d3a Update wincrypt.h header (sync with Wine)
svn path=/trunk/; revision=22588
2006-06-24 20:59:20 +00:00
Hervé Poussineau
1f7943c579 Fix MLLoadLibraryA/W prototypes
svn path=/trunk/; revision=22585
2006-06-24 20:40:55 +00:00
Alex Ionescu
d2ced73e52 - Reformat heap.c to ROS standards
- HeapCreate should mask out NT flags and tag allocations with CLASS 1.
- Implemented HeapCreateTagsW, HeapExtend, HeapQueryTagW, HeapSummary, HeapUsage.
- Stubbed RtlUsageHeap, RtlQueryTagHeap, RtlExtendHeap, RtlCreateTagHeap.

svn path=/trunk/; revision=22583
2006-06-24 19:49:28 +00:00
Alex Ionescu
8ec0cfcce6 - Fixup Local* Heap implementation so that calls which have different semantics don't call the Global APIs (ie: LocalAlloc/LocalReAlloc and LocalFlags). The rest can be shared beteween them. Also fix some prototypes.
- Rename all the defintions to BASE_HEAP instead of GLOBAL_HEAP, since they apply just as well to the Local Heap.

svn path=/trunk/; revision=22582
2006-06-24 19:00:07 +00:00
Hervé Poussineau
aa75a24d24 Fix prototype of WritePwrScheme. Prototypes shouldn't have LPTSTR in their parameter list!
svn path=/trunk/; revision=22581
2006-06-24 18:47:50 +00:00
Hervé Poussineau
fec0bf98d0 Fix definition of NtGdiAlphaBlend
svn path=/trunk/; revision=22580
2006-06-24 18:26:28 +00:00
Alex Ionescu
5940727077 - Rewrote Base Heap implementation nearly from scratch, currently only for Global Heap (Local Heap is as broken as before, since it still calls the Global Heap APIs). For detailed implementation notes, see baseheap.h
- Main changes include using the RtlHandle package instead of duplicating an internal implementation, as well as using the RtlHeap* APIs that allow for setting User Flags/Values for associating Base Heap Flags/Handles with the actual RTL-managed block.
- Regression-tested with WINE tests and basic ROS apps.

svn path=/trunk/; revision=22579
2006-06-24 18:11:57 +00:00
Alex Ionescu
37e7a63e8a - There are more then only the 3 or 4 heap flags WINE's Windows 95 code supports(there are about 18), so it's a bit stupid to mask them all out, especially since that breaks settable/tag flags.
svn path=/trunk/; revision=22578
2006-06-24 18:01:53 +00:00
Alex Ionescu
74216f856e - Silence debug message
svn path=/trunk/; revision=22577
2006-06-24 17:07:15 +00:00
Alex Ionescu
ccde4e5475 - Fix implementation of RtlSetUserValueHeap and RtlGetUserInfoHeap to write their flags to the subheap and not the actual main heap structure (since those flags are valid for each allocation).
- Make heap allocations 8-byte aligned again.

svn path=/trunk/; revision=22576
2006-06-24 17:05:05 +00:00
Magnus Olsen
d3cd587e70 fixing so u can edit rsrc.rc again with vs
svn path=/trunk/; revision=22575
2006-06-24 16:51:12 +00:00
Magnus Olsen
3e7c39f7d2 1. Fix the russain rc to be open with VS
2. move all langues rc to rsrc.rc so we can open
   them in VS without genrate project file for VS
   we already doing it on few other dll/exe


svn path=/trunk/; revision=22574
2006-06-24 16:44:30 +00:00
Magnus Olsen
8c39926c96 Ukrainian translation from temarez see bug 1624
svn path=/trunk/; revision=22573
2006-06-24 16:24:25 +00:00
Magnus Olsen
eb501c405f Ukrainian translation from temarez see bug 1624
svn path=/trunk/; revision=22572
2006-06-24 16:21:53 +00:00
Magnus Olsen
253288305e Update Ukrainian translation from temarez see bug 1624
svn path=/trunk/; revision=22571
2006-06-24 16:18:32 +00:00
Magnus Olsen
707e38adcb Update Ukrainian translation from temarez see bug 1624
svn path=/trunk/; revision=22570
2006-06-24 16:15:22 +00:00
Alex Ionescu
142dbcc0b4 - Fix boot
svn path=/trunk/; revision=22569
2006-06-24 16:05:37 +00:00
Alex Ionescu
01a0c11c80 fix build
svn path=/trunk/; revision=22568
2006-06-24 15:53:30 +00:00
Magnus Olsen
2063f88ebb Update Ukrainian translation from temarez see bug 1624
svn path=/trunk/; revision=22567
2006-06-24 15:38:28 +00:00
Magnus Olsen
96ca5a8191 Ukrainian translation from temarez see bug 1624
svn path=/trunk/; revision=22566
2006-06-24 15:37:31 +00:00
Magnus Olsen
49ddaf959d Update Ukrainian translation by temarez see bug 1624
svn path=/trunk/; revision=22565
2006-06-24 15:33:10 +00:00
Magnus Olsen
6125919b36 Ukrainian translation by temarez see bug 1624
svn path=/trunk/; revision=22564
2006-06-24 15:30:44 +00:00
Magnus Olsen
7948806a51 french translation by ggcom see bug 1370
svn path=/trunk/; revision=22563
2006-06-24 14:09:01 +00:00
Magnus Olsen
f34a044635 Finnish translation by arzi see bug 1367
svn path=/trunk/; revision=22562
2006-06-24 14:03:51 +00:00
Magnus Olsen
d8783369ec Finnish translation by arzi see bug 1367
svn path=/trunk/; revision=22561
2006-06-24 14:01:30 +00:00
Magnus Olsen
cd9e7418ae Polish translation see bug 1315 by RealSzopen
svn path=/trunk/; revision=22560
2006-06-24 13:44:28 +00:00
Magnus Olsen
de18b10b10 french translation by ggcom see bug 1312
svn path=/trunk/; revision=22559
2006-06-24 13:39:16 +00:00
Magnus Olsen
cd5fc8f8ad greek translation from Apal : bug 1509
svn path=/trunk/; revision=22556
2006-06-24 12:07:54 +00:00
Magnus Olsen
7447fad94e greak translation from Apal : bug 1509
svn path=/trunk/; revision=22555
2006-06-24 12:00:57 +00:00
Magnus Olsen
889b1803ff greak translation from Apal : bug 1509
svn path=/trunk/; revision=22554
2006-06-24 11:58:13 +00:00
Saveliy Tretiakov
260c2762d2 Oops :) forget sizeof(WCHAR)
svn path=/trunk/; revision=22553
2006-06-24 10:37:55 +00:00
Alex Ionescu
6f34173bc0 - Hackplement RtlSetUserValueHeap and RtlGetUserInfoHeap, they are needed for being able to build higher-level heap management around the Heap APIs (either for developers or the OS). Case in point, needed for my Global* rewrite in kernel32. The current APIs are utter hacks, but they work (eventually we should get rid of the Wine Windows 95 heap implementation and replace it).
svn path=/trunk/; revision=22552
2006-06-23 23:10:58 +00:00
Alex Ionescu
8cd72eb3cd - Fixes in source code required for the NDK update.
svn path=/trunk/; revision=22551
2006-06-23 21:25:11 +00:00
Alex Ionescu
b3653a9abd - Update the NDK to the current vendor import.
svn path=/trunk/; revision=22550
2006-06-23 21:21:45 +00:00
Christoph von Wittich
4de9cf5a44 -fixed some warnings (msvc)
svn path=/trunk/; revision=22549
2006-06-23 21:19:01 +00:00
Aleksey Bragin
5b29a7494b Andrey Korotaev: Fix errors and typos in Russian translation, change Wine-specific parts to ReactOS.
svn path=/trunk/; revision=22548
2006-06-23 21:12:32 +00:00
Christoph von Wittich
25a5623442 -fixed some warnings (msvc)
svn path=/trunk/; revision=22547
2006-06-23 20:49:21 +00:00
Christoph von Wittich
78076d665a -fixed some warnings (msvc)
svn path=/trunk/; revision=22546
2006-06-23 20:08:52 +00:00
Christoph von Wittich
308147d6d3 -fixed some warnings (msvc)
svn path=/trunk/; revision=22545
2006-06-23 20:01:20 +00:00
Magnus Olsen
aaa109e28c norwigen translation from lars_martin4 at hotmail.com, please use LANG_NORWEGIAN, SUBLANG_NEUTRAL when u doing a translation. bug 1607
svn path=/trunk/; revision=22544
2006-06-23 19:55:19 +00:00
Johannes Anderwald
bf89f3f457 restore old targets
svn path=/trunk/; revision=22543
2006-06-23 19:36:23 +00:00
Johannes Anderwald
a245ed3386 parse -vo option
svn path=/trunk/; revision=22542
2006-06-23 19:36:01 +00:00
Magnus Olsen
0673ba6430 rewrite janderwald patch for NULL, I see it as pointless using static const WCHAR szNullString[] =
{ '\0' }; to return a null termentate string when u can simple replace it with L'\0' 

svn path=/trunk/; revision=22541
2006-06-23 18:54:53 +00:00
Johannes Anderwald
f4ef526c52 oops
thnx Greatlord

svn path=/trunk/; revision=22540
2006-06-23 18:48:57 +00:00
Christoph von Wittich
c709176c48 -fixed some warnings (msvc)
svn path=/trunk/; revision=22539
2006-06-23 18:44:57 +00:00
Johannes Anderwald
0a3f114ae2 fix duplicate control id
spotted by msvc :-)

svn path=/trunk/; revision=22538
2006-06-23 18:35:15 +00:00
Johannes Anderwald
ec5b7e38c0 include wingdi before winuser.h
replace nice construct with static const WCHAR :)

svn path=/trunk/; revision=22537
2006-06-23 18:27:08 +00:00
Johannes Anderwald
98b5733eb2 yet another msvc fix inline -> __inline
svn path=/trunk/; revision=22536
2006-06-23 18:07:10 +00:00
Johannes Anderwald
d2f6e25680 include wingdi.h before winuser.h
fixes last compile prob with msvc

svn path=/trunk/; revision=22534
2006-06-23 17:57:19 +00:00
Johannes Anderwald
a37b36dfc4 replace DECL_WINELIB_TYPE_AW macros with typedefs
thnx to Greatlord for reviewing patch

svn path=/trunk/; revision=22528
2006-06-23 17:39:04 +00:00
Johannes Anderwald
3a721c0824 fix TCHAR/WCHAR mixtures
spotted by Christoph_vW

svn path=/trunk/; revision=22527
2006-06-23 17:14:29 +00:00
Johannes Anderwald
06cb1d0c38 msvc fix (remove obsolete semicolon)
svn path=/trunk/; revision=22526
2006-06-23 16:30:22 +00:00
Saveliy Tretiakov
abb09e14a3 Fix buffer overflow vulnerability (bug 1528)
svn path=/trunk/; revision=22525
2006-06-23 14:55:52 +00:00
Magnus Olsen
1cca440e58 bugfix : patch from w3seek bug 1620 : RTL: Fix a locking bug in the vectored exception handling
svn path=/trunk/; revision=22524
2006-06-23 14:42:14 +00:00
James Tabor
5a3635d248 GetGlyphOutline, large wine port. Still testing.
svn path=/trunk/; revision=22523
2006-06-23 12:29:38 +00:00
Hervé Poussineau
9151c56146 Fix retrieving of NTP server from registry
Set svn:eol-style and svn:keywords properties

svn path=/trunk/; revision=22522
2006-06-23 08:13:50 +00:00
Alex Ionescu
2c010d69e8 - Cache system static information, such as PAGE_SIZE at kernel32 startup, so we can reference it in our code without always quertying the system for it.
svn path=/trunk/; revision=22521
2006-06-22 23:44:17 +00:00
Alex Ionescu
8727a1f7ff [AUDIT] - Unlock Thomas's low resource notification code, since it's clean.
- Entirely rewrite Kernel32 Probe functions to um, actually probe (ported Thomas's code in the kernel and adjusted for user-mode and then checked with WINE's code). I can't begin to fathom what the previous routines were supposed to be doing.

svn path=/trunk/; revision=22520
2006-06-22 23:40:50 +00:00
Alex Ionescu
3b350f6972 [AUDIT] These files are clean and simple stubs around NT apis and/or WINE code.
- Reformat the files.
- Fix A->W calling.
- Simpliy WriteProcessMemory to use NtProtectVirtualMemory to query the current state.
- Call some APIs with the right DesiredAccess instead of allways sending _ALL_ACCESS. (for example, only use SECTION_MAP_READ | QUERY unless the caller wants r/w.
- Flush ITLB when writing to process memory.

svn path=/trunk/; revision=22519
2006-06-22 23:06:14 +00:00
Hervé Poussineau
b1d543c345 Don't enumerate the serial port used for debugging
svn path=/trunk/; revision=22518
2006-06-22 22:57:32 +00:00
Ged Murphy
803efa1716 [AUDIT]
timedate.cpl
For some reason, this had been unlocked but not had it's svn:needs-lock props removed.
I've been working on this for the past few days and can verify it's clean.

svn path=/trunk/; revision=22517
2006-06-22 22:37:10 +00:00
Hervé Poussineau
e57648e8e2 Fail start of the serial port currently used for debugging, according to http://blogs.msdn.com/doronh/archive/2006/06/07/621604.aspx
svn path=/trunk/; revision=22516
2006-06-22 22:14:51 +00:00
Hervé Poussineau
6c6b0189cf [AUDIT]
serial.sys is clean. I wrote it myself and I didn't use unclean methods.

svn path=/trunk/; revision=22515
2006-06-22 22:13:27 +00:00
James Tabor
7f2ffb8b76 Update wine sync info.
svn path=/trunk/; revision=22514
2006-06-22 22:12:19 +00:00
Aleksey Bragin
59570aa6d0 Sync with Wine. Based on James Tabor's patch, with little modifications.
svn path=/trunk/; revision=22513
2006-06-22 22:00:24 +00:00
Hervé Poussineau
37ac31e89d Export KdComPortInUse
Print a header when debugging to serial port

svn path=/trunk/; revision=22512
2006-06-22 21:26:31 +00:00
Hervé Poussineau
f1df497132 Fix exports of device object types.
svn path=/trunk/; revision=22511
2006-06-22 21:16:55 +00:00
Johannes Anderwald
7f6da8f1fc msvc compilation fix
svn path=/trunk/; revision=22510
2006-06-22 21:16:28 +00:00
Hervé Poussineau
26836826ef Last 4 parameters of GetDiskFreeSpaceW are optional.
Fix bug 1608.

svn path=/trunk/; revision=22509
2006-06-22 20:50:53 +00:00
Johannes Anderwald
2e30a9b979 implement IDL compilation, generation of client/server stubs and creating import library of it
hurray :-)

svn path=/trunk/; revision=22508
2006-06-22 20:49:18 +00:00
Magnus Olsen
ec48d01285 bugfix from w3seek : bug 1474 : NTMARTA: GetExplicitEntriesFromAcl should return valid information for NULL-ACLs
svn path=/trunk/; revision=22507
2006-06-22 20:34:23 +00:00
Magnus Olsen
1e42e69d3d Bugfix from w3seek : bug 1614 Fix resource leak in NtRemoveIoCompletion
svn path=/trunk/; revision=22506
2006-06-22 20:30:49 +00:00
Johannes Anderwald
8579c127f7 remove targets
svn path=/trunk/; revision=22505
2006-06-22 19:15:37 +00:00
Johannes Anderwald
2ee2575f20 apply changes to msvc_clean target
svn path=/trunk/; revision=22504
2006-06-22 19:09:46 +00:00
Johannes Anderwald
bbc1c1a111 * make intermediate / outpath optional
* if u want to continue using vc specific path / configuration add flag -vo{version|configuration}

svn path=/trunk/; revision=22503
2006-06-22 18:50:00 +00:00
Ged Murphy
7d91409d48 - split the code up into logical files and reformat
- more code for NTP time setting
- many other code improvements

svn path=/trunk/; revision=22502
2006-06-22 17:13:29 +00:00
James Tabor
cccec459d0 Wine port WM_SETREDRAW.
svn path=/trunk/; revision=22500
2006-06-22 12:32:52 +00:00
Filip Navara
2b5ee06b1a Fix bug introduced in r21635.
svn path=/trunk/; revision=22499
2006-06-22 12:14:41 +00:00
Johannes Anderwald
eba80981e5 * fix idl build command
* generate client/server headers/sources in intermediate directory

svn path=/trunk/; revision=22497
2006-06-22 12:00:51 +00:00
Alex Ionescu
5831981241 - Sorry... was suffering from post-REcon-where-the-frell-am-I disorder.
svn path=/trunk/; revision=22495
2006-06-22 03:08:09 +00:00
Alex Ionescu
c8ff157406 - Rename obwait/obsecure
- Check for valid access in NtSignalAndWaitForSingleObject and don't check if ResultLength isn't NULL in NtQueryObject, because it's not optional.
- Add Thomas's name to a file where it wasn't.
- Reformatting (only code change is #2 above)

svn path=/trunk/; revision=22494
2006-06-22 02:20:34 +00:00
James Tabor
f92175d5fa Missed one line for sync to Wine.
svn path=/trunk/; revision=22493
2006-06-21 21:31:53 +00:00
Ged Murphy
eac2be9ab7 header changes for r22491
svn path=/trunk/; revision=22492
2006-06-21 21:20:28 +00:00
Ged Murphy
2747b47c79 Port RegGetValue() from WINE
patch by Thomas Weidenmueller


svn path=/trunk/; revision=22491
2006-06-21 21:19:47 +00:00
Ged Murphy
6c16a39783 load correct entry from registry
svn path=/trunk/; revision=22489
2006-06-21 20:46:37 +00:00
Ged Murphy
087d49dc73 oops, I can be so selfish sometimes ;)
svn path=/trunk/; revision=22487
2006-06-21 20:14:11 +00:00
Ged Murphy
4f99e0c714 - Add more code for NTP server selection.
- draw clock window from resource file to fix dialog unit / pixel anomaly ;)
- Do a bit of work on the NTP client. Still untested and may change to tcp.
All untested and I'm no where near finished yet, but there are a few bug fixes in here, and I'm running short on time ;)

svn path=/trunk/; revision=22486
2006-06-21 19:57:58 +00:00
Ged Murphy
25e24d88df missed this little blighter when fixing the DateTime.. macro
svn path=/trunk/; revision=22485
2006-06-21 19:44:06 +00:00
James Tabor
721c53105a I've synced most of the User32 control files. Edit, I looked at and saw very little needing synced in. Scrollbar has custom code and Static sync needs more testing.
svn path=/trunk/; revision=22484
2006-06-21 19:43:02 +00:00
Ged Murphy
6067cdbbef change macros to call correct version
svn path=/trunk/; revision=22480
2006-06-21 18:46:46 +00:00
Ged Murphy
a14bed3e15 fix incorrect macro
svn path=/trunk/; revision=22479
2006-06-21 18:43:14 +00:00
Aleksey Bragin
ca9d44a4a4 Update the doc to include all user32.dll's source code files which are shared one way or another with Wine. Makes syncing easier.
svn path=/trunk/; revision=22473
2006-06-21 17:03:20 +00:00
Aleksey Bragin
e291e62bf9 - Sync user32/buttons.c with Wine
- Update wine-syncs doc

svn path=/trunk/; revision=22459
2006-06-21 14:16:50 +00:00
Hervé Poussineau
4c5a1e73e8 Fix compilation
svn path=/trunk/; revision=22452
2006-06-21 11:45:11 +00:00
Saveliy Tretiakov
1dc7bde5fb Fix potential buffer overflow and unchecked return (bug 1527).
Update headers.


svn path=/trunk/; revision=22451
2006-06-21 11:25:22 +00:00
Aleksey Bragin
b04736c21a Thomas Weidenmueller: Remove rtl dependency
svn path=/trunk/; revision=22450
2006-06-21 10:03:33 +00:00
Hervé Poussineau
67950a1150 Handle MachineName parameter in SetupDiCreateDeviceInfoListExW
Eric, can you take care of the change in CM_Connect_MachineW?

svn path=/trunk/; revision=22449
2006-06-21 09:00:17 +00:00
Filip Navara
521b9caad9 Implement the isometric mapping mode and call the mapping functions for Ellipse and Polygon drawing. Thanks MgW from IRC for testing. :)
svn path=/trunk/; revision=22448
2006-06-21 08:33:27 +00:00
Filip Navara
d930a6123d Fix the millimeter calculation and assume 96DPI to be consistent with win32k.
svn path=/trunk/; revision=22447
2006-06-21 08:25:25 +00:00
Hervé Poussineau
d5e40a314e Fix indentation in SetupDiCreateDeviceInfoListExW
Fix 2 architecture extension constants

svn path=/trunk/; revision=22446
2006-06-21 07:52:19 +00:00
Hervé Poussineau
9bea18dd04 Fix some bugs according to test suite
Delete unused files

svn path=/trunk/; revision=22445
2006-06-21 06:40:02 +00:00
Art Yerkes
c517aab41d Fix small annoyance. Misplaced comma ftw.
svn path=/trunk/; revision=22444
2006-06-21 03:30:54 +00:00
James Tabor
cc6f45970b Sync to wine, User32. Tested with winefile, explorer with out any problems and no real improvements.
svn path=/trunk/; revision=22443
2006-06-21 02:14:09 +00:00
Magnus Olsen
12a01a7706 move back packmgr did move it by mistake
svn path=/trunk/; revision=22441
2006-06-20 21:12:15 +00:00
Magnus Olsen
f9764bff93 move qemu gui to tools
svn path=/trunk/; revision=22440
2006-06-20 21:11:39 +00:00
Magnus Olsen
3c8c07593b Moved remotely
svn path=/trunk/; revision=22439
2006-06-20 21:11:04 +00:00
Magnus Olsen
2ce269f075 Qemu GUI written in C# visual studio 2003. This is the source code of preview 6 I have done. The code have not been cleanup I commit a binary version of it as well. for not every one can compile it, and we should only include it with qemu when we are doing a release. so people with very lite knowlegws can config qemu as they like. I did speak with fireball he did think it was good idea to commit it to rosapps. See the todo.txt what left be done.
svn path=/trunk/; revision=22438
2006-06-20 21:05:59 +00:00
Hervé Poussineau
cee03bff64 Fix a cast
svn path=/trunk/; revision=22437
2006-06-20 18:56:41 +00:00
James Tabor
9945135514 Remove unimplemented debug print from CheckMenuRadioItem.
svn path=/trunk/; revision=22436
2006-06-20 01:42:02 +00:00
Aleksey Bragin
b48f3fc981 GCC 4 fixes, thanks to w3seek
svn path=/trunk/; revision=22434
2006-06-19 21:05:33 +00:00
Johannes Anderwald
3f201b3fd2 german translation by EmuandCo
svn path=/trunk/; revision=22433
2006-06-19 21:05:06 +00:00
Johannes Anderwald
b75fcdaa52 revert 22430
svn path=/trunk/; revision=22432
2006-06-19 20:32:10 +00:00
Johannes Anderwald
f8c1c6903d change SUBLANG_NEUTRAL to language specific code
patch by Brezenbak (he's back)

svn path=/trunk/; revision=22430
2006-06-19 20:01:26 +00:00
Johannes Anderwald
45c3f05329 add a few sublang constants
svn path=/trunk/; revision=22429
2006-06-19 20:01:01 +00:00
Johannes Anderwald
434759908d italien translation done by Speekix & small fixes by Brezenbak
svn path=/trunk/; revision=22428
2006-06-19 18:16:56 +00:00
Johannes Anderwald
6ad59cd7dc change to dialog font to MS Shell Dlg
patch by EmuandCo

svn path=/trunk/; revision=22426
2006-06-19 17:47:11 +00:00
Johannes Anderwald
9aa6f94c3d change to dialog font to MS Shell Dlg
patch by EmuandCo

svn path=/trunk/; revision=22425
2006-06-19 17:31:18 +00:00
Aleksey Bragin
99c69dbca9 Simple OpenGL screensaver by Andrey Korotaev. This is a good app to test opengl regressions.
svn path=/trunk/; revision=22424
2006-06-19 17:19:04 +00:00
Art Yerkes
b8bbec3796 Endian neutrality.
svn path=/trunk/; revision=22423
2006-06-19 16:38:27 +00:00
Ged Murphy
a63d7b03cf [AUDIT]
userinit 
userinit functionality is documented in Windows Internals. Our userinit is a trimmed version of that.
I suspect Thomas would also confirm this as clean if anyone asks him ;)

svn path=/trunk/; revision=22422
2006-06-19 16:06:35 +00:00
Art Yerkes
07565e3067 Fixed rare block end overwrite.
svn path=/trunk/; revision=22421
2006-06-19 15:55:17 +00:00
Ged Murphy
71463053fb [AUDIT]
dnsapi
Confirmed to be clean by Art Yerkes

svn path=/trunk/; revision=22420
2006-06-19 15:31:55 +00:00
Ged Murphy
f5028b62ff [AUDIT]
dhcpcsvc
Confirmed to be clean by Art Yerkes

svn path=/trunk/; revision=22419
2006-06-19 15:29:23 +00:00
Ged Murphy
bc29d4256f [AUDIT]
slayer
Confirmed to be clean by Thomas Weidenmueller

svn path=/trunk/; revision=22418
2006-06-19 13:59:22 +00:00
Ged Murphy
8eb5c17e99 [AUDIT]
utils
ReactOS utilities, not based on Windows components

svn path=/trunk/; revision=22417
2006-06-19 13:55:51 +00:00
Ged Murphy
8428b9d16f [AUDIT]
hid
mostly wrappers and stubs.
Confirmed to be clean by Thomas Weidenmueller

svn path=/trunk/; revision=22416
2006-06-19 13:49:29 +00:00
Ged Murphy
09f1c65b39 [AUDIT]
devmgr
Confirmed to be clean by Thomas Weidenmueller
"devmgr is built from the ground up, probably completely differently. It only has undocumented apis which Thomas wrote test apps for, they were mostly based on guessing and corrected several times."

svn path=/trunk/; revision=22415
2006-06-19 13:27:06 +00:00
Ged Murphy
58217251fd [AUDIT]
winsta
only contains stubs

svn path=/trunk/; revision=22414
2006-06-19 12:45:44 +00:00
Ged Murphy
4420b05a12 [AUDIT]
winscard
only contains stubs

svn path=/trunk/; revision=22413
2006-06-19 12:43:39 +00:00
Aleksey Bragin
f2f67e344c Alexey Zavyalov: Start implementing new International Settings applet (Windows XP-alike style, and eventually will work in Windows XP).
I keep the old intl.cpl in our tree since it contains some hacks to switch languages/locales/layouts, which will soon be gone (along with the old intl.cpl logically)

svn path=/trunk/; revision=22412
2006-06-19 12:43:29 +00:00
Ged Murphy
c9099e06c5 [AUDIT]
vdmdbg
only contains stubs

svn path=/trunk/; revision=22411
2006-06-19 12:36:40 +00:00
Ged Murphy
dd4f9423a7 [AUDIT]
snmpapi
only contains stubs

svn path=/trunk/; revision=22410
2006-06-19 12:34:31 +00:00
Ged Murphy
aa2e6e3de0 [AUDIT]
samsrv
only contains stubs

svn path=/trunk/; revision=22409
2006-06-19 12:22:44 +00:00
Ged Murphy
38bb456ef3 [AUDIT]
authz 
Confirmed to be clean by Thomas Weidenmueller

svn path=/trunk/; revision=22408
2006-06-19 12:14:39 +00:00
Ged Murphy
5551537d5f [AUDIT]
opengl32 
Confirmed to be clean by Anich Gregor (blight)

svn path=/trunk/; revision=22407
2006-06-19 12:09:56 +00:00
Ged Murphy
ccc9dab877 [AUDIT]
mswsock
All stubs with the exception of TransmitFile, which is a simple wrapper

svn path=/trunk/; revision=22406
2006-06-19 11:49:15 +00:00
Aleksey Bragin
9b0d10bbbc Change entrypoint to be a get-style method of class Module, having a boolean param which define if the entrypoint is to be returned with or without the leading underscore. Internal entrypoint string holds entrypoint without leading underscore.
This makes both mingw and msvc backend happy about entry point names.

svn path=/trunk/; revision=22405
2006-06-18 20:30:52 +00:00
Magnus Olsen
7985065a7a rename .xml to rbuild forget we using .rbuild as ext
svn path=/trunk/; revision=22404
2006-06-18 20:14:40 +00:00
Aleksey Bragin
21aed7ec4f Revert r22396: I will provide a better fix
svn path=/trunk/; revision=22403
2006-06-18 20:01:13 +00:00
Magnus Olsen
cebe4f85fa 1. Restore hardware wiz cpl, fix the comping error. Do not delete rbuild file when some thing does not build.
2. fixing the comping problem for hardware wiz cpl 
3. Langues Nl.rc patch from i386dx see wiki how have done the translate

svn path=/trunk/; revision=22402
2006-06-18 19:56:12 +00:00
Magnus Olsen
75da9a2f7c Langues Nl.rc patch from i386dx see wiki how have done the translate
svn path=/trunk/; revision=22401
2006-06-18 19:39:41 +00:00
Aleksey Bragin
f618cc855d Thomas Weidenmueller: RBUILD: Support generating headers from .idl files (Patch 1592)
svn path=/trunk/; revision=22400
2006-06-18 19:39:13 +00:00
Magnus Olsen
427b21b076 Langues Nl.rc patch from i386dx see wiki how have done the translate
svn path=/trunk/; revision=22399
2006-06-18 19:37:05 +00:00
Magnus Olsen
4c2229b4c9 Langues Nl.rc patch from i386dx see wiki how have done the translate
svn path=/trunk/; revision=22398
2006-06-18 19:32:03 +00:00
Magnus Olsen
1e95708d53 Langues Nl.rc patch from i386dx see wiki how have done the translate
svn path=/trunk/; revision=22397
2006-06-18 19:29:44 +00:00
Aleksey Bragin
8f8e389d3e Remove "_" decoration from module entries, since MSVC doesn't need them
svn path=/trunk/; revision=22396
2006-06-18 19:28:54 +00:00
Johannes Anderwald
28ab213634 update resource file
patch by EmuandCo

svn path=/trunk/; revision=22395
2006-06-18 19:25:41 +00:00
Magnus Olsen
4e70b68cd2 Langues Nl.rc patch from i386dx see wiki how have done the translate
svn path=/trunk/; revision=22394
2006-06-18 19:25:18 +00:00
Johannes Anderwald
cf1da8dd66 [AUDIT]
unlock resource file

svn path=/trunk/; revision=22393
2006-06-18 19:23:03 +00:00
Johannes Anderwald
e8da9219d1 fix typos, use correct sub languages, update resource files, change dialog font to "MS Shell Dlg"
patch by EmuandCo

svn path=/trunk/; revision=22392
2006-06-18 19:01:48 +00:00
Eric Kohl
1c0c7413bd Implement CM_Get_HW_Prof_Flags[_Ex]A/W and add PNP_HwProfFlags stub.
svn path=/trunk/; revision=22391
2006-06-18 14:36:42 +00:00
Johannes Anderwald
aabda4b500 specify CF_INITTOLOGFONTSTRUCT flag to auto-select current font in font selection dialog.c
bug report by tsg1zzn fixes bug 1561

svn path=/trunk/; revision=22390
2006-06-18 14:13:03 +00:00
Aleksey Bragin
d33d5d5251 Patch by Mikhail Y. Zvyozdochkin (mzvyozd at narod dot ru): Simplify compilation under Linux.
svn path=/trunk/; revision=22389
2006-06-17 20:28:53 +00:00
Aleksey Bragin
5499eac485 Translation of cacls to Russian language, based on patch by Alexey Minnekhanov (minlexx at rambler dot ru)
svn path=/trunk/; revision=22388
2006-06-17 19:54:00 +00:00
Ged Murphy
9f9c084af1 - fix build issues reported by some users
- move definition into root resource file
- fix msvc warnings

svn path=/trunk/; revision=22387
2006-06-17 19:21:25 +00:00
Ged Murphy
5a05448343 {AUDIT]
TaskManager
Brian Palmer confirms this to be clean

svn path=/trunk/; revision=22386
2006-06-17 18:23:19 +00:00
Ged Murphy
45b7239931 [AUDIT]
sdkparse
ReactOS utility. 

svn path=/trunk/; revision=22385
2006-06-17 16:45:48 +00:00
Ged Murphy
6d058a9607 [AUDIT]
gdiplus
only contains stubs

svn path=/trunk/; revision=22384
2006-06-17 14:31:04 +00:00
Ged Murphy
77b50520e4 [AUDIT]
cards.dll
Filip confirms this code is clean.

svn path=/trunk/; revision=22383
2006-06-17 14:21:37 +00:00
Aleksey Bragin
10eda3917c - Add 2 more Ob Methods (currently turned off in testing)
- Add Open method to tests
- Make debug output of Ob Methods more informative
- Add Ob Methods counting tests

svn path=/trunk/; revision=22381
2006-06-17 12:18:08 +00:00
James Tabor
12647707d7 Add two static control styles, SS_EDITCONTROL and SS_REALSIZECONTROL.
svn path=/trunk/; revision=22380
2006-06-17 05:18:49 +00:00
James Tabor
e61b53b59e Missed removing unused variables during manual patching.
svn path=/trunk/; revision=22379
2006-06-17 05:04:51 +00:00
James Tabor
3c7fc29628 Sync with wine.
svn path=/trunk/; revision=22378
2006-06-17 05:02:55 +00:00
James Tabor
35135e5ddb Vitaly Lipatov : Fix character conversion in combo box. Which needed to be synced to wine.
svn path=/trunk/; revision=22377
2006-06-16 15:33:59 +00:00
James Tabor
35c60c75a7 qingdoa daoo : Fix selection handling for listboxes with LBS_EXTENDEDSEL style. Also synced to wine.
svn path=/trunk/; revision=22376
2006-06-16 15:32:06 +00:00
Johannes Anderwald
6ebdd68cac french translation by Usurp
svn path=/trunk/; revision=22375
2006-06-15 20:50:47 +00:00
Johannes Anderwald
e21026c441 add powercfg, powerprof to bootcd
svn path=/trunk/; revision=22374
2006-06-15 18:29:23 +00:00
James Tabor
755b2442b4 Fix functionality in WM_SHOWWINDOW. Part II of last nights patch for TWOPARAM_ROUTINE_ROS_SHOWWINDOW.
svn path=/trunk/; revision=22373
2006-06-15 16:23:24 +00:00
Aleksey Bragin
f391668cb0 - Add russian translation by Andrey Korotaev
- Fix small typo in german resources

svn path=/trunk/; revision=22372
2006-06-15 16:08:32 +00:00
Johannes Anderwald
269c18e151 use SUBLANG_ENGLISH_US
spotted by Usurp

svn path=/trunk/; revision=22371
2006-06-15 15:53:52 +00:00
Aleksey Bragin
9bf8d5dcc2 Add code to query volume for its filesystem type
svn path=/trunk/; revision=22370
2006-06-15 15:00:37 +00:00
Johannes Anderwald
69d2fdc763 * add powrprof regression tests
* developed by Alex Wurzinger, Johannes Anderwald & Martin Rottensteiner

svn path=/trunk/; revision=22369
2006-06-15 14:50:42 +00:00
Johannes Anderwald
a526193b42 fix typo
spotted by Christoph_vW

svn path=/trunk/; revision=22368
2006-06-15 14:44:11 +00:00
Johannes Anderwald
c2321de544 * remove warning
* return true in ValidatePowerPolicy

svn path=/trunk/; revision=22367
2006-06-15 14:36:17 +00:00
Johannes Anderwald
cd64dfb6ea add missing export
svn path=/trunk/; revision=22366
2006-06-15 14:28:46 +00:00
Johannes Anderwald
1df30c5515 forgot to add powercfg baseaddress
svn path=/trunk/; revision=22365
2006-06-15 14:19:29 +00:00
Johannes Anderwald
f5ec853692 set eol-style:native
set keywords:author date id revision

svn path=/trunk/; revision=22364
2006-06-15 14:16:29 +00:00
Johannes Anderwald
9ebe93b22d add powercfg to build
svn path=/trunk/; revision=22363
2006-06-15 14:10:11 +00:00
Johannes Anderwald
98ecae1afe * implementation of Power Panel Control Applet
* developed by Alex Wurzinger, Johannes Anderwald & Martin Rottensteiner 

svn path=/trunk/; revision=22362
2006-06-15 14:07:08 +00:00
Maarten Bosma
4337de626c Fix sweeping the handle table on process shutdown. Patch by w3seek.
svn path=/trunk/; revision=22361
2006-06-15 13:16:29 +00:00
Andrew Munger
bedfaa39ea Remove gradient change committed by frik85.
svn path=/trunk/; revision=22360
2006-06-15 13:16:12 +00:00
Hervé Poussineau
3949820944 Cast size_t to long, before applying the unary - operator
svn path=/trunk/; revision=22359
2006-06-15 12:54:31 +00:00
Hervé Poussineau
78fce8752c Add some unit tests for setupapi
svn path=/trunk/; revision=22358
2006-06-15 12:49:04 +00:00
Hervé Poussineau
c1cdbae22d Set svn:eol-style to native
svn path=/trunk/; revision=22357
2006-06-15 12:41:57 +00:00
Hervé Poussineau
709fc5a971 Create configuration list only once (in MSVCBackend::Process) and use it everywhere.
Remove dead code

svn path=/trunk/; revision=22356
2006-06-15 12:33:47 +00:00
Johannes Anderwald
5c7452010e remove endless loop
svn path=/trunk/; revision=22355
2006-06-15 11:12:22 +00:00
Aleksey Bragin
bd98cae02e [FORMATTING]
Generalize formatting a bit, normalize file's header

svn path=/trunk/; revision=22354
2006-06-15 08:33:38 +00:00
James Tabor
7436b68377 Fix functionality in TWOPARAM_ROUTINE_ROS_SHOWWINDOW. Use one PWINDOW_OBJECT Window in NtUserCallTwoParam to help with cleanup.
svn path=/trunk/; revision=22353
2006-06-15 07:07:54 +00:00
Aleksey Bragin
3309c9266d - Johannes Anderwald and Thomas Weidenmueller: WIN32K: window class fixes (bug 1570)
- Reduces user32_winetest class failures from 85 to 64
- The patch doesn't introduce obvious regressions (reactos boots, explorer works, miranda and mirc loads)

svn path=/trunk/; revision=22349
2006-06-14 21:03:34 +00:00
Klemens Friedl
a87ee338d2 german translation update
patch created by EmuandCo and DangerGround

svn path=/trunk/; revision=22348
2006-06-14 20:07:20 +00:00
Hervé Poussineau
2aa4dc8052 Fix SESSION5_INITIALIZATION_ERROR by reverting part of 22219. The code is the same as in pre-22219 era, but separated in different files
Thanks Alex for reporting the faulty revision

svn path=/trunk/; revision=22347
2006-06-14 09:36:15 +00:00
Alex Ionescu
30c84451ef - Handle mount failure (such as when a CDROM isn't actually inside the drive) instead of assuming success and setting a NULL device object. Fixes regression seen by Arty/James when winefiling, dir d:-ing or hardware device wizarding.
svn path=/trunk/; revision=22346
2006-06-14 06:48:28 +00:00
Alex Ionescu
afee678695 - Fix some referencing/bugs in Ob functions that I wrote which were known fixmes.
- Remove every instance of ObDereferenceObject after an ObInsertObject that I could find. This temporarily will make the object leaks even worse, but it's better to increase leaks and then fix the ref bug, then to decrease references while missing spots that forgot to reference them (you'd end up with hard to debug randomly dying objects).

svn path=/trunk/; revision=22345
2006-06-14 04:02:02 +00:00
Ged Murphy
f45c3a82e8 fix checking of the properties dialog to see if it's open before sending messages to it. Stops the crash when starting or stopping services
svn path=/trunk/; revision=22344
2006-06-13 21:30:54 +00:00
Hervé Poussineau
d3f58e5415 - Add a MSVCConfiguration class, to keep trace of parameters instead of parsing each time the configuration name
- When building with MSVC headers, win32api and Wine directories are omitted and some defines are added

svn path=/trunk/; revision=22343
2006-06-13 21:23:25 +00:00
Hervé Poussineau
8add7c477f Add files to project only if the "If" condition is true.
svn path=/trunk/; revision=22342
2006-06-13 17:39:17 +00:00
Hervé Poussineau
d1346a4edc Fix formatting. No code change
svn path=/trunk/; revision=22341
2006-06-13 17:37:27 +00:00
James Tabor
be83be8f50 Adding future DefWnd calls to win32k.
svn path=/trunk/; revision=22340
2006-06-13 15:13:02 +00:00
Alex Ionescu
322d8b7398 - Enable ROS_LEAN_AND_MEAN if you want 50% smaller binaries and a 20MB reduction in memory usage.
- Create a new module type: exportdriver for drivers which also export files. Not supremely useful right now, but it helps us decrease compilation time of normal drivers by not running useless commands on them. Later we'll also strip out their export table. We can also make exportdrivers automatically read their .def file instead of specfiygone one.

svn path=/trunk/; revision=22339
2006-06-13 04:50:14 +00:00
Brandon Turner
1aeb0661d4 * When comparing two strings, you do not need to check what comes after them.
* You do not need to look for the next space in the "command" to run on if success, that will be handled later on, and causes it to skip over to much if it done in both spots

svn path=/trunk/; revision=22334
2006-06-13 00:26:08 +00:00
James Tabor
fb2ac07e08 Wine patch by Thomas Kho: Fix behavior when selecting disabled menu items.
svn path=/trunk/; revision=22333
2006-06-12 23:23:50 +00:00
Ged Murphy
f3025b54e9 missed this little blighter ....
svn path=/trunk/; revision=22331
2006-06-12 22:40:56 +00:00
Ged Murphy
5c4e6cbf06 - sync from Wine-0_9_5 to Wine-0_9_15
- there are a few small differences between ROS comctl32 and Wine comctl32, in listview.c and treeview.c. I've dropped the Wine versions in for now, as they appear to be trivial. I'll insert our small alterations after testing, if required. For now, we are using 100% Wine code.
- We are failing some comctl32 Wine tests in ROS, but passing more than previous.


Sync to Wine-0_9_15:
Mikoaj Zalewski <mikolaj@zalewski.pl>
- comctl32: header: Put the new item in place of the hot divider instead of swapping.
- comctl32: header: Draw the drag image and hot dividers while dragging an item.
- comctl32: header: Fix an order-related bug in HEADER_InternalHitTest.
- comctl32: header: Implement HDM_SETHOTDIVIDER.
- comctl32: header: Implement HDM_CREATEDRAGIMAGE.
- comctl32: listview: Apply the HDS_DRAGDROP header style if needed.
- comctl32: header: Update the rects in HEADER_Refresh if needed.
- comctl32: header: Ignore out-of-range iOrder in SetItemT.
Paul Vriens <Paul.Vriens@xs4all.nl>
- comctl32/header: Check Null before accessing struct member.
Alexandre Julliard <julliard@winehq.org>
- comctl32: Dialog procedures should be called with CallWindowProc.
 
Sync to Wine-0_9_14:
Mikoaj Zalewski <mikolaj@zalewski.pl>
- comctl32: header: Don't try to draw items outside the clipping rect.
- comctl32: header: Make the column resizing smooth in full drag mode.
Jonathan Ernst <jonathan@ernstfamily.ch>
- Update the address of the Free Software Foundation.
- Uniformization of French main menu accelerators.
 
Sync to Wine-0_9_13:
Mikoaj Zalewski <mikolaj@zalewski.pl>
- comctl32: Add Str_SetPtrWtoA analogue to Str_SetPtrAtoW.
qingdoa daoo <qingdao33122@yahoo.com>
- comctl32: Change return code comparison in AVI control.
- comctl32: Fix an unsigned comparison to zero.
- comctl32: Update first visible when appropiate in the TVI_SORT case.
Saulius Krasuckas <saulius2@ar.fi.lt>
- comctl32: Increase FILEVERSION up to 5.81.4704.1100.
 
Sync to Wine-0_9_12:
Mike Hearn <mike@plan99.net>
- comctl32: Add OOM codepath in imagelist control.
Antonio Codazzi <f_sophia@libero.it>
- comctl32: Italian language updates.
- comctl32: Esperanto language support.
 
Sync to Wine-0_9_11:
Rein Klazes <wijn@wanadoo.nl>
- comctl32: Do not free LPSTR_TEXTCALLBACK tooltip texts.
James Hawkins <truiken@gmail.com>
- comctl32: A couple fixes for tab icon offsets.
Thomas Weidenmueller <wine-patches@reactsoft.com>
- comctl32: Rebar size fix.
Mike McCormack <mike@codeweavers.com>
- comctl32: Having an MRU list without a compare function works in Windows.
 
Sync to Wine-0_9_10:
Andrñs Kovñcs <andras@csevego.net>
- comctl32: Added Hungarian translation.
Mike McCormack <mike@codeweavers.com>
- comctl32: Fix some gcc 4.1 warnings caused by windowsx.h macros.
 
Sync to Wine-0_9_9:
Vitaliy Margolen <wine-patch@kievinfo.com>
- comctl32: Remove/swap limits if min > max in MCM_SETRANGE.
  We should swap min & max only when both limits are being
  set. Otherwise limit that being set should invalidate other limit
  (remove it).
- comctl32: Don't change month range in MCM_SETRANGE. Add tests for this.
 
Sync to Wine-0_9_8:
Vitaliy Margolen <wine-patch@kievinfo.com>
- comctl32: Fix invalid date/time check in MCM_SETRANGE: ignore time and fail on bad date.
Francois Gouget <fgouget@free.fr>
- Assorted spelling fixes.
Petr Tesarik <hat@tesarici.cz>
- comctl32: Czech language resources encoding fix.
Fatih Ac <fasici@linux-sevenler.org>
- comctl32: Turkish translation.
 
Sync to Wine-0_9_7:
Alexandre Julliard <julliard@winehq.org>
- Fixed creation of PS_ALTERNATE pens.
 
Sync to Wine-0_9_6:
Phil Krylov <phil@newstar.rinet.ru>
- comctl32: Call UpdateWindow() after changing statusbar text.
Thomas Weidenmueller <wine-patches@reactsoft.com>
- comctl32: Reduce memory usage of the syslink control.
- comctl32: Some painting fixes for the syslink control.
Mike McCormack <mike@codeweavers.com>
- comctl32: Invalidate the entire progress bar any time it changes.

svn path=/trunk/; revision=22329
2006-06-12 22:35:32 +00:00
Ged Murphy
f921860cdc enable all tests
svn path=/trunk/; revision=22328
2006-06-12 20:26:30 +00:00
Johannes Anderwald
5eae6f4526 fix build prob #take one
svn path=/trunk/; revision=22327
2006-06-12 18:09:47 +00:00
Ged Murphy
ef4faef9dd fix build
svn path=/trunk/; revision=22326
2006-06-12 17:58:59 +00:00
Johannes Anderwald
f4176159a9 fix typo in solitaire.cpp
patch by Wildcat (bug 1555)

svn path=/trunk/; revision=22325
2006-06-12 17:51:03 +00:00
Johannes Anderwald
2424761624 set focus back after messagebox
fix formating of previous commit

svn path=/trunk/; revision=22324
2006-06-12 17:44:57 +00:00
Johannes Anderwald
e522810b81 set focus back to computer name when invalid name was entered
bug report by keytotime (bug 1569)

svn path=/trunk/; revision=22323
2006-06-12 17:40:35 +00:00
Johannes Anderwald
b0338a0f3f add freeldr_fdebug rbuild
svn path=/trunk/; revision=22322
2006-06-12 17:30:21 +00:00
Johannes Anderwald
9f9d9a1613 add norwegian translation
patch by LMH1 (bug 1575)

svn path=/trunk/; revision=22321
2006-06-12 17:28:08 +00:00
Johannes Anderwald
89a00d9caf add rbuild file
svn path=/trunk/; revision=22320
2006-06-12 17:26:41 +00:00
Alex Ionescu
8d3f5096fd - Pretty much the last Ob implementation/optimization patch (Except for a minor fix by Thomas to fix handle sweeping), re-implemented the ObFindObject routine by using some code that I had written almost 2 years ago with help from Thomas and Filip, plus some fixes discovered today while testing.
- Fixed symbolic link and desktop/winsta parse procedures to become NT-compatible now that ObFindObject is as well. Also fixed file/device parse routine for these changes.
- ObFindObject now supports STATUS_REPARSE_OBJECT, and has an optimized path for parsing when a root directory is given, as well as is entirely unicode_string-based.
- Cleaned up ob.h and added ob_x.h for the inlined functions.
- Implemented new Ob tracing system.

svn path=/trunk/; revision=22319
2006-06-12 05:58:08 +00:00
Alex Ionescu
119738339b - Fix a typo that had broken the build -- sorry.
svn path=/trunk/; revision=22318
2006-06-11 22:32:12 +00:00
Alex Ionescu
b0dc37752d - Bring out the champagne... one of my first-ever and most ancient ReactOS TODOs: the IopCreateFile hack has been totally removed and we now have a file/device parse routine. It's still nothing like NT's but it's not a hack anymore, and actually works like it should.
svn path=/trunk/; revision=22317
2006-06-11 22:26:54 +00:00
Eric Kohl
bc297b2f4b Implement CM_Delete_DevNode_Key and add CM_Delete_DevNode_Key_Ex stub.
svn path=/trunk/; revision=22316
2006-06-11 21:56:08 +00:00
Aleksey Bragin
c08140a104 Slightly update the doc to make it correspond to nowadays reality
svn path=/trunk/; revision=22315
2006-06-11 21:05:25 +00:00
Ged Murphy
0262a2684c update the comctl32 wine tests
svn path=/trunk/; revision=22314
2006-06-11 15:51:13 +00:00
Maarten Bosma
64471203f9 Fix size of the startmenu (e.g. Start->Programs) when there are very much entries. Tested under Windows. Fix by slawek from the German forum.
svn path=/trunk/; revision=22313
2006-06-11 15:16:48 +00:00
Eric Kohl
47a7900e91 Implement PNP_AddID.
svn path=/trunk/; revision=22310
2006-06-11 13:20:46 +00:00
Hervé Poussineau
b9bcb95e37 Fix non-optimized versions of InterlockedIncrement/InterlockedDecrement.
Fixes bug 916

svn path=/trunk/; revision=22309
2006-06-11 13:00:47 +00:00
Hervé Poussineau
f08c410f39 Move Interlocked* functions to architecture-relative directories. This prevents use of inlined assembler.
svn path=/trunk/; revision=22308
2006-06-11 12:27:27 +00:00
Hervé Poussineau
198f03e34b [AUDIT]
According to Fireball, this file is clean because it contains only well-known interlocked operations taking up a few asm instructions

svn path=/trunk/; revision=22307
2006-06-11 12:15:43 +00:00
Hervé Poussineau
df7f875767 Add some tests for interlocked functions
svn path=/trunk/; revision=22306
2006-06-11 12:02:04 +00:00
Alex Ionescu
57dc67574c * Significant improve boot speed and debug log neatness:
- Get rid of a dozen of debug prints that have been straying along for a long time (some for years), most of which I must shamefully admit I am responsible for.
- Fix a critical bug subsystem bug in smss and don't hang the system 15 seconds on boot-up.
- Rebase some problematic modules (and fix wshtcpip's rbuild file) to avoid relocations on bootup and some process startup. 
- Enable lsass startup in winlogon and the registry.
- Only show debug log header when actually debugging to a file.

svn path=/trunk/; revision=22305
2006-06-11 08:25:10 +00:00
Hervé Poussineau
ab794adf1d - Support more than one child
- vbemp shouldn't parse the EDID, so return it to videoprt

svn path=/trunk/; revision=22304
2006-06-11 07:57:37 +00:00
Alex Ionescu
259db9be47 - Fix definitions of OB_QUERYNAME_METHOD and OB_OKAYTOCLOSE_METHOD. Add fixme for OB_SECURITY_METHOD, will change it later.
- Simplified NtDuplicateObject to a simple stub around ObDuplicateObject, there is no need to have lengthy hacks for NtCurrentProcess/NtCurrentThread().
- Cleanup ObDuplicateObject to use normal Ob routines instead of grovelling through handle table structures and manually touching the handle count: It now calls ObpIncrementHandleCount and all the underlying operations are done on the duplicated handle. Also access state creation is done if the duplicated handle has different desired access.

svn path=/trunk/; revision=22303
2006-06-11 06:52:56 +00:00
Aleksey Bragin
d6a84751c7 - Further improvements to Ob tests (fixing obvious mistakes/etc), however reference tests still cause bugcheck, so they are disabled
- Clean-up is enabled now, so basically it's possible to run the test a number of times in win2k3, and every time it will go from scratch by creating everything. But I have a feeling that deleting object-types causes some type of corruption. To be investigated later.

svn path=/trunk/; revision=22302
2006-06-10 22:39:14 +00:00
Aleksey Bragin
325be5eb8d Alex finally paid attention to my code, so I'm fixing a few things...
svn path=/trunk/; revision=22301
2006-06-10 21:17:43 +00:00
Hervé Poussineau
3e3f927b36 After some tests, change SetupDiClassNameFromGuidExW and SetupDiGetClassDescriptionExW to match Windows XP behavior
svn path=/trunk/; revision=22300
2006-06-10 20:51:18 +00:00
Hervé Poussineau
b76c5a1315 Cleanup:
- Check that mandatory arguments are provided
- Better tracing system
- Prepend private function names with SETUP_
- Use MultiByteToUnicode instead of MultiByteToUnicode + HeapAlloc
- ...

svn path=/trunk/; revision=22299
2006-06-10 20:48:17 +00:00
Aleksey Bragin
ac6a23b01f [FORMATTING]
Very small cleanup, formatting and typecasting change

svn path=/trunk/; revision=22298
2006-06-10 20:41:54 +00:00
Aleksey Bragin
4b2ae8cc64 Revert accidental change of ntfs.sys driver's Start value made in last commit
svn path=/trunk/; revision=22297
2006-06-10 20:32:25 +00:00
Aleksey Bragin
c87c9cee4a Add loading of kernel-mode regression testing driver into hivesys.inf (it's commented out of course by default).
To run km regression tests under windows, one should use kmtloader.exe app
To run them on reactos, one should copy kmtest.sys to reactos\system32\drivers, and uncomment entries in hivesys.inf

svn path=/trunk/; revision=22296
2006-06-10 18:05:44 +00:00
Aleksey Bragin
e5502d72f8 - Add create/insert object tests
- Add simple referencing tests (now disabled)
- All tests pass currently on Windows 2003

svn path=/trunk/; revision=22295
2006-06-10 16:37:34 +00:00
Alex Ionescu
51b80d64e3 - Update sweep callback to send the handle number. Patch by Thomas Weidenmueller (w3seek@reactos.org)
- Export ObCloseHandle since it's implemented now
- Implement ObpCreateUnnamedHandle and ObpIncrementUnnamedHandleCount as optimizations for ObInsertObject with unnamed objects.

svn path=/trunk/; revision=22294
2006-06-10 00:41:16 +00:00
Brandon Turner
911fec4841 eol-style:native and some TCHAR fixes
svn path=/trunk/; revision=22293
2006-06-09 15:59:56 +00:00
Hervé Poussineau
6b4f2e1649 Add documentation to SetupDiBuildClassInfoList/SetupDiBuildClassInfoListExA/W
Patch by Christian Gmeiner on wine-patches ML

svn path=/trunk/; revision=22292
2006-06-09 14:16:39 +00:00
Alex Ionescu
b9375052c5 - Fix the CmpObjectDelete bugcheck by hacking away some code reponsible for it. The bugcheck is probably the result of the current ref-count bug.
- Remove some more code in IoCreateFile/IopCreateFile to help with deprecating it later.

svn path=/trunk/; revision=22291
2006-06-09 08:49:03 +00:00
Alex Ionescu
dc1e926987 - Add the OPEN_PACKET structure to internal headers. Used for the I/O Parse Routine.
- Gut down IopCreateFile to the strict minimum so that only the critical parts remain.
- NT Compatiblity fix in ObFindObject: stop parsing if remaining path is null, this means that the parse routine is done parsing and that -this- is the final object.

svn path=/trunk/; revision=22290
2006-06-09 07:28:26 +00:00
Aleksey Bragin
c07a24b350 - Added DPRINT logic in all files (to be used as "TRACE" to aid in debugging of tests)
- Added initial part of Ob tests which uses ObCreateObjectType, NtCreateDirectoryObject, ObCreateObject exported APIs.

svn path=/trunk/; revision=22289
2006-06-08 21:39:51 +00:00
Alex Ionescu
63e1686915 - Remove the heart (but not the brain) of the IopCreateFile hack. A much 'nicer' hack now detects if a filename can't be found, and instead of inserting it into the object directory (wrong!), calling IopCreateFile (wrong!), then having it fail, only to then remove the newly inserted object entry (wrong wrong wrong!), IopCreateFile is now *only* called for real files, otherwise Ob detects the invalid name and fails nicely and quickly.
svn path=/trunk/; revision=22288
2006-06-08 21:36:44 +00:00
Alex Ionescu
d7c17c883d - Add Object Header Quota structure/define
- Give Files/Devices a parse routine and currently stubplement it for debugging purposes and trying to figure out a way to kill the IopCreateFile hack.
- Implement ObpChargeQuotaForObject. Using a memory breakpoint in WinDBG I've finally found where the OB_FLAG_CREATE_INFO flag gets masked out. Also attempted a very naive quota charging implementation, but it's a guess and probably wrong (but at least it does...something.)

svn path=/trunk/; revision=22287
2006-06-08 20:58:21 +00:00
Alex Ionescu
1c378756d0 - Kill a bunch of deprecated hacks, because removing hacks is always cool!
svn path=/trunk/; revision=22286
2006-06-08 19:00:22 +00:00
Alex Ionescu
1891e7787c - [FORMATTING]:
- Get rid of ObpGetHandleCountByHandleTable and ObpGetNextHandleByProcessCount.
  - Add some function comment headers.
  - Move ObMakeTemporaryObject, NtMakeTemporaryObject, NtMakePermanentObject to oblife.c
  - Move ObpDeleteNameCheck to obname.c

svn path=/trunk/; revision=22285
2006-06-08 18:24:37 +00:00
Alex Ionescu
1f896561d9 - Rename ObpDeleteHandle to ObpCloseHandleTableEntry and change semantics so that it deals directly with the entry and table. This re-factoring optimizes the case where we already have the entry and don't want to use the handle to get the kernel table and then attach/detach/enter/exit critcal regions (such as when sweeping).
- Implement ObCloseHandle, a new XP Export
- Take old NtClose code and write it in ObpCloseHandle, which is the master function that Ntclose/ObCloseHandle share.
- Complete patch requires ExSweepHandleTable to be modified to return the Handle instead of the entry, so that sweeping can be fixed to properly destroy handles and call their OkayToClose, instead of just decrementing a count.

svn path=/trunk/; revision=22284
2006-06-08 18:09:01 +00:00
Brandon Turner
d372aa6165 If treat a backspace more like a normal char.
svn path=/trunk/; revision=22283
2006-06-08 13:07:05 +00:00
Brandon Turner
3545fe53f7 ReadConsole test to show how backspaces should be handled.
svn path=/trunk/; revision=22282
2006-06-08 12:59:32 +00:00
Alex Ionescu
c872f735ba - [FORMATTING] Add function comment headers.
svn path=/trunk/; revision=22281
2006-06-08 06:31:16 +00:00
Alex Ionescu
028c1dff32 - ObFindObject should return the actual object being inserted, in the insert case (otherwise it always returns the root-directory instead...)
- Add check for optimized case for objects with no name and no security, but not implemented (ObpIncrementUnnamedHandleCount in Gl00my docs), since I need a better translation then babelfish's.
- Fix ObInsertObject to save the Security Descriptor in the Access State structure. Gl00my mentions this isn't absorbed by SeCreateAccessCheck and I just noticed that too.
- We only need to perform security checks for a new object, in ObInsertObject, not if the object already existed.
- Added proper backout+failure code in ObInsertObject if lookup failed, and also look out for mismatch/exists/collision cases (implemented using simple logic).

svn path=/trunk/; revision=22280
2006-06-08 06:17:46 +00:00
Alex Ionescu
2173f9e4aa - Fix ObGetObjectSecurity to use the object type's pool type instead of assuming PagedPool.
- Re-wrote the way ObInsertObject handles security as described in Chapters 6 and 9 of Gl00my (ie: made it use ObGetObjectSecurity and ObAssignObjectSecurity; ironically, these functions already existed/are exported and could've been used since the start instead of duplicating code).
- Fix ObpReferenceCachedSecurityDescriptor only to touch the cached entry if it actually gets a non-NULL descriptor. Also improved it to return the referenced SD, instead of requiring the caller to do it manually.

svn path=/trunk/; revision=22279
2006-06-08 05:41:39 +00:00
Alex Ionescu
f96e25891f - I just noticed that ObInsertObject never got updated to deal with the improvements in ObFindObject and ACCESS_STATE usage, so made the following fixes:
* Create the ACCESS_STATE structure much earlier.
  * Actually send the access state and parse context to ObFindObject, when called from ObInsertObject (this should fix some hidden regressions, since they finally get an access state with access masks now).
  * Remove some deprecated hacks.
  * If inserting the handle failed, cleanup the name and remove it from the directory entry.
  * Fix a memory leak because we weren't deleting the access state.

svn path=/trunk/; revision=22278
2006-06-08 02:56:59 +00:00
Alex Ionescu
0b1df199e3 - Fixup some comments and add Eric Kohl's name to this file, since he had worked on some of the original calls.
- Minor/trivial fixes to some Object Security APIs that were left in the dark:
  * Use PagedPool instead of NonPagedPool memory, and also tag the allocation for debugging.
  * Send needed data to the security procedure instead of NULL/0, including the Generic Mapping, and the actual Security Decriptor.
  * Only un-assign the descriptor in case of failure, not all the time (the whole point of the API is to assign it!)
  * Tell the caller that memory was NOT allocated if we failed to get the security descriptor.

svn path=/trunk/; revision=22277
2006-06-08 02:36:12 +00:00
Alex Ionescu
d11bb11784 - Split ObpCreateHandle into two distinct operations: Incrementing and Creating (like we have Delete/Decrement). No code additions, just splitting.
- Because of the split, we can now directly only do an Increment when duplicating the handle, since we don't need to create a brand new one. Also, when inheriting, we can now properly do an increment as well, instead of simply manually increasing the handle count (because for each inherited handle, access checks and openprocedure should've still been called).

svn path=/trunk/; revision=22276
2006-06-07 23:59:15 +00:00
Hervé Poussineau
47b12f6d7d Some 64 fixes
svn path=/trunk/; revision=22275
2006-06-07 17:33:57 +00:00
Hervé Poussineau
9a844e2247 Replace STDCALL by NTAPI
Some 64 bits fixes

svn path=/trunk/; revision=22274
2006-06-07 17:31:43 +00:00
Hervé Poussineau
7e07a60d3a Allocate buffer for system directory on heap instead of stack
svn path=/trunk/; revision=22273
2006-06-07 17:30:06 +00:00
Hervé Poussineau
9d4e17c705 - Implement DecryptFileA
- Fix some stubs
- Remove dead code

svn path=/trunk/; revision=22272
2006-06-07 17:26:25 +00:00
Hervé Poussineau
f326c55403 - Implement FileEncryptionStatusA
- Fix FileEncryptionStatusW prototype
- Fix EncryptionDisable stub

svn path=/trunk/; revision=22271
2006-06-07 17:24:49 +00:00
Aleksey Bragin
69778e9422 Add missing debug.h/NDEBUG construction, fixes compiling without CU
svn path=/trunk/; revision=22270
2006-06-07 13:08:28 +00:00
Aleksey Bragin
e20a9c6ec4 [AUDIT]
base/system/smss.exe

- Unlock simple and trivial functions
- Unlock unimplemented funcs and non-code things

svn path=/trunk/; revision=22269
2006-06-07 13:06:40 +00:00
Aleksey Bragin
d090a2d035 Fix a typo in Internet Time tab. Spotted by hand.of.omega@gmail.com. Fixes bug 1562
svn path=/trunk/; revision=22268
2006-06-07 10:57:40 +00:00
Alex Ionescu
da2029d89e - Final fixes to ObpCreateHandle that I can think of before splitting Create/Increment (might be lacking some security checks or trace/database functionality, but I haven't found any info on the latter, while the former I will stub, but I don't have the skills to imlement (ObAssignObjectSecurity)):
* Honour ObjectType passed to the function and fail if it doesn't match.
  * Use table-based logic instead of process-based logic for Kernel vs User-mode handles (same change that's been done all over the place, since it requires only one dereference of the process object).
  * Do the GENERIC/MAXIMUM_ALLOWED logic directly inside the ACCESS_STATE structure.
  * This is where we should call the OpenProcedure (acc. to Gl00my), but this kills win32k -- investigate, #ifed out for now.
  * Increase the object type's number of handles as well.
  * Set the handle table entry's ObAttributes correctly; the old code seems to have been messing that up.
  * Honour the AdditionalReferences parameter and do referencing bias if requested.
  * Honour the ReturnedObject parameter to return the object pointer back to the caller.
  * Add OBTRACEing to the function.
  * If we failed because a handle couldn't be allocated, use the distinguied STATUS_INSUFFICIENT_RESOURCES error code instead of the generic STATUS_UNSCUCESFFUL, and backout all the changes we made by calling ObpDecrementHandleCount.

svn path=/trunk/; revision=22267
2006-06-07 06:15:59 +00:00
Alex Ionescu
39bf2b48c2 - Change ObpCreateHandle to the one documented and explained in the Gl00my documentation. It also fits the re-factored split create/increment model better, supports open reasons, and allows to do type-checking and extra object referencing from within one routine.
- Add code to ObOpenObjectByName to detect the OpenReason. Experimental, since I'm not sure when to clear the flag.

svn path=/trunk/; revision=22266
2006-06-07 05:37:04 +00:00
Alex Ionescu
f36b5d1f3b - Add some trace macros to monitor handle/pointer counts for fixing regressions/bugs later.
- Change ObpCreateHandle to use an ACCESS_STATE structure instead of DesiredAccess. This is to help moving to an updated model where creating and incrementing a handle are 2 operations, so that code can be refactored (similarly to how we now have Delete/Decrement as 2 operations).
- Fix functions that were not creating an ACCESS_STATE Structure to create one locally now, or use the one passed as a parameter, if available.

svn path=/trunk/; revision=22265
2006-06-07 05:04:43 +00:00
Alex Ionescu
d2e5bfabe5 - Clone ObpCreateHandle to CmpCreateHandle. I am about to fix its implementation and since Cm* currently abuses Ob I feel it safer to give its own internal function.
- Make ObpCreateHandle internal to Ob as it should be. Change NtCreateProcessTokenEx to use ObOpenObjectByPointer, it has no business manually trying to create a handle. Same goes for ExpLoadInitialProcess.

svn path=/trunk/; revision=22264
2006-06-07 01:47:33 +00:00
James Tabor
2097dade2d Quick patch.
svn path=/trunk/; revision=22263
2006-06-07 01:45:18 +00:00
James Tabor
c537a6efb8 Cleanup coding of IntGdiPolyPolygon and IntGdiPolygon.
svn path=/trunk/; revision=22262
2006-06-07 01:28:44 +00:00
James Tabor
fb9a28f2b5 Implement Get & SetTextCharacterExtra. Does nothing ATM.
svn path=/trunk/; revision=22261
2006-06-07 01:22:47 +00:00
Magnus Olsen
8fcbc86a16 Implement %Fp now we have 25 fails with wine test for string version of *printf api
svn path=/trunk/; revision=22260
2006-06-07 00:04:51 +00:00
Magnus Olsen
00d62df5ab using uppercaps for %p instead lowercaps when it format the string, that make passing one more of wine test
27 fails now

svn path=/trunk/; revision=22259
2006-06-06 23:22:11 +00:00
Johannes Anderwald
f0bb911d21 add Wine's powrprof to build
svn path=/trunk/; revision=22258
2006-06-06 23:14:09 +00:00
Magnus Olsen
9c696e1c9e fixing some bugs for %c in the string version of printf
svn path=/trunk/; revision=22257
2006-06-06 23:01:44 +00:00
Johannes Anderwald
dd221de709 small compilation fix
svn path=/trunk/; revision=22256
2006-06-06 22:54:18 +00:00
Magnus Olsen
26cd015421 fixing two more bugs in *printf strings version.
this make we pass one more of wine test

svn path=/trunk/; revision=22255
2006-06-06 22:43:41 +00:00
Johannes Anderwald
6c2296718e import Wine 0.9.14 powrprof
svn path=/trunk/; revision=22254
2006-06-06 21:54:39 +00:00
Johannes Anderwald
fe1606b3ed prepare wine 0.9.14. powrprof import
svn path=/trunk/; revision=22253
2006-06-06 21:51:40 +00:00
Magnus Olsen
4f6d8e38f4 implement datatype I32 for *printf string version we have a *printf for files as well
now 29 fails in wine test msvcrt printf
 

svn path=/trunk/; revision=22252
2006-06-06 21:42:42 +00:00
Alex Ionescu
a25a59160d - Formatting/name/comment/declaration/calling convention changes.
- Make ObpCreateHandleTable return NTSTATUS instead of VOID, so that it can return STATUS_INSUFFIENT_RESOURCES if the handle table couldn't be allocated.

svn path=/trunk/; revision=22249
2006-06-06 21:02:55 +00:00
Johannes Anderwald
7fff40f524 add missing NtPowerInformation to def
svn path=/trunk/; revision=22248
2006-06-06 21:02:30 +00:00
Magnus Olsen
7894ff05b8 fixing 2 more fualt in msvcrt *printf api
svn path=/trunk/; revision=22247
2006-06-06 12:45:05 +00:00
Alex Ionescu
21baa4ddb6 - Add function documentation header to ObpDeleteHandle, comment and re-format the function, and simplify the code to reduce some code duplication.
- Call the OkayToClose Procedure, if one is present, to allow the object owner a chance to disallow closing this handle. I believe this is required for properly protecting Winsta/Desktop handles (instead of using the regular protection mode, since that one can be bypassed). Thomas, get to work!

svn path=/trunk/; revision=22246
2006-06-06 06:12:09 +00:00
Alex Ionescu
18ed42b8a4 - Documented ObpDeleteNameCheck and ObpSetPermanentObject
- Added function documentation header for ObpDecrementHandleCount and ObpSetHandleAttributes
- Modified ObpDecrementHandleCount to accept Process and GrantedAccess paraemters since the definition for the Close Procedure Callback requires them (and we were currently sending NULL). Also send 0 for process handle count, since we don't yet parse/support per-process handle databases.
- Minor optimization: All objects have an object type, don't actually check if the object has one when decrementing a handle.
- Minor accounting fix: Decrement the total number of handles for the object type whose handle count is being decreased.

svn path=/trunk/; revision=22245
2006-06-06 05:49:28 +00:00
Alex Ionescu
afea80bbe4 - Make sure callers of NtMakeTemporaryObject have DELETE privileges, otherwise they could end up illegaly killing objects (in certain situations)
- Make sure callers of NtMakePermanentObject have SeCreatePermanentPrivilege.
- Implement ObpDeleteNameCheck as described in Gl00my's Ob Documentation (using such documentation falls under US Reverse Engineering Law - Clean rooming).
- Remove duplicated code in ObpDecrementHandleCount and ObpSetPermanentObject and have them use ObpDeleteNameCheck instead.
- Fixes thanks to using this routine:
  * Name-check is now properly done.
  * The keep-alive reference is now deleted when going from permanent->temporary object.
  * The parent directory is now dereferenced and cleared when deleting the object.
  * The security procedure is now called to delete the SD, and the name buffer is freed. 
- Remove ObGetObjectHandleCount, it's not a public function.


svn path=/trunk/; revision=22244
2006-06-06 04:52:08 +00:00
Alex Ionescu
50224a4d55 - Fix bug in IoCreateFile which my (correct) ObReferenceObjectByHandle bugfix patch uncovered. Bootcd/installation works again.
svn path=/trunk/; revision=22243
2006-06-06 02:07:55 +00:00
Hervé Poussineau
b3f2b879b0 Set libraries as project dependencies
svn path=/trunk/; revision=22242
2006-06-05 21:46:14 +00:00
Ged Murphy
485867fdaf silence some rather annoying alignment errors when building with msvc
svn path=/trunk/; revision=22240
2006-06-05 19:00:52 +00:00
Hervé Poussineau
67189b431d Change some DPRINT1 to DPRINT, as they were prior revision 21880.
svn path=/trunk/; revision=22239
2006-06-05 16:41:03 +00:00
Ged Murphy
a10b3f2380 - implement menu hints
- load separate 24bit bitmaps for the icons
- fix image list loading
- lots of other little tweaks and changes

svn path=/trunk/; revision=22238
2006-06-05 16:34:38 +00:00
Hervé Poussineau
2a685bbbfe Read EDID information from screen (if possible) in HwGetVideoChildDescriptor.
Still doesn't do anything useful with it, but that's a start ;)

svn path=/trunk/; revision=22237
2006-06-05 16:31:24 +00:00
Saveliy Tretiakov
56f9a0a548 add missing check for null return
svn path=/trunk/; revision=22236
2006-06-05 15:38:04 +00:00
Saveliy Tretiakov
b1e6b788ce Add Johannes Anderwald to credits.
svn path=/trunk/; revision=22235
2006-06-05 14:39:09 +00:00
Saveliy Tretiakov
c43a77ea7d [AUDIT]
\trunk\reactos\dll\win32\lzexpand (unlocked)
No code.


svn path=/trunk/; revision=22234
2006-06-05 14:35:31 +00:00
Saveliy Tretiakov
8177ebd451 [AUDIT]
\trunk\reactos\base\applications\shutdown (unlocked)
I looked through code and found no signs of reverse engeneering.


svn path=/trunk/; revision=22233
2006-06-05 14:32:28 +00:00
Alex Ionescu
a46ee938fa - Rename ObpCreateTypeObject to ObCreateObjectType and fix definition. The latter is actually exported in NT, and there's no reason not to export it while having our own internally renamed version.
- Added stub exports for ObCloseHandle, ObReferenceSecurityDesciptor, ObSetHandleAttributes, ObSetSecurityObjectByPointer so that someday someone can know what needs to be implemented.
- Removed ObGetObjectPointerCount. It is not exported in newer OSes and was always undocumented.
- Move ObQueryObjecctAuditingByHandle to security.c and optimized it not to attach to the system process, as well as to cache the handle table instead of dereferencing the owner process all the time.

svn path=/trunk/; revision=22232
2006-06-05 06:31:42 +00:00
Alex Ionescu
0aeaea0fb7 - Fixed formatting/commented/annotated ObReferenceObjectByHandle.
- Bug fixes:
  * Remove MAXIMUM_ALLOWED<->GENERIC_ALL conversion, I could find no mention of this in the docs.
  * Remove GENERIC_ACCESS <-> RtlMapGenericMask conversion, I could find no mention of this in the docs, and this mapping is only required when creating handles, not when referencing pointers.
- Optimizations:
  * Restructure code and remove code which was sometimes duplicated up to 5 times.
  * Do not attach/detach from the system process, this isn't required since we're merely getting a kernel pointer from the handle netry.
  * Directly increase the pointer count instead of calling ObReferenceObject, since we already have the object header in a variable.
  * Cache ObpKernelHandleTable/Process->ObjectTable and use those directly instead of always de-referencing the process.

svn path=/trunk/; revision=22231
2006-06-05 05:07:44 +00:00
Alex Ionescu
36f116cdd8 - Simplify ObGetObjectPointerCode and ObfReferenceObject.
- Fix ObReferenceObjectByPointer to actually work like documented instead of doing random incorrect checks. Also add special case for Symbolic Link objects as documented by Caz Yokoyama at Microsoft.

svn path=/trunk/; revision=22230
2006-06-05 00:32:26 +00:00
Alex Ionescu
137f145eb6 - Formatting/comment fixes.
svn path=/trunk/; revision=22229
2006-06-05 00:16:14 +00:00
Alex Ionescu
02d0bb9dbd - Fix ExChangeHandle not to send NULL but the actual context to the callback function (fix by Thomas Weidenmueller <w3seek@reactos.org>)
- Re-implement NtSetInformationObject based on ExChangeHandle and using ObpSetHandleAttributes as a callback.
- Re-implement NtQueryObject's ObjectHandleInformation case to simply return the information that's already in HandleAttributes; there is no point in querying for it all over again.
- Fix NtSetInformationObject not to allow a user-mode call to modify kernel-mdoe handle attributes. Add FIXME for Inheritance permissions check.
- Fix NtQueryObject to properly return OBJ_PERMANENT and OBJ_EXCLUSIVE; these flags are not stored in Handle Attributes.
- Fix NtQueryObject not to attempt referencing the handle if the caller specified AllTypesInformation, because then a handle is not needed.

svn path=/trunk/; revision=22228
2006-06-05 00:04:36 +00:00
Art Yerkes
7c2e312093 Sorry reverted. GreatLord says this is fixed in the wrong place.
svn path=/trunk/; revision=22227
2006-06-04 23:33:27 +00:00
Art Yerkes
6d676e6e95 Fix one wine test. Don't accept an option string that starts with =.
svn path=/trunk/; revision=22226
2006-06-04 23:30:29 +00:00
Eric Kohl
de5ef123ee Fix indentation
svn path=/trunk/; revision=22225
2006-06-04 21:34:02 +00:00
Martin Fuchs
48badfaf22 fix language constant to LANG_BENGALI
svn path=/trunk/; revision=22224
2006-06-04 21:07:01 +00:00
Martin Fuchs
93fafae8ff set eol-style to native
svn path=/trunk/; revision=22223
2006-06-04 20:57:51 +00:00
Hervé Poussineau
da27830782 Fix little spelling mistakes
Set svn:eol-style to native

svn path=/trunk/; revision=22222
2006-06-04 20:31:42 +00:00
Hervé Poussineau
df3e3981c8 Fix DPFLTR_IHVVIDEO_ID constant value
svn path=/trunk/; revision=22221
2006-06-04 20:10:02 +00:00
Martin Fuchs
bf3af9216b Patch of Coviti: change "Reactos" texts to "ReactOS"
svn path=/trunk/; revision=22220
2006-06-04 20:07:56 +00:00
Magnus Olsen
b2c2d86a42 fixing one more of wine msvcrt printf test
svn path=/trunk/; revision=22219
2006-06-04 19:20:20 +00:00
Eric Kohl
0c13f30550 Add PNP_AddID stub and implement CM_Add_ID_ExW.
svn path=/trunk/; revision=22218
2006-06-04 19:12:58 +00:00
Aleksey Bragin
39635013ab Add a little more tests for Mdl testing, only 1 failes in ReactOS currently
svn path=/trunk/; revision=22217
2006-06-04 18:27:48 +00:00
Art Yerkes
eac8defeed Fix four winetests from msvcrt:file.c
- The winetests show that the pointer never moves after calling chsize.
- Using SetEndOfFile is the best way to do this.  I wrote a test case that 
  uses WriteFile as we did before and it did not expand the file past eof.

svn path=/trunk/; revision=22216
2006-06-04 17:24:37 +00:00
Magnus Olsen
36329fccb0 [AUDIT] this code is clean, for it is from DJGPP
svn path=/trunk/; revision=22215
2006-06-04 17:22:12 +00:00
Magnus Olsen
5f286cc809 fixing 24 bugs in *printf string version. we are failing 34 test in wine_test msvcrt printf
svn path=/trunk/; revision=22214
2006-06-04 17:15:47 +00:00
Hervé Poussineau
1988057885 Fix call to IOCTL_SERIAL_PURGE
svn path=/trunk/; revision=22213
2006-06-04 16:32:54 +00:00
Hervé Poussineau
bfa0a5c6e1 Display an error message only if we're not in the "load only boot drivers" phase
svn path=/trunk/; revision=22212
2006-06-04 16:30:27 +00:00
Johannes Anderwald
18fbc81749 revert _strdate modifications
svn path=/trunk/; revision=22211
2006-06-04 14:24:45 +00:00
Aleksey Bragin
c4dded32e8 Fix some warnings
svn path=/trunk/; revision=22210
2006-06-04 14:24:08 +00:00
Aleksey Bragin
5eb09b8ac5 Delete unneeded makefile
svn path=/trunk/; revision=22209
2006-06-04 14:19:48 +00:00
Aleksey Bragin
42f34ff7ba - Add csqtest to build-system
- Add initial Kernel-Mode regression testing framework (thanks to Filip Navara for his PnPTest, thanks to Alexandre Julliard for Wine regression testing framework). Framework consists of: the driver (kmtest.sys) and the loader (kmtloader.exe).

svn path=/trunk/; revision=22208
2006-06-04 14:18:24 +00:00
Hervé Poussineau
b5d6466d79 Convert result struct only if NtUserEnumDisplaySettings returned success
svn path=/trunk/; revision=22207
2006-06-04 14:10:21 +00:00
Hervé Poussineau
c373b8ba66 Don't crash when no working display adapter is present
svn path=/trunk/; revision=22206
2006-06-04 14:09:29 +00:00
Hervé Poussineau
cc12e88784 Convert result struct only if NtUserEnumDisplayDevices returned success
svn path=/trunk/; revision=22205
2006-06-04 13:36:39 +00:00
Johannes Anderwald
36c9262fd0 _strdate should return maximum 8 chars
does not work yet

svn path=/trunk/; revision=22204
2006-06-04 13:20:09 +00:00
Hervé Poussineau
8d494b3a7b IntEnumDisplaySettings returns a BOOL, not a NTSTATUS
svn path=/trunk/; revision=22203
2006-06-04 13:09:25 +00:00
Johannes Anderwald
5c8fb36ad3 make _tfullpath pass all msvcrt_winetest dir tests
svn path=/trunk/; revision=22202
2006-06-04 10:23:28 +00:00
Magnus Olsen
9f044aa4d8 [AUDIT] this code is clear, no signs of revers is found it is only around 3-4 line of one function
svn path=/trunk/; revision=22201
2006-06-04 10:14:45 +00:00
Magnus Olsen
c92839403a do not cuase crash in dhcp when no networkcard is found
svn path=/trunk/; revision=22200
2006-06-03 20:29:26 +00:00
Magnus Olsen
dd6d911c37 sorrry I did break the build
svn path=/trunk/; revision=22198
2006-06-03 17:45:07 +00:00
Magnus Olsen
4eada6f8bd fixing malloc and realloc so it return right value
do not mix the doc over malloc and realloc. Thanks filip
<filip2307> malloc(0) -> valid buffer
<GreatLord> then I revert that change
<filip2307> realloc(<non-null pointer>, 0) -> NULL
<filip2307> realloc(NULL, 0) -> valid buffer

svn path=/trunk/; revision=22197
2006-06-03 17:40:23 +00:00
Magnus Olsen
f895d5ab82 Fix overflow caltions bugs in varus memmory functions, Thanks irc : Elrond (from TNG) for fixing calloc overflow bug.
svn path=/trunk/; revision=22196
2006-06-03 17:18:09 +00:00
Magnus Olsen
3b3b7ad5fd make malloc, calloc and some other function return NULL if size is 0
svn path=/trunk/; revision=22195
2006-06-03 13:22:11 +00:00
Magnus Olsen
19a69b58d8 [AUDIT] this code is clear, no signs of revers is found it is only around 2-3 line of each functions
svn path=/trunk/; revision=22194
2006-06-03 13:20:03 +00:00
Johannes Anderwald
e475b7f360 re-enable lock
svn path=/trunk/; revision=22193
2006-06-03 12:53:45 +00:00
Johannes Anderwald
9bd26230dd fix bug in CmiCreateHiveFreeCellList when a cell has size 0 which leads to inifite loop
fix bug in CmiCreateTempHive where only a pointer was allocated for the first cell but not object itself

svn path=/trunk/; revision=22192
2006-06-03 12:48:09 +00:00
Hervé Poussineau
21d98cbddd Fix some little bugs
svn path=/trunk/; revision=22191
2006-06-03 11:47:04 +00:00
Ged Murphy
97b1971025 [AUDIT]
umpnpmgr
Eric Kohl and Hervé Poussineau have both confirmed their contributions are clean. 
Eric also stated it was developed using information from the Samba project.

svn path=/trunk/; revision=22190
2006-06-03 11:30:13 +00:00
Ged Murphy
e018f1a8e1 [AUDIT]
services.exe
Eric Kohl and Filip Navara have both confirmed their contributions are clean. 
Public documentation, like "Inside Microsoft Windows 2000", and tests were used to implement it

svn path=/trunk/; revision=22189
2006-06-03 11:25:47 +00:00
James Tabor
3f8be13959 Fix compiling. Well for me anyway.
svn path=/trunk/; revision=22188
2006-06-03 07:00:09 +00:00
Aleksey Bragin
5e792878e0 Add forgotten KeAcquire/ReleaseQueuedSpinLock exported funcs to hal.def
svn path=/trunk/; revision=22187
2006-06-02 20:15:54 +00:00
Aleksey Bragin
43ac9dd900 [AUDIT]
halmp.dll
- Most functions are 2 lines
- And other funcs are simply UNIMPLEMENTED

svn path=/trunk/; revision=22186
2006-06-02 20:14:40 +00:00
Johannes Anderwald
404b530e5b return ERROR_INVALID_HANDLE when hKey is invalid
ReactOS passes now 88 of 89 advapi32_winetest registry tests

svn path=/trunk/; revision=22185
2006-06-02 19:02:21 +00:00
Ged Murphy
72af90afdf - remove all reliance on 'extern' data, using abstraction.
- store pointer to currently selected service in info struct so we don't have to keep calling it
- rewrite create.c making it more modular. Still has some missing features.
- lots of bugfixes and small improvements

svn path=/trunk/; revision=22184
2006-06-02 16:47:39 +00:00
Johannes Anderwald
01c01fafcd fix apps depending on INVALID_HANDLE_VALUE
bug report & patch by w3seek

svn path=/trunk/; revision=22179
2006-06-02 14:37:25 +00:00
Johannes Anderwald
449a2042e7 forgot header in last commit
bug report(1455) & patch by w3seek

svn path=/trunk/; revision=22178
2006-06-02 14:08:22 +00:00
Johannes Anderwald
42de812e46 always zero handle on return
ros now passes 87/89 advapi32_winetest registry tests
bug report & patch by w3seek

svn path=/trunk/; revision=22177
2006-06-02 14:05:38 +00:00
Hervé Poussineau
8410eccf06 By default, don't search a driver on removable media.
Do it only when choosing automatic install or selecting "Include removable media" in new hardware wizard

svn path=/trunk/; revision=22175
2006-06-02 13:43:02 +00:00
Hervé Poussineau
0e5ee8026d Implement CM_Add_IDA, CM_Add_IDW, CM_Add_ID_ExA
Add stub for CM_Add_ID_ExW

svn path=/trunk/; revision=22174
2006-06-02 11:17:37 +00:00
Johannes Anderwald
ee29d1d56c disable timer when user wants to set an alternative date -
enables setting time and fixes bug 1398
bug report by Coviti

svn path=/trunk/; revision=22173
2006-06-02 10:13:17 +00:00
Hervé Poussineau
7b66dbbc92 Extract some code from devinst.c to new files: devclass.c (device class functions), driver.c (Driver install/enumeration functions), interface.c (Interface install/enumeration functions)
devinst.c is now 123 Kb instead of 285 Kb.
No code change.

svn path=/trunk/; revision=22172
2006-06-02 09:06:05 +00:00
Hervé Poussineau
5049e0ee8f Change registry settings (related to revision 22169)
I'm not sure if this change is correct or if win32k has to be fixed.

svn path=/trunk/; revision=22170
2006-06-01 22:00:43 +00:00
Hervé Poussineau
9e908fc097 Store real parameters registry key in DEVICEMAP\VIDEO
Use it in win32k when loading and storing settings (SetupDevMode and IntChangeDisplaySettings)

svn path=/trunk/; revision=22169
2006-06-01 21:45:50 +00:00
Christoph von Wittich
e4c46fec65 -fix copy paste error (crypt32->cryptdll)
svn path=/trunk/; revision=22168
2006-06-01 21:38:07 +00:00
Christoph von Wittich
87a4f43e92 -added cryptdll to build
-added cryptdll.dll and usb.inf to bootcd

svn path=/trunk/; revision=22167
2006-06-01 21:36:42 +00:00
Ged Murphy
120aca25f3 First time import from wine-0.9.14
svn path=/trunk/; revision=22166
2006-06-01 21:30:02 +00:00
Magnus Olsen
a4014404b7 redirect __p__tzname to _tzname, I copy the idea from wine, for they are doing same
svn path=/trunk/; revision=22164
2006-06-01 21:26:10 +00:00
Magnus Olsen
9391845416 redirect __p__mbctype to _mbctype, I copy the idea from wine, for they are doing same
svn path=/trunk/; revision=22162
2006-06-01 21:21:16 +00:00
Ged Murphy
21d8349b92 more gcc 4.1 fixes
svn path=/trunk/; revision=22161
2006-06-01 21:18:22 +00:00
Ged Murphy
2c1f99e2c2 fix build for w3seek and his gcc 4.1 crew ;)
svn path=/trunk/; revision=22160
2006-06-01 21:12:55 +00:00
Magnus Olsen
f5276cb1a9 remove stub for _wenviron we already have it implement in crt.a
svn path=/trunk/; revision=22159
2006-06-01 21:05:53 +00:00
Hervé Poussineau
fdd161b84d Don't free the string, as it is not ours
svn path=/trunk/; revision=22158
2006-06-01 19:55:28 +00:00
Ged Murphy
e5a6d9a2cc - Temperarly add the screenshot app to the start menu
- Remove the existance checks for the games as they're part of ROS now.

svn path=/trunk/; revision=22157
2006-06-01 19:34:33 +00:00
Hervé Poussineau
4ac695afb3 Fix calculation of loss percentage
svn path=/trunk/; revision=22156
2006-06-01 18:27:08 +00:00
Magnus Olsen
b1fe06cdfe fix so fread return right value of bytes/chars it reads
make one more wine test pass in msvcrt file

svn path=/trunk/; revision=22155
2006-06-01 18:20:34 +00:00
Christoph von Wittich
20c6fb757f -don't update the time in the DTP control when the user is about to change it
svn path=/trunk/; revision=22154
2006-06-01 18:06:25 +00:00
Magnus Olsen
c82b31ff55 [AUDIT] this code is clear, if u look at djgpp fread u will see it base directly of it same struct and line out.
svn path=/trunk/; revision=22153
2006-06-01 17:42:00 +00:00
Ged Murphy
8e82082d2a add a really dodgy delete button. I'll replace all these buttons in due course.
svn path=/trunk/; revision=22152
2006-06-01 17:29:05 +00:00
Christoph von Wittich
99fea34218 -forgot to add world.bmp
svn path=/trunk/; revision=22151
2006-06-01 17:26:49 +00:00
Hervé Poussineau
4123274547 If the section name contained a dot, sometimes the right section to install was not found
svn path=/trunk/; revision=22150
2006-06-01 17:08:28 +00:00
Ged Murphy
68f041d222 hmm, tortoise is messing me about ;)
svn path=/trunk/; revision=22149
2006-06-01 16:47:11 +00:00
Ged Murphy
520bbfd043 - Start a complete overhaul of servman, using abstraction instead of the old messy way.
- Far to many changes to list, so I'm not even gonna even try ;)

svn path=/trunk/; revision=22148
2006-06-01 16:42:08 +00:00
Christoph von Wittich
130257e46c -forgot to check lpDrawItem->CtlID
svn path=/trunk/; revision=22147
2006-06-01 16:34:53 +00:00
Hervé Poussineau
bf90c28bb1 Amovible devices should be checked when doing automatic install
svn path=/trunk/; revision=22146
2006-06-01 16:25:15 +00:00
Christoph von Wittich
76aa2a4fa3 -added a worldmap picture (source: http://en.wikipedia.org/wiki/Image:Earth_satellite_plane.jpg)
svn path=/trunk/; revision=22145
2006-06-01 16:25:13 +00:00
Magnus Olsen
f1fe768fa8 Sorry I did wrong calc of the position of ungetc did not think of TCHAR size.
svn path=/trunk/; revision=22144
2006-06-01 09:38:11 +00:00
Magnus Olsen
fe3478c70d small rewrite by me, pass wine test and no bugs in ungetc accroing wine test of msvcrt.
svn path=/trunk/; revision=22143
2006-06-01 09:26:32 +00:00
Magnus Olsen
2ac0c98f88 [AUDIT] this code is clear base from djgpp with small modifcation, and bugs as hell. Bugfix will folllow in next commit
svn path=/trunk/; revision=22142
2006-06-01 09:23:00 +00:00
Ged Murphy
53d25231b3 fix possible memory leak
svn path=/trunk/; revision=22136
2006-05-31 22:39:51 +00:00
Christoph von Wittich
5db3f178ac -fixed bug 1513
-some changes to De.rc

svn path=/trunk/; revision=22129
2006-05-31 15:28:43 +00:00
Magnus Olsen
d16253dfa8 recommit french translatoins : patch from bug 1539 : the patch are provide by usurp
svn path=/trunk/; revision=22128
2006-05-31 15:18:02 +00:00
Johannes Anderwald
7325ddd1a4 add french translation
svn path=/trunk/; revision=22127
2006-05-31 15:04:01 +00:00
Hervé Poussineau
b22255488e Fix BSOD in IntPrepareDriver (bug 1321)
svn path=/trunk/; revision=22126
2006-05-31 14:26:56 +00:00
Christoph von Wittich
d91dbeb60b show Cancel button
svn path=/trunk/; revision=22125
2006-05-31 14:26:46 +00:00
Hervé Poussineau
c2f4c7bb97 Remove useless cast
svn path=/trunk/; revision=22124
2006-05-31 12:28:30 +00:00
Magnus Olsen
e6d8bd06e1 start implement WSHGetSockaddrType, it missing error code at return, and handling other struct and sockeradr_in.
Code was done by me and irc : Elrond (from TNG), Arty please check this, Other people test see if it works for u. 


svn path=/trunk/; revision=22123
2006-05-31 07:56:39 +00:00
Ged Murphy
169ddbd12e add screenshot app to bootcd
svn path=/trunk/; revision=22122
2006-05-30 21:12:31 +00:00
Ged Murphy
ec3eb0a18a add a temp screenshot app in case I don't get time to stick it in win32k before 0.3.0 FF.
svn path=/trunk/; revision=22121
2006-05-30 21:11:41 +00:00
Aleksey Bragin
5c0154378a - Unlock *.def file (it doesn't need to be audited)
- Patch by Andrey Korotaev: Fix wgl* function definitions

svn path=/trunk/; revision=22120
2006-05-30 21:01:24 +00:00
Hervé Poussineau
db04a303ee Fix indentation by replacing tabs by spaces. No code change
svn path=/trunk/; revision=22119
2006-05-30 19:40:52 +00:00
Hervé Poussineau
e7b716926f Fix installation from default directory (%SYSTEMROOT%\Inf).
Thanks WaxDragon for reporting.

svn path=/trunk/; revision=22118
2006-05-30 16:05:27 +00:00
Hervé Poussineau
862db2b603 Implement the Browse button, but it is not working well :(
svn path=/trunk/; revision=22117
2006-05-30 13:39:21 +00:00
Hervé Poussineau
c4c3ebf0ef Remember custom paths entered in wizard
svn path=/trunk/; revision=22116
2006-05-30 10:13:47 +00:00
James Tabor
4c8a553e26 Implement NtGdiGetCharABCWidths. Not sure if the math is right. Tested with Lazarus IDE. It is completely based on Filip Navara work on NtGdiGetCharWidth32.
svn path=/trunk/; revision=22115
2006-05-30 06:50:03 +00:00
Ged Murphy
5e2e227e4a change version text in line with new svn version
svn path=/trunk/; revision=22112
2006-05-29 16:20:45 +00:00
Hervé Poussineau
05875a2c6d - Implement SetupCopyOEMInfW
- Correctly sort drivers by rank and by date
- Fix memory corruption if %SYSTEMROOT% was longer than 128 chars

svn path=/trunk/; revision=22109
2006-05-29 13:32:51 +00:00
Hervé Poussineau
d599ad5c78 Fix typo ("SetupDiGetDeviceRegistryProperty" -> "SetupDiInstallDevice" in debug message)
svn path=/trunk/; revision=22108
2006-05-29 13:30:50 +00:00
Magnus Olsen
e1e331508a Hidden bug in our tcp/ip stack, at shutdown api the so can be NULL if that happen, ReactOS will bsod the tcp/ip stack.
Arty can u look if this changes is right if not revert it. This changes was tested in fireforx at http://www.mirc.com/get.html and try d/l mirc. This patch do not make firefox bsod, instead it genrate a long crash log at serial debug. 

svn path=/trunk/; revision=22106
2006-05-29 12:43:01 +00:00
Magnus Olsen
f18d9585c3 revers r22073 and r22075 bugfix for envinmert for it break firefox, not tested in trunk, I tested to revers this change in r22075
svn path=/trunk/; revision=22105
2006-05-29 11:28:55 +00:00
Hervé Poussineau
64664422f4 Do the normal install before custom install actions.
So, we should get the right .inf filename in SP_DRVINFO_DETAIL_DATA.InfFileName, as it is modified if the file is copied to %SYSTEMROOT%/Inf

svn path=/trunk/; revision=22104
2006-05-29 11:09:54 +00:00
Hervé Poussineau
9d5ecbef5d SP_DRVINFO_DETAIL_DATA_W.InfFileName must contain the full file name
Add SetupDiSelectDevice stub

svn path=/trunk/; revision=22103
2006-05-29 11:03:24 +00:00
Hervé Poussineau
427cba82bd Don't stop the search after the first driver found. Next ones may be better
svn path=/trunk/; revision=22102
2006-05-29 09:36:26 +00:00
Hervé Poussineau
e798908f7e Fix some whitespaces
Change swprintf by sprintfW

svn path=/trunk/; revision=22101
2006-05-29 08:55:08 +00:00
Alex Ionescu
a12050c789 - Object Manager Improvements (3 of 3):
* Implement Per-Processor Lookaside List based allocation and de-allocation of the Object Create Information (object attributes capture) and of the object name. I counted over 4000 allocations for only 30 seconds of runtime, so this change greatly reduces pool fragmentation and increases speed. (Implementation is similar to the IRP lookaside list implementation, but inlined for speed).
  * Fix some cases where we weren't freeing captured information properly. This patch should also decrease memory leaks/usage.
  * Comment/formatting fixes.

svn path=/trunk/; revision=22100
2006-05-29 03:32:43 +00:00
Alex Ionescu
453c3d0af0 - Object Manager Fixes (2 of 3):
* Remove superflous debug prints used a long time ago while debugging
  * Set the CreatorUniqueProcess 
  * Align code to 80 chars
  * Do a privilege check of OB_FLAG_PERMANENT is being used, and de-allocate the object if this failed.
  * Send the PreviousMode to ObpAllocateObject so that it can honor it and set the OB_FLAG_KERNEL_MODE flag.
  * Use OBJECT_TYPE accounting to increase TotalNumberOfObjects.
  * Fail ObCreateObject in low-memory situations instead of ignoring it.
  * Respect OBJECT_TYPE.TypeInfo.InvalidAttributes if an attempt is to create an object with invalid attributes is detected.
  * Respect PagedPoolCharge and NonPagedPoolCharge parameters and save them in the OBJECT_CREATE_INFORMATION strucutre.

svn path=/trunk/; revision=22099
2006-05-29 00:18:36 +00:00
Alex Ionescu
0817ba9198 - Object Manager Improvement Patch 1/3:
- Re-implement delayed object deletion by using an optimized Object Reaper based on OBJECT_HEADER->NextToFree. Thanks to Thomas for the algorithm.
  - Refactor object deletion into two operations: Removal and de-allocation (this is needed for failure during allocation, which we don't do yet).
  - BugFixes:
    * After freeing an object header structure, also clear the pointer so we don't attempt it again. 
    * Clear the handle database if there is one
    * Make sure the create info flag is set before deleting captured attributes.
    * Use the allocation pool tag when de-allocating.
    * Use OBJECT_TYPE accounting for tracking the numbef of objects.
    * Remove the object from it's typelist if it has creator information.
    * Call the security procedure to delete the security descriptor.

svn path=/trunk/; revision=22098
2006-05-29 00:05:07 +00:00
James Tabor
8a8feb3718 Fix build. Missing chg for GetOutlineTextMetrics.
svn path=/trunk/; revision=22097
2006-05-28 23:11:56 +00:00
James Tabor
1b601af92f Implement NtGdiGetOutlineTextMetrics and GetOutlineTextMetricsA/W.
GetOutlineTextMetricsA is from Wine. Tested with Mozilla 1.7.12.


svn path=/trunk/; revision=22096
2006-05-28 22:49:52 +00:00
Hervé Poussineau
57ae379676 Better handling of errors/special cases
svn path=/trunk/; revision=22095
2006-05-28 21:43:45 +00:00
Hervé Poussineau
10052376c0 Add newdev.h of the w32api package
svn path=/trunk/; revision=22094
2006-05-28 21:24:28 +00:00
Hervé Poussineau
0dd973573a Fix the build
svn path=/trunk/; revision=22093
2006-05-28 20:33:20 +00:00
Hervé Poussineau
f342328b5c - Display install page when installing the device, instead of search page
- Add "install failed" page

svn path=/trunk/; revision=22092
2006-05-28 20:21:43 +00:00
Hervé Poussineau
2a99309f16 Keep minimal amount of differences with Wine code
Remove useless files

svn path=/trunk/; revision=22091
2006-05-28 19:20:19 +00:00
Alex Ionescu
0dd1e9a2af - Add SecurityQoS and PreviousMode parameters to ObFindObject, so that these can be sent to the parse routine. Also don't send OBJECT_CREATE_INFORMATION to it, but each needed member separately. This avoids having to create a "Fake" structure in some calls which don't actually use capture the information.
- Also remove RemainingPath and stop exposing it to public APIs. Move all ObInsertObject/ObOpen,ReferenceByName hacks to ObFindObject, and add a small one there. We basically trade 4 hacks for 1.

svn path=/trunk/; revision=22090
2006-05-28 19:05:19 +00:00
Hervé Poussineau
19daffae13 Forward more functions to setupapi
svn path=/trunk/; revision=22089
2006-05-28 18:36:57 +00:00
Hervé Poussineau
808a1edb01 [AUDIT]
No code in cfgmgr32. All exported functions are redirected to setupapi

svn path=/trunk/; revision=22088
2006-05-28 18:36:34 +00:00
Hervé Poussineau
3b00b0a2fe Rewrite SetupDiGetActualSectionToInstallExW:
- Do less lookups in section names list
- Take care of possible ProductType and SuiteMask fields in section names 

svn path=/trunk/; revision=22087
2006-05-28 16:44:52 +00:00
Hervé Poussineau
ed2b9d396c Search driver files in the same directory as the .inf file
svn path=/trunk/; revision=22086
2006-05-28 12:35:20 +00:00
Magnus Olsen
1afe898112 copy number to numberf so people can bugfix it/rewrite it
svn path=/trunk/; revision=22085
2006-05-28 05:59:33 +00:00
Magnus Olsen
e73250fdc7 almost last commit for full support of %e %E %f %g %G, left todo is write the numberf function
svn path=/trunk/; revision=22084
2006-05-28 05:17:19 +00:00
Magnus Olsen
d62e9d48be starteted implement float into sprintf, snprintf and alot other printf api. this is more like a start how to implement it. This commit is more market for me. so I do not forget where string functions of *printf api (the main api functions) are. One more thing if u change on sprintf.c same change must be done in swprintf.c or changes into swprintf.c same changes must be done in swprintf.c, other wise the efect of bugfix or change will not be excutected in reactos, for u do not know if program pic the ansi or unicode version.
svn path=/trunk/; revision=22083
2006-05-28 04:58:27 +00:00
Magnus Olsen
b254c4649e making one more wine msvcrt printf test pass
now it is 62 fails instead of 63 fails

svn path=/trunk/; revision=22082
2006-05-28 01:32:32 +00:00
Magnus Olsen
6999a6bc5c fixing two hiden bug in reactos, null termante the string right at end, code tested in vs, but it seam no affact on wine test mscvrt printf test. What hell is the snprintf function call to ??
svn path=/trunk/; revision=22081
2006-05-28 00:51:16 +00:00
Aleksey Bragin
f07bc589f6 Fix an incorrect HalBeginSystemInterrupt() prototype
svn path=/trunk/; revision=22080
2006-05-27 15:38:37 +00:00
Magnus Olsen
d17fff2969 [AUDIT] this file is clean, and well document where it comes from, so no sign of trace was notice in this file
svn path=/trunk/; revision=22079
2006-05-27 15:32:22 +00:00
Ged Murphy
ae25dcdf0f Fix possible memory leak in ProbeAndCaptureUnicodeString
Patch from Thomas Weidenmueller

svn path=/trunk/; revision=22078
2006-05-27 15:06:51 +00:00
Magnus Olsen
dcc771fae1 patch from w3seek : <w3seek> btw here's a (temporary) fix for the missing buttons bug: because it's not entirely thread-safe. filip will take care of it (i think)
svn path=/trunk/; revision=22077
2006-05-27 14:15:04 +00:00
Hervé Poussineau
721ef792f3 Small fixes by w3seek
svn path=/trunk/; revision=22076
2006-05-27 14:04:08 +00:00
Magnus Olsen
ddeed65c6f sorry for breaking the build, I did put in wrong version I should have retested it
svn path=/trunk/; revision=22075
2006-05-27 13:05:24 +00:00
Hervé Poussineau
2708096c09 Fix search of driver on removable media
svn path=/trunk/; revision=22074
2006-05-27 13:03:04 +00:00
Magnus Olsen
979f267d03 Bugfix environ so it does not allown = in environ name not even as frist char
svn path=/trunk/; revision=22073
2006-05-27 13:00:39 +00:00
Magnus Olsen
ce582d62b8 [AUDIT] after looking through code no signs of reverse engineering were found.
svn path=/trunk/; revision=22072
2006-05-27 12:59:10 +00:00
Magnus Olsen
8114bf89bb [AUDIT] after looking through code no signs of reverse engineering were found.
svn path=/trunk/; revision=22071
2006-05-27 12:20:10 +00:00
Magnus Olsen
16e5818815 replacing _swab with wine cvs 2006-05-11 version, this will take care of our problem with overlapped memory problem with swab, and this make also two more wine test pass in wine msvcrt test. 100% pass okay now with wine msvcrt string test.
svn path=/trunk/; revision=22070
2006-05-27 11:37:44 +00:00
Magnus Olsen
a904d9f723 [AUDIT] after looking through code no signs of reverse engineering were found. This swap can not handling overlapped of memory, replace of this will follow in next commit.
svn path=/trunk/; revision=22069
2006-05-27 10:55:35 +00:00
Ged Murphy
2d0587fef2 - fixes the definitions of PostQueuedCompletionStatus() and RaiseException()
- adds the definitions of AddAccessAllowedObjectAce(),
AddAccessDeniedObjectAce() and AddAuditAccessObjectAce() to w32api
- prototypes in line with previous r22066 mods
- fixes bug 1473

svn path=/trunk/; revision=22068
2006-05-27 09:18:10 +00:00
Ged Murphy
5b5ec1b029 [AUDIT]
kernel32 - except.c, iocompl.c
most of the code is from Wine. 
All non wine specific functions are documented on MSDN

svn path=/trunk/; revision=22067
2006-05-27 09:15:33 +00:00
Ged Murphy
02d5b02191 add some function definitions I've had floating about in my headers for a while.
svn path=/trunk/; revision=22066
2006-05-27 09:01:39 +00:00
Ged Murphy
21371fa12d [AUDIT]
cat isn't a windows tool

svn path=/trunk/; revision=22065
2006-05-27 08:33:58 +00:00
Magnus Olsen
6734ad1c89 [AUDIT] after looking through code no signs of reverse engineering were found.
svn path=/trunk/; revision=22064
2006-05-26 22:48:25 +00:00
Magnus Olsen
4ab617ebb9 replace djgpp hell bugs fcvtbuf with project http://www.jbox.dk/sanos/source/lib/fcvt.c.html with small modification's to match ReactOS arch. Floating point to string conversion routines Copyright (C) 2002 Michael Ringgaard. All rights reserved.
Make wine test for fcvt shut up we are failing 64 of wine test in msvrt printf, but we pass all fcvt test. before we did fail 75 test in wine test of msvrt printf test. Before we did fail almost all test case for fcvt in wine test 

svn path=/trunk/; revision=22062
2006-05-26 19:23:34 +00:00
Magnus Olsen
1948e81384 fixing linux build
svn path=/trunk/; revision=22061
2006-05-26 19:10:33 +00:00
Magnus Olsen
2bc0dcfa46 [AUDIT] clean imported/ported from DJGPP, djgpp fcvt is bugs as hell, most case does not working, bug will come later
svn path=/trunk/; revision=22060
2006-05-26 18:51:58 +00:00
Steven Edwards
ff2ef467c0 sync lz32 winetest to 0.9.14
svn path=/trunk/; revision=22059
2006-05-26 18:14:28 +00:00
Steven Edwards
7ed8d3e325 added my own icmp test...this cannot possibly fail
svn path=/trunk/; revision=22058
2006-05-26 18:07:12 +00:00
Ged Murphy
672c492a1d [AUDIT]
sndvol32. 
declared clean by Thomas Weidenmueller
"It's not even functional" said Thomas. ;)

svn path=/trunk/; revision=22057
2006-05-26 18:02:20 +00:00
Steven Edwards
93ee7df2aa sync ntdll tests to 0.9.14
svn path=/trunk/; revision=22056
2006-05-26 17:54:55 +00:00
Steven Edwards
6dcf87a3d9 remove another dud, sync psapi test to 0.9.14
svn path=/trunk/; revision=22055
2006-05-26 17:35:11 +00:00
Steven Edwards
0cdda064ca sync the setupapi test to wine 0.9.14 and remove some files commited to the wrong folder
svn path=/trunk/; revision=22054
2006-05-26 17:30:43 +00:00
Steven Edwards
a8373ada71 update the winetest framework to 0.9.14 and sync some tests. Untested on ReactOS but at least it builds. More tests will come later. Fsck subversion
svn path=/trunk/; revision=22053
2006-05-26 16:20:53 +00:00
Andrew Munger
6e538fae59 Bump trunk to 0.4.0, no turning back now.
svn path=/trunk/; revision=22052
2006-05-26 15:14:13 +00:00
Hervé Poussineau
57404cf7cf Allow the user to specify a custom path for the driver when installing a new device
svn path=/trunk/; revision=22051
2006-05-26 10:16:27 +00:00
Hervé Poussineau
a10d9d8b2b Of course, I forgot to commit the new file in revision 22049...
svn path=/trunk/; revision=22050
2006-05-25 23:34:41 +00:00
Hervé Poussineau
dd411b3aa0 - Move new hardware wizard code to wizard.c
- Disable non working buttons
- Improve navigation between pages
- Prepare room for an install page

svn path=/trunk/; revision=22049
2006-05-25 22:55:13 +00:00
Andrew Munger
8dd3dc564a Fix green, it just needed it's ObOpenObjectByName params shuffled. Hope I did it correctly.
svn path=/trunk/; revision=22048
2006-05-25 21:39:49 +00:00
Alex Ionescu
340a5ed71a - Get rid of the intriguing idea that exported/public APIs should have prototypes with inversed parameters (fix ObOpenObjectByName and all its callers).
- Isolate ObFindObject into CmFindObject for the registry routines. Because of their well-known abuse of Ob, it's better to give them their internal routine so that when/if Ob ever gets fixed to parse properly, it won't force a re-write of Cm's object routines.

svn path=/trunk/; revision=22047
2006-05-25 20:50:58 +00:00
Steven Edwards
facb8f26f0 add directories for the comming wine tests
svn path=/trunk/; revision=22046
2006-05-25 20:24:16 +00:00
Alex Ionescu
c97cf6645c - Remove ROS-internal object macros and use the public ones in obtypes.h instead.
svn path=/trunk/; revision=22045
2006-05-25 20:14:09 +00:00
Alex Ionescu
3a9bdc8cf4 - Convert all Win32k Object callback functions to the correct NT prototypes.
- Get rid of ROS-internal WIN32_CALLOUT_DATA and use the real WIN32_CALLOUTS_FPNS type.
- Get rid of the callout.h hack.

svn path=/trunk/; revision=22044
2006-05-25 20:03:13 +00:00
Aleksey Bragin
b0f84fadf3 [AUDIT]
kernel32.dll
- Remove locks from Wine code, and from simple stub or forward type of functions
- Add file headers to all files (except shared completely with Wine)
- Mark a pair of functions as shared with Wine (to be changed later when adding correct function headers)

svn path=/trunk/; revision=22043
2006-05-25 19:50:19 +00:00
Steven Edwards
8943cd0ea8 started syncing to Wine-0.9.14
svn path=/trunk/; revision=22042
2006-05-25 19:43:52 +00:00
Alex Ionescu
cf356e801d - Rewrite Desktop/WindowsStation parsing to follow the NT Object Model, with some minor hacks to respect ROS's current parsing semantics.
- Thanks to this, the long-lasting ExpDesktopCreate hack is gone, and so is OB_ROS_FIND_METHOD and OB_ROS_CREATE_METHOD in win32k. Next patch can fully remove WIN32_CALLOUT_DATA and use the NT type instead.
- Add official OBJECT_ macros in obtypes.h

svn path=/trunk/; revision=22041
2006-05-25 19:30:09 +00:00
Johannes Anderwald
befa307429 italian explorer translation patch by folle_invasato (bug 1292)
svn path=/trunk/; revision=22040
2006-05-25 16:59:15 +00:00
Magnus Olsen
2d39a0cf6f revert this chnage for filip told me it is complete wrong rtl should never link to mscvrt
svn path=/trunk/; revision=22039
2006-05-25 16:34:02 +00:00
Magnus Olsen
026a7562cb Adding rtl to msvcrt.rbuild for it is only one that contain the *printf stuff.
svn path=/trunk/; revision=22038
2006-05-25 16:28:44 +00:00
Alex Ionescu
93db306b0e - Fix ObReferenceObjectByName and ObOpenObjectByName not to blissfully ignore the AccessState and ParseContext parameters.
- Change ObFindObject's prototype to be able to accomodate these two parameters so that they can be sent to the parse routine.

svn path=/trunk/; revision=22037
2006-05-25 04:17:29 +00:00
Alex Ionescu
1bb8f22330 - Get rid of OB_ROS_PARSE_METHOD and use OB_PARSE_METHOD instead. Hacked the current parse methods to keep using a PWSTR, however they should be modified to use the UNICODE_STRING instead...
svn path=/trunk/; revision=22036
2006-05-25 01:18:31 +00:00
Magnus Olsen
c5b6c41bf9 delete empty folder
svn path=/trunk/; revision=22035
2006-05-25 00:06:36 +00:00
Magnus Olsen
fa4b36b46f Did foregt the translate file we try one more time for bug : 1279 : patch from : user temarez : adding Ukrainian translations
svn path=/trunk/; revision=22034
2006-05-24 23:44:44 +00:00
Magnus Olsen
90d1f854c5 Swedish translation of getfirefox by Andreas Bjerkeholt
svn path=/trunk/; revision=22033
2006-05-24 23:43:26 +00:00
Magnus Olsen
32474f1622 bug : 1279 : patch from : user temarez : adding Ukrainian translations
svn path=/trunk/; revision=22032
2006-05-24 23:35:52 +00:00
Magnus Olsen
c693223778 bug : 1279 : patch from : user temarez : updating Ukrainian translations
svn path=/trunk/; revision=22031
2006-05-24 23:33:36 +00:00
Magnus Olsen
56046e1541 bug : 1279 : patch from : user temarez : adding Ukrainian translations to taskmgr
svn path=/trunk/; revision=22030
2006-05-24 23:25:40 +00:00
Alex Ionescu
766bb1c7a8 - Cleanup profiling and debugging code, add function comment headers and comment the functions in obdir.c
- Remove directory object parsing. Directory objects don't have parse routines. Instead, inline the lookup in ObFindObject (this hasn't been optimized yet, a lot of the code is now setting a = b, c = a, c = b.

svn path=/trunk/; revision=22029
2006-05-24 23:20:50 +00:00
Alex Ionescu
ab775b4798 Forgot to commit this change
svn path=/trunk/; revision=22028
2006-05-24 22:56:46 +00:00
Magnus Olsen
cdacf2d2bd [AUDIT] clean seam be imported/ported/base/inspered from DJGPP source code for everything look simulare to djgpp
svn path=/trunk/; revision=22027
2006-05-24 22:34:14 +00:00
Aleksey Bragin
b2f8544935 [AUDIT]
kernel32.dll
- Unlock files shared with Wine
- Unlock stubs
- Add programmers name into file header

svn path=/trunk/; revision=22026
2006-05-24 22:17:05 +00:00
James Tabor
945ca8d68e svn propset svn:eol-style native foo.py
svn path=/trunk/; revision=22025
2006-05-24 22:07:11 +00:00
Alex Ionescu
901bb3dc40 - Reorganize most of /ob so that functions inside each module actually follow some sort of cohesive model instead of complete randomness.
svn path=/trunk/; revision=22024
2006-05-24 21:44:59 +00:00
Magnus Olsen
5c92d07c04 [AUDIT] clean from wine
svn path=/trunk/; revision=22023
2006-05-24 20:53:10 +00:00
Magnus Olsen
5434555fb4 [AUDIT] clean seam be imported/ported from DJGPP for everything look simulare to djgpp
svn path=/trunk/; revision=22022
2006-05-24 20:50:55 +00:00
Magnus Olsen
70f6440451 clean up the getch.c remove unsused code.
svn path=/trunk/; revision=22021
2006-05-24 20:44:37 +00:00
Magnus Olsen
f9e014a9a7 [AUDIT] after looking through code no signs of reverse engineering were found. some of these api contain also bugs and they are document in the files.
svn path=/trunk/; revision=22020
2006-05-24 20:43:05 +00:00
Magnus Olsen
a63feb98f1 [AUDIT] clean imported/ported from DJGPP
svn path=/trunk/; revision=22019
2006-05-24 20:39:56 +00:00
Alex Ionescu
c9ae7e2e5f [AUDIT] namespc.c: The namespace functions are publically document and wrap around a ROS-internal ObFindObject function which is very different from the way NT handles parsing. The capture of attribute information was based off a public structure, and the function used does not seem to exist in NT (based on a google search). Object Manager Initialization is internal to ROS and performs generic/trivial intialization tasks, which seem to match the description present in Windows Internals as well as Windows NT File System Internals. Finally, Object Type creation is a ROS-internal function based off documentation found in Gl00my's object manager article as well as local debugging done with WinDBG which helped define the purpose of DefaultObject.
svn path=/trunk/; revision=22018
2006-05-24 20:29:02 +00:00
Alex Ionescu
c9a14c3a3b [AUDIT] security.c: All these functions are simply wrappers around the SecurityProcedure callback, which actually does all the work (and is located in /se). Their implementation is trivial and could not have been done another way (it may likely differ from the 100% NT implementation (which I am not aware of), but the current implementation seems obvious to me and I don't see anything missing.
svn path=/trunk/; revision=22017
2006-05-24 20:16:09 +00:00
Alex Ionescu
68121865ba - Wipe out PROS_OBJECT_HEADER and use OBJECT_HEADER since we are now compatible.
svn path=/trunk/; revision=22016
2006-05-24 20:13:47 +00:00
Alex Ionescu
3ccc97c6c4 - Rewrote the Object Directory implementation to follow the NT Structures in the NDK. This got rid of the last remaining OBJECT_HEADER difference and switched over to OBJECT_DIRECTORY.
- The low-level implementation is based on information from "Undocumented Windows 2000 Internals: A Programmer's Cookbook", with some modifications done by myself to match the updated 2003 structures. This implementation was hackishly stuck into our messed up high-level object lookup implementation, which now has 4 more band-aids. Still needs a lot of work done to the upper echelons of object lookup, but at least this gets rid of ROS-internal stuff.

svn path=/trunk/; revision=22015
2006-05-24 20:06:13 +00:00
Magnus Olsen
238be0b59c Do not create crash/bsod log when u logoff or shutdown of ReactOS.
svn path=/trunk/; revision=22014
2006-05-24 19:34:53 +00:00
Magnus Olsen
fc40c38034 sorry forget cleanup after me ;)
svn path=/trunk/; revision=22013
2006-05-24 19:03:01 +00:00
Magnus Olsen
68f59759a3 import cprintf from wine cvs 2006-05-23 as bug 1529 suggested, I was looking for this bug before it was reported.
it make most of msvcrt string test work, only one fail left to fix.

svn path=/trunk/; revision=22012
2006-05-24 18:56:29 +00:00
Magnus Olsen
983091eda8 [AUDIT] clean from DJGPP
svn path=/trunk/; revision=22011
2006-05-24 18:48:00 +00:00
Magnus Olsen
050efa1da2 Fixing two fail from wine gdi32 test, When HDC is NULL to NtGdiCreateDIBitmap we need create a hdc and delete the hdc when we are done.
svn path=/trunk/; revision=22010
2006-05-24 16:54:51 +00:00
Magnus Olsen
8954d82145 revert my change from bootvid.c now, after w3seek patch it works again for bootcd
svn path=/trunk/; revision=22009
2006-05-24 15:07:28 +00:00
Magnus Olsen
80770b053a Patch from w3seek: patch to fix a couple of argument probing bugs in NtQuerySymbolicLinkObject and NtCreateSymbolicLinkObject:
svn path=/trunk/; revision=22008
2006-05-24 14:41:53 +00:00
Johannes Anderwald
fbb73a8f5e fix a few typos and display issuses in german resource file
patch by ThePhysicist (bug 1518) and a few additional fixes by me

svn path=/trunk/; revision=22007
2006-05-24 12:17:49 +00:00
Magnus Olsen
bf04d0ad97 Fix the regress of livecd, it works now again, some how the palette color are being bigger that 256 color and then the bootvid.sys crash
svn path=/trunk/; revision=22006
2006-05-24 06:35:59 +00:00
Alex Ionescu
7619400890 [AUDIT] ntobj.c : The Temporary/Permanent object routines are 5-line generic wrappers which call an internal kernel function, which in itself is only a wrapper to set an internal, documented flag. The implementation is therefore trivial. NtQueryObject is only 10% complete.
wait.c: These are simple wrapper routines around the KeWaitForXxx functions which reference the objects and get their pointers, just like any other Nt* function does. Some parts are non-trivial, such as: various failures: these can be tested with the wait regression test however; The usage of THREAD_WAIT_OBJECTS is documented in the DDK; The failure for WaitAll with duplicated objects is documented on MSDN; The check for SYNCHRONIZE object is documented on MSDN. 

svn path=/trunk/; revision=22005
2006-05-24 04:43:50 +00:00
Alex Ionescu
0b30ce7700 [AUDIT] symlink.c : The symbolic link implementation was generic, used different structures from NT (which meant some large NT features of symlinks were unimplemented) and had several bugs which gave different results from NT, so it was most certainly cleanly developed. The most recent update added the NT structure (which is documented) but did not add any functionality, except for fixing bugs which were revealed through a test app called SymlLinkTest.
dirobj.c: The directory object implementation is also generic and currently uses different structures from NT. Object lookup/parsing is entirely different and has nothing in common with NT. The actual Nt* APIs which expose the interface are ultra-generic and trivial.

svn path=/trunk/; revision=22004
2006-05-24 04:33:18 +00:00
Alex Ionescu
5a2f6e7faa - Move all object directory stuff in dirobj.c and implement a simple profiler to measure the time spent in those functions until the desktop appears. Enable with #define OBP_PROFILE.
svn path=/trunk/; revision=22003
2006-05-24 04:28:57 +00:00
Alex Ionescu
2143c80c39 This should fix the build.
svn path=/trunk/; revision=22002
2006-05-24 04:19:04 +00:00
Alex Ionescu
ee3fddd2d7 - Thomas Weidenmueller (w3seek@reactos.org)
- Use SEH in Atom functions
  - Only use result length if the caller gave one, in NtQuerySecurityObject.

svn path=/trunk/; revision=22001
2006-05-24 02:48:51 +00:00
Alex Ionescu
8a80070849 - Fix Symbolic Link implementation:
- Use OBJECT_SYMBOLIC_LINK structure as used by Windows NT (and added the structure to the NDK)
  - Changed code to use the new names in the structure
  - Only free the symlink's name if it has one, to avoid a bugcheck.
  - Optimize parsing: if the new name is actually shorter then the target name, then don't allocate from pool, but re-use the buffer. This improves symlink parsing speed. Also fix a bug which made it depend on the incorrect implementation of NtCreateSymbolicLinkObject
  - Re-align the link target maximum length in NtCreateSymbolicLinkObject if it's odd, and fail if the length is odd, smaller then the maximum, or if the maximum is zero.
  - Originally allocate the symlink name in Paged Pool.
  - Initialize new members of the structure.
  - Fail in no-memory case, instead of continuing.
  - Properly probe the LinkTarget in NtQuerySymbolicLinkObject.
  - Properly handle which length is chosen for the copy and for the return in NtQuerySymbolicObject.
  - Lock the symbolic link object type while querying it. Eventually many more parts of Ob need to do this kind of locking.
  - SymLinkTest now only gives 2 failures.
- Fix some NDK bugs

svn path=/trunk/; revision=22000
2006-05-24 02:45:06 +00:00
Alex Ionescu
4b6154cfbf - SymTest: The Symbolic Link kernel implementation tester. Tests for really wacky symlink API properties. 8 failures on ROS.
svn path=/trunk/; revision=21999
2006-05-24 02:01:32 +00:00
Alex Ionescu
a98a1b99c4 - Cleanup the formatting, code and function headers of most of the Object Manager interfaces.
svn path=/trunk/; revision=21998
2006-05-23 21:42:28 +00:00
Aleksey Bragin
632f9f99ec - Fix build (forgot to add file) to msvcrt test
svn path=/trunk/; revision=21997
2006-05-23 21:32:04 +00:00
Art Yerkes
05fd384ab4 Recompute broadcast address upon ip change (spotted by elrond)
svn path=/trunk/; revision=21996
2006-05-23 21:24:01 +00:00
Magnus Olsen
b3edee282e Fixing strechblt dib16 and dib32 can be compile with -O2 (gcc) reporeted by jimtalor, it did not work on real hardware with -O2 when it was run with winqauke with some setting see bug 1520
svn path=/trunk/; revision=21995
2006-05-23 21:18:08 +00:00
Aleksey Bragin
b6a61aafb6 Update msvcrt_winetest to Wine-23052006
svn path=/trunk/; revision=21994
2006-05-23 20:16:57 +00:00
Aleksey Bragin
69713a9bc1 Update ntdll_winetest to Wine-23052006
svn path=/trunk/; revision=21992
2006-05-23 20:05:14 +00:00
Aleksey Bragin
f2725683f8 - Update user32_winetest to Wine-23052006. Update includes changes in the following subtests: edit, winstation. Evereything else is just compilation
svn path=/trunk/; revision=21991
2006-05-23 19:55:45 +00:00
Johannes Anderwald
9eda943d76 prevent ncpa from crashing when no component is selected. patch & bug report by ThePhysicist (bug 1519)
svn path=/trunk/; revision=21990
2006-05-23 19:27:27 +00:00
Aleksey Bragin
da398bc3c0 - Thomas Weidenmuller: Fix calculating the string offset.
- Fixes bug 1475: Taskmanager shows mumbojumbo in the process name column

svn path=/trunk/; revision=21989
2006-05-23 16:52:51 +00:00
Magnus Olsen
de8db05f3a [AUDIT] after looking through code no signs of reverse engineering were found. It look as the Arthur was inspired of DJGPP ansi functions. for it is alot simulare
svn path=/trunk/; revision=21987
2006-05-23 04:53:31 +00:00
James Tabor
eb5473a846 Add TT_PRIM_CSPLINE, from wine.
svn path=/trunk/; revision=21986
2006-05-23 02:14:46 +00:00
Aleksey Bragin
13df4844a7 - Update text-outputting routines in user32.dll to Wine's trunk (22052006). May fix some layout and text-placement issues.
- "user32_winetest.exe text" gives only 1 failure now
- Silence debug messages in win32k.sys

svn path=/trunk/; revision=21985
2006-05-22 22:05:40 +00:00
Johannes Anderwald
5d2d31ac0c increase mouse thread priority - patch by w3seek
should fix 1427

svn path=/trunk/; revision=21984
2006-05-22 21:57:38 +00:00
Johannes Anderwald
caac5ed1fc french translation by Usurp from bug 1492 :-)
svn path=/trunk/; revision=21983
2006-05-22 21:40:29 +00:00
Johannes Anderwald
60f50769ff french translation by Usurp from bug 1416
svn path=/trunk/; revision=21982
2006-05-22 21:33:22 +00:00
Aleksey Bragin
96f2c584d0 - Update TEXT_TabbedTextOut from Wine's trunk. Reduces number of failures in "user32_winetest.exe text" from 64 to 4.
svn path=/trunk/; revision=21981
2006-05-22 20:12:29 +00:00
Aleksey Bragin
612e2ff4df - Implement GetTabbedTextExtentA(), based on implementation from Wine (trunk). Reduces number of failures in "user32_winetest.exe text" from 84 to 64.
svn path=/trunk/; revision=21978
2006-05-22 19:07:59 +00:00
Aleksey Bragin
d778de3578 - Fix compiling of win32k without compilation units
svn path=/trunk/; revision=21977
2006-05-22 14:46:31 +00:00
Magnus Olsen
a28ea653f5 replace follow _wtol, _wtoi, _i64tow, _ui64tow, _ltow, _ultow, _ui64toa, _itow, _ltow, ultow with wine from wine cvs 2006-05-21
for we did fail on wine test on all these. In windows 2000 wine test ntdll string did not fail. 

svn path=/trunk/; revision=21976
2006-05-21 22:41:35 +00:00
Johannes Anderwald
d4aaeed1ff dont allow '=' in the environmental name in the set command
svn path=/trunk/; revision=21975
2006-05-21 21:31:20 +00:00
Magnus Olsen
06847e4576 [AUDIT] clean from DJGPP
svn path=/trunk/; revision=21974
2006-05-21 20:49:53 +00:00
Magnus Olsen
f340ab0a45 Fixing a i64ltoa bug, replacing both version with wine, copy the code from wine cvs 2005-05-21, bug report by wine test
svn path=/trunk/; revision=21973
2006-05-21 20:26:51 +00:00
Aleksey Bragin
c94db29865 - Fix GDIOBJ_* prototypes so win32k compiles with GDI_DEBUG compile option
svn path=/trunk/; revision=21972
2006-05-21 20:22:54 +00:00
Johannes Anderwald
e68cea0212 msvc compiling fix
svn path=/trunk/; revision=21971
2006-05-21 20:20:07 +00:00
Magnus Olsen
704b3a0362 [AUDIT] clean from DJGPP
svn path=/trunk/; revision=21970
2006-05-21 20:15:15 +00:00
Magnus Olsen
231155791c [AUDIT] clean this file are clean after I look at them
svn path=/trunk/; revision=21969
2006-05-21 20:11:27 +00:00
Eric Kohl
c7c5cd045d Add FSRTL_COMMON_FCB_HEADER to the beginning of the FCB.
svn path=/trunk/; revision=21968
2006-05-21 19:38:35 +00:00
Magnus Olsen
eebf35125d Fixing a ultoa bug, replacing both version with wine, copy the code from wine 0.9.0; I did add a NULL check for the string so it can not bsod. wine ntdll string only report one error, left to fix, I run wine test on windows 2000 and reactos to compare the result. Fireball report wine_ntdll_test string crach on windows xp, but it does not crash in windows 2000.
svn path=/trunk/; revision=21967
2006-05-21 18:54:21 +00:00
Magnus Olsen
80022e3b3d [AUDIT] clean from DJGPP
svn path=/trunk/; revision=21965
2006-05-21 15:41:50 +00:00
Magnus Olsen
c79c53d3b3 reporting djgpp fgets to fgetws, with wine test the old version did fail on reading string, it did to far.
now we do not have a any bug in fgetws, acoding wine test, I ran the test in win2k and reactos to be 100% sure it was not wine test fualt.

svn path=/trunk/; revision=21964
2006-05-21 13:38:45 +00:00
Magnus Olsen
2ef8f0fea0 [AUDIT] clean it is base on DJGPP fgets
svn path=/trunk/; revision=21963
2006-05-21 13:31:38 +00:00
Eric Kohl
99e8a7e6cb The MSFS_PIPE struct is actually an FCB (File Control Block). Rename it accordingly and store pointers to it in FileObject->FsContext.
svn path=/trunk/; revision=21962
2006-05-21 13:19:10 +00:00
Magnus Olsen
b3460406ae [AUDIT] after looking through code no signs of reverse engineering were found. Only code exists is to dllmain api rest is warper to crt.a
svn path=/trunk/; revision=21961
2006-05-21 11:49:34 +00:00
Magnus Olsen
0e3e95794f patch from w3seek : optimize FindWindowEx and fix passing a NULL window class
svn path=/trunk/; revision=21960
2006-05-21 09:21:38 +00:00
Magnus Olsen
2d54ed6453 revert r21958
svn path=/trunk/; revision=21959
2006-05-21 08:41:16 +00:00
Magnus Olsen
6a818caf88 patch from w3seek : Another fix for NtUserFindWindowEx
svn path=/trunk/; revision=21958
2006-05-21 08:39:42 +00:00
Magnus Olsen
7ece217a3e patch from w3seek : Another fix for NtUserFindWindowEx
svn path=/trunk/; revision=21957
2006-05-21 06:17:25 +00:00
Magnus Olsen
3e649bb0dc Bug 1507 patch from w3seek : This patch fixes more issues with NtUserFindWindowEx. (one example of bugs have been fixed with this patch is the tray icon)
svn path=/trunk/; revision=21956
2006-05-20 22:09:42 +00:00
Aleksey Bragin
6e418a0fd9 - Slightly update heap-related routines to wine's routines. Doesn't fix regression tests really, but just in case.
svn path=/trunk/; revision=21955
2006-05-20 20:42:26 +00:00
Aleksey Bragin
0159a46c3c [AUDIT]
- Based on Wine -> clean

svn path=/trunk/; revision=21954
2006-05-20 20:40:16 +00:00
Aleksey Bragin
001c217f07 - Update kernel32_winetest to the Wine's CVS head
svn path=/trunk/; revision=21953
2006-05-20 18:29:16 +00:00
Aleksey Bragin
591a910611 - Add programmers list for this file
- Replace silent failures with proper STUB

svn path=/trunk/; revision=21952
2006-05-20 17:30:42 +00:00
Aleksey Bragin
9c87128331 [AUDIT]
kernel32.dll

- Unlock files shared with Wine
- Unlock really obvious implementations
- Unlock files which are mostly stubs
- Fix programmer's name in one file

svn path=/trunk/; revision=21951
2006-05-20 17:21:53 +00:00
Aleksey Bragin
d7f687486e - Update ActiveContext functions in kernel32.dll, implementing them as "smart stubs". Implementation taken from Wine's kernel32 (helps Adobe Photoshop 7.0 according to Wine)
svn path=/trunk/; revision=21949
2006-05-20 14:31:38 +00:00
Aleksey Bragin
75b9927111 [AUDIT]
kernel32.dll

- No reason for stubs to be locked
- actctx.c is nothing more than A->W wrappers, thus clean too

svn path=/trunk/; revision=21948
2006-05-20 14:29:21 +00:00
Aleksey Bragin
2c24488614 [AUDIT]
subsystems
- Unlock headers, non-source code files, art (unique to reactos)
- Unlock one-function file (pretty obvious) and add a missing programmer's name to it
- Unlock files containing stubs

svn path=/trunk/; revision=21947
2006-05-20 10:49:56 +00:00
Aleksey Bragin
ac09ff8aba [AUDIT]
- Unlock source code files containing only stubs
- Add missing programmers name to the file headers
- SVN properties maintenance

svn path=/trunk/; revision=21946
2006-05-20 10:39:53 +00:00
Maarten Bosma
6012daa521 Only stubs
svn path=/trunk/; revision=21945
2006-05-20 08:59:59 +00:00
Maarten Bosma
bcd4428cb5 [AUDIT]
Does just contain one stub.

svn path=/trunk/; revision=21944
2006-05-20 08:50:42 +00:00
Magnus Olsen
7017eaae95 patch from w3seek make the kdbg build again
svn path=/trunk/; revision=21943
2006-05-19 12:31:19 +00:00
Alex Ionescu
907b271b84 - Use the proper HANDLE_TABLE and HANDLE_TABLE_ENTRY structures.
svn path=/trunk/; revision=21942
2006-05-19 00:32:50 +00:00
Magnus Olsen
13cc9dd150 forget this file
svn path=/trunk/; revision=21941
2006-05-19 00:14:05 +00:00
Magnus Olsen
aa195e970d fix the build after me
svn path=/trunk/; revision=21940
2006-05-19 00:13:28 +00:00
Magnus Olsen
83940cb028 [AUDIT] The code is from Sun that is free to use. checked in djgpp, djgpp contain same code.
svn path=/trunk/; revision=21939
2006-05-19 00:12:11 +00:00
Magnus Olsen
95b3109a94 did delete wrong file sorry
svn path=/trunk/; revision=21938
2006-05-18 23:53:42 +00:00
Magnus Olsen
0dc484382c Fix the calc bug, modf is compelete wrong, replace it with DJGPP C version of modf with small changes from me. so it compile in ReactOS,
Follow bugs did I notice in our modf 
1. bug did not clear the st reg before it was use
2. bug did not load the reg right
3. bug did not handler all case 



svn path=/trunk/; revision=21937
2006-05-18 23:42:50 +00:00
Magnus Olsen
c28f1204ff [AUDIT] after looking through code no signs of reverse engineering were found.
svn path=/trunk/; revision=21936
2006-05-18 23:03:27 +00:00
Alex Ionescu
19e2ef808c - Get rid of ROS_EPROCESS and all the ugly type-casting that was being done, now that the last two hacks make us able to compatibly use EPROCESS.
svn path=/trunk/; revision=21935
2006-05-18 20:32:17 +00:00
Alex Ionescu
7b3c313c1c - Use EPROCESS 's AddressCreationLock instead of the MADDRESS_SPACE Lock.
- Overlay MADDRES_SPACE over MM_AVL_NODE. Even though our structures are currently incompatible, they represent the same thing (The EPROCESS's Address space).

svn path=/trunk/; revision=21934
2006-05-18 20:10:44 +00:00
Alex Ionescu
93a0bb6787 - Use the Spare0 array, present in EPROCESS instead of ReactOS-specific members for Process Locking (temporary fix until pushlocks are used).
svn path=/trunk/; revision=21933
2006-05-18 18:55:38 +00:00
Aleksey Bragin
bf6dcf5f85 [AUDIT]
ntoskrnl/ex/error.c

- Alex Ionescu states the implementations are clean: I just re-orgznied the *harderror functions. The SEH filter is a trivial/well-known return of a single value, and __purecall is a stub.

svn path=/trunk/; revision=21932
2006-05-18 12:25:05 +00:00
Aleksey Bragin
659e7c97df [AUDIT]
ntoskrnl/dbgk
(according to functions_list.txt in audited branch comments by Alex Ionescu, and comments by me)
- debug.c: Clean/trivial implementation based on the object's structure. I merely create it and then initailize all its members. Other functions are stubs
- dbgkutil.c: Code is #if0'ed, and doesn't belong to Alex Ionescu. Author is unknown.
- Unified / prettified formatting, STDCALL -> NTAPI

svn path=/trunk/; revision=21931
2006-05-18 12:16:53 +00:00
Aleksey Bragin
8a2eb6433b [AUDIT]
ntoskrnl/ex
(according to functions_list.txt in audited branch comments by Alex Ionescu, and uuid.c comments by me)
- dbgctrl.c: Modified the function slightly for compatibility with some keys, still has nothing to do with Windows'
- lookas.c: File is clean. I merely rewrote existing versions based on a GPLed IBM driver I found on google, OSR documentation and some DDK sample code. The implementation is trivial and only calls caller-defined functions which are the ones doing the work.
- uuid.c: Added programmers, unified formatting, STDCALL->NTAPI change. Code doesn't look suspicious, plus stubbed functions
- win32k.c: Alex Ionescu only changed the functions to call Win32K instead of having the code in ntoskrnl. It was a cut/paste job. Aleksey Bragin: The code looks very trivial and straightforward, certainly it's written based on clean sources of information
- zone.c: Based on David Welch's code, which Alex Ionescu merely cleaned up, using clean development. He's not even sure if the Zone functions are still in Windows.



svn path=/trunk/; revision=21930
2006-05-18 12:06:28 +00:00
Ged Murphy
0f5345d5be - change the resource numbers to match Windows
- up the icon quality a bit.

svn path=/trunk/; revision=21929
2006-05-17 21:45:49 +00:00
Ged Murphy
857f3df0d7 - resize listbox. Fixes bug 1496
- change icon resource number to match Windows

svn path=/trunk/; revision=21928
2006-05-17 21:40:13 +00:00
Aleksey Bragin
66d38f82e7 [AUDIT]
ntoskrnl/inbv

- Functions are written mostly by dwelch and chorn, are exported and don't look like containing dirty code. They have some comments too. Filip confirmes this file is clean.
- Unified formatting throughout the file

svn path=/trunk/; revision=21927
2006-05-17 20:34:34 +00:00
Maarten Bosma
928dd508a1 [AUDIT]
Filip Navara: Contains only two functions, one of them is unimplemented Windows function and the other one is ROS specific and doesn't even follow the NT design.

svn path=/trunk/; revision=21926
2006-05-17 20:17:23 +00:00
Aleksey Bragin
ae39521313 [AUDIT]
ntoskrnl/ex/init.c
- Alex Ionescu: File is clean. Most of these are ReactOS-internal and specific to our booting cycle, which is entirely incompatible with Windows and broken beyond explanation.

svn path=/trunk/; revision=21924
2006-05-17 19:58:11 +00:00
Aleksey Bragin
2068860d71 [AUDIT]
ntoskrnl/mm
- Alex Ionescu: clean, they use ROS 'objects'. NT doesn't have rmaps or page_ops

svn path=/trunk/; revision=21923
2006-05-17 19:53:35 +00:00
Aleksey Bragin
1e9bb0240f [AUDIT]
ntoskrnl/mm/mpw.c
- Filip Navara: mpw.c is surely clean. it's totally wrong and besides it was described in The Book (Inside Windows NT)

svn path=/trunk/; revision=21922
2006-05-17 19:43:53 +00:00
Filip Navara
06f25f4b30 Attribute list support for NTFS and some memory leak fixes.
svn path=/trunk/; revision=21920
2006-05-17 14:40:14 +00:00
Mindflyer
8dd9c14606 Whoops, r21918 meant to go in trunk too.
svn path=/trunk/; revision=21919
2006-05-17 13:23:48 +00:00
Hervé Poussineau
4c27d61b0c Replace BOOL by BOOLEAN and STDCALL by NTAPI
(Use native types instead of Win32 ones)

svn path=/trunk/; revision=21917
2006-05-16 23:09:41 +00:00
Alex Ionescu
8a1609a63e - Check the Image Config Data in MmCreatePeb for address abusing (bug #1487).
- Speed-up the ElfpIsPowerOf2 function (bug #1464).

svn path=/trunk/; revision=21916
2006-05-16 15:04:50 +00:00
Ged Murphy
d83ca30a98 french translation by usurp
svn path=/trunk/; revision=21915
2006-05-15 22:56:07 +00:00
Christoph von Wittich
37402e2341 -fix build
svn path=/trunk/; revision=21913
2006-05-15 18:56:42 +00:00
Ged Murphy
b37892fad9 - size listbox correctly
- fixes bug 1490

svn path=/trunk/; revision=21912
2006-05-15 18:35:50 +00:00
Klemens Friedl
c6bee1d8a5 Add icons for several filetypes
registry keys written by Daniel "EmuandCo" Reimer <reimer [dot] daniel [at] freenet [dot] de>

svn path=/trunk/; revision=21910
2006-05-15 17:28:50 +00:00
Hervé Poussineau
57fca2edb7 Rename IOCTL_INTERNAL_USB_GET_ROOT_USB_DEVICE to IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO, and send it with major code IRP_MJ_INTERNAL_DEVICE_CONTROL
svn path=/trunk/; revision=21909
2006-05-15 16:38:49 +00:00
Hervé Poussineau
1d77bcb312 Correctly support USB hubs
svn path=/trunk/; revision=21908
2006-05-15 16:05:02 +00:00
Christoph von Wittich
f53dbb4e60 added usb.inf for generic usb-hubs
svn path=/trunk/; revision=21907
2006-05-15 15:47:56 +00:00
Hervé Poussineau
36ed39b2b9 Initialize the status block before sending the IRP
svn path=/trunk/; revision=21906
2006-05-15 10:55:51 +00:00
Hervé Poussineau
ed01b8a86a Revert 21903
1) ReactOS is extremely long to parse .inf files (no .pnf files as on Windows). Remember we want to keep ReactOS fast (when running) and small (on disk).
2) nVidia already provides a .inf file for its devices. You will still need it for other devices, so why not also use it for PCI System Management and Memory Controller?
3) Windows doesn't recognize natively the nVidia chipset, even with lastest updates.
4) I only care about devices emulated by VMware/Qemu/Bochs/Virtual PC, ie virtual machines.
5) If you add PnP IDs of some nVidia devices, someone else will want to add PnP IDs for other chipsets (Via, C3, Intel, ...)
6) While you are at it, why don't you add 40Mb to recognize the same amount of devices as Windows XP?

svn path=/trunk/; revision=21905
2006-05-15 08:43:33 +00:00
Magnus Olsen
78d1377a7b bug 1486 : patch from w3seek USER32: Convert WM_MDICREATE messages from/to unicode
svn path=/trunk/; revision=21904
2006-05-14 21:26:24 +00:00
Christoph von Wittich
c09f0eb9c7 -added NVIDIA nForce2 Memory Controller
-added NVIDIA nForce2 PCI System Management

svn path=/trunk/; revision=21903
2006-05-14 20:05:08 +00:00
Hervé Poussineau
cb4bb8b659 No need to link to ole32/oleaut32
svn path=/trunk/; revision=21902
2006-05-14 14:51:08 +00:00
Aleksey Bragin
ae9f01ed84 - Revert dependencies part of r21866 since it breaks compiling on MSVC 2005 (it complains to missing libs which we don't yet compile - like ntdll.lib, gdi32.lib, user32.lib and so on)
svn path=/trunk/; revision=21901
2006-05-13 22:11:25 +00:00
Art Yerkes
c37d7e43f9 Fix duplicate default routes when IP address is set manually.
svn path=/trunk/; revision=21900
2006-05-13 07:11:22 +00:00
Art Yerkes
c68622792c - Live update of static IP address from ctl panel.
- Fix removing adapter route on IP address delete.

svn path=/trunk/; revision=21899
2006-05-13 06:41:23 +00:00
Christoph von Wittich
a9680a89a6 display workgroup/domain name
svn path=/trunk/; revision=21898
2006-05-12 20:05:19 +00:00
Aleksey Bragin
34e230693a - Bug 1476: Include rosldr.h in halxbox.h
svn path=/trunk/; revision=21897
2006-05-12 19:51:50 +00:00
Hervé Poussineau
289346554c Misc fixes:
- Add System Bus Extender service group (used by pciide driver)
- Fix tags for Boot Bus Extender services
- Remove deprecated entries for ide.sys
- Let not the hardware wizard display the "Unknown device" (hack)

svn path=/trunk/; revision=21896
2006-05-12 07:36:12 +00:00
Maarten Bosma
88195fb7d6 [AUDIT]
Unlock the Cache Manager
- It is not even compatible to windows
- Alex assures his code is clean 

svn path=/trunk/; revision=21894
2006-05-11 22:40:37 +00:00
Hervé Poussineau
a1862b3701 Fix converting the typelib file name to unicode by using the correct buffer size.
svn path=/trunk/; revision=21893
2006-05-11 22:23:20 +00:00
Andrew Munger
3ed19e8287 Quiesce the datalink debugging output.
svn path=/trunk/; revision=21892
2006-05-11 21:52:28 +00:00
Aleksey Bragin
2e6dfbc67d - Thomas Weidenmueller: Fix build by fixing __readcr3 / __readcr4 implementations.
svn path=/trunk/; revision=21891
2006-05-11 21:01:29 +00:00
Andrew Munger
c02800c901 Restore original compiler settings. Changed accidentally by the NDK patch.
svn path=/trunk/; revision=21890
2006-05-11 19:07:52 +00:00
Hervé Poussineau
6e04036473 Some more error checking...
svn path=/trunk/; revision=21889
2006-05-11 17:43:31 +00:00
Hervé Poussineau
919b2cb62d - Fix installation of INF sections including a section of the same name in another INF file
- Remove some tests to NULL before HeapFree calls

svn path=/trunk/; revision=21888
2006-05-11 16:56:00 +00:00
Magnus Olsen
834787aacd revers my change in 21818, w3seek point out it was not good, and it can create unsupectet problem, like no gui ondemain, and maybe other, it seam waxdragon and other have problem boot after this changes. thats is the reason for this change beeing remove, that was added in 21818
svn path=/trunk/; revision=21886
2006-05-10 21:34:10 +00:00
Andrew Munger
72bb90f524 Revert accidental txtsetup.sif change. My fault.
svn path=/trunk/; revision=21885
2006-05-10 19:29:49 +00:00
Alex Ionescu
9a243ba5a2 Fix broken assert
svn path=/trunk/; revision=21883
2006-05-10 18:24:23 +00:00
Alex Ionescu
ac9b1b94cd Fix broken assert
svn path=/trunk/; revision=21882
2006-05-10 18:15:58 +00:00
Alex Ionescu
8481c1fa10 - NDK 0.98, now with versionned headers. Too many changes to list, see the TinyKRNL SVN Logs for more detailed information. Thanks to Andrew (Wax), Thomas and Aleksey for testing.
svn path=/trunk/; revision=21880
2006-05-10 17:47:44 +00:00
Christoph von Wittich
4adc41a909 added ACPI fan, ACPI power button device, ACPI sleep button device
svn path=/trunk/; revision=21879
2006-05-10 15:58:14 +00:00
Magnus Olsen
3f59281d1a delay the kernel tree for let it it cache up with some work before continue excute in IntPrepareDriver.
base on hpoussin hack in bug 1321, I have reboot vmware lest 20-30 times and I do not longer getting bsod 
I did before see lest one bsod in IntPrepareDriver after first attamt to boot to gui mode, then I need 
reboot reactos two times, to get it working. Lest it take care of my problem in vmware 

svn path=/trunk/; revision=21878
2006-05-10 14:50:28 +00:00
Hervé Poussineau
d13126b46f Shut up a debug message
svn path=/trunk/; revision=21877
2006-05-10 13:46:52 +00:00
Magnus Olsen
df0a9980e4 bug 1468 : patch from w3seek, advapi32: support object ACEs in string functions
svn path=/trunk/; revision=21876
2006-05-10 09:44:06 +00:00
Magnus Olsen
c74cbfaf67 bug 1467 : patch from w3seek, ACLs: Implement audit functions
svn path=/trunk/; revision=21875
2006-05-10 09:32:23 +00:00
Magnus Olsen
27a4da82e1 [AUDIT] after looking through code no signs of reverse engineering were found. COde was take from wine and stub wirten by EA
svn path=/trunk/; revision=21874
2006-05-10 08:51:13 +00:00
Magnus Olsen
bfafb50916 [AUDIT] advapi32 is from wine, objust clean
svn path=/trunk/; revision=21873
2006-05-10 08:41:27 +00:00
Magnus Olsen
2e0ae5f5e3 [AUDIT] after looking through code no signs of reverse engineering were found.
svn path=/trunk/; revision=21872
2006-05-10 08:32:32 +00:00
Hervé Poussineau
89ef78094b Update version.dll to lastest Wine version. Fixes a bug in some installers.
It was forked in revision 8782 to let Winzip to work. I've checked that Winzip is also working with this version

svn path=/trunk/; revision=21871
2006-05-10 08:19:03 +00:00
Hervé Poussineau
8ddbd806d9 Add missing #define for VFT2_DRV_VERSIONED_PRINTER
svn path=/trunk/; revision=21870
2006-05-10 07:10:11 +00:00
Hervé Poussineau
f5d503e93f Fix compilation with GCC4
svn path=/trunk/; revision=21869
2006-05-09 20:50:46 +00:00
Hervé Poussineau
1bbf802c73 First fully functional version of ncpa.
Requires a reboot after parameters changes.

svn path=/trunk/; revision=21868
2006-05-09 20:25:29 +00:00
Andrew Munger
4a37f88e19 win32k: minor window class fixes
- minor callproc handling bug
- correctly updating the menu name pointers when moving classes to the shared
heap
Patch by w3seek.

svn path=/trunk/; revision=21867
2006-05-09 20:21:52 +00:00
Johannes Anderwald
45cc9049ea add library output paths to linker
implement project dependency tracking - now we can build modules with dependend subprojects from ReactOS.sln

svn path=/trunk/; revision=21866
2006-05-09 12:22:33 +00:00
Johannes Anderwald
3f8a0f1903 exclude wine/w32api headers from msvc include paths
svn path=/trunk/; revision=21865
2006-05-09 09:23:20 +00:00
Magnus Olsen
897c5ec108 correct the ntoskrnl to the new LARGE_MCB strucrt
svn path=/trunk/; revision=21864
2006-05-09 06:02:26 +00:00
Magnus Olsen
91179ea59c fixing right define of struct typedef LARGE_MCB *PLARGE_MCB
svn path=/trunk/; revision=21863
2006-05-09 06:01:32 +00:00
James Tabor
8a45279c78 I fixed a mistake?
svn path=/trunk/; revision=21862
2006-05-09 03:55:10 +00:00
Hervé Poussineau
8fdb1b77b0 Add CommonFilesDir and ProgramFilesDir to HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion
svn path=/trunk/; revision=21861
2006-05-08 23:54:03 +00:00
Magnus Olsen
ca4a8da1a8 FsRtlNumberOfRunsInLargeMcb compare http://www.jankratochvil.net/captive source changes of ReactOS ntoskrnl and we found a bug in ReactOS
ntoskrnl.

svn path=/trunk/; revision=21860
2006-05-08 22:07:09 +00:00
Hervé Poussineau
fac26bda0c Patch by Thomas Weidermueller (w3seek at reactos dot com)
- Fix some parameter names and IN/OUT/OPTIONAL

svn path=/trunk/; revision=21859
2006-05-08 21:32:36 +00:00
Johannes Anderwald
1991163828 fix msvc build bug with project having assemblers
svn path=/trunk/; revision=21858
2006-05-08 20:13:29 +00:00
Art Yerkes
bef295c91c Sorry, reverted my changes. I didn't realize other work was going on in here.
svn path=/trunk/; revision=21857
2006-05-08 18:16:44 +00:00
Magnus Olsen
c6b4c14c62 fixing a typo from my side. sorry wax for the broken treed
svn path=/trunk/; revision=21856
2006-05-08 18:15:46 +00:00
Magnus Olsen
875cffced6 sorry I broke the build, thx Brezenbak and w3seek point it out, small change from brezenbak to fix it
svn path=/trunk/; revision=21855
2006-05-08 17:35:09 +00:00
Hervé Poussineau
e85d46966b Fix bug 1448 and a possible buffer overflow.
Thanks w3seek for his help during the debugging

svn path=/trunk/; revision=21854
2006-05-08 17:14:19 +00:00
Magnus Olsen
026816c434 fixing a bug in gdientry3, found it when I wrote the doc
svn path=/trunk/; revision=21853
2006-05-08 16:50:33 +00:00
Magnus Olsen
f11806f4f0 adding doc for how DdCreateDirectDrawObject (GdiEntry1) and DdDeleteDirectDrawObject (GdiEntry3) works in reactos. doc by request by some devlopers
svn path=/trunk/; revision=21852
2006-05-08 16:48:10 +00:00
Art Yerkes
5a74450800 tcpip: make sure to clean up failed adapter bindings
ndis:  manage global adapter list correctly
ncpa:  wip code from my old tree ... it can now be used to set a static ip
       addr at least.  more to come

svn path=/trunk/; revision=21851
2006-05-08 11:00:26 +00:00
Christoph von Wittich
2160fab7c2 fix indentation
svn path=/trunk/; revision=21850
2006-05-08 08:54:47 +00:00
Magnus Olsen
62257d5444 if u update En.rc please update all other langues files, use the english text if no translatesion is not availbal, other wise it will bsd in windows or in reactos and we get diffent functions on each langues. DO NOT DO THIS MISTAKE
svn path=/trunk/; revision=21849
2006-05-08 05:11:37 +00:00
Art Yerkes
2bc290e96d Sorry, turn off extra debugging. We need a better framework for that.
svn path=/trunk/; revision=21848
2006-05-08 02:46:21 +00:00
Art Yerkes
7b61c89d96 Fix device registration. The actual reason it didn't work was that we weren't
adding the device to the list until after calling the BindAdapter method.

svn path=/trunk/; revision=21847
2006-05-08 02:45:40 +00:00
Andrew Munger
064fa9c1f2 userenv: open handles with least rights neccessary. Patch by w3seek, bug 1458.
svn path=/trunk/; revision=21846
2006-05-07 20:23:16 +00:00
Eric Kohl
8ee8c5c694 The NPFS_FCB struct is actually a CCB (Context Control Block) instead of an FCB (File Control Block). Rename it accordingly and store pointers to it in FileObject->FsContext2 instead of FileObject->FsContext.
svn path=/trunk/; revision=21845
2006-05-07 19:56:32 +00:00
Alex Ionescu
3d1978b003 [AUDIT]
- Tditest: A TDI test application.
- Floppy: Cleanly implemented by Vizzini.
- VideoPort, VBE/VGA Miniports: Filip says these are clean, but the actual VGA driver/framebuffers need more through auditing.

svn path=/trunk/; revision=21844
2006-05-07 19:34:23 +00:00
Magnus Olsen
021be3ef24 [AUDIT] after looking through code no signs of reverse engineering were found.
svn path=/trunk/; revision=21843
2006-05-07 19:23:37 +00:00
Alex Ionescu
8f6c4b215d [AUDIT]
- Bootvid: Uses documented/typical VGA drawing routines. Actual NT implementation is comletely incompatible and has nothing to do with real Windows, so no taint here.
- Debugout, green, diskdump: ROS-developed and non-NT drivers. Nothing they could've been tainted with, since NT doesn't have them.
- Null: Trivial/obvious implementation of a driver which does nothing.
- buslogic: Taken from VMWare source code almost entirely, minus some ROS hacks.
- Xbox Video Miniport: Cleanly developed by ros-xbox team with information from linux-xbox project.
- CSQTest: CSQ Test written by vizzini. Uses documented CSQ information and is just a test app to show how CSQ works, written by himself.

svn path=/trunk/; revision=21842
2006-05-07 19:16:11 +00:00
Alex Ionescu
a50247fb0c [AUDIT]
- HalUp is just a 3-line initialization stub.
- Include directory contains public DMA/APIC/SMP hardware data or internal prototypes.

svn path=/trunk/; revision=21841
2006-05-07 18:59:41 +00:00
Alex Ionescu
7200d0ce67 [AUDIT]
- Generic HAL is just a bunch of stubs, no actual code.
- XBOX HAL was cleanly developed by the ros-XBOX team using information from linux-xbox.

svn path=/trunk/; revision=21840
2006-05-07 18:56:52 +00:00
Magnus Olsen
f3bf535104 bug 1457: patch by w3seek : VFAT: Implement FileEaInformation for FAT32
svn path=/trunk/; revision=21839
2006-05-07 18:50:18 +00:00
Magnus Olsen
661ec874b7 [AUDIT] after looking through code no signs of reverse engineering were found.
svn path=/trunk/; revision=21838
2006-05-07 18:49:07 +00:00
Magnus Olsen
6cb336fbaa [AUDIT] after looking through code no signs of reverse engineering were found.
svn path=/trunk/; revision=21837
2006-05-07 18:42:22 +00:00
Magnus Olsen
65a46fb6e4 [AUDIT] after looking through code no signs of reverse engineering were found.
svn path=/trunk/; revision=21836
2006-05-07 18:39:18 +00:00
Magnus Olsen
b8c0b29fc9 Bug 1456 : patch from w3seek : Fix a bug in CreateDirectoryEx that makes the function attempt to create the template directory again
svn path=/trunk/; revision=21835
2006-05-07 18:17:50 +00:00
Magnus Olsen
bad04e557d [AUDIT] after looking through code no signs of reverse engineering were found.
svn path=/trunk/; revision=21834
2006-05-07 18:16:31 +00:00
Magnus Olsen
150fb4f42c [AUDIT] after looking through code no signs of reverse engineering were found.
svn path=/trunk/; revision=21833
2006-05-07 18:14:03 +00:00
Christoph von Wittich
eb3ebbddf1 -don't show SystemComponents
-added a "Show updates" checkbox 

svn path=/trunk/; revision=21832
2006-05-07 18:05:51 +00:00
Hervé Poussineau
caea3e9648 Add common cleanup block in SetupDiBuildClassInfoListExW, SetupDiClassGuidsFromNameExW, SetupDiClassNameFromGuidExW, SetupDiGetClassDescriptionExW, SETUP_CreateDevListFromEnumerator, SETUP_CreateDevList, SetupDiGetClassDevsExW, CreateClassKey, SetupDiOpenDeviceInfoW
svn path=/trunk/; revision=21831
2006-05-07 14:52:32 +00:00
Hervé Poussineau
31eb0eb314 In case of error, Reg* functions set the output handle to NULL. Don't rely on it to be INVALID_HANDLE_VALUE
This commit is related to bug 1455

svn path=/trunk/; revision=21830
2006-05-07 14:02:00 +00:00
Hervé Poussineau
12f4770a33 Replace some casts by CONTAINING_RECORD macro
Fix handle leak in SetupDiOpenClassRegKeyExW

svn path=/trunk/; revision=21829
2006-05-07 13:35:44 +00:00
Eric Kohl
367c18f5d5 Fix timeout handling.
svn path=/trunk/; revision=21828
2006-05-07 12:48:45 +00:00
Hervé Poussineau
33a839df3b Fix a broken cast (thanks w3seek)
svn path=/trunk/; revision=21827
2006-05-07 12:09:01 +00:00
Hervé Poussineau
cc1a16be75 Fix error handling in SETUP_CreateInterfaceList (memory/handles leak)
Implement DIGCF_PRESENT flag in SetupDiGetClassDevsExW
Add more error codes mapping from CR_* to ERROR_*

svn path=/trunk/; revision=21826
2006-05-07 12:00:55 +00:00
Eric Kohl
0070982394 Update Indentation (tab->4spaces).
svn path=/trunk/; revision=21825
2006-05-07 11:14:41 +00:00
Alex Ionescu
5fdf34d3c5 - Fix build.
svn path=/trunk/; revision=21824
2006-05-07 10:52:14 +00:00
Hervé Poussineau
cbb6aa83e6 Fix buffer overflow (spotted by Detlef Riekenberg in wine-devel ML)
svn path=/trunk/; revision=21823
2006-05-07 09:32:56 +00:00
Aleksey Bragin
47ec97a52e [AUDIT]
kernel32.dll
- Eric Kohl states that mailslot.c and npipe.c are clean: "They implement simple interfaces to the mailslot and named pipe file system drivers and don't contain any tainted code."

svn path=/trunk/; revision=21822
2006-05-07 09:23:22 +00:00
Magnus Olsen
234eeebea4 merges HEL_SetCooperativeLevel and HAL_SetCooperativeLevel to MAIN_SetCooperativeLevel
the new desgin allown us to use HEL as callbacks, we need change all HEL calls to the new desgin now

svn path=/trunk/; revision=21821
2006-05-07 09:12:37 +00:00
Magnus Olsen
cf6a23c944 Try again move to new redesign but now we take one step at time
svn path=/trunk/; revision=21820
2006-05-07 08:41:26 +00:00
Magnus Olsen
64f88aed89 revert last commit it bsd the ddraw in some case
svn path=/trunk/; revision=21819
2006-05-07 08:26:40 +00:00
Art Yerkes
fec1bfb78a Fix printing of adapter address. Just a silly thing for debugging.
svn path=/trunk/; revision=21818
2006-05-07 07:45:17 +00:00
Magnus Olsen
4a3cd2b217 Start remove old desgin of HEL to the new desgin, it will redues the code size, for we will use same code to call HAL in HEL, basic we need write the Dd* functions, it can be done two way, 1. Create a Hel driver in kmode or try write it in user mode. I will try write it in user mode.
svn path=/trunk/; revision=21817
2006-05-07 07:43:50 +00:00
Eric Kohl
9c0250f71c Simplified the access to FCBs and CCBs.
svn path=/trunk/; revision=21816
2006-05-07 07:33:40 +00:00
Eric Kohl
c5fa9029dc The MSFS_MAILSLOT struct is actually an FCB (File Control Block). Rename it accordingly and store pointers to it in FileObject->FsContext.
svn path=/trunk/; revision=21815
2006-05-06 20:04:30 +00:00
Eric Kohl
7b09374005 Set direct io flag of the device object.
svn path=/trunk/; revision=21814
2006-05-06 15:39:42 +00:00
Eric Kohl
0d5cf488c4 The MSFS_FCB struct is actually a CCB (Context Control Block) instead of an FCB (File Control Block). Rename it accordingly and store pointers to it in FileObject->FsContext2 instead of FileObject->FsContext.
svn path=/trunk/; revision=21813
2006-05-06 15:37:40 +00:00
Hervé Poussineau
6d2a7a72b1 Code cleanup:
- Move IRP_MJ_CREATE, IRP_MJ_CLOSE and IRP_MJ_CLEANUP to fdo.c and pdo.c
- Implement IRP_MJ_PNP / IRP_MN_QUERY_BUS_INFORMATION for PDOs
- IRP_MJ_POWER now returns STATUS_NOT_SUPPORTED instead of STATUS_SUCCESS
- Replace STDCALL by NTAPI
- Delete useless white space

=> USB keyboard and mice are working, even if they require one reboot after the installation of the USB controller

svn path=/trunk/; revision=21812
2006-05-06 14:36:52 +00:00
Johannes Anderwald
f7bfbfc5a6 * enable advanced mouse options in apply
thnx Christoph_Vw

svn path=/trunk/; revision=21811
2006-05-06 11:26:27 +00:00
Johannes Anderwald
369410a1c1 * ident code
* enable apply button when slider pos change

svn path=/trunk/; revision=21810
2006-05-06 11:10:27 +00:00
Christoph von Wittich
ea0b42a0e7 -lock the year edit control
svn path=/trunk/; revision=21809
2006-05-05 21:55:27 +00:00
Aleksey Bragin
42657b29da - SVN maintenance (set eol-style to native)
svn path=/trunk/; revision=21808
2006-05-05 18:13:26 +00:00
Aleksey Bragin
b78cdcabbd Move OBJ_NAME_PATH_SEPARATOR to ndk/obtypes.h (inspired by w3seek). Should make applying NDK patch easier.
svn path=/trunk/; revision=21807
2006-05-05 17:46:05 +00:00
Peter Ward
28731a5081 Fixed build.
- Changed strcpyW to wcscpy.

svn path=/trunk/; revision=21806
2006-05-05 17:16:05 +00:00
Aleksey Bragin
f914c470a9 [AUDIT]
drivers/network/wshtcpip

- Authors are Casper Hornstrup and Arthur Yerks
- Implemented functions are documented in OSR, MSDN and Google finds lots of links
- Result: Clean

svn path=/trunk/; revision=21805
2006-05-05 15:40:59 +00:00
Maarten Bosma
86eb7ebe10 [AUDIT]
Elf Loader
- KJK::Hyperion says it's clean
- ELF loader does not exist in Windows(R).

svn path=/trunk/; revision=21804
2006-05-05 15:36:25 +00:00
Christoph von Wittich
41c172dc42 *added year selection box
*display current time

svn path=/trunk/; revision=21803
2006-05-05 15:35:56 +00:00
Maarten Bosma
a35aed3b0d [AUDIT]
Obviously clean since it does not exist in windows and comes from freebsd.

svn path=/trunk/; revision=21802
2006-05-05 15:31:16 +00:00
Andrew Munger
e9c7c2b139 "More efficient" IsPowerOf2 from Myria (myriachan at cox dot net).
svn path=/trunk/; revision=21801
2006-05-05 15:10:59 +00:00
Aleksey Bragin
1ae51bd800 [AUDIT]
wshirda.dll

- Code is just a set of stubs
- Headers/defs/rc is definately clean

svn path=/trunk/; revision=21800
2006-05-05 15:09:57 +00:00
Aleksey Bragin
48cef97799 [AUDIT]
ntoskrnl/mm/pe.c

- KJK::Hyperion says it's clean
- There are references to original specs
- Windows PE loader is completely different

svn path=/trunk/; revision=21799
2006-05-05 14:56:16 +00:00
Aleksey Bragin
70403dc889 [AUDIT]
ws2help.dll

- Code is just a set of stubs
- Headers/defs/rc is definately clean

svn path=/trunk/; revision=21798
2006-05-05 14:10:47 +00:00
Hervé Poussineau
0d86ffc546 Legacy device objects created for USB keyboard and mouse support should be treated as FDOs, not PDOs.
svn path=/trunk/; revision=21797
2006-05-05 10:12:59 +00:00
Johannes Anderwald
c0afd25226 resources for the keyboard control panel applet
svn path=/trunk/; revision=21796
2006-05-04 20:30:22 +00:00
Johannes Anderwald
e8a4603968 fix build on linux plattforms
svn path=/trunk/; revision=21795
2006-05-04 05:31:53 +00:00
Magnus Olsen
bb9e90f468 Bug : 1452 : patch from w3seek, some xlate obj fixes for indexed palettes, should fix a hack introduced in r21292
svn path=/trunk/; revision=21794
2006-05-04 05:23:54 +00:00
Johannes Anderwald
6da2349338 implement notepad view status bar -
TODO: update caret position on arrow key/mouse scroll events


svn path=/trunk/; revision=21793
2006-05-03 16:17:12 +00:00
Johannes Anderwald
ef7ec993b7 set double click speed with latest slider pos
svn path=/trunk/; revision=21792
2006-05-03 15:06:09 +00:00
Hervé Poussineau
28ab30ea8d Don't call IoRaiseHardError at DISPATCH_LEVEL
svn path=/trunk/; revision=21791
2006-05-03 14:42:28 +00:00
Johannes Anderwald
b7f9c94930 fix compiling with gcc4
patch from w3seek

svn path=/trunk/; revision=21790
2006-05-03 14:34:01 +00:00
Hervé Poussineau
f50109cbc7 Cleanup in SetupGetInfFileListW:
- Better arguments check
- Rename pFileSpecification to pFullFileName
- Fix some possible buffer overflows spotted by w3seek

svn path=/trunk/; revision=21789
2006-05-03 14:26:43 +00:00
Johannes Anderwald
1b40c53f4c added missing constanst #define SPI_GETMOUSECLICKLOCK 0x101E
#define SPI_SETMOUSECLICKLOCK               0x101F

svn path=/trunk/; revision=21788
2006-05-03 14:09:39 +00:00
Hervé Poussineau
cdcd6ee015 Don't double free buffer in case of error
svn path=/trunk/; revision=21787
2006-05-03 13:56:12 +00:00
Johannes Anderwald
534b5a2027 halfplemented mouse control panel applet
svn path=/trunk/; revision=21786
2006-05-03 13:45:22 +00:00
Johannes Anderwald
56339e3e49 mouse control panel applet resources
svn path=/trunk/; revision=21785
2006-05-03 11:23:57 +00:00
Johannes Anderwald
7528b7fee5 small msvc compiling fix
svn path=/trunk/; revision=21784
2006-05-03 11:18:07 +00:00
Aleksey Bragin
d3f8576eb3 [AUDIT]
- w3seek says this file is derived from Wine and doesn't contain any possibly unclean code

svn path=/trunk/; revision=21783
2006-05-03 10:57:26 +00:00
Aleksey Bragin
6e170da6f7 - Bug 1447: Patch by Thomas Weidenmueller "Use SEH for some lstring functions, partly adapted from WINE"
WaxDragon tested this patch and confirmed it works fine.

svn path=/trunk/; revision=21782
2006-05-03 10:55:46 +00:00
Aleksey Bragin
549d2f7cbd - Bug 1450: Patch by Thomas Weidenmueller "Some window class fixes"
This patch makes registering the "Abiword" window class succeed. However, Abiword now crashes with a stack overflow recursively delivering the WM_NOTIFYFORMAT message to a subclassed rebar control...

svn path=/trunk/; revision=21781
2006-05-03 10:48:38 +00:00
Aleksey Bragin
fd9ff56f6d - Bug 1451: Patch by Thomas Weidenmueller:
System controls, such as comboboxes and listboxes are always unicode, even when
created with CreateWindowExA. Therefore, ansi messages need to be converted to
unicode and vice versa when sent to these windows. This patch fixes some(!) of these issues! Not all control messages are handled!

svn path=/trunk/; revision=21780
2006-05-03 10:35:11 +00:00
Andrew Munger
965305ebc8 Move callproc code into own file and reduce unneccessary system calls to dereference them.
It doesn't fix any bugs but improves performance a bit.
Patch from w3seek, bug 1445.

svn path=/trunk/; revision=21779
2006-05-03 04:17:50 +00:00
Christoph von Wittich
47e2049ea7 updated french translation patch by usurp
fixes bug 1441

svn path=/trunk/; revision=21778
2006-05-02 22:45:35 +00:00
Ged Murphy
8e006a24f2 Got carried away ;)
svn path=/trunk/; revision=21777
2006-05-02 21:11:36 +00:00
Ged Murphy
e0db930d64 - convert the screensaver to tchar and build as unicode.
- gets around the ANSI bug in the config dialog

svn path=/trunk/; revision=21776
2006-05-02 21:01:43 +00:00
Magnus Olsen
1b213c54a6 remove unsuse files after some redesign of ddraw
svn path=/trunk/; revision=21770
2006-05-02 17:53:04 +00:00
Magnus Olsen
daffac7a40 fix the build
svn path=/trunk/; revision=21769
2006-05-02 08:15:50 +00:00
Magnus Olsen
11ccea69ec implement add and release ref
svn path=/trunk/; revision=21768
2006-05-02 08:09:47 +00:00
Aleksey Bragin
3b277d1d05 - Patch by Thomas Weidenmueller: Adds a workaround for buggy installshield installers (which crash without this patch)
- Fixes e.g. ATI Catalyst 5.5 installer and some other

svn path=/trunk/; revision=21763
2006-05-01 21:33:26 +00:00
Christoph von Wittich
5f8eb7f778 updated resource files
svn path=/trunk/; revision=21761
2006-05-01 17:24:38 +00:00
Magnus Olsen
1eade84bbf Working on a redesign of whole directdraw interface
frist commit of many

svn path=/trunk/; revision=21760
2006-05-01 10:04:59 +00:00
Hervé Poussineau
ccdf6190cd Add kbdclass and mouclass as upper filter for keyboard and mouse devices.
Install i8042prt driver, even if it is not plug&play compliant at the moment

svn path=/trunk/; revision=21759
2006-04-30 19:17:32 +00:00
Eric Kohl
e1ab416a94 Improvement to the r21757 patch.
svn path=/trunk/; revision=21758
2006-04-30 12:10:31 +00:00
Eric Kohl
c2f31954b8 An attempt to read from a not-yet-connected pipe must fail. This fixes a Wine testcase.
svn path=/trunk/; revision=21757
2006-04-30 07:47:07 +00:00
Hervé Poussineau
7410babf41 Add pciide.sys/pciidex.sys to bootcd
svn path=/trunk/; revision=21756
2006-04-29 11:11:29 +00:00
Eric Kohl
1f15256d2e Set file object flag FO_NAMED_PIPE upon named pipe creation.
svn path=/trunk/; revision=21755
2006-04-29 07:39:13 +00:00
Eric Kohl
4fd7f3fb6a Set file object flag FO_MAILSLOT upon mailslot creation.
svn path=/trunk/; revision=21754
2006-04-29 07:35:41 +00:00
Hervé Poussineau
16d9aebe47 Lighter implementation of SetupGetInfFileListW
svn path=/trunk/; revision=21753
2006-04-28 21:10:49 +00:00
Ged Murphy
b474823f9a fix build
svn path=/trunk/; revision=21752
2006-04-28 15:43:45 +00:00
Christoph von Wittich
f67e8214bb added a PopupMenu with Add and Delete functions in screensaver.c
svn path=/trunk/; revision=21751
2006-04-28 15:34:58 +00:00
Christoph von Wittich
7ba6d64695 fixed a typo
svn path=/trunk/; revision=21750
2006-04-28 06:00:23 +00:00
Christoph von Wittich
cdac01f6e6 -redesigned the screensaver dialog
-removed add and delete buttons (these function should be placed in a context menu instead)

other rc files than english and german have to be updated accordingly

svn path=/trunk/; revision=21749
2006-04-28 05:46:44 +00:00
Christoph von Wittich
f7fc8841b0 transparent screen picture
svn path=/trunk/; revision=21748
2006-04-28 00:09:33 +00:00
Ged Murphy
0c30ab932a revert the my computer icon. mf's original is prefered
svn path=/trunk/; revision=21747
2006-04-27 20:40:09 +00:00
Ged Murphy
ead212bffe - allow start menu selection to loop when using the keyboard
- patch by Andreas Bjerkeholt (harteex@gmail.com)

svn path=/trunk/; revision=21745
2006-04-26 22:44:26 +00:00
Magnus Olsen
633c345cae [AUDIT] after looking through code no signs of reverse engineering were found.
BUG 1432 patch from w3seek : Get tools/cabman compile with gcc4

svn path=/trunk/; revision=21744
2006-04-26 05:06:22 +00:00
Magnus Olsen
4781665fc1 [AUDIT] after looking through code no signs of reverse engineering were found.
BUG 1437 patch from w3seek : SMSS: Fix using uninitialized variable

svn path=/trunk/; revision=21743
2006-04-26 04:59:24 +00:00
Magnus Olsen
0707606360 [AUDIT] after looking through code no signs of reverse engineering were found.
BUG 1436 patch from w3seek : SMSS: make \SystemRoot\System32 the current directory for started subsystems

svn path=/trunk/; revision=21742
2006-04-26 04:49:11 +00:00
Hervé Poussineau
fbd4530bfa Complete IRP_MJ_CREATE, IRP_MJ_CLOSE, IRP_MJ_CLEANUP
Use correct buffer when filling read request. Use SEH when needed
Correctly propagate DO_BUFFERED_IO, DO_DIRECT_IO and FILE_DEVICE_SECURE_OPEN flags

svn path=/trunk/; revision=21741
2006-04-25 22:22:22 +00:00
Ged Murphy
b110d67ed6 fix build
svn path=/trunk/; revision=21740
2006-04-25 21:47:16 +00:00
Andrew Munger
3958d172cb 21728 broke the release build, use an #ifndef instead.
svn path=/trunk/; revision=21738
2006-04-25 01:31:00 +00:00
Ged Murphy
3027bdebbd delete sneaky file
svn path=/trunk/; revision=21737
2006-04-24 21:36:08 +00:00
Ged Murphy
d99f67103e match the regedit icons to the shell32 ones.
svn path=/trunk/; revision=21736
2006-04-24 21:32:54 +00:00
Ged Murphy
16c495d2b7 match the explorer icons to the shell32 ones.
svn path=/trunk/; revision=21735
2006-04-24 21:31:41 +00:00
Ged Murphy
c1c0e85000 [AUDIT]
sysdm.cpl
Clear formatted Win32 API code fully documented on MSDN.

svn path=/trunk/; revision=21734
2006-04-24 20:26:02 +00:00
Ged Murphy
b4d255e040 - The start of a revamp of the UI. This is still not yet finished, but I'm committing anyway as it's looks much better already.
- Added a vast amount of resources for shell32. Resources now follow the Windows naming method for compatability with themes (one day).
- Removed the old Wine icons out of the .rc file and each icon is now stored in binary for easy maintenance.
- Many more icons to come for other libs (e.g. comctl32) plus separate programs, followed by the toolbars then moving onto other areas.
- I have some documentation to keep track of the Windows v ReactOS icons, including resource names, if anyone needs to work with it or is just generally nosey :)

svn path=/trunk/; revision=21733
2006-04-24 19:09:33 +00:00
Andrew Munger
0962d9ef05 Create the pagefile at the root of the drive by default. Now when you install to an alternate %systemroot%, you can still have a page file.
svn path=/trunk/; revision=21732
2006-04-24 18:32:35 +00:00
Maarten Bosma
3582ded91e Sorry did set DebugPort to COM1
svn path=/trunk/; revision=21731
2006-04-24 18:32:21 +00:00
Maarten Bosma
f45cebc073 Set Freeloader timeout to 0 for release builds.
svn path=/trunk/; revision=21728
2006-04-24 10:54:06 +00:00
Hervé Poussineau
8e197e1502 Add some defines
svn path=/trunk/; revision=21727
2006-04-24 10:51:34 +00:00
Magnus Olsen
c2698a1559 patch from w3seek : create smss with a current directory (system path), Otherwise the current directory for all early processes will be NULL. Fixes some inf installation issues reported by Herve.
svn path=/trunk/; revision=21725
2006-04-23 17:31:07 +00:00
Hervé Poussineau
c0d2baafb0 Fully implement SetupDiGetDriverInfoDetailW
svn path=/trunk/; revision=21720
2006-04-23 11:41:59 +00:00
Saveliy Tretiakov
f2aae2c5a1 [AUDIT]
\trunk\reactos\drivers\filesystems\np (Unlocked)
Eric Kohl confirmed npfs is clean.


svn path=/trunk/; revision=21717
2006-04-23 08:58:28 +00:00
Saveliy Tretiakov
096c04f529 [AUDIT]
\trunk\reactos\drivers\filesystems\ms (Unlocked)
Eric Kohl confirmed mailslot filesystem is clean.


svn path=/trunk/; revision=21716
2006-04-23 08:56:14 +00:00
Saveliy Tretiakov
a5bc761fdd [AUDIT]
\trunk\reactos\drivers\filesystems\fs_rec (audit)
Eric Kohl confirmed fs_rec is clean. Inspired by Bo Branten's file system recognizer. 


svn path=/trunk/; revision=21715
2006-04-23 08:52:45 +00:00
Hervé Poussineau
5028ed87a4 Fix little bug in mouse detection
Create unnamed FDOs
Read only registry parameters which make sense
Start to read mouse only when receiving IRP_MN_START_DEVICE
Cleanup of code

svn path=/trunk/; revision=21714
2006-04-23 08:46:25 +00:00
Hervé Poussineau
d8c61be337 [AUDIT]
\trunk\reactos\drivers\input\sermouse (Unlocked)
I (the author) confirmed sermouse is clean.

svn path=/trunk/; revision=21713
2006-04-23 08:44:06 +00:00
Hervé Poussineau
7d327991c4 Don't tell we succeeded IOCTL_KEYBOARD_QUERY_INDICATORS and IOCTL_KEYBOARD_QUERY_INDICATOR_TRANSLATION, as it is not true.
Fixes bug 1408

svn path=/trunk/; revision=21711
2006-04-22 18:00:47 +00:00
Saveliy Tretiakov
3c59aa8caa [AUDIT]
\trunk\reactos\drivers\filesystems\cdfs (Unlocked)
Eric Kohl confirmed cdfs is clean.  Based on vfatc code and iso-9660 documentation. 


svn path=/trunk/; revision=21710
2006-04-22 16:36:21 +00:00
Saveliy Tretiakov
93ed460d59 [AUDIT]
\trunk\reactos\dll\win32\userenv (Unlocked)
Eric Kohl (the author) confirmed he used clean methods to develop 
this dll. It was written using a lot of test code. Thomas 
Weidenmueller, another contributor, also confirmed his code is clean.


svn path=/trunk/; revision=21709
2006-04-22 16:27:31 +00:00
Hervé Poussineau
99ea202a07 Don't dereference device objects if they were not referenced
Remove one hack from kbdclass

svn path=/trunk/; revision=21708
2006-04-22 14:08:43 +00:00
Saveliy Tretiakov
d7c29a3b3f [AUDIT]
\trunk\reactos\drivers\filesystems\ntfs (Unlocked)
Eric Kohl confirmed ntfs driver is clean.


svn path=/trunk/; revision=21707
2006-04-22 14:06:53 +00:00
Saveliy Tretiakov
a4b7bd846c [AUDIT]
\trunk\reactos\drivers\base\blue (unlocked)
Eric Kohl confirmed blue is clean.


svn path=/trunk/; revision=21706
2006-04-22 14:01:25 +00:00
Saveliy Tretiakov
4dc0942610 [AUDIT]
\trunk\reactos\drivers\base\beep (Unlocked)
Eric Kohl confirmed beep is clean.


svn path=/trunk/; revision=21705
2006-04-22 13:58:53 +00:00
Saveliy Tretiakov
48c6a3665b [AUDIT]
\trunk\reactos\base\setup\usetup (Unlocked)
Eric Kohl confirmed usetup is clean.


svn path=/trunk/; revision=21704
2006-04-22 13:55:01 +00:00
Saveliy Tretiakov
4b57ceb55c [AUDIT]
\trunk\reactos\tools\mkhive (Unlocked)
Eric Kohl confirmed mkhive is clean.


svn path=/trunk/; revision=21703
2006-04-22 13:09:28 +00:00
Ged Murphy
084c375c11 Remove reg button in ReactOS. It made the toolbar a bit long, plus regedit should be used.
svn path=/trunk/; revision=21702
2006-04-22 12:39:42 +00:00
Saveliy Tretiakov
12b2c06aee Andrey Korotaev (unC0Rr@inbox.ru):
Ru.rc: Reflect latest changes. Improved elements layout.
settings.c: Sort by width, not only height.


svn path=/trunk/; revision=21701
2006-04-22 11:55:09 +00:00
Maarten Bosma
f1026bbe49 [AUDIT]
They are bitmaps and do not look like window's

svn path=/trunk/; revision=21700
2006-04-22 06:24:00 +00:00
Maarten Bosma
df98c9f40d [AUDIT]
Unlock: They are no code.

svn path=/trunk/; revision=21699
2006-04-22 06:06:11 +00:00
Saveliy Tretiakov
7e43b49d97 [AUDIT]
\trunk\reactos\drivers\bus\acpi (Unlocked)
Alex Ionescu says this code is clean: it's 99% from bsd/linux acpi driver with a single header for NT wrapper, which he thinks was done by arty and is 100% clean. It only does things like malloc->ExAllocatePool.


svn path=/trunk/; revision=21698
2006-04-22 05:55:17 +00:00
Saveliy Tretiakov
aa7b55c728 Art Yerkes said this should be deleted.
svn path=/trunk/; revision=21697
2006-04-22 05:37:07 +00:00
Saveliy Tretiakov
5f32fbc304 [AUDIT]
\trunk\reactos\lib\drivers\ip (Unlocked)
Art Yerkes confirmed this is clean.


svn path=/trunk/; revision=21696
2006-04-22 05:27:40 +00:00
Saveliy Tretiakov
d1cd839986 [AUDIT]
\trunk\reactos\drivers\network\tdi (Unlocked)
Virtually empty. Art Yerkes confirmed it's clean.


svn path=/trunk/; revision=21695
2006-04-22 05:22:34 +00:00
Saveliy Tretiakov
e7aa2f3d9b [AUDIT]
\trunk\reactos\drivers\network\tcpip (uNLOCKED)
Combination of Casper and Art Yerkes work. Mostly rewritten by Art Yerkes, he agreed it's clean.


svn path=/trunk/; revision=21694
2006-04-22 05:15:29 +00:00
Saveliy Tretiakov
65b8c1c64b [AUDIT]
reactos/drivers/network/lan (Unlocked)
Art Yerkes says this is clean. derived from tcpip/datalink/lan.c


svn path=/trunk/; revision=21693
2006-04-22 04:56:37 +00:00
Saveliy Tretiakov
8868a11fd1 Respect wine's indentation. Tabs -> spaces.
svn path=/trunk/; revision=21692
2006-04-22 04:50:37 +00:00
Ged Murphy
d9ff34c976 [AUDIT]
mmsys.cpl
Clear formatted Win32 API code fully documented on MSDN.
This code doesn't do much at present besides display a dialog

svn path=/trunk/; revision=21691
2006-04-21 23:05:18 +00:00
Ged Murphy
8a7427520d [AUDIT]
main.cpl
Clear formatted Win32 API code fully documented on MSDN.
This code doesn't do much at present besides display a dialog

svn path=/trunk/; revision=21690
2006-04-21 22:55:57 +00:00
Saveliy Tretiakov
be29b894bc [AUDIT]
\trunk\reactos\drivers\network\afd (UNLOCKED)
Art Yerkes vouch this is clean.


svn path=/trunk/; revision=21689
2006-04-21 17:45:51 +00:00
Saveliy Tretiakov
6cc78e8c8b [AUDIT]
/trunk/reactos/lib/drivers/oskittcp/oskittcp/ (unlocked)
3rd party code. Copyright (c) The Regents of the University of California.


svn path=/trunk/; revision=21688
2006-04-21 16:53:24 +00:00
Saveliy Tretiakov
630769f746 [AUDIT]
\trunk\reactos\base\applications\utils\pice (unlocked)
Port of pice.sourceforge.net


svn path=/trunk/; revision=21687
2006-04-21 16:36:34 +00:00
Saveliy Tretiakov
64df215733 Respect wine's indentation. Tabs -> spaces.
svn path=/trunk/; revision=21686
2006-04-21 16:28:25 +00:00
Peter Ward
a585852cdb [AUDIT]
reactos\base\applications\cacls (Unlocked):
- The author Thomas Weidenmueller has confirmed that this is clean.

svn path=/trunk/; revision=21685
2006-04-21 16:06:08 +00:00
Peter Ward
bc88c9c915 [AUDIT]
reactos\base\applications\gettype (Unlocked):
- The author Brandon Turner has confirmed that this is clean.

svn path=/trunk/; revision=21684
2006-04-21 15:47:50 +00:00
Peter Ward
6ef238eea3 [AUDIT]
reactos\lib\string (Unlocked):
- Clean.

svn path=/trunk/; revision=21683
2006-04-21 15:15:18 +00:00
Peter Ward
a0a28fad63 [AUDIT]
reactos\lib\libwine (Unlocked):
- Wine code.

svn path=/trunk/; revision=21682
2006-04-21 15:04:14 +00:00
Peter Ward
19e3304412 [AUDIT]
reactos\lib\kjs (Unlocked):
- 3rd Party.

svn path=/trunk/; revision=21681
2006-04-21 15:00:24 +00:00
Hervé Poussineau
4614dc266e Fix a wrong copy/paste in UNICODE version of route.exe
svn path=/trunk/; revision=21680
2006-04-21 08:03:19 +00:00
Klemens Friedl
299cf3cd06 Update german language file
svn path=/trunk/; revision=21679
2006-04-21 06:51:59 +00:00
Ged Murphy
6f15819ed2 Add the same bitmap to the settings page too.
Needs the background masking out though ...

svn path=/trunk/; revision=21678
2006-04-20 22:25:53 +00:00
Ged Murphy
fbf34c7981 Display a monitor behind the background picker on the display control panel.
Other languages needs their resources updating so it doesn't look messy. No time to do it, it's too late ;)

svn path=/trunk/; revision=21677
2006-04-20 22:18:12 +00:00
Saveliy Tretiakov
4155fe153a [AUDIT]
\trunk\reactos\lib\uuid (Unlocked)
Wine code.


svn path=/trunk/; revision=21675
2006-04-20 16:19:57 +00:00
Saveliy Tretiakov
a31a95e611 Add GDB property for debugging with gdb
svn path=/trunk/; revision=21674
2006-04-20 16:13:50 +00:00
Saveliy Tretiakov
e3dc3ea163 Update tests
svn path=/trunk/; revision=21673
2006-04-20 16:00:36 +00:00
Saveliy Tretiakov
1b9586156b Implement context handle support for servers: NdrServerContextMarshall, NdrServerContextUnmarshall, NDRSContextMarshall, NDRSContextUnmarshall.
MSDN context handle examples now work in ros. Context rundown routines don't work yet.


svn path=/trunk/; revision=21672
2006-04-20 15:45:01 +00:00
Christoph von Wittich
859360830e draw icons with the correct size
fixes the last Miranda menu issue I know of

svn path=/trunk/; revision=21671
2006-04-20 07:03:58 +00:00
Magnus Olsen
836aa765da bug 1346 : patch from w3seek : Support SE_FILE_OBJECT in GetNamedSecurityInfo
svn path=/trunk/; revision=21670
2006-04-20 04:36:18 +00:00
Magnus Olsen
f913f2a8f4 Bug 1345 : patch from w3seek Fixes for BuildTrusteeWithObjectsAndName, BuildTrusteeWithObjectsAndSid and GetTrusteeName
A test apps exits also from w3seek not commited.

svn path=/trunk/; revision=21669
2006-04-20 04:28:47 +00:00
Ged Murphy
b6900e8ae0 [AUDIT]
reporterror
This is a ReactOS application unrelated to Windows. However I've been through the code anyway and it comprises of modular code documented on MSDN.

svn path=/trunk/; revision=21668
2006-04-19 20:56:44 +00:00
Ged Murphy
e81df84a04 [AUDIT]
sc
I am the author and can verify this code is clean

svn path=/trunk/; revision=21667
2006-04-19 20:21:43 +00:00
Ged Murphy
0534fe7c0d [AUDIT]
route
currently a very basic app which uses simple iphlpapi functions.

svn path=/trunk/; revision=21666
2006-04-19 20:19:51 +00:00
Ged Murphy
4178c709bd this was missed when netstat was unlocked originally
svn path=/trunk/; revision=21665
2006-04-19 20:15:45 +00:00
Ged Murphy
aca11294e4 [AUDIT]
hostname
it only calls GetComputerName. I think it's safe to assume this is clean :)

svn path=/trunk/; revision=21664
2006-04-19 20:14:03 +00:00
Ged Murphy
20cc933b0c cleaner, revamped speaker icon.
svn path=/trunk/; revision=21662
2006-04-18 22:35:20 +00:00
Christoph von Wittich
7850d9f178 changed window caption to design proposal from #reactos channel
svn path=/trunk/; revision=21661
2006-04-18 20:06:30 +00:00
Christoph von Wittich
990019c419 UI improvement (window captions)
svn path=/trunk/; revision=21660
2006-04-18 19:29:47 +00:00
Hervé Poussineau
ffd89368ef No need to write "Serenum:" at the start of each debug string
svn path=/trunk/; revision=21659
2006-04-18 19:26:48 +00:00
Magnus Olsen
57c69510f1 wrong line break in the translations
svn path=/trunk/; revision=21658
2006-04-18 19:05:05 +00:00
Ged Murphy
a4c71b513b Reduce the size a bit.
svn path=/trunk/; revision=21657
2006-04-18 18:16:11 +00:00
Magnus Olsen
852e3f2ad4 [AUDIT] format this util is written from scratch, simple cmd command, and after looking through code no signs of reverse engineering were found
svn path=/trunk/; revision=21656
2006-04-18 17:46:46 +00:00
Magnus Olsen
fb106bc2a8 [AUDLT] Clean from wine
svn path=/trunk/; revision=21655
2006-04-18 17:45:55 +00:00
Ged Murphy
bc697aebe9 [AUDIT]
tcpsvcs
I am the author and can verify this code is clean

svn path=/trunk/; revision=21654
2006-04-18 17:24:16 +00:00
Magnus Olsen
9f3720e359 Dutch translations from the dutch translations team,
cacls, getfirefox, msconfig, sndvol32, taskmgr by  Maurus Cuelenaere,  winemine by  Maurus Cuelenaere  
winlogon by Eric Janssen  

svn path=/trunk/; revision=21653
2006-04-18 17:23:29 +00:00
Christoph von Wittich
ca3a742dba fix ownerdraw menu for miranda (patch by Brezenbak)
svn path=/trunk/; revision=21652
2006-04-18 17:17:08 +00:00
Ged Murphy
904d3ca622 - convert the floating windows to use pointers within the main structure
- allow showing and hiding of floating windows
- implement a rough version of the history interface
- temp draw a suggestion on how the color window could look.
- insert a few menu hints
- lots of half implemented of temp stuff in this commit, but committing now before the patch gets any bigger.

svn path=/trunk/; revision=21651
2006-04-18 16:42:54 +00:00
Magnus Olsen
6da6e80112 fast cleanup in dib/dib24bpp.c, Fixing a crash bug in dib32bpp.c (typo from me), xlate XO_TABLE can resive 0xffff or 0xffff or 0xffffff or 0xffffffff as color code for table, but the table is only 256 but in color&FF, That will stop firefox crash and translate the color right.
svn path=/trunk/; revision=21650
2006-04-18 15:52:48 +00:00
Christoph von Wittich
e5a4bd769c added dutch translation patch written by mcuelenaere <mcuelenaere@gmail.com>
fixes bug 1371

svn path=/trunk/; revision=21649
2006-04-18 13:32:17 +00:00
Christoph von Wittich
8898216301 fixed bug 1406
fixed a typo in german rc file

svn path=/trunk/; revision=21648
2006-04-18 13:26:40 +00:00
Christoph von Wittich
ab48d70466 set eol-style:native
fixed inconsistent newlines

svn path=/trunk/; revision=21647
2006-04-18 13:01:11 +00:00
Christoph von Wittich
8929ea7829 fixed bug 1407
svn path=/trunk/; revision=21646
2006-04-18 12:52:18 +00:00
Magnus Olsen
f29eac23ec Fix the xlate bug in 24dib correct fix more buttom showing right in firefox now
svn path=/trunk/; revision=21645
2006-04-18 09:47:51 +00:00
Magnus Olsen
f0c7bff035 fix 16 to 16 soyrce dest why the hell does th 16bitmap surface calls into this
svn path=/trunk/; revision=21644
2006-04-17 21:28:02 +00:00
Maarten Bosma
e495c66834 sort alphabetically
svn path=/trunk/; revision=21643
2006-04-17 19:12:49 +00:00
Aleksey Bragin
473cb1c0c6 - Update Wine-sync related doc
svn path=/trunk/; revision=21642
2006-04-17 18:11:17 +00:00
Maarten Bosma
c727e592a6 Open .ini and .inf with notepad
svn path=/trunk/; revision=21641
2006-04-17 17:54:45 +00:00
Ged Murphy
85800c3f71 remove a few wineisms, they are in out main header now.
svn path=/trunk/; revision=21640
2006-04-17 17:47:39 +00:00
Maarten Bosma
ac88573f07 Comment out the line which sets the default folder. Looks like our shell32 can not handle it. Now folders got a folder icon again. Thanks to EmuandCo for regression testing.
svn path=/trunk/; revision=21639
2006-04-17 17:39:11 +00:00
Ged Murphy
a6b77e1696 put cursor back into the text box if you skip too far.
This always used to catch me out when rushing an install .... alas, it shall bug me no more :)

svn path=/trunk/; revision=21638
2006-04-17 17:11:51 +00:00
Ged Murphy
ff0d599914 remove redefined values.
svn path=/trunk/; revision=21637
2006-04-17 14:07:43 +00:00
Magnus Olsen
7b4a231767 Bug 1363 : patch accpect with small change, review by me and hpoussin
svn path=/trunk/; revision=21636
2006-04-17 14:05:19 +00:00
Ged Murphy
e2ba765506 Bit of fun. Add a built-in coded message for the first time the screensaver is run.
If removed, it will not reappear.

svn path=/trunk/; revision=21635
2006-04-17 13:35:40 +00:00
Hervé Poussineau
dbcd6ec20e Fix VMware display driver installation
svn path=/trunk/; revision=21634
2006-04-17 12:18:47 +00:00
Hervé Poussineau
17ff6b4adf [AUDIT]
No suspicious code detected in vmwinst

svn path=/trunk/; revision=21633
2006-04-17 12:16:54 +00:00
Magnus Olsen
2bca0c0fcc Fix for ReactOS build system
Fixing all warings in the code it will make gcc queit
Remove pargma they should have been set in the project file not hard code it.

svn path=/trunk/; revision=21632
2006-04-17 11:26:50 +00:00
Peter Ward
8d75625cdb - Fix indentation (spaces -> TABs).
svn path=/trunk/; revision=21631
2006-04-17 11:13:48 +00:00
Magnus Olsen
659c768c6e import matrix screensaver secon try
svn path=/trunk/; revision=21629
2006-04-17 10:56:11 +00:00
Magnus Olsen
f31166fa5c delete matrix I did someting wrong with the import
svn path=/trunk/; revision=21628
2006-04-17 10:54:14 +00:00
Magnus Olsen
dc66a10877 import matrix screen saver
svn path=/trunk/; revision=21627
2006-04-17 10:50:25 +00:00
Magnus Olsen
dd384ab95e prepare for import of matrix screensavers (break the build for short while)
svn path=/trunk/; revision=21626
2006-04-17 10:47:01 +00:00
Magnus Olsen
47ff3fad63 prepare for screensaver : Adding win32scr as target it genrate a .scr file instead for a win32gui
svn path=/trunk/; revision=21624
2006-04-17 10:08:35 +00:00
Ged Murphy
8c37aa119a add some commctrl.h definitions
svn path=/trunk/; revision=21623
2006-04-17 09:21:11 +00:00
Aleksey Bragin
b59203d3a1 Sync to Wine-0_9_9:
Francois Gouget <fgouget@free.fr>
- mapi: Add some missing MAPI prototypes.
  Add some missing MAPI prototypes to mapi.h (spotted by winapi_check)
  and include it where they are implemented.
  Make mapi.h and mapix.h compatible. gcc does not like macros and
  prototypes to be redefined so this involved protecting against
  multiple definitions.
  Fix the MAPISendMail() implementation prototype.

Sync to Wine-0_9_8:
Hans Leidekker <hans@it.vu.nl>
- mapi32: Implementation for MAPISendMail.
  Implement MAPISendMail, stub MAPILogoff and make the stubs for
  MAPIInitialize, MAPILogon{,Ex} and MAPILogoff return success.
- mapi32: Prevent freeing non-allocated memory.

svn path=/trunk/; revision=21622
2006-04-17 07:45:48 +00:00
Aleksey Bragin
fb6d030c7c - Fix build (by adding needed temporary file)
svn path=/trunk/; revision=21621
2006-04-17 07:21:25 +00:00
Aleksey Bragin
83e8c1a2f3 - Comment an error-setting line since we don't have get_sock_error() function
- Something different should be used here
- This change fixes building of the component

svn path=/trunk/; revision=21620
2006-04-16 20:10:12 +00:00
Aleksey Bragin
9434974968 Please pay attention this code includes a hack by me to have inet_ntop() function implementation just for this dll.
Sync to Wine-0_9_10:
Andrбs Kovбcs <andras@csevego.net>
- wininet: Added Hungarian translation.
Robert Shearman <rob@codeweavers.com>
- wininet: Don't continue to connect to a secure server without SSL support since it won't work.
- wininet: Implement setting of send and receive timeouts.

Sync to Wine-0_9_8:
Robert Shearman <rob@codeweavers.com>
- wininet: Documentation fixes.
Petr Tesarik <hat@tesarici.cz>
- wininet: Czech language resources encoding fix.
Fatih Ac <fasici@linux-sevenler.org>
- wininet: Turkish translation.

Sync to Wine-0_9_7:
Aric Stewart <aric@codeweavers.com>
- wininet: INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT work.
  Beginning of framework to implement handling of InternetQueryOption
  for INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT.

Sync to Wine-0_9_6:
Jacek Caban <jacek@codeweavers.com>
- wininet: lpvStatusInfo in INTERNET_STATUS_NAME_RESOLVED,
  INTERNET_STATUS_CONNECTING_TO_SERVER and
  INTERNET_STATUS_CONNECTED_TO_SERVER should be strings, not
  sockaddr_in.

svn path=/trunk/; revision=21619
2006-04-16 20:07:09 +00:00
Aleksey Bragin
8b7ae92cc7 SVN Maintenance (eol-style: native)
svn path=/trunk/; revision=21618
2006-04-16 19:15:04 +00:00
Aleksey Bragin
41f90c8fd7 Sync to Wine-0_9_10:
Juan Lang <juan_lang@yahoo.com>
- crypt32: Move context properties to a separate file.
- crypt32: Move serialization functions to serialize.c.
- crypt32: Implement CertGetValidUsages.
- crypt32: Implement CertDuplicateStore.

Sync to Wine-0_9_9:
Juan Lang <juan_lang@yahoo.com>
- crypt32: implement CryptEnumOIDInfo and CryptFindOIDInfo.
- implement CryptEnumOIDInfo and CryptFindOIDInfo
- implement CertOIDToAlgId and CertAlgIdToOID using CryptFindOIDInfo
- crypt32: Move certificate store functions to their own file.
- crypt32: More encoding/decoding.
  Add support for encoding/decoding basic constraints and enhanced key
  usage, with tests.
- crypt32: Move OIDToAlgID and AlgIDToOID to oid.c.
- crypt32: Correct compile problem on gcc 2.95.
- crypt32: Partially implement CertGetNameString.
Henning Gerhardt <henning.gerhardt@web.de>
- crypt32: Add German resource file.
YunSong Hwang <hys545@dreamwiz.com>
- crypt32: Add Korean translation.
Alexander N. Sшrnes <alex@thehandofagony.com>
- Updated/new Norwegian Bokmеl resources.
Eric Pouech <eric.pouech@wanadoo.fr>
- crypt32: Don't access a blob after freeing it.
Sync to Wine-0_9_8:
Juan Lang <juan_lang@yahoo.com>
- crypt32: Fix a fixme, and remove an old comment.
- crypt32: Output string type in trace.
Alexandre Julliard <julliard@winehq.org>
- Include wine/port.h in files that use exceptions.

Sync to Wine-0_9_7:
Juan Lang <juan@codeweavers.com>
- crypt32: Implement CertRDNValueToStrA and CertNameToStrA, with tests.
- crypt32: Correct X509_NAME decoding, and more stringent tests.
- crypt32: Implement CertRDNValueToStrW and CertNameToStrW, with tests.

svn path=/trunk/; revision=21617
2006-04-16 19:12:28 +00:00
Aleksey Bragin
e4af2a5bf8 - Update wincrypt.h to correspond to Wine-0.9.10
svn path=/trunk/; revision=21616
2006-04-16 18:44:08 +00:00
Aleksey Bragin
8acabff6ea Sync to Wine-0_9_9:
Juan Lang <juan_lang@yahoo.com>
- wintrust: Add some stubs.

svn path=/trunk/; revision=21615
2006-04-16 18:24:52 +00:00
Aleksey Bragin
a592154d29 Sync to Wine-0_9_10:
Francois Gouget <fgouget@free.fr>
- Fix compatibility with native advpack dlls.

Sync to Wine-0_9_7:
Dmitry Timoshkov <dmitry@codeweavers.com>
- Make more arrays const.

Sync to Wine-0_9_6:
Jacek Caban <jacek@codeweavers.com>
- urlmon: Pass FORMATETC to OnDataAvailable.
- urlmon: Added implementation of protocol stream.
- urlmon: Added implementation of QueryService and stub implementation
  of IHttpNegotiate2 interface.
- urlmon: Query service provider for IInternetProtocol.
- urlmon: Added GetBindInfoString implementation.
- urlmon: Reimplement CoInternetCombineUrl to use pluggable protocol.
- urlmon: Use CoInternetCombineUrl in URLMonikerImpl_Construct.
- urlmon: Fix ref counting.
Rolf Kalbermatter <rolf.kalbermatter@citeng.com>
- urlmon: Fix a LARGE_INTEGER truncation.

svn path=/trunk/; revision=21614
2006-04-16 17:34:25 +00:00
Aleksey Bragin
b54888e17e Sync to Wine-0_9_8:
Mike McCormack <mike@codeweavers.com>
- imm32: Remove FIXME messages from some implemented functions.

svn path=/trunk/; revision=21613
2006-04-16 17:04:45 +00:00
Magnus Olsen
5df0cb61bf audlt lock
svn path=/trunk/; revision=21612
2006-04-16 16:16:09 +00:00
Magnus Olsen
913bde9808 kjk_hyperion : "Breaking auditing lock for a temporary fix: allow ExEnterCriticalRegionAndAcquireFastMutexUnsafe and ExReleaseFastMutexUnsafeAndLeaveCriticalRegion to be called from any thread; fixes UserEnterShared, UserEnterExclusive and UserLeave in win32k"
svn path=/trunk/; revision=21611
2006-04-16 16:04:28 +00:00
Aleksey Bragin
2122478f7b Sync to Wine-0_9_9:
Gerold J. Wucherpfennig <gjwucherpfennig@gmx.net>
- cabinet: Set proper error information on failures.

Sync to Wine-0_9_6:
James Hawkins <truiken@gmail.com>
- cabinet: Implement Extract on top of FDI.
- cabinet: Clean up the documentation for Extract.
- cabinet: Fix the second parameter name of Extract.
- cabinet: Add documentation for FDITruncateCabinet.
- cabinet: Store the cab file handle before extracting files so we can
  close the cab file even if no files are extracted.
- cabinet: Move the remaining cabextract.c functions to fdi.c.
- cabinet: Add initial tests for Extract.
- cabinet: Add the two flags used by Extract to cabinet.h.
- cabinet: Define the flags member of the EXTRACTdest structure.

svn path=/trunk/; revision=21610
2006-04-16 15:49:02 +00:00
Magnus Olsen
1888104b32 Implement screensaver setting and preiw of screen setting working in windows not tested in reactos
svn path=/trunk/; revision=21609
2006-04-16 13:56:57 +00:00
Aleksey Bragin
11c44d0243 [AUDIT]
dll/win32/advapi32/sec

- Very small functions are clean
- Functions doing basic initialization stuff are clean (their name suggests the actions the function performs)
- Functions publically documented in google
- Stubs / unimplemented functions
- Wine's code is clean too

svn path=/trunk/; revision=21608
2006-04-16 12:49:19 +00:00
Ged Murphy
b93335e12d [AUDIT]
finger
BSD derived code

svn path=/trunk/; revision=21607
2006-04-16 12:30:40 +00:00
Ged Murphy
d84ea94c72 [AUDIT]
whois
BSD derived code

svn path=/trunk/; revision=21606
2006-04-16 12:28:10 +00:00
Ged Murphy
93ec8b0b82 [AUDIT]
ping
modular code and obviously clean.

svn path=/trunk/; revision=21605
2006-04-16 12:25:54 +00:00
Magnus Olsen
200298ace6 [AUDIT]
clean from http://www.catch22.net shall not this be in vendoer drop ??

svn path=/trunk/; revision=21604
2006-04-16 10:40:43 +00:00
Magnus Olsen
1341cc0a8a [AUDIT]
clean : winemine icon/bmp from wine. 

svn path=/trunk/; revision=21603
2006-04-16 10:33:54 +00:00
Maarten Bosma
429ccf839a Flat toolbar buttons for ibrowser
svn path=/trunk/; revision=21602
2006-04-16 10:24:11 +00:00
Ged Murphy
125ddcb3bf [AUDIT]
ibrowser
obviously clean, this is not a derivative of an MS product.

svn path=/trunk/; revision=21601
2006-04-16 10:23:20 +00:00
Ged Murphy
010ef3a277 [AUDIT]
Network tools
Unlock code I am the author of. Code was produced using clean methods

svn path=/trunk/; revision=21600
2006-04-16 10:18:54 +00:00
Hervé Poussineau
31dc05f5f1 kbdclass and mouclass:
- Better synchronization of code between kbdclass and mouclass
- Better cleanup in ClassAddDevice in case of error
- Better support of legacy devices
kbdclass only:
- Send IOCTLs to lower device

svn path=/trunk/; revision=21599
2006-04-16 07:17:34 +00:00
Hervé Poussineau
286a4f2f82 [AUDIT]
No suspicious code detected in kbdclass and mouclass.
The code is quite understandable and have comments for harder parts + they share most of their code

svn path=/trunk/; revision=21598
2006-04-16 07:11:56 +00:00
Magnus Olsen
299c670648 Bug 1393 : Patch from w3seek Fix moving class objects between desktop heaps and the shared heaps
svn path=/trunk/; revision=21596
2006-04-15 10:41:58 +00:00
Andrew Munger
88699130d7 Send in the list of DHCP options we would like to get back, some servers are not as forthcoming as others.
This allows those of you running Windows Server 2003 as your DHCP server to get a domainname and default route.
This commit is dedicated to Jaix Bly.

svn path=/trunk/; revision=21595
2006-04-15 01:25:55 +00:00
Magnus Olsen
88a9cc78ba Bug 1390 : patch from W3seek : Don't use BOOL for 1 bit members in bitfields
svn path=/trunk/; revision=21594
2006-04-14 18:28:15 +00:00
Magnus Olsen
f7f19a1a69 Bug 1391 : Commit w3seek patch for Some Ansi vs. Unicode fixes for window classes
svn path=/trunk/; revision=21593
2006-04-14 18:23:11 +00:00
Saveliy Tretiakov
a9161f0913 EngCreateBitmap may return null. Add return value checks
svn path=/trunk/; revision=21589
2006-04-14 16:31:06 +00:00
Magnus Olsen
477fabfce2 Remove this doc, w3seek told me they are too outdate
svn path=/trunk/; revision=21588
2006-04-14 11:32:55 +00:00
Magnus Olsen
c74793a96d Windows API standard from ECMA, http://www.ecma-international.org/publications/standards/Ecma-234.htm
svn path=/trunk/; revision=21587
2006-04-14 10:48:46 +00:00
Hervé Poussineau
be451e4de7 Add some network-related GUIDs
svn path=/trunk/; revision=21586
2006-04-14 10:03:58 +00:00
Saveliy Tretiakov
9241bf5b08 [AUDIT]
\trunk\reactos\dll\cpl\ncpa (Unlocked)
I reviewed code and found no signs of reverse engeneering.
All api functions used are documented in msdn. DhcpNotifyConfigChange
is not documented by msdn, but there is a lot information about it on 
the net. google returns many results.


svn path=/trunk/; revision=21584
2006-04-13 15:44:18 +00:00
Andrew Munger
b3acf144a3 INF fix committed for hpoussin. Fixes networking (for everyone but encoded).
svn path=/trunk/; revision=21583
2006-04-13 15:44:08 +00:00
Saveliy Tretiakov
21e7db1fe7 Add more stubs
svn path=/trunk/; revision=21582
2006-04-13 15:23:34 +00:00
Magnus Olsen
19517659cb Fixing some bugs in create overlay. it works now to create a overlay but it does not show it yet
svn path=/trunk/; revision=21581
2006-04-13 14:12:20 +00:00
Hervé Poussineau
c20e86702b Replace ReactOS implementation of SetupGetInfInformationW by Wine one (much more complete)
Merge from Wine (Patches by James Hawkins (<truiken@gmail.com>))
- Store the full name to the INF file in the inf_file structure
- Implement SetupGetInfInformationA 
- Implement SetupQueryInfFileInformationA/W (James Hawkins <truiken@gmail.com>)

svn path=/trunk/; revision=21580
2006-04-13 12:16:50 +00:00
Hervé Poussineau
69734f5025 Fix 2nd stage setup. Patch by w3seek
svn path=/trunk/; revision=21579
2006-04-13 11:39:25 +00:00
Magnus Olsen
3bd173b1f2 one more redisg adding a member that tells whih destions it is. it work pretty well.
svn path=/trunk/; revision=21578
2006-04-13 11:03:19 +00:00
Hervé Poussineau
e0b74935a5 Merge from Wine:
- Add Esperanto translation by Antonio Codazzi
- Add Turkish translation by Fatih Aþýcý

svn path=/trunk/; revision=21577
2006-04-13 09:22:58 +00:00
Magnus Olsen
21c7829634 This commit is redesign off ddraw primare surface, we need reach primare surface from every where. We have now a expriment code that show how to create overlay with this new design but we do not set it up right yet.
svn path=/trunk/; revision=21576
2006-04-13 09:14:32 +00:00
Hervé Poussineau
bbd318bd04 Conform better to Wine standards
svn path=/trunk/; revision=21575
2006-04-13 08:06:45 +00:00
Magnus Olsen
e55cbd36de Bugfix : hal lock surface so it does not crash any longer
svn path=/trunk/; revision=21574
2006-04-13 06:38:52 +00:00
Magnus Olsen
becc8a8d30 Implement surface unlock
svn path=/trunk/; revision=21573
2006-04-13 06:29:01 +00:00
10534 changed files with 0 additions and 3794455 deletions

View File

@@ -1,608 +0,0 @@
// irc_test.cpp
#ifdef _MSC_VER
#pragma warning ( disable : 4786 )
#endif//_MSC_VER
#include <time.h>
#include <stdio.h>
#include "File.h"
#include "ssprintf.h"
#include "trim.h"
#include "IRCClient.h"
#include "config.h"
using std::string;
using std::vector;
//vector<string> tech, module, dev, stru, period, status, type, func, irql, curse, cursecop;
class List
{
public:
string name;
bool macro;
std::vector<std::string> list;
string tag;
int last;
List() { last = -1; }
List ( const char* _name, bool _macro ) : name(_name), macro(_macro)
{
tag = ssprintf("%%%s%%",_name);
last = -1;
}
};
vector<List> lists;
vector<string> ops;
void ImportList ( const char* listname, bool macro )
{
lists.push_back ( List ( listname, macro ) );
List& list = lists.back();
File f ( ssprintf("%s.txt",listname).c_str(), "r" );
string line;
while ( f.next_line ( line, true ) )
list.list.push_back ( line );
}
const char* ListRand ( List& list )
{
vector<string>& l = list.list;
if ( !l.size() )
{
static string nothing;
nothing = ssprintf ( "<list '%s' empty>", list.name.c_str() );
return nothing.c_str();
}
else if ( l.size() == 1 )
return l[0].c_str();
int sel = list.last;
while ( sel == list.last )
sel = rand()%l.size();
list.last = sel;
return l[sel].c_str();
}
const char* ListRand ( int i )
{
return ListRand ( lists[i] );
}
int GetListIndex ( const char* listname )
{
for ( int i = 0; i < lists.size(); i++ )
{
if ( !stricmp ( lists[i].name.c_str(), listname ) )
return i;
}
return -1;
}
List& GetList ( const char* listname )
{
return lists[GetListIndex(listname)];
}
const char* ListRand ( const char* list )
{
int i = GetListIndex ( list );
if ( i < 0 )
return NULL;
return ListRand(i);
}
string TaggedReply ( const char* listname )
{
string t = ListRand(listname);
string out;
const char* p = t.c_str();
while ( *p )
{
if ( *p == '%' )
{
bool found = false;
for ( int i = 0; i < lists.size() && !found; i++ )
{
if ( lists[i].macro && !strnicmp ( p, lists[i].tag.c_str(), lists[i].tag.size() ) )
{
out += ListRand(i);
p += lists[i].tag.size();
found = true;
}
}
if ( !found )
out += *p++;
}
const char* p2 = strchr ( p, '%' );
if ( !p2 )
p2 = p + strlen(p);
if ( p2 > p )
{
out += string ( p, p2-p );
p = p2;
}
}
return out;
}
string gobble ( string& s, const char* delim )
{
const char* p = s.c_str();
p += strspn ( p, delim );
const char* p2 = strpbrk ( p, delim );
if ( !p2 ) p2 = p + strlen(p);
string out ( p, p2-p );
p2 += strspn ( p2, delim );
s = string ( p2 );
return out;
}
bool isop ( const string& who )
{
for ( int i = 0; i < ops.size(); i++ )
{
if ( ops[i] == who )
return true;
}
return false;
}
// do custom stuff with the IRCClient from your subclass via the provided callbacks...
class MyIRCClient : public IRCClient
{
File flog;
clock_t brake_silence;
// wait another 30 mins to brake the silence
#define NOIDLE brake_silence = clock () + 30 * CLK_TCK * 60
void CheckIdle ( void )
{
while (true) // _inRun
{
while (clock() < brake_silence)
Sleep(10000);
string out = TaggedReply("idle");
if ( !strnicmp ( out.c_str(), "/me ", 4 ) )
Action ( CHANNEL, &out[4] );
else
PrivMsg ( CHANNEL, out );
NOIDLE;
}
}
static void THREADAPI CallMe ( MyIRCClient* irc )
{
irc->CheckIdle();
}
public:
MyIRCClient()
{
NOIDLE;
ThreadPool::Instance().Launch ( (ThreadPoolFunc*)MyIRCClient::CallMe, this );
flog.open ( "arch.log", "r+" );
}
// see IRCClient.h for documentation on these callbacks...
bool OnConnected()
{
return true;
}
bool OnJoin ( const string& user, const string& channel )
{
//printf ( "user '%s' joined channel '%s'\n", user.c_str(), channel.c_str() );
return true;
}
bool OnPart ( const std::string& user, const std::string& channel )
{
std::vector<std::string>::iterator it = ops.begin();
for ( ; it != ops.end(); it++ )
{
if ( *it == user )
{
printf ( "remove '%s' to ops list\n", user.c_str() );
ops.erase ( it );
}
}
return true;
}
bool OnNick ( const std::string& oldNick, const std::string& newNick )
{
for ( int i = 0; i < ops.size(); i++ )
{
if ( ops[i] == oldNick )
{
printf ( "op '%s' changed nick to '%s'\n", oldNick.c_str(), newNick.c_str() );
ops[i] = newNick;
return true;
}
}
return true;
}
bool OnEndChannelUsers ( const string& channel )
{
return true;
}
bool OnPrivMsg ( const string& from, const string& text )
{
//flog.flush();
printf ( "<%s> %s\n", from.c_str(), text.c_str() );
flog.printf ( "<%s> %s\n", from.c_str(), text.c_str() );
if ( !isop(from) )
return PrivMsg ( from, "hey, your tongue doesn't belong there!" );
else if ( strnicmp ( text.c_str(), "!say ", 5 ) )
return PrivMsg ( from, "Talk to me on normal Chanel" );
string say = trim(&text[5]);
if ( !strnicmp ( say.c_str(), "/me ", 4 ) )
return Action ( CHANNEL, trim(&say[4]) );
else
return PrivMsg ( CHANNEL, trim(say) );
}
bool OnChannelMsg ( const string& channel, const string& from, const string& text )
{
fflush ( flog );
printf ( "%s <%s> %s\n", channel.c_str(), from.c_str(), text.c_str() );
flog.printf ( "%s <%s> %s\n", channel.c_str(), from.c_str(), text.c_str() );
NOIDLE; // add 30 mins till idle
bool found_name = false;
string text2 ( text );
strlwr ( &text2[0] );
if ( !strnicmp ( text.c_str(), BOTNAME, strlen(BOTNAME) ) )
found_name = true;
string s ( text );
if ( found_name )
gobble ( s, " \t" ); // remove bot name
// command
if ( s[0] == '!' )
{
bool from_op = isop(from);
string cmd = gobble ( s, " \t" );
// from all
if ( false && cmd == "!svn" && from == "TechBot" ) // || cmd == "!help" && !TechBotOnline
{
PrivMsg ( channel, "For my help try !what." );
}
// from normel user
else if ( !from_op )
{
if ( cmd == "!grovel" )
{
string out = ssprintf(TaggedReply("nogrovel").c_str(),from.c_str());
if ( !strnicmp ( out.c_str(), "/me ", 4 ) )
return Action ( channel, &out[4] );
else
return PrivMsg ( channel, out );
}
else if ( cmd == "!what" )
{
return PrivMsg ( channel, ssprintf("For you, %s, I only support the \"!grovel\" command.", from.c_str()).c_str() );
}
else if ( cmd == "!grovel" || cmd == "!kiss" || cmd == "!hug"
|| cmd == "!give" || cmd == "!what" || cmd == "!add" || cmd == "!remove" )
{
PrivMsg ( channel, ssprintf("%s: I only take commands from ops",from.c_str()) );
}
}
// from op
else if ( cmd == "!grovel" )
{
string out = ssprintf(TaggedReply("grovel").c_str(),from.c_str());
if ( !strnicmp ( out.c_str(), "/me ", 4 ) )
return Action ( channel, &out[4] );
else
return PrivMsg ( channel, out );
}
else if ( cmd == "!kiss" )
{
if ( s.size() )
return Action ( channel, ssprintf("kisses %s",s.c_str()) );
else
return PrivMsg ( channel, ssprintf("%s: huh?",from.c_str()) );
}
else if ( cmd == "!hug" )
{
if ( s.size() )
return Action ( channel, ssprintf("hugs %s",s.c_str()) );
else
return PrivMsg ( channel, ssprintf("%s: huh?",from.c_str()) );
}
else if ( cmd == "!give" )
{
string who = gobble(s," \t");
if ( who.size() && s.size() )
return Action ( channel, ssprintf("gives %s a %s",who.c_str(),s.c_str()) );
else
return PrivMsg ( channel, ssprintf("%s: huh?",from.c_str()) );
}
else if ( cmd == "!what" )
{
PrivMsg ( channel, "For ops I support the following commands:" );
PrivMsg ( channel, "!grovel" );
PrivMsg ( channel, "!kiss" );
PrivMsg ( channel, "!hug" );
PrivMsg ( channel, "!give" );
PrivMsg ( channel, "!say (the input is a private message)" );
PrivMsg ( channel, "!add" );
PrivMsg ( channel, "!remove" );
PrivMsg ( channel, " - for more info see wiki" );
}
else if ( cmd == "!add" )
{
string listname = gobble ( s, " \t" );
int i = GetListIndex ( listname.c_str() );
if ( i == -1 )
return PrivMsg ( channel, ssprintf("%s: I don't have a list named '%s'",from.c_str(),listname.c_str()) );
List& list = lists[i];
if ( s[0] == '\"' || s[0] == '\'' )
{
char delim = s[0];
const char* p = &s[1];
const char* p2 = strchr ( p, delim );
if ( !p2 )
return PrivMsg ( channel, ssprintf("%s: Couldn't add, unmatched quotes",from.c_str()) );
s = string ( p, p2-p );
}
for ( i = 0; i < list.list.size(); i++ )
{
if ( list.list[i] == s )
return PrivMsg ( channel, ssprintf("%s: entry already exists in list '%s'",from.c_str(),listname.c_str()) );
}
if ( !stricmp ( listname.c_str(), "curse" ) )
strlwr ( &s[0] );
list.list.push_back ( s );
{
File f ( ssprintf("%s.txt",list.name.c_str()), "w" );
for ( i = 0; i < list.list.size(); i++ )
f.printf ( "%s\n", list.list[i].c_str() );
}
return PrivMsg ( channel, ssprintf("%s: entry added to list '%s'",from.c_str(),listname.c_str()) );
}
else if ( cmd == "!remove" )
{
string listname = gobble ( s, " \t" );
int i = GetListIndex ( listname.c_str() );
if ( i == -1 )
return PrivMsg ( channel, ssprintf("%s: I don't have a list named '%s'",from.c_str(),listname.c_str()) );
List& list = lists[i];
if ( s[0] == '\"' || s[0] == '\'' )
{
char delim = s[0];
const char* p = &s[1];
const char* p2 = strchr ( p, delim );
if ( !p2 )
return PrivMsg ( channel, ssprintf("%s: Couldn't add, unmatched quotes",from.c_str()) );
s = string ( p, p2-p );
}
std::vector<std::string>::iterator it = list.list.begin();
for ( ; it != list.list.end(); it++ )
{
if ( *it == s )
{
list.list.erase ( it );
{
File f ( ssprintf("%s.txt",list.name.c_str()), "w" );
it = list.list.begin();
for ( ; it < list.list.end(); it++ )
f.printf ( "%s\n", it->c_str() );
}
return PrivMsg ( channel, ssprintf("%s: entry removed from list '%s'",from.c_str(),listname.c_str()) );
}
}
return PrivMsg ( channel, ssprintf("%s: entry doesn't exist in list '%s'",from.c_str(),listname.c_str()) );
}
else
{
if (found_name)
return PrivMsg ( channel, ssprintf("%s: huh?",from.c_str()) );
}
} // if (command)
bool found_curse = false;
static vector<string>& curse = GetList("curse").list;
text2 = " " + text2 + " ";
for ( int i = 0; i < curse.size() && !found_curse; i++ )
{
if ( strstr ( text2.c_str(), curse[i].c_str() ) )
found_curse = true;
}
if ( found_curse )
{
static List& cursecop = GetList("cursecop");
return PrivMsg ( channel, ssprintf("%s: %s", from.c_str(), ListRand(cursecop)) );
}
string botname (BOTNAME);
strlwr ( &botname[0] );
//botname = " " + botname + " ";
if ( strstr(text2.c_str(), botname.c_str()) || strstr(text2.c_str(), " arch ") || found_name )
{
string out = ssprintf("%s: %s", from.c_str(), TaggedReply("tech").c_str());
flog.printf ( "TECH-REPLY: %s\n", out.c_str() );
if ( !strnicmp ( out.c_str(), "/me ", 4 ) )
return Action ( channel, &out[4] );
else
return PrivMsg ( channel, out );
}
return true;
} // On Chanel Message
bool OnChannelMode ( const string& channel, const string& mode )
{
//printf ( "OnChannelMode(%s,%s)\n", channel.c_str(), mode.c_str() );
return true;
}
bool OnUserModeInChannel ( const string& src, const string& channel, const string& mode, const string& target )
{
printf ( "OnUserModeInChannel(%s,%s,%s,%s)\n", src.c_str(), channel.c_str(), mode.c_str(), target.c_str() );
const char* p = mode.c_str();
if ( !p )
return true;
while ( *p )
{
switch ( *p++ )
{
case '+':
while ( *p != 0 && *p != ' ' )
{
if ( *p == 'o' )
{
printf ( "adding '%s' to ops list\n", target.c_str() );
ops.push_back ( target );
}
break;
}
break;
case '-':
while ( *p != 0 && *p != ' ' )
{
if ( *p == 'o' )
{
std::vector<std::string>::iterator it = ops.begin();
for ( ; it != ops.end(); it++ )
{
if ( *it == target )
{
printf ( "remove '%s' to ops list\n", target.c_str() );
ops.erase ( it );
}
}
break;
}
}
}
}
return true;
}
bool OnMode ( const string& user, const string& mode )
{
//printf ( "OnMode(%s,%s)\n", user.c_str(), mode.c_str() );
return true;
}
bool OnChannelUsers ( const string& channel, const vector<string>& users )
{
//printf ( "[%s has %i users]: ", channel.c_str(), users.size() );
for ( int i = 0; i < users.size(); i++ )
{
if ( users[i][0] == '@' )
ops.push_back ( &users[i][1] );
/*if ( i )
printf ( ", " );
printf ( "%s", users[i].c_str() );*/
}
//printf ( "\n" );
return true;
}
bool OnKick ( void )
{
Join(CHANNEL);
return true;
}
bool OnBanned ( const std::string& channel )
{
Sleep(10000);
return Join(CHANNEL);
}
};
int main ( int argc, char** argv )
{
srand ( time(NULL) );
ImportList ( "dev", true );
ImportList ( "func", true );
ImportList ( "dev", true );
ImportList ( "func", true );
ImportList ( "irql", true );
ImportList ( "module", true );
ImportList ( "period", true );
ImportList ( "status", true );
ImportList ( "stru", true );
ImportList ( "type", true );
ImportList ( "tech", false );
ImportList ( "curse", false );
ImportList ( "cursecop", false );
ImportList ( "grovel", false );
ImportList ( "nogrovel", false );
ImportList ( "idle", false );
#ifdef _DEBUG
printf ( "initializing IRCClient debugging\n" );
IRCClient::SetDebug ( true );
#endif//_DEBUG
while (true)
{
printf ( "calling suStartup()\n" );
suStartup();
printf ( "creating IRCClient object\n" );
MyIRCClient irc;
printf ( "connecting to freenode\n" );
if ( !irc.Connect ( SERVER ) ) // irc.freenode.net
{
printf ( "couldn't connect to server\n" );
Sleep(10000);
continue;
}
printf ( "sending user command\n" );
if ( !irc.User ( BOTNAME, "reactos.com", SERVER, "ArchBlackmann" ) )
{
printf ( "USER command failed, retying ...\n" );
Sleep(10000);
continue;
}
printf ( "sending nick\n" );
if ( !irc.Nick ( BOTNAME ) )
{
printf ( "NICK command failed, retying ...\n" );
Sleep(10000);
continue;
}
printf ( "setting mode\n" );
if ( !irc.Mode ( MODE ) )
{
printf ( "MODE command failed, retying ...\n" );
Sleep(10000);
continue;
}
printf ( "joining channel\n" );
if ( !irc.Join ( CHANNEL ) )
{
printf ( "JOIN command failed, retying ...\n" );
Sleep(10000);
continue;
}
printf ( "entering irc client processor\n" );
irc.Run ( false ); // do the processing in this thread...
}
return 0;
}

View File

@@ -1,216 +0,0 @@
# Microsoft Developer Studio Project File - Name="ArchBlackmann" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Console Application" 0x0103
CFG=ArchBlackmann - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "ArchBlackmann.mak".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "ArchBlackmann.mak" CFG="ArchBlackmann - Win32 Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "ArchBlackmann - Win32 Release" (based on "Win32 (x86) Console Application")
!MESSAGE "ArchBlackmann - Win32 Debug" (based on "Win32 (x86) Console Application")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "ArchBlackmann - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "ArchBlackmann - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
!ENDIF
# Begin Target
# Name "ArchBlackmann - Win32 Release"
# Name "ArchBlackmann - Win32 Debug"
# Begin Source File
SOURCE=.\ArchBlackmann.cpp
# End Source File
# Begin Source File
SOURCE=.\auto_ptr.h
# End Source File
# Begin Source File
SOURCE=.\auto_vector.h
# End Source File
# Begin Source File
SOURCE=.\base64.cpp
# End Source File
# Begin Source File
SOURCE=.\base64.h
# End Source File
# Begin Source File
SOURCE=.\chomp.cpp
# End Source File
# Begin Source File
SOURCE=.\chomp.h
# End Source File
# Begin Source File
SOURCE=.\config.h
# End Source File
# Begin Source File
SOURCE=.\cram_md5.cpp
# End Source File
# Begin Source File
SOURCE=.\cram_md5.h
# End Source File
# Begin Source File
SOURCE=.\File.cpp
# End Source File
# Begin Source File
SOURCE=.\File.h
# End Source File
# Begin Source File
SOURCE=.\IRCClient.cpp
# End Source File
# Begin Source File
SOURCE=.\IRCClient.h
# End Source File
# Begin Source File
SOURCE=.\MD5.cpp
# End Source File
# Begin Source File
SOURCE=.\MD5.h
# End Source File
# Begin Source File
SOURCE=.\panic.cpp
# End Source File
# Begin Source File
SOURCE=.\panic.h
# End Source File
# Begin Source File
SOURCE=.\QueueT.h
# End Source File
# Begin Source File
SOURCE=.\Reli.h
# End Source File
# Begin Source File
SOURCE=.\ReliMT.cpp
# End Source File
# Begin Source File
SOURCE=.\ReliMT.h
# End Source File
# Begin Source File
SOURCE=.\SockUtils.cpp
# End Source File
# Begin Source File
SOURCE=.\SockUtils.h
# End Source File
# Begin Source File
SOURCE=.\SplitJoin.cpp
# End Source File
# Begin Source File
SOURCE=.\SplitJoin.h
# End Source File
# Begin Source File
SOURCE=.\ssprintf.cpp
# End Source File
# Begin Source File
SOURCE=.\ssprintf.h
# End Source File
# Begin Source File
SOURCE=.\ThreadPool.cpp
# End Source File
# Begin Source File
SOURCE=.\ThreadPool.h
# End Source File
# Begin Source File
SOURCE=.\trim.cpp
# End Source File
# Begin Source File
SOURCE=.\trim.h
# End Source File
# Begin Source File
SOURCE=.\verify.h
# End Source File
# End Target
# End Project

View File

@@ -1,29 +0,0 @@
Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
###############################################################################
Project: "ArchBlackmann"=.\ArchBlackmann.dsp - Package Owner=<4>
Package=<5>
{{{
}}}
Package=<4>
{{{
}}}
###############################################################################
Global:
Package=<5>
{{{
}}}
Package=<3>
{{{
}}}
###############################################################################

View File

@@ -1,265 +0,0 @@
// File.cpp
// (C) 2002-2004 Royce Mitchell III
// Dually licensed under BSD & LGPL
#ifdef _MSC_VER
#pragma warning ( disable : 4786 )
#endif//_MSC_VER
#include <stdio.h>
#include <stdarg.h>
#include "File.h"
#ifndef nelem
#define nelem(x) ( sizeof(x) / sizeof(x[0]) )
#endif//nelem
typedef File::filesize_t filesize_t;
typedef File::fileoff_t fileoff_t;
fileoff_t File::seek ( fileoff_t offset )
{
#ifdef WIN32
if ( _f->_flag & _IOWRT ) // is there pending output?
fflush ( _f );
// reset "buffered input" variables
_f->_cnt = 0;
_f->_ptr = _f->_base;
// make sure we're going forward
if ( _f->_flag & _IORW )
_f->_flag &= ~(_IOREAD|_IOWRT);
return _lseeki64 ( _fileno(_f), offset, SEEK_SET );
#else//UNIX
return lseek64 ( fileno(_f), offset, SEEK_SET );
#endif
}
std::string File::getline ( bool strip_crlf /*= false*/ )
{
std::string s = "";
char buf[256];
for ( ;; )
{
*buf = 0;
fgets ( buf, nelem(buf)-1, _f );
if ( !*buf )
break;
s += buf;
if ( strchr ( "\r\n", buf[strlen(buf)-1] ) )
break;
}
if ( strip_crlf && s.size() )
{
char* p = strpbrk ( &s[0], "\r\n" );
if ( p )
{
*p = '\0';
s.resize ( p-&s[0] );
}
}
return s;
}
std::wstring File::wgetline ( bool strip_crlf /*= false*/ )
{
std::wstring s = L"";
wchar_t buf[256];
for ( ;; )
{
*buf = 0;
fgetws ( buf, nelem(buf)-1, _f );
if ( !*buf )
break;
s += buf;
if ( wcschr ( L"\r\n", buf[wcslen(buf)-1] ) )
break;
}
if ( strip_crlf && s.size() )
{
wchar_t* p = wcspbrk ( &s[0], L"\r\n" );
if ( p )
{
*p = L'\0';
s.resize ( (p-&s[0])/sizeof(wchar_t) );
}
}
return s;
}
// this function searches for the next end-of-line and puts all data it
// finds until then in the 'line' parameter.
//
// call continuously until the function returns false ( no more data )
bool File::next_line ( std::string& line, bool strip_crlf )
{
line = getline(strip_crlf);
// indicate that we're done *if*:
// 1) there's no more data, *and*
// 2) we're at the end of the file
return line.size()>0 || !eof();
}
bool File::next_line ( std::wstring& line, bool strip_crlf )
{
line = wgetline ( strip_crlf );
return line.size()>0 || !eof();
}
/*
example usage:
bool mycallback ( const std::string& line, int line_number, long lparam )
{
std::cout << line << std::endl;
return true; // continue enumeration
}
File f ( "file.txt", "rb" ); // open file for binary read-only ( i.e. "rb" )
f.enum_lines ( mycallback, 0, true );
*/
/*bool File::enum_lines ( bool (*callback)(const std::string& line, int line_number, long lparam), long lparam, bool strip_crlf )
{
int line_number = 0;
for ( ;; )
{
std::string s = getline(strip_crlf);
line_number++;
if ( !s.size() )
{
if ( eof() )
return true;
else
continue;
}
if ( !(*callback) ( s, line_number, lparam ) )
return false;
}
}*/
filesize_t File::length() const
{
#ifdef WIN32
return _filelengthi64 ( _fileno(_f) );
#elif defined(UNIX)
struct stat64 file_stat;
verify(fstat64(fileno(_f), &file_stat) == 0);
return file_stat.st_size;
#endif
}
void File::close()
{
if ( _f )
{
fclose(_f);
_f = 0;
}
}
void File::printf ( const char* fmt, ... )
{
va_list arg;
int done;
va_start(arg, fmt);
assert(_f);
done = vfprintf ( _f, fmt, arg );
va_end(arg);
}
/*static*/ bool File::LoadIntoString ( std::string& s, const std::string& filename )
{
File in ( filename, "rb" );
if ( !in.isopened() )
return false;
filesize_t flen = in.length();
size_t len = size_t(flen);
if ( len != flen )
return false; // file too big...
s.resize ( len + 1 );
if ( !in.read ( &s[0], len ) )
return false;
s[len] = '\0';
s.resize ( len );
return true;
}
/*static*/ bool File::LoadIntoString ( std::string& s, const std::wstring& filename )
{
File in ( filename, L"rb" );
if ( !in.isopened() )
return false;
filesize_t flen = in.length();
size_t len = size_t(flen);
if ( len != flen )
return false; // file too big...
s.resize ( len + 1 );
if ( !in.read ( &s[0], len ) )
return false;
s[len] = '\0';
s.resize ( len );
return true;
}
/*static*/ bool File::SaveFromString ( const std::string& filename, const std::string& s, bool binary )
{
File out ( filename, binary ? "wb" : "w" );
if ( !out.isopened() )
return false;
out.write ( s.c_str(), s.size() );
return true;
}
/*static*/ bool File::SaveFromString ( const std::wstring& filename, const std::string& s, bool binary )
{
File out ( filename, binary ? L"wb" : L"w" );
if ( !out.isopened() )
return false;
out.write ( s.c_str(), s.size() );
return true;
}
/*static*/ bool File::SaveFromBuffer ( const std::string& filename, const char* buf, size_t buflen, bool binary )
{
File out ( filename, binary ? "wb" : "w" );
if ( !out.isopened() )
return false;
out.write ( buf, buflen );
return true;
}
/*static*/ bool File::SaveFromBuffer ( const std::wstring& filename, const char* buf, size_t buflen, bool binary )
{
File out ( filename, binary ? L"wb" : L"w" );
if ( !out.isopened() )
return false;
out.write ( buf, buflen );
return true;
}
/*static*/ std::string File::TempFileName ( const std::string& prefix )
{
#ifdef WIN32
std::string s ( _tempnam ( ".", prefix.c_str() ) );
return s;
#else
// FIXME
return string("");
#endif
}
/*static*/ std::wstring File::TempFileName ( const std::wstring& prefix )
{
#ifdef WIN32
std::wstring s ( _wtempnam ( L".", prefix.c_str() ) );
return s;
#else
// FIXME
return std::wstring(L"");
#endif
}

View File

@@ -1,173 +0,0 @@
// File.h
// (C) 2002-2004 Royce Mitchell III
// Dually licensed under BSD & LGPL
#ifndef FILE_H
#define FILE_H
#ifdef WIN32
# include <stdio.h> // fgetc
# include <io.h>
#elif defined(UNIX)
# include <sys/stat.h>
# include <unistd.h>
#endif
#include <assert.h>
#include <string>
class File
{
public:
#ifdef WIN32
typedef __int64 fileoff_t;
typedef unsigned __int64 filesize_t;
#else//_MSC_VER
typedef __off64_t fileoff_t;
typedef __size64_t filesize_t;
#endif//_MSC_VER
File() : _f(0)
{
}
File ( const std::string& filename, const char* mode ) : _f(0)
{
open ( filename, mode );
}
File ( const std::wstring& filename, const wchar_t* mode ) : _f(0)
{
open ( filename, mode );
}
File ( const char* filename, const char* mode ) : _f(0)
{
open ( filename, mode );
}
File ( const wchar_t* filename, const wchar_t* mode ) : _f(0)
{
open ( filename, mode );
}
~File()
{
close();
}
bool open ( const std::string& filename, const char* mode )
{
assert ( !_f );
return ( _f = fopen ( filename.c_str(), mode ) ) != 0;
}
bool open ( const std::wstring& filename, const wchar_t* mode )
{
assert ( !_f );
return ( _f = _wfopen ( filename.c_str(), mode ) ) != 0;
}
bool open ( const char* filename, const char* mode )
{
assert ( !_f );
return ( _f = fopen ( filename, mode ) ) != 0;
}
bool open ( const wchar_t* filename, const wchar_t* mode )
{
assert ( !_f );
return ( _f = _wfopen ( filename, mode ) ) != 0;
}
fileoff_t seek ( fileoff_t offset );
int get()
{
return fgetc ( _f );
}
bool put ( int c )
{
return fputc ( c, _f ) != EOF;
}
std::string getline ( bool strip_crlf = false );
std::wstring wgetline ( bool strip_crlf = false );
// this function searches for the next end-of-line and puts all data it
// finds until then in the 'line' parameter.
//
// call continuously until the function returns false ( no more data )
bool next_line ( std::string& line, bool strip_crlf );
bool next_line ( std::wstring& line, bool strip_crlf );
bool read ( void* data, unsigned len )
{
return len == fread ( data, 1, len, _f );
}
bool write ( const void* data, unsigned len )
{
return len == fwrite ( data, 1, len, _f );
}
bool write ( const std::string& data )
{
return data.length() == fwrite ( data.c_str(), 1, data.length(), _f );
}
bool write ( const std::wstring& data )
{
return data.length() == fwrite ( data.c_str(), sizeof(data[0]), data.length(), _f );
}
filesize_t length() const;
void close();
bool isopened() const
{
return _f != 0;
}
bool is_open() const
{
return _f != 0;
}
bool eof() const
{
return feof(_f) ? true : false;
}
FILE* operator * ()
{
return _f;
}
operator FILE*()
{
return _f;
}
void printf ( const char* fmt, ... );
void printf ( const wchar_t* fmt, ... );
static bool LoadIntoString ( std::string& s, const std::string& filename );
static bool LoadIntoString ( std::string& s, const std::wstring& filename );
static bool SaveFromString ( const std::string& filename, const std::string& s, bool binary );
static bool SaveFromString ( const std::wstring& filename, const std::string& s, bool binary );
static bool SaveFromBuffer ( const std::string& filename, const char* buf, size_t buflen, bool binary );
static bool SaveFromBuffer ( const std::wstring& filename, const char* buf, size_t buflen, bool binary );
static std::string TempFileName ( const std::string& prefix );
static std::wstring TempFileName ( const std::wstring& prefix );
private:
File(const File&) {}
const File& operator = ( const File& ) { return *this; }
FILE * _f;
};
#endif//FILE_H

View File

@@ -1,418 +0,0 @@
// IRCClient.cpp
// This file is (C) 2004 Royce Mitchell III
// and released under the BSD & LGPL licenses
#ifdef _MSC_VER
#pragma warning ( disable : 4786 )
#endif//_MSC_VER
#include <vector>
#include <sstream>
#include "IRCClient.h"
#include "MD5.h"
#include "cram_md5.h"
#include "trim.h"
#include "chomp.h"
#include "SplitJoin.h"
#include "base64.h"
#include "config.h"
using std::string;
using std::stringstream;
using std::vector;
bool IRCClient::_debug = true;
// see rfc1459 for IRC-Protocoll Reference
IRCClient::IRCClient()
: _timeout(10*60*1000), _inRun(false)
{
}
bool IRCClient::Connect ( const string& server, short port )
{
string buf;
Close();
Attach ( suTcpSocket() );
if ( !suConnect ( *this, server.c_str(), port ) )
return false;
return true;
}
bool
IRCClient::User ( const string& user, const string& mode,
const string& network, const string& realname )
{
string buf;
buf = "USER " + user + " \"" + mode + "\" \"" + network + "\" :" + realname + "\n";
return Send ( buf );
}
bool
IRCClient::Nick ( const string& nick )
{
_nick = nick;
Send ( "NICK " + _nick + "\n" );
PrivMsg ("NickServ", "IDENTIFY " + (string)PASS);
return true;
}
bool
IRCClient::Mode ( const string& mode )
{
return Send ( "MODE " + _nick + " " + mode + "\n" );
}
bool
IRCClient::Names ( const string& channel )
{
return Send ( "NAMES " + channel + "\n" );
}
bool
IRCClient::Mode ( const string& channel, const string& mode, const string& target )
{
return Send ( "MODE " + channel + " " + mode + " " + target + "\n" );
}
bool
IRCClient::Join ( const string& channel )
{
return Send("JOIN " + channel + "\n");
}
bool
IRCClient::PrivMsg ( const string& to, const string& text )
{
return Send ( "PRIVMSG " + to + " :" + text + '\n' );
}
bool
IRCClient::Action ( const string& to, const string& text )
{
return Send ( "PRIVMSG " + to + " :" + (char)1 + "ACTION " + text + (char)1 + '\n' );
}
bool
IRCClient::Part ( const string& channel, const string& text )
{
return Send ( "PART " + channel + " :" + text + "\n" );
}
bool
IRCClient::Quit ( const string& text )
{
return Send( "QUIT :" + text + "\n");
}
bool IRCClient::_Recv ( string& buf )
{
bool b = (recvUntil ( buf, '\n', _timeout ) > 0);
if ( b && _debug )
{
printf ( ">> %s", buf.c_str() );
if ( buf[buf.length()-1] != '\n' )
printf ( "\n" );
}
return b;
}
bool IRCClient::Send ( const string& buf )
{
if ( _debug )
{
printf ( "<< %s", buf.c_str() );
if ( buf[buf.length()-1] != '\n' )
printf ( "\n" );
}
return ( buf.length() == (size_t)send ( *this, buf.c_str(), buf.length(), 0 ) );
}
bool IRCClient::OnPing( const string& text )
{
return Send( "PONG " + text + "\n" );
}
int THREADAPI IRCClient::Callback ( IRCClient* irc )
{
return irc->Run ( false );
}
int IRCClient::Run ( bool launch_thread )
{
if ( (SOCKET)*this == INVALID_SOCKET )
return 0;
if ( _inRun ) return 1;
if ( launch_thread )
{
ThreadPool::Instance().Launch ( (ThreadPoolFunc*)IRCClient::Callback, this );
return 1;
}
_inRun = true;
if ( _debug ) printf ( "IRCClient::Run() - waiting for responses\n" );
string buf;
while ( _Recv(buf) )
{
if ( !strnicmp ( buf.c_str(), "NOTICE ", 7 ) )
{
//printf ( "recv'd NOTICE msg...\n" );
// TODO...
//OnAuth (
}
else if ( !strnicmp ( buf.c_str(), "PING ", 5 ) )
{
const char* p = &buf[5]; // point to first char after "PING "
while ( *p == ':' ) // then read past the colons
p++;
const char* p2 = strpbrk ( p, "\r\n" ); // find the end of line
string text ( p, p2-p ); // and set the text
OnPing( text );
}
else if ( buf[0] == ':' )
{
const char* p = &buf[1]; // skip first colon...
const char* p2 = strpbrk ( p, " !" );
if ( !p2 )
{
printf ( "!!!:OnRecv failure 0: ", buf.c_str() );
continue;
}
string src ( p, p2-p );
if ( !src.length() )
{
printf ( "!!!:OnRecv failure 0.5: %s", buf.c_str() );
continue;
}
p = p2 + 1;
if ( *p2 == '!' )
{
p2 = strchr ( p, ' ' );
if ( !p2 )
{
printf ( "!!!:OnRecv failure 1: %s", buf.c_str() );
continue;
}
//string srchost ( p, p2-p );
p = p2 + 1;
}
p2 = strchr ( p, ' ' );
if ( !p2 )
{
printf ( "!!!:OnRecv failure 2: %s", buf.c_str() );
continue;
}
string cmd ( p, p2-p );
p = p2 + 1;
p2 = strpbrk ( p, " :" );
if ( !p2 )
{
printf ( "!!!:OnRecv failure 3: %s", buf.c_str() );
continue;
}
string tgt ( p, p2-p );
p = p2 + 1;
p += strspn ( p, " " );
if ( *p == '=' )
{
p++;
p += strspn ( p, " " );
}
if ( *p == ':' )
p++;
p2 = strpbrk ( p, "\r\n" );
if ( !p2 )
{
printf ( "!!!:OnRecv failure 4: %s", buf.c_str() );
continue;
}
string text ( p, p2-p );
strlwr ( &cmd[0] );
if ( cmd == "privmsg" )
{
if ( !tgt.length() )
{
printf ( "!!!:OnRecv failure 5 (PRIVMSG w/o target): %s", buf.c_str() );
continue;
}
if ( *p == 1 )
{
p++;
p2 = strchr ( p, ' ' );
if ( !p2 ) p2 = p + strlen(p);
cmd = string ( p, p2-p );
strlwr ( &cmd[0] );
p = p2 + 1;
p2 = strchr ( p, 1 );
if ( !p2 )
{
printf ( "!!!:OnRecv failure 6 (no terminating \x01 for initial \x01 found: %s", buf.c_str() );
continue;
}
text = string ( p, p2-p );
if ( cmd == "action" )
{
if ( tgt[0] == '#' )
OnChannelAction ( tgt, src, text );
else
OnPrivAction ( src, text );
}
else
{
printf ( "!!!:OnRecv failure 7 (unrecognized \x01 command '%s': %s", cmd.c_str(), buf.c_str() );
continue;
}
}
else
{
if ( tgt[0] == '#' )
OnChannelMsg ( tgt, src, text );
else
OnPrivMsg ( src, text );
}
}
else if ( cmd == "mode" )
{
// two diff. kinds of mode notifications...
//printf ( "[MODE] src='%s' cmd='%s' tgt='%s' text='%s'", src.c_str(), cmd.c_str(), tgt.c_str(), text.c_str() );
//OnMode (
// self mode change:
// [MODE] src=Nick cmd=mode tgt=Nick text=+i
// channel mode change:
// [MODE] src=Nick cmd=mode tgt=#Channel text=+o Nick
if ( tgt[0] == '#' )
{
p = text.c_str();
p2 = strchr ( p, ' ' );
if ( p2 && *p2 )
{
string mode ( p, p2-p );
p = p2 + 1;
p += strspn ( p, " " );
OnUserModeInChannel ( src, tgt, mode, trim(p) );
}
else
OnChannelMode ( tgt, text );
}
else
OnMode ( tgt, text );
}
else if ( cmd == "join" )
{
mychannel = text;
OnJoin ( src, text );
}
else if ( cmd == "part" )
{
OnPart ( src, text );
}
else if ( cmd == "nick" )
{
OnNick ( src, text );
}
else if ( cmd == "kick" )
{
OnKick ();
}
else if ( isdigit(cmd[0]) )
{
int i = atoi(cmd.c_str());
switch ( i )
{
case 1: // "Welcome!" - i.e. it's okay to issue commands now...
OnConnected();
break;
case 353: // user list for channel....
{
p = text.c_str();
p2 = strpbrk ( p, " :" );
if ( !p2 ) continue;
string channel ( p, p2-p );
p = strchr ( p2, ':' );
if ( !p ) continue;
p++;
vector<string> users;
while ( *p )
{
p2 = strchr ( p, ' ' );
if ( !p2 )
p2 = p + strlen(p);
users.push_back ( string ( p, p2-p ) );
p = p2+1;
p += strspn ( p, " " );
}
OnChannelUsers ( channel, users );
}
break;
case 366: // END of user list for channel
{
p = text.c_str();
p2 = strpbrk ( p, " :" );
if ( !p2 ) continue;
string channel ( p, p2-p );
OnEndChannelUsers ( channel );
}
break;
case 474: // You are banned
{
p = text.c_str();
p2 = strpbrk ( p, " :" );
if ( !p2 ) continue;
string channel ( p, p2-p );
OnBanned ( channel );
}
break;
case 433: // Nick in Use
{
string nick = _nick;
Nick (nick + "_");
PrivMsg ("NickServ", "GHOST " + nick + " " + PASS);
// HACK HACK HACK
Mode ( "+i" );
Join ( CHANNEL ); // this is because IRC client does not review if his commands were sucessfull
Sleep ( 1000 );
Nick ( nick );
}
break;
case 2: //MOTD
case 376: //MOTD
case 372:
break;
default:
if ( _debug ) printf ( "unknown command %i: %s", i, buf.c_str() );
break;
}
}
else
{
if ( strstr ( buf.c_str(), "ACTION" ) )
{
printf ( "ACTION: " );
for ( int i = 0; i < buf.size(); i++ )
printf ( "%c(%xh)", buf[i], (unsigned)(unsigned char)buf[i] );
}
else if ( _debug ) printf ( "unrecognized ':' response: %s", buf.c_str() );
}
}
else
{
if ( _debug ) printf ( "unrecognized irc msg: %s", buf.c_str() );
}
//OnRecv ( buf );
}
if ( _debug ) printf ( "IRCClient::Run() - exiting\n" );
_inRun = false;
return 0;
}

View File

@@ -1,148 +0,0 @@
// IRCClient.h
// This file is (C) 2004 Royce Mitchell III
// and released under the BSD & LGPL licenses
#ifndef IRCCLIENT_H
#define IRCCLIENT_H
#include <string>
#include <vector>
#include "SockUtils.h"
#include "ThreadPool.h"
class IRCClient : public suBufferedRecvSocket
{
public:
IRCClient();
std::string mychannel;
static bool GetDebug() { return _debug; }
static bool SetDebug ( bool debug ) { bool old = _debug; _debug = debug; return old; }
// connect to server ( record greeting for apop if it exists )
bool Connect ( const std::string& server, short port = 6667 );
bool Running() { return _inRun; }
////////////////////////// IRC Client Protocol commands ///////////////////////
// first thing you must call... mode can be ""
// network can be same as name of server used in Connect() above
bool User ( const std::string& user, const std::string& mode,
const std::string& network, const std::string& realname );
// change nick...
bool Nick ( const std::string& nick );
// change mode for self...
bool Mode ( const std::string& mode );
// set someone's mode in channel ( like oping someone )
bool Mode ( const std::string& channel, const std::string& mode, const std::string& target );
// request a list of names of clients in a channel
bool Names ( const std::string& channel );
// join a channel...
bool Join ( const std::string& channel );
// send message to someone or some channel
bool PrivMsg ( const std::string& to, const std::string& text );
// send /me to someone or some channel
bool Action ( const std::string& to, const std::string& text );
// leave a channel
bool Part ( const std::string& channel, const std::string& text );
// log off
bool Quit ( const std::string& text );
////////////////////// callback functions ////////////////////////////
// OnConnected: you just successfully logged into irc server
virtual bool OnConnected() = 0;
virtual bool OnNick ( const std::string& oldNick, const std::string& newNick ) { return true; }
// OnJoin: someone just successfully joined a channel you are in ( also sent when you successfully join a channel )
virtual bool OnJoin ( const std::string& user, const std::string& channel ) { return true; }
// OnPart: someone just left a channel you are in
virtual bool OnPart ( const std::string& user, const std::string& channel ) { return true; }
// OnPrivMsg: you just received a private message from a user
virtual bool OnPrivMsg ( const std::string& from, const std::string& text ) { return true; }
virtual bool OnPrivAction ( const std::string& from, const std::string& text ) { return true; }
// OnChannelMsg: you just received a chat line in a channel
virtual bool OnChannelMsg ( const std::string& channel, const std::string& from,
const std::string& text ) { return true; }
// OnChannelAction: you just received a "/me" line in a channel
virtual bool OnChannelAction ( const std::string& channel, const std::string& from,
const std::string& text ) { return true; }
// OnChannelMode: notification of a change of a channel's mode
virtual bool OnChannelMode ( const std::string& channel, const std::string& mode )
{ return true; }
// OnUserModeInChannel: notification of a mode change of a user with respect to a channel.
// f.ex.: this will be called when someone is oped in a channel.
virtual bool OnUserModeInChannel ( const std::string& src, const std::string& channel,
const std::string& mode, const std::string& target ) { return true; }
// OnMode: you will receive this when you change your own mode, at least...
virtual bool OnMode ( const std::string& user, const std::string& mode ) { return true; }
// notification of what users are in a channel ( you may get multiple of these... )
virtual bool OnChannelUsers ( const std::string& channel, const std::vector<std::string>& users )
{ return true; }
// OnKick: if the client has been kicked
virtual bool OnKick ( void ) { return true; }
// OnKick: if the client has been kicked
virtual bool OnBanned ( const std::string& channel ) { return true; }
// notification that you have received the entire list of users for a channel
virtual bool OnEndChannelUsers ( const std::string& channel ) { return true; }
// OnPing - default implementation replies to PING with a valid PONG. required on some systems to
// log in. Most systems require a response in order to stay connected, used to verify a client hasn't
// dropped.
virtual bool OnPing ( const std::string& text );
////////////////////// other functions ////////////////////////////
// this is for sending data to irc server. it's public in case you need to send some
// command not supported by this base class...
bool Send ( const std::string& buf );
// if launch_thread is true, this function will spawn a thread that will process
// incoming packets until the socket dies.
// otherwise ( launch_thread is false ) this function will do that processing
// in *this* thread, and not return until the socket dies.
int Run ( bool launch_thread );
////////////////////// private stuff ////////////////////////////
private:
bool _Recv ( std::string& buf );
static int THREADAPI Callback ( IRCClient* irc );
static bool _debug;
std::string _nick;
int _timeout;
std::string _apop_challenge;
volatile bool _inRun;
// disable copy semantics
IRCClient ( const IRCClient& );
IRCClient& operator = ( const IRCClient& );
};
#endif//IRCCLIENT_H

View File

@@ -1,418 +0,0 @@
// MD5.CPP - RSA Data Security, Inc., MD5 message-digest algorithm
/*
Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
rights reserved.
License to copy and use this software is granted provided that it
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
Algorithm" in all material mentioning or referencing this software
or this function.
License is also granted to make and use derivative works provided
that such works are identified as "derived from the RSA Data
Security, Inc. MD5 Message-Digest Algorithm" in all material
mentioning or referencing the derived work.
RSA Data Security, Inc. makes no representations concerning either
the merchantability of this software or the suitability of this
software for any particular purpose. It is provided "as is"
without express or implied warranty of any kind.
These notices must be retained in any copies of any part of this
documentation and/or software.
*/
//#include <assert.h>
#include <memory.h>
#include <ctype.h>
#include <vector>
#include "MD5.h"
using std::string;
using std::vector;
// Constants for MD5Transform routine.
#define S11 7
#define S12 12
#define S13 17
#define S14 22
#define S21 5
#define S22 9
#define S23 14
#define S24 20
#define S31 4
#define S32 11
#define S33 16
#define S34 23
#define S41 6
#define S42 10
#define S43 15
#define S44 21
static void MD5Transform ( UINT4 [4], const uchar [64] );
static void Encode ( unsigned char *, UINT4 *, unsigned int );
static void Decode ( UINT4 *, const uchar *, unsigned int );
static unsigned char PADDING[64] =
{
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
// F, G, H and I are basic MD5 functions.
#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
#define H(x, y, z) ((x) ^ (y) ^ (z))
#define I(x, y, z) ((y) ^ ((x) | (~z)))
// ROTATE_LEFT rotates x left n bits.
#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
// FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
// Rotation is separate from addition to prevent recomputation.
#define FF(a, b, c, d, x, s, ac) { \
(a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define GG(a, b, c, d, x, s, ac) { \
(a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define HH(a, b, c, d, x, s, ac) { \
(a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
#define II(a, b, c, d, x, s, ac) { \
(a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
(a) = ROTATE_LEFT ((a), (s)); \
(a) += (b); \
}
// MD5 initialization. Begins an MD5 operation, writing a new context.
void MD5Init (
MD5_CTX *context ) // context
{
context->count[0] = context->count[1] = 0;
// Load magic initialization constants.
context->state[0] = 0x67452301;
context->state[1] = 0xefcdab89;
context->state[2] = 0x98badcfe;
context->state[3] = 0x10325476;
}
// MD5 block update operation. Continues an MD5 message-digest
// operation, processing another message block, and updating the
// context.
void MD5Update (
MD5_CTX *context, // context
const char *input_, // input block
unsigned int inputLen ) // length of input block
{
unsigned int i, index, partLen;
const uchar* input = (const uchar*)input_;
// Compute number of bytes mod 64
index = (unsigned int)((context->count[0] >> 3) & 0x3F);
// Update number of bits
if ((context->count[0] += ((UINT4)inputLen << 3))
< ((UINT4)inputLen << 3))
context->count[1]++;
context->count[1] += ((UINT4)inputLen >> 29);
partLen = 64 - index;
// Transform as many times as possible.
if (inputLen >= partLen)
{
memcpy
((POINTER)&context->buffer[index], (POINTER)input, partLen);
MD5Transform (context->state, context->buffer);
for (i = partLen; i + 63 < inputLen; i += 64)
MD5Transform (context->state, &input[i]);
index = 0;
}
else
i = 0;
// Buffer remaining input
memcpy
((POINTER)&context->buffer[index], (POINTER)&input[i],
inputLen-i);
}
// MD5 finalization. Ends an MD5 message-digest operation, writing the
// the message digest and zeroizing the context.
void MD5Final (
unsigned char digest[16], // message digest
MD5_CTX *context ) // context
{
uchar bits[8];
unsigned int index, padLen;
// Save number of bits
Encode (bits, context->count, 8);
// Pad out to 56 mod 64.
index = (unsigned int)((context->count[0] >> 3) & 0x3f);
padLen = (index < 56) ? (56 - index) : (120 - index);
MD5Update (context, (const char*)PADDING, padLen);
// Append length (before padding)
MD5Update (context, (const char*)bits, 8);
// Store state in digest
Encode (digest, context->state, 16);
// Zeroize sensitive information.
memset ((POINTER)context, 0, sizeof (*context));
}
// MD5 basic transformation. Transforms state based on block.
static void MD5Transform (
UINT4 state[4],
const uchar block[64] )
{
UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
Decode (x, block, 64);
// Round 1
FF (a, b, c, d, x[ 0], S11, 0xd76aa478); // 1
FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); // 2
FF (c, d, a, b, x[ 2], S13, 0x242070db); // 3
FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); // 4
FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); // 5
FF (d, a, b, c, x[ 5], S12, 0x4787c62a); // 6
FF (c, d, a, b, x[ 6], S13, 0xa8304613); // 7
FF (b, c, d, a, x[ 7], S14, 0xfd469501); // 8
FF (a, b, c, d, x[ 8], S11, 0x698098d8); // 9
FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); // 10
FF (c, d, a, b, x[10], S13, 0xffff5bb1); // 11
FF (b, c, d, a, x[11], S14, 0x895cd7be); // 12
FF (a, b, c, d, x[12], S11, 0x6b901122); // 13
FF (d, a, b, c, x[13], S12, 0xfd987193); // 14
FF (c, d, a, b, x[14], S13, 0xa679438e); // 15
FF (b, c, d, a, x[15], S14, 0x49b40821); // 16
// Round 2
GG (a, b, c, d, x[ 1], S21, 0xf61e2562); // 17
GG (d, a, b, c, x[ 6], S22, 0xc040b340); // 18
GG (c, d, a, b, x[11], S23, 0x265e5a51); // 19
GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); // 20
GG (a, b, c, d, x[ 5], S21, 0xd62f105d); // 21
GG (d, a, b, c, x[10], S22, 0x2441453); // 22
GG (c, d, a, b, x[15], S23, 0xd8a1e681); // 23
GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); // 24
GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); // 25
GG (d, a, b, c, x[14], S22, 0xc33707d6); // 26
GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); // 27
GG (b, c, d, a, x[ 8], S24, 0x455a14ed); // 28
GG (a, b, c, d, x[13], S21, 0xa9e3e905); // 29
GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); // 30
GG (c, d, a, b, x[ 7], S23, 0x676f02d9); // 31
GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); // 32
// Round 3
HH (a, b, c, d, x[ 5], S31, 0xfffa3942); // 33
HH (d, a, b, c, x[ 8], S32, 0x8771f681); // 34
HH (c, d, a, b, x[11], S33, 0x6d9d6122); // 35
HH (b, c, d, a, x[14], S34, 0xfde5380c); // 36
HH (a, b, c, d, x[ 1], S31, 0xa4beea44); // 37
HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); // 38
HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); // 39
HH (b, c, d, a, x[10], S34, 0xbebfbc70); // 40
HH (a, b, c, d, x[13], S31, 0x289b7ec6); // 41
HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); // 42
HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); // 43
HH (b, c, d, a, x[ 6], S34, 0x4881d05); // 44
HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); // 45
HH (d, a, b, c, x[12], S32, 0xe6db99e5); // 46
HH (c, d, a, b, x[15], S33, 0x1fa27cf8); // 47
HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); // 48
// Round 4
II (a, b, c, d, x[ 0], S41, 0xf4292244); // 49
II (d, a, b, c, x[ 7], S42, 0x432aff97); // 50
II (c, d, a, b, x[14], S43, 0xab9423a7); // 51
II (b, c, d, a, x[ 5], S44, 0xfc93a039); // 52
II (a, b, c, d, x[12], S41, 0x655b59c3); // 53
II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); // 54
II (c, d, a, b, x[10], S43, 0xffeff47d); // 55
II (b, c, d, a, x[ 1], S44, 0x85845dd1); // 56
II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); // 57
II (d, a, b, c, x[15], S42, 0xfe2ce6e0); // 58
II (c, d, a, b, x[ 6], S43, 0xa3014314); // 59
II (b, c, d, a, x[13], S44, 0x4e0811a1); // 60
II (a, b, c, d, x[ 4], S41, 0xf7537e82); // 61
II (d, a, b, c, x[11], S42, 0xbd3af235); // 62
II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); // 63
II (b, c, d, a, x[ 9], S44, 0xeb86d391); // 64
state[0] += a;
state[1] += b;
state[2] += c;
state[3] += d;
// Zeroize sensitive information.
memset ((POINTER)x, 0, sizeof (x));
}
// Encodes input (UINT4) into output (unsigned char). Assumes len is
// a multiple of 4.
static void Encode (
unsigned char *output,
UINT4 *input,
unsigned int len )
{
unsigned int i, j;
for (i = 0, j = 0; j < len; i++, j += 4) {
output[j] = (unsigned char)(input[i] & 0xff);
output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);
output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
}
}
// Decodes input (unsigned char) into output (UINT4). Assumes len is
// a multiple of 4.
static void Decode (
UINT4 *output,
const uchar *input,
unsigned int len )
{
unsigned int i, j;
for (i = 0, j = 0; j < len; i++, j += 4)
output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) |
(((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24);
}
void digest2ascii ( char *ascii, const unsigned char *digest )
{
int i;
static char* table = "0123456789abcdef";
for ( i = 0; i < 16; i++ )
{
*ascii++ = table[(*digest)>>4];
*ascii++ = table[(*digest++)%16];
}
*ascii++ = 0;
}
void ascii2digest ( unsigned char *digest, const char *ascii )
{
int i;
#define CONV(c) (unsigned char)( (toupper(c)>='A') ? (toupper(c)+10-'A') : ((c)-'0') )
#define MAKECHAR(a,b) ((CONV(a)%16)<<4)|(CONV(b)%16)
for ( i = 0; i < 16; i++ )
{
*digest++ = MAKECHAR(ascii[0],ascii[1]);
ascii += 2;
}
}
#ifdef __cplusplus
MD5::MD5()
{
Init();
}
void MD5::Init()
{
MD5Init(&_ctx);
}
void MD5::Update ( const string& s )
{
MD5Update ( &_ctx, s.c_str(), s.size() );
}
string MD5::Final ( char* digest )
{
vector<uchar> v;
v.resize(16);
MD5Final ( &v[0], &_ctx );
if ( digest )
memmove ( digest, &v[0], 16 );
string s;
static char* tohex = "0123456789abcdef";
for ( int i = 0; i < 16; i++ )
{
uchar c = v[i];
s += tohex[ (c>>4) & 0xF ];
s += tohex[ c & 0xF ];
}
return s;
}
string MD5Hex ( const string& s )
{
MD5 md5;
md5.Update ( s );
return md5.Final();
}
string MD5Bin ( const string& s )
{
MD5 md5;
md5.Update ( s );
char digest[16];
md5.Final ( digest );
return string ( digest, 16 );
}
string HMAC_MD5 ( const string& key, const string& text, char* out_bin )
{
MD5 md5;
char k_ipad[65]; // inner padding - key XORd with ipad
char k_opad[65]; // outer padding - key XORd with opad
string tmp;
char digest[16];
int i;
// if key is longer than 64 bytes reset it to key=MD5(key)
if ( key.length() > 64 )
{
md5.Init();
md5.Update ( key );
md5.Final ( digest );
tmp = string ( digest, 16 );
}
else
tmp = key;
// start out by storing key in pads
memset ( k_ipad, 0, sizeof(k_ipad) );
memset ( k_opad, 0, sizeof(k_opad) );
memcpy ( k_ipad, tmp.c_str(), tmp.length() );
memcpy ( k_opad, tmp.c_str(), tmp.length() );
// XOR key with ipad and opad values
for ( i=0; i<64; i++ )
{
k_ipad[i] ^= 0x36;
k_opad[i] ^= 0x5c;
}
// "inner" MD5
md5.Init();
md5.Update(k_ipad);
md5.Update(text);
md5.Final ( digest );
// "outer" MD5
md5.Init();
md5.Update(k_opad);
md5.Update(string(digest,16));
return md5.Final(out_bin);
}
#endif//__cplusplus

View File

@@ -1,95 +0,0 @@
// MD5.H - header file for MD5.CPP
/*
Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
rights reserved.
License to copy and use this software is granted provided that it
is identified as the "RSA Data Security, Inc. MD5 Message-Digest
Algorithm" in all material mentioning or referencing this software
or this function.
License is also granted to make and use derivative works provided
that such works are identified as "derived from the RSA Data
Security, Inc. MD5 Message-Digest Algorithm" in all material
mentioning or referencing the derived work.
RSA Data Security, Inc. makes no representations concerning either
the merchantability of this software or the suitability of this
software for any particular purpose. It is provided "as is"
without express or implied warranty of any kind.
These notices must be retained in any copies of any part of this
documentation and/or software.
*/
#ifndef __MD5_H
#define __MD5_H
#ifdef __cplusplus
#include <string>
#endif//__cplusplus
#ifndef uchar
#define uchar unsigned char
#endif//uchar
#ifndef ushort
#define ushort unsigned short
#endif//ushort
#ifndef ulong
#define ulong unsigned long
#endif//ulong
#ifdef __cplusplus
extern "C" {
#endif//__cplusplus
typedef uchar *POINTER; // POINTER defines a generic pointer type
typedef ushort UINT2; // UINT2 defines a two byte word
typedef ulong UINT4; // UINT4 defines a four byte word
// MD5 context.
typedef struct
{
UINT4 state[4]; // state (ABCD)
UINT4 count[2]; // number of bits, modulo 2^64 (lsb first)
unsigned char buffer[64]; // input buffer
} MD5_CTX;
void MD5Init ( MD5_CTX * );
void MD5Update ( MD5_CTX *, const char *, unsigned int );
void MD5Final ( uchar [16], MD5_CTX * );
void digest2ascii ( char *ascii, const uchar *digest );
void ascii2digest ( uchar *digest, const char *ascii );
#ifdef __cplusplus
} // extern "C"
class MD5
{
public:
MD5();
void Init();
void Update ( const std::string& s );
std::string Final ( char* digest = 0 );
private:
MD5_CTX _ctx;
};
std::string MD5Hex ( const std::string& s );
std::string MD5Bin ( const std::string& s );
std::string HMAC_MD5 (
const std::string& key,
const std::string& text,
char* out_bin = NULL );
#endif//__cplusplus
#endif//__MD5_H

View File

@@ -1,315 +0,0 @@
/*
** Author: Samuel R. Blackburn
** Internet: wfc@pobox.com
**
** You can use it any way you like as long as you don't try to sell it.
**
** Any attempt to sell WFC in source code form must have the permission
** of the original author. You can produce commercial executables with
** WFC but you can't sell WFC.
**
** Copyright, 2000, Samuel R. Blackburn
**
** NOTE: I modified the info block below so it hopefully wouldn't conflict
** with the original file. Royce Mitchell III
*/
#ifndef QUEUET_CLASS_HEADER
#define QUEUET_CLASS_HEADER
#include "ReliMT.h"
#ifdef WIN32
#include <sys/types.h> // off_t
#define HEAPCREATE(size) m_Heap = ::HeapCreate ( HEAP_NO_SERIALIZE, size, 0 )
#define HEAPALLOC(size) ::HeapAlloc ( m_Heap, HEAP_NO_SERIALIZE, size )
#define HEAPREALLOC(p,size) ::HeapReAlloc( m_Heap, HEAP_NO_SERIALIZE, p, size )
#define HEAPFREE(p) ::HeapFree ( m_Heap, HEAP_NO_SERIALIZE, p )
#define HEAPDESTROY() ::HeapDestroy ( m_Heap ); m_Heap = 0;
#else
#define HEAPCREATE(size)
#define HEAPALLOC(size) malloc(size)
#define HEAPREALLOC(p,size) realloc(p,size);
#define HEAPFREE(p) free(p)
#define HEAPDESTROY()
#endif
template <class T>
class CQueueT : public Uncopyable
{
protected:
// What we want to protect
Mutex m_AddMutex;
Mutex m_GetMutex;
T* m_Items;
off_t m_AddIndex;
off_t m_GetIndex;
size_t m_Size;
#ifdef WIN32
HANDLE m_Heap;
#endif//WIN32
inline void m_GrowBy ( size_t number_of_new_items );
public:
inline CQueueT ( size_t initial_size = 1024 );
inline ~CQueueT();
inline bool Add( const T& new_item );
inline void Empty() { m_AddIndex = 0; m_GetIndex = 0; };
inline bool Get( T& item );
inline size_t GetLength() const;
inline size_t GetMaximumLength() const { return( m_Size ); };
inline bool AddArray ( const T* new_items, int item_count );
inline int GetArray ( T* items, const int maxget, const T& tEnd );
inline bool Contains ( const T& t );
};
template <class T>
inline CQueueT<T>::CQueueT ( size_t initial_size )
{
m_AddIndex = 0;
m_GetIndex = 0;
m_Items = NULL;
if ( initial_size == 0 )
initial_size = 1;
/*
** 1999-11-05
** We create our own heap because all of the pointers used are allocated
** and freed be us. We don't have to worry about a non-serialized thread
** accessing something we allocated. Because of this, we can perform our
** memory allocations in a heap dedicated to queueing. This means when we
** have to allocate more memory, we don't have to wait for all other threads
** to pause while we allocate from the shared heap (like the C Runtime heap)
*/
HEAPCREATE( ( ( ( 2 * initial_size * sizeof(T) ) < 65536 ) ? 65536 : (2 * initial_size * sizeof(T) ) ) );
m_Items = (T*)HEAPALLOC ( initial_size * sizeof(T) );
m_Size = ( m_Items == NULL ) ? 0 : initial_size;
}
template <class T>
inline CQueueT<T>::~CQueueT()
{
m_AddIndex = 0;
m_GetIndex = 0;
m_Size = 0;
if ( m_Items != NULL )
{
HEAPFREE(m_Items);
m_Items = NULL;
}
HEAPDESTROY();
}
template <class T>
inline bool CQueueT<T>::Add ( const T& item )
{
// Block other threads from entering Add();
Mutex::Lock addlock ( m_AddMutex );
// Add the item
m_Items[ m_AddIndex ] = item;
// 1999-12-08
// Many many thanks go to Lou Franco (lfranco@spheresoft.com)
// for finding an bug here. It rare but recreatable situations,
// m_AddIndex could be in an invalid state.
// Make sure m_AddIndex is never invalid
off_t new_add_index = ( ( m_AddIndex + 1 ) >= (off_t)m_Size ) ? 0 : m_AddIndex + 1;
if ( new_add_index == m_GetIndex )
{
// The queue is full. We need to grow.
// Stop anyone from getting from the queue
Mutex::Lock getlock ( m_GetMutex );
m_AddIndex = new_add_index;
// One last double-check.
if ( m_AddIndex == m_GetIndex )
{
m_GrowBy ( m_Size );
}
}
else
{
m_AddIndex = new_add_index;
}
return true;
}
template <class T>
inline bool CQueueT<T>::Get( T& item )
{
// Prevent other threads from entering Get()
Mutex::Lock getlock ( m_GetMutex );
if ( m_GetIndex == m_AddIndex )
{
// Let's check to see if our queue has grown too big
// If it has, then shrink it
if ( m_Size > 1024 )
{
// Yup, we're too big for our britches
Mutex::TryLock addlock ( m_AddMutex );
if ( addlock )
{
// Now, no one can add to the queue
if ( m_GetIndex == m_AddIndex ) // is queue empty?
{
// See if we can just shrink it...
T* return_value = (T*)HEAPREALLOC(m_Items,1024 * sizeof(T));
if ( return_value != NULL )
{
m_Items = (T*) return_value;
}
else
{
// Looks like we'll have to do it the hard way
HEAPFREE ( m_Items );
m_Items = (T*) HEAPALLOC ( 1024 * sizeof(T) );
}
m_Size = ( m_Items == NULL ) ? 0 : 1024;
m_AddIndex = 0;
m_GetIndex = 0;
}
else
{
// m_GetIndex != m_AddIndex, this means that someone added
// to the queue between the time we checked m_Size for being
// too big and the time we entered the add critical section.
// If this happened then we are too busy to shrink
}
}
}
return false;
}
item = m_Items[ m_GetIndex ];
// Make sure m_GetIndex is never invalid
m_GetIndex = ( ( m_GetIndex + 1 ) >= (off_t)m_Size ) ? 0 : m_GetIndex + 1;
return true;
}
template <class T>
inline int CQueueT<T>::GetArray ( T* items, const int maxget, const T& tEnd )
{
// TODO - oooh baby does this need to be optimized
// Prevent other threads from entering Get()
Mutex::Lock getlock ( m_GetMutex ); //::EnterCriticalSection( &m_GetCriticalSection );
int iResult = 0;
for ( int i = 0; i < maxget; i++ )
{
if ( !Get(items[i]) )
break;
iResult++;
if ( items[i] == tEnd )
break;
}
// Let other threads call Get() now
//::LeaveCriticalSection( &m_GetCriticalSection );
return iResult;
}
template <class T>
inline size_t CQueueT<T>::GetLength() const
{
// This is a very expensive process!
// No one can call Add() or Get() while we're computing this
size_t number_of_items_in_the_queue = 0;
Mutex::Lock addlock ( m_AddMutex );
Mutex::Lock getlock ( m_GetMutex );
number_of_items_in_the_queue = ( m_AddIndex >= m_GetIndex ) ?
( m_AddIndex - m_GetIndex ) :
( ( m_AddIndex + m_Size ) - m_GetIndex );
return number_of_items_in_the_queue;
}
template <class T>
inline void CQueueT<T>::m_GrowBy ( size_t number_of_new_items )
{
// Prevent other threads from calling Get().
// We don't need to enter the AddCriticalSection because
// m_GrowBy() is only called from Add();
T* new_array = NULL;
T* pointer_to_free = NULL;
size_t new_size = m_Size + number_of_new_items;
{ // Prevent other threads from getting
Mutex::Lock getlock ( m_GetMutex );
// 2000-05-16
// Thanks go to Royce Mitchell III (royce3@aim-controls.com) for finding
// a HUGE bug here. I was using HeapReAlloc as a short cut but my logic
// was flawed. In certain circumstances, queue items were being dropped.
new_array = (T*)HEAPALLOC ( new_size * sizeof(T) );
// Now copy all of the old items from the old queue to the new one.
// Get the entries from the get-index to the end of the array
memcpy ( new_array, &m_Items[m_GetIndex], ( m_Size - m_GetIndex ) * sizeof(T) );
// Get the entries from the beginning of the array to the add-index
memcpy ( &new_array[m_Size-m_GetIndex], m_Items, m_AddIndex * sizeof(T) );
m_AddIndex = (off_t)m_Size;
m_GetIndex = 0;
m_Size = new_size;
pointer_to_free = m_Items;
m_Items = new_array;
} // Mutex::Lock
HEAPFREE ( pointer_to_free );
}
template <class T>
inline bool CQueueT<T>::Contains ( const T& t )
{
Mutex::Lock addlock ( m_AddMutex );
Mutex::Lock getlock ( m_GetMutex );
for ( int i = m_GetIndex; i != m_AddIndex; i++ )
{
if ( i == m_Size )
i = 0;
if ( m_Items[i] == t )
return true;
}
return m_Items[m_AddIndex] == t;
}
typedef CQueueT<char> CCharQueue;
#endif // QUEUE_CLASS_HEADER

View File

@@ -1,143 +0,0 @@
// Reli.h
// lots of code here is (c) Bartosz Milewski, 1996, www.relisoft.com
// The rest is (C) 2002-2004 Royce Mitchell III
// and released under the LGPL & BSD licenses
#ifndef __RELI_H
#define __RELI_H
////////////////////////////////////////////////////////////////////////////////
// Assert
#undef Assert
#ifdef NDEBUG
#define Assert(exp) ((void)0)
#else
void _wassert (char* szExpr, char* szFile, int line);
#define Assert(exp) (void)( (exp) || (_wassert(#exp, __FILE__, __LINE__), 0) )
#endif /* NDEBUG */
////////////////////////////////////////////////////////////////////////////////
// Swap
template <class T>
void Swap(T a,T b)
{
T t = a;
a = b;
b = t;
}
////////////////////////////////////////////////////////////////////////////////
// Uncopyable - base class disabling copy ctors
class Uncopyable
{
public:
Uncopyable(){} // need a default ctor
private:
Uncopyable ( const Uncopyable& );
const Uncopyable& operator = ( const Uncopyable& );
};
////////////////////////////////////////////////////////////////////////////////
// SPtr - Smart Pointer's must be passed by reference or const reference
template <class T>
class SPtr : public Uncopyable
{
public:
virtual ~SPtr () { Destroy(); }
T * operator->() { return _p; }
T const * operator->() const { return _p; }
operator T&() { Assert(_p); return *_p; }
operator const T&() const { Assert(_p); return *_p; }
void Acquire ( SPtr<T>& t ) { Destroy(); Swap(_p,t._p); }
void Destroy() { if ( _p ) { delete _p; _p = 0; } }
protected:
SPtr (): _p (0) {}
explicit SPtr (T* p): _p (p) {}
T * _p;
private:
operator T* () { return _p; }
};
#define DECLARE_SPTR(cls,init,init2) \
class S##cls : public SPtr<cls> \
{ \
public: \
S##cls ( cls* p ) : SPtr<cls>(p) {} \
explicit S##cls init : SPtr<cls> (new cls init2) {} \
};
/* Example Usage of DECLARE_SPTR:
class MyClass
{
public: // can be protected
MyClass ( int i )
{
...
}
...
}; DECLARE_SPTR(MyClass,(int i),(i))
SMyClass ptr(i);
*/
#define DECLARE_SPTRV(cls) typedef SPtr<cls> S##cls;
/* Example Usage of DECLARE_SPTRV:
class MyAbstractClass
{
public: // can be protected
MyAbstractClass ( int i )
{
...
}
void MyPureVirtFunc() = 0;
...
}; DECLARE_SPTRV(MyAbstractClass)
SMyAbstractClass ptr ( new MySubClass(i) );
*/
#define DECLARE_PTR(cls,init,init2) \
class Ptr : public SPtr<cls> \
{ \
Ptr(cls* p) : SPtr<cls> ( p ) \
{ \
} \
Ptr init : SPtr<cls> ( new cls init2 ) {} \
};
/* Example Usage of DECLARE_PTR:
class MyClass
{
DECLARE_PTR(MyClass,(int i),(i))
public: // can be protected
MyClass ( int i )
{
...
}
void MyPureVirtFunc() = 0;
...
};
MyClass::Ptr ptr ( i );
*/
#define DECLARE_PTRV(cls) \
class Ptr : public SPtr<cls> \
{ \
Ptr(cls* p) : SPtr<cls> ( p ) \
{ \
} \
};
/* Example Usage of DECLARE_PTRV:
class MyAbstractClass
{
DECLARE_PTRV(MyAbstractClass)
public: // can be protected
MyAbstractClass ( int i )
{
...
}
void MyPureVirtFunc() = 0;
...
};
MyAbstractClass::Ptr ptr ( new MySubClass(i) );
*/
#endif//__RELI_H

View File

@@ -1,331 +0,0 @@
// ReliMT.cpp
// lots of code here is (c) Bartosz Milewski, 1996, www.relisoft.com
// The rest is (C) 2002-2004 Royce Mitchell III
// and released under the LGPL & BSD licenses
#include <stdlib.h>
#include <stdio.h>
#ifdef WIN32
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
# define snprintf _snprintf
#elif defined(UNIX)
# include <errno.h>
# include <sys/sem.h>
#else
# error unrecognized target
#endif//WIN32|UNIX
#include "verify.h"
#include "ReliMT.h"
////////////////////////////////////////////////////////////////////////////////
// Assert
void _wassert ( char* szExpr, char* szFile, int line )
{
fprintf ( stderr, "Assertion Failure: \"%s\" in file %s, line %d", szExpr, szFile, line );
exit (-1);
}
////////////////////////////////////////////////////////////////////////////////
// Thread
Thread::Thread ( long (THREADAPI * pFun) (void* arg), void* pArg )
{
#ifdef WIN32
verify ( _handle = CreateThread (
0, // Security attributes
0, // Stack size
(DWORD (WINAPI*)(void*))pFun,
pArg,
0, // don't create suspended.
&_tid ));
#elif defined(UNIX)
// set up the thread attribute: right now, we do nothing with it.
pthread_attr_t attr;
pthread_attr_init(&attr);
// this will make the threads created by this process really concurrent
verify ( !pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM) );
// create the new OS thread object
verify ( !pthread_create ( &_threadId, &attr, (void* (*) (void*))pFun, pArg ) );
verify ( !pthread_attr_destroy(&attr) );
#else
# error unrecognized target
#endif//WIN32|UNIX
}
Thread::~Thread()
{
#ifdef WIN32
verify ( CloseHandle ( _handle ) );
#elif defined(UNIX)
verify ( !pthread_cancel ( _threadId ) );
#else
# error unrecognized target
#endif//WIN32|UNIX
}
/*void Thread::Resume()
{
#ifdef WIN32
ResumeThread (_handle);
#elif defined(UNIX)
# error how to resume thread in unix?
#else
# error unrecognized target
#endif//WIN32|UNIX
}*/
void Thread::WaitForDeath()
{
#ifdef WIN32
DWORD dw = WaitForSingleObject ( _handle, 2000 );
ASSERT ( dw != WAIT_FAILED );
#elif defined(UNIX)
verify ( !pthread_join ( _threadId, (void**)NULL ) );
#else
# error unrecognized target
#endif//WIN32|UNIX
}
////////////////////////////////////////////////////////////////////////////////
// ActiveObject
// The constructor of the derived class
// should call
// _thread.Resume();
// at the end of construction
ActiveObject::ActiveObject() : _isDying (0), _thread (0)
{
}
ActiveObject::~ActiveObject()
{
ASSERT ( !_thread ); // call Kill() from subclass's dtor
// Kill() - // You can't call a virtual function from a dtor, EVEN INDIRECTLY
// so, you must call Kill() in the subclass's dtor
}
// FlushThread must reset all the events on which the thread might be waiting.
void ActiveObject::Kill()
{
if ( _thread )
{
_isDying++;
FlushThread();
// Let's make sure it's gone
_thread->WaitForDeath();
delete _thread;
_thread = 0;
}
}
void ActiveObject::Start()
{
ASSERT ( !_thread );
_thread = new Thread ( ThreadEntry, this );
}
long THREADAPI ActiveObject::ThreadEntry ( void* pArg )
{
ActiveObject * pActive = (ActiveObject*)pArg;
pActive->InitThread();
pActive->Run();
pActive->Kill();
return 0;
}
///////////////////////////////////////////////////////////////////////////////
// Mutex
Mutex::Mutex()
{
#ifdef WIN32
verify ( _h = CreateMutex ( NULL, FALSE, NULL ) );
#elif defined(UNIX)
pthread_mutexattr_t attrib;
verify ( !pthread_mutexattr_init( &attrib ) );
// allow recursive locks
verify ( !pthread_mutexattr_settype( &attrib, PTHREAD_MUTEX_RECURSIVE ) );
verify ( !pthread_mutex_init ( &_mutex, &attrib ) );
#else
# error unrecognized target
#endif
}
Mutex::~Mutex()
{
#ifdef WIN32
verify ( CloseHandle ( _h ) );
#elif defined(UNIX)
verify ( !pthread_mutex_destroy(&_mutex) );
#else
# error unrecognized target
#endif
}
void Mutex::Acquire()
{
#ifdef WIN32
DWORD dw = WaitForSingleObject ( _h, INFINITE );
ASSERT ( dw == WAIT_OBJECT_0 || dw == WAIT_ABANDONED );
#elif defined(UNIX)
verify ( !pthread_mutex_lock(&_mutex) );
#else
# error unrecognized target
#endif
}
bool Mutex::TryAcquire()
{
#ifdef WIN32
DWORD dw = WaitForSingleObject ( _h, 1 );
ASSERT ( dw == WAIT_OBJECT_0 || dw == WAIT_TIMEOUT || dw == WAIT_ABANDONED );
return (dw != WAIT_TIMEOUT);
#elif defined(UNIX)
int err = pthread_mutex_trylock(&_mutex);
ASSERT ( err == EBUSY || err == 0 );
return (err == 0);
#else
# error unrecognized target
#endif
}
void Mutex::Release()
{
#ifdef WIN32
verify ( ReleaseMutex ( _h ) );
#elif defined(UNIX)
verify ( !pthread_mutex_unlock(&_mutex) );
// we could allow EPERM return value too, but we are forcing user into RIIA
#else
# error unrecognized target
#endif
}
Mutex::Lock::Lock ( Mutex& m ) : _m(m)
{
_m.Acquire();
}
Mutex::Lock::~Lock()
{
_m.Release();
}
Mutex::TryLock::TryLock ( Mutex& m ) : _m(m)
{
_bLocked = _m.TryAcquire();
}
Mutex::TryLock::~TryLock()
{
if ( _bLocked )
_m.Release();
}
///////////////////////////////////////////////////////////////////////////////
// Event
Event::Event()
{
#ifdef WIN32
// start in non-signaled state (red light)
// auto reset after every Wait
verify ( _handle = CreateEvent ( 0, FALSE, FALSE, 0 ) );
#elif defined(UNIX)
//verify ( !pthread_cond_init ( &_cond, NULL /* default attributes */) );
sem_init();
//verify(sem_init());
#else
# error unrecognized target
#endif
}
Event::~Event()
{
#ifdef WIN32
verify ( CloseHandle ( _handle ) );
#elif defined(UNIX)
//verify ( !pthread_cond_destroy ( &_cond ) );
sem_destroy();
#else
# error unrecognized target
#endif
}
void Event::Release() // put into signaled state
{
#ifdef WIN32
verify ( SetEvent ( _handle ) );
#elif defined(UNIX)
//verify ( !pthread_cond_signal ( &_cond ) );
verify(!sem_V());
#else
# error unrecognized target
#endif
}
void Event::Wait()
{
#ifdef WIN32
// Wait until event is in signaled (green) state
DWORD dw = WaitForSingleObject ( _handle, INFINITE );
ASSERT ( dw == WAIT_OBJECT_0 || dw == WAIT_ABANDONED );
#elif defined(UNIX)
// According to docs: The pthread_cond_wait() and pthread_cond_timedwait()
// functions are used to block on a condition variable. They are called
// with mutex locked by the calling thread or undefined behaviour will
// result.
//Mutex::Lock lock ( _mutex );
//verify ( !pthread_cond_wait ( &_cond, _mutex ) );
verify(!sem_P());
#else
# error unrecognized target
#endif
}
#ifdef UNIX
void Event::sem_init()
{
sem_id = semget(IPC_PRIVATE, 1, 0666 | IPC_CREAT);
ASSERT(sem_id != -1);
}
int Event::sem_P()
{
struct sembuf sb;
sb.sem_num = 0;
sb.sem_op = -1;
sb.sem_flg = 0;
return semop(sem_id, &sb, 1);
}
int Event::sem_V()
{
struct sembuf sb;
sb.sem_num = 0;
sb.sem_op = 1;
sb.sem_flg = 0;
return semop(sem_id, &sb, 1);
}
void Event::sem_destroy()
{
#ifdef MACOSX
semun mactmp;
mactmp.val = 0;
semctl(sem_id, 0, IPC_RMID, mactmp);
#else
semctl(sem_id, 0, IPC_RMID, 0);
#endif
}
#endif

View File

@@ -1,229 +0,0 @@
// ReliMT.h
// lots of code here is (c) Bartosz Milewski, 1996, www.relisoft.com
// The rest is (C) 2003-2004 Royce Mitchell III
// and released under the LGPL & BSD licenses
#ifndef __RELIMT_H
#define __RELIMT_H
#include "Reli.h"
#ifdef WIN32
# ifndef _WINDOWS_
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
# endif
# define THREADAPI WINAPI
#elif defined(UNIX)
# include <pthread.h>
# include <stdlib.h>
# include "string.h"
# include <sys/types.h> //Semaphore
# include <sys/ipc.h> //Semaphore
# include <sys/sem.h> //Semaphore
# define THREADAPI
#else
# error unrecognized target
#endif
////////////////////////////////////////////////////////////////////////////////
// Thread
class Thread : public Uncopyable
{
public:
Thread ( long (THREADAPI * pFun) (void* arg), void* pArg );
~Thread();
//void Resume();
void WaitForDeath();
// platform-specific stuff:
private:
#ifdef WIN32
HANDLE _handle;
DWORD _tid; // thread id
#elif defined(UNIX)
pthread_t _threadId; // id of the thread
#else
# error unrecognized target
#endif
//DECLARE_PTR(Thread,(long (THREADAPI * pFun) (void* arg), void* pArg),(pFun,pArg));
}; //DECLARE_SPTR(Thread,(long (THREADAPI * pFun) (void* arg), void* pArg),(pFun,pArg));
////////////////////////////////////////////////////////////////////////////////
// ActiveObject
class ActiveObject : public Uncopyable
{
public:
ActiveObject();
virtual ~ActiveObject();
void Kill();
void Start();
protected:
virtual void InitThread() = 0;
virtual void Run() = 0;
virtual void FlushThread() = 0;
int _isDying;
static long THREADAPI ThreadEntry ( void *pArg );
Thread *_thread;
//DECLARE_PTRV(ActiveObject);
}; //DECLARE_SPTRV(ActiveObject);
// Last thing in the constructor of a class derived from
// ActiveObject you must call
// Start();
// Inside the loop the Run method you must keep checking _isDying
// if (_isDying)
// return;
// FlushThread must reset all the events on which the thread might be waiting.
// Example:
#if 0
// MyAsyncOutputter - class that outputs strings to a file asynchronously
class MyAsyncOutputter : public ActiveObject
{
public:
MyAsyncOutputter ( const string& filename ) : _filename(filename), _currentBuf(0)
{
Start(); // start thread
}
void InitThread()
{
_f.open ( _filename, "wb" );
}
void Output ( const string& s )
{
{
// acquire lock long enough to add the string to the active buffer
Mutex::Lock lock ( _mutex );
_buf[_currentBuf].push_back ( s );
}
_event.Release(); // don't need the lock fire the event
}
void Run()
{
while ( !_isDying )
{
// wait for signal from Output() or FlushThread()
_event.Wait();
{
// acquire lock long enough to switch active buffers
Mutex::Lock lock ( _mutex );
_currentBuf = 1-_currentBuf;
ASSERT ( !_buf[_currentBuf].size() );
}
// get a reference to the old buffer
vector<string>& buf = _buf[1-_currentBuf];
// write each string out to file and then empty the buffer
for ( int i = 0; i < buf.size(); i++ )
_f.write ( buf[i].c_str(), buf[i].size() );
buf.resize(0);
}
}
void FlushThread()
{
// _isDying is already set: signal thread so it can see that too
_event.Release();
}
private:
string _filename;
File _f;
int _currentBuf;
vector<string> _buf[2];
Event _event;
Mutex _mutex;
};
#endif
////////////////////////////////////////////////////////////////////////////////
// Mutex
class Mutex : public Uncopyable
{
public:
Mutex();
~Mutex();
private:
void Acquire();
bool TryAcquire();
void Release();
public:
// sub-class used to lock the Mutex
class Lock : public Uncopyable
{
public:
Lock ( Mutex& m );
~Lock();
private:
// private data
Mutex& _m;
};
friend class Mutex::Lock;
// sub-class used to attempt to lock the mutex. Use operator bool()
// to test if the lock was successful
class TryLock : public Uncopyable
{
public:
TryLock ( Mutex& m );
~TryLock();
operator bool () { return _bLocked; }
private:
// private data
bool _bLocked;
Mutex& _m;
};
friend class Mutex::TryLock;
private:
// platform-specific stuff:
#ifdef WIN32
HANDLE _h;
#elif defined(UNIX)
pthread_mutex_t _mutex;
public: operator pthread_mutex_t* () { return &_mutex; }
#else
# error unrecognized target
#endif
};
////////////////////////////////////////////////////////////////////////////////
// Event
class Event : public Uncopyable
{
public:
Event();
~Event();
void Release(); // put into signaled state
void Wait();
private:
#ifdef WIN32
HANDLE _handle;
#elif defined(UNIX)
//Sem util functions
void sem_init();
int sem_P();
int sem_V();
void sem_destroy();
int sem_id;
//pthread_cond_t _cond;
//Mutex _mutex;
#else
# error unrecognized target
#endif
//DECLARE_PTR(Event,(),());
}; //DECLARE_SPTR(Event,(),());
#endif//__RELIWIN32_H

View File

@@ -1,504 +0,0 @@
// SockUtils.cpp - Some basic socket utility functions.
// (C) 2002-2004 Royce Mitchell III
// This file is under the BSD & LGPL licenses
#include <stdio.h>
#include "SockUtils.h"
#ifdef WIN32
# ifndef SD_SEND // defined in winsock2.h, but not winsock.h
# define SD_SEND 1
# endif
# define snprintf _snprintf
# ifdef _MSC_VER
# pragma comment ( lib, "ws2_32.lib" )
# endif//_MSC_VER
#elif defined(UNIX)
# include <errno.h>
# include "string.h" // memset
# include <netdb.h> // hostent
# include <arpa/inet.h> //inet_addr
# include <sys/time.h>
# define SD_SEND SHUT_WR //bah thou shalt name thy defines the same
#else
# error unrecognized target
#endif
//// Constants /////////////////////////////////////////////////////////
const int kBufferSize = 1024;
// creates broadcast address
SockAddrIn::SockAddrIn()
{
memset ( this, 0, sizeof(sockaddr_in) );
sin_family = AF_INET;
}
SockAddrIn::SockAddrIn ( const char* szAddr, u_short iPort )
{
memset ( this, 0, sizeof(sockaddr_in) );
sin_family = AF_INET;
sin_addr.s_addr = suLookupAddress(szAddr);
sin_port = htons(iPort);
}
SockAddrIn::SockAddrIn ( in_addr_t iAddr, u_short iPort )
{
memset ( this, 0, sizeof(sockaddr_in) );
sin_family = AF_INET;
sin_addr.s_addr = iAddr;
sin_port = htons(iPort);
}
bool suStartup()
{
#ifdef WIN32
WSADATA wsaData;
if ( WSAStartup ( MAKEWORD(2,0), &wsaData ) )
return false;
if ( wsaData.wVersion != MAKEWORD(2,0) )
{
WSACleanup();
return false;
}
return true;
#elif defined(UNIX)
// nothing special required here
return true;
#else
# error unrecognized target
#endif
}
//// suTcpSocket ////////////////////////////////////////////////
// Creates a TCP socket.
SOCKET suTcpSocket()
{
SOCKET so = socket ( AF_INET, SOCK_STREAM, 0 );
#if defined(_DEBUG) && defined(WIN32)
if ( so == INVALID_SOCKET && WSANOTINITIALISED == WSAGetLastError() )
MessageBox ( NULL, "You forgot to call suStartup()!", "SockUtils", MB_OK|MB_ICONEXCLAMATION );
#endif
return so;
}
//// suUdpSocket ////////////////////////////////////////////////
// Creates a UDP socket. Compensates for new "functionality" introduced
// in Win2K with regards to select() calls
// MS Transport Provider IOCTL to control
// reporting PORT_UNREACHABLE messages
// on UDP sockets via recv/WSARecv/etc.
// Path TRUE in input buffer to enable (default if supported),
// FALSE to disable.
#ifndef SIO_UDP_CONNRESET
#define SIO_UDP_CONNRESET _WSAIOW(IOC_VENDOR,12)
#endif//SIO_UDP_CONNRESET
SOCKET suUdpSocket()
{
SOCKET so = socket ( AF_INET, SOCK_DGRAM, 0 );
#if defined(_DEBUG) && defined(WIN32)
if ( so == INVALID_SOCKET && WSANOTINITIALISED == WSAGetLastError() )
MessageBox ( NULL, "You forgot to call suStartup()!", "SockUtils", MB_OK|MB_ICONEXCLAMATION );
#endif
#ifdef WIN32
// for Windows 2000, disable new behavior...
// see: http://www-pc.uni-regensburg.de/systemsw/W2KPRO/UPDATE/POSTSP1/Q263823.htm
// this code is innocuous on other win32 platforms
DWORD dwBytesReturned = 0;
BOOL bNewBehavior = FALSE;
// disable new Win2K behavior using
// IOCTL: SIO_UDP_CONNRESET
// we don't care about return value :)
WSAIoctl(so, SIO_UDP_CONNRESET,
&bNewBehavior, sizeof(bNewBehavior),
NULL, 0, &dwBytesReturned,
NULL, NULL);
#endif
return so;
}
//// suShutdownConnection ////////////////////////////////////////////////
// Gracefully shuts the connection sd down. Returns true if it was able
// to shut it down nicely, false if we had to "slam" it shut.
// (either way, the socket does get closed)
bool suShutdownConnection(SOCKET sd)
{
if ( sd == INVALID_SOCKET )
return true;
// Disallow any further data sends. This will tell the other side
// that we want to go away now. If we skip this step, we don't
// shut the connection down nicely.
if (shutdown(sd, SD_SEND) == SOCKET_ERROR)
{
closesocket(sd);
return false;
}
// Receive any extra data still sitting on the socket. After all
// data is received, this call will block until the remote host
// acknowledges the TCP control packet sent by the shutdown above.
// Then we'll get a 0 back from recv, signalling that the remote
// host has closed its side of the connection.
char acReadBuffer[kBufferSize];
for ( ;; )
{
int nNewBytes = recv(sd, acReadBuffer, kBufferSize, 0);
if (nNewBytes == SOCKET_ERROR)
{
closesocket(sd);
return false;
}
else if (nNewBytes != 0)
{
// FYI, received (nNewBytes) unexpected bytes during shutdown.
}
else
{
// Okay, we're done!
break;
}
}
// Close the socket.
if (closesocket(sd) == SOCKET_ERROR)
{
return false;
}
return true;
}
//// suLookupAddress ////////////////////////////////////////////////
// Basically converts a name address to an ip address
in_addr_t suLookupAddress ( const char* pcHost )
{
in_addr_t nRemoteAddr = inet_addr(pcHost);
if ( nRemoteAddr == INADDR_NONE )
{
// pcHost isn't a dotted IP, so resolve it through DNS
hostent* pHE = gethostbyname(pcHost);
if ( pHE == 0 )
{
#if defined(_DEBUG) && defined(WIN32)
if ( WSANOTINITIALISED == WSAGetLastError() )
MessageBox ( NULL, "You forgot to call suStartup()!", "SockUtils", MB_OK|MB_ICONEXCLAMATION );
#endif
return INADDR_NONE;
}
nRemoteAddr = *((in_addr_t*)pHE->h_addr_list[0]);
}
return nRemoteAddr;
}
bool suConnect ( SOCKET so, in_addr_t iAddress, u_short iPort )
{
SockAddrIn sinRemote ( iAddress, iPort );
if ( SOCKET_ERROR == connect(so,sinRemote,sizeof(sinRemote)) )
{
#if defined(_DEBUG) && defined(WIN32)
if ( WSANOTINITIALISED == WSAGetLastError() )
MessageBox ( NULL, "You forgot to call suStartup()!", "SockUtils", MB_OK|MB_ICONEXCLAMATION );
#endif
return false;
}
return true;
}
bool suConnect ( SOCKET so, const char* szAddress, u_short iPort )
{
return suConnect ( so, suLookupAddress(szAddress), iPort );
}
//// suEstablishConnection ////////////////////////////////////////////////
// creates a socket of the specified type, connects to the ip address/port
// requested, and returns the SOCKET created
SOCKET suEstablishConnection ( in_addr_t iAddress, u_short iPort, int type )
{
// Create a socket
if ( type != SOCK_STREAM && type != SOCK_DGRAM )
return INVALID_SOCKET;
SOCKET so = socket(AF_INET, type, 0);
if ( so == INVALID_SOCKET )
return so;
if ( !suConnect(so, iAddress, iPort) )
{
closesocket(so);
return INVALID_SOCKET;
}
return so;
}
//// suEstablishConnection ////////////////////////////////////////////////
// creates a socket of the specified type, connects to the address/port
// requested, and returns the SOCKET created
SOCKET suEstablishConnection ( const char* szAddress, u_short iPort, int type )
{
return suEstablishConnection ( suLookupAddress ( szAddress ), iPort, type );
}
//// suBroadcast ////////////////////////////////////////////////
// takes a previously created broadcast-enabled UDP socket, and broadcasts
// a message on the local network
bool suBroadcast ( SOCKET so, u_short port, const char* buf, int len /* = -1 */ )
{
if ( len == -1 )
len = (int)strlen(buf);
#if 1
SockAddrIn to ( INADDR_BROADCAST, port );
#else // some strange MS OS's don't broadcast to localhost...
SockAddrIn to ( "127.0.0.1", port );
if ( SOCKET_ERROR == sendto ( so, buf, len, 0, to, sizeof(to) ) )
return false;
to.sin_addr.s_addr = INADDR_BROADCAST;
#endif
if ( SOCKET_ERROR == sendto ( so, buf, len, 0, to, sizeof(to) ) )
return false;
return true;
}
//// suRecv ////////////////////////////////////////////////
// retrieves data sent to our TCP socket. If no data, waits for
// a period of timeout ms.
// returns bytes received
// -1 == SOCKET_ERROR
// -2 == timed out waiting for data
int suRecv ( SOCKET so, char* buf, int buflen, int timeout )
{
struct timeval to;
fd_set rread;
int res;
FD_ZERO(&rread); // clear the fd_set
FD_SET(so,&rread); // indicate which socket(s) we want to check
memset((char *)&to,0,sizeof(to)); // clear the timeval struct
to.tv_sec = timeout; // timeout select after (timeout) seconds
// select returns > 0 if there is an event on the socket
res = select((int)so+1, &rread, (fd_set *)0, (fd_set *)0, &to );
if (res < 0)
return -1; // socket error
// there was an event on the socket
if ( (res>0) && (FD_ISSET(so,&rread)) )
return recv ( so, buf, buflen, 0 );
return -2;
}
//// suRecvFrom ////////////////////////////////////////////////
// retrieves data sent to our UDP socket. If no data, waits for
// a period of timeout ms.
// returns bytes received
// returns bytes received
// -1 == SOCKET_ERROR
// -2 == timed out waiting for data
int suRecvFrom ( SOCKET so, char* buf, int buflen, int timeout, sockaddr_in* from, socklen_t* fromlen )
{
struct timeval to;
fd_set rread;
int res;
FD_ZERO(&rread); // clear the fd_set
FD_SET(so,&rread); // indicate which socket(s) we want to check
memset((char *)&to,0,sizeof(to)); // clear the timeval struct
to.tv_sec = timeout; // timeout select after (timeout) seconds
// select returns > 0 if there is an event on the socket
res = select((int)so+1, &rread, (fd_set *)0, (fd_set *)0, &to );
if (res < 0)
return -1; // socket error
// there was an event on the socket
if ( (res>0) && (FD_ISSET(so,&rread)) )
return recvfrom ( so, buf, buflen, 0, (sockaddr*)from, fromlen );
return -2; // timeout
}
//// suBind ////////////////////////////////////////////////
// binds a UDP socket to an interface & port to receive
// data on that port
bool suBind ( SOCKET so, in_addr_t iInterfaceAddress, u_short iListenPort, bool bReuseAddr /* = false */ )
{
SockAddrIn sinInterface ( iInterfaceAddress, iListenPort );
if ( bReuseAddr )
{
int optval = -1; // true
if ( SOCKET_ERROR == setsockopt ( so, SOL_SOCKET, SO_REUSEADDR, (const char*)&optval, sizeof(optval) ) )
{
#if defined(_DEBUG) && defined(WIN32)
if ( WSANOTINITIALISED == WSAGetLastError() )
MessageBox ( NULL, "You forgot to call suStartup()!", "SockUtils", MB_OK|MB_ICONEXCLAMATION );
#endif
return false;
}
}
if ( SOCKET_ERROR == bind(so, sinInterface, sizeof(sinInterface)) )
{
int err = SUERRNO;
if ( err != EADDRINUSE )
return false;
#if defined(_DEBUG) && defined(WIN32)
if ( WSANOTINITIALISED == WSAGetLastError() )
MessageBox ( NULL, "You forgot to call suStartup()!", "SockUtils", MB_OK|MB_ICONEXCLAMATION );
#endif
}
return true;
}
//// suBind ////////////////////////////////////////////////
// binds a UDP socket to an interface & port to receive
// data on that port
bool suBind ( SOCKET so, const char* szInterfaceAddress, u_short iListenPort, bool bReuseAddr /* = false */ )
{
in_addr_t iInterfaceAddr = inet_addr(szInterfaceAddress);
if ( iInterfaceAddr == INADDR_NONE )
return false;
return suBind ( so, iInterfaceAddr, iListenPort, bReuseAddr );
}
//// suEnableBroadcast ////////////////////////////////////////////////
// in order to send broadcast messages on a UDP socket, this function
// must be called first
bool suEnableBroadcast ( SOCKET so, bool bEnable /* = true */ )
{
int optval = bEnable ? -1 : 0;
if ( SOCKET_ERROR == setsockopt ( so, SOL_SOCKET, SO_BROADCAST, (const char*)&optval, sizeof(optval) ) )
return false;
return true;
}
//// suErrDesc ////////////////////////////////////////////////
// returns text description of error code
const char* suErrDesc ( int err )
{
static char errbuf[256];
#ifdef WIN32
switch ( err )
{
#define X(E) case E: return #E;
X(WSAEINTR) X(WSAEBADF)
X(WSAEACCES) X(WSAEFAULT)
X(WSAEINVAL) X(WSAEMFILE)
X(WSAEWOULDBLOCK) X(WSAEINPROGRESS)
X(WSAEALREADY) X(WSAENOTSOCK)
X(WSAEDESTADDRREQ) X(WSAEMSGSIZE)
X(WSAEPROTOTYPE) X(WSAENOPROTOOPT)
X(WSAEPROTONOSUPPORT) X(WSAESOCKTNOSUPPORT)
X(WSAEOPNOTSUPP) X(WSAEPFNOSUPPORT)
X(WSAEAFNOSUPPORT) X(WSAEADDRINUSE)
X(WSAEADDRNOTAVAIL) X(WSAENETDOWN)
X(WSAENETUNREACH) X(WSAENETRESET)
X(WSAECONNABORTED) X(WSAECONNRESET)
X(WSAENOBUFS) X(WSAEISCONN)
X(WSAENOTCONN) X(WSAESHUTDOWN)
X(WSAETOOMANYREFS) X(WSAETIMEDOUT)
X(WSAECONNREFUSED) X(WSAELOOP)
X(WSAENAMETOOLONG) X(WSAEHOSTDOWN)
X(WSAEHOSTUNREACH) X(WSAENOTEMPTY)
X(WSAEPROCLIM) X(WSAEUSERS)
X(WSAEDQUOT) X(WSAESTALE)
X(WSAEREMOTE) X(WSASYSNOTREADY)
X(WSAVERNOTSUPPORTED) X(WSANOTINITIALISED)
X(WSAEDISCON) X(WSAENOMORE)
X(WSAECANCELLED) X(WSAEINVALIDPROCTABLE)
X(WSAEINVALIDPROVIDER) X(WSAEPROVIDERFAILEDINIT)
X(WSASYSCALLFAILURE) X(WSASERVICE_NOT_FOUND)
X(WSATYPE_NOT_FOUND) X(WSA_E_NO_MORE)
X(WSA_E_CANCELLED) X(WSAEREFUSED)
#undef X
}
snprintf ( errbuf, sizeof(errbuf), "Unknown socket error (%lu)", err );
errbuf[sizeof(errbuf)-1] = '\0';
return errbuf;
#elif defined(UNIX)
perror(errbuf);
return errbuf;
#else
# error unrecognized target
#endif
}
#if defined(UNICODE) || defined(_UNICODE)
in_addr_t suLookupAddress ( const wchar_t* pcHost )
{
int len = wcslen(pcHost);
char* p = new char[len+1];
wcstombs ( p, pcHost, len );
p[len] = 0;
in_addr_t rc = suLookupAddress ( p );
delete[] p;
return rc;
}
bool suBroadcast ( SOCKET so, u_short port, const wchar_t* buf, int len /* = -1 */ )
{
char* p = new char[len+1];
wcstombs ( p, buf, len );
p[len] = 0;
bool rc = suBroadcast ( so, port, p, len );
delete[] p;
return rc;
}
int suRecv ( SOCKET so, wchar_t* buf, int buflen, int timeout )
{
char* p = new char[buflen+1];
int rc = suRecv ( so, p, buflen, timeout );
p[buflen] = 0;
mbstowcs ( buf, p, buflen );
delete[] p;
return rc;
}
int suRecvFrom ( SOCKET so, wchar_t* buf, int buflen, int timeout, sockaddr_in* from, int* fromlen )
{
char* p = new char[buflen+1];
int rc = suRecvFrom ( so, p, buflen, timeout, from, fromlen );
p[buflen] = 0;
mbs2wcs ( buf, p, buflen );
delete[] p;
return rc;
}
bool suBind ( SOCKET so, const wchar_t* szInterfaceAddress, u_short iListenPort, bool bReuseAddr /* = false */ )
{
int len = wcslen(szInterfaceAddress);
char* p = new char[len+1];
wcstombs ( p, szInterfaceAddress, len );
p[len] = 0;
bool rc = suBind ( so, p, iListenPort, bReuseAddr );
delete[] p;
return rc;
}
#endif//UNICODE
suBufferedRecvSocket::suBufferedRecvSocket ( SOCKET so )
: suSocket ( so ), _off(0), _len(0)
{
}
int suBufferedRecvSocket::recvUntil ( std::string& buf, char until, int timeout )
{
if ( !_len )
_off = 0;
else if ( _off > (sizeof(_buf)>>1) )
{
memmove ( _buf, &_buf[_off], _len );
_off = 0;
}
char* poff = &_buf[_off];
for ( ;; )
{
char* p = (char*)memchr ( poff, until, _len );
if ( p /*&& p < &poff[_len]*/ )
{
int ret_len = p-poff+1;
buf.resize ( ret_len );
memmove ( &buf[0], poff, ret_len );
_off += ret_len;
_len -= ret_len;
return ret_len;
}
int rc = suRecv ( *this, &poff[_len], sizeof(_buf)-_len-_off, timeout );
if ( rc < 0 )
{
if ( _len )
{
rc = _len;
buf.resize ( rc );
memmove ( &buf[0], &_buf[_off], rc );
_len = 0;
}
return rc;
}
_len += rc;
}
}
void suBufferedRecvSocket::recvPending()
{
if ( !_len )
_off = 0;
else if ( _off > (sizeof(_buf)>>1) )
{
memmove ( _buf, &_buf[_off], _len );
_off = 0;
}
char* poff = &_buf[_off];
while ( sizeof(_buf)-_len-_off )
{
int rc = suRecv ( *this, &poff[_len], sizeof(_buf)-_len-_off, 1 );
if ( rc <= 0 )
break;
_len += rc;
}
}
bool suBufferedRecvSocket::recvInStr ( char c )
{
return NULL != memchr ( &_buf[_off], c, _len );
}

View File

@@ -1,132 +0,0 @@
// SockUtils.h - Declarations for the Winsock utility functions module.
// (C) 2002-2004 Royce Mitchell III
// This file is under the BSD & LGPL licenses
#ifndef __SOCKUTILS_H
#define __SOCKUTILS_H
#include <string>
#ifdef WIN32
# include <winsock2.h>
# define in_addr_t u_long
# define SUERRNO WSAGetLastError()
# define EADDRINUSE WSAEADDRINUSE
# define ENOTSOCK WSAENOTSOCK
# define socklen_t int
#elif defined(UNIX)
# include <sys/types.h>
# include <sys/socket.h>
# include <netinet/in.h>
# include <unistd.h>
# include <errno.h>
# define closesocket(so) close(so)
# define SOCKET int
# define INVALID_SOCKET -1
# define SOCKET_ERROR -1
# define SUERRNO errno
# ifdef MACOSX
# define socklen_t int //Stupid mac
# endif
#else
# error unrecognized target
#endif
#include <assert.h>
extern bool suStartup();
extern SOCKET suTcpSocket();
extern SOCKET suUdpSocket();
extern bool suShutdownConnection(SOCKET sd);
extern in_addr_t suLookupAddress ( const char* pcHost );
extern bool suConnect ( SOCKET so, in_addr_t iAddress, u_short iPort );
extern bool suConnect ( SOCKET so, const char* szAddress, u_short iPort );
extern SOCKET suEstablishConnection ( in_addr_t iAddress, u_short iPort, int type );
extern SOCKET suEstablishConnection ( const char* szAddress, u_short iPort, int type );
extern bool suBroadcast ( SOCKET so, u_short port, const char* buf, int len = -1 );
extern int suRecv ( SOCKET so, char* buf, int buflen, int timeout );
extern int suRecvFrom ( SOCKET so, char* buf, int buflen, int timeout, sockaddr_in* from, socklen_t* fromlen );
extern bool suBind ( SOCKET so, in_addr_t iInterfaceAddress, u_short iListenPort, bool bReuseAddr = false );
extern bool suBind ( SOCKET so, const char* szInterfaceAddress, u_short iListenPort, bool bReuseAddr = false );
extern bool suEnableBroadcast ( SOCKET so, bool bEnable = true );
extern const char* suErrDesc ( int err );
#if defined(UNICODE) || defined(_UNICODE)
extern in_addr_t suLookupAddress ( const wchar_t* pcHost );
extern bool suBroadcast ( SOCKET so, u_short port, const wchar_t* buf, int len = -1 );
extern int suRecv ( SOCKET so, wchar_t* buf, int buflen, int timeout );
extern int suRecvFrom ( SOCKET so, wchar_t* buf, int buflen, int timeout, sockaddr_in* from, int* fromlen );
extern bool suBind ( SOCKET so, const wchar_t* szInterfaceAddress, u_short iListenPort, bool bReuseAddr = false );
#endif//UNICODE
class suSocket
{
SOCKET _so;
public:
suSocket ( SOCKET so = INVALID_SOCKET ) : _so(so)
{
}
const suSocket& operator = ( SOCKET so )
{
assert ( _so == INVALID_SOCKET ); // must Detach() or Close() existing socket first
_so = so;
return *this;
}
virtual ~suSocket()
{
Close();
}
void Close()
{
if ( _so != INVALID_SOCKET )
{
//suShutdownConnection ( _so ); // TODO - only valid on TCP sockets
closesocket ( _so );
_so = INVALID_SOCKET;
}
}
operator SOCKET() const
{
return _so;
}
SOCKET Attach ( SOCKET so )
{
SOCKET old = Detach();
_so = so;
return old;
}
SOCKET Detach()
{
SOCKET so = _so;
_so = INVALID_SOCKET;
return so;
}
private:
// disable copy semantics
suSocket ( const suSocket& );
const suSocket& operator = ( const suSocket& );
};
class suBufferedRecvSocket : public suSocket
{
char _buf[2048];
int _off;
int _len;
public:
suBufferedRecvSocket ( SOCKET so = INVALID_SOCKET );
int recvUntil ( std::string& buf, char until, int timeout );
void recvPending();
bool recvInStr ( char c );
};
class SockAddrIn : public sockaddr_in
{
public:
SockAddrIn(); // creates broadcast address
SockAddrIn ( const char* szAddr, u_short iPort );
SockAddrIn ( in_addr_t iAddr, u_short iPort );
operator sockaddr* () { return (sockaddr*)this; }
operator sockaddr_in* () { return (sockaddr_in*)this; }
};
#endif//__SOCKUTILS_H

View File

@@ -1,96 +0,0 @@
// SplitJoin.cpp
//
// This code is copyright 2003-2004 Royce Mitchell III
// and released under the BSD & LGPL licenses
#ifdef _MSC_VER
#pragma warning ( disable : 4786 ) // MSVC6 can't handle too-long template names
#endif//_MSC_VER
//#include <sstream>
#include "SplitJoin.h"
#include <string.h>
using std::string;
using std::vector;
//using std::stringstream;
static const char* quotes = "\"\'";
bool Split ( vector<string>& vec, const char* csv, char sep, bool merge )
{
string scsv ( csv );
char* col = &scsv[0];
vec.resize ( 0 );
for ( ;; )
{
char* p = col;
while ( isspace(*p) && *p != sep )
p++;
char quote = 0;
if ( strchr ( quotes, *p ) )
quote = *p++;
while ( *p && (*p != sep || quote) )
{
if ( *p++ == quote )
break;
}
while ( isspace(*p) && *p != sep )
p++;
if ( *p && *p != sep )
return false;
string scol ( col, p-col );
//quote = scol[0];
if ( quote )
{
if ( scol[scol.size()-1] == quote )
scol = string ( &scol[1], scol.size()-2 );
}
if ( scol.length() || !merge )
vec.push_back ( scol );
if ( !*p )
break;
col = p + 1;
}
return true;
}
bool Join ( string& csv, vector<string>& vec, char sep )
{
csv.resize(0);
for ( int i = 0; i < vec.size(); i++ )
{
if ( i )
csv += sep;
string& s = vec[i];
if ( strchr ( s.c_str(), sep ) )
{
if ( strchr ( s.c_str(), '\"' ) )
{
if ( strchr ( s.c_str(), '\'' ) )
return false; // the sep, " and ' are all in the string, can't build valid output
csv += '\'';
csv += s;
csv += '\'';
}
else
{
csv += '\"';
csv += s;
csv += '\"';
}
}
else
csv += s;
}
return true;
}

View File

@@ -1,32 +0,0 @@
// SplitJoin.h
//
// This code is copyright 2003-2004 Royce Mitchell III
// and released under the BSD & LGPL licenses
#ifndef SPLITJOIN_H
#define SPLITJOIN_H
#include <vector>
#include <string>
bool Split (
std::vector<std::string>& vec,
const char* csv,
char sep=',',
bool merge=false );
bool Join (
std::string& csv,
std::vector<std::string>& vec,
char sep=',' );
inline bool Split (
std::vector<std::string>& vec,
const std::string& csv,
char sep=',',
bool merge=false )
{
return Split ( vec, csv.c_str(), sep, merge );
}
#endif//SPLIT_H

View File

@@ -1,240 +0,0 @@
// ThreadPool.cpp
// This file is (C) 2003-2004 Royce Mitchell III
// and released under the LGPL & BSD licenses
#include <vector>
using std::vector;
#include "ThreadPool.h"
#include "QueueT.h"
#include "auto_vector.h"
#include "verify.h"
#include "ReliMT.h"
class PoolableThread : public ActiveObject
{
public:
PoolableThread ( ThreadPoolImpl& );
~PoolableThread()
{
Kill();
}
void InitThread();
void Run();
void FlushThread();
ThreadPoolImpl& _pool;
};
class ThreadPoolLaunchData
{
public:
ThreadPoolFunc* pFun;
void* pArg;
};
template <class T>
class AtomicCounter : public Uncopyable
{
Mutex _m;
T _t;
public:
AtomicCounter ( T init = 0 ) : _t(init)
{
}
AtomicCounter ( const AtomicCounter<T>& t )
{
//Mutex::Lock l ( _m ); // don't need to lock since this is a ctor
Mutex::Lock l2 ( t._m );
_t = t._t;
}
const AtomicCounter<T>& operator = ( const AtomicCounter<T>& t )
{
Mutex::Lock l ( _m );
Mutex::Lock l2 ( t._m );
_t = t._t;
return *this;
}
T operator ++ ()
{
Mutex::Lock l ( _m );
T t = _t++;
return t;
}
const AtomicCounter<T>& operator ++ ( int )
{
Mutex::Lock l ( _m );
++_t;
return *this;
}
T operator -- ()
{
Mutex::Lock l ( _m );
T t = _t--;
return t;
}
const AtomicCounter<T>& operator -- ( int )
{
Mutex::Lock l ( _m );
--_t;
return *this;
}
const AtomicCounter<T>& operator += ( T t )
{
Mutex::Lock l ( _m );
return _t += t;
return *this;
}
const AtomicCounter<T>& operator -= ( T t )
{
Mutex::Lock l ( _m );
return _t -= t;
return *this;
}
operator const T& () const
{
//Mutex::Lock l ( _m );
return _t;
}
T operator !() const
{
//Mutex::Lock l ( _m );
return !_t;
}
};
class ThreadPoolImpl : public Uncopyable
{
public:
ThreadPoolImpl() : _isDying(false), _idleThreads(0)
{
}
~ThreadPoolImpl()
{
}
void Shutdown()
{
_isDying = true;
while ( _idleThreads )
{
_threadWaitEvent.Release();
_threadStartEvent.Wait(); // let thread actually get a grip
}
}
void Launch ( ThreadPoolFunc* pFun, void* pArg )
{
// this mutex is necessary to make sure we never have a conflict
// between checking !_idleThreads and the call to _threadStartEvent.Wait()
// basically if 2 threads call Launch() simultaneously, and there is only
// 1 idle thread, it's possible that a new thread won't be created to
// satisfy the 2nd request until an existing thread finishes.
Mutex::Lock launchlock ( _launchMutex );
ASSERT ( pFun );
ThreadPoolLaunchData* data;
{
Mutex::Lock lock ( _vectorMutex );
if ( !_spareData.size() )
_spareData.push_back ( new ThreadPoolLaunchData() );
data = _spareData.pop_back().release();
if ( !_idleThreads )
_threads.push_back ( new PoolableThread(*this) );
}
data->pFun = pFun;
data->pArg = pArg;
verify ( _pendingData.Add ( data ) );
_threadWaitEvent.Release(); // tell a thread to do it's thing...
_threadStartEvent.Wait(); // wait on a thread to pick up the request
}
// functions for threads to call...
ThreadPoolLaunchData* GetPendingData()
{
ThreadPoolLaunchData* data = NULL;
++_idleThreads;
_threadWaitEvent.Wait(); // waits until there's a request
--_idleThreads;
_threadStartEvent.Release(); // tell requester we got it
if ( _isDying )
return NULL;
_pendingData.Get ( data );
ASSERT ( data );
return data;
}
void RecycleData ( ThreadPoolLaunchData* data )
{
Mutex::Lock lock ( _vectorMutex );
_spareData.push_back ( data );
}
bool _isDying;
Mutex _vectorMutex, _launchMutex;
auto_vector<PoolableThread> _threads;
auto_vector<ThreadPoolLaunchData> _spareData;
CQueueT<ThreadPoolLaunchData*> _pendingData;
Event _threadWaitEvent, _threadStartEvent;
AtomicCounter<int> _idleThreads;
};
///////////////////////////////////////////////////////////////////////////////
// ThreadPool
/*static*/ ThreadPool& ThreadPool::Instance()
{
static ThreadPool tp;
return tp;
}
ThreadPool::ThreadPool() : _pimpl ( new ThreadPoolImpl )
{
};
ThreadPool::~ThreadPool()
{
_pimpl->Shutdown();
delete _pimpl;
_pimpl = 0;
}
void ThreadPool::Launch ( ThreadPoolFunc* pFun, void* pArg )
{
_pimpl->Launch ( pFun, pArg );
}
int ThreadPool::IdleThreads()
{
return _pimpl->_idleThreads;
}
///////////////////////////////////////////////////////////////////////////////
// PoolableThread
PoolableThread::PoolableThread ( ThreadPoolImpl& pool ) : _pool(pool)
{
Start();
}
void PoolableThread::InitThread()
{
}
void PoolableThread::Run()
{
ThreadPoolLaunchData* data;
while ( !_isDying )
{
data = _pool.GetPendingData(); // enter wait state if none...
if ( !data ) // NULL data means kill thread
break;
(*data->pFun) ( data->pArg ); // call the function
_pool.RecycleData ( data );
}
}
void PoolableThread::FlushThread()
{
}

View File

@@ -1,28 +0,0 @@
// ThreadPool.h
// This file is (C) 2003-2004 Royce Mitchell III
// and released under the LGPL & BSD licenses
#ifndef THREADPOOL_H
#define THREADPOOL_H
#include "ReliMT.h"
typedef void THREADAPI ThreadPoolFunc ( void* );
class ThreadPoolImpl;
class ThreadPool : public Uncopyable
{
public:
static ThreadPool& Instance();
~ThreadPool();
void Launch ( ThreadPoolFunc* pFun, void* pArg );
int IdleThreads();
private:
ThreadPool();
ThreadPoolImpl *_pimpl;
};
#endif// THREADPOOL_H

View File

@@ -1,87 +0,0 @@
// auto_ptr.h
// This file is (C) 2002-2003 Royce Mitchell III
// and released under the LGPL & BSD licenses
#ifndef AUTO_PTR_H
#define AUTO_PTR_H
template<class T>
class auto_ptr
{
public:
typedef T element_type;
explicit auto_ptr(T *p = 0) : _p(p)
{
}
auto_ptr(auto_ptr<T>& rhs) : _p(rhs.release())
{
}
auto_ptr<T>& operator=(auto_ptr<T>& rhs)
{
if ( &rhs != this )
{
dispose();
_p = rhs.release();
}
return *this;
}
auto_ptr<T>& set ( auto_ptr<T>& rhs )
{
if ( &rhs != this )
{
dispose();
_p = rhs.release();
}
return *this;
}
~auto_ptr()
{
dispose();
}
void dispose()
{
if ( _p )
{
delete _p;
_p = 0;
}
}
T& operator[] ( int i )
{
return _p[i];
}
T& operator*() const
{
return *_p;
}
T* operator->() const
{
return _p;
}
T* get() const
{
return _p;
}
T* release()
{
T* p = _p;
_p = 0;
return p;
}
private:
T* _p;
};
#endif//AUTO_PTR_H

View File

@@ -1,141 +0,0 @@
// auto_vector.h
// This file is (C) 2002-2004 Royce Mitchell III
// and released under the LGPL & BSD licenses
#ifndef AUTO_VECTOR_H
#define AUTO_VECTOR_H
#include <sys/types.h>
#include "verify.h"
#include "auto_ptr.h"
template<class T>
class auto_vector
{
public:
explicit auto_vector ( size_t capacity = 0 )
: _arr(0), _capacity(0), _end(0)
{
if ( capacity != 0 )
_arr = new auto_ptr<T>[capacity];
_capacity = capacity;
}
~auto_vector()
{
delete []_arr;
}
size_t size() const
{
return _end;
}
const auto_ptr<T>& operator [] ( size_t i ) const
{
ASSERT ( i < _end );
return _arr[i];
}
auto_ptr<T>& operator [] ( size_t i )
{
ASSERT ( i < _end );
return _arr[i];
}
void assign ( size_t i, auto_ptr<T>& p )
{
ASSERT ( i < _end );
_arr[i] = p;
}
void assign_direct ( size_t i, T * p )
{
ASSERT ( i < _end );
reserve ( i + 1 );
_arr[i].reset ( p );
}
void push_back ( auto_ptr<T>& p )
{
reserve ( _end + 1 );
_arr[_end++] = p;
}
auto_ptr<T>& back()
{
ASSERT ( _end != 0 );
return _arr[_end-1];
}
void push_back ( T * p )
{
reserve ( _end + 1 );
auto_ptr<T> tmp(p);
_arr[_end++] = tmp;
//GCC is pedantic, this is an error.
//_arr[_end++] = auto_ptr<T>(p);
}
auto_ptr<T> pop_back()
{
ASSERT ( _end != 0 );
if ( !_end )
{
auto_ptr<T> tmp((T*)0);
return tmp;
//GCC, this is an error.
//return auto_ptr<T>(NULL);
}
return _arr[--_end];
}
void resize ( size_t newSize )
{
ASSERT ( newSize >= 0 );
reserve ( newSize ); // make sure we have at least this much room
_end = newSize;
}
void reserve ( size_t reqCapacity )
{
if ( reqCapacity <= _capacity )
return;
size_t newCapacity = 2 * _capacity;
if ( reqCapacity > newCapacity )
newCapacity = reqCapacity;
// allocate new array
auto_ptr<T> * arrNew = new auto_ptr<T> [newCapacity];
// transfer all entries
for ( size_t i = 0; i < _capacity; ++i )
arrNew[i] = _arr[i];
_capacity = newCapacity;
// free old memory
delete[] _arr;
// substitute new array for old array
_arr = arrNew;
}
void remove ( size_t off )
{
size_t last = _end-1;
if ( off == last )
resize ( last );
else if ( off < last )
{
auto_ptr<T> tmp ( pop_back().release() );
_arr[off] = tmp;
}
}
//typedef const_auto_iterator<T> const_iterator;
//const_iterator begin () const { return _arr; }
//const_iterator end () const { return _arr + _end; }
private:
auto_ptr<T> *_arr;
size_t _capacity;
size_t _end;
};
#endif//AUTO_VECTOR_H

View File

@@ -1,58 +0,0 @@
// base64.cpp
#include "base64.h"
using std::string;
static const char* alfabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
string base64_encode ( const string& sInput )
{
unsigned char x=0, topbit=0;
int v=0;
string sOutput;
do
{
if ( topbit < 6 )
{
x++;
v <<= 8;
if ( x <= sInput.length() ) v += sInput[x-1];
topbit += 8;
}
topbit -= 6;
if ( x > sInput.length() && !v )
break;
sOutput += alfabet[(v >> topbit) & 63];
v &= (1 << topbit) - 1;
} while ( x < sInput.length() || v );
int eq = (8 - (sOutput.length() % 4)) % 4;
while ( eq-- )
sOutput += '=';
return sOutput;
}
string base64_decode ( const string& sInput )
{
unsigned char x=0, topbit=0;
int v=0, inlen = sInput.length();
string sOutput;
while ( inlen && sInput[inlen-1] == '=' )
inlen--;
do
{
while ( topbit < 8 )
{
x++;
v <<= 6;
if ( x <= inlen ) v += (strchr(alfabet, sInput[x-1]) - alfabet);
topbit += 6;
}
topbit -= 8;
if ( x > inlen && !v )
break;
sOutput += (char)((v >> topbit) & 255);
v &= ((1 << topbit) - 1);
} while ( x <= inlen || v );
return sOutput;
}

View File

@@ -1,12 +0,0 @@
// base64.h
#ifndef BASE64_H
#define BASE64_H
#include <string>
std::string base64_encode ( const std::string& s );
std::string base64_decode ( const std::string& s );
#endif//BASE64_H

View File

@@ -1,15 +0,0 @@
// chomp.cpp
// This file is (C) 2004 Royce Mitchell III
// and released under the BSD & LGPL licenses
#include "chomp.h"
std::string chomp ( const std::string& s )
{
const char* p = &s[0];
const char* p2 = &s[0] + s.size();
while ( p2 > p && strchr("\r\n", p2[-1]) )
p2--;
return std::string ( p, p2-p );
}

View File

@@ -1,13 +0,0 @@
// chomp.h
// This file is (C) 2004 Royce Mitchell III
// and released under the BSD & LGPL licenses
#ifndef CHOMP_H
#define CHOMP_H
#include <string>
std::string chomp ( const std::string& s );
#endif//TRIM_H

View File

@@ -1,7 +0,0 @@
#define SERVER "irc.freenode.net"
#define BOTNAME "ArchBlackmann"
#define CHANNEL "#ReactOS"
#define MODE "+i"
#define PASS "ilovebunnies"

View File

@@ -1,23 +0,0 @@
// cram_md5.cpp
// This file is (C) 2004 Royce Mitchell III
// and released under the BSD & LGPL licenses
#include "MD5.h"
#include "cram_md5.h"
#include "base64.h"
using std::string;
string cram_md5 ( const string& username, const string& password, const string& greeting )
{
string challenge = base64_decode ( greeting );
string hmac = HMAC_MD5 ( password, challenge );
//printf ( "(cram_md5): hmac = %s\n", hmac.c_str() );
string raw_response = username;
raw_response += " ";
raw_response += hmac;
//printf ( "(cram_md5): raw_response = %s\n", raw_response.c_str() );
return base64_encode ( raw_response );
}

View File

@@ -1,15 +0,0 @@
// cram_md5.h
// This file is (C) 2004 Royce Mitchell III
// and released under the BSD & LGPL licenses
#ifndef CRAM_MD5_H
#define CRAM_MD5_H
#include <string>
std::string cram_md5 (
const std::string& username,
const std::string& password,
const std::string& greeting );
#endif//CRAM_MD5_H

View File

@@ -1,27 +0,0 @@
shit
fuck
pussy
ass
ass-
-ass
dumbass
jackass
fatass
asshole
smartass
cunt
fucker
bitch
dick
penile
stfu
omfg
lmao
ass.
-ass.
semprini
goat.cx
ekush
akshor
poop
guten morgen

View File

@@ -1,10 +0,0 @@
You should have your mouth washed out with soap!
This is a clean channel... please watch your language
Please try to keep it clean
Hey, there's children present ( I'm not even a year old yet! )
Could you find a less-offensive way to express yourself, please?
Such language :(
Those aren't nice words to use
Oh, my poor innocent ears :(
Help! My mind is being corrupted!
filthy mouths are not appreciated here

View File

@@ -1,15 +0,0 @@
Royce3
kjk_hyperion
tamlin
GvG
filip2307
hardon
w3seek
arty
sedwards
Exception
blight_
jimtabor
mtempel
Gge
Alex_Ionescu

View File

@@ -1,580 +0,0 @@
CcCanIWrite
CcCopyRead
CcCopyWrite
CcDeferWrite
CcFastCopyRead
CcFastCopyWrite
CcFlushCache
CcGetDirtyPages
CcGetFileObjectFromBcb
CcGetFileObjectFromSectionPtrs
CcGetFlushedValidData
CcGetLsnForFileObject
CcInitializeCacheMap
CcIsThereDirtyData
CcMapData
CcMdlRead
CcMdlReadComplete
CcMdlWriteAbort
CcMdlWriteComplete
CcPinMappedData
CcPinRead
CcPrepareMdlWrite
CcPreparePinWrite
CcPurgeCacheSection
CcRemapBcb
CcRepinBcb
CcScheduleReadAhead
CcSetAdditionalCacheAttributes
CcSetBcbOwnerPointer
CcSetDirtyPageThreshold
CcSetDirtyPinnedData
CcSetFileSizes
CcSetLogHandleForFile
CcSetReadAheadGranularity
CcUninitializeCacheMap
CcUnpinData
CcUnpinDataForThread
CcUnpinRepinnedBcb
CcWaitForCurrentLazyWriterActivity
CcZeroData
DbgLoadImageSymbols
DbgQueryDebugFilterState
DbgSetDebugFilterState
EVENT_TYPE
ExAcquireResourceExclusive
ExAcquireResourceExclusiveLite
ExAcquireResourceSharedLite
ExAcquireSharedStarveExclusive
ExAcquireSharedWaitForExclusive
ExAllocateFromZone
ExAllocatePool
ExAllocatePoolWithQuota
ExAllocatePoolWithQuotaTag
ExAllocatePoolWithTag
ExConvertExclusiveToSharedLite
ExCreateCallback
ExDeleteNPagedLookasideList
ExDeletePagedLookasideList
ExDeleteResource
ExDeleteResourceLite
ExDisableResourceBoostLite
ExEnumHandleTable
ExExtendZone
ExFreePool
ExGetCurrentProcessorCounts
ExGetCurrentProcessorCpuUsage
ExGetExclusiveWaiterCount
ExGetPreviousMode
ExGetSharedWaiterCount
ExInitializeNPagedLookasideList
ExInitializePagedLookasideList
ExInitializeResource
ExInitializeResourceLite
ExInitializeZone
ExInterlockedAddLargeInteger
ExInterlockedAddUlong
ExInterlockedDecrementLong
ExInterlockedExchangeUlong
ExInterlockedExtendZone
ExInterlockedIncrementLong
ExInterlockedInsertHeadList
ExInterlockedInsertTailList
ExInterlockedPopEntryList
ExInterlockedPushEntryList
ExInterlockedRemoveHeadList
ExIsProcessorFeaturePresent
ExIsResourceAcquiredExclusiveLite
ExIsResourceAcquiredSharedLite
ExLocalTimeToSystemTime
ExNotifyCallback
ExPostSystemEvent
ExQueryPoolBlockSize
ExQueueWorkItem
ExRaiseAccessViolation
ExRaiseDatatypeMisalignment
ExRaiseException
ExRaiseHardError
ExRaiseStatus
ExRegisterCallback
ExReinitializeResourceLite
ExReleaseResource
ExReleaseResourceForThread
ExReleaseResourceForThreadLite
ExRosDumpPagedPoolByTag
ExRosQueryPoolTag
ExSetResourceOwnerPointer
ExSetTimerResolution
ExSystemExceptionFilter
ExSystemTimeToLocalTime
ExTryToAcquireResourceExclusiveLite
ExUnregisterCallback
ExUuidCreate
ExVerifySuite
FsRtlAcquireFileExclusive
FsRtlAddMcbEntry
FsRtlAddToTunnelCache
FsRtlAllocateFileLock
FsRtlAllocatePool
FsRtlAllocatePoolWithQuota
FsRtlAllocatePoolWithQuotaTag
FsRtlAllocatePoolWithTag
FsRtlAllocateResource
FsRtlAreNamesEqual
FsRtlBalanceReads
FsRtlCheckLockForReadAccess
FsRtlCheckLockForWriteAccess
FsRtlCopyRead
FsRtlCopyWrite
FsRtlFastCheckLockForRead
FsRtlFastCheckLockForWrite
FsRtlFastUnlockAll
FsRtlFastUnlockAllByKey
FsRtlFastUnlockSingle
FsRtlFindInTunnelCache
FsRtlFreeFileLock
FsRtlGetFileSize
FsRtlGetNextFileLock
FsRtlGetNextMcbEntry
FsRtlIncrementCcFastReadNoWait
FsRtlIncrementCcFastReadNotPossible
FsRtlIncrementCcFastReadResourceMiss
FsRtlIncrementCcFastReadWait
FsRtlInitializeFileLock
FsRtlInitializeMcb
FsRtlInitializeTunnelCache
FsRtlInsertPerFileObjectContext
FsRtlInsertPerStreamContext
FsRtlIsDbcsInExpression
FsRtlIsFatDbcsLegal
FsRtlIsHpfsDbcsLegal
FsRtlIsNameInExpression
FsRtlLookupLastLargeMcbEntryAndIndex
FsRtlLookupLastMcbEntry
FsRtlLookupMcbEntry
FsRtlLookupPerFileObjectContext
FsRtlLookupPerStreamContextInternal
FsRtlMdlRead
FsRtlMdlReadComplete
FsRtlMdlReadCompleteDev
FsRtlMdlReadDev
FsRtlMdlWriteComplete
FsRtlMdlWriteCompleteDev
FsRtlNotifyChangeDirectory
FsRtlNotifyCleanup
FsRtlNotifyFilterChangeDirectory
FsRtlNotifyFilterReportChange
FsRtlNotifyFullChangeDirectory
FsRtlNotifyFullReportChange
FsRtlNotifyReportChange
FsRtlNotifyUninitializeSync
FsRtlNumberOfRunsInMcb
FsRtlPostPagingFileStackOverflow
FsRtlPostStackOverflow
FsRtlPrepareMdlWrite
FsRtlPrepareMdlWriteDev
FsRtlPrivateLock
FsRtlProcessFileLock
FsRtlRegisterFileSystemFilterCallbacks
FsRtlReleaseFile
FsRtlRemoveMcbEntry
FsRtlRemovePerFileObjectContext
FsRtlRemovePerStreamContext
FsRtlResetLargeMcb
FsRtlSyncVolumes
FsRtlTeardownPerStreamContexts
FsRtlTruncateMcb
FsRtlUninitializeFileLock
FsRtlUninitializeMcb
HalAdjustResourceList
HalAllocateCommonBuffer
HalAssignSlotResources
HalCalibratePerformanceCounter
HalFlushCommonBuffer
HalFreeCommonBuffer
HalGetAdapter
HalGetBusData
HalGetBusDataByOffset
HalGetDmaAlignmentRequirement
HalMakeBeep
HalQueryDisplayParameters
HalQueryRealTimeClock
HalReadDmaCounter
HalRequestIpi
HalSetBusData
HalSetBusDataByOffset
HalSetDisplayParameters
HalSetRealTimeClock
HalStartNextProcessor
IoAcquireCancelSpinLock
IoAcquireRemoveLockEx
IoAcquireVpbSpinLock
IoAllocateAdapterChannel
IoAllocateController
IoAllocateDriverObjectExtension
IoAllocateErrorLogEntry
IoAllocateIrp
IoAllocateMdl
IoAllocateWorkItem
IoAssignResources
IoAttachDevice
IoAttachDeviceByPointer
IoAttachDeviceToDeviceStack
IoAttachDeviceToDeviceStackSafe
IoBuildAsynchronousFsdRequest
IoBuildDeviceIoControlRequest
IoBuildPartialMdl
IoBuildSynchronousFsdRequest
IoCallDriver
IoCancelFileOpen
IoCancelIrp
IoCheckQuerySetFileInformation
IoCheckQuerySetVolumeInformation
IoCheckQuotaBufferValidity
IoCheckShareAccess
IoCompleteRequest
IoConnectInterrupt
IoCreateController
IoCreateDevice
IoCreateDisk
IoCreateDriver
IoCreateFile
IoCreateFileSpecifyDeviceObjectHint
IoCreateNotificationEvent
IoCreateStreamFileObject
IoCreateStreamFileObjectEx
IoCreateStreamFileObjectLite
IoCreateSymbolicLink
IoCreateSynchronizationEvent
IoCreateUnprotectedSymbolicLink
IoDeleteController
IoDeleteDevice
IoDeleteDriver
IoDeleteSymbolicLink
IoDetachDevice
IoDisconnectInterrupt
IoEnqueueIrp
IoEnumerateDeviceObjectList
IoFlushAdapterBuffers
IoForwardIrpSynchronously
IoFreeAdapterChannel
IoFreeController
IoFreeErrorLogEntry
IoFreeIrp
IoFreeMapRegisters
IoFreeMdl
IoFreeWorkItem
IoGetAttachedDevice
IoGetAttachedDeviceReference
IoGetBaseFileSystemDeviceObject
IoGetBootDiskInformation
IoGetConfigurationInformation
IoGetCurrentProcess
IoGetDeviceAttachmentBaseRef
IoGetDeviceInterfaceAlias
IoGetDeviceInterfaces
IoGetDeviceObjectPointer
IoGetDeviceProperty
IoGetDeviceToVerify
IoGetDiskDeviceObject
IoGetDriverObjectExtension
IoGetFileObjectGenericMapping
IoGetInitialStack
IoGetLowerDeviceObject
IoGetRelatedDeviceObject
IoGetRequestorProcess
IoGetRequestorProcessId
IoGetRequestorSessionId
IoGetStackLimits
IoGetTopLevelIrp
IoInitializeIrp
IoInitializeRemoveLockEx
IoInitializeTimer
IoInvalidateDeviceRelations
IoInvalidateDeviceState
IoIsFileOriginRemote
IoIsOperationSynchronous
IoIsSystemThread
IoIsValidNameGraftingBuffer
IoMakeAssociatedIrp
IoMapTransfer
IoOpenDeviceInstanceKey
IoOpenDeviceInterfaceRegistryKey
IoOpenDeviceRegistryKey
IoPageRead
IoPnPDeliverServicePowerNotification
IoQueryDeviceDescription
IoQueryDeviceEnumInfo
IoQueryFileDosDeviceName
IoQueryFileInformation
IoQueryVolumeInformation
IoQueueThreadIrp
IoQueueWorkItem
IoRaiseHardError
IoRaiseInformationalHardError
IoReadDiskSignature
IoReadPartitionTableEx
IoRegisterBootDriverReinitialization
IoRegisterDeviceInterface
IoRegisterDriverReinitialization
IoRegisterFileSystem
IoRegisterFsRegistrationChange
IoRegisterLastChanceShutdownNotification
IoRegisterPlugPlayNotification
IoRegisterShutdownNotification
IoReleaseCancelSpinLock
IoReleaseRemoveLockAndWaitEx
IoReleaseRemoveLockEx
IoReleaseVpbSpinLock
IoRemoveShareAccess
IoReportDetectedDevice
IoReportHalResourceUsage
IoReportResourceForDetection
IoReportResourceUsage
IoReportTargetDeviceChange
IoReportTargetDeviceChangeAsynchronous
IoRequestDeviceEject
IoReuseIrp
IoSetCompletionRoutineEx
IoSetDeviceInterfaceState
IoSetDeviceToVerify
IoSetFileOrigin
IoSetHardErrorOrVerifyDevice
IoSetInformation
IoSetIoCompletion
IoSetPartitionInformationEx
IoSetShareAccess
IoSetStartIoAttributes
IoSetSystemPartition
IoSetThreadHardErrorMode
IoSetTopLevelIrp
IoStartNextPacket
IoStartNextPacketByKey
IoStartPacket
IoStartTimer
IoStopTimer
IoSynchronousInvalidateDeviceRelations
IoSynchronousPageWrite
IoUnregisterFileSystem
IoUnregisterFsRegistrationChange
IoUnregisterPlugPlayNotification
IoUnregisterShutdownNotification
IoUpdateShareAccess
IoValidateDeviceIoControlAccess
IoVerifyPartitionTable
IoVerifyVolume
IoVolumeDeviceToDosName
IoWMIAllocateInstanceIds
IoWMIDeviceObjectToInstanceName
IoWMIExecuteMethod
IoWMIHandleToInstanceName
IoWMIOpenBlock
IoWMIQueryAllData
IoWMIQueryAllDataMultiple
IoWMIQuerySingleInstance
IoWMIQuerySingleInstanceMultiple
IoWMIRegistrationControl
IoWMISetNotificationCallback
IoWMISetSingleInstance
IoWMISetSingleItem
IoWMISuggestInstanceName
IoWMIWriteEvent
IoWriteErrorLogEntry
IoWritePartitionTableEx
KPRIORITY
KdPortGetByte
KdPortPollByte
KdPortPutByte
Ke386QueryIoAccessMap
Ke386SetIoAccessMap
KeAcquireInterruptSpinLock
KeAreApcsDisabled
KeCapturePersistentThreadState
KeDeregisterBugCheckReasonCallback
KeFindConfigurationEntry
KeFindConfigurationNextEntry
KeFlushEntireTb
KeFlushQueuedDpcs
KeGetRecommendedSharedDataAlignment
KeIsExecutingDpc
KeQueryActiveProcessors
KeQueryPerformanceCounter
KeQueryPriorityThread
KeQueryRuntimeThread
KeQuerySystemTime
KeQueryTickCount
KeQueryTimeIncrement
KeRaiseIrql
KeRaiseIrqlToDpcLevel
KeRaiseUserException
KeReadStateEvent
KeRegisterBugCheckCallback
KeRegisterBugCheckReasonCallback
KeReleaseInterruptSpinLock
KeReleaseMutant
KeReleaseMutex
KeReleaseSemaphore
KeReleaseSpinLock
KeReleaseSpinLockFromDpcLevel
KeReleaseSpinLockFromDpcLevel
KeRemoveByKeyDeviceQueue
KeRemoveByKeyDeviceQueueIfBusy
KeRemoveDeviceQueue
KeRemoveEntryDeviceQueue
KeRemoveSystemServiceTable
KeRestoreFloatingPointState
KeRevertToUserAffinityThread
KeRosDumpStackFrames
KeRosGetStackFrames
KeRosPrintAddress
KeSaveFloatingPointState
KeSetDmaIoCoherency
KeSetEvent
KeSetEventBoostPriority
KeSetIdealProcessorThread
KeSetKernelStackSwapEnable
KeSetProfileIrql
KeSetSystemAffinityThread
KeSetTimeIncrement
KeTerminateThread
KeUserModeCallback
KeWaitForMutexObject
KeWaitForSingleObject
KiCoprocessorError
KiUnexpectedInterrupt
LONG
LdrFindResourceDirectory_U
MmAddPhysicalMemory
MmAddVerifierThunks
MmAdjustWorkingSetSize
MmAdvanceMdl
MmAllocateContiguousMemory
MmAllocateContiguousMemorySpecifyCache
MmAllocateMappingAddress
MmAllocateNonCachedMemory
MmBuildMdlForNonPagedPool
MmCanFileBeTruncated
MmCreateMdl
MmCreateSection
MmDbgTranslatePhysicalAddress
MmDisableModifiedWriteOfSection
MmFlushImageSection
MmForceSectionClosed
MmFreeContiguousMemory
MmFreeMappingAddress
MmFreeNonCachedMemory
MmGetPhysicalAddress
MmGetPhysicalMemoryRanges
MmGetSystemRoutineAddress
MmGetVirtualForPhysical
MmGrowKernelStack
MmIsAddressValid
MmIsDriverVerifying
MmIsNonPagedSystemAddressValid
MmIsRecursiveIoFault
MmIsThisAnNtAsSystem
MmIsVerifierEnabled
MmLockPagableDataSection
MmLockPagableImageSection
MmLockPagableSectionByHandle
MmMapIoSpace
MmMapLockedPages
MmMapLockedPagesWithReservedMapping
MmMapMemoryDumpMdl
MmMapUserAddressesToPage
MmMapVideoDisplay
MmMapViewInSessionSpace
MmMapViewInSystemSpace
MmMapViewOfSection
MmMarkPhysicalMemoryAsBad
MmMarkPhysicalMemoryAsGood
MmPageEntireDriver
MmPrefetchPages
MmProbeAndLockPages
MmProbeAndLockProcessPages
MmProbeAndLockSelectedPages
MmProtectMdlSystemAddress
MmQuerySystemSize
MmRemovePhysicalMemory
MmResetDriverPaging
MmSecureVirtualMemory
MmSetAddressRangeModified
MmSetBankedSection
MmSizeOfMdl
MmTrimAllSystemPagableMemory
MmUnlockPagableImageSection
MmUnlockPages
MmUnmapIoSpace
MmUnmapLockedPages
MmUnmapReservedMapping
MmUnmapVideoDisplay
MmUnmapViewInSessionSpace
MmUnmapViewInSystemSpace
MmUnmapViewOfSection
MmUnsecureVirtualMemory
OUT
ObCreateObject
PEJOB
PEPROCESS
PKBUGCHECK_CALLBACK_RECORD
PKDEVICE_QUEUE_ENTRY
PKIRQL
PULONG
PVOID
PW32_THREAD_CALLBACK
PoCallDriver
PoRegisterDeviceForIdleDetection
PoRegisterSystemState
PoRequestPowerIrp
PoSetDeviceBusy
PoSetPowerState
PoSetSystemState
PoStartNextPowerIrp
PoUnregisterSystemState
ProbeForRead
ProbeForWrite
PsAssignImpersonationToken
PsCreateSystemProcess
PsCreateSystemThread
PsGetCurrentProcessId
PsGetCurrentThreadId
PsImpersonateClient
PsReferenceImpersonationToken
PsReferencePrimaryToken
PsRevertThreadToSelf
PsRevertToSelf
PsTerminateSystemThread
READ_PORT_BUFFER_UCHAR
READ_PORT_BUFFER_ULONG
READ_PORT_BUFFER_USHORT
READ_PORT_UCHAR
READ_PORT_ULONG
READ_PORT_USHORT
SeAssignSecurityEx
SeAuditHardLinkCreation
SeAuditingFileEvents
SeAuditingFileEventsWithContext
SeAuditingFileOrGlobalEvents
SeAuditingHardLinkEvents
SeAuditingHardLinkEventsWithContext
SeCaptureSecurityDescriptor
SeCaptureSubjectContext
SeCloseObjectAuditAlarm
SeCreateAccessState
SeCreateClientSecurityFromSubjectContext
SeFilterToken
SeImpersonateClientEx
SePrivilegeObjectAuditAlarm
SeQueryInformationToken
SeQuerySessionIdToken
SeReleaseSecurityDescriptor
SeSetSecurityDescriptorInfoEx
SeTokenIsAdmin
SeTokenIsRestricted
SeTokenIsWriteRestricted
WRITE_PORT_BUFFER_UCHAR
WRITE_PORT_BUFFER_ULONG
WRITE_PORT_BUFFER_USHORT
WRITE_PORT_UCHAR
WRITE_PORT_ULONG
WRITE_PORT_USHORT

View File

@@ -1,10 +0,0 @@
/me bows humbly and begs %s's forgiveness
%s is soo cool... I hope to be like him some day
/me hides in a corner and hopes %s doesn't beat him with the whipping noodle again
/me prostrates at %s's feet and begs his majesty's forgiveness
%s: please don't hurt me!
I'm not worthy... I'm not worthy...
/me sings %s's praises to the world!
/me thinks %s is smarter than %dev%
%s: oh please may I defrag your sock drawer?
/me gives %s a cookie, hoping it will make up for breaking %func% the other day...

View File

@@ -1 +0,0 @@
/me is bored

View File

@@ -1,9 +0,0 @@
PASSIVE_LEVEL
APC_LEVEL
DISPATCH_LEVEL
PROFILE_LEVEL
CLOCK1_LEVEL
IPI_LEVEL
POWER_LEVEL
HIGH_LEVEL
SYNCH_LEVEL

View File

@@ -1,38 +0,0 @@
TARGET := ArchBlackmann.exe
.PHONY: all
all: $(TARGET)
CPP=mingw32-g++
CFLAGS := -DWIN32 -D_DEBUG -D_CONSOLE -D_MBCS
LFLAGS :=
LIBS := -lstdc++ -lws2_32
SRCS := ArchBlackmann.cpp \
base64.cpp \
chomp.cpp \
cram_md5.cpp \
File.cpp \
IRCClient.cpp \
MD5.cpp \
panic.cpp \
ReliMT.cpp \
SockUtils.cpp \
SplitJoin.cpp \
ssprintf.cpp \
ThreadPool.cpp \
trim.cpp
OBJS := $(SRCS:.cpp=.o)
$(TARGET): $(OBJS)
$(CPP) $(LFLAGS) -o $@ $(OBJS) $(LIBS)
.cpp.o: $<
$(CPP) $(CFLAGS) -c $< -o $@
.PHONY: clean
clean:
-@del $(TARGET)
-@del $(OBJS)

View File

@@ -1,13 +0,0 @@
the kernel
ntoskrnl
win32k
msafd
ws2_32
user32
shell32
the cache manager
tdi
the scheduler
the thread queue
the message queue
atapi

View File

@@ -1,5 +0,0 @@
/me slaps %s with a large trout
recycle(%s)
Did I hear something? Musta been a %s-fly... Where's that fly-swatter?
%s: go away son, you bother me....
/me beats %s with the whipping noodle

View File

@@ -1,34 +0,0 @@
// panic.cpp
// This file is (C) 2003-2004 Royce Mitchell III
// and released under the BSD & LGPL licenses
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#ifdef WIN32
#include <conio.h>
#include <windows.h>
#endif//WIN32
#include "panic.h"
void panic ( const char* format, ... )
{
va_list arg;
int done;
va_start(arg, format);
#if defined(WIN32) && !defined(_CONSOLE)
char buf[4096];
_vsnprintf ( buf, sizeof(buf)-1, format, arg );
MessageBox ( NULL, buf, "Panic!", MB_OK|MB_ICONEXCLAMATION );
#else
done = vprintf(format, arg);
printf ( "\n" );
#endif
va_end(arg);
#if defined(WIN32) && defined(_CONSOLE)
printf ( "Press any key to exit\n" );
(void)getch();
#endif//WIN32 && _CONSOLE
exit ( -1 );
}

View File

@@ -1,18 +0,0 @@
// panic.h
// This file is (C) 2003-2004 Royce Mitchell III
// and released under the BSD & LGPL licenses
#ifndef PANIC_H
#define PANIC_H
void panic ( const char* format, ... );
#define suAssert(expr) if ( !(expr) ) panic ( "%s(%lu): SOCKET ERROR %s\nExpression: %s\n", __FILE__, __LINE__, suErrDesc(SUERRNO), #expr )
#if defined(DEBUG) || defined(_DEBUG)
# define suVerify(expr) suAssert(expr)
#else
# define suVerify(expr) expr
#endif
#endif//PANIC_H

View File

@@ -1,11 +0,0 @@
minute
hour
day
week
fortnight
month
year
decade
century
millenium
eon

View File

@@ -1,44 +0,0 @@
This doc can be also found on the wiki.
ArchBlackman is a IRC-Chat bot of the #reactos irc channel. He has been coded by Royce3 and DrFred (mbosma) currently runs him.
If some one use a swear word he'll tell him not to do so and you can also ask him something technical about reactos. :)
Besides this he also knows some commands. The systax for giving him commands "ArchBlackmann: !grovel". (don't forget to address him)
- !grovel - This is the only command that non ops can do (No Parameter)
- !kiss <person>
- !hug <person>
- !give <someone> <something>
- !say <something> - You can tell him to say something on the channel via PrivateMessage
ArchBlackmann know what he should say from some text files. They can be found on the svn-dir. But can also edit them online if you are op using:
- !add <list> <item>
- !remove <list> <item>
List that are used directly to create responses are:
- tech - here are the sentences ArchBlackmann says when he finds his name
- curse - this are the curses he looks for
- cursecop - this the responces to them
- grovel - this is said when an op does the grovel command
- nogrovel - this when someone else does it
The remaining lists are not used directly, but by the other lists.
They are:
- dev
- func
- irql
- module
- period
- status
- stru
- type
And they are used like this:
/me thinks %s is smarter than %dev%

View File

@@ -1,998 +0,0 @@
// ssprintf.cpp
#include <malloc.h>
#include <math.h>
#include <float.h>
#include <assert.h>
#include "ssprintf.h"
#ifdef _MSC_VER
#define alloca _alloca
#endif//_MSC_VER
typedef __int64 LONGLONG;
typedef unsigned __int64 ULONGLONG;
typedef struct {
unsigned int mantissa:23;
unsigned int exponent:8;
unsigned int sign:1;
} ieee_float_t;
typedef struct {
unsigned int mantissal:32;
unsigned int mantissah:20;
unsigned int exponent:11;
unsigned int sign:1;
} ieee_double_t;
typedef struct {
unsigned int mantissal:32;
unsigned int mantissah:32;
unsigned int exponent:15;
unsigned int sign:1;
unsigned int empty:16;
} ieee_long_double_t;
std::string ssprintf ( const char* fmt, ... )
{
va_list arg;
va_start(arg, fmt);
std::string f = ssvprintf ( fmt, arg );
va_end(arg);
return f;
}
#define ZEROPAD 1 /* pad with zero */
#define SIGN 2 /* unsigned/signed long */
#define PLUS 4 /* show plus */
#define SPACE 8 /* space if plus */
#define LEFT 16 /* left justified */
#define SPECIAL 32 /* 0x */
#define LARGE 64 /* use 'ABCDEF' instead of 'abcdef' */
#define ZEROTRUNC 128 /* truncate zero 's */
static int skip_atoi(const char **s)
{
int i=0;
while (isdigit(**s))
i = i*10 + *((*s)++) - '0';
return i;
}
static int do_div(LONGLONG *n,int base)
{
int __res = ((ULONGLONG) *n) % (unsigned) base;
*n = ((ULONGLONG) *n) / (unsigned) base;
return __res;
}
static bool number(std::string& f, LONGLONG num, int base, int size, int precision ,int type)
{
char c,sign,tmp[66];
const char *digits="0123456789abcdefghijklmnopqrstuvwxyz";
int i;
if (type & LARGE)
digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
if (type & LEFT)
type &= ~ZEROPAD;
if (base < 2 || base > 36)
return 0;
c = (type & ZEROPAD) ? '0' : ' ';
sign = 0;
if (type & SIGN) {
if (num < 0) {
sign = '-';
num = -num;
size--;
} else if (type & PLUS) {
sign = '+';
size--;
} else if (type & SPACE) {
sign = ' ';
size--;
}
}
if (type & SPECIAL) {
if (base == 16)
size -= 2;
else if (base == 8)
size--;
}
i = 0;
if (num == 0)
tmp[i++]='0';
else while (num != 0)
tmp[i++] = digits[do_div(&num,base)];
if (i > precision)
precision = i;
size -= precision;
if (!(type&(ZEROPAD+LEFT)))
while(size-->0)
f += ' ';
if (sign)
f += sign;
if (type & SPECIAL)
{
if (base==8)
f += '0';
else if (base==16)
{
f += '0';
f += digits[33];
}
}
if (!(type & LEFT))
{
while (size-- > 0)
f += c;
}
while (i < precision--)
{
f += '0';
}
while (i-- > 0)
{
f += tmp[i];
}
while (size-- > 0)
{
f += ' ';
}
return true;
}
static bool numberf(std::string& f, double __n, char exp_sign, int size, int precision, int type)
{
double exponent = 0.0;
double e;
long ie;
//int x;
char *buf, *tmp;
int i = 0;
int j = 0;
//int k = 0;
double frac, intr;
double p;
char sign;
char c;
char ro = 0;
int result;
union
{
double* __n;
ieee_double_t* n;
} n;
n.__n = &__n;
if ( exp_sign == 'g' || exp_sign == 'G' || exp_sign == 'e' || exp_sign == 'E' ) {
ie = ((unsigned int)n.n->exponent - (unsigned int)0x3ff);
exponent = ie/3.321928;
}
if ( exp_sign == 'g' || exp_sign == 'G' ) {
type |= ZEROTRUNC;
if ( exponent < -4 || fabs(exponent) >= precision )
exp_sign -= 2; // g -> e and G -> E
}
if ( exp_sign == 'e' || exp_sign == 'E' ) {
frac = modf(exponent,&e);
if ( frac > 0.5 )
e++;
else if ( frac < -0.5 )
e--;
result = numberf(f,__n/pow(10.0L,e),'f',size-4, precision, type);
if (result < 0)
return false;
f += exp_sign;
size--;
ie = (long)e;
type = LEFT | PLUS;
if ( ie < 0 )
type |= SIGN;
result = number(f,ie, 10,2, 2,type );
if (result < 0)
return false;
return true;
}
if ( exp_sign == 'f' ) {
buf = (char*)alloca(4096);
if (type & LEFT) {
type &= ~ZEROPAD;
}
c = (type & ZEROPAD) ? '0' : ' ';
sign = 0;
if (type & SIGN) {
if (__n < 0) {
sign = '-';
__n = fabs(__n);
size--;
} else if (type & PLUS) {
sign = '+';
size--;
} else if (type & SPACE) {
sign = ' ';
size--;
}
}
frac = modf(__n,&intr);
// # flags forces a . and prevents trucation of trailing zero's
if ( precision > 0 ) {
//frac = modfl(__n,&intr);
i = precision-1;
while ( i >= 0 ) {
frac*=10.0L;
frac = modf(frac, &p);
buf[i] = (int)p + '0';
i--;
}
i = precision;
size -= precision;
ro = 0;
if ( frac > 0.5 ) {
ro = 1;
}
if ( precision >= 1 || type & SPECIAL) {
buf[i++] = '.';
size--;
}
}
if ( intr == 0.0 ) {
buf[i++] = '0';
size--;
}
else {
while ( intr > 0.0 ) {
p = intr;
intr/=10.0L;
modf(intr, &intr);
p -= 10.0*intr;
buf[i++] = (int)p + '0';
size--;
}
}
j = 0;
while ( j < i && ro == 1) {
if ( buf[j] >= '0' && buf[j] <= '8' ) {
buf[j]++;
ro = 0;
}
else if ( buf[j] == '9' ) {
buf[j] = '0';
}
j++;
}
if ( ro == 1 )
buf[i++] = '1';
buf[i] = 0;
size -= precision;
if (!(type&(ZEROPAD+LEFT)))
{
while(size-->0)
f += ' ';
}
if (sign)
{
f += sign;
}
if (!(type&(ZEROPAD+LEFT)))
while(size-->0)
{
f += ' ';
}
if (type & SPECIAL) {
}
if (!(type & LEFT))
while (size-- > 0)
{
f += c;
}
tmp = buf;
if ( type & ZEROTRUNC && ((type & SPECIAL) != SPECIAL) )
{
j = 0;
while ( j < i && ( *tmp == '0' || *tmp == '.' ))
{
tmp++;
i--;
}
}
// else
// while (i < precision--)
// putc('0', f);
while (i-- > 0)
{
f += tmp[i];
}
while (size-- > 0)
{
f += ' ';
}
}
return true;
}
static bool numberfl(std::string& f, long double __n, char exp_sign, int size, int precision, int type)
{
long double exponent = 0.0;
long double e;
long ie;
//int x;
char *buf, *tmp;
int i = 0;
int j = 0;
//int k = 0;
long double frac, intr;
long double p;
char sign;
char c;
char ro = 0;
int result;
union
{
long double* __n;
ieee_long_double_t* n;
} n;
n.__n = &__n;
if ( exp_sign == 'g' || exp_sign == 'G' || exp_sign == 'e' || exp_sign == 'E' ) {
ie = ((unsigned int)n.n->exponent - (unsigned int)0x3fff);
exponent = ie/3.321928;
}
if ( exp_sign == 'g' || exp_sign == 'G' ) {
type |= ZEROTRUNC;
if ( exponent < -4 || fabs(exponent) >= precision )
exp_sign -= 2; // g -> e and G -> E
}
if ( exp_sign == 'e' || exp_sign == 'E' ) {
frac = modfl(exponent,&e);
if ( frac > 0.5 )
e++;
else if ( frac < -0.5 )
e--;
result = numberf(f,__n/powl(10.0L,e),'f',size-4, precision, type);
if (result < 0)
return false;
f += exp_sign;
size--;
ie = (long)e;
type = LEFT | PLUS;
if ( ie < 0 )
type |= SIGN;
result = number(f,ie, 10,2, 2,type );
if (result < 0)
return false;
return true;
}
if ( exp_sign == 'f' )
{
buf = (char*)alloca(4096);
if (type & LEFT)
{
type &= ~ZEROPAD;
}
c = (type & ZEROPAD) ? '0' : ' ';
sign = 0;
if (type & SIGN)
{
if (__n < 0)
{
sign = '-';
__n = fabs(__n);
size--;
} else if (type & PLUS)
{
sign = '+';
size--;
} else if (type & SPACE)
{
sign = ' ';
size--;
}
}
frac = modfl(__n,&intr);
// # flags forces a . and prevents trucation of trailing zero's
if ( precision > 0 )
{
//frac = modfl(__n,&intr);
i = precision-1;
while ( i >= 0 )
{
frac*=10.0L;
frac = modfl((long double)frac, &p);
buf[i] = (int)p + '0';
i--;
}
i = precision;
size -= precision;
ro = 0;
if ( frac > 0.5 )
{
ro = 1;
}
if ( precision >= 1 || type & SPECIAL)
{
buf[i++] = '.';
size--;
}
}
if ( intr == 0.0 )
{
buf[i++] = '0';
size--;
}
else
{
while ( intr > 0.0 )
{
p=intr;
intr/=10.0L;
modfl(intr, &intr);
p -= 10.0L*intr;
buf[i++] = (int)p + '0';
size--;
}
}
j = 0;
while ( j < i && ro == 1) {
if ( buf[j] >= '0' && buf[j] <= '8' )
{
buf[j]++;
ro = 0;
}
else if ( buf[j] == '9' )
{
buf[j] = '0';
}
j++;
}
if ( ro == 1 )
buf[i++] = '1';
buf[i] = 0;
size -= precision;
if (!(type&(ZEROPAD+LEFT)))
{
while(size-->0)
f += ' ';
}
if (sign)
{
f += sign;
}
if (!(type&(ZEROPAD+LEFT)))
{
while(size-->0)
f += ' ';
}
if (type & SPECIAL) {
}
if (!(type & LEFT))
while (size-- > 0)
{
f += c;
}
tmp = buf;
if ( type & ZEROTRUNC && ((type & SPECIAL) != SPECIAL) )
{
j = 0;
while ( j < i && ( *tmp == '0' || *tmp == '.' ))
{
tmp++;
i--;
}
}
// else
// while (i < precision--)
// putc( '0', f);
while (i-- > 0)
{
f += tmp[i];
}
while (size-- > 0)
{
f += ' ';
}
}
return true;
}
static int stringa(std::string& f, const char* s, int len, int field_width, int precision, int flags)
{
int i, done = 0;
if (s == NULL)
{
s = "<NULL>";
len = 6;
}
else
{
if (len == -1)
{
len = 0;
while ((unsigned int)len < (unsigned int)precision && s[len])
len++;
}
else
{
if ((unsigned int)len > (unsigned int)precision)
len = precision;
}
}
if (!(flags & LEFT))
while (len < field_width--)
{
f += ' ';
done++;
}
for (i = 0; i < len; ++i)
{
f += *s++;
done++;
}
while (len < field_width--)
{
f += ' ';
done++;
}
return done;
}
static int stringw(std::string& f, const wchar_t* sw, int len, int field_width, int precision, int flags)
{
int i, done = 0;
if (sw == NULL)
{
sw = L"<NULL>";
len = 6;
}
else
{
if (len == -1)
{
len = 0;
while ((unsigned int)len < (unsigned int)precision && sw[len])
len++;
}
else
{
if ((unsigned int)len > (unsigned int)precision)
len = precision;
}
}
if (!(flags & LEFT))
while (len < field_width--)
{
f += ' ';
done++;
}
for (i = 0; i < len; ++i)
{
#define MY_MB_CUR_MAX 1
char mb[MY_MB_CUR_MAX];
int mbcount, j;
mbcount = wctomb(mb, *sw++);
if (mbcount <= 0)
{
break;
}
for (j = 0; j < mbcount; j++)
{
f += mb[j];
done++;
}
}
while (len < field_width--)
{
f += ' ';
done++;
}
return done;
}
#define _isnanl _isnan
#define _finitel _finite
std::string ssvprintf ( const char *fmt, va_list args )
{
ULONGLONG num;
int base;
long double _ldouble;
double _double;
const char *s;
const wchar_t* sw;
int result;
std::string f;
int flags; /* flags to number() */
int field_width; /* width of output field */
int precision; /* min. # of digits for integers; max
number of chars for from string */
int qualifier = 0; /* 'h', 'l', 'L' or 'I64' for integer fields */
for (; *fmt ; ++fmt)
{
if (*fmt != '%')
{
f += *fmt;
continue;
}
/* process flags */
flags = 0;
repeat:
++fmt; /* this also skips first '%' */
switch (*fmt) {
case '-': flags |= LEFT; goto repeat;
case '+': flags |= PLUS; goto repeat;
case ' ': flags |= SPACE; goto repeat;
case '#': flags |= SPECIAL; goto repeat;
case '0': flags |= ZEROPAD; goto repeat;
}
/* get field width */
field_width = -1;
if (isdigit(*fmt))
field_width = skip_atoi(&fmt);
else if (*fmt == '*') {
++fmt;
/* it's the next argument */
field_width = va_arg(args, int);
if (field_width < 0) {
field_width = -field_width;
flags |= LEFT;
}
}
/* get the precision */
precision = -1;
if (*fmt == '.') {
++fmt;
if (isdigit(*fmt))
precision = skip_atoi(&fmt);
else if (*fmt == '*') {
++fmt;
/* it's the next argument */
precision = va_arg(args, int);
}
if (precision < 0)
precision = 0;
}
/* get the conversion qualifier */
qualifier = 0;
// %Z can be just stand alone or as size_t qualifier
if ( *fmt == 'Z' ) {
qualifier = *fmt;
switch ( *(fmt+1)) {
case 'o':
case 'b':
case 'X':
case 'x':
case 'd':
case 'i':
case 'u':
++fmt;
break;
default:
break;
}
} else if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' || *fmt == 'w') {
qualifier = *fmt;
++fmt;
} else if (*fmt == 'I' && *(fmt+1) == '6' && *(fmt+2) == '4') {
qualifier = *fmt;
fmt += 3;
}
// go fine with ll instead of L
if ( *fmt == 'l' ) {
++fmt;
qualifier = 'L';
}
/* default base */
base = 10;
switch (*fmt) {
case 'c':
if (!(flags & LEFT))
while (--field_width > 0)
{
f += ' ';
}
if (qualifier == 'l' || qualifier == 'w')
{
f += (char)(unsigned char)(wchar_t) va_arg(args,int);
}
else
{
f += (char)(unsigned char) va_arg(args,int);
}
while (--field_width > 0)
{
f += ' ';
}
continue;
case 'C':
if (!(flags & LEFT))
while (--field_width > 0)
{
f += ' ';
}
if (qualifier == 'h')
{
f += (char)(unsigned char) va_arg(args,int);
}
else
{
f += (char)(unsigned char)(wchar_t) va_arg(args,int);
}
while (--field_width > 0)
{
f += ' ';
}
continue;
case 's':
if (qualifier == 'l' || qualifier == 'w') {
/* print unicode string */
sw = (const wchar_t*)va_arg(args, wchar_t *);
result = stringw(f, sw, -1, field_width, precision, flags);
} else {
/* print ascii string */
s = va_arg(args, char *);
result = stringa(f, s, -1, field_width, precision, flags);
}
if (result < 0)
{
assert(!"TODO FIXME handle error better");
return f;
}
continue;
case 'S':
if (qualifier == 'h') {
/* print ascii string */
s = va_arg(args, char *);
result = stringa(f, s, -1, field_width, precision, flags);
} else {
/* print unicode string */
sw = (const wchar_t*)va_arg(args, wchar_t *);
result = stringw(f, sw, -1, field_width, precision, flags);
}
if (result < 0)
{
assert(!"TODO FIXME handle error better");
return f;
}
continue;
/*case 'Z':
if (qualifier == 'w') {
// print counted unicode string
PUNICODE_STRING pus = va_arg(args, PUNICODE_STRING);
if ((pus == NULL) || (pus->Buffer == NULL)) {
sw = NULL;
len = -1;
} else {
sw = pus->Buffer;
len = pus->Length / sizeof(WCHAR);
}
result = stringw(f, sw, len, field_width, precision, flags);
} else {
// print counted ascii string
PANSI_STRING pas = va_arg(args, PANSI_STRING);
if ((pas == NULL) || (pas->Buffer == NULL)) {
s = NULL;
len = -1;
} else {
s = pas->Buffer;
len = pas->Length;
}
result = stringa(f, s, -1, field_width, precision, flags);
}
if (result < 0)
return -1;
continue;*/
case 'e':
case 'E':
case 'f':
case 'g':
case 'G':
if (qualifier == 'l' || qualifier == 'L' ) {
_ldouble = va_arg(args, long double);
if ( _isnanl(_ldouble) )
{
f += "Nan";
}
else if ( !_finitel(_ldouble) )
{
if ( _ldouble < 0 )
f += "-Inf";
else
f += "+Inf";
} else {
if ( precision == -1 )
precision = 6;
result = numberfl(f,_ldouble,*fmt,field_width,precision,flags);
if (result < 0)
{
assert(!"TODO FIXME handle error better");
return f;
}
}
} else {
_double = (double)va_arg(args, double);
if ( _isnan(_double) )
{
f += "Nan";
}
else if ( !_finite(_double) )
{
if ( _double < 0 )
f += "-Inf";
else
f += "+Inf";
}
else
{
if ( precision == -1 )
precision = 6;
result = numberf(f,_double,*fmt,field_width,precision,flags);
if (result < 0)
{
assert(!"TODO FIXME handle error better");
return f;
}
}
}
continue;
case 'p':
if (field_width == -1) {
field_width = 2*sizeof(void *);
flags |= ZEROPAD;
}
result = number(f,
(unsigned long) va_arg(args, void *), 16,
field_width, precision, flags);
if (result < 0)
{
assert(!"TODO FIXME handle error better");
return f;
}
continue;
case 'n':
if (qualifier == 'l') {
long * ip = va_arg(args, long *);
*ip = 0;
} else {
int * ip = va_arg(args, int *);
*ip = 0;
}
continue;
/* integer number formats - set up the flags and "break" */
case 'o':
base = 8;
break;
case 'b':
base = 2;
break;
case 'X':
flags |= LARGE;
case 'x':
base = 16;
break;
case 'd':
case 'i':
flags |= SIGN;
case 'u':
break;
default:
if (*fmt != '%')
{
f += '%';
}
if (*fmt)
{
f += *fmt;
}
else
--fmt;
continue;
}
if (qualifier == 'I')
num = va_arg(args, ULONGLONG);
else if (qualifier == 'l') {
if (flags & SIGN)
num = va_arg(args, long);
else
num = va_arg(args, unsigned long);
}
else if (qualifier == 'h') {
if (flags & SIGN)
num = va_arg(args, int);
else
num = va_arg(args, unsigned int);
}
else if (flags & SIGN)
num = va_arg(args, int);
else
num = va_arg(args, unsigned int);
result = number(f, num, base, field_width, precision, flags);
if (result < 0)
{
assert(!"TODO FIXME handle error better");
return f;
}
}
//putc('\0',f);
return f;
}

View File

@@ -1,12 +0,0 @@
// ssprintf.h
#ifndef SSPRINTF_H
#define SSPRINTF_H
#include <string>
#include <stdarg.h>
std::string ssprintf ( const char* fmt, ... );
std::string ssvprintf ( const char* fmt, va_list args );
#endif//SSPRINTF_H

View File

@@ -1,654 +0,0 @@
RPC_NT_ALREADY_LISTENING
RPC_NT_ALREADY_REGISTERED
RPC_NT_CALL_FAILED
RPC_NT_CALL_FAILED_DNE
RPC_NT_CANT_CREATE_ENDPOINT
RPC_NT_INVALID_BINDING
RPC_NT_INVALID_ENDPOINT_FORMAT
RPC_NT_INVALID_NETWORK_OPTIONS
RPC_NT_INVALID_NET_ADDR
RPC_NT_INVALID_RPC_PROTSEQ
RPC_NT_INVALID_STRING_BINDING
RPC_NT_INVALID_STRING_UUID
RPC_NT_INVALID_TIMEOUT
RPC_NT_NOT_LISTENING
RPC_NT_NO_BINDINGS
RPC_NT_NO_CALL_ACTIVE
RPC_NT_NO_ENDPOINT_FOUND
RPC_NT_NO_PROTSEQS
RPC_NT_NO_PROTSEQS_REGISTERED
RPC_NT_OBJECT_NOT_FOUND
RPC_NT_OUT_OF_RESOURCES
RPC_NT_PROTOCOL_ERROR
RPC_NT_PROTSEQ_NOT_SUPPORTED
RPC_NT_SERVER_TOO_BUSY
RPC_NT_SERVER_UNAVAILABLE
RPC_NT_SS_IN_NULL_CONTEXT
RPC_NT_TYPE_ALREADY_REGISTERED
RPC_NT_UNKNOWN_IF
RPC_NT_UNKNOWN_MGR_TYPE
RPC_NT_WRONG_KIND_OF_BINDING
STATUS_ABANDONED
STATUS_ABANDONED_WAIT_0
STATUS_ABANDONED_WAIT_63
STATUS_ABIOS_INVALID_COMMAND
STATUS_ABIOS_INVALID_LID
STATUS_ABIOS_INVALID_SELECTOR
STATUS_ABIOS_LID_ALREADY_OWNED
STATUS_ABIOS_LID_NOT_EXIST
STATUS_ABIOS_NOT_LID_OWNER
STATUS_ABIOS_NOT_PRESENT
STATUS_ABIOS_SELECTOR_NOT_AVAILABLE
STATUS_ACCESS_DENIED
STATUS_ACCESS_VIOLATION
STATUS_ACCOUNT_DISABLED
STATUS_ACCOUNT_EXPIRED
STATUS_ACCOUNT_LOCKED_OUT
STATUS_ACCOUNT_RESTRICTION
STATUS_ADAPTER_HARDWARE_ERROR
STATUS_ADDRESS_ALREADY_ASSOCIATED
STATUS_ADDRESS_ALREADY_EXISTS
STATUS_ADDRESS_CLOSED
STATUS_ADDRESS_NOT_ASSOCIATED
STATUS_AGENTS_EXHAUSTED
STATUS_ALERTED
STATUS_ALIAS_EXISTS
STATUS_ALLOCATE_BUCKET
STATUS_ALLOTTED_SPACE_EXCEEDED
STATUS_ALREADY_COMMITTED
STATUS_ALREADY_DISCONNECTED
STATUS_ALREADY_WIN32
STATUS_APP_INIT_FAILURE
STATUS_ARBITRATION_UNHANDLED
STATUS_ARRAY_BOUNDS_EXCEEDED
STATUS_AUDIT_FAILED
STATUS_BACKUP_CONTROLLER
STATUS_BAD_COMPRESSION_BUFFER
STATUS_BAD_CURRENT_DIRECTORY
STATUS_BAD_DESCRIPTOR_FORMAT
STATUS_BAD_DEVICE_TYPE
STATUS_BAD_DLL_ENTRYPOINT
STATUS_BAD_FUNCTION_TABLE
STATUS_BAD_IMPERSONATION_LEVEL
STATUS_BAD_INHERITANCE_ACL
STATUS_BAD_INITIAL_PC
STATUS_BAD_INITIAL_STACK
STATUS_BAD_LOGON_SESSION_STATE
STATUS_BAD_MASTER_BOOT_RECORD
STATUS_BAD_NETWORK_NAME
STATUS_BAD_NETWORK_PATH
STATUS_BAD_REMOTE_ADAPTER
STATUS_BAD_SERVICE_ENTRYPOINT
STATUS_BAD_STACK
STATUS_BAD_TOKEN_TYPE
STATUS_BAD_VALIDATION_CLASS
STATUS_BAD_WORKING_SET_LIMIT
STATUS_BEGINNING_OF_MEDIA
STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT
STATUS_BREAKPOINT
STATUS_BUFFER_OVERFLOW
STATUS_BUFFER_TOO_SMALL
STATUS_BUS_RESET
STATUS_CANCELLED
STATUS_CANNOT_DELETE
STATUS_CANNOT_IMPERSONATE
STATUS_CANNOT_LOAD_REGISTRY_FILE
STATUS_CANT_ACCESS_DOMAIN_INFO
STATUS_CANT_DISABLE_MANDATORY
STATUS_CANT_OPEN_ANONYMOUS
STATUS_CANT_TERMINATE_SELF
STATUS_CANT_WAIT
STATUS_CARDBUS_NOT_SUPPORTED
STATUS_CHECKING_FILE_SYSTEM
STATUS_CHILD_MUST_BE_VOLATILE
STATUS_CLIENT_SERVER_PARAMETERS_INVALID
STATUS_COMMITMENT_LIMIT
STATUS_CONFLICTING_ADDRESSES
STATUS_CONNECTION_ABORTED
STATUS_CONNECTION_ACTIVE
STATUS_CONNECTION_COUNT_LIMIT
STATUS_CONNECTION_DISCONNECTED
STATUS_CONNECTION_INVALID
STATUS_CONNECTION_IN_USE
STATUS_CONNECTION_REFUSED
STATUS_CONNECTION_RESET
STATUS_CONTROL_C_EXIT
STATUS_CONVERT_TO_LARGE
STATUS_COULD_NOT_INTERPRET
STATUS_CRC_ERROR
STATUS_CTL_FILE_NOT_SUPPORTED
STATUS_DATATYPE_MISALIGNMENT
STATUS_DATA_ERROR
STATUS_DATA_LATE_ERROR
STATUS_DATA_NOT_ACCEPTED
STATUS_DATA_OVERRUN
STATUS_DEBUG_ATTACH_FAILED
STATUS_DELETE_PENDING
STATUS_DEVICE_ALREADY_ATTACHED
STATUS_DEVICE_BUSY
STATUS_DEVICE_CONFIGURATION_ERROR
STATUS_DEVICE_DATA_ERROR
STATUS_DEVICE_DOES_NOT_EXIST
STATUS_DEVICE_NOT_CONNECTED
STATUS_DEVICE_NOT_PARTITIONED
STATUS_DEVICE_NOT_READY
STATUS_DEVICE_OFF_LINE
STATUS_DEVICE_PAPER_EMPTY
STATUS_DEVICE_POWERED_OFF
STATUS_DEVICE_POWER_FAILURE
STATUS_DEVICE_PROTOCOL_ERROR
STATUS_DFS_EXIT_PATH_FOUND
STATUS_DFS_UNAVAILABLE
STATUS_DIRECTORY_NOT_EMPTY
STATUS_DISK_CORRUPT_ERROR
STATUS_DISK_FULL
STATUS_DISK_OPERATION_FAILED
STATUS_DISK_RECALIBRATE_FAILED
STATUS_DISK_RESET_FAILED
STATUS_DLL_INIT_FAILED
STATUS_DLL_INIT_FAILED_LOGOFF
STATUS_DLL_NOT_FOUND
STATUS_DOMAIN_CONTROLLER_NOT_FOUND
STATUS_DOMAIN_CTRLR_CONFIG_ERROR
STATUS_DOMAIN_EXISTS
STATUS_DOMAIN_LIMIT_EXCEEDED
STATUS_DOMAIN_TRUST_INCONSISTENT
STATUS_DRIVER_CANCEL_TIMEOUT
STATUS_DRIVER_ENTRYPOINT_NOT_FOUND
STATUS_DRIVER_INTERNAL_ERROR
STATUS_DRIVER_ORDINAL_NOT_FOUND
STATUS_DRIVER_UNABLE_TO_LOAD
STATUS_DUPLICATE_NAME
STATUS_DUPLICATE_OBJECTID
STATUS_EAS_NOT_SUPPORTED
STATUS_EA_CORRUPT_ERROR
STATUS_EA_LIST_INCONSISTENT
STATUS_EA_TOO_LARGE
STATUS_END_OF_FILE
STATUS_END_OF_MEDIA
STATUS_ENTRYPOINT_NOT_FOUND
STATUS_EOM_OVERFLOW
STATUS_EVALUATION_EXPIRATION
STATUS_EVENTLOG_CANT_START
STATUS_EVENTLOG_FILE_CHANGED
STATUS_EVENTLOG_FILE_CORRUPT
STATUS_EVENT_DONE
STATUS_EVENT_PENDING
STATUS_EXTRANEOUS_INFORMATION
STATUS_FAIL_CHECK
STATUS_FATAL_APP_EXIT
STATUS_FILEMARK_DETECTED
STATUS_FILES_OPEN
STATUS_FILE_CLOSED
STATUS_FILE_CORRUPT_ERROR
STATUS_FILE_DELETED
STATUS_FILE_FORCED_CLOSED
STATUS_FILE_INVALID
STATUS_FILE_IS_A_DIRECTORY
STATUS_FILE_IS_OFFLINE
STATUS_FILE_LOCK_CONFLICT
STATUS_FILE_RENAMED
STATUS_FLOAT_DENORMAL_OPERAND
STATUS_FLOAT_DIVIDE_BY_ZERO
STATUS_FLOAT_INEXACT_RESULT
STATUS_FLOAT_INVALID_OPERATION
STATUS_FLOAT_OVERFLOW
STATUS_FLOAT_STACK_CHECK
STATUS_FLOAT_UNDERFLOW
STATUS_FLOPPY_BAD_REGISTERS
STATUS_FLOPPY_ID_MARK_NOT_FOUND
STATUS_FLOPPY_UNKNOWN_ERROR
STATUS_FLOPPY_VOLUME
STATUS_FLOPPY_WRONG_CYLINDER
STATUS_FOUND_OUT_OF_SCOPE
STATUS_FREE_VM_NOT_AT_BASE
STATUS_FS_DRIVER_REQUIRED
STATUS_FT_MISSING_MEMBER
STATUS_FT_ORPHANING
STATUS_FT_READ_RECOVERING_FROM_BACKUP
STATUS_FT_WRITE_RECOVERY
STATUS_FULLSCREEN_MODE
STATUS_GENERIC_NOT_MAPPED
STATUS_GRACEFUL_DISCONNECT
STATUS_GROUP_EXISTS
STATUS_GUARD_PAGE_VIOLATION
STATUS_GUIDS_EXHAUSTED
STATUS_GUID_SUBSTITUTION_MADE
STATUS_HANDLES_CLOSED
STATUS_HANDLE_NOT_CLOSABLE
STATUS_HOST_UNREACHABLE
STATUS_ILLEGAL_CHARACTER
STATUS_ILLEGAL_DLL_RELOCATION
STATUS_ILLEGAL_FLOAT_CONTEXT
STATUS_ILLEGAL_FUNCTION
STATUS_ILLEGAL_INSTRUCTION
STATUS_ILL_FORMED_PASSWORD
STATUS_ILL_FORMED_SERVICE_ENTRY
STATUS_IMAGE_ALREADY_LOADED
STATUS_IMAGE_CHECKSUM_MISMATCH
STATUS_IMAGE_MACHINE_TYPE_MISMATCH
STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE
STATUS_IMAGE_MP_UP_MISMATCH
STATUS_IMAGE_NOT_AT_BASE
STATUS_INCOMPATIBLE_FILE_MAP
STATUS_INFO_LENGTH_MISMATCH
STATUS_INSTANCE_NOT_AVAILABLE
STATUS_INSTRUCTION_MISALIGNMENT
STATUS_INSUFFICIENT_LOGON_INFO
STATUS_INSUFFICIENT_RESOURCES
STATUS_INSUFF_SERVER_RESOURCES
STATUS_INTEGER_DIVIDE_BY_ZERO
STATUS_INTEGER_OVERFLOW
STATUS_INTERNAL_DB_CORRUPTION
STATUS_INTERNAL_DB_ERROR
STATUS_INTERNAL_ERROR
STATUS_INVALID_ACCOUNT_NAME
STATUS_INVALID_ACL
STATUS_INVALID_ADDRESS
STATUS_INVALID_ADDRESS_COMPONENT
STATUS_INVALID_ADDRESS_WILDCARD
STATUS_INVALID_BLOCK_LENGTH
STATUS_INVALID_BUFFER_SIZE
STATUS_INVALID_CID
STATUS_INVALID_COMPUTER_NAME
STATUS_INVALID_CONNECTION
STATUS_INVALID_DEVICE_REQUEST
STATUS_INVALID_DEVICE_STATE
STATUS_INVALID_DISPOSITION
STATUS_INVALID_DOMAIN_ROLE
STATUS_INVALID_DOMAIN_STATE
STATUS_INVALID_EA_FLAG
STATUS_INVALID_EA_NAME
STATUS_INVALID_FILE_FOR_SECTION
STATUS_INVALID_GROUP_ATTRIBUTES
STATUS_INVALID_HANDLE
STATUS_INVALID_HW_PROFILE
STATUS_INVALID_ID_AUTHORITY
STATUS_INVALID_IMAGE_FORMAT
STATUS_INVALID_IMAGE_LE_FORMAT
STATUS_INVALID_IMAGE_NE_FORMAT
STATUS_INVALID_IMAGE_NOT_MZ
STATUS_INVALID_IMAGE_PROTECT
STATUS_INVALID_IMAGE_WIN_16
STATUS_INVALID_INFO_CLASS
STATUS_INVALID_LDT_DESCRIPTOR
STATUS_INVALID_LDT_OFFSET
STATUS_INVALID_LDT_SIZE
STATUS_INVALID_LEVEL
STATUS_INVALID_LOCK_SEQUENCE
STATUS_INVALID_LOGON_HOURS
STATUS_INVALID_LOGON_TYPE
STATUS_INVALID_MEMBER
STATUS_INVALID_NETWORK_RESPONSE
STATUS_INVALID_OPLOCK_PROTOCOL
STATUS_INVALID_OWNER
STATUS_INVALID_PAGE_PROTECTION
STATUS_INVALID_PARAMETER
STATUS_INVALID_PARAMETER_1
STATUS_INVALID_PARAMETER_10
STATUS_INVALID_PARAMETER_11
STATUS_INVALID_PARAMETER_12
STATUS_INVALID_PARAMETER_2
STATUS_INVALID_PARAMETER_3
STATUS_INVALID_PARAMETER_4
STATUS_INVALID_PARAMETER_5
STATUS_INVALID_PARAMETER_6
STATUS_INVALID_PARAMETER_7
STATUS_INVALID_PARAMETER_8
STATUS_INVALID_PARAMETER_9
STATUS_INVALID_PARAMETER_MIX
STATUS_INVALID_PIPE_STATE
STATUS_INVALID_PLUGPLAY_DEVICE_PATH
STATUS_INVALID_PORT_ATTRIBUTES
STATUS_INVALID_PORT_HANDLE
STATUS_INVALID_PRIMARY_GROUP
STATUS_INVALID_QUOTA_LOWER
STATUS_INVALID_READ_MODE
STATUS_INVALID_SECURITY_DESCR
STATUS_INVALID_SERVER_STATE
STATUS_INVALID_SID
STATUS_INVALID_SUB_AUTHORITY
STATUS_INVALID_SYSTEM_SERVICE
STATUS_INVALID_UNWIND_TARGET
STATUS_INVALID_USER_BUFFER
STATUS_INVALID_VARIANT
STATUS_INVALID_VIEW_SIZE
STATUS_INVALID_VLM_OPERATION
STATUS_INVALID_VOLUME_LABEL
STATUS_INVALID_WORKSTATION
STATUS_IN_PAGE_ERROR
STATUS_IO_DEVICE_ERROR
STATUS_IO_PRIVILEGE_FAILED
STATUS_IO_REPARSE_DATA_INVALID
STATUS_IO_REPARSE_TAG_INVALID
STATUS_IO_REPARSE_TAG_MISMATCH
STATUS_IO_REPARSE_TAG_NOT_HANDLED
STATUS_IO_TIMEOUT
STATUS_IP_ADDRESS_CONFLICT1
STATUS_IP_ADDRESS_CONFLICT2
STATUS_KERNEL_APC
STATUS_KEY_DELETED
STATUS_KEY_HAS_CHILDREN
STATUS_LAST_ADMIN
STATUS_LICENSE_QUOTA_EXCEEDED
STATUS_LICENSE_VIOLATION
STATUS_LINK_FAILED
STATUS_LINK_TIMEOUT
STATUS_LM_CROSS_ENCRYPTION_REQUIRED
STATUS_LOCAL_DISCONNECT
STATUS_LOCAL_USER_SESSION_KEY
STATUS_LOCK_NOT_GRANTED
STATUS_LOGIN_TIME_RESTRICTION
STATUS_LOGIN_WKSTA_RESTRICTION
STATUS_LOGON_FAILURE
STATUS_LOGON_NOT_GRANTED
STATUS_LOGON_SERVER_CONFLICT
STATUS_LOGON_SESSION_COLLISION
STATUS_LOGON_SESSION_EXISTS
STATUS_LOGON_TYPE_NOT_GRANTED
STATUS_LOG_FILE_FULL
STATUS_LOG_HARD_ERROR
STATUS_LONGJUMP
STATUS_LOST_WRITEBEHIND_DATA
STATUS_LPC_REPLY_LOST
STATUS_LUIDS_EXHAUSTED
STATUS_MAPPED_ALIGNMENT
STATUS_MAPPED_FILE_SIZE_ZERO
STATUS_MARSHALL_OVERFLOW
STATUS_MEDIA_CHANGED
STATUS_MEDIA_CHECK
STATUS_MEDIA_WRITE_PROTECTED
STATUS_MEMBERS_PRIMARY_GROUP
STATUS_MEMBER_IN_ALIAS
STATUS_MEMBER_IN_GROUP
STATUS_MEMBER_NOT_IN_ALIAS
STATUS_MEMBER_NOT_IN_GROUP
STATUS_MEMORY_NOT_ALLOCATED
STATUS_MESSAGE_NOT_FOUND
STATUS_MISSING_SYSTEMFILE
STATUS_MORE_ENTRIES
STATUS_MORE_PROCESSING_REQUIRED
STATUS_MUTANT_LIMIT_EXCEEDED
STATUS_MUTANT_NOT_OWNED
STATUS_NAME_TOO_LONG
STATUS_NETLOGON_NOT_STARTED
STATUS_NETWORK_ACCESS_DENIED
STATUS_NETWORK_BUSY
STATUS_NETWORK_CREDENTIAL_CONFLICT
STATUS_NETWORK_NAME_DELETED
STATUS_NETWORK_UNREACHABLE
STATUS_NET_WRITE_FAULT
STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT
STATUS_NOLOGON_SERVER_TRUST_ACCOUNT
STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT
STATUS_NONCONTINUABLE_EXCEPTION
STATUS_NONEXISTENT_EA_ENTRY
STATUS_NONEXISTENT_SECTOR
STATUS_NONE_MAPPED
STATUS_NOTIFY_CLEANUP
STATUS_NOTIFY_ENUM_DIR
STATUS_NOT_ALL_ASSIGNED
STATUS_NOT_A_DIRECTORY
STATUS_NOT_A_REPARSE_POINT
STATUS_NOT_CLIENT_SESSION
STATUS_NOT_COMMITTED
STATUS_NOT_FOUND
STATUS_NOT_IMPLEMENTED
STATUS_NOT_LOCKED
STATUS_NOT_LOGON_PROCESS
STATUS_NOT_MAPPED_DATA
STATUS_NOT_MAPPED_VIEW
STATUS_NOT_REGISTRY_FILE
STATUS_NOT_SAME_DEVICE
STATUS_NOT_SERVER_SESSION
STATUS_NOT_SUPPORTED
STATUS_NOT_TINY_STREAM
STATUS_NO_BROWSER_SERVERS_FOUND
STATUS_NO_CALLBACK_ACTIVE
STATUS_NO_DATA_DETECTED
STATUS_NO_EAS_ON_FILE
STATUS_NO_EVENT_PAIR
STATUS_NO_GUID_TRANSLATION
STATUS_NO_IMPERSONATION_TOKEN
STATUS_NO_INHERITANCE
STATUS_NO_LDT
STATUS_NO_LOGON_SERVERS
STATUS_NO_LOG_SPACE
STATUS_NO_MATCH
STATUS_NO_MEDIA
STATUS_NO_MEDIA_IN_DEVICE
STATUS_NO_MEMORY
STATUS_NO_MORE_EAS
STATUS_NO_MORE_ENTRIES
STATUS_NO_MORE_FILES
STATUS_NO_MORE_MATCHES
STATUS_NO_PAGEFILE
STATUS_NO_QUOTAS_NO_ACCOUNT
STATUS_NO_SECURITY_ON_OBJECT
STATUS_NO_SPOOL_SPACE
STATUS_NO_SUCH_ALIAS
STATUS_NO_SUCH_DEVICE
STATUS_NO_SUCH_DOMAIN
STATUS_NO_SUCH_FILE
STATUS_NO_SUCH_GROUP
STATUS_NO_SUCH_LOGON_SESSION
STATUS_NO_SUCH_MEMBER
STATUS_NO_SUCH_PACKAGE
STATUS_NO_SUCH_PRIVILEGE
STATUS_NO_SUCH_USER
STATUS_NO_TOKEN
STATUS_NO_TRUST_LSA_SECRET
STATUS_NO_TRUST_SAM_ACCOUNT
STATUS_NO_USER_SESSION_KEY
STATUS_NO_YIELD_PERFORMED
STATUS_NT_CROSS_ENCRYPTION_REQUIRED
STATUS_NULL_LM_PASSWORD
STATUS_OBJECTID_EXISTS
STATUS_OBJECT_EXISTS
STATUS_OBJECT_NAME_COLLISION
STATUS_OBJECT_NAME_EXISTS
STATUS_OBJECT_NAME_INVALID
STATUS_OBJECT_NAME_NOT_FOUND
STATUS_OBJECT_PATH_INVALID
STATUS_OBJECT_PATH_NOT_FOUND
STATUS_OBJECT_PATH_SYNTAX_BAD
STATUS_OBJECT_TYPE_MISMATCH
STATUS_OPEN_FAILED
STATUS_OPLOCK_BREAK_IN_PROCESS
STATUS_OPLOCK_NOT_GRANTED
STATUS_ORDINAL_NOT_FOUND
STATUS_PAGEFILE_CREATE_FAILED
STATUS_PAGEFILE_QUOTA
STATUS_PAGEFILE_QUOTA_EXCEEDED
STATUS_PARITY_ERROR
STATUS_PARTIAL_COPY
STATUS_PARTITION_FAILURE
STATUS_PASSWORD_EXPIRED
STATUS_PASSWORD_MUST_CHANGE
STATUS_PASSWORD_RESTRICTION
STATUS_PATH_NOT_COVERED
STATUS_PENDING
STATUS_PIPE_BROKEN
STATUS_PIPE_BUSY
STATUS_PIPE_CLOSING
STATUS_PIPE_CONNECTED
STATUS_PIPE_DISCONNECTED
STATUS_PIPE_EMPTY
STATUS_PIPE_LISTENING
STATUS_PIPE_NOT_AVAILABLE
STATUS_PLUGPLAY_NO_DEVICE
STATUS_PORT_ALREADY_SET
STATUS_PORT_CONNECTION_REFUSED
STATUS_PORT_DISCONNECTED
STATUS_PORT_MESSAGE_TOO_LONG
STATUS_PORT_UNREACHABLE
STATUS_POSSIBLE_DEADLOCK
STATUS_PREDEFINED_HANDLE
STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED
STATUS_PRINT_CANCELLED
STATUS_PRINT_QUEUE_FULL
STATUS_PRIVILEGED_INSTRUCTION
STATUS_PRIVILEGE_NOT_HELD
STATUS_PROCEDURE_NOT_FOUND
STATUS_PROCESS_IN_JOB
STATUS_PROCESS_IS_TERMINATING
STATUS_PROCESS_NOT_IN_JOB
STATUS_PROFILING_AT_LIMIT
STATUS_PROFILING_NOT_STARTED
STATUS_PROFILING_NOT_STOPPED
STATUS_PROPSET_NOT_FOUND
STATUS_PROTOCOL_UNREACHABLE
STATUS_PWD_HISTORY_CONFLICT
STATUS_PWD_TOO_RECENT
STATUS_PWD_TOO_SHORT
STATUS_QUOTA_EXCEEDED
STATUS_QUOTA_LIST_INCONSISTENT
STATUS_RANGE_LIST_CONFLICT
STATUS_RANGE_NOT_FOUND
STATUS_RANGE_NOT_LOCKED
STATUS_RECEIVE_EXPEDITED
STATUS_RECEIVE_PARTIAL
STATUS_RECEIVE_PARTIAL_EXPEDITED
STATUS_RECOVERY_FAILURE
STATUS_REDIRECTOR_HAS_OPEN_HANDLES
STATUS_REDIRECTOR_NOT_STARTED
STATUS_REDIRECTOR_PAUSED
STATUS_REDIRECTOR_STARTED
STATUS_REGISTRY_CORRUPT
STATUS_REGISTRY_IO_FAILED
STATUS_REGISTRY_QUOTA_LIMIT
STATUS_REGISTRY_RECOVERED
STATUS_REMOTE_DISCONNECT
STATUS_REMOTE_NOT_LISTENING
STATUS_REMOTE_RESOURCES
STATUS_REMOTE_SESSION_LIMIT
STATUS_REPARSE
STATUS_REPLY_MESSAGE_MISMATCH
STATUS_REQUEST_ABORTED
STATUS_REQUEST_NOT_ACCEPTED
STATUS_RESOURCE_DATA_NOT_FOUND
STATUS_RESOURCE_LANG_NOT_FOUND
STATUS_RESOURCE_NAME_NOT_FOUND
STATUS_RESOURCE_NOT_OWNED
STATUS_RESOURCE_TYPE_NOT_FOUND
STATUS_RETRY
STATUS_REVISION_MISMATCH
STATUS_RXACT_COMMITTED
STATUS_RXACT_COMMIT_FAILURE
STATUS_RXACT_COMMIT_NECESSARY
STATUS_RXACT_INVALID_STATE
STATUS_RXACT_STATE_CREATED
STATUS_SAM_INIT_FAILURE
STATUS_SECRET_TOO_LONG
STATUS_SECTION_NOT_EXTENDED
STATUS_SECTION_NOT_IMAGE
STATUS_SECTION_PROTECTION
STATUS_SECTION_TOO_BIG
STATUS_SEGMENT_NOTIFICATION
STATUS_SEMAPHORE_LIMIT_EXCEEDED
STATUS_SERIAL_COUNTER_TIMEOUT
STATUS_SERIAL_MORE_WRITES
STATUS_SERIAL_NO_DEVICE_INITED
STATUS_SERVER_DISABLED
STATUS_SERVER_HAS_OPEN_HANDLES
STATUS_SERVER_NOT_DISABLED
STATUS_SERVICE_NOTIFICATION
STATUS_SETMARK_DETECTED
STATUS_SHARED_IRQ_BUSY
STATUS_SHARING_PAUSED
STATUS_SHARING_VIOLATION
STATUS_SINGLE_STEP
STATUS_SOME_NOT_MAPPED
STATUS_SPECIAL_ACCOUNT
STATUS_SPECIAL_GROUP
STATUS_SPECIAL_USER
STATUS_STACK_OVERFLOW
STATUS_STACK_OVERFLOW_READ
STATUS_SUCCESS
STATUS_SUSPEND_COUNT_EXCEEDED
STATUS_SYNCHRONIZATION_REQUIRED
STATUS_SYSTEM_PROCESS_TERMINATED
STATUS_THREAD_IS_TERMINATING
STATUS_THREAD_NOT_IN_PROCESS
STATUS_THREAD_WAS_SUSPENDED
STATUS_TIMEOUT
STATUS_TIMER_NOT_CANCELED
STATUS_TIMER_RESOLUTION_NOT_SET
STATUS_TIMER_RESUME_IGNORED
STATUS_TIME_DIFFERENCE_AT_DC
STATUS_TOKEN_ALREADY_IN_USE
STATUS_TOO_LATE
STATUS_TOO_MANY_ADDRESSES
STATUS_TOO_MANY_COMMANDS
STATUS_TOO_MANY_CONTEXT_IDS
STATUS_TOO_MANY_GUIDS_REQUESTED
STATUS_TOO_MANY_LINKS
STATUS_TOO_MANY_LUIDS_REQUESTED
STATUS_TOO_MANY_NAMES
STATUS_TOO_MANY_NODES
STATUS_TOO_MANY_OPENED_FILES
STATUS_TOO_MANY_PAGING_FILES
STATUS_TOO_MANY_SECRETS
STATUS_TOO_MANY_SESSIONS
STATUS_TOO_MANY_SIDS
STATUS_TOO_MANY_THREADS
STATUS_TRANSACTION_ABORTED
STATUS_TRANSACTION_INVALID_ID
STATUS_TRANSACTION_INVALID_TYPE
STATUS_TRANSACTION_NO_MATCH
STATUS_TRANSACTION_NO_RELEASE
STATUS_TRANSACTION_RESPONDED
STATUS_TRANSACTION_TIMED_OUT
STATUS_TRUSTED_DOMAIN_FAILURE
STATUS_TRUSTED_RELATIONSHIP_FAILURE
STATUS_TRUST_FAILURE
STATUS_UNABLE_TO_DECOMMIT_VM
STATUS_UNABLE_TO_DELETE_SECTION
STATUS_UNABLE_TO_FREE_VM
STATUS_UNABLE_TO_LOCK_MEDIA
STATUS_UNABLE_TO_UNLOAD_MEDIA
STATUS_UNDEFINED_CHARACTER
STATUS_UNEXPECTED_IO_ERROR
STATUS_UNEXPECTED_MM_CREATE_ERR
STATUS_UNEXPECTED_MM_EXTEND_ERR
STATUS_UNEXPECTED_MM_MAP_ERROR
STATUS_UNEXPECTED_NETWORK_ERROR
STATUS_UNHANDLED_EXCEPTION
STATUS_UNKNOWN_REVISION
STATUS_UNMAPPABLE_CHARACTER
STATUS_UNRECOGNIZED_MEDIA
STATUS_UNRECOGNIZED_VOLUME
STATUS_UNSUCCESSFUL
STATUS_UNSUPPORTED_COMPRESSION
STATUS_UNWIND
STATUS_USER_APC
STATUS_USER_EXISTS
STATUS_USER_MAPPED_FILE
STATUS_USER_SESSION_DELETED
STATUS_VALIDATE_CONTINUE
STATUS_VARIABLE_NOT_FOUND
STATUS_VDM_HARD_ERROR
STATUS_VERIFY_REQUIRED
STATUS_VIRTUAL_CIRCUIT_CLOSED
STATUS_VOLUME_DISMOUNTED
STATUS_VOLUME_MOUNTED
STATUS_WAIT_0
STATUS_WAIT_63
STATUS_WAKE_SYSTEM_DEBUGGER
STATUS_WAS_LOCKED
STATUS_WAS_UNLOCKED
STATUS_WORKING_SET_LIMIT_RANGE
STATUS_WORKING_SET_QUOTA
STATUS_WRONG_PASSWORD
STATUS_WRONG_PASSWORD_CORE
STATUS_WRONG_VOLUME
STATUS_WX86_BREAKPOINT
STATUS_WX86_CONTINUE
STATUS_WX86_CREATEWX86TIB
STATUS_WX86_EXCEPTION_CHAIN
STATUS_WX86_EXCEPTION_CONTINUE
STATUS_WX86_EXCEPTION_LASTCHANCE
STATUS_WX86_FLOAT_STACK_CHECK
STATUS_WX86_INTERNAL_ERROR
STATUS_WX86_SINGLE_STEP
STATUS_WX86_UNSIMULATE

View File

@@ -1,7 +0,0 @@
FAST_MUTEX
KPCR
PEB
TEB
SPINLOCK
APC
DPC

View File

@@ -1,73 +0,0 @@
What do you think I am, your personal tech support?
You *know* a %stru% is non-re-entrant, right?
The answer to that is so simple, I'm not going to waste my time telling you.
Well, of course... if you're not below DISPATCH_LEVEL, ros is gonna explode on ya when you try to do that ( duh! ).
I don't think that functionality has been implemented, yet.
What do you mean it crashed? It can't crash there!
Wow. That's a new one.
Ask %dev%, I bet he knows.. he knows everything...
When's the last time you rebuilt?
Have you tried a make clean?
Is it plugged in?
Well it works on *my* system :P
Well don't do that, and you won't have that problem.
Didn't we already fix that?
Well... I don't know.. I just have that code disabled in my tree.
Try surrounding it with parenthesis.
Don't you know going around dereferncing null pointers all day can be hazardous to your health?
Well, duh!
There's a bit in cr3 for problems like that.
Just add a field to the %stru% to keep track of it!
Don't worry about it... the garbage collector in %module% will clean it up for you.
Did I do that?
Didn't %dev% fix that already?
Yes, I think I've seen that bug before... no... that was another program.
I could tell you, but then I'd have to unlink() you.
Well if you'd get some sleep, maybe you'd figure it out... not all of us can keep the hours %dev% can...
You did what? Uh oh... that can't be good.
Well... I could tell you, but the answer's pretty complicated. Why don't you wait to read about it in the book I'm writing.
Yeah, that's happened to me, before, too. All you have to do is wrap it in an SEH block and forget about it.
Just put a NULL dereference in there and commit it. It helps get bugs fixed fast! (Not that I would know)
ASSERT is your friend!
I dunno.. but I bet %dev% could find it for you.
I hereby declare that code is perfect. Your problem must be elsewhere.
I wrote that code... it must be perfect.
$#@!$ One of these days I'm gonna throw %module% out the window!!! Sorry, what were you saying?
maybe I broke it in my last commit. Maybe I did it on purpose...
Have you tried debugging it? I got a can of Raid...
Just delete it, it can't be that important ( You should see all the useless cruft I got rid of in %module% )
Try queueing a work item...
My %stru% fell in love with some %stru% in %module%, and %module% has been hell since...
Maybe the PEB is getting corrupted. Try allocating a new PEB and overwriting the old one. That's what I did last time I had a bug like that.
Hmm.. that seems to have been introduced by my last commit... I bet CVS mixed up the bits during the commit.
It can't possibly be my fault, so I don't care.
I'm not experiencing that problem, perhaps it's all in your mind.
Well... like a good friend of mine said... "Don't Panic!"
It just shows you how far ReactOS has come along! A %period% ago a bug like that wouldn't have even been possible!
Just surround the code with an #if 0/#endif block, it solves all my problems!
You know.. if %dev% would just finish %module% for us, we wouldn't be having this problem.
I say we move on to the next function, since we can't seem to figure this one out.
Well, sure, that would have been my first guess, too.... TEN YEARS AGO :p
yup, that sounds like a problem.
If I wanted to talk about VB, I'd go bug Alex...
ask %dev%
Thank you for that amazingly keen insight, Commander Obvious.
Sorry, can't help you right now, trying to track down this bug %dev% caused in %module%
I dont know about that, but I just fixed a problem in %module% for %dev%
How should I know? I'm still trying to figure out this main() thing... ooh! wanna see what I did in %module%?
lol!
*wink*
;)
42
It's gonna take me over %period% to fix all %dev%'s bugs in %module% :(
How could %func% return %status%!? It bet %dev% broke it! I didn't touch it... honest! no.. really! (me hides)
It's fine if you get %status% there ... just ignore the destruction, and call %func% instead.
%dev% said %status% isn't really an error in this context because we expect %module% to be toast by now
heh, I'm still trying to figure out why %func% is returning %status% when I call it from %module%...
%dev% said it's okay to ignore that as long as you're below %irql%
erm, what do you mean?
damn, I do that all the time
if you want a reply that sounds right, I'd say that %func% support for that is vital to the future of %module%
Sounds like you're having a problem with %func%. I hate that thing... don't talk to me about it.
Just return %status% and forget about it. Someone else will fix it, later.
Blah blah blah... sheesh... can't you figure out *anything*?

View File

@@ -1,17 +0,0 @@
// trim.cpp
// This file is (C) 2004 Royce Mitchell III
// and released under the BSD & LGPL licenses
#include "trim.h"
std::string trim ( const std::string& s )
{
const char* p = &s[0];
const char* p2 = p + s.size();
while ( *p == ' ' )
p++;
while ( p2 > p && p2[-1] == ' ' )
p2--;
return std::string ( p, p2-p );
}

View File

@@ -1,13 +0,0 @@
// trim.h
// This file is (C) 2004 Royce Mitchell III
// and released under the BSD & LGPL licenses
#ifndef TRIM_H
#define TRIM_H
#include <string>
std::string trim ( const std::string& s );
#endif//TRIM_H

File diff suppressed because it is too large Load Diff

View File

@@ -1,37 +0,0 @@
// verify.h
// This code is (C) 2003-2004 Royce Mitchell III
// and released under the LGPL & BSD licenses
#ifndef VERIFY_H
#define VERIFY_H
//#include <assert.h>
#ifdef ASSERT
#undef ASSERT
#endif//ASSERT
#include "panic.h"
#if defined(DEBUG) || defined(_DEBUG)
inline void AssertHandler ( bool b, const char* str )
{
if ( !b )
panic ( str );
}
# define ASSERT(x) AssertHandler((x) ? true : false, #x )
#else
# define ASSERT(x)
#endif
#ifdef verify
#undef verify
#endif//verify
#if defined(DEBUG) || defined(_DEBUG)
# define verify(x) ASSERT(x)
#else
# define verify(x) x
#endif
#endif//VERIFY_H

View File

@@ -1,32 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following
// attributes.
//
// change them to the information which is associated with the assembly
// you compile.
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has following format :
//
// Major.Minor.Build.Revision
//
// You can specify all values by your own or you can build default build and revision
// numbers with the '*' character (the default):
[assembly: AssemblyVersion("1.0.*")]
// The following attributes specify the key for the sign of your assembly. See the
// .NET Framework documentation for more information about signing.
// This is not required, if you don't want signing let these attributes like they're.
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")]

View File

@@ -1,274 +0,0 @@
using System;
using System.Collections;
using System.IO;
using System.Text;
using System.Globalization;
namespace HtmlHelp.ChmDecoding
{
/// <summary>
/// The class <c>BinaryReaderHelp</c> implements static helper methods for extracting binary data
/// from a binary reader object.
/// </summary>
internal class BinaryReaderHelp
{
/// <summary>
/// Internal helper method to extract null-terminated strings from a binary reader
/// </summary>
/// <param name="binReader">reference to the binary reader</param>
/// <param name="offset">offset in the stream</param>
/// <param name="noOffset">true if the offset value should be used</param>
/// <param name="encoder">encoder used for text encoding</param>
/// <returns>An extracted string value</returns>
internal static string ExtractString(ref BinaryReader binReader, int offset, bool noOffset, Encoding encoder)
{
string strReturn = "";
if(encoder == null)
encoder = Encoding.ASCII;
ArrayList nameBytes = new ArrayList();
byte curByte;
if(!noOffset)
binReader.BaseStream.Seek(offset, SeekOrigin.Begin);
if(binReader.BaseStream.Position >= binReader.BaseStream.Length)
return "";
curByte = binReader.ReadByte();
while( (curByte != (byte)0) && (binReader.BaseStream.Position < binReader.BaseStream.Length) )
{
nameBytes.Add( curByte );
curByte = binReader.ReadByte();
}
byte[] name = (byte[]) (nameBytes.ToArray(System.Type.GetType("System.Byte")));
strReturn = encoder.GetString(name,0,name.Length);
return strReturn;
}
/// <summary>
/// Internal helper method to extract a string with a specific length from the binary reader
/// </summary>
/// <param name="binReader">reference to the binary reader</param>
/// <param name="length">length of the string (number of bytes)</param>
/// <param name="offset">offset in the stream</param>
/// <param name="noOffset">true if the offset value should be used</param>
/// <param name="encoder">encoder used for text encoding</param>
/// <returns>An extracted string value</returns>
internal static string ExtractString(ref BinaryReader binReader, int length, int offset, bool noOffset, Encoding encoder)
{
string strReturn = "";
if(length == 0)
return "";
if(encoder == null)
encoder = Encoding.ASCII;
ArrayList nameBytes = new ArrayList();
byte curByte;
if(!noOffset)
binReader.BaseStream.Seek(offset, SeekOrigin.Begin);
if(binReader.BaseStream.Position >= binReader.BaseStream.Length)
return "";
curByte = binReader.ReadByte();
while( (curByte != (byte)0) && (nameBytes.Count < length) && (binReader.BaseStream.Position < binReader.BaseStream.Length) )
{
nameBytes.Add( curByte );
if(nameBytes.Count < length)
curByte = binReader.ReadByte();
}
byte[] name = (byte[]) (nameBytes.ToArray(System.Type.GetType("System.Byte")));
strReturn = encoder.GetString(name,0,name.Length);
return strReturn;
}
/// <summary>
/// Internal helper method to extract a string with a specific length from the binary reader
/// </summary>
/// <param name="binReader">reference to the binary reader</param>
/// <param name="bFoundTerminator">reference to a bool vairable which will receive true if the
/// string terminator \0 was found. false indicates that the end of the stream was reached.</param>
/// <param name="offset">offset in the stream</param>
/// <param name="noOffset">true if the offset value should be used</param>
/// <param name="encoder">encoder used for text encoding</param>
/// <returns>An extracted string value</returns>
internal static string ExtractString(ref BinaryReader binReader, ref bool bFoundTerminator, int offset, bool noOffset, Encoding encoder)
{
string strReturn = "";
ArrayList nameBytes = new ArrayList();
byte curByte;
if(encoder == null)
encoder = Encoding.ASCII;
if(!noOffset)
binReader.BaseStream.Seek(offset, SeekOrigin.Begin);
if(binReader.BaseStream.Position >= binReader.BaseStream.Length)
return "";
curByte = binReader.ReadByte();
while( (curByte != (byte)0) && (binReader.BaseStream.Position < binReader.BaseStream.Length) )
{
nameBytes.Add( curByte );
curByte = binReader.ReadByte();
if( curByte == (byte)0 )
{
bFoundTerminator = true;
}
}
byte[] name = (byte[]) (nameBytes.ToArray(System.Type.GetType("System.Byte")));
strReturn = encoder.GetString(name,0,name.Length);
return strReturn;
}
/// <summary>
/// Internal helper method to extract a null-terminated UTF-16/UCS-2 strings from a binary reader
/// </summary>
/// <param name="binReader">reference to the binary reader</param>
/// <param name="offset">offset in the stream</param>
/// <param name="noOffset">true if the offset value should be used</param>
/// <param name="encoder">encoder used for text encoding</param>
/// <returns>An extracted string value</returns>
internal static string ExtractUTF16String(ref BinaryReader binReader, int offset, bool noOffset, Encoding encoder)
{
string strReturn = "";
ArrayList nameBytes = new ArrayList();
byte curByte;
int lastByte=-1;
if(!noOffset)
binReader.BaseStream.Seek(offset, SeekOrigin.Begin);
if(binReader.BaseStream.Position >= binReader.BaseStream.Length)
return "";
if(encoder == null)
encoder = Encoding.Unicode;
curByte = binReader.ReadByte();
int nCnt = 0;
while( ((curByte != (byte)0) || (lastByte != 0) ) && (binReader.BaseStream.Position < binReader.BaseStream.Length) )
{
nameBytes.Add( curByte );
if(nCnt%2 == 0)
lastByte = (int)curByte;
curByte = binReader.ReadByte();
nCnt++;
}
byte[] name = (byte[]) (nameBytes.ToArray(System.Type.GetType("System.Byte")));
strReturn = Encoding.Unicode.GetString(name,0,name.Length);
// apply text encoding
name = Encoding.Default.GetBytes(strReturn);
strReturn = encoder.GetString(name,0,name.Length);
return strReturn;
}
/// <summary>
/// Internal helper for reading ENCINT encoded integer values
/// </summary>
/// <param name="binReader">reference to the reader</param>
/// <returns>a long value</returns>
internal static long ReadENCINT(ref BinaryReader binReader)
{
long nRet = 0;
byte buffer = 0;
int shift = 0;
if(binReader.BaseStream.Position >= binReader.BaseStream.Length)
return nRet;
do
{
buffer = binReader.ReadByte();
nRet |= ((long)((buffer & (byte)0x7F))) << shift;
shift += 7;
}while ( (buffer & (byte)0x80) != 0);
return nRet;
}
/// <summary>
/// Reads an s/r encoded value from the byte array and decodes it into an integer
/// </summary>
/// <param name="wclBits">a byte array containing all bits (contains only 0 or 1 elements)</param>
/// <param name="s">scale param for encoding</param>
/// <param name="r">root param for encoding</param>
/// <param name="nBitIndex">current index in the wclBits array</param>
/// <returns>Returns an decoded integer value.</returns>
internal static int ReadSRItem(byte[] wclBits, int s, int r, ref int nBitIndex)
{
int nRet = 0;
int q = r;
int nPref1Cnt = 0;
while( wclBits[nBitIndex++] == 1)
{
nPref1Cnt++;
}
if(nPref1Cnt == 0)
{
int nMask = 0;
for(int nbits=0; nbits<q;nbits++)
{
nMask |= ( 0x01 & (int)wclBits[nBitIndex]) << (q-nbits-1);
nBitIndex++;
}
nRet = nMask;
}
else
{
q += (nPref1Cnt-1);
int nMask = 0;
int nRMaxValue = 0;
for(int nbits=0; nbits<q;nbits++)
{
nMask |= ( 0x01 & (int)wclBits[nBitIndex]) << (q-nbits-1);
nBitIndex++;
}
for(int nsv=0; nsv<r; nsv++)
{
nRMaxValue = nRMaxValue << 1;
nRMaxValue |= 0x1;
}
nRMaxValue++; // startvalue of s/r encoding with 1 prefixing '1'
nRMaxValue *= (int) Math.Pow((double)2, (double)(nPref1Cnt-1));
nRet = nRMaxValue + nMask;
}
return nRet;
}
}
}

View File

@@ -1,325 +0,0 @@
using System;
using System.IO;
using System.Collections;
using System.Collections.Specialized;
namespace HtmlHelp.ChmDecoding
{
/// <summary>
/// The class <c>CHMBtree</c> implements methods/properties to decode the binary help index.
/// This class automatically creates an index arraylist for the current CHMFile instance.
/// It does not store the index internally !
/// </summary>
/// <remarks>The binary index can be found in the storage file $WWKeywordLinks/BTree</remarks>
internal sealed class CHMBtree : IDisposable
{
/// <summary>
/// Constant specifying the size of the string blocks
/// </summary>
private const int BLOCK_SIZE = 2048;
/// <summary>
/// Internal flag specifying if the object is going to be disposed
/// </summary>
private bool disposed = false;
/// <summary>
/// Internal member storing the binary file data
/// </summary>
private byte[] _binaryFileData = null;
/// <summary>
/// Internal member storing flags
/// </summary>
private int _flags = 0;
/// <summary>
/// Internal member storing the data format
/// </summary>
private byte[] _dataFormat = new byte[16];
/// <summary>
/// Internal member storing the index of the last listing block
/// </summary>
private int _indexOfLastListingBlock = 0;
/// <summary>
/// Internal member storing the index of the root block
/// </summary>
private int _indexOfRootBlock = 0;
/// <summary>
/// Internal member storing the number of blocks
/// </summary>
private int _numberOfBlocks = 0;
/// <summary>
/// Internal member storing the tree depth.
/// (1 if no index blocks, 2 one level of index blocks, ...)
/// </summary>
private int _treeDepth = 0;
/// <summary>
/// Internal member storing the number of keywords in the file
/// </summary>
private int _numberOfKeywords = 0;
/// <summary>
/// Internal member storing the codepage
/// </summary>
private int _codePage = 0;
/// <summary>
/// true if the index is from a CHI or CHM file, else CHW
/// </summary>
private bool _isCHI_CHM = true;
/// <summary>
/// Internal member storing the associated chmfile object
/// </summary>
private CHMFile _associatedFile = null;
/// <summary>
/// Internal flag specifying if we have to read listing or index blocks
/// </summary>
private bool _readListingBlocks = true;
/// <summary>
/// Internal member storing an indexlist of the current file.
/// </summary>
private ArrayList _indexList = new ArrayList();
/// <summary>
/// Constructor of the class
/// </summary>
/// <param name="binaryFileData">binary file data of the $WWKeywordLinks/BTree file</param>
/// <param name="associatedFile">associated chm file</param>
public CHMBtree(byte[] binaryFileData, CHMFile associatedFile)
{
if( associatedFile == null)
{
throw new ArgumentException("CHMBtree.ctor() - Associated CHMFile must not be null !", "associatedFile");
}
_binaryFileData = binaryFileData;
_associatedFile = associatedFile;
DecodeData();
// clear internal binary data after extraction
_binaryFileData = null;
}
/// <summary>
/// Decodes the binary file data and fills the internal properties
/// </summary>
/// <returns>true if succeeded</returns>
private bool DecodeData()
{
bool bRet = true;
MemoryStream memStream = new MemoryStream(_binaryFileData);
BinaryReader binReader = new BinaryReader(memStream);
int nCurOffset = 0;
int nTemp = 0;
// decode header
binReader.ReadChars(2); // 2chars signature (not important)
_flags = (int)binReader.ReadInt16(); // WORD flags
binReader.ReadInt16(); // size of blocks (always 2048)
_dataFormat = binReader.ReadBytes(16);
binReader.ReadInt32(); // unknown DWORD
_indexOfLastListingBlock = binReader.ReadInt32();
_indexOfRootBlock = binReader.ReadInt32();
binReader.ReadInt32(); // unknown DWORD
_numberOfBlocks = binReader.ReadInt32();
_treeDepth = binReader.ReadInt16();
_numberOfKeywords = binReader.ReadInt32();
_codePage = binReader.ReadInt32();
binReader.ReadInt32(); // lcid DWORD
nTemp = binReader.ReadInt32();
_isCHI_CHM = (nTemp==1);
binReader.ReadInt32(); // unknown DWORD
binReader.ReadInt32(); // unknown DWORD
binReader.ReadInt32(); // unknown DWORD
binReader.ReadInt32(); // unknown DWORD
// end of header decode
while( (memStream.Position < memStream.Length) && (bRet) )
{
nCurOffset = (int)memStream.Position;
byte [] dataBlock = binReader.ReadBytes(BLOCK_SIZE);
bRet &= DecodeBlock(dataBlock, ref nCurOffset, _treeDepth-1);
}
return bRet;
}
/// <summary>
/// Decodes a block of url-string data
/// </summary>
/// <param name="dataBlock">block of data</param>
/// <param name="nOffset">current file offset</param>
/// <param name="indexBlocks">number of index blocks</param>
/// <returns>true if succeeded</returns>
private bool DecodeBlock( byte[] dataBlock, ref int nOffset, int indexBlocks )
{
bool bRet = true;
int nblockOffset = nOffset;
MemoryStream memStream = new MemoryStream(dataBlock);
BinaryReader binReader = new BinaryReader(memStream);
int freeSpace = binReader.ReadInt16(); // length of freespace
int nrOfEntries = binReader.ReadInt16(); // number of entries
bool bListingEndReached = false;
//while( (memStream.Position < (memStream.Length-freeSpace)) && (bRet) )
//{
int nIndexOfPrevBlock = -1;
int nIndexOfNextBlock = -1;
int nIndexOfChildBlock = 0;
if(_readListingBlocks)
{
nIndexOfPrevBlock = binReader.ReadInt32(); // -1 if this is the header
nIndexOfNextBlock = binReader.ReadInt32(); // -1 if this is the last block
}
else
{
nIndexOfChildBlock = binReader.ReadInt32();
}
for(int nE = 0; nE < nrOfEntries; nE++)
{
if(_readListingBlocks)
{
bListingEndReached = (nIndexOfNextBlock==-1);
string keyWord = BinaryReaderHelp.ExtractUTF16String(ref binReader, 0, true, _associatedFile.TextEncoding);
bool isSeeAlsoKeyword = (binReader.ReadInt16()!=0);
int indent = binReader.ReadInt16(); // indent of entry
int nCharIndex = binReader.ReadInt32();
binReader.ReadInt32();
int numberOfPairs = binReader.ReadInt32();
int[] nTopics = new int[numberOfPairs];
string[] seeAlso = new string[numberOfPairs];
for(int i=0; i < numberOfPairs; i++)
{
if(isSeeAlsoKeyword)
{
seeAlso[i] = BinaryReaderHelp.ExtractUTF16String(ref binReader, 0, true, _associatedFile.TextEncoding);
}
else
{
nTopics[i] = binReader.ReadInt32();
}
}
binReader.ReadInt32(); // unknown
int nIndexOfThisEntry = binReader.ReadInt32();
IndexItem newItem = new IndexItem(_associatedFile, keyWord, isSeeAlsoKeyword, indent, nCharIndex, nIndexOfThisEntry, seeAlso, nTopics);
_indexList.Add(newItem);
}
else
{
string keyWord = BinaryReaderHelp.ExtractUTF16String(ref binReader, 0, true, _associatedFile.TextEncoding);
bool isSeeAlsoKeyword = (binReader.ReadInt16()!=0);
int indent = binReader.ReadInt16(); // indent of entry
int nCharIndex = binReader.ReadInt32();
binReader.ReadInt32();
int numberOfPairs = binReader.ReadInt32();
int[] nTopics = new int[numberOfPairs];
string[] seeAlso = new string[numberOfPairs];
for(int i=0; i < numberOfPairs; i++)
{
if(isSeeAlsoKeyword)
{
seeAlso[i] = BinaryReaderHelp.ExtractUTF16String(ref binReader, 0, true, _associatedFile.TextEncoding);
}
else
{
nTopics[i] = binReader.ReadInt32();
}
}
int nIndexChild = binReader.ReadInt32();
int nIndexOfThisEntry=-1;
IndexItem newItem = new IndexItem(_associatedFile, keyWord, isSeeAlsoKeyword, indent, nCharIndex, nIndexOfThisEntry, seeAlso, nTopics);
_indexList.Add(newItem);
}
}
//}
binReader.ReadBytes(freeSpace);
if( bListingEndReached )
_readListingBlocks = false;
return bRet;
}
/// <summary>
/// Gets the internal generated index list
/// </summary>
internal ArrayList IndexList
{
get { return _indexList; }
}
/// <summary>
/// Implement IDisposable.
/// </summary>
public void Dispose()
{
Dispose(true);
// This object will be cleaned up by the Dispose method.
// Therefore, you should call GC.SupressFinalize to
// take this object off the finalization queue
// and prevent finalization code for this object
// from executing a second time.
GC.SuppressFinalize(this);
}
/// <summary>
/// Dispose(bool disposing) executes in two distinct scenarios.
/// If disposing equals true, the method has been called directly
/// or indirectly by a user's code. Managed and unmanaged resources
/// can be disposed.
/// If disposing equals false, the method has been called by the
/// runtime from inside the finalizer and you should not reference
/// other objects. Only unmanaged resources can be disposed.
/// </summary>
/// <param name="disposing">disposing flag</param>
private void Dispose(bool disposing)
{
// Check to see if Dispose has already been called.
if(!this.disposed)
{
// If disposing equals true, dispose all managed
// and unmanaged resources.
if(disposing)
{
// Dispose managed resources.
_binaryFileData = null;
}
}
disposed = true;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,286 +0,0 @@
using System;
using System.Collections;
using System.IO;
namespace HtmlHelp.ChmDecoding
{
/// <summary>
/// The class <c>CHMIdxhdr</c> implements t properties which have been read from the #IDXHDR file.
/// </summary>
internal sealed class CHMIdxhdr : IDisposable
{
/// <summary>
/// Internal flag specifying if the object is going to be disposed
/// </summary>
private bool disposed = false;
/// <summary>
/// Internal member storing the binary file data
/// </summary>
private byte[] _binaryFileData = null;
/// <summary>
/// Internal member storing the number of topic nodes including the contents and index files
/// </summary>
private int _numberOfTopicNodes = 0;
/// <summary>
/// Internal member storing the offset in the #STRINGS file of the ImageList param of the "text/site properties" object of the sitemap contents
/// </summary>
private int _imageListOffset = 0;
/// <summary>
/// True if the value of the ImageType param of the "text/site properties" object of the sitemap contents is "Folder".
/// </summary>
private bool _imageTypeFolder = false;
/// <summary>
/// Internal member storing the background value
/// </summary>
private int _background = 0;
/// <summary>
/// Internal member storing the foreground value
/// </summary>
private int _foreground = 0;
/// <summary>
/// Internal member storing the offset in the #STRINGS file of the Font param of the "text/site properties" object of the sitemap contents
/// </summary>
private int _fontOffset = 0;
/// <summary>
/// Internal member storing the offset in the #STRINGS file of the FrameName param of the "text/site properties" object of the sitemap contents
/// </summary>
private int _frameNameOffset = 0;
/// <summary>
/// Internal member storing the offset in the #STRINGS file of the WindowName param of the "text/site properties" object of the sitemap contents
/// </summary>
private int _windowNameOffset = 0;
/// <summary>
/// Internal member storing the number of merged files
/// </summary>
private int _numberOfMergedFiles = 0;
/// <summary>
/// Internal member storing the offset in the #STRINGS file of the merged file names
/// </summary>
private ArrayList _mergedFileOffsets = new ArrayList();
/// <summary>
/// Internal member storing the associated chmfile object
/// </summary>
private CHMFile _associatedFile = null;
/// <summary>
/// Constructor of the class
/// </summary>
/// <param name="binaryFileData">binary file data of the #IDXHDR file</param>
/// <param name="associatedFile">associated CHMFile instance</param>
public CHMIdxhdr(byte[] binaryFileData, CHMFile associatedFile)
{
_binaryFileData = binaryFileData;
_associatedFile = associatedFile;
DecodeData();
}
/// <summary>
/// Decodes the binary file data and fills the internal properties
/// </summary>
/// <returns>true if succeeded</returns>
private bool DecodeData()
{
bool bRet = true;
MemoryStream memStream = new MemoryStream(_binaryFileData);
BinaryReader binReader = new BinaryReader(memStream);
int nTemp = 0;
// 4 character T#SM
binReader.ReadBytes(4);
// unknown timestamp DWORD
nTemp = binReader.ReadInt32();
// unknown 1
nTemp = binReader.ReadInt32();
// number of topic nodes including the contents & index files
_numberOfTopicNodes = binReader.ReadInt32();
// unknown DWORD
nTemp = binReader.ReadInt32();
// offset in the strings file
_imageListOffset = binReader.ReadInt32();
if( _imageListOffset == 0)
_imageListOffset = -1; // 0/-1 = none
// unknown DWORD
nTemp = binReader.ReadInt32();
// 1 if the value of the ImageType param of the "text/site properties" object of the sitemap contents is "Folder".
nTemp = binReader.ReadInt32();
_imageTypeFolder = (nTemp == 1);
// offset in the strings file
_background = binReader.ReadInt32();
// offset in the strings file
_foreground = binReader.ReadInt32();
// offset in the strings file
_fontOffset = binReader.ReadInt32();
// window styles DWORD
nTemp = binReader.ReadInt32();
// window styles DWORD
nTemp = binReader.ReadInt32();
// unknown DWORD
nTemp = binReader.ReadInt32();
// offset in the strings file
_frameNameOffset = binReader.ReadInt32();
if( _frameNameOffset == 0)
_frameNameOffset = -1; // 0/-1 = none
// offset in the strings file
_windowNameOffset = binReader.ReadInt32();
if( _windowNameOffset == 0)
_windowNameOffset = -1; // 0/-1 = none
// informations types DWORD
nTemp = binReader.ReadInt32();
// unknown DWORD
nTemp = binReader.ReadInt32();
// number of merged files in the merged file list DWORD
_numberOfMergedFiles = binReader.ReadInt32();
nTemp = binReader.ReadInt32();
for(int i = 0; i < _numberOfMergedFiles; i++)
{
// DWORD offset value of merged file
nTemp = binReader.ReadInt32();
if(nTemp > 0)
_mergedFileOffsets.Add(nTemp);
}
return bRet;
}
/// <summary>
/// Gets the number of topic nodes including the contents and index files
/// </summary>
public int NumberOfTopicNodes
{
get { return _numberOfTopicNodes; }
}
/// <summary>
/// Gets the offset in the #STRINGS file of the ImageList
/// param of the "text/site properties" object of the sitemap contents
/// </summary>
public int ImageListOffset
{
get { return _imageListOffset; }
}
/// <summary>
/// True if the value of the ImageType param of the
/// "text/site properties" object of the sitemap contents is "Folder".
/// </summary>
/// <remarks>If this is set to true, the help will display folders instead of books</remarks>
public bool ImageTypeFolder
{
get { return _imageTypeFolder; }
}
/// <summary>
/// Gets the background setting
/// </summary>
public int Background
{
get { return _background; }
}
/// <summary>
/// Gets the foreground setting
/// </summary>
public int Foreground
{
get { return _foreground; }
}
/// <summary>
/// Gets the offset in the #STRINGS file of the Font
/// param of the "text/site properties" object of the sitemap contents
/// </summary>
public int WindowNameOffset
{
get { return _fontOffset; }
}
/// <summary>
/// Gets the offset in the #STRINGS file of the FrameName
/// param of the "text/site properties" object of the sitemap contents
/// </summary>
public int FrameNameOffset
{
get { return _frameNameOffset; }
}
/// <summary>
/// Gets the offset in the #STRINGS file of the WindowName
/// param of the "text/site properties" object of the sitemap contents
/// </summary>
public int FontOffset
{
get { return _windowNameOffset; }
}
/// <summary>
/// Gets an array list of offset numbers in the #STRINGS file of the
/// merged file names.
/// </summary>
public ArrayList MergedFileOffsets
{
get { return _mergedFileOffsets; }
}
/// <summary>
/// Implement IDisposable.
/// </summary>
public void Dispose()
{
Dispose(true);
// This object will be cleaned up by the Dispose method.
// Therefore, you should call GC.SupressFinalize to
// take this object off the finalization queue
// and prevent finalization code for this object
// from executing a second time.
GC.SuppressFinalize(this);
}
/// <summary>
/// Dispose(bool disposing) executes in two distinct scenarios.
/// If disposing equals true, the method has been called directly
/// or indirectly by a user's code. Managed and unmanaged resources
/// can be disposed.
/// If disposing equals false, the method has been called by the
/// runtime from inside the finalizer and you should not reference
/// other objects. Only unmanaged resources can be disposed.
/// </summary>
/// <param name="disposing">disposing flag</param>
private void Dispose(bool disposing)
{
// Check to see if Dispose has already been called.
if(!this.disposed)
{
// If disposing equals true, dispose all managed
// and unmanaged resources.
if(disposing)
{
// Dispose managed resources.
_binaryFileData = null;
_mergedFileOffsets = null;
}
}
disposed = true;
}
}
}

View File

@@ -1,256 +0,0 @@
using System;
using System.IO;
using System.Collections;
using System.Collections.Specialized;
namespace HtmlHelp.ChmDecoding
{
/// <summary>
/// The class <c>CHMStrings</c> implements a string collection read from the #STRINGS file
/// </summary>
internal sealed class CHMStrings : IDisposable
{
/// <summary>
/// Constant specifying the size of the string blocks
/// </summary>
private const int STRING_BLOCK_SIZE = 4096;
/// <summary>
/// Internal flag specifying if the object is going to be disposed
/// </summary>
private bool disposed = false;
/// <summary>
/// Internal member storing the binary file data
/// </summary>
private byte[] _binaryFileData = null;
/// <summary>
/// Internal member storing the string dictionary
/// </summary>
private Hashtable _stringDictionary = new Hashtable();
/// <summary>
/// Internal member storing the associated chmfile object
/// </summary>
private CHMFile _associatedFile = null;
/// <summary>
/// Constructor of the class
/// </summary>
/// <param name="binaryFileData">binary file data of the #STRINGS file</param>
/// <param name="associatedFile">associated chm file</param>
public CHMStrings(byte[] binaryFileData, CHMFile associatedFile)
{
_binaryFileData = binaryFileData;
_associatedFile = associatedFile;
DecodeData();
}
/// <summary>
/// Standard constructor
/// </summary>
internal CHMStrings()
{
}
#region Data dumping
/// <summary>
/// Dump the class data to a binary writer
/// </summary>
/// <param name="writer">writer to write the data</param>
internal void Dump(ref BinaryWriter writer)
{
writer.Write( _stringDictionary.Count );
if (_stringDictionary.Count != 0)
{
IDictionaryEnumerator iDictionaryEnumerator = _stringDictionary.GetEnumerator();
while (iDictionaryEnumerator.MoveNext())
{
DictionaryEntry dictionaryEntry = (DictionaryEntry)iDictionaryEnumerator.Current;
writer.Write( Int32.Parse(dictionaryEntry.Key.ToString()) );
writer.Write( dictionaryEntry.Value.ToString() );
}
}
}
/// <summary>
/// Reads the object data from a dump store
/// </summary>
/// <param name="reader">reader to read the data</param>
internal void ReadDump(ref BinaryReader reader)
{
int nCnt = reader.ReadInt32();
for(int i=0; i<nCnt;i++)
{
int nKey = reader.ReadInt32();
string sValue = reader.ReadString();
_stringDictionary[nKey.ToString()] = sValue;
}
}
/// <summary>
/// Sets the associated CHMFile instance
/// </summary>
/// <param name="associatedFile">instance to set</param>
internal void SetCHMFile(CHMFile associatedFile)
{
_associatedFile = associatedFile;
}
#endregion
/// <summary>
/// Decodes the binary file data and fills the internal properties
/// </summary>
/// <returns>true if succeeded</returns>
private bool DecodeData()
{
bool bRet = true;
MemoryStream memStream = new MemoryStream(_binaryFileData);
BinaryReader binReader = new BinaryReader(memStream);
//binReader.ReadByte(); // file starts with a NULL character for 0-based offset indexing
int nStringOffset = 0;
int nSubsetOffset = 0;
while( (memStream.Position < memStream.Length) && (bRet) )
{
nStringOffset = (int)memStream.Position;
byte [] stringBlock = binReader.ReadBytes(STRING_BLOCK_SIZE);
bRet &= DecodeBlock(stringBlock, ref nStringOffset, ref nSubsetOffset);
}
return bRet;
}
/// <summary>
/// Decodes a string block
/// </summary>
/// <param name="stringBlock">byte array which represents the string block</param>
/// <param name="nStringOffset">current string offset number</param>
/// <param name="nSubsetOffset">reference to a subset variable</param>
/// <returns>true if succeeded</returns>
/// <remarks>If a string crosses the end of a block then it will be cut off
/// without a NT and repeated in full, with a NT, at the start of the next block.
/// For eg "To customize the appearance of a contents file" might become
/// "To customize the (block ending)To customize the appearance of a contents file"
/// when there are 17 bytes left at the end of the block. </remarks>
private bool DecodeBlock( byte[] stringBlock, ref int nStringOffset, ref int nSubsetOffset)
{
bool bRet = true;
MemoryStream memStream = new MemoryStream(stringBlock);
BinaryReader binReader = new BinaryReader(memStream);
while( (memStream.Position < memStream.Length) && (bRet) )
{
bool bFoundTerminator = false;
int nCurOffset = nStringOffset + (int)memStream.Position;
string sTemp = BinaryReaderHelp.ExtractString(ref binReader, ref bFoundTerminator, 0, true, _associatedFile.TextEncoding);
if(nSubsetOffset != 0)
{
_stringDictionary[nSubsetOffset.ToString()] = sTemp.ToString();
}
else
{
_stringDictionary[nCurOffset.ToString()] = sTemp.ToString();
}
if( bFoundTerminator )
{
nSubsetOffset = 0;
}
else
{
nSubsetOffset = nCurOffset;
}
}
return bRet;
}
/// <summary>
/// Indexer which returns the string at a given offset
/// </summary>
public string this[int offset]
{
get
{
if(offset == -1)
return String.Empty;
string sTemp = (string)_stringDictionary[ offset.ToString() ];
if(sTemp == null)
return String.Empty;
return sTemp;
}
}
/// <summary>
/// Indexer which returns the string at a given offset
/// </summary>
public string this[string offset]
{
get
{
if(offset == "-1")
return String.Empty;
string sTemp = (string)_stringDictionary[ offset ];
if(sTemp == null)
return String.Empty;
return sTemp;
}
}
/// <summary>
/// Implement IDisposable.
/// </summary>
public void Dispose()
{
Dispose(true);
// This object will be cleaned up by the Dispose method.
// Therefore, you should call GC.SupressFinalize to
// take this object off the finalization queue
// and prevent finalization code for this object
// from executing a second time.
GC.SuppressFinalize(this);
}
/// <summary>
/// Dispose(bool disposing) executes in two distinct scenarios.
/// If disposing equals true, the method has been called directly
/// or indirectly by a user's code. Managed and unmanaged resources
/// can be disposed.
/// If disposing equals false, the method has been called by the
/// runtime from inside the finalizer and you should not reference
/// other objects. Only unmanaged resources can be disposed.
/// </summary>
/// <param name="disposing">disposing flag</param>
private void Dispose(bool disposing)
{
// Check to see if Dispose has already been called.
if(!this.disposed)
{
// If disposing equals true, dispose all managed
// and unmanaged resources.
if(disposing)
{
// Dispose managed resources.
_binaryFileData = null;
_stringDictionary = null;
}
}
disposed = true;
}
}
}

View File

@@ -1,821 +0,0 @@
using System;
using System.Collections;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Globalization;
namespace HtmlHelp.ChmDecoding
{
/// <summary>
/// The class <c>CHMSystem</c> reads the #SYSTEM file of the chm and stores its settings
/// </summary>
internal sealed class CHMSystem : IDisposable
{
/// <summary>
/// Internal flag specifying if the object is going to be disposed
/// </summary>
private bool disposed = false;
/// <summary>
/// Internal member storing the binary file data
/// </summary>
private byte[] _binaryFileData = null;
/// <summary>
/// Internal member storing the file version
/// </summary>
private int _fileVersion = 0;
/// <summary>
/// Internal member storing the contents file path
/// </summary>
private string _contentsFile = "";
/// <summary>
/// Internal member storing the index file path
/// </summary>
private string _indexFile = "";
/// <summary>
/// Internal member storing the default help topic
/// </summary>
private string _defaultTopic = "";
/// <summary>
/// Internal member storing the help-window title
/// </summary>
private string _title = "";
/// <summary>
/// Internal flag if dbcs is on
/// </summary>
private bool _dbcs = false;
/// <summary>
/// Internal flag if fulltext search is enabled
/// </summary>
private bool _fullTextSearch = false;
/// <summary>
/// Internal flag if KLinks are in the file
/// </summary>
private bool _hasKLinks = false;
/// <summary>
/// Internal flag if ALinks are in the file
/// </summary>
private bool _hasALinks = false;
/// <summary>
/// Internal member storing the name of the default window
/// </summary>
private string _defaultWindow = "";
/// <summary>
/// Internal member storing the filename of the compiled file
/// </summary>
private string _compileFile = "";
/// <summary>
/// Internal flag storing the offset value of the binary index
/// </summary>
private uint _binaryIndexURLTableID = 0;
/// <summary>
/// Inernal member storing the compiler version this file was compiled
/// </summary>
private string _compilerVersion = "";
/// <summary>
/// Internal flag storing the offset value of the binary TOC
/// </summary>
private uint _binaryTOCURLTableID = 0;
/// <summary>
/// Internal member storing the associated chmfile object
/// </summary>
private CHMFile _associatedFile = null;
/// <summary>
/// Internal member storing the default fontface, size, charset
/// </summary>
private string _defaultFont = "";
/// <summary>
/// Internal member storing the culture info of the file
/// </summary>
private CultureInfo _culture;
/// <summary>
/// Constructor of the class
/// </summary>
/// <param name="binaryFileData">binary file data of the #SYSTEM file</param>
/// <param name="associatedFile">associated chm file</param>
public CHMSystem(byte[] binaryFileData, CHMFile associatedFile)
{
_binaryFileData = binaryFileData;
_associatedFile = associatedFile;
DecodeData();
if(_culture == null)
{
// Set the text encoder of the chm file to the read charset/codepage
_associatedFile.TextEncoding = Encoding.GetEncoding( this.CodePage );
}
}
/// <summary>
/// Decodes the binary file data and fills the internal properties
/// </summary>
/// <returns>true if succeeded</returns>
private bool DecodeData()
{
bool bRet = true;
MemoryStream memStream = new MemoryStream(_binaryFileData);
BinaryReader binReader = new BinaryReader(memStream);
// First entry = DWORD for version number
_fileVersion = (int) binReader.ReadInt32();
while( (memStream.Position < memStream.Length) && (bRet) )
{
bRet &= DecodeEntry(ref binReader);
}
return bRet;
}
/// <summary>
/// Decodes an #system file entry
/// </summary>
/// <param name="binReader">binary reader reference</param>
/// <returns>true if succeeded</returns>
private bool DecodeEntry(ref BinaryReader binReader)
{
bool bRet = true;
int code = (int) binReader.ReadInt16(); // entry code, WORD
int length = (int) binReader.ReadInt16(); // length of entry
switch(code)
{
case 0:
{
_contentsFile = BinaryReaderHelp.ExtractString(ref binReader,length, 0, true, _associatedFile.TextEncoding);
};break;
case 1:
{
_indexFile = BinaryReaderHelp.ExtractString(ref binReader,length, 0, true, _associatedFile.TextEncoding);
};break;
case 2:
{
_defaultTopic = BinaryReaderHelp.ExtractString(ref binReader,length, 0, true, _associatedFile.TextEncoding);
};break;
case 3:
{
_title = BinaryReaderHelp.ExtractString(ref binReader,length, 0, true, _associatedFile.TextEncoding);
};break;
case 4:
{
int nTemp = 0;
nTemp = binReader.ReadInt32(); // read DWORD LCID
_culture = new CultureInfo(nTemp);
if(_culture != null)
_associatedFile.TextEncoding = Encoding.GetEncoding(_culture.TextInfo.ANSICodePage);
nTemp = binReader.ReadInt32(); // read DWORD DBCS
_dbcs = (nTemp == 1);
nTemp = binReader.ReadInt32(); // read DWORD Fulltext search
_fullTextSearch = (nTemp == 1);
nTemp = binReader.ReadInt32(); // read DWORD has klinks
_hasKLinks = (nTemp != 0);
nTemp = binReader.ReadInt32(); // read DWORD has alinks
_hasALinks = (nTemp != 0);
// read the rest of code 4 (not important for us)
byte[] temp = new byte[length-(5*4)];
temp = binReader.ReadBytes(length-(5*4));
};break;
case 5:
{
_defaultWindow = BinaryReaderHelp.ExtractString(ref binReader,length, 0, true, _associatedFile.TextEncoding);
};break;
case 6:
{
_compileFile = BinaryReaderHelp.ExtractString(ref binReader,length, 0, true, _associatedFile.TextEncoding);
};break;
case 7:
{
if(_fileVersion > 2)
{
_binaryIndexURLTableID = (uint) binReader.ReadInt32();
}
else
{
byte[] read = binReader.ReadBytes(length);
int i=read.Length;
}
};break;
case 8:
{
// abbreviation (not interresting for us)
byte[] read = binReader.ReadBytes(length);
int i=read.Length;
};break;
case 9:
{
_compilerVersion = BinaryReaderHelp.ExtractString(ref binReader,length, 0, true, _associatedFile.TextEncoding);
};break;
case 10:
{
// timestamp of the file (not interresting for us)
byte[] read = binReader.ReadBytes(length);
int i=read.Length;
};break;
case 11:
{
if(_fileVersion > 2)
{
_binaryTOCURLTableID = (uint) binReader.ReadInt32();
}
else
{
byte[] read = binReader.ReadBytes(length);
int i=read.Length;
}
};break;
case 12:
{
// number of information bytes
byte[] read = binReader.ReadBytes(length);
int i=read.Length;
};break;
case 13:
{
// copy of file #idxhdr
byte[] read = binReader.ReadBytes(length);
int i=read.Length;
};break;
case 14:
{
// custom tabs for HH viewer
byte[] read = binReader.ReadBytes(length);
int i=read.Length;
};break;
case 15:
{
// a checksum
byte[] read = binReader.ReadBytes(length);
int i=read.Length;
};break;
case 16:
{
// Default Font=string,number,number
// The string is the name of the font, the first number is the
// point size & the last number is the character set used by the font.
// For acceptable values see *_CHARSET defines in wingdi.h from the
// Windows SDK or the same file in MinGW or Wine.
// Most of the time you will only want to use 0, which is the value for ANSI,
// which is the subset of ASCII used by Windows.
_defaultFont = BinaryReaderHelp.ExtractString(ref binReader,length, 0, true, _associatedFile.TextEncoding);
};break;
default:
{
byte[] temp = new byte[length];
temp = binReader.ReadBytes(length);
//bRet = false;
int i=temp.Length;
};break;
}
return bRet;
}
/// <summary>
/// Reads all HHC files and checks which one has the global object tag.
/// This hhc file will be returned as master hhc
/// </summary>
/// <param name="hhcTopics">list of topics containing the extension hhc</param>
/// <param name="TopicItemArrayList">true if the arraylist contains topic items</param>
/// <returns>the filename of the found master toc</returns>
private string GetMasterHHC(ArrayList hhcTopics, bool TopicItemArrayList)
{
string sRet = "";
if( (hhcTopics!=null) && (hhcTopics.Count > 0) )
{
if( TopicItemArrayList )
{
if(hhcTopics.Count == 1)
{
sRet = ((TopicEntry)hhcTopics[0]).Locale;
}
else
{
foreach(TopicEntry curEntry in hhcTopics)
{
CHMStream.CHMStream iw=null;
MemoryStream fileObject=null;
if( _associatedFile.CurrentStorageWrapper == null)
{
iw=new CHMStream.CHMStream();
iw.OpenCHM(_associatedFile.ChmFilePath);
}
else
{
iw = _associatedFile.CurrentStorageWrapper;
}
fileObject = iw.OpenStream(curEntry.Locale);
if( fileObject != null)
{
string fileString =_associatedFile.TextEncoding.GetString(fileObject.ToArray(),0,(int)fileObject.Length);
fileObject.Close();
if( HHCParser.HasGlobalObjectTag(fileString, _associatedFile) )
{
sRet = curEntry.Locale;
break;
}
}
}
}
}
else
{
if(hhcTopics.Count == 1)
{
sRet = ((string)hhcTopics[0]);
}
else
{
foreach(string curEntry in hhcTopics)
{
CHMStream.CHMStream iw=null;
MemoryStream fileObject=null;
if( _associatedFile.CurrentStorageWrapper == null)
{
iw=new CHMStream.CHMStream();
iw.OpenCHM(_associatedFile.ChmFilePath);
}
else
{
iw = _associatedFile.CurrentStorageWrapper;
}
fileObject = iw.OpenStream(curEntry);
if( fileObject != null)
{
string fileString =_associatedFile.TextEncoding.GetString(fileObject.ToArray(),0,(int)fileObject.Length);
fileObject.Close();
if( HHCParser.HasGlobalObjectTag(fileString, _associatedFile) )
{
sRet = curEntry;
break;
}
}
}
}
}
}
return sRet;
}
/// <summary>
/// Gets the file version of the chm file.
/// 2 for Compatibility=1.0, 3 for Compatibility=1.1
/// </summary>
public int FileVersion
{
get { return _fileVersion; }
}
/// <summary>
/// Gets the contents file name
/// </summary>
public string ContentsFile
{
get
{
if( BinaryTOC ) // if the file contains a binary TOC
{
// make sure the CHMFile instance exists and has loaded the file #URLTBL
if( (_associatedFile != null) && (_associatedFile.UrltblFile != null ) )
{
// Get an url-table entry by its unique id
UrlTableEntry entry = _associatedFile.UrltblFile.GetByUniqueID( this.BinaryTOCURLTableID );
if(entry != null)
{
// entry found, return the url ( = filename )
return entry.URL;
}
}
}
else
{
if(_contentsFile.Length <= 0)
{
string sCheck = "Table of Contents.hhc"; // default HHP contents filename
if( (_associatedFile != null) && (_associatedFile.TopicsFile != null ) )
{
TopicEntry te = _associatedFile.TopicsFile.GetByLocale( sCheck );
if( te == null)
{
sCheck = "toc.hhc"; // default HHP contents filename
te = _associatedFile.TopicsFile.GetByLocale( sCheck );
if( te == null)
{
sCheck = CompileFile + ".hhc";
te = _associatedFile.TopicsFile.GetByLocale( sCheck );
if( te == null)
{
ArrayList arrExt = _associatedFile.TopicsFile.GetByExtension("hhc");
if( arrExt == null )
{
arrExt = _associatedFile.EnumFilesByExtension("hhc");
if( arrExt == null )
{
Debug.WriteLine("CHMSystem.ContentsFile - Failed, contents file not found !");
}
else
{
if(arrExt.Count > 1)
{
sCheck = GetMasterHHC(arrExt, false);
_contentsFile = sCheck;
}
else
{
_contentsFile = ((string)arrExt[0]);
sCheck = _contentsFile;
}
}
}
else
{
if(arrExt.Count > 1)
{
sCheck = GetMasterHHC(arrExt, true);
_contentsFile = sCheck;
}
else
{
_contentsFile = ((TopicEntry)arrExt[0]).Locale;
sCheck = _contentsFile;
}
}
}
else
{
_contentsFile = sCheck;
}
}
else
{
_contentsFile = sCheck;
}
}
else
{
_contentsFile = sCheck;
}
}
return sCheck;
}
}
return _contentsFile;
}
}
/// <summary>
/// Gets the index file name
/// </summary>
public string IndexFile
{
get
{
if( BinaryIndex ) // if the file contains a binary index
{
// make sure the CHMFile instance exists and has loaded the file #URLTBL
if( (_associatedFile != null) && (_associatedFile.UrltblFile != null ) )
{
// Get an url-table entry by its unique id
UrlTableEntry entry = _associatedFile.UrltblFile.GetByUniqueID( this.BinaryIndexURLTableID );
if(entry != null)
{
// entry found, return the url ( = filename )
return entry.URL;
}
}
}
else
{
if(_indexFile.Length <= 0)
{
string sCheck = "Index.hhk"; // default HHP index filename
if( (_associatedFile != null) && (_associatedFile.TopicsFile != null ) )
{
TopicEntry te = _associatedFile.TopicsFile.GetByLocale( sCheck );
if( te == null)
{
sCheck = CompileFile + ".hhk";
te = _associatedFile.TopicsFile.GetByLocale( sCheck );
if( te == null)
{
ArrayList arrExt = _associatedFile.TopicsFile.GetByExtension("hhk");
if( arrExt == null )
{
Debug.WriteLine("CHMSystem.IndexFile - Failed, index file not found !");
}
else
{
_indexFile = ((TopicEntry)arrExt[0]).Locale;
sCheck = _indexFile;
}
}
else
{
_indexFile = sCheck;
}
}
else
{
_indexFile = sCheck;
}
}
return sCheck;
}
}
return _indexFile;
}
}
/// <summary>
/// Sets the default topic of this file
/// </summary>
/// <param name="local">new local value of the topic</param>
internal void SetDefaultTopic(string local)
{
_defaultTopic = local;
}
/// <summary>
/// Gets the default help topic
/// </summary>
public string DefaultTopic
{
get { return _defaultTopic; }
}
/// <summary>
/// Gets the title of the help window
/// </summary>
public string Title
{
get { return _title; }
}
/// <summary>
/// Gets the flag if DBCS is in use
/// </summary>
public bool DBCS
{
get { return _dbcs; }
}
/// <summary>
/// Gets the flag if full-text-search is available
/// </summary>
public bool FullTextSearch
{
get { return _fullTextSearch; }
}
/// <summary>
/// Gets the flag if the file has ALinks
/// </summary>
public bool HasALinks
{
get { return _hasALinks; }
}
/// <summary>
/// Gets the flag if the file has KLinks
/// </summary>
public bool HasKLinks
{
get { return _hasKLinks; }
}
/// <summary>
/// Gets the default window name
/// </summary>
public string DefaultWindow
{
get { return _defaultWindow; }
}
/// <summary>
/// Gets the file name of the compile file
/// </summary>
public string CompileFile
{
get { return _compileFile; }
}
/// <summary>
/// Gets the id of the binary index in the url table
/// </summary>
public uint BinaryIndexURLTableID
{
get { return _binaryIndexURLTableID; }
}
/// <summary>
/// Gets the flag if the chm has a binary index file
/// </summary>
public bool BinaryIndex
{
get { return (_binaryIndexURLTableID>0); }
}
/// <summary>
/// Gets the flag if the chm has a binary index file
/// </summary>
public string CompilerVersion
{
get { return _compilerVersion; }
}
/// <summary>
/// Gets the id of the binary toc in the url table
/// </summary>
public uint BinaryTOCURLTableID
{
get { return _binaryTOCURLTableID; }
}
/// <summary>
/// Gets the flag if the chm has a binary toc file
/// </summary>
public bool BinaryTOC
{
get { return (_binaryTOCURLTableID>0); }
}
/// <summary>
/// Gets the font face of the read font property.
/// Empty string for default font.
/// </summary>
public string FontFace
{
get
{
if( _defaultFont.Length > 0)
{
string [] fontSplit = _defaultFont.Split( new char[]{','});
if(fontSplit.Length > 0)
return fontSplit[0].Trim();
}
return "";
}
}
/// <summary>
/// Gets the font size of the read font property.
/// 0 for default font size
/// </summary>
public double FontSize
{
get
{
if( _defaultFont.Length > 0)
{
string [] fontSplit = _defaultFont.Split( new char[]{','});
if(fontSplit.Length > 1)
return double.Parse(fontSplit[1].Trim());
}
return 0.0;
}
}
/// <summary>
/// Gets the character set of the read font property
/// 1 for default
/// </summary>
public int CharacterSet
{
get
{
if( _defaultFont.Length > 0)
{
string [] fontSplit = _defaultFont.Split( new char[]{','});
if(fontSplit.Length > 2)
return Int32.Parse(fontSplit[2].Trim());
}
return 0;
}
}
/// <summary>
/// Gets the codepage depending on the read font property
/// </summary>
public int CodePage
{
get
{
// if we've read a LCID from the system file
// ignore the font-property settings and return
// the codepage generated from the culture info
if(_culture != null)
{
return _culture.TextInfo.ANSICodePage;
}
int nRet = 1252; // default codepage windows-1252
int nCSet = CharacterSet;
switch(nCSet)
{
case 0x00: nRet = 1252;break; // ANSI_CHARSET
case 0xCC: nRet = 1251;break; // RUSSIAN_CHARSET
case 0xEE: nRet = 1250;break; // EE_CHARSET
case 0xA1: nRet = 1253;break; // GREEK_CHARSET
case 0xA2: nRet = 1254;break; // TURKISH_CHARSET
case 0xBA: nRet = 1257;break; // BALTIC_CHARSET
case 0xB1: nRet = 1255;break; // HEBREW_CHARSET
case 0xB2: nRet = 1256;break; // ARABIC_CHARSET
case 0x80: nRet = 932;break; // SHIFTJIS_CHARSET
case 0x81: nRet = 949;break; // HANGEUL_CHARSET
case 0x86: nRet = 936;break; // GB2313_CHARSET
case 0x88: nRet = 950;break; // CHINESEBIG5_CHARSET
}
return nRet;
}
}
/// <summary>
/// Gets the assiciated culture info
/// </summary>
public CultureInfo Culture
{
get { return _culture; }
}
/// <summary>
/// Implement IDisposable.
/// </summary>
public void Dispose()
{
Dispose(true);
// This object will be cleaned up by the Dispose method.
// Therefore, you should call GC.SupressFinalize to
// take this object off the finalization queue
// and prevent finalization code for this object
// from executing a second time.
GC.SuppressFinalize(this);
}
/// <summary>
/// Dispose(bool disposing) executes in two distinct scenarios.
/// If disposing equals true, the method has been called directly
/// or indirectly by a user's code. Managed and unmanaged resources
/// can be disposed.
/// If disposing equals false, the method has been called by the
/// runtime from inside the finalizer and you should not reference
/// other objects. Only unmanaged resources can be disposed.
/// </summary>
/// <param name="disposing">disposing flag</param>
private void Dispose(bool disposing)
{
// Check to see if Dispose has already been called.
if(!this.disposed)
{
// If disposing equals true, dispose all managed
// and unmanaged resources.
if(disposing)
{
// Dispose managed resources.
_binaryFileData = null;
}
}
disposed = true;
}
}
}

View File

@@ -1,288 +0,0 @@
using System;
using System.IO;
using System.Collections;
namespace HtmlHelp.ChmDecoding
{
/// <summary>
/// The class <c>CHMTocidx</c> implements functions to decode the #TOCIDX internal file.
/// </summary>
internal sealed class CHMTocidx : IDisposable
{
/// <summary>
/// Constant specifying the size of the data blocks
/// </summary>
private const int BLOCK_SIZE = 0x1000;
/// <summary>
/// Internal flag specifying if the object is going to be disposed
/// </summary>
private bool disposed = false;
/// <summary>
/// Internal member storing the binary file data
/// </summary>
private byte[] _binaryFileData = null;
/// <summary>
/// Internal memebr storing the offset to the 20/28 byte structs
/// </summary>
private int _offset2028 = 0;
/// <summary>
/// Internal member storing the offset to the 16 byte structs
/// </summary>
private int _offset16structs = 0;
/// <summary>
/// Internal member storing the number of 16 byte structs
/// </summary>
private int _numberOf16structs = 0;
/// <summary>
/// Internal member storing the offset to the topic list
/// </summary>
private int _offsetOftopics = 0;
/// <summary>
/// Internal member storing the toc
/// </summary>
private ArrayList _toc = new ArrayList();
/// <summary>
/// Internal member for offset seeking
/// </summary>
private Hashtable _offsetTable = new Hashtable();
/// <summary>
/// Internal member storing the associated chmfile object
/// </summary>
private CHMFile _associatedFile = null;
/// <summary>
/// Constructor of the class
/// </summary>
/// <param name="binaryFileData">binary file data of the #TOCIDX file</param>
/// <param name="associatedFile">associated chm file</param>
public CHMTocidx(byte[] binaryFileData, CHMFile associatedFile)
{
_binaryFileData = binaryFileData;
_associatedFile = associatedFile;
DecodeData();
// clear internal binary data after extraction
_binaryFileData = null;
}
/// <summary>
/// Decodes the binary file data and fills the internal properties
/// </summary>
/// <returns>true if succeeded</returns>
private bool DecodeData()
{
_toc = new ArrayList();
_offsetTable = new Hashtable();
bool bRet = true;
MemoryStream memStream = new MemoryStream(_binaryFileData);
BinaryReader binReader = new BinaryReader(memStream);
int nCurOffset = 0;
_offset2028 = binReader.ReadInt32();
_offset16structs = binReader.ReadInt32();
_numberOf16structs = binReader.ReadInt32();
_offsetOftopics = binReader.ReadInt32();
binReader.BaseStream.Seek( _offset2028, SeekOrigin.Begin );
if( RecursivelyBuildTree(ref binReader, _offset2028, _toc, null) )
{
binReader.BaseStream.Seek( _offset16structs, SeekOrigin.Begin );
nCurOffset = (int)binReader.BaseStream.Position;
for(int i=0; i < _numberOf16structs; i++)
{
int tocOffset = binReader.ReadInt32();
int sqNr = binReader.ReadInt32();
int topOffset = binReader.ReadInt32();
int hhctopicIdx = binReader.ReadInt32();
nCurOffset = (int)binReader.BaseStream.Position;
int topicIdx = -1;
// if the topic offset is within the range of the stream
// and is >= the offset of the first topic dword
if((topOffset < (binReader.BaseStream.Length - 4)) && (topOffset >= _offsetOftopics))
{
// read the index of the topic for this item
binReader.BaseStream.Seek( topOffset, SeekOrigin.Begin);
topicIdx = binReader.ReadInt32();
binReader.BaseStream.Seek( nCurOffset, SeekOrigin.Begin);
TOCItem item = (TOCItem)_offsetTable[tocOffset.ToString()];
if( item != null)
{
if(( topicIdx < _associatedFile.TopicsFile.TopicTable.Count)&&(topicIdx>=0))
{
TopicEntry te = (TopicEntry) (_associatedFile.TopicsFile.TopicTable[topicIdx]);
if( (te != null) && (item.TopicOffset < 0) )
{
item.TopicOffset = te.EntryOffset;
}
}
}
}
}
}
return bRet;
}
/// <summary>
/// Recursively reads the binary toc tree from the file
/// </summary>
/// <param name="binReader">reference to binary reader</param>
/// <param name="NodeOffset">offset of the first node in the current level</param>
/// <param name="level">arraylist of TOCItems for the current level</param>
/// <param name="parentItem">parent item for the item</param>
/// <returns>Returns true if succeeded</returns>
private bool RecursivelyBuildTree(ref BinaryReader binReader, int NodeOffset, ArrayList level, TOCItem parentItem)
{
bool bRet = true;
int nextOffset=0;
int nReadOffset = (int)binReader.BaseStream.Position;
binReader.BaseStream.Seek(NodeOffset, SeekOrigin.Begin);
do
{
int nCurOffset = (int)binReader.BaseStream.Position;
int unkn1 = binReader.ReadInt16(); // unknown
int unkn2 = binReader.ReadInt16(); // unknown
int flag = binReader.ReadInt32();
int nFolderAdd = 0;
if((_associatedFile != null) && (_associatedFile.ImageTypeFolder))
{
// get the value which should be added, to display folders instead of books
if(HtmlHelpSystem.UseHH2TreePics)
nFolderAdd = 8;
else
nFolderAdd = 4;
}
int nFolderImgIdx = (HtmlHelpSystem.UseHH2TreePics ? (TOCItem.STD_FOLDER_HH2+nFolderAdd) : (TOCItem.STD_FOLDER_HH1+nFolderAdd));
int nFileImgIdx = (HtmlHelpSystem.UseHH2TreePics ? TOCItem.STD_FILE_HH2 : TOCItem.STD_FILE_HH1);
int stdImage = ((flag & 0x4)!=0) ? nFolderImgIdx : nFileImgIdx;
int stringOffset = binReader.ReadInt32();
int ParentOffset = binReader.ReadInt32();
nextOffset = binReader.ReadInt32();
int firstChildOffset = 0;
int unkn3=0;
if( (flag&0x4)!=0 )
{
firstChildOffset = binReader.ReadInt32();
unkn3 = binReader.ReadInt32(); // unknown
}
TOCItem newItem = new TOCItem();
newItem.ImageIndex = stdImage;
newItem.Offset = nCurOffset;
newItem.OffsetNext = nextOffset;
newItem.AssociatedFile = _associatedFile;
newItem.TocMode = DataMode.Binary;
newItem.Parent = parentItem;
if( (flag&0x08) == 0)
{
// toc item doesn't have a local value (=> stringOffset = offset of strings file)
newItem.Name = _associatedFile.StringsFile[stringOffset];
}
else
{
// this item has a topic entry (=> stringOffset = index of topic entry)
if((stringOffset < _associatedFile.TopicsFile.TopicTable.Count) && (stringOffset >= 0))
{
TopicEntry te = (TopicEntry) (_associatedFile.TopicsFile.TopicTable[stringOffset]);
if(te != null)
{
newItem.TopicOffset = te.EntryOffset;
}
}
}
_offsetTable[nCurOffset.ToString()] = newItem;
// if this item has children (firstChildOffset > 0)
if( firstChildOffset > 0)
{
bRet &= RecursivelyBuildTree(ref binReader, firstChildOffset, newItem.Children, newItem);
}
level.Add( newItem );
if(nCurOffset != nextOffset)
binReader.BaseStream.Seek(nextOffset, SeekOrigin.Begin);
}while(nextOffset != 0);
binReader.BaseStream.Seek(nReadOffset, SeekOrigin.Begin);
return bRet;
}
/// <summary>
/// Gets the internal read toc
/// </summary>
internal ArrayList TOC
{
get { return _toc; }
}
/// <summary>
/// Implement IDisposable.
/// </summary>
public void Dispose()
{
Dispose(true);
// This object will be cleaned up by the Dispose method.
// Therefore, you should call GC.SupressFinalize to
// take this object off the finalization queue
// and prevent finalization code for this object
// from executing a second time.
GC.SuppressFinalize(this);
}
/// <summary>
/// Dispose(bool disposing) executes in two distinct scenarios.
/// If disposing equals true, the method has been called directly
/// or indirectly by a user's code. Managed and unmanaged resources
/// can be disposed.
/// If disposing equals false, the method has been called by the
/// runtime from inside the finalizer and you should not reference
/// other objects. Only unmanaged resources can be disposed.
/// </summary>
/// <param name="disposing">disposing flag</param>
private void Dispose(bool disposing)
{
// Check to see if Dispose has already been called.
if(!this.disposed)
{
// If disposing equals true, dispose all managed
// and unmanaged resources.
if(disposing)
{
// Dispose managed resources.
_binaryFileData = null;
_toc = null;
_offsetTable = null;
}
}
disposed = true;
}
}
}

View File

@@ -1,235 +0,0 @@
using System;
using System.IO;
using System.Collections;
using System.Collections.Specialized;
namespace HtmlHelp.ChmDecoding
{
/// <summary>
/// The class <c>CHMTopics</c> implements functionality to decode the #TOPICS internal file
/// </summary>
internal sealed class CHMTopics : IDisposable
{
/// <summary>
/// Internal flag specifying if the object is going to be disposed
/// </summary>
private bool disposed = false;
/// <summary>
/// Internal member storing the binary file data
/// </summary>
private byte[] _binaryFileData = null;
/// <summary>
/// Internal member storing the associated chmfile object
/// </summary>
private CHMFile _associatedFile = null;
/// <summary>
/// Internal member storing the topic list
/// </summary>
private ArrayList _topicTable = new ArrayList();
/// <summary>
/// Constructor of the class
/// </summary>
/// <param name="binaryFileData">binary file data of the #TOPICS file</param>
/// <param name="associatedFile">associated chm file</param>
public CHMTopics(byte[] binaryFileData, CHMFile associatedFile)
{
_binaryFileData = binaryFileData;
_associatedFile = associatedFile;
DecodeData();
// clear internal binary data after extraction
_binaryFileData = null;
}
/// <summary>
/// Standard constructor
/// </summary>
internal CHMTopics()
{
}
#region Data dumping
/// <summary>
/// Dump the class data to a binary writer
/// </summary>
/// <param name="writer">writer to write the data</param>
internal void Dump(ref BinaryWriter writer)
{
writer.Write( _topicTable.Count );
foreach(TopicEntry curItem in _topicTable)
{
curItem.Dump(ref writer);
}
}
/// <summary>
/// Reads the object data from a dump store
/// </summary>
/// <param name="reader">reader to read the data</param>
internal void ReadDump(ref BinaryReader reader)
{
int i=0;
int nCnt = reader.ReadInt32();
for(i=0; i<nCnt;i++)
{
TopicEntry newItem = new TopicEntry();
newItem.SetCHMFile(_associatedFile);
newItem.ReadDump(ref reader);
_topicTable.Add(newItem);
}
}
/// <summary>
/// Sets the associated CHMFile instance
/// </summary>
/// <param name="associatedFile">instance to set</param>
internal void SetCHMFile(CHMFile associatedFile)
{
_associatedFile = associatedFile;
foreach(TopicEntry curEntry in _topicTable)
{
curEntry.SetCHMFile(associatedFile);
}
}
#endregion
/// <summary>
/// Decodes the binary file data and fills the internal properties
/// </summary>
/// <returns>true if succeeded</returns>
private bool DecodeData()
{
bool bRet = true;
MemoryStream memStream = new MemoryStream(_binaryFileData);
BinaryReader binReader = new BinaryReader(memStream);
int nCurOffset = 0;
while( (memStream.Position < memStream.Length) && (bRet) )
{
int entryOffset = nCurOffset;
int tocIdx = binReader.ReadInt32();
int titleOffset = binReader.ReadInt32();
int urltablOffset = binReader.ReadInt32();
int visibilityMode = binReader.ReadInt16();
int unknownMode = binReader.ReadInt16();
TopicEntry newEntry = new TopicEntry(entryOffset, tocIdx, titleOffset, urltablOffset, visibilityMode, unknownMode, _associatedFile);
_topicTable.Add( newEntry );
nCurOffset = (int)memStream.Position;
}
return bRet;
}
/// <summary>
/// Gets the arraylist containing all topic entries.
/// </summary>
public ArrayList TopicTable
{
get
{
return _topicTable;
}
}
/// <summary>
/// Gets the topic entry of a given offset
/// </summary>
public TopicEntry this[int offset]
{
get
{
foreach(TopicEntry curEntry in _topicTable)
if(curEntry.EntryOffset == offset)
return curEntry;
return null;
}
}
/// <summary>
/// Searches a topic by the locale name
/// </summary>
/// <param name="locale">locale name to search</param>
/// <returns>The topicentry instance if found, otherwise null</returns>
public TopicEntry GetByLocale(string locale)
{
foreach(TopicEntry curEntry in TopicTable)
{
if(curEntry.Locale.ToLower() == locale.ToLower())
return curEntry;
}
return null;
}
/// <summary>
/// Searches the topics for all files with a given file extension
/// </summary>
/// <param name="fileExtension">extension to search</param>
/// <returns>An arraylist of TopicEntry instances or null if no topic was found</returns>
public ArrayList GetByExtension(string fileExtension)
{
ArrayList arrRet = new ArrayList();
foreach(TopicEntry curEntry in TopicTable)
{
if(curEntry.Locale.ToLower().EndsWith(fileExtension.ToLower()))
arrRet.Add(curEntry);
}
if(arrRet.Count > 0)
return arrRet;
return null;
}
/// <summary>
/// Implement IDisposable.
/// </summary>
public void Dispose()
{
Dispose(true);
// This object will be cleaned up by the Dispose method.
// Therefore, you should call GC.SupressFinalize to
// take this object off the finalization queue
// and prevent finalization code for this object
// from executing a second time.
GC.SuppressFinalize(this);
}
/// <summary>
/// Dispose(bool disposing) executes in two distinct scenarios.
/// If disposing equals true, the method has been called directly
/// or indirectly by a user's code. Managed and unmanaged resources
/// can be disposed.
/// If disposing equals false, the method has been called by the
/// runtime from inside the finalizer and you should not reference
/// other objects. Only unmanaged resources can be disposed.
/// </summary>
/// <param name="disposing">disposing flag</param>
private void Dispose(bool disposing)
{
// Check to see if Dispose has already been called.
if(!this.disposed)
{
// If disposing equals true, dispose all managed
// and unmanaged resources.
if(disposing)
{
// Dispose managed resources.
_binaryFileData = null;
_topicTable=null;
}
}
disposed = true;
}
}
}

View File

@@ -1,308 +0,0 @@
using System;
using System.IO;
using System.Collections;
using System.Collections.Specialized;
namespace HtmlHelp.ChmDecoding
{
/// <summary>
/// The class <c>CHMUrlstr</c> implements a string collection storing the URL strings of the help file
/// </summary>
internal sealed class CHMUrlstr : IDisposable
{
/// <summary>
/// Constant specifying the size of the string blocks
/// </summary>
private const int BLOCK_SIZE = 0x1000;
/// <summary>
/// Internal flag specifying if the object is going to be disposed
/// </summary>
private bool disposed = false;
/// <summary>
/// Internal member storing the binary file data
/// </summary>
private byte[] _binaryFileData = null;
/// <summary>
/// Internal member storing the url dictionary
/// </summary>
private Hashtable _urlDictionary = new Hashtable();
/// <summary>
/// Internal member storing the framename dictionary
/// </summary>
private Hashtable _framenameDictionary = new Hashtable();
/// <summary>
/// Internal member storing the associated chmfile object
/// </summary>
private CHMFile _associatedFile = null;
/// <summary>
/// Constructor of the class
/// </summary>
/// <param name="binaryFileData">binary file data of the #URLSTR file</param>
/// <param name="associatedFile">associated chm file</param>
public CHMUrlstr(byte[] binaryFileData, CHMFile associatedFile)
{
_binaryFileData = binaryFileData;
_associatedFile = associatedFile;
DecodeData();
// clear internal binary data after extraction
_binaryFileData = null;
}
/// <summary>
/// Standard constructor
/// </summary>
internal CHMUrlstr()
{
}
#region Data dumping
/// <summary>
/// Dump the class data to a binary writer
/// </summary>
/// <param name="writer">writer to write the data</param>
internal void Dump(ref BinaryWriter writer)
{
writer.Write( _urlDictionary.Count );
if (_urlDictionary.Count != 0)
{
IDictionaryEnumerator iDictionaryEnumerator = _urlDictionary.GetEnumerator();
while (iDictionaryEnumerator.MoveNext())
{
DictionaryEntry dictionaryEntry = (DictionaryEntry)iDictionaryEnumerator.Current;
writer.Write( Int32.Parse(dictionaryEntry.Key.ToString()) );
writer.Write( dictionaryEntry.Value.ToString() );
}
}
writer.Write( _framenameDictionary.Count );
if (_framenameDictionary.Count != 0)
{
IDictionaryEnumerator iDictionaryEnumerator = _framenameDictionary.GetEnumerator();
while (iDictionaryEnumerator.MoveNext())
{
DictionaryEntry dictionaryEntry = (DictionaryEntry)iDictionaryEnumerator.Current;
writer.Write( Int32.Parse(dictionaryEntry.Key.ToString()) );
writer.Write( dictionaryEntry.Value.ToString() );
}
}
}
/// <summary>
/// Reads the object data from a dump store
/// </summary>
/// <param name="reader">reader to read the data</param>
internal void ReadDump(ref BinaryReader reader)
{
int i=0;
int nCnt = reader.ReadInt32();
for(i=0; i<nCnt;i++)
{
int nKey = reader.ReadInt32();
string sValue = reader.ReadString();
_urlDictionary[nKey.ToString()] = sValue;
}
nCnt = reader.ReadInt32();
for(i=0; i<nCnt;i++)
{
int nKey = reader.ReadInt32();
string sValue = reader.ReadString();
_framenameDictionary[nKey.ToString()] = sValue;
}
}
/// <summary>
/// Sets the associated CHMFile instance
/// </summary>
/// <param name="associatedFile">instance to set</param>
internal void SetCHMFile(CHMFile associatedFile)
{
_associatedFile = associatedFile;
}
#endregion
/// <summary>
/// Decodes the binary file data and fills the internal properties
/// </summary>
/// <returns>true if succeeded</returns>
private bool DecodeData()
{
bool bRet = true;
MemoryStream memStream = new MemoryStream(_binaryFileData);
BinaryReader binReader = new BinaryReader(memStream);
int nCurOffset = 0;
while( (memStream.Position < memStream.Length) && (bRet) )
{
nCurOffset = (int)memStream.Position;
byte [] dataBlock = binReader.ReadBytes(BLOCK_SIZE);
bRet &= DecodeBlock(dataBlock, ref nCurOffset);
}
return bRet;
}
/// <summary>
/// Decodes a block of url-string data
/// </summary>
/// <param name="dataBlock">block of data</param>
/// <param name="nOffset">current file offset</param>
/// <returns>true if succeeded</returns>
private bool DecodeBlock( byte[] dataBlock, ref int nOffset )
{
bool bRet = true;
int blockOffset = nOffset;
MemoryStream memStream = new MemoryStream(dataBlock);
BinaryReader binReader = new BinaryReader(memStream);
if(nOffset==0)
binReader.ReadByte(); // first block starts with an unknown byte
while( (memStream.Position < (memStream.Length-8)) && (bRet) )
{
int entryOffset = blockOffset + (int)memStream.Position;
int urlOffset = binReader.ReadInt32();
int frameOffset = binReader.ReadInt32();
// There is one way to tell where the end of the URL/FrameName
// pairs occurs: Repeat the following: read 2 DWORDs and if both
// are less than the current offset then this is the start of the Local
// strings else skip two NT strings.
// if(( (urlOffset < (entryOffset+8)) && (frameOffset < (entryOffset+8)) ))
// {
// //TODO: add correct string reading if an offset has been found
// /*
// int curOffset = (int)memStream.Position;
//
// memStream.Seek( (long)(blockOffset-urlOffset), SeekOrigin.Begin);
// string sTemp = CHMReader.ExtractString(ref binReader, 0, true);
//
// memStream.Seek( (long)(blockOffset-frameOffset), SeekOrigin.Begin);
// sTemp = CHMReader.ExtractString(ref binReader, 0, true);
//
// memStream.Seek((long)curOffset, SeekOrigin.Begin);
// */
//
//
// int curOffs = (int)memStream.Position;
// BinaryReaderHelp.ExtractString(ref binReader, 0, true, _associatedFile.TextEncoding);
// nOffset += (int)memStream.Position - curOffs;
//
// curOffs = (int)memStream.Position;
// BinaryReaderHelp.ExtractString(ref binReader, 0, true, _associatedFile.TextEncoding);
// nOffset += (int)memStream.Position - curOffs;
// }
// else
{
bool bFoundTerminator = false;
string sTemp = BinaryReaderHelp.ExtractString(ref binReader, ref bFoundTerminator, 0, true, _associatedFile.TextEncoding);
if(sTemp == "")
{
//nOffset = nOffset + 1 + (int)memStream.Length - (int)memStream.Position;
memStream.Seek(memStream.Length-1, SeekOrigin.Begin);
}
else
{
_urlDictionary[entryOffset.ToString()] = sTemp.ToString();
_framenameDictionary[ entryOffset.ToString() ] = sTemp.ToString() ;
}
}
}
return bRet;
}
/// <summary>
/// Gets the url at a given offset
/// </summary>
/// <param name="offset">offset of url</param>
/// <returns>the url at the given offset</returns>
public string GetURLatOffset(int offset)
{
if(offset == -1)
return String.Empty;
string sTemp = (string)_urlDictionary[ offset.ToString() ];
if(sTemp == null)
return String.Empty;
return sTemp;
}
/// <summary>
/// Gets the framename at a given offset
/// </summary>
/// <param name="offset">offset of the framename</param>
/// <returns>the frame name at the given offset</returns>
public string GetFrameNameatOffset(int offset)
{
if(offset == -1)
return String.Empty;
string sTemp = (string)_framenameDictionary[ offset.ToString() ];
if(sTemp == null)
return String.Empty;
return sTemp;
}
/// <summary>
/// Implement IDisposable.
/// </summary>
public void Dispose()
{
Dispose(true);
// This object will be cleaned up by the Dispose method.
// Therefore, you should call GC.SupressFinalize to
// take this object off the finalization queue
// and prevent finalization code for this object
// from executing a second time.
GC.SuppressFinalize(this);
}
/// <summary>
/// Dispose(bool disposing) executes in two distinct scenarios.
/// If disposing equals true, the method has been called directly
/// or indirectly by a user's code. Managed and unmanaged resources
/// can be disposed.
/// If disposing equals false, the method has been called by the
/// runtime from inside the finalizer and you should not reference
/// other objects. Only unmanaged resources can be disposed.
/// </summary>
/// <param name="disposing">disposing flag</param>
private void Dispose(bool disposing)
{
// Check to see if Dispose has already been called.
if(!this.disposed)
{
// If disposing equals true, dispose all managed
// and unmanaged resources.
if(disposing)
{
// Dispose managed resources.
_binaryFileData = null;
_urlDictionary = null;
_framenameDictionary = null;
}
}
disposed = true;
}
}
}

View File

@@ -1,245 +0,0 @@
using System;
using System.IO;
using System.Collections;
namespace HtmlHelp.ChmDecoding
{
/// <summary>
/// The class <c>CHMUrltable</c> implements methods to decode the #URLTBL internal file.
/// </summary>
internal sealed class CHMUrltable : IDisposable
{
/// <summary>
/// Constant specifying the size of the data blocks
/// </summary>
private const int BLOCK_SIZE = 0x1000;
/// <summary>
/// Constant specifying the number of records per block
/// </summary>
private const int RECORDS_PER_BLOCK = 341;
/// <summary>
/// Internal flag specifying if the object is going to be disposed
/// </summary>
private bool disposed = false;
/// <summary>
/// Internal member storing the binary file data
/// </summary>
private byte[] _binaryFileData = null;
/// <summary>
/// Internal member storing the url table
/// </summary>
private ArrayList _urlTable = new ArrayList();
/// <summary>
/// Internal member storing the associated chmfile object
/// </summary>
private CHMFile _associatedFile = null;
/// <summary>
/// Constructor of the class
/// </summary>
/// <param name="binaryFileData">binary file data of the #URLTBL file</param>
/// <param name="associatedFile">associated chm file</param>
public CHMUrltable(byte[] binaryFileData, CHMFile associatedFile)
{
_binaryFileData = binaryFileData;
_associatedFile = associatedFile;
DecodeData();
// clear internal binary data after extraction
_binaryFileData = null;
}
/// <summary>
/// Standard constructor
/// </summary>
internal CHMUrltable()
{
}
#region Data dumping
/// <summary>
/// Dump the class data to a binary writer
/// </summary>
/// <param name="writer">writer to write the data</param>
internal void Dump(ref BinaryWriter writer)
{
writer.Write( _urlTable.Count );
foreach(UrlTableEntry curItem in _urlTable)
{
curItem.Dump(ref writer);
}
}
/// <summary>
/// Reads the object data from a dump store
/// </summary>
/// <param name="reader">reader to read the data</param>
internal void ReadDump(ref BinaryReader reader)
{
int i=0;
int nCnt = reader.ReadInt32();
for(i=0; i<nCnt;i++)
{
UrlTableEntry newItem = new UrlTableEntry();
newItem.SetCHMFile(_associatedFile);
newItem.ReadDump(ref reader);
_urlTable.Add(newItem);
}
}
/// <summary>
/// Sets the associated CHMFile instance
/// </summary>
/// <param name="associatedFile">instance to set</param>
internal void SetCHMFile(CHMFile associatedFile)
{
_associatedFile = associatedFile;
foreach(UrlTableEntry curEntry in _urlTable)
{
curEntry.SetCHMFile(associatedFile);
}
}
#endregion
/// <summary>
/// Decodes the binary file data and fills the internal properties
/// </summary>
/// <returns>true if succeeded</returns>
private bool DecodeData()
{
bool bRet = true;
MemoryStream memStream = new MemoryStream(_binaryFileData);
BinaryReader binReader = new BinaryReader(memStream);
int nCurOffset = 0;
while( (memStream.Position < memStream.Length) && (bRet) )
{
nCurOffset = (int)memStream.Position;
byte [] dataBlock = binReader.ReadBytes(BLOCK_SIZE);
bRet &= DecodeBlock(dataBlock, ref nCurOffset);
}
return bRet;
}
/// <summary>
/// Decodes a block of url-string data
/// </summary>
/// <param name="dataBlock">block of data</param>
/// <param name="nOffset">current file offset</param>
/// <returns>true if succeeded</returns>
private bool DecodeBlock( byte[] dataBlock, ref int nOffset )
{
bool bRet = true;
int blockOffset = nOffset;
MemoryStream memStream = new MemoryStream(dataBlock);
BinaryReader binReader = new BinaryReader(memStream);
for(int i=0; i < RECORDS_PER_BLOCK; i++)
{
int recordOffset = blockOffset + (int)memStream.Position;
uint nuniqueID = (uint) binReader.ReadInt32(); // unknown dword
int ntopicsIdx = binReader.ReadInt32();
int urlstrOffset = binReader.ReadInt32();
UrlTableEntry newEntry = new UrlTableEntry(nuniqueID, recordOffset, ntopicsIdx, urlstrOffset, _associatedFile);
_urlTable.Add(newEntry);
if( memStream.Position >= memStream.Length)
break;
}
if(dataBlock.Length == BLOCK_SIZE)
binReader.ReadInt32();
return bRet;
}
/// <summary>
/// Gets the arraylist containing all urltable entries.
/// </summary>
public ArrayList UrlTable
{
get
{
return _urlTable;
}
}
/// <summary>
/// Gets the urltable entry of a given offset
/// </summary>
public UrlTableEntry this[int offset]
{
get
{
foreach(UrlTableEntry curEntry in _urlTable)
if(curEntry.EntryOffset == offset)
return curEntry;
return null;
}
}
/// <summary>
/// Gets the urltable entry of a given uniqueID
/// </summary>
public UrlTableEntry GetByUniqueID(uint uniqueID)
{
foreach(UrlTableEntry curEntry in UrlTable)
{
if(curEntry.UniqueID == uniqueID)
return curEntry;
}
return null;
}
/// <summary>
/// Implement IDisposable.
/// </summary>
public void Dispose()
{
Dispose(true);
// This object will be cleaned up by the Dispose method.
// Therefore, you should call GC.SupressFinalize to
// take this object off the finalization queue
// and prevent finalization code for this object
// from executing a second time.
GC.SuppressFinalize(this);
}
/// <summary>
/// Dispose(bool disposing) executes in two distinct scenarios.
/// If disposing equals true, the method has been called directly
/// or indirectly by a user's code. Managed and unmanaged resources
/// can be disposed.
/// If disposing equals false, the method has been called by the
/// runtime from inside the finalizer and you should not reference
/// other objects. Only unmanaged resources can be disposed.
/// </summary>
/// <param name="disposing">disposing flag</param>
private void Dispose(bool disposing)
{
// Check to see if Dispose has already been called.
if(!this.disposed)
{
// If disposing equals true, dispose all managed
// and unmanaged resources.
if(disposing)
{
// Dispose managed resources.
_binaryFileData = null;
_urlTable = null;
}
}
disposed = true;
}
}
}

View File

@@ -1,395 +0,0 @@
using System;
using System.IO;
using System.Text;
using System.Diagnostics;
using System.Collections.Specialized;
using ICSharpCode.SharpZipLib;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.Zip.Compression;
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
using HtmlHelp;
// using HtmlHelp.Storage;
namespace HtmlHelp.ChmDecoding
{
/// <summary>
/// Enumeration for specifying the dumping compression
/// </summary>
public enum DumpCompression
{
/// <summary>
/// None - no data compression will be used.
/// Fastest but most memory intensive
/// </summary>
None = 0,
/// <summary>
/// Minimum - a minimum data compression will be used.
/// Fast but not much data reduction
/// </summary>
Minimum = 1,
/// <summary>
/// Medium - a medium data compression will be used.
/// Slower but medium data reduction
/// </summary>
Medium = 2,
/// <summary>
/// Maximum - a maximum data compression will be used.
/// Slowest but maximum data reduction
/// </summary>
Maximum = 3
}
/// <summary>
/// Flags which specify which data should be dumped
/// </summary>
[FlagsAttribute()]
public enum DumpingFlags
{
/// <summary>
/// DumpTextTOC - if this flag is set, text-based TOCs (sitemap format) will be dumped
/// </summary>
DumpTextTOC = 1,
/// <summary>
/// DumpBinaryTOC - if this flag is set, binary TOCs will be dumped
/// </summary>
DumpBinaryTOC = 2,
/// <summary>
/// DumpTextIndex - if this flag is set, the text-based index (sitemap format) will be dumped
/// </summary>
DumpTextIndex = 4,
/// <summary>
/// DumpBinaryIndex - if this flag is set, the binary index will be dumped
/// </summary>
DumpBinaryIndex = 8,
/// <summary>
/// DumpStrings - if this flag is set, the internal #STRINGS file will be dumped
/// </summary>
DumpStrings = 16,
/// <summary>
/// DumpUrlStr - if this flag is set, the internal #URLSTR file will be dumped
/// </summary>
DumpUrlStr = 32,
/// <summary>
/// DumpUrlTbl - if this flag is set, the internal #URLTBL file will be dumped
/// </summary>
DumpUrlTbl = 64,
/// <summary>
/// DumpTopics - if this flag is set, the internal #TOPICS file will be dumped
/// </summary>
DumpTopics = 128,
/// <summary>
/// DumpFullText - if this flag is set, the internal $FIftiMain file will be dumped
/// </summary>
DumpFullText = 256
}
/// <summary>
/// The class <c>DumpingInfo</c> implements information properties for the CHMFile class
/// if and how data dumping should be used.
/// </summary>
public sealed class DumpingInfo
{
public bool m_bAllowSaveDump=true;
private readonly static BitVector32.Section DumpFlags = BitVector32.CreateSection(512);
private const string _dumpHeader = "HtmlHelpSystem dump file 1.0";
private string _outputDir = ""; // emtpy string means, same directory as chm file
private DumpCompression _compressionLevel = DumpCompression.Maximum;
private CHMFile _chmFile = null;
private DeflaterOutputStream _outputStream = null;
private InflaterInputStream _inputStream = null;
private BinaryWriter _writer = null;
private BinaryReader _reader = null;
private BitVector32 _flags;
/// <summary>
/// Constructor of the class
/// </summary>
/// <param name="flags">Combine flag values to specify which data should be dumped.</param>
/// <param name="outputDir">output directory. emtpy string means,
/// same directory as chm file (only if destination = ExternalFile)</param>
/// <param name="compressionLevel">compression which should be used</param>
public DumpingInfo(DumpingFlags flags, string outputDir, DumpCompression compressionLevel)
{
_flags = new BitVector32(0);
int i = _flags[DumpFlags];
_flags[DumpFlags] = i | (int)flags;
_outputDir = outputDir;
_compressionLevel = compressionLevel;
}
/// <summary>
/// Gets the flag if text-based TOCs will be written to the dumping file
/// </summary>
public bool DumpTextTOC
{
get { return ((_flags[DumpFlags] & (int)DumpingFlags.DumpTextTOC) != 0); }
}
/// <summary>
/// Gets the flag if binary TOCs will be written to the dumping file
/// </summary>
public bool DumpBinaryTOC
{
get { return ((_flags[DumpFlags] & (int)DumpingFlags.DumpBinaryTOC) != 0); }
}
/// <summary>
/// Gets the flag if the text-based index will be written to the dumping file
/// </summary>
public bool DumpTextIndex
{
get { return ((_flags[DumpFlags] & (int)DumpingFlags.DumpTextIndex) != 0); }
}
/// <summary>
/// Gets the flag if the binary index will be written to the dumping file
/// </summary>
public bool DumpBinaryIndex
{
get { return ((_flags[DumpFlags] & (int)DumpingFlags.DumpBinaryIndex) != 0); }
}
/// <summary>
/// Gets the flag if the #STRINGS file will be written to the dumping file
/// </summary>
public bool DumpStrings
{
get { return ((_flags[DumpFlags] & (int)DumpingFlags.DumpStrings) != 0); }
}
/// <summary>
/// Gets the flag if the #URLSTR file will be written to the dumping file
/// </summary>
public bool DumpUrlStr
{
get { return ((_flags[DumpFlags] & (int)DumpingFlags.DumpUrlStr) != 0); }
}
/// <summary>
/// Gets the flag if the #URLTBL file will be written to the dumping file
/// </summary>
public bool DumpUrlTbl
{
get { return ((_flags[DumpFlags] & (int)DumpingFlags.DumpUrlTbl) != 0); }
}
/// <summary>
/// Gets the flag if the #TOPICS file will be written to the dumping file
/// </summary>
public bool DumpTopics
{
get { return ((_flags[DumpFlags] & (int)DumpingFlags.DumpTopics) != 0); }
}
/// <summary>
/// Gets the flag if the $FIftiMain file will be written to the dumping file
/// </summary>
public bool DumpFullText
{
get { return ((_flags[DumpFlags] & (int)DumpingFlags.DumpFullText) != 0); }
}
/// <summary>
/// Gets the dump output directory.
/// </summary>
/// <value>emtpy string means, same directory as chm file</value>
/// <remarks>If Destination is set to DumpingOutput.InternalFile this property will be ignored</remarks>
public string OutputDir
{
get { return _outputDir; }
}
/// <summary>
/// The compression level used.
/// </summary>
public DumpCompression CompressionLevel
{
get { return _compressionLevel; }
}
/// <summary>
/// Gets/Sets the CHMFile instance associated with this object
/// </summary>
internal CHMFile ChmFile
{
get { return _chmFile; }
set { _chmFile = value; }
}
/// <summary>
/// Translates the compression level to the deflater constants
/// </summary>
private int CompLvl
{
get
{
switch(CompressionLevel)
{
case DumpCompression.None: return Deflater.NO_COMPRESSION;
case DumpCompression.Minimum: return Deflater.BEST_SPEED;
case DumpCompression.Medium: return Deflater.DEFAULT_COMPRESSION;
case DumpCompression.Maximum: return Deflater.BEST_COMPRESSION;
}
return Deflater.BEST_COMPRESSION;
}
}
/// <summary>
/// Checks if a dump exists
/// </summary>
internal bool DumpExists
{
get
{
if(_flags[DumpFlags] == 0)
return false;
// we have a reader or writer to the dump so it must exist
if( (_reader != null) || (_writer != null) )
return true;
string sDmpFile = _chmFile.ChmFilePath;
sDmpFile=sDmpFile.ToLower().Replace(".chm",".CHB");
return File.Exists(sDmpFile);
}
}
/// <summary>
/// Gets a binary writer instance which allows you to write to the dump
/// </summary>
internal BinaryWriter Writer
{
get
{
if (m_bAllowSaveDump==false)
return null;
if(_flags[DumpFlags] == 0)
throw new InvalidOperationException("Nothing to dump. No flags have been set !");
if(_reader != null)
throw new InvalidOperationException("Can't write and read at the same time !");
if(_chmFile == null)
throw new InvalidOperationException("Only usable with an associated CHMFile instance !");
if(_writer==null)
{
string sDmpFile = _chmFile.ChmFilePath;
sDmpFile=sDmpFile.ToLower().Replace(".chm",".CHB");
StreamWriter stream = new StreamWriter(sDmpFile, false, _chmFile.TextEncoding);
// write header info uncompressed
BinaryWriter _hwriter = new BinaryWriter(stream.BaseStream);
_hwriter.Write(_dumpHeader);
_hwriter.Write((int)CompressionLevel);
if(_compressionLevel == DumpCompression.None)
{
_writer = new BinaryWriter(stream.BaseStream);
}
else
{
_outputStream = new DeflaterOutputStream(stream.BaseStream, new Deflater(CompLvl));
_writer = new BinaryWriter(_outputStream);
}
}
return _writer;
}
}
/// <summary>
/// Gets a binary reader which allows you to read from the dump
/// </summary>
internal BinaryReader Reader
{
get
{
if(_writer != null)
throw new InvalidOperationException("Can't write and read at the same time !");
if(_chmFile == null)
throw new InvalidOperationException("Only usable with an associated CHMFile instance !");
if(_reader==null)
{
string sDmpFile = _chmFile.ChmFilePath;
sDmpFile=sDmpFile.ToLower().Replace(".chm",".CHB");
StreamReader stream = new StreamReader(sDmpFile, _chmFile.TextEncoding);
BinaryReader _hReader = new BinaryReader(stream.BaseStream);
string sH = _hReader.ReadString();
if(sH != _dumpHeader)
{
_hReader.Close();
Debug.WriteLine("Unexpected dump-file header !");
throw new FormatException("DumpingInfo.Reader - Unexpected dump-file header !");
}
_compressionLevel = (DumpCompression)_hReader.ReadInt32();
// if(_compressionLevel != (DumpCompression)_hReader.ReadInt32())
// {
// _hReader.Close();
// return null;
// }
if(_compressionLevel == DumpCompression.None)
{
_reader = new BinaryReader(stream.BaseStream);
}
else
{
_inputStream = new InflaterInputStream(stream.BaseStream, new Inflater());
_reader = new BinaryReader(_inputStream);
}
}
return _reader;
}
}
/// <summary>
/// Saves data and closes the dump
/// </summary>
/// <returns>true if succeed</returns>
internal bool SaveData()
{
if (m_bAllowSaveDump==false)
return true;
if(_writer != null)
{
if(_writer!=null)
_writer.Close();
_outputStream = null;
_writer = null;
}
if(_reader != null)
{
if(_reader!=null)
_reader.Close();
_inputStream = null;
_reader = null;
}
return true;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,593 +0,0 @@
using System;
using System.Collections;
using System.Text;
using System.Text.RegularExpressions;
namespace HtmlHelp.ChmDecoding
{
/// <summary>
/// The class <c>HHCParser</c> implements a parser for HHC contents files.
/// </summary>
internal sealed class HHCParser
{
/// <summary>
/// regular expressions for replacing the sitemap boundary tags
/// </summary>
private static string RE_ULOpening = @"\<ul\>"; // will be replaced by a '(' for nested parsing
private static string RE_ULClosing = @"\</ul\>"; // will be replaced by a ')' for nested parsing
/// <summary>
/// Matching ul-tags
/// </summary>
private static string RE_ULBoundaries = @"\<ul\>(?<innerText>.*)\</ul\>";
/// <summary>
/// Matching the nested tree structure.
/// </summary>
private static string RE_NestedBoundaries = @"\( (?> [^()]+ | \( (?<DEPTH>) | \) (?<-DEPTH>) )* (?(DEPTH)(?!)) \)";
/// <summary>
/// Matching object-tags
/// </summary>
private static string RE_ObjectBoundaries = @"\<object(?<innerText>.*?)\</object\>";
/// <summary>
/// Matching param tags
/// </summary>
private static string RE_ParamBoundaries = @"\<param(?<innerText>.*?)\>";
/// <summary>
/// Extracting tag attributes
/// </summary>
private const string RE_QuoteAttributes = @"( |\t)*(?<attributeName>[\-a-zA-Z0-9]*)( |\t)*=( |\t)*(?<attributeTD>[\""\'])?(?<attributeValue>.*?(?(attributeTD)\k<attributeTD>|([\s>]|.$)))";
/// <summary>
/// private regular expressionobjects
/// </summary>
private static Regex ulRE;
private static Regex NestedRE;
private static Regex ObjectRE;
private static Regex ParamRE;
private static Regex AttributesRE;
/// <summary>
/// Internal member storing the list of TOCItems which are holding merge links
/// </summary>
private static ArrayList _mergeItems = null;
/// <summary>
/// Internal member storing the last read regular topic item.
/// This is used to handle "Merge" entries and add them as child to this instance.
/// </summary>
private static TOCItem _lastTopicItem = null;
/// <summary>
/// Parses a HHC file and returns an ArrayList with the table of contents (TOC) tree
/// </summary>
/// <param name="hhcFile">string content of the hhc file</param>
/// <param name="chmFile">CHMFile instance</param>
/// <returns>Returns an ArrayList with the table of contents (TOC) tree</returns>
public static ArrayList ParseHHC(string hhcFile, CHMFile chmFile)
{
_lastTopicItem = null;
_mergeItems = null; // clear merged item list
ArrayList tocList = new ArrayList();
ulRE = new Regex(RE_ULBoundaries, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
NestedRE = new Regex(RE_NestedBoundaries, RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
ObjectRE = new Regex(RE_ObjectBoundaries, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
ParamRE = new Regex(RE_ParamBoundaries, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
AttributesRE = new Regex(RE_QuoteAttributes, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
int innerTextIdx = ulRE.GroupNumberFromName("innerText");
if( ulRE.IsMatch(hhcFile, 0) )
{
Match m = ulRE.Match(hhcFile, 0);
int nFirstUL = 0;
nFirstUL = hhcFile.ToLower().IndexOf("<ul>");
if(nFirstUL == -1)
nFirstUL = hhcFile.ToLower().IndexOf("<il>");
if( ObjectRE.IsMatch(hhcFile, 0) ) // first object block contains information types and categories
{
Match mO = ObjectRE.Match(hhcFile, 0);
int iOTxt = ObjectRE.GroupNumberFromName("innerText");
string globalText = mO.Groups[iOTxt].Value;
if( mO.Groups[iOTxt].Index <= nFirstUL)
ParseGlobalSettings( globalText, chmFile );
}
// parse toc tree
string innerText = m.Groups["innerText"].Value;
innerText = innerText.Replace("(", "&#040;");
innerText = innerText.Replace(")", "&#041;");
innerText = Regex.Replace(innerText, RE_ULOpening, "(", RegexOptions.IgnoreCase);
innerText = Regex.Replace(innerText, RE_ULClosing, ")", RegexOptions.IgnoreCase);
ParseTree( innerText, null, tocList, chmFile );
}
return tocList;
}
/// <summary>
/// Checks if the hhc file contains a global object tag.
/// </summary>
/// <param name="hhcFile">string content of the hhc file</param>
/// <param name="chmFile">chm file</param>
/// <returns>true if the hhc content contains a global object tag</returns>
public static bool HasGlobalObjectTag(string hhcFile, CHMFile chmFile)
{
bool bRet = false;
ulRE = new Regex(RE_ULBoundaries, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
ObjectRE = new Regex(RE_ObjectBoundaries, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
int innerTextIdx = ulRE.GroupNumberFromName("innerText");
if( ulRE.IsMatch(hhcFile, 0) )
{
Match m = ulRE.Match(hhcFile, 0);
int nFirstUL = 0;
nFirstUL = hhcFile.ToLower().IndexOf("<ul>");
if(nFirstUL == -1)
nFirstUL = hhcFile.ToLower().IndexOf("<il>");
if( ObjectRE.IsMatch(hhcFile, 0) ) // first object block contains information types and categories
{
Match mO = ObjectRE.Match(hhcFile, 0);
int iOTxt = ObjectRE.GroupNumberFromName("innerText");
string globalText = mO.Groups[iOTxt].Value;
if( mO.Groups[iOTxt].Index <= nFirstUL)
bRet = true;
}
}
return bRet;
}
/// <summary>
/// Gets true if the previously done parsing found merge-links
/// </summary>
public static bool HasMergeLinks
{
get
{
if(_mergeItems==null)
return false;
return _mergeItems.Count > 0;
}
}
/// <summary>
/// Gets all TOCItem references which are holding merge-links
/// </summary>
public static ArrayList MergeItems
{
get { return _mergeItems; }
}
/// <summary>
/// Recursively parses a sitemap tree
/// </summary>
/// <param name="text">content text</param>
/// <param name="parent">Parent for all read items</param>
/// <param name="arrNodes">arraylist which receives the extracted nodes</param>
/// <param name="chmFile">CHMFile instance</param>
private static void ParseTree( string text, TOCItem parent, ArrayList arrNodes, CHMFile chmFile )
{
string strPreItems="", strPostItems="";
string innerText = "";
int nIndex = 0;
while( NestedRE.IsMatch(text, nIndex) )
{
Match m = NestedRE.Match(text, nIndex);
innerText = m.Value.Substring( 1, m.Length-2);
strPreItems = text.Substring(nIndex,m.Index-nIndex);
ParseItems(strPreItems, parent, arrNodes, chmFile);
if((arrNodes.Count>0) && (innerText.Length > 0) )
{
TOCItem p = ((TOCItem)(arrNodes[arrNodes.Count-1]));
ParseTree( innerText, p, p.Children, chmFile );
}
nIndex = m.Index+m.Length;
}
if( nIndex == 0)
{
strPostItems = text.Substring(nIndex, text.Length-nIndex);
ParseItems(strPostItems, parent, arrNodes, chmFile);
}
else if( nIndex < text.Length-1)
{
strPostItems = text.Substring(nIndex, text.Length-nIndex);
ParseTree(strPostItems, parent, arrNodes, chmFile);
}
}
/// <summary>
/// Parses tree nodes from the text
/// </summary>
/// <param name="itemstext">text containing the items</param>
/// <param name="parent">Parent for all read items</param>
/// <param name="arrNodes">arraylist where the nodes should be added</param>
/// <param name="chmFile">CHMFile instance</param>
private static void ParseItems( string itemstext, TOCItem parent, ArrayList arrNodes, CHMFile chmFile)
{
int innerTextIdx = ObjectRE.GroupNumberFromName("innerText");
int innerPTextIdx = ParamRE.GroupNumberFromName("innerText");
// get group-name indexes
int nameIndex = AttributesRE.GroupNumberFromName("attributeName");
int valueIndex = AttributesRE.GroupNumberFromName("attributeValue");
int tdIndex = AttributesRE.GroupNumberFromName("attributeTD");
int nObjStartIndex = 0;
while( ObjectRE.IsMatch(itemstext, nObjStartIndex) )
{
Match m = ObjectRE.Match(itemstext, nObjStartIndex);
string innerText = m.Groups[innerTextIdx].Value;
TOCItem tocItem = new TOCItem();
tocItem.TocMode = DataMode.TextBased;
tocItem.AssociatedFile = chmFile;
tocItem.Parent = parent;
// read parameters
int nParamIndex = 0;
while( ParamRE.IsMatch(innerText, nParamIndex) )
{
Match mP = ParamRE.Match(innerText, nParamIndex);
string innerP = mP.Groups[innerPTextIdx].Value;
string paramName = "";
string paramValue = "";
int nAttrIdx = 0;
while( AttributesRE.IsMatch( innerP, nAttrIdx ) )
{
Match mA = AttributesRE.Match(innerP, nAttrIdx);
string attributeName = mA.Groups[nameIndex].Value;
string attributeValue = mA.Groups[valueIndex].Value;
string attributeTD = mA.Groups[tdIndex].Value;
if(attributeTD.Length > 0)
{
// delete the trailing textqualifier
if( attributeValue.Length > 0)
{
int ltqi = attributeValue.LastIndexOf( attributeTD );
if(ltqi >= 0)
{
attributeValue = attributeValue.Substring(0,ltqi);
}
}
}
if( attributeName.ToLower() == "name")
{
paramName = HttpUtility.HtmlDecode(attributeValue); // for unicode encoded values
}
if( attributeName.ToLower() == "value")
{
paramValue = HttpUtility.HtmlDecode(attributeValue); // for unicode encoded values
// delete trailing /
while((paramValue.Length>0)&&(paramValue[paramValue.Length-1] == '/'))
paramValue = paramValue.Substring(0,paramValue.Length-1);
}
nAttrIdx = mA.Index+mA.Length;
}
tocItem.Params[paramName] = paramValue;
switch(paramName.ToLower())
{
case "name":
{
tocItem.Name = paramValue;
};break;
case "local":
{
tocItem.Local = paramValue.Replace("../", "").Replace("./", "");
};break;
case "imagenumber":
{
tocItem.ImageIndex = Int32.Parse(paramValue);
tocItem.ImageIndex-=1;
int nFolderAdd = 0;
if((chmFile != null) && (chmFile.ImageTypeFolder))
{
// get the value which should be added, to display folders instead of books
if(HtmlHelpSystem.UseHH2TreePics)
nFolderAdd = 8;
else
nFolderAdd = 4;
}
if(tocItem.ImageIndex%2 != 0)
{
if(tocItem.ImageIndex==1)
tocItem.ImageIndex=0;
}
if(HtmlHelpSystem.UseHH2TreePics)
if( tocItem.ImageIndex == 0)
tocItem.ImageIndex = TOCItem.STD_FOLDER_HH2+nFolderAdd;
};break;
case "merge": // this item contains topics or a full TOC from a merged CHM
{
tocItem.MergeLink = paramValue;
// "register" this item as merge-link
if(_mergeItems==null)
_mergeItems=new ArrayList();
_mergeItems.Add(tocItem);
};break;
case "type": // information type assignment for item
{
tocItem.InfoTypeStrings.Add( paramValue );
};break;
}
nParamIndex = mP.Index+mP.Length;
}
tocItem.ChmFile = chmFile.ChmFilePath;
if(tocItem.MergeLink.Length > 0)
{
if(_lastTopicItem != null)
{
tocItem.Parent = _lastTopicItem;
_lastTopicItem.Children.Add(tocItem);
}
else
arrNodes.Add( tocItem );
}
else
{
_lastTopicItem = tocItem;
arrNodes.Add( tocItem );
}
nObjStartIndex = m.Index+m.Length;
}
}
/// <summary>
/// Parses the very first &lt;OBJECT&gt; tag in the sitemap file and extracts
/// information types and categories.
/// </summary>
/// <param name="sText">text of the object tag</param>
/// <param name="chmFile">CHMFile instance</param>
private static void ParseGlobalSettings(string sText, CHMFile chmFile)
{
int innerPTextIdx = ParamRE.GroupNumberFromName("innerText");
// get group-name indexes
int nameIndex = AttributesRE.GroupNumberFromName("attributeName");
int valueIndex = AttributesRE.GroupNumberFromName("attributeValue");
int tdIndex = AttributesRE.GroupNumberFromName("attributeTD");
// read parameters
int nParamIndex = 0;
// 0... unknown
// 1... inclusinve info type name
// 2... exclusive info type name
// 3... hidden info type name
// 4... category name
// 5... incl infotype name for category
// 6... excl infotype name for category
// 7... hidden infotype name for category
int prevItem = 0;
string sName = "";
string sDescription = "";
string curCategory = "";
while( ParamRE.IsMatch(sText, nParamIndex) )
{
Match mP = ParamRE.Match(sText, nParamIndex);
string innerP = mP.Groups[innerPTextIdx].Value;
string paramName = "";
string paramValue = "";
int nAttrIdx = 0;
while( AttributesRE.IsMatch( innerP, nAttrIdx ) )
{
Match mA = AttributesRE.Match(innerP, nAttrIdx);
string attributeName = mA.Groups[nameIndex].Value;
string attributeValue = mA.Groups[valueIndex].Value;
string attributeTD = mA.Groups[tdIndex].Value;
if(attributeTD.Length > 0)
{
// delete the trailing textqualifier
if( attributeValue.Length > 0)
{
int ltqi = attributeValue.LastIndexOf( attributeTD );
if(ltqi >= 0)
{
attributeValue = attributeValue.Substring(0,ltqi);
}
}
}
if( attributeName.ToLower() == "name")
{
paramName = HttpUtility.HtmlDecode(attributeValue); // for unicode encoded values
}
if( attributeName.ToLower() == "value")
{
paramValue = HttpUtility.HtmlDecode(attributeValue); // for unicode encoded values
// delete trailing /
while((paramValue.Length>0)&&(paramValue[paramValue.Length-1] == '/'))
paramValue = paramValue.Substring(0,paramValue.Length-1);
}
nAttrIdx = mA.Index+mA.Length;
}
switch(paramName.ToLower())
{
case "savetype": // inclusive information type name
{
prevItem = 1;
sName = paramValue;
};break;
case "savetypedesc": // description of information type
{
InformationTypeMode mode = InformationTypeMode.Inclusive;
sDescription = paramValue;
if( prevItem == 1)
mode = InformationTypeMode.Inclusive;
if( prevItem == 2)
mode = InformationTypeMode.Exclusive;
if( prevItem == 3)
mode = InformationTypeMode.Hidden;
if( chmFile.GetInformationType( sName ) == null)
{
// check if the HtmlHelpSystem already holds such an information type
if( chmFile.SystemInstance.GetInformationType( sName ) == null)
{
// info type not found yet
InformationType newType = new InformationType(sName, sDescription, mode);
chmFile.InformationTypes.Add(newType);
}
else
{
InformationType sysType = chmFile.SystemInstance.GetInformationType( sName );
chmFile.InformationTypes.Add( sysType );
}
}
prevItem = 0;
};break;
case "saveexclusive": // exclusive information type name
{
prevItem = 2;
sName = paramValue;
};break;
case "savehidden": // hidden information type name
{
prevItem = 3;
sName = paramValue;
};break;
case "category": // category name
{
prevItem = 4;
sName = paramValue;
curCategory = sName;
};break;
case "categorydesc": // category description
{
sDescription = paramValue;
if( chmFile.GetCategory( sName ) == null)
{
// check if the HtmlHelpSystem already holds such a category
if( chmFile.SystemInstance.GetCategory( sName ) == null)
{
// add category
Category newCat = new Category(sName, sDescription);
chmFile.Categories.Add(newCat);
}
else
{
Category sysCat = chmFile.SystemInstance.GetCategory( sName );
chmFile.Categories.Add( sysCat );
}
}
prevItem = 0;
};break;
case "type": // inclusive information type which is member of the previously read category
{
prevItem = 5;
sName = paramValue;
};break;
case "typedesc": // description of type for category
{
sDescription = paramValue;
Category cat = chmFile.GetCategory( curCategory );
if( cat != null)
{
// category found
InformationType infoType = chmFile.GetInformationType( sName );
if( infoType != null)
{
if( !cat.ContainsInformationType(infoType))
{
infoType.SetCategoryFlag(true);
cat.AddInformationType(infoType);
}
}
}
prevItem = 0;
};break;
case "typeexclusive": // exclusive information type which is member of the previously read category
{
prevItem = 6;
sName = paramValue;
};break;
case "typehidden": // hidden information type which is member of the previously read category
{
prevItem = 7;
sName = paramValue;
};break;
default:
{
prevItem = 0;
sName = "";
sDescription = "";
};break;
}
nParamIndex = mP.Index+mP.Length;
}
}
}
}

View File

@@ -1,220 +0,0 @@
using System;
using System.Collections;
using System.Text;
using System.Text.RegularExpressions;
namespace HtmlHelp.ChmDecoding
{
/// <summary>
/// The class <c>HHCParser</c> implements a parser for HHC contents files.
/// </summary>
// internal sealed class HHCParser : IHHCParser
public class HHCParser2
{
static private string m_text1="";
static private string m_text2="";
static private int m_CurrentPos=0;
/// <summary>
/// Parses a HHC file and returns an ArrayList with the table of contents (TOC) tree
/// </summary>
/// <param name="hhcFile">string content of the hhc file</param>
/// <param name="chmFile">CHMFile instance</param>
/// <returns>Returns an ArrayList with the table of contents (TOC) tree</returns>
public static ArrayList ParseHHC(string hhcFile, CHMFile chmFile)
{
DateTime StartTime=DateTime.Now;
ArrayList tocList = new ArrayList();
m_text2=hhcFile;
m_text1=hhcFile.ToLower();
int idx=m_text1.IndexOf("<ul>");
if (idx==-1)
return null;
m_CurrentPos=idx+4;
ParamRE = new Regex(RE_ParamBoundaries, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
AttributesRE = new Regex(RE_QuoteAttributes, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
ParseTree(tocList,chmFile);
DateTime EndTime=DateTime.Now;
TimeSpan Diff=EndTime-StartTime;
string x=Diff.ToString();
return tocList;
}
/// <summary>
/// Recursively parses a sitemap tree
/// </summary>
/// <param name="text">content text</param>
/// <param name="arrNodes">arraylist which receives the extracted nodes</param>
/// <param name="chmFile">CHMFile instance</param>
static private void ParseTree( ArrayList arrNodes, CHMFile chmFile )
{
bool bProcessing=true;
do
{
bProcessing=false;
// Indent
int idxa=m_text1.IndexOf("<ul>",m_CurrentPos);
int idxb=m_text1.IndexOf("<li>",m_CurrentPos);
int idxc=m_text1.IndexOf("</ul>",m_CurrentPos);
if ((idxa<idxb) && (idxa<idxc) && (idxa>-1))
{
bProcessing=true;
m_CurrentPos=idxa+4;
if (arrNodes.Count<1)
{
ParseTree(arrNodes,chmFile);
}
else
{
ParseTree(((TOCItem)(arrNodes[arrNodes.Count-1])).Children,chmFile);
}
continue;
}
// new item
if ((idxb<idxa) && (idxb<idxc) && (idxb>-1))
{
bProcessing=true;
m_CurrentPos=idxb+4;
int idx2=m_text1.IndexOf("<object",m_CurrentPos);
if (idx2!=-1)
{
int idx3=m_text1.IndexOf("</object>",idx2+7);
if (idx3!=-1)
{
string text=m_text2.Substring(idx2,idx3-idx2);
m_CurrentPos=idx3+9;
// Parse items in text.
TOCItem tocItem=ParseItems(text, chmFile);
if (tocItem!=null)
{
arrNodes.Add(tocItem);
}
}
}
}
// Undent
if ((idxc<idxa) && (idxc<idxb) && (idxc>-1))
{
m_CurrentPos=idxc+5;
bProcessing=true;
return;
}
}
while (bProcessing);
}
private static string RE_ParamBoundaries = @"\<param(?<innerText>.*?)\>";
private const string RE_QuoteAttributes = @"( |\t)*(?<attributeName>[\-a-zA-Z0-9]*)( |\t)*=( |\t)*(?<attributeTD>[\""\'])?(?<attributeValue>.*?(?(attributeTD)\k<attributeTD>|([\s>]|.$)))";
private static Regex ParamRE;
private static Regex AttributesRE;
/// <summary>
/// Parses tree nodes from the text
/// </summary>
/// <param name="itemstext">text containing the items</param>
/// <param name="arrNodes">arraylist where the nodes should be added</param>
/// <param name="chmFile">CHMFile instance</param>
private static TOCItem ParseItems( string itemstext, CHMFile chmFile)
{
int innerPTextIdx = ParamRE.GroupNumberFromName("innerText");
// get group-name indexes
int nameIndex = AttributesRE.GroupNumberFromName("attributeName");
int valueIndex = AttributesRE.GroupNumberFromName("attributeValue");
int tdIndex = AttributesRE.GroupNumberFromName("attributeTD");
TOCItem tocItem = new TOCItem();
// read parameters
int nParamIndex = 0;
while( ParamRE.IsMatch(itemstext, nParamIndex) )
{
Match mP = ParamRE.Match(itemstext, nParamIndex);
string innerP = mP.Groups[innerPTextIdx].Value;
string paramName = "";
string paramValue = "";
int nAttrIdx = 0;
while( AttributesRE.IsMatch( innerP, nAttrIdx ) )
{
Match mA = AttributesRE.Match(innerP, nAttrIdx);
string attributeName = mA.Groups[nameIndex].Value;
string attributeValue = mA.Groups[valueIndex].Value;
string attributeTD = mA.Groups[tdIndex].Value;
if(attributeTD.Length > 0)
{
// delete the trailing textqualifier
if( attributeValue.Length > 0)
{
int ltqi = attributeValue.LastIndexOf( attributeTD );
if(ltqi >= 0)
{
attributeValue = attributeValue.Substring(0,ltqi);
}
}
}
if( attributeName.ToLower() == "name")
{
paramName = attributeValue;
}
if( attributeName.ToLower() == "value")
{
paramValue = attributeValue;
}
nAttrIdx = mA.Index+mA.Length;
}
tocItem.Params[paramName] = paramValue;
switch(paramName.ToLower())
{
case "name":
{
tocItem.Name = paramValue;
};break;
case "local":
{
tocItem.Local = paramValue;
};break;
case "imagenumber":
{
tocItem.ImageIndex = Int32.Parse(paramValue);
if( tocItem.ImageIndex == 2)
tocItem.ImageIndex = TOCItem.STD_FOLDER_HH1;
};break;
}
nParamIndex = mP.Index+mP.Length;
}
tocItem.ChmFile = chmFile.ChmFilePath;
return tocItem;
}
}
}

View File

@@ -1,550 +0,0 @@
using System;
using System.IO;
using System.Collections;
using System.Text;
using System.Text.RegularExpressions;
namespace HtmlHelp.ChmDecoding
{
/// <summary>
/// The class <c>HHKParser</c> implements a parser for HHK contents files.
/// </summary>
internal sealed class HHKParser
{
/// <summary>
/// regular expressions for replacing the sitemap boundary tags
/// </summary>
private static string RE_ULOpening = @"\<ul\>"; // will be replaced by a '(' for nested parsing
private static string RE_ULClosing = @"\</ul\>"; // will be replaced by a ')' for nested parsing
/// <summary>
/// Matching ul-tags
/// </summary>
private static string RE_ULBoundaries = @"\<ul\>(?<innerText>.*)\</ul\>";
/// <summary>
/// Matching the nested tree structure.
/// </summary>
private static string RE_NestedBoundaries = @"\( (?> [^()]+ | \( (?<DEPTH>) | \) (?<-DEPTH>) )* (?(DEPTH)(?!)) \)";
/// <summary>
/// Matching object-tags
/// </summary>
private static string RE_ObjectBoundaries = @"\<object(?<innerText>.*?)\</object\>";
/// <summary>
/// Matching param tags
/// </summary>
private static string RE_ParamBoundaries = @"\<param(?<innerText>.*?)\>";
/// <summary>
/// Extracting tag attributes
/// </summary>
private const string RE_QuoteAttributes = @"( |\t)*(?<attributeName>[\-a-zA-Z0-9]*)( |\t)*=( |\t)*(?<attributeTD>[\""\'])?(?<attributeValue>.*?(?(attributeTD)\k<attributeTD>|([\s>]|.$)))";
/// <summary>
/// private regular expressionobjects
/// </summary>
private static Regex ulRE;
private static Regex NestedRE;
private static Regex ObjectRE;
private static Regex ParamRE;
private static Regex AttributesRE;
/// <summary>
/// Parses a HHK file and returns an ArrayList with the index tree
/// </summary>
/// <param name="hhkFile">string content of the hhk file</param>
/// <param name="chmFile">CHMFile instance</param>
/// <returns>Returns an ArrayList with the index tree</returns>
public static ArrayList ParseHHK(string hhkFile, CHMFile chmFile)
{
ArrayList indexList = new ArrayList();
ulRE = new Regex(RE_ULBoundaries, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
NestedRE = new Regex(RE_NestedBoundaries, RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
ObjectRE = new Regex(RE_ObjectBoundaries, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
ParamRE = new Regex(RE_ParamBoundaries, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
AttributesRE = new Regex(RE_QuoteAttributes, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
int innerTextIdx = ulRE.GroupNumberFromName("innerText");
if( ulRE.IsMatch(hhkFile, 0) )
{
Match m = ulRE.Match(hhkFile, 0);
if( ObjectRE.IsMatch(hhkFile, 0) ) // first object block contains information types and categories
{
Match mO = ObjectRE.Match(hhkFile, 0);
int iOTxt = ObjectRE.GroupNumberFromName("innerText");
string globalText = mO.Groups[iOTxt].Value;
ParseGlobalSettings( globalText, chmFile );
}
string innerText = m.Groups["innerText"].Value;
innerText = innerText.Replace("(", "&#040;");
innerText = innerText.Replace(")", "&#041;");
innerText = Regex.Replace(innerText, RE_ULOpening, "(", RegexOptions.IgnoreCase);
innerText = Regex.Replace(innerText, RE_ULClosing, ")", RegexOptions.IgnoreCase);
ParseTree( innerText, null, indexList, chmFile );
}
return indexList;
}
/// <summary>
/// Recursively parses a sitemap tree
/// </summary>
/// <param name="text">content text</param>
/// <param name="parent">Parent for all read items</param>
/// <param name="arrNodes">arraylist which receives the extracted nodes</param>
/// <param name="chmFile">CHMFile instance</param>
private static void ParseTree( string text, IndexItem parent, ArrayList arrNodes, CHMFile chmFile )
{
string strPreItems="", strPostItems="";
string innerText = "";
int nIndex = 0;
while( NestedRE.IsMatch(text, nIndex) )
{
Match m = NestedRE.Match(text, nIndex);
innerText = m.Value.Substring( 1, m.Length-2);
strPreItems = text.Substring(nIndex,m.Index-nIndex);
ParseItems(strPreItems, parent, arrNodes, chmFile);
if((arrNodes.Count>0) && (innerText.Length > 0) )
{
IndexItem p = ((IndexItem)(arrNodes[arrNodes.Count-1]));
ParseTree( innerText, p, arrNodes, chmFile );
}
nIndex = m.Index+m.Length;
}
if( nIndex == 0)
{
strPostItems = text.Substring(nIndex, text.Length-nIndex);
ParseItems(strPostItems, parent, arrNodes, chmFile);
}
else if( nIndex < text.Length-1)
{
strPostItems = text.Substring(nIndex, text.Length-nIndex);
ParseTree(strPostItems, parent, arrNodes, chmFile);
}
}
/// <summary>
/// Parses nodes from the text
/// </summary>
/// <param name="itemstext">text containing the items</param>
/// <param name="parentItem">parent index item</param>
/// <param name="arrNodes">arraylist where the nodes should be added</param>
/// <param name="chmFile">CHMFile instance</param>
private static void ParseItems( string itemstext, IndexItem parentItem, ArrayList arrNodes, CHMFile chmFile)
{
int innerTextIdx = ObjectRE.GroupNumberFromName("innerText");
int innerPTextIdx = ParamRE.GroupNumberFromName("innerText");
// get group-name indexes
int nameIndex = AttributesRE.GroupNumberFromName("attributeName");
int valueIndex = AttributesRE.GroupNumberFromName("attributeValue");
int tdIndex = AttributesRE.GroupNumberFromName("attributeTD");
int nObjStartIndex = 0;
int nLastObjStartIndex = 0;
string sKeyword = "";
while( ObjectRE.IsMatch(itemstext, nObjStartIndex) )
{
Match m = ObjectRE.Match(itemstext, nObjStartIndex);
string innerText = m.Groups[innerTextIdx].Value;
IndexItem idxItem = new IndexItem();
// read parameters
int nParamIndex = 0;
int nNameCnt = 0;
string paramTitle = "";
string paramLocal = "";
bool bAdded = false;
while( ParamRE.IsMatch(innerText, nParamIndex) )
{
Match mP = ParamRE.Match(innerText, nParamIndex);
string innerP = mP.Groups[innerPTextIdx].Value;
string paramName = "";
string paramValue = "";
int nAttrIdx = 0;
//sKeyword = "";
while( AttributesRE.IsMatch( innerP, nAttrIdx ) )
{
Match mA = AttributesRE.Match(innerP, nAttrIdx);
string attributeName = mA.Groups[nameIndex].Value;
string attributeValue = mA.Groups[valueIndex].Value;
string attributeTD = mA.Groups[tdIndex].Value;
if(attributeTD.Length > 0)
{
// delete the trailing textqualifier
if( attributeValue.Length > 0)
{
int ltqi = attributeValue.LastIndexOf( attributeTD );
if(ltqi >= 0)
{
attributeValue = attributeValue.Substring(0,ltqi);
}
}
}
if( attributeName.ToLower() == "name")
{
paramName = HttpUtility.HtmlDecode(attributeValue); // for unicode encoded values
nNameCnt++;
}
if( attributeName.ToLower() == "value")
{
paramValue = HttpUtility.HtmlDecode(attributeValue); // for unicode encoded values
// delete trailing /
while((paramValue.Length>0)&&(paramValue[paramValue.Length-1] == '/'))
paramValue = paramValue.Substring(0,paramValue.Length-1);
}
nAttrIdx = mA.Index+mA.Length;
}
if( nNameCnt == 1) // first "Name" param = keyword
{
sKeyword = "";
if(parentItem != null)
sKeyword = parentItem.KeyWordPath + ",";
string sOldKW = sKeyword;
sKeyword += paramValue;
IndexItem idxFind = FindByKeyword(arrNodes, sKeyword);
if(idxFind != null)
{
idxItem = idxFind;
}
else
{
if( sKeyword.Split(new char[] {','}).Length > 1 )
{
idxItem.CharIndex = sKeyword.Length - paramValue.Length;
}
else
{
sKeyword = paramValue;
sOldKW = sKeyword;
idxItem.CharIndex = 0;
}
idxItem.KeyWordPath = sKeyword;
idxItem.Indent = sKeyword.Split(new char[] {','}).Length - 1;
idxItem.IsSeeAlso = false;
sKeyword = sOldKW;
}
}
else
{
if( (nNameCnt > 2) && (paramName.ToLower()=="name") )
{
bAdded = true;
IndexTopic idxTopic = new IndexTopic(paramTitle, paramLocal, chmFile.CompileFile, chmFile.ChmFilePath);
idxItem.Topics.Add( idxTopic );
paramTitle = "";
paramLocal = "";
}
switch(paramName.ToLower())
{
case "name":
//case "keyword":
{
paramTitle = paramValue;
};break;
case "local":
{
paramLocal = paramValue.Replace("../", "").Replace("./", "");
};break;
case "type": // information type assignment for item
{
idxItem.InfoTypeStrings.Add( paramValue );
};break;
case "see also":
{
idxItem.AddSeeAlso(paramValue);
idxItem.IsSeeAlso = true;
bAdded = true;
};break;
}
}
nParamIndex = mP.Index+mP.Length;
}
if(!bAdded)
{
bAdded=false;
IndexTopic idxTopic = new IndexTopic(paramTitle, paramLocal, chmFile.CompileFile, chmFile.ChmFilePath);
idxItem.Topics.Add( idxTopic );
paramTitle = "";
paramLocal = "";
}
idxItem.ChmFile = chmFile;
arrNodes.Add( idxItem );
nLastObjStartIndex = nObjStartIndex;
nObjStartIndex = m.Index+m.Length;
}
}
/// <summary>
/// Searches an index-keyword in the index list
/// </summary>
/// <param name="indexList">index list to search</param>
/// <param name="Keyword">keyword to find</param>
/// <returns>Returns an <see cref="IndexItem">IndexItem</see> instance if found, otherwise null.</returns>
private static IndexItem FindByKeyword(ArrayList indexList, string Keyword)
{
foreach(IndexItem curItem in indexList)
{
if( curItem.KeyWordPath == Keyword)
return curItem;
}
return null;
}
/// <summary>
/// Parses the very first &lt;OBJECT&gt; tag in the sitemap file and extracts
/// information types and categories.
/// </summary>
/// <param name="sText">text of the object tag</param>
/// <param name="chmFile">CHMFile instance</param>
private static void ParseGlobalSettings(string sText, CHMFile chmFile)
{
int innerPTextIdx = ParamRE.GroupNumberFromName("innerText");
// get group-name indexes
int nameIndex = AttributesRE.GroupNumberFromName("attributeName");
int valueIndex = AttributesRE.GroupNumberFromName("attributeValue");
int tdIndex = AttributesRE.GroupNumberFromName("attributeTD");
// read parameters
int nParamIndex = 0;
// 0... unknown
// 1... inclusinve info type name
// 2... exclusive info type name
// 3... hidden info type name
// 4... category name
// 5... incl infotype name for category
// 6... excl infotype name for category
// 7... hidden infotype name for category
int prevItem = 0;
string sName = "";
string sDescription = "";
string curCategory = "";
while( ParamRE.IsMatch(sText, nParamIndex) )
{
Match mP = ParamRE.Match(sText, nParamIndex);
string innerP = mP.Groups[innerPTextIdx].Value;
string paramName = "";
string paramValue = "";
int nAttrIdx = 0;
while( AttributesRE.IsMatch( innerP, nAttrIdx ) )
{
Match mA = AttributesRE.Match(innerP, nAttrIdx);
string attributeName = mA.Groups[nameIndex].Value;
string attributeValue = mA.Groups[valueIndex].Value;
string attributeTD = mA.Groups[tdIndex].Value;
if(attributeTD.Length > 0)
{
// delete the trailing textqualifier
if( attributeValue.Length > 0)
{
int ltqi = attributeValue.LastIndexOf( attributeTD );
if(ltqi >= 0)
{
attributeValue = attributeValue.Substring(0,ltqi);
}
}
}
if( attributeName.ToLower() == "name")
{
paramName = HttpUtility.HtmlDecode(attributeValue); // for unicode encoded values
}
if( attributeName.ToLower() == "value")
{
paramValue = HttpUtility.HtmlDecode(attributeValue); // for unicode encoded values
// delete trailing /
while((paramValue.Length>0)&&(paramValue[paramValue.Length-1] == '/'))
paramValue = paramValue.Substring(0,paramValue.Length-1);
}
nAttrIdx = mA.Index+mA.Length;
}
switch(paramName.ToLower())
{
case "savetype": // inclusive information type name
{
prevItem = 1;
sName = paramValue;
};break;
case "savetypedesc": // description of information type
{
InformationTypeMode mode = InformationTypeMode.Inclusive;
sDescription = paramValue;
if( prevItem == 1)
mode = InformationTypeMode.Inclusive;
if( prevItem == 2)
mode = InformationTypeMode.Exclusive;
if( prevItem == 3)
mode = InformationTypeMode.Hidden;
if( chmFile.GetInformationType( sName ) == null)
{
// check if the HtmlHelpSystem already holds such an information type
if( chmFile.SystemInstance.GetInformationType( sName ) == null)
{
// info type not found yet
InformationType newType = new InformationType(sName, sDescription, mode);
chmFile.InformationTypes.Add(newType);
}
else
{
InformationType sysType = chmFile.SystemInstance.GetInformationType( sName );
chmFile.InformationTypes.Add( sysType );
}
}
prevItem = 0;
};break;
case "saveexclusive": // exclusive information type name
{
prevItem = 2;
sName = paramValue;
};break;
case "savehidden": // hidden information type name
{
prevItem = 3;
sName = paramValue;
};break;
case "category": // category name
{
prevItem = 4;
sName = paramValue;
curCategory = sName;
};break;
case "categorydesc": // category description
{
sDescription = paramValue;
if( chmFile.GetCategory( sName ) == null)
{
// check if the HtmlHelpSystem already holds such a category
if( chmFile.SystemInstance.GetCategory( sName ) == null)
{
// add category
Category newCat = new Category(sName, sDescription);
chmFile.Categories.Add(newCat);
}
else
{
Category sysCat = chmFile.SystemInstance.GetCategory( sName );
chmFile.Categories.Add( sysCat );
}
}
prevItem = 0;
};break;
case "type": // inclusive information type which is member of the previously read category
{
prevItem = 5;
sName = paramValue;
};break;
case "typedesc": // description of type for category
{
sDescription = paramValue;
Category cat = chmFile.GetCategory( curCategory );
if( cat != null)
{
// category found
InformationType infoType = chmFile.GetInformationType( sName );
if( infoType != null)
{
if( !cat.ContainsInformationType(infoType))
{
infoType.SetCategoryFlag(true);
cat.AddInformationType(infoType);
}
}
}
prevItem = 0;
};break;
case "typeexclusive": // exclusive information type which is member of the previously read category
{
prevItem = 6;
sName = paramValue;
};break;
case "typehidden": // hidden information type which is member of the previously read category
{
prevItem = 7;
sName = paramValue;
};break;
default:
{
prevItem = 0;
sName = "";
sDescription = "";
};break;
}
nParamIndex = mP.Index+mP.Length;
}
}
}
}

View File

@@ -1,245 +0,0 @@
using System;
using System.IO;
namespace HtmlHelp.ChmDecoding
{
/// <summary>
/// The class <c>TopicEntry</c> stores the data for one topic entry
/// </summary>
internal sealed class TopicEntry
{
/// <summary>
/// Internal member storing the offset of this topic entry
/// </summary>
private int _entryOffset = 0;
/// <summary>
/// Internal member storing the index of the binary toc
/// </summary>
private int _tocidxOffset = 0;
/// <summary>
/// Internal member storing the string offset of the title
/// </summary>
private int _titleOffset = 0;
/// <summary>
/// Internal member storuing the urltable offset
/// </summary>
private int _urltableOffset = 0;
/// <summary>
/// Internal member storing the visibility mode
/// </summary>
private int _visibilityMode = 0;
/// <summary>
/// Internal member storing an unknown mode
/// </summary>
private int _unknownMode = 0;
/// <summary>
/// Internal member storing the associated chmfile object
/// </summary>
private CHMFile _associatedFile = null;
/// <summary>
/// Constructor of the class
/// </summary>
/// <param name="entryOffset">offset of this entry</param>
/// <param name="tocidxOffset">offset in the binary toc index</param>
/// <param name="titleOffset">offset of the title (in the #STRINGS file)</param>
/// <param name="urltableOffset">offset in the urltable containing the urlstr offset for the url</param>
/// <param name="visibilityMode">visibility mode 2 indicates not in contents, 6 indicates that it is in the contents, 0/4 something else (unknown)</param>
/// <param name="unknownMode">0, 2, 4, 8, 10, 12, 16, 32 (unknown)</param>
public TopicEntry(int entryOffset, int tocidxOffset, int titleOffset, int urltableOffset, int visibilityMode, int unknownMode) :this(entryOffset, tocidxOffset, titleOffset, urltableOffset, visibilityMode, unknownMode, null)
{
}
/// <summary>
/// Constructor of the class
/// </summary>
/// <param name="entryOffset">offset of this entry</param>
/// <param name="tocidxOffset">offset in the binary toc index</param>
/// <param name="titleOffset">offset of the title (in the #STRINGS file)</param>
/// <param name="urltableOffset">offset in the urltable containing the urlstr offset for the url</param>
/// <param name="visibilityMode">visibility mode 2 indicates not in contents, 6 indicates that it is in the contents, 0/4 something else (unknown)</param>
/// <param name="unknownMode">0, 2, 4, 8, 10, 12, 16, 32 (unknown)</param>
/// <param name="associatedFile">associated chmfile object</param>
internal TopicEntry(int entryOffset, int tocidxOffset, int titleOffset, int urltableOffset, int visibilityMode, int unknownMode, CHMFile associatedFile)
{
_entryOffset = entryOffset;
_tocidxOffset = tocidxOffset;
_titleOffset = titleOffset;
_urltableOffset = urltableOffset;
_visibilityMode = visibilityMode;
_unknownMode = unknownMode;
_associatedFile = associatedFile;
}
/// <summary>
/// Standard constructor
/// </summary>
internal TopicEntry()
{
}
#region Data dumping
/// <summary>
/// Dump the class data to a binary writer
/// </summary>
/// <param name="writer">writer to write the data</param>
internal void Dump(ref BinaryWriter writer)
{
writer.Write( _entryOffset );
writer.Write( _tocidxOffset );
writer.Write( _titleOffset );
writer.Write( _urltableOffset );
writer.Write( _visibilityMode );
writer.Write( _unknownMode );
}
/// <summary>
/// Reads the object data from a dump store
/// </summary>
/// <param name="reader">reader to read the data</param>
internal void ReadDump(ref BinaryReader reader)
{
_entryOffset = reader.ReadInt32();
_tocidxOffset = reader.ReadInt32();
_titleOffset = reader.ReadInt32();
_urltableOffset = reader.ReadInt32();
_visibilityMode = reader.ReadInt32();
_unknownMode = reader.ReadInt32();
}
/// <summary>
/// Sets the associated CHMFile instance
/// </summary>
/// <param name="associatedFile">instance to set</param>
internal void SetCHMFile(CHMFile associatedFile)
{
_associatedFile = associatedFile;
}
#endregion
/// <summary>
/// Gets the associated chm file
/// </summary>
internal CHMFile ChmFile
{
get { return _associatedFile; }
}
/// <summary>
/// Gets the offset of this entry
/// </summary>
internal int EntryOffset
{
get { return _entryOffset; }
}
/// <summary>
/// Gets the tocidx offset
/// </summary>
internal int TOCIdxOffset
{
get { return _tocidxOffset; }
}
/// <summary>
/// Gets the title offset of the #STRINGS file
/// </summary>
internal int TitleOffset
{
get { return _titleOffset; }
}
/// <summary>
/// Gets the urltable offset
/// </summary>
internal int UrlTableOffset
{
get { return _urltableOffset; }
}
/// <summary>
/// Gets the title of the topic entry
/// </summary>
public string Title
{
get
{
if( _associatedFile == null)
return String.Empty;
if( _associatedFile.StringsFile == null)
return String.Empty;
string sTemp = (string)_associatedFile.StringsFile[ _titleOffset ];
if(sTemp == null)
return String.Empty;
return sTemp;
}
}
/// <summary>
/// Gets the url of the topic
/// </summary>
public string Locale
{
get
{
if( _associatedFile == null)
return String.Empty;
if( _associatedFile.UrltblFile == null)
return String.Empty;
UrlTableEntry utEntry = (UrlTableEntry)_associatedFile.UrltblFile[ _urltableOffset ];
if(utEntry == null)
return String.Empty;
if(utEntry.URL == "")
return String.Empty;
return utEntry.URL;
}
}
/// <summary>
/// Gets the URL of this topic
/// </summary>
public string URL
{
get
{
if(Locale.Length <= 0)
return "about:blank";
if( (Locale.ToLower().IndexOf("http://") >= 0) ||
(Locale.ToLower().IndexOf("https://") >= 0) ||
(Locale.ToLower().IndexOf("mailto:") >= 0) ||
(Locale.ToLower().IndexOf("ftp://") >= 0) ||
(Locale.ToLower().IndexOf("ms-its:") >= 0))
return Locale;
return HtmlHelpSystem.UrlPrefix + _associatedFile.ChmFilePath + "::/" + Locale;
}
}
/// <summary>
/// Gets the visibility mode
/// </summary>
public int VisibilityMode
{
get { return _visibilityMode; }
}
/// <summary>
/// Gets the unknown mode
/// </summary>
public int UknownMode
{
get { return _unknownMode; }
}
}
}

View File

@@ -1,175 +0,0 @@
using System;
using System.IO;
namespace HtmlHelp.ChmDecoding
{
/// <summary>
/// The class <c>UrlTableEntry</c> stores data for an URL-Table entry
/// </summary>
internal sealed class UrlTableEntry
{
/// <summary>
/// Internal member storing the offset of this entry
/// </summary>
private int _entryOffset = 0;
/// <summary>
/// Internal member storing a unique id
/// </summary>
private uint _uniqueID = 0;
/// <summary>
/// Internal member storing the topics index
/// </summary>
private int _topicsIndex = 0;
/// <summary>
/// Internal member storing the offset in the urlstr table
/// </summary>
private int _urlStrOffset = 0;
/// <summary>
/// Internal member storing the associated chmfile object
/// </summary>
private CHMFile _associatedFile = null;
/// <summary>
/// Constructor of the class
/// </summary>
/// <param name="uniqueID">unique id</param>
/// <param name="entryOffset">offset of the entry</param>
/// <param name="topicIndex">topic index</param>
/// <param name="urlstrOffset">urlstr offset for filename</param>
public UrlTableEntry(uint uniqueID, int entryOffset, int topicIndex, int urlstrOffset) : this(uniqueID, entryOffset, topicIndex, urlstrOffset, null)
{
}
/// <summary>
/// Constructor of the class
/// </summary>
/// <param name="uniqueID">unique id</param>
/// <param name="entryOffset">offset of the entry</param>
/// <param name="topicIndex">topic index</param>
/// <param name="urlstrOffset">urlstr offset for filename</param>
/// <param name="associatedFile">associated chm file</param>
internal UrlTableEntry(uint uniqueID, int entryOffset, int topicIndex, int urlstrOffset, CHMFile associatedFile)
{
_uniqueID = uniqueID;
_entryOffset = entryOffset;
_topicsIndex = topicIndex;
_urlStrOffset = urlstrOffset;
_associatedFile = associatedFile;
}
/// <summary>
/// Standard constructor
/// </summary>
internal UrlTableEntry()
{
}
#region Data dumping
/// <summary>
/// Dump the class data to a binary writer
/// </summary>
/// <param name="writer">writer to write the data</param>
internal void Dump(ref BinaryWriter writer)
{
writer.Write( _urlStrOffset );
writer.Write( _entryOffset );
writer.Write( _topicsIndex );
writer.Write( _urlStrOffset );
}
/// <summary>
/// Reads the object data from a dump store
/// </summary>
/// <param name="reader">reader to read the data</param>
internal void ReadDump(ref BinaryReader reader)
{
_urlStrOffset = reader.ReadInt32();
_entryOffset = reader.ReadInt32();
_topicsIndex = reader.ReadInt32();
_urlStrOffset = reader.ReadInt32();
}
/// <summary>
/// Sets the associated CHMFile instance
/// </summary>
/// <param name="associatedFile">instance to set</param>
internal void SetCHMFile(CHMFile associatedFile)
{
_associatedFile = associatedFile;
}
#endregion
/// <summary>
/// Gets the unique id of the entry
/// </summary>
internal uint UniqueID
{
get {return _uniqueID; }
}
/// <summary>
/// Gets the offset of the entry
/// </summary>
internal int EntryOffset
{
get {return _entryOffset; }
}
/// <summary>
/// Gets the topics index
/// </summary>
internal int TopicIndex
{
get {return _topicsIndex; }
}
/// <summary>
/// Gets the urlstr offset
/// </summary>
internal int UrlstrOffset
{
get { return _urlStrOffset; }
}
/// <summary>
/// Gets the url of the entry
/// </summary>
public string URL
{
get
{
if(_associatedFile == null)
return String.Empty;
if(_associatedFile.UrlstrFile == null)
return String.Empty;
string sTemp = (string)_associatedFile.UrlstrFile.GetURLatOffset( _urlStrOffset );
if( sTemp == null)
return String.Empty;
return sTemp;
}
}
/// <summary>
/// Gets the associated topic for this url entry
/// </summary>
internal TopicEntry Topic
{
get
{
if(_associatedFile == null)
return null;
if(_associatedFile.TopicsFile == null)
return null;
TopicEntry tentry = _associatedFile.TopicsFile[ _topicsIndex*16 ];
return tentry;
}
}
}
}

View File

@@ -1,19 +0,0 @@
using System;
namespace HtmlHelp.ChmDecoding
{
/// <summary>
/// Enumeration for specifying the extraction mode of an toc or index item.
/// </summary>
public enum DataMode
{
/// <summary>
/// TextBased - this item comes from a text-based sitemap file
/// </summary>
TextBased = 0,
/// <summary>
/// Binary - this item was extracted out of a binary stream
/// </summary>
Binary = 1
}
}

View File

@@ -1,16 +0,0 @@
<Combine fileversion="1.0" name="CHMLibrary" description="">
<StartMode startupentry="CHMLibrary" single="True">
<Execute entry="CHMLibrary" type="None" />
</StartMode>
<Entries>
<Entry filename=".\.\CHMLibrary.prjx" />
</Entries>
<Configurations active="Debug">
<Configuration name="Release">
<Entry name="CHMLibrary" configurationname="Debug" build="False" />
</Configuration>
<Configuration name="Debug">
<Entry name="CHMLibrary" configurationname="Debug" build="False" />
</Configuration>
</Configurations>
</Combine>

View File

@@ -1,58 +0,0 @@
<Project name="CHMLibrary" standardNamespace="CHMLibrary" description="" newfilesearch="None" enableviewstate="True" version="1.1" projecttype="C#">
<Contents>
<File name=".\AssemblyInfo.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\Category.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\ChmFileInfo.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\Default.build" subtype="Code" buildaction="Nothing" dependson="" data="" />
<File name=".\HtmlHelpSystem.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\HttpUtility.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\Index.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\IndexItem.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\IndexTopic.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\InformationType.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\TableOfContents.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\TOCItem.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\Storage" subtype="Directory" buildaction="Compile" dependson="" data="" />
<File name=".\Storage\CHMStream.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\CHMDecoding" subtype="Directory" buildaction="Compile" dependson="" data="" />
<File name=".\CHMDecoding\BinaryReaderHelp.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\CHMDecoding\CHMBtree.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\CHMDecoding\CHMFile.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\CHMDecoding\CHMIdxhdr.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\CHMDecoding\CHMStrings.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\CHMDecoding\CHMSystem.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\CHMDecoding\CHMTocidx.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\CHMDecoding\CHMTopics.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\CHMDecoding\CHMUrlstr.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\CHMDecoding\CHMUrltable.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\CHMDecoding\DumpingInfo.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\CHMDecoding\enumerations.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\CHMDecoding\FullTextEngine.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\CHMDecoding\HHCParser2.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\CHMDecoding\HHCParser.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\CHMDecoding\HHKParser.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\CHMDecoding\TopicEntry.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
<File name=".\CHMDecoding\UrlTableEntry.cs" subtype="Code" buildaction="Compile" dependson="" data="" />
</Contents>
<References>
<Reference type="Project" refto="Compression" localcopy="True" />
</References>
<DeploymentInformation target="" script="" strategy="File" />
<Configuration runwithwarnings="True" name="Debug">
<CodeGeneration runtime="MsNet" compiler="Csc" compilerversion="" warninglevel="4" nowarn="" includedebuginformation="True" optimize="False" unsafecodeallowed="False" generateoverflowchecks="True" mainclass="" target="Library" definesymbols="" generatexmldocumentation="False" win32Icon="" noconfig="False" nostdlib="False" />
<Execution commandlineparameters="" consolepause="False" />
<Output directory="..\bin\Debug" assembly="CHMLibrary" executeScript="" executeBeforeBuild="" executeAfterBuild="" executeBeforeBuildArguments="" executeAfterBuildArguments="" />
</Configuration>
<Configurations active="Debug">
<Configuration runwithwarnings="True" name="Debug">
<CodeGeneration runtime="MsNet" compiler="Csc" compilerversion="" warninglevel="4" nowarn="" includedebuginformation="True" optimize="False" unsafecodeallowed="False" generateoverflowchecks="True" mainclass="" target="Library" definesymbols="" generatexmldocumentation="False" win32Icon="" noconfig="False" nostdlib="False" />
<Execution commandlineparameters="" consolepause="False" />
<Output directory="..\bin\Debug" assembly="CHMLibrary" executeScript="" executeBeforeBuild="" executeAfterBuild="" executeBeforeBuildArguments="" executeAfterBuildArguments="" />
</Configuration>
<Configuration runwithwarnings="True" name="Release">
<CodeGeneration runtime="MsNet" compiler="Csc" compilerversion="" warninglevel="4" nowarn="" includedebuginformation="False" optimize="True" unsafecodeallowed="False" generateoverflowchecks="False" mainclass="" target="Library" definesymbols="" generatexmldocumentation="False" win32Icon="" noconfig="False" nostdlib="False" />
<Execution commandlineparameters="" consolepause="False" />
<Output directory="..\bin\Release" assembly="CHMLibrary" executeScript="" executeBeforeBuild="" executeAfterBuild="" executeBeforeBuildArguments="" executeAfterBuildArguments="" />
</Configuration>
</Configurations>
</Project>

View File

@@ -1,201 +0,0 @@
using System;
using System.Collections;
using System.IO;
using HtmlHelp.ChmDecoding;
namespace HtmlHelp
{
/// <summary>
/// The class <c>Category</c> implements methods/properties for handling an information category
/// </summary>
/// <remarks>Note: Information types and categories allow users to filter help contents.
/// They are only supported if using sitemap TOC and/or sitemap Index.</remarks>
public class Category
{
private string _name = "";
private string _description = "";
private ArrayList _infoTypes = null;
private int _referenceCount = 1;
/// <summary>
/// Standard constructor
/// </summary>
public Category() : this("","")
{
}
/// <summary>
/// Standard constructor
/// </summary>
/// <param name="name">name of the category</param>
/// <param name="description">description</param>
public Category(string name, string description) : this(name, description, new ArrayList())
{
}
/// <summary>
/// Standard constructor
/// </summary>
/// <param name="name">name of the category</param>
/// <param name="description">description</param>
/// <param name="linkedInformationTypes">Arraylist of InformationType instances which applies to this category</param>
public Category(string name, string description, ArrayList linkedInformationTypes)
{
_name = name;
_description = description;
_infoTypes = linkedInformationTypes;
}
#region Data dumping
/// <summary>
/// Dump the class data to a binary writer
/// </summary>
/// <param name="writer">writer to write the data</param>
internal void Dump(ref BinaryWriter writer)
{
writer.Write( _name );
writer.Write( _description );
writer.Write( _infoTypes.Count );
for(int i=0; i<_infoTypes.Count;i++)
{
InformationType curType = _infoTypes[i] as InformationType;
writer.Write( curType.Name );
}
}
/// <summary>
/// Reads the object data from a dump store
/// </summary>
/// <param name="reader">reader to read the data</param>
/// <param name="chmFile">current CHMFile instance which reads from dump</param>
internal void ReadDump(ref BinaryReader reader, CHMFile chmFile)
{
_name = reader.ReadString();
_description = reader.ReadString();
int nCnt = reader.ReadInt32();
for(int i=0; i<nCnt; i++)
{
string sITName = reader.ReadString();
InformationType linkedType = chmFile.GetInformationType( sITName );
if(linkedType != null)
{
linkedType.SetCategoryFlag(true);
_infoTypes.Add(linkedType);
}
}
}
#endregion
/// <summary>
/// Merges the lineked information types from cat into this instance
/// </summary>
/// <param name="cat">category instance</param>
internal void MergeInfoTypes(Category cat)
{
if(cat!=null)
{
if(cat.InformationTypes.Count > 0)
{
for(int i=0;i<cat.InformationTypes.Count;i++)
{
InformationType curType = cat.InformationTypes[i] as InformationType;
if(!ContainsInformationType(curType.Name))
{
curType.SetCategoryFlag(true);
_infoTypes.Add(curType);
}
}
}
}
}
/// <summary>
/// Gets/Sets the reference count of this information type instance
/// </summary>
internal int ReferenceCount
{
get { return _referenceCount; }
set { _referenceCount = value; }
}
/// <summary>
/// Gets/Sets the name of the information type
/// </summary>
public string Name
{
get { return _name; }
set { _name = value; }
}
/// <summary>
/// Gets/Sets the description of the information type
/// </summary>
public string Description
{
get { return _description; }
set { _name = value; }
}
/// <summary>
/// Gets an ArrayList with the linked Information types
/// </summary>
public ArrayList InformationTypes
{
get { return _infoTypes; }
}
/// <summary>
/// Adds a new information type to the category
/// </summary>
/// <param name="type"></param>
public void AddInformationType(InformationType type)
{
_infoTypes.Add(type);
}
/// <summary>
/// Removes an information type from the category
/// </summary>
/// <param name="type"></param>
public void RemoveInformationType(InformationType type)
{
_infoTypes.Remove(type);
}
/// <summary>
/// Checks if the category contains an information type
/// </summary>
/// <param name="type">information type instance to check</param>
/// <returns>Return true if the information type is part of this category</returns>
public bool ContainsInformationType(InformationType type)
{
return _infoTypes.Contains(type);
}
/// <summary>
/// Checks if the category contains an information type
/// </summary>
/// <param name="name">name of the information type</param>
/// <returns>Return true if the information type is part of this category</returns>
public bool ContainsInformationType(string name)
{
for(int i=0;i<_infoTypes.Count;i++)
{
InformationType curType = _infoTypes[i] as InformationType;
if(curType.Name == name)
return true;
}
return false;
}
}
}

View File

@@ -1,478 +0,0 @@
using System;
using System.Collections;
using System.Text;
using System.IO;
using System.Globalization;
using System.Diagnostics;
using System.ComponentModel;
using HtmlHelp.ChmDecoding;
// using HtmlHelp.Storage;
namespace HtmlHelp
{
/// <summary>
/// The class <c>ChmFileInfo</c> only extracts system information from a CHM file.
/// It doesn't build the index and table of contents.
/// </summary>
public class ChmFileInfo
{
/// <summary>
/// Internal member storing the full filename
/// </summary>
private string _chmFileName = "";
/// <summary>
/// Internal member storing the associated chmfile object
/// </summary>
private CHMFile _associatedFile = null;
/// <summary>
/// Constructor for extrating the file information of the provided file.
/// The constructor opens the chm-file and reads its system data.
/// </summary>
/// <param name="chmFile">full file name which information should be extracted</param>
public ChmFileInfo(string chmFile)
{
if(!File.Exists(chmFile))
throw new ArgumentException("Chm file must exist on disk !", "chmFileName");
if( ! chmFile.ToLower().EndsWith(".chm") )
throw new ArgumentException("HtmlHelp file must have the extension .chm !", "chmFile");
_chmFileName = chmFile;
_associatedFile = new CHMFile(null, chmFile, true); // only load system data of chm
}
/// <summary>
/// Internal constructor used in the class <see cref="HtmlHelp.ChmDecoding.CHMFile">CHMFile</see>.
/// </summary>
/// <param name="associatedFile">associated chm file</param>
internal ChmFileInfo(CHMFile associatedFile)
{
_associatedFile = associatedFile;
if( _associatedFile == null)
throw new ArgumentException("Associated CHMFile instance must not be null !", "associatedFile");
}
#region default info properties
/// <summary>
/// Gets the full filename of the chm file
/// </summary>
public string ChmFileName
{
get
{
return _associatedFile.ChmFilePath;
}
}
/// <summary>
/// Gets a <see cref="System.IO.FileInfo">FileInfo</see> instance for the chm file.
/// </summary>
public FileInfo FileInfo
{
get { return new FileInfo(_associatedFile.ChmFilePath); }
}
#endregion
#region #SYSTEM properties
/// <summary>
/// Gets the file version of the chm file.
/// 2 for Compatibility=1.0, 3 for Compatibility=1.1
/// </summary>
public int FileVersion
{
get
{
if(_associatedFile != null)
return _associatedFile.FileVersion;
return 0;
}
}
/// <summary>
/// Gets the contents file name
/// </summary>
public string ContentsFile
{
get
{
if(_associatedFile != null)
return _associatedFile.ContentsFile;
return "";
}
}
/// <summary>
/// Gets the index file name
/// </summary>
public string IndexFile
{
get
{
if(_associatedFile != null)
return _associatedFile.IndexFile;
return "";
}
}
/// <summary>
/// Gets the default help topic
/// </summary>
public string DefaultTopic
{
get
{
if(_associatedFile != null)
return _associatedFile.DefaultTopic;
return "";
}
}
/// <summary>
/// Gets the title of the help window
/// </summary>
public string HelpWindowTitle
{
get
{
if(_associatedFile != null)
return _associatedFile.HelpWindowTitle;
return "";
}
}
/// <summary>
/// Gets the flag if DBCS is in use
/// </summary>
public bool DBCS
{
get
{
if(_associatedFile != null)
return _associatedFile.DBCS;
return false;
}
}
/// <summary>
/// Gets the flag if full-text-search is available
/// </summary>
public bool FullTextSearch
{
get
{
if(_associatedFile != null)
return _associatedFile.FullTextSearch;
return false;
}
}
/// <summary>
/// Gets the flag if the file has ALinks
/// </summary>
public bool HasALinks
{
get
{
if(_associatedFile != null)
return _associatedFile.HasALinks;
return false;
}
}
/// <summary>
/// Gets the flag if the file has KLinks
/// </summary>
public bool HasKLinks
{
get
{
if(_associatedFile != null)
return _associatedFile.HasKLinks;
return false;
}
}
/// <summary>
/// Gets the default window name
/// </summary>
public string DefaultWindow
{
get
{
if(_associatedFile != null)
return _associatedFile.DefaultWindow;
return "";
}
}
/// <summary>
/// Gets the file name of the compile file
/// </summary>
public string CompileFile
{
get
{
if(_associatedFile != null)
return _associatedFile.CompileFile;
return "";
}
}
/// <summary>
/// Gets the flag if the chm has a binary index file
/// </summary>
public bool BinaryIndex
{
get
{
if(_associatedFile != null)
return _associatedFile.BinaryIndex;
return false;
}
}
/// <summary>
/// Gets the flag if the chm has a binary index file
/// </summary>
public string CompilerVersion
{
get
{
if(_associatedFile != null)
return _associatedFile.CompilerVersion;
return "";
}
}
/// <summary>
/// Gets the flag if the chm has a binary toc file
/// </summary>
public bool BinaryTOC
{
get
{
if(_associatedFile != null)
return _associatedFile.BinaryTOC;
return false;
}
}
/// <summary>
/// Gets the font face of the read font property.
/// Empty string for default font.
/// </summary>
public string FontFace
{
get
{
if(_associatedFile != null)
return _associatedFile.FontFace;
return "";
}
}
/// <summary>
/// Gets the font size of the read font property.
/// 0 for default font size
/// </summary>
public double FontSize
{
get
{
if(_associatedFile != null)
return _associatedFile.FontSize;
return 0.0;
}
}
/// <summary>
/// Gets the character set of the read font property
/// 1 for default
/// </summary>
public int CharacterSet
{
get
{
if(_associatedFile != null)
return _associatedFile.CharacterSet;
return 1;
}
}
/// <summary>
/// Gets the codepage depending on the read font property
/// </summary>
public int CodePage
{
get
{
if(_associatedFile != null)
return _associatedFile.CodePage;
return 0;
}
}
/// <summary>
/// Gets the assiciated culture info
/// </summary>
public CultureInfo Culture
{
get
{
if(_associatedFile != null)
return _associatedFile.Culture;
return CultureInfo.CurrentCulture;
}
}
#endregion
#region #IDXHDR properties
/// <summary>
/// Gets the number of topic nodes including the contents and index files
/// </summary>
public int NumberOfTopicNodes
{
get
{
if(_associatedFile != null)
return _associatedFile.NumberOfTopicNodes;
return 0;
}
}
/// <summary>
/// Gets the ImageList string specyfied in the #IDXHDR file.
/// </summary>
/// <remarks>This property uses the #STRINGS file to extract the string at a given offset.</remarks>
public string ImageList
{
get
{
if(_associatedFile != null)
return _associatedFile.ImageList;
return "";
}
}
/// <summary>
/// Gets the background setting
/// </summary>
public int Background
{
get
{
if(_associatedFile != null)
return _associatedFile.Background;
return 0;
}
}
/// <summary>
/// Gets the foreground setting
/// </summary>
public int Foreground
{
get
{
if(_associatedFile != null)
return _associatedFile.Foreground;
return 0;
}
}
/// <summary>
/// Gets the FrameName string specyfied in the #IDXHDR file.
/// </summary>
/// <remarks>This property uses the #STRINGS file to extract the string at a given offset.</remarks>
public string FrameName
{
get
{
if(_associatedFile != null)
return _associatedFile.FrameName;
return "";
}
}
/// <summary>
/// Gets the WindowName string specyfied in the #IDXHDR file.
/// </summary>
/// <remarks>This property uses the #STRINGS file to extract the string at a given offset.</remarks>
public string WindowName
{
get
{
if(_associatedFile != null)
return _associatedFile.WindowName;
return "";
}
}
/// <summary>
/// Gets a string array containing the merged file names
/// </summary>
public string[] MergedFiles
{
get
{
if(_associatedFile != null)
return _associatedFile.MergedFiles;
return new string[0];
}
}
#endregion
}
}

View File

@@ -1,23 +0,0 @@
<?xml version="1.0"?>
<project name="CHMLibrary" default="build">
<property name="output.dir" value="..\bin" />
<target name="build" description="Build component">
<mkdir dir="${output.dir}" />
<csc target="library"
output="${output.dir}\CHMLibrary.dll"
optimize="true"
debug="true"
doc="${output.dir}\CHMLibrary.xml"
warninglevel="0">
<sources>
<include name="**/*.cs" />
</sources>
<references>
<include name="${output.dir}\Compression.dll" />
</references>
</csc>
</target>
</project>

View File

@@ -1,894 +0,0 @@
using System;
using System.IO;
using System.Collections;
using System.Data;
using HtmlHelp.ChmDecoding;
namespace HtmlHelp
{
/// <summary>
/// The class <c>HtmlHelpSystem</c> implements the main object for reading chm files
/// </summary>
public sealed class HtmlHelpSystem
{
/// <summary>
/// Private shared instance of current HtmlHelpSystem class
/// </summary>
private static HtmlHelpSystem _current=null;
/// <summary>
/// Internal member storing the attached files
/// </summary>
private ArrayList _chmFiles = new ArrayList();
/// <summary>
/// Internal member storing a merged table of contents
/// </summary>
private TableOfContents _toc = new TableOfContents();
/// <summary>
/// Internal member storing a merged index
/// </summary>
private Index _index = new Index();
/// <summary>
/// URL prefix for specifying a chm destination
/// </summary>
private static string _urlPrefix = "ms-its:";
/// <summary>
/// Internal flag specifying if the system should use the tree-images list
/// from HtmlHelp2. If false the standard CHM-Viewer pics will be used.
/// </summary>
private static bool _useHH2TreePics = false;
/// <summary>
/// Internal member storing the read information types
/// </summary>
private ArrayList _informationTypes = new ArrayList();
/// <summary>
/// Internal member storing the read categories
/// </summary>
private ArrayList _categories = new ArrayList();
/// <summary>
/// Gets/Sets the url prefix for specifying a chm destination
/// </summary>
public static string UrlPrefix
{
get { return _urlPrefix; }
set { _urlPrefix = value; }
}
public CHMStream.CHMStream BaseStream
{
get
{
CHMFile chm=(CHMFile)_chmFiles[0];
return chm.BaseStream;
}
}
/// <summary>
/// Gets/Sets the flag specifying if the system should use the tree-images list
/// from HtmlHelp2. If false the standard CHM-Viewer pics will be used.
/// </summary>
public static bool UseHH2TreePics
{
get { return _useHH2TreePics; }
set { _useHH2TreePics = value; }
}
/// <summary>
/// Gets the current HtmlHelpSystem instance
/// </summary>
public static HtmlHelpSystem Current
{
get
{
return _current;
}
}
/// <summary>
/// Standard constructor
/// </summary>
public HtmlHelpSystem() : this("")
{
}
/// <summary>
/// Constructor of the reader class
/// </summary>
/// <param name="chmFile">chm file to attach with the reader</param>
public HtmlHelpSystem(string chmFile)
{
_current = this;
OpenFile(chmFile);
}
/// <summary>
/// Opens a chm file and creates
/// </summary>
/// <param name="chmFile">full file path of the chm file to open</param>
/// <remarks>If you call this method, all existing merged files will be cleared.</remarks>
public void OpenFile(string chmFile)
{
OpenFile(chmFile, null);
}
/// <summary>
/// Opens a chm file and creates
/// </summary>
/// <param name="chmFile">full file path of the chm file to open</param>
/// <param name="dmpInfo">dumping info</param>
/// <remarks>If you call this method, all existing merged files will be cleared.</remarks>
public void OpenFile(string chmFile, DumpingInfo dmpInfo)
{
if( File.Exists(chmFile ) )
{
_chmFiles.Clear();
_toc.Clear();
_index.Clear();
_informationTypes.Clear();
_categories.Clear();
CHMFile newFile = new CHMFile(this, chmFile, dmpInfo);
_toc = new TableOfContents( newFile.TOC );
_index = new Index( newFile.IndexKLinks, newFile.IndexALinks );
_chmFiles.Add(newFile);
// add all infotypes and categories of the read file to this system instance
MergeFileInfoTypesCategories(newFile);
// check if the file has a merged files list
if( newFile.MergedFiles.Length > 0 )
{
// extract the path of the chm file (usually merged files are in the same path)
FileInfo fi = new FileInfo(chmFile);
string sPath = fi.DirectoryName;
for(int i=0; i<newFile.MergedFiles.Length; i++)
{
string sFile = newFile.MergedFiles[i];
if(sFile.Length > 0)
{
if(sFile[1] != ':') // no full path setting
{
sFile = Path.Combine(sPath, sFile);
}
MergeFile(sFile, dmpInfo, true);
}
}
// if (newFile.MergLinks.Count>0)
// RecalculateMergeLinks(newFile);
RemoveMergeLinks(); // clear all merge-links which have no target !
}
}
}
/// <summary>
/// Merges a chm file to the current help contents
/// </summary>
/// <param name="chmFile">full file path of the chm file to merge</param>
public void MergeFile(string chmFile)
{
MergeFile(chmFile, null);
}
/// <summary>
/// Merges a chm file to the current help contents
/// </summary>
/// <param name="chmFile">full file path of the chm file to merge</param>
/// <param name="dmpInfo">dumping info</param>
public void MergeFile(string chmFile, DumpingInfo dmpInfo)
{
MergeFile(chmFile, dmpInfo, false);
}
/// <summary>
/// Merges a chm file to the current help contents
/// </summary>
/// <param name="chmFile">full file path of the chm file to merge</param>
/// <param name="dmpInfo">dumping info</param>
/// <param name="mergedFileList">true if the merge is done because a merged file list
/// was found in the previously loaded CHM.</param>
internal void MergeFile(string chmFile, DumpingInfo dmpInfo, bool mergedFileList)
{
if( File.Exists(chmFile ) )
{
if( _chmFiles.Count == 1)
{
// if we open the first file, we directly point into the toc and index of this file.
// So that we don't merge the new toc's indexe's into the first file, we have to
// clone the internal arraylists first to a new instance of the toc/index holder classes.
ArrayList atoc = _toc.TOC;
ArrayList alinks = _index.ALinks;
ArrayList klinks = _index.KLinks;
_toc = new TableOfContents();
_index = new Index();
_toc.MergeToC( atoc );
_index.MergeIndex( alinks, IndexType.AssiciativeLinks );
_index.MergeIndex( klinks, IndexType.KeywordLinks );
}
CHMFile newFile = new CHMFile(this, chmFile, dmpInfo);
if(mergedFileList) // if we've called this method due to a merged file list merge
{
RecalculateMergeLinks(newFile);
_toc.MergeToC( newFile.TOC, _chmFiles );
_index.MergeIndex( newFile.IndexALinks, IndexType.AssiciativeLinks );
_index.MergeIndex( newFile.IndexKLinks, IndexType.KeywordLinks );
_chmFiles.Add(newFile);
// add all infotypes and categories of the read file to this system instance
MergeFileInfoTypesCategories(newFile);
}
else
{
_toc.MergeToC( newFile.TOC, _chmFiles );
_index.MergeIndex( newFile.IndexALinks, IndexType.AssiciativeLinks );
_index.MergeIndex( newFile.IndexKLinks, IndexType.KeywordLinks );
_chmFiles.Add(newFile);
// add all infotypes and categories of the read file to this system instance
MergeFileInfoTypesCategories(newFile);
// check if the file has a merged files list
if( newFile.MergedFiles.Length > 0 )
{
// extract the path of the chm file (usually merged files are in the same path)
FileInfo fi = new FileInfo(chmFile);
string sPath = fi.DirectoryName;
for(int i=0; i<newFile.MergedFiles.Length; i++)
{
string sFile = newFile.MergedFiles[i];
if(sFile.Length > 0)
{
if(sFile[1] != ':') // no full path setting
{
sFile = Path.Combine(sPath, sFile);
}
MergeFile(sFile, dmpInfo, true);
}
}
RemoveMergeLinks(); // clear all merge-links which have no target !
}
}
}
}
/// <summary>
/// Checks all Merg-links read till now. Checks if the merg-link points to the
/// file <c>currentFile</c>. If yes the link will be replaced by the contents of the
/// merged file.
/// </summary>
/// <param name="currentFile">Current CHMFile instance</param>
internal void RecalculateMergeLinks(CHMFile currentFile)
{
foreach(CHMFile curFile in _chmFiles)
{
if( curFile.MergLinks.Count > 0)
{
for(int i=0; i<curFile.MergLinks.Count; i++)
{
TOCItem curItem = curFile.MergLinks[i] as TOCItem;
string sMerge = curItem.MergeLink;
string [] sSplit = sMerge.Split( new char[]{':'} );
string sFName = "";
string sTarget = "";
if( sSplit.Length > 3) // merge info contains path name
{
sFName = sSplit[0] + ":" + sSplit[1];
sTarget = sSplit[3];
}
else if( sSplit.Length == 3)// merge info contains only file name
{
FileInfo fi = new FileInfo(currentFile.ChmFilePath);
string sPath = fi.DirectoryName;
string sFile = sSplit[0];
if(sFile.Length > 0)
{
if(sFile[1] != ':') // no full path setting
{
sFile = Path.Combine(sPath, sFile);
}
}
sFName = sFile;
sTarget = sSplit[2];
}
ArrayList arrToc = null;
if( (sFName.Length>0) && (sTarget.Length>0) )
{
// if this link points into the current file
if( sFName.ToLower() == currentFile.ChmFilePath.ToLower() )
{
if(sTarget.ToLower().IndexOf(".hhc") >= 0)
{
string sfCheck = sTarget;
// remove prefixing ./
while( (sfCheck[0]=='.') || (sfCheck[0]=='/') )
{
sfCheck = sfCheck.Substring(1);
}
if( currentFile.ContentsFile.ToLower() != sfCheck )
{
arrToc = currentFile.ParseHHC( sTarget );
if( arrToc.Count > 0)
{
}
}
else
{
arrToc = currentFile.TOC;
}
// target points to a complete TOC
int nCnt = 0;
foreach(TOCItem chkItem in arrToc)
{
if(nCnt == 0)
{
curItem.AssociatedFile = currentFile;
curItem.Children = chkItem.Children;
curItem.ChmFile = currentFile.ChmFilePath;
curItem.ImageIndex = chkItem.ImageIndex;
curItem.Local = chkItem.Local;
curItem.MergeLink = chkItem.MergeLink;
curItem.Name = chkItem.Name;
curItem.TocMode = chkItem.TocMode;
curItem.TopicOffset = chkItem.TopicOffset;
MarkChildrenAdded(chkItem.Children, curFile.MergLinks);
}
else
{
ArrayList checkList = null;
if(curItem.Parent != null)
checkList = curItem.Parent.Children;
else
checkList = curFile.TOC;
int nIdx = checkList.IndexOf(curItem);
if((nIdx+nCnt)>checkList.Count)
checkList.Add(chkItem);
else
checkList.Insert(nIdx+nCnt, chkItem);
curFile.MergLinks.Add(chkItem);
MarkChildrenAdded(chkItem.Children, curFile.MergLinks);
}
nCnt++;
}
}
else
{
// target points to a single topic
TOCItem chkItem = currentFile.GetTOCItemByLocal(sTarget);
if(chkItem != null)
{
curItem.AssociatedFile = currentFile;
curItem.Children = chkItem.Children;
curItem.ChmFile = currentFile.ChmFilePath;
curItem.ImageIndex = chkItem.ImageIndex;
curItem.Local = chkItem.Local;
curItem.MergeLink = chkItem.MergeLink;
curItem.Name = chkItem.Name;
curItem.TocMode = chkItem.TocMode;
curItem.TopicOffset = chkItem.TopicOffset;
curFile.MergLinks.Add(chkItem);
MarkChildrenAdded(chkItem.Children, curFile.MergLinks);
}
}
}
}
}
}
}
}
/// <summary>
/// Adds sub-items of an TOC-entry to the merg-linked list.
/// This will mark this item as "added" during the extra merge run
/// of the HtmlHelpSystem class.
/// </summary>
/// <param name="tocs">TOCItem list</param>
/// <param name="merged">Arraylist which holds the merged-items</param>
internal void MarkChildrenAdded(ArrayList tocs, ArrayList merged)
{
foreach(TOCItem curItem in tocs)
{
if(!merged.Contains(curItem))
{
merged.Add(curItem);
MarkChildrenAdded(curItem.Children, merged);
}
}
}
/// <summary>
/// Removes merge-links from the toc of files which were not loaded
/// </summary>
internal void RemoveMergeLinks()
{
foreach(CHMFile curFile in _chmFiles)
{
if( curFile.MergLinks.Count > 0)
{
while(curFile.MergLinks.Count > 0)
{
TOCItem curItem = curFile.MergLinks[0] as TOCItem;
if(curItem.MergeLink.Length > 0)
curFile.RemoveTOCItem(curItem);
curFile.MergLinks.RemoveAt(0);
}
}
}
}
/// <summary>
/// Merges the information types and categories read by the CHMFile instance
/// into the system instance
/// </summary>
/// <param name="chmFile">file instance</param>
private void MergeFileInfoTypesCategories(CHMFile chmFile)
{
if(chmFile.HasInformationTypes)
{
for(int i=0; i<chmFile.InformationTypes.Count;i++)
{
InformationType curType = chmFile.InformationTypes[i] as InformationType;
InformationType sysType = GetInformationType( curType.Name );
if( sysType == null)
_informationTypes.Add(curType);
else
curType.ReferenceCount++;
}
}
if(chmFile.HasCategories)
{
for(int i=0; i<chmFile.Categories.Count;i++)
{
Category curCat = chmFile.Categories[i] as Category;
Category sysCat = GetCategory( curCat.Name );
if(sysCat == null)
_categories.Add(curCat);
else
curCat.ReferenceCount++;
}
}
}
/// <summary>
/// Removes the information types and categories read by the CHMFile instance
/// </summary>
/// <param name="chmFile">file instance</param>
private void RemoveFileInfoTypesCategories(CHMFile chmFile)
{
if(chmFile.HasInformationTypes)
{
for(int i=0; i<chmFile.InformationTypes.Count;i++)
{
InformationType curType = chmFile.InformationTypes[i] as InformationType;
InformationType sysType = GetInformationType( curType.Name );
if(sysType != null)
{
sysType.ReferenceCount--;
if(sysType.ReferenceCount<=0)
_informationTypes.Remove(sysType);
}
}
}
if(chmFile.HasCategories)
{
for(int i=0; i<chmFile.Categories.Count;i++)
{
Category curCat = chmFile.Categories[i] as Category;
Category sysCat = GetCategory( curCat.Name );
if(sysCat != null)
{
sysCat.ReferenceCount--;
if(sysCat.ReferenceCount<=0)
_categories.Remove(sysCat);
}
}
}
}
/// <summary>
/// Removes a chm file from the internal file collection
/// </summary>
/// <param name="chmFile">full file path of the chm file to remove</param>
public void RemoveFile(string chmFile)
{
int nIdx = -1;
CHMFile removeInstance=null;
foreach(CHMFile curFile in _chmFiles)
{
nIdx++;
if( curFile.ChmFilePath.ToLower() == chmFile.ToLower() )
{
removeInstance = curFile;
break;
}
}
if(nIdx >= 0)
{
_toc.Clear(); // forces a rebuild of the merged toc
_index.Clear(); // force a rebuild of the merged index
RemoveFileInfoTypesCategories(removeInstance);
_chmFiles.RemoveAt(nIdx);
}
}
/// <summary>
/// Closes all files and destroys TOC/index
/// </summary>
public void CloseAllFiles()
{
for(int i=0; i < _chmFiles.Count; i++)
{
CHMFile curFile = _chmFiles[i] as CHMFile;
_chmFiles.RemoveAt(i);
curFile.Dispose();
i--;
}
_chmFiles.Clear();
_toc.Clear();
_index.Clear();
_informationTypes.Clear();
_categories.Clear();
}
/// <summary>
/// Gets an array of loaded chm files.
/// </summary>
public CHMFile[] FileList
{
get
{
CHMFile[] ret = new CHMFile[ _chmFiles.Count ];
for(int i=0;i<_chmFiles.Count;i++)
ret[i] = (CHMFile)_chmFiles[i];
return ret;
}
}
/// <summary>
/// Returns true if the HtmlHelpSystem instance contains 1 or more information types
/// </summary>
public bool HasInformationTypes
{
get { return (_informationTypes.Count>0); }
}
/// <summary>
/// Returns true if the HtmlHelpSystem instance contains 1 or more categories
/// </summary>
public bool HasCategories
{
get { return (_categories.Count>0); }
}
/// <summary>
/// Gets an ArrayList of <see cref="InformationType">InformationType</see> items
/// </summary>
public ArrayList InformationTypes
{
get { return _informationTypes; }
}
/// <summary>
/// Gets an ArrayList of <see cref="Category">Category</see> items
/// </summary>
public ArrayList Categories
{
get { return _categories; }
}
/// <summary>
/// Gets the information type specified by its name
/// </summary>
/// <param name="name">name of the information type to receive</param>
/// <returns>Returns the Instance for the name or null if not found</returns>
public InformationType GetInformationType(string name)
{
if(HasInformationTypes)
{
for(int i=0; i<_informationTypes.Count;i++)
{
InformationType iT = _informationTypes[i] as InformationType;
if(iT.Name == name)
return iT;
}
}
return null;
}
/// <summary>
/// Gets the category specifiyd by its name
/// </summary>
/// <param name="name">name of the category</param>
/// <returns>Returns the Instance for the name or null if not found</returns>
public Category GetCategory(string name)
{
if(HasCategories)
{
for(int i=0; i<_categories.Count;i++)
{
Category cat = _categories[i] as Category;
if(cat.Name == name)
return cat;
}
}
return null;
}
/// <summary>
/// Gets the default topic
/// </summary>
public string DefaultTopic
{
get
{
if( _chmFiles.Count > 0 )
{
foreach(CHMFile curFile in _chmFiles)
{
if( curFile.DefaultTopic.Length > 0)
{
return curFile.FormURL( curFile.DefaultTopic );
}
}
}
return "about:blank";
}
}
/// <summary>
/// Gets a merged table of contents of all opened chm files
/// </summary>
public TableOfContents TableOfContents
{
get
{
if( _chmFiles.Count > 0 )
{
if( _toc.Count() <= 0)
{
// merge toc of files
foreach(CHMFile curFile in _chmFiles)
{
_toc.MergeToC( curFile.TOC );
}
}
}
return _toc;
}
}
/// <summary>
/// Gets a merged index of all opened chm files
/// </summary>
public Index Index
{
get
{
if( _chmFiles.Count > 0 )
{
if( (_index.Count(IndexType.KeywordLinks)+_index.Count(IndexType.AssiciativeLinks)) <= 0)
{
// merge index files
foreach(CHMFile curFile in _chmFiles)
{
_index.MergeIndex( curFile.IndexKLinks, IndexType.KeywordLinks);
_index.MergeIndex( curFile.IndexALinks, IndexType.AssiciativeLinks);
}
}
}
return _index;
}
}
/// <summary>
/// Gets a flag if the current instance offers a table of contents
/// </summary>
public bool HasTableOfContents
{
get
{
return (TableOfContents.Count() > 0);
}
}
/// <summary>
/// Gets a flag if the current instance offers an index
/// </summary>
public bool HasIndex
{
get
{
return (HasALinks || HasKLinks);
}
}
/// <summary>
/// Gets a flag if the index holds klinks
/// </summary>
public bool HasKLinks
{
get
{
return (_index.Count(IndexType.KeywordLinks) > 0);
}
}
/// <summary>
/// Gets a flag if the index holds alinks
/// </summary>
public bool HasALinks
{
get
{
return (_index.Count(IndexType.AssiciativeLinks) > 0);
}
}
/// <summary>
/// Gets a flag if the current instance supports fulltext searching
/// </summary>
public bool FullTextSearch
{
get
{
bool bRet = false;
foreach(CHMFile curFile in _chmFiles)
{
bRet |= curFile.FullTextSearch;
}
return bRet;
}
}
/// <summary>
/// Performs a full-text search over the chm files
/// </summary>
/// <param name="words">words to search</param>
/// <param name="partialMatches">true if partial word should be matched also
/// ( if this is true a search of 'support' will match 'supports', otherwise not )</param>
/// <param name="titleOnly">true if titles only</param>
/// <returns>A DataTable containing the search hits</returns>
public DataTable PerformSearch(string words, bool partialMatches, bool titleOnly)
{
return PerformSearch(words, -1, partialMatches, titleOnly);
}
/// <summary>
/// Performs a full-text search over the chm files
/// </summary>
/// <param name="words">words to search</param>
/// <param name="MaxResults">maximal number of hits to return</param>
/// <param name="partialMatches">true if partial word should be matched also
/// ( if this is true a search of 'support' will match 'supports', otherwise not )</param>
/// <param name="titleOnly">true if titles only</param>
/// <returns>A DataTable containing the search hits</returns>
public DataTable PerformSearch(string words, int MaxResults, bool partialMatches, bool titleOnly)
{
if( ! FullTextSearch )
return null;
DataTable dtResult = null;
int nCnt = 0;
foreach(CHMFile curFile in _chmFiles)
{
if(nCnt == 0)
{
if(curFile.FullTextSearchEngine.CanSearch)
{
if(curFile.FullTextSearchEngine.Search(words, MaxResults, partialMatches, titleOnly))
{
dtResult = curFile.FullTextSearchEngine.Hits;
dtResult.DefaultView.Sort = "Rating DESC";
}
}
}
else
{
if(curFile.FullTextSearchEngine.CanSearch)
{
if(curFile.FullTextSearchEngine.Search(words, MaxResults, partialMatches, titleOnly))
{
DataTable table = curFile.FullTextSearchEngine.Hits;
// append rows from 2nd file
foreach(DataRow curRow in table.Rows)
{
dtResult.ImportRow( curRow );
}
dtResult.DefaultView.Sort = "Rating DESC";
// adjust max hits
if(MaxResults >= 0)
{
if(dtResult.DefaultView.Count > MaxResults)
{
for(int i=MaxResults-1; i<dtResult.DefaultView.Count-1;i++)
{
if(dtResult.DefaultView[i].Row.RowState != DataRowState.Deleted)
{
dtResult.DefaultView[i].Row.Delete();
dtResult.DefaultView[i].Row.AcceptChanges();
i--;
}
}
dtResult.AcceptChanges();
dtResult.DefaultView.Sort = "Rating DESC";
}
}
}
}
}
nCnt++;
}
return dtResult;
}
}
}

View File

@@ -1,855 +0,0 @@
//
// System.Web.HttpUtility
//
// Authors:
// Patrik Torstensson (Patrik.Torstensson@labs2.com)
// Wictor Wil<69>n (decode/encode functions) (wictor@ibizkit.se)
// Tim Coleman (tim@timcoleman.com)
// Gonzalo Paniagua Javier (gonzalo@ximian.com)
//
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
using System;
using System.Collections;
using System.Globalization;
using System.IO;
using System.Text;
// using System.Web.Util;
namespace HtmlHelp.ChmDecoding
{
public sealed class HttpUtility {
#region Fields
const string _hex = "0123456789ABCDEF";
const string _chars = "<>;:.?=&@*+%/\\";
static Hashtable entities;
static object lock_ = new object ();
#endregion // Fields
static Hashtable Entities {
get {
lock (lock_) {
if (entities == null)
InitEntities ();
return entities;
}
}
}
#region Constructors
static void InitEntities ()
{
// Build the hash table of HTML entity references. This list comes
// from the HTML 4.01 W3C recommendation.
entities = new Hashtable ();
entities.Add ("nbsp", '\u00A0');
entities.Add ("iexcl", '\u00A1');
entities.Add ("cent", '\u00A2');
entities.Add ("pound", '\u00A3');
entities.Add ("curren", '\u00A4');
entities.Add ("yen", '\u00A5');
entities.Add ("brvbar", '\u00A6');
entities.Add ("sect", '\u00A7');
entities.Add ("uml", '\u00A8');
entities.Add ("copy", '\u00A9');
entities.Add ("ordf", '\u00AA');
entities.Add ("laquo", '\u00AB');
entities.Add ("not", '\u00AC');
entities.Add ("shy", '\u00AD');
entities.Add ("reg", '\u00AE');
entities.Add ("macr", '\u00AF');
entities.Add ("deg", '\u00B0');
entities.Add ("plusmn", '\u00B1');
entities.Add ("sup2", '\u00B2');
entities.Add ("sup3", '\u00B3');
entities.Add ("acute", '\u00B4');
entities.Add ("micro", '\u00B5');
entities.Add ("para", '\u00B6');
entities.Add ("middot", '\u00B7');
entities.Add ("cedil", '\u00B8');
entities.Add ("sup1", '\u00B9');
entities.Add ("ordm", '\u00BA');
entities.Add ("raquo", '\u00BB');
entities.Add ("frac14", '\u00BC');
entities.Add ("frac12", '\u00BD');
entities.Add ("frac34", '\u00BE');
entities.Add ("iquest", '\u00BF');
entities.Add ("Agrave", '\u00C0');
entities.Add ("Aacute", '\u00C1');
entities.Add ("Acirc", '\u00C2');
entities.Add ("Atilde", '\u00C3');
entities.Add ("Auml", '\u00C4');
entities.Add ("Aring", '\u00C5');
entities.Add ("AElig", '\u00C6');
entities.Add ("Ccedil", '\u00C7');
entities.Add ("Egrave", '\u00C8');
entities.Add ("Eacute", '\u00C9');
entities.Add ("Ecirc", '\u00CA');
entities.Add ("Euml", '\u00CB');
entities.Add ("Igrave", '\u00CC');
entities.Add ("Iacute", '\u00CD');
entities.Add ("Icirc", '\u00CE');
entities.Add ("Iuml", '\u00CF');
entities.Add ("ETH", '\u00D0');
entities.Add ("Ntilde", '\u00D1');
entities.Add ("Ograve", '\u00D2');
entities.Add ("Oacute", '\u00D3');
entities.Add ("Ocirc", '\u00D4');
entities.Add ("Otilde", '\u00D5');
entities.Add ("Ouml", '\u00D6');
entities.Add ("times", '\u00D7');
entities.Add ("Oslash", '\u00D8');
entities.Add ("Ugrave", '\u00D9');
entities.Add ("Uacute", '\u00DA');
entities.Add ("Ucirc", '\u00DB');
entities.Add ("Uuml", '\u00DC');
entities.Add ("Yacute", '\u00DD');
entities.Add ("THORN", '\u00DE');
entities.Add ("szlig", '\u00DF');
entities.Add ("agrave", '\u00E0');
entities.Add ("aacute", '\u00E1');
entities.Add ("acirc", '\u00E2');
entities.Add ("atilde", '\u00E3');
entities.Add ("auml", '\u00E4');
entities.Add ("aring", '\u00E5');
entities.Add ("aelig", '\u00E6');
entities.Add ("ccedil", '\u00E7');
entities.Add ("egrave", '\u00E8');
entities.Add ("eacute", '\u00E9');
entities.Add ("ecirc", '\u00EA');
entities.Add ("euml", '\u00EB');
entities.Add ("igrave", '\u00EC');
entities.Add ("iacute", '\u00ED');
entities.Add ("icirc", '\u00EE');
entities.Add ("iuml", '\u00EF');
entities.Add ("eth", '\u00F0');
entities.Add ("ntilde", '\u00F1');
entities.Add ("ograve", '\u00F2');
entities.Add ("oacute", '\u00F3');
entities.Add ("ocirc", '\u00F4');
entities.Add ("otilde", '\u00F5');
entities.Add ("ouml", '\u00F6');
entities.Add ("divide", '\u00F7');
entities.Add ("oslash", '\u00F8');
entities.Add ("ugrave", '\u00F9');
entities.Add ("uacute", '\u00FA');
entities.Add ("ucirc", '\u00FB');
entities.Add ("uuml", '\u00FC');
entities.Add ("yacute", '\u00FD');
entities.Add ("thorn", '\u00FE');
entities.Add ("yuml", '\u00FF');
entities.Add ("fnof", '\u0192');
entities.Add ("Alpha", '\u0391');
entities.Add ("Beta", '\u0392');
entities.Add ("Gamma", '\u0393');
entities.Add ("Delta", '\u0394');
entities.Add ("Epsilon", '\u0395');
entities.Add ("Zeta", '\u0396');
entities.Add ("Eta", '\u0397');
entities.Add ("Theta", '\u0398');
entities.Add ("Iota", '\u0399');
entities.Add ("Kappa", '\u039A');
entities.Add ("Lambda", '\u039B');
entities.Add ("Mu", '\u039C');
entities.Add ("Nu", '\u039D');
entities.Add ("Xi", '\u039E');
entities.Add ("Omicron", '\u039F');
entities.Add ("Pi", '\u03A0');
entities.Add ("Rho", '\u03A1');
entities.Add ("Sigma", '\u03A3');
entities.Add ("Tau", '\u03A4');
entities.Add ("Upsilon", '\u03A5');
entities.Add ("Phi", '\u03A6');
entities.Add ("Chi", '\u03A7');
entities.Add ("Psi", '\u03A8');
entities.Add ("Omega", '\u03A9');
entities.Add ("alpha", '\u03B1');
entities.Add ("beta", '\u03B2');
entities.Add ("gamma", '\u03B3');
entities.Add ("delta", '\u03B4');
entities.Add ("epsilon", '\u03B5');
entities.Add ("zeta", '\u03B6');
entities.Add ("eta", '\u03B7');
entities.Add ("theta", '\u03B8');
entities.Add ("iota", '\u03B9');
entities.Add ("kappa", '\u03BA');
entities.Add ("lambda", '\u03BB');
entities.Add ("mu", '\u03BC');
entities.Add ("nu", '\u03BD');
entities.Add ("xi", '\u03BE');
entities.Add ("omicron", '\u03BF');
entities.Add ("pi", '\u03C0');
entities.Add ("rho", '\u03C1');
entities.Add ("sigmaf", '\u03C2');
entities.Add ("sigma", '\u03C3');
entities.Add ("tau", '\u03C4');
entities.Add ("upsilon", '\u03C5');
entities.Add ("phi", '\u03C6');
entities.Add ("chi", '\u03C7');
entities.Add ("psi", '\u03C8');
entities.Add ("omega", '\u03C9');
entities.Add ("thetasym", '\u03D1');
entities.Add ("upsih", '\u03D2');
entities.Add ("piv", '\u03D6');
entities.Add ("bull", '\u2022');
entities.Add ("hellip", '\u2026');
entities.Add ("prime", '\u2032');
entities.Add ("Prime", '\u2033');
entities.Add ("oline", '\u203E');
entities.Add ("frasl", '\u2044');
entities.Add ("weierp", '\u2118');
entities.Add ("image", '\u2111');
entities.Add ("real", '\u211C');
entities.Add ("trade", '\u2122');
entities.Add ("alefsym", '\u2135');
entities.Add ("larr", '\u2190');
entities.Add ("uarr", '\u2191');
entities.Add ("rarr", '\u2192');
entities.Add ("darr", '\u2193');
entities.Add ("harr", '\u2194');
entities.Add ("crarr", '\u21B5');
entities.Add ("lArr", '\u21D0');
entities.Add ("uArr", '\u21D1');
entities.Add ("rArr", '\u21D2');
entities.Add ("dArr", '\u21D3');
entities.Add ("hArr", '\u21D4');
entities.Add ("forall", '\u2200');
entities.Add ("part", '\u2202');
entities.Add ("exist", '\u2203');
entities.Add ("empty", '\u2205');
entities.Add ("nabla", '\u2207');
entities.Add ("isin", '\u2208');
entities.Add ("notin", '\u2209');
entities.Add ("ni", '\u220B');
entities.Add ("prod", '\u220F');
entities.Add ("sum", '\u2211');
entities.Add ("minus", '\u2212');
entities.Add ("lowast", '\u2217');
entities.Add ("radic", '\u221A');
entities.Add ("prop", '\u221D');
entities.Add ("infin", '\u221E');
entities.Add ("ang", '\u2220');
entities.Add ("and", '\u2227');
entities.Add ("or", '\u2228');
entities.Add ("cap", '\u2229');
entities.Add ("cup", '\u222A');
entities.Add ("int", '\u222B');
entities.Add ("there4", '\u2234');
entities.Add ("sim", '\u223C');
entities.Add ("cong", '\u2245');
entities.Add ("asymp", '\u2248');
entities.Add ("ne", '\u2260');
entities.Add ("equiv", '\u2261');
entities.Add ("le", '\u2264');
entities.Add ("ge", '\u2265');
entities.Add ("sub", '\u2282');
entities.Add ("sup", '\u2283');
entities.Add ("nsub", '\u2284');
entities.Add ("sube", '\u2286');
entities.Add ("supe", '\u2287');
entities.Add ("oplus", '\u2295');
entities.Add ("otimes", '\u2297');
entities.Add ("perp", '\u22A5');
entities.Add ("sdot", '\u22C5');
entities.Add ("lceil", '\u2308');
entities.Add ("rceil", '\u2309');
entities.Add ("lfloor", '\u230A');
entities.Add ("rfloor", '\u230B');
entities.Add ("lang", '\u2329');
entities.Add ("rang", '\u232A');
entities.Add ("loz", '\u25CA');
entities.Add ("spades", '\u2660');
entities.Add ("clubs", '\u2663');
entities.Add ("hearts", '\u2665');
entities.Add ("diams", '\u2666');
entities.Add ("quot", '\u0022');
entities.Add ("amp", '\u0026');
entities.Add ("lt", '\u003C');
entities.Add ("gt", '\u003E');
entities.Add ("OElig", '\u0152');
entities.Add ("oelig", '\u0153');
entities.Add ("Scaron", '\u0160');
entities.Add ("scaron", '\u0161');
entities.Add ("Yuml", '\u0178');
entities.Add ("circ", '\u02C6');
entities.Add ("tilde", '\u02DC');
entities.Add ("ensp", '\u2002');
entities.Add ("emsp", '\u2003');
entities.Add ("thinsp", '\u2009');
entities.Add ("zwnj", '\u200C');
entities.Add ("zwj", '\u200D');
entities.Add ("lrm", '\u200E');
entities.Add ("rlm", '\u200F');
entities.Add ("ndash", '\u2013');
entities.Add ("mdash", '\u2014');
entities.Add ("lsquo", '\u2018');
entities.Add ("rsquo", '\u2019');
entities.Add ("sbquo", '\u201A');
entities.Add ("ldquo", '\u201C');
entities.Add ("rdquo", '\u201D');
entities.Add ("bdquo", '\u201E');
entities.Add ("dagger", '\u2020');
entities.Add ("Dagger", '\u2021');
entities.Add ("permil", '\u2030');
entities.Add ("lsaquo", '\u2039');
entities.Add ("rsaquo", '\u203A');
entities.Add ("euro", '\u20AC');
}
public HttpUtility ()
{
}
#endregion // Constructors
#region Methods
public static void HtmlAttributeEncode (string s, TextWriter output)
{
output.Write(HtmlAttributeEncode(s));
}
public static string HtmlAttributeEncode (string s)
{
if (null == s)
return null;
if (s.IndexOf ('&') == -1 && s.IndexOf ('"') == -1)
return s;
StringBuilder output = new StringBuilder ();
foreach (char c in s)
switch (c) {
case '&' :
output.Append ("&amp;");
break;
case '"' :
output.Append ("&quot;");
break;
default:
output.Append (c);
break;
}
return output.ToString();
}
public static string UrlDecode (string str)
{
return UrlDecode(str, Encoding.UTF8);
}
private static char [] GetChars (MemoryStream b, Encoding e)
{
return e.GetChars (b.GetBuffer (), 0, (int) b.Length);
}
public static string UrlDecode (string s, Encoding e)
{
if (null == s)
return null;
if (s.IndexOf ('%') == -1 && s.IndexOf ('+') == -1)
return s;
if (e == null)
e = Encoding.UTF8;
StringBuilder output = new StringBuilder ();
long len = s.Length;
NumberStyles hexa = NumberStyles.HexNumber;
MemoryStream bytes = new MemoryStream ();
for (int i = 0; i < len; i++) {
if (s [i] == '%' && i + 2 < len) {
if (s [i + 1] == 'u' && i + 5 < len) {
if (bytes.Length > 0) {
output.Append (GetChars (bytes, e));
bytes.SetLength (0);
}
output.Append ((char) Int32.Parse (s.Substring (i + 2, 4), hexa));
i += 5;
} else {
bytes.WriteByte ((byte) Int32.Parse (s.Substring (i + 1, 2), hexa));
i += 2;
}
continue;
}
if (bytes.Length > 0) {
output.Append (GetChars (bytes, e));
bytes.SetLength (0);
}
if (s [i] == '+') {
output.Append (' ');
} else {
output.Append (s [i]);
}
}
if (bytes.Length > 0) {
output.Append (GetChars (bytes, e));
}
bytes = null;
return output.ToString ();
}
public static string UrlDecode (byte [] bytes, Encoding e)
{
if (bytes == null)
return null;
return UrlDecode (bytes, 0, bytes.Length, e);
}
private static int GetInt (byte b)
{
char c = Char.ToUpper ((char) b);
if (c >= '0' && c <= '9')
return c - '0';
if (c < 'A' || c > 'F')
return 0;
return (c - 'A' + 10);
}
private static char GetChar (byte [] bytes, int offset, int length)
{
int value = 0;
int end = length + offset;
for (int i = offset; i < end; i++)
value = (value << 4) + GetInt (bytes [offset]);
return (char) value;
}
public static string UrlDecode (byte [] bytes, int offset, int count, Encoding e)
{
if (bytes == null || count == 0)
return null;
if (bytes == null)
throw new ArgumentNullException ("bytes");
if (offset < 0 || offset > bytes.Length)
throw new ArgumentOutOfRangeException ("offset");
if (count < 0 || offset + count > bytes.Length)
throw new ArgumentOutOfRangeException ("count");
StringBuilder output = new StringBuilder ();
MemoryStream acc = new MemoryStream ();
int end = count + offset;
for (int i = offset; i < end; i++) {
if (bytes [i] == '%' && i + 2 < count) {
if (bytes [i + 1] == (byte) 'u' && i + 5 < end) {
if (acc.Length > 0) {
output.Append (GetChars (acc, e));
acc.SetLength (0);
}
output.Append (GetChar (bytes, offset + 2, 4));
i += 5;
} else {
acc.WriteByte ((byte) GetChar (bytes, offset + 1, 2));
i += 2;
}
continue;
}
if (acc.Length > 0) {
output.Append (GetChars (acc, e));
acc.SetLength (0);
}
if (bytes [i] == '+') {
output.Append (' ');
} else {
output.Append ((char) bytes [i]);
}
}
if (acc.Length > 0) {
output.Append (GetChars (acc, e));
}
acc = null;
return output.ToString ();
}
public static byte [] UrlDecodeToBytes (byte [] bytes)
{
if (bytes == null)
return null;
return UrlDecodeToBytes (bytes, 0, bytes.Length);
}
public static byte [] UrlDecodeToBytes (string str)
{
return UrlDecodeToBytes (str, Encoding.UTF8);
}
public static byte [] UrlDecodeToBytes (string str, Encoding e)
{
if (str == null)
return null;
if (e == null)
throw new ArgumentNullException ("e");
return UrlDecodeToBytes (e.GetBytes (str));
}
public static byte [] UrlDecodeToBytes (byte [] bytes, int offset, int count)
{
if (bytes == null)
return null;
int len = bytes.Length;
if (offset < 0 || offset >= len)
throw new ArgumentOutOfRangeException("offset");
if (count < 0 || offset > len - count)
throw new ArgumentOutOfRangeException("count");
MemoryStream result = new MemoryStream ();
int end = offset + count;
for (int i = offset; i < end; i++){
char c = (char) bytes [i];
if (c == '+')
c = ' ';
else if (c == '%' && i < end - 2) {
c = GetChar (bytes, i, 2);
i += 2;
}
result.WriteByte ((byte) c);
}
return result.ToArray ();
}
public static string UrlEncode(string str)
{
return UrlEncode(str, Encoding.UTF8);
}
public static string UrlEncode (string s, Encoding Enc)
{
if (s == null)
return null;
if (s == "")
return "";
byte [] bytes = Enc.GetBytes (s);
byte [] b =UrlEncodeToBytes (bytes, 0, bytes.Length);
return Encoding.ASCII.GetString (b,0,b.Length);
}
public static string UrlEncode (byte [] bytes)
{
if (bytes == null)
return null;
if (bytes.Length == 0)
return "";
byte []b=UrlEncodeToBytes(bytes, 0, bytes.Length);
return Encoding.ASCII.GetString (b,0,b.Length);
}
public static string UrlEncode (byte [] bytes, int offset, int count)
{
if (bytes == null)
return null;
if (bytes.Length == 0)
return "";
byte []b=UrlEncodeToBytes(bytes, offset, count);
return Encoding.ASCII.GetString (b,0,b.Length);
}
public static byte [] UrlEncodeToBytes (string str)
{
return UrlEncodeToBytes (str, Encoding.UTF8);
}
public static byte [] UrlEncodeToBytes (string str, Encoding e)
{
if (str == null)
return null;
if (str == "")
return new byte [0];
byte [] bytes = e.GetBytes (str);
return UrlEncodeToBytes (bytes, 0, bytes.Length);
}
public static byte [] UrlEncodeToBytes (byte [] bytes)
{
if (bytes == null)
return null;
if (bytes.Length == 0)
return new byte [0];
return UrlEncodeToBytes (bytes, 0, bytes.Length);
}
static char [] hexChars = "0123456789abcdef".ToCharArray ();
public static byte [] UrlEncodeToBytes (byte [] bytes, int offset, int count)
{
if (bytes == null)
return null;
int len = bytes.Length;
if (len == 0)
return new byte [0];
if (offset < 0 || offset >= len)
throw new ArgumentOutOfRangeException("offset");
if (count < 0 || count > len - offset)
throw new ArgumentOutOfRangeException("count");
MemoryStream result = new MemoryStream ();
int end = offset + count;
for (int i = offset; i < end; i++) {
char c = (char) bytes [i];
if ((c == ' ') || (c < '0' && c != '-' && c != '.') ||
(c < 'A' && c > '9') ||
(c > 'Z' && c < 'a' && c != '_') ||
(c > 'z')) {
result.WriteByte ((byte) '%');
int idx = ((int) c) >> 4;
result.WriteByte ((byte) hexChars [idx]);
idx = ((int) c) & 0x0F;
result.WriteByte ((byte) hexChars [idx]);
} else {
result.WriteByte ((byte) c);
}
}
return result.ToArray ();
}
public static string UrlEncodeUnicode (string str)
{
if (str == null)
return null;
StringBuilder result = new StringBuilder ();
int end = str.Length;
for (int i = 0; i < end; i++) {
int idx;
char c = str [i];
if (c > 255) {
result.Append ("%u");
idx = ((int) c) >> 24;
result.Append (hexChars [idx]);
idx = (((int) c) >> 16) & 0x0F;
result.Append (hexChars [idx]);
idx = (((int) c) >> 8) & 0x0F;
result.Append (hexChars [idx]);
idx = ((int) c) & 0x0F;
result.Append (hexChars [idx]);
continue;
}
if ((c == ' ') || (c < '0' && c != '-' && c != '.') ||
(c < 'A' && c > '9') ||
(c > 'Z' && c < 'a' && c != '_') ||
(c > 'z')) {
result.Append ('%');
idx = ((int) c) >> 4;
result.Append (hexChars [idx]);
idx = ((int) c) & 0x0F;
result.Append (hexChars [idx]);
continue;
}
result.Append (c);
}
return result.ToString ();
}
public static byte [] UrlEncodeUnicodeToBytes (string str)
{
if (str == null)
return null;
if (str == "")
return new byte [0];
return Encoding.ASCII.GetBytes (UrlEncodeUnicode (str));
}
/// <summary>
/// Decodes an HTML-encoded string and returns the decoded string.
/// </summary>
/// <param name="s">The HTML string to decode. </param>
/// <returns>The decoded text.</returns>
public static string HtmlDecode (string s)
{
if (s == null)
throw new ArgumentNullException ("s");
if (s.IndexOf ('&') == -1)
return s;
bool insideEntity = false; // used to indicate that we are in a potential entity
string entity = String.Empty;
StringBuilder output = new StringBuilder ();
int len = s.Length;
for (int i = 0; i < len; i++) {
char c = s [i];
switch (c) {
case '&' :
output.Append (entity);
entity = "&";
insideEntity = true;
break;
case ';' :
if (!insideEntity) {
output.Append (c);
break;
}
entity += c;
int length = entity.Length;
if (length >= 2 && entity[1] == '#' && entity[2] != ';')
entity = ((char) Int32.Parse (entity.Substring (2, entity.Length - 3))).ToString();
else if (length > 1 && Entities.ContainsKey (entity.Substring (1, entity.Length - 2)))
entity = Entities [entity.Substring (1, entity.Length - 2)].ToString ();
output.Append (entity);
entity = String.Empty;
insideEntity = false;
break;
default :
if (insideEntity)
entity += c;
else
output.Append (c);
break;
}
}
output.Append (entity);
return output.ToString ();
}
/// <summary>
/// Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream.
/// </summary>
/// <param name="s">The HTML string to decode</param>
/// <param name="output">The TextWriter output stream containing the decoded string. </param>
public static void HtmlDecode(string s, TextWriter output)
{
if (s != null)
output.Write (HtmlDecode (s));
}
/// <summary>
/// HTML-encodes a string and returns the encoded string.
/// </summary>
/// <param name="s">The text string to encode. </param>
/// <returns>The HTML-encoded text.</returns>
public static string HtmlEncode (string s)
{
if (s == null)
return null;
StringBuilder output = new StringBuilder ();
foreach (char c in s)
switch (c) {
case '&' :
output.Append ("&amp;");
break;
case '>' :
output.Append ("&gt;");
break;
case '<' :
output.Append ("&lt;");
break;
case '"' :
output.Append ("&quot;");
break;
default:
if ((int) c > 128) {
output.Append ("&#");
output.Append (((int) c).ToString ());
output.Append (";");
}
else
output.Append (c);
break;
}
return output.ToString ();
}
/// <summary>
/// HTML-encodes a string and sends the resulting output to a TextWriter output stream.
/// </summary>
/// <param name="s">The string to encode. </param>
/// <param name="output">The TextWriter output stream containing the encoded string. </param>
public static void HtmlEncode(string s, TextWriter output)
{
if (s != null)
output.Write (HtmlEncode (s));
}
#if NET_1_1
public string UrlPathEncode (string s)
{
if (s == null)
return null;
int idx = s.IndexOf ("?");
string s2 = null;
if (idx != -1) {
s2 = s.Substring (0, idx-1);
s2 = UrlEncode (s2) + s.Substring (idx);
} else {
s2 = UrlEncode (s);
}
return s2;
}
#endif
#endregion // Methods
}
}

View File

@@ -1,322 +0,0 @@
using System;
using System.Diagnostics;
using System.Collections;
using HtmlHelp.ChmDecoding;
namespace HtmlHelp
{
/// <summary>
/// Enumeration for specifying the index type
/// </summary>
public enum IndexType
{
/// <summary>
/// Keyword links should be used
/// </summary>
KeywordLinks = 0,
/// <summary>
/// Associative links should be used
/// </summary>
AssiciativeLinks = 1
}
/// <summary>
/// The class <c>Index</c> holds the (keyword links) KLinks and (associative links) ALinks of the htmlhelp
/// system. It implements methods for easy index-based searching.
/// </summary>
public class Index
{
private ArrayList _kLinks = new ArrayList();
private ArrayList _aLinks = new ArrayList();
/// <summary>
/// Standard constructor
/// </summary>
public Index()
{
}
/// <summary>
/// Constructor of the class
/// </summary>
/// <param name="kLinks">arraylist with keyword links</param>
/// <param name="aLinks">arraylist with associative links</param>
public Index(ArrayList kLinks, ArrayList aLinks)
{
_kLinks= kLinks;
_aLinks = aLinks;
}
/// <summary>
/// Clears the current toc
/// </summary>
public void Clear()
{
if(_aLinks != null)
_aLinks.Clear();
if(_kLinks != null)
_kLinks.Clear();
}
/// <summary>
/// Gets the number of index items for a specific type
/// </summary>
/// <param name="typeOfIndex">type of index</param>
/// <returns>Returns the number of index items for a specific type</returns>
public int Count(IndexType typeOfIndex)
{
ArrayList _index = null;
switch( typeOfIndex )
{
case IndexType.AssiciativeLinks: _index = _aLinks; break;
case IndexType.KeywordLinks: _index = _kLinks; break;
}
if(_index != null)
return _index.Count;
return 0;
}
/// <summary>
/// Gets the internal index list of keyword links
/// </summary>
public ArrayList KLinks
{
get
{
if(_kLinks==null)
_kLinks = new ArrayList();
return _kLinks;
}
}
/// <summary>
/// Gets the internal index list of associative links
/// </summary>
public ArrayList ALinks
{
get
{
if(_aLinks==null)
_aLinks = new ArrayList();
return _aLinks;
}
}
/// <summary>
/// Merges the the index list <c>arrIndex</c> into the current one
/// </summary>
/// <param name="arrIndex">indexlist which should be merged with the current one</param>
/// <param name="typeOfIndex">type of index to merge</param>
public void MergeIndex( ArrayList arrIndex, IndexType typeOfIndex )
{
ArrayList _index = null;
switch(typeOfIndex)
{
case IndexType.AssiciativeLinks: _index = _aLinks;break;
case IndexType.KeywordLinks: _index = _kLinks;break;
}
foreach(IndexItem curItem in arrIndex)
{
//IndexItem searchItem = ContainsIndex(_index, curItem.KeyWordPath);
int insertIndex=0;
IndexItem searchItem = BinSearch(0, _index.Count-1, _index, curItem.KeyWordPath, false, false, ref insertIndex);
if(searchItem != null)
{
// extend the keywords topics
foreach(IndexTopic curEntry in curItem.Topics)
{
searchItem.Topics.Add( curEntry );
}
}
else
{
// add the item to the global collection
//_index.Add( curItem );
if(insertIndex > _index.Count)
_index.Add(curItem);
else
_index.Insert(insertIndex, curItem);
}
}
}
/// <summary>
/// Searches an index entry using recursive binary search algo (divide and conquer).
/// </summary>
/// <param name="nStart">start index for searching</param>
/// <param name="nEnd">end index for searching</param>
/// <param name="arrIndex">arraylist containing sorted IndexItem entries</param>
/// <param name="keywordPath">keyword path to search</param>
/// <param name="searchKeyword">true if the keywordPath will only contain the keyword not the complete path</param>
/// <param name="caseInsensitive">True if case should be ignored</param>
/// <param name="insertIndex">out reference. will receive the index where the item with the
/// keywordPath should be inserted if not found (receives -1 if the item was found)</param>
/// <returns>Returns an IndexItem instance if found, otherwise null
/// (use insertIndex for inserting the new item in a sorted order)</returns>
private IndexItem BinSearch(int nStart, int nEnd, ArrayList arrIndex, string keywordPath,
bool searchKeyword, bool caseInsensitive, ref int insertIndex)
{
if( arrIndex.Count <= 0 )
{
insertIndex=0;
return null;
}
if(caseInsensitive)
keywordPath = keywordPath.ToLower();
if( (nEnd - nStart) > 1)
{
int nCheck = nStart + (nEnd-nStart)/2;
IndexItem iC = arrIndex[nCheck] as IndexItem;
string sCompare = iC.KeyWordPath;
if(searchKeyword)
sCompare = iC.KeyWord;
if(caseInsensitive)
sCompare = sCompare.ToLower();
if( sCompare == keywordPath )
{
insertIndex=-1;
return iC;
}
if( keywordPath.CompareTo(sCompare) < 0 )
{
return BinSearch(nStart, nCheck-1, arrIndex, keywordPath, searchKeyword, caseInsensitive, ref insertIndex);
}
if( keywordPath.CompareTo(sCompare) > 0 )
{
return BinSearch(nCheck+1, nEnd, arrIndex, keywordPath, searchKeyword, caseInsensitive, ref insertIndex);
}
}
else if(nEnd-nStart == 1)
{
IndexItem i1 = arrIndex[nStart] as IndexItem;
IndexItem i2 = arrIndex[nEnd] as IndexItem;
string sCompare1 = i1.KeyWordPath;
if(searchKeyword)
sCompare1 = i1.KeyWord;
if(caseInsensitive)
sCompare1 = sCompare1.ToLower();
string sCompare2 = i2.KeyWordPath;
if(searchKeyword)
sCompare2 = i2.KeyWord;
if(caseInsensitive)
sCompare2 = sCompare2.ToLower();
if( sCompare1 == keywordPath)
{
insertIndex = -1;
return i1;
}
if( sCompare2 == keywordPath)
{
insertIndex = -1;
return i2;
}
if( sCompare1.CompareTo(keywordPath) > 0)
{
insertIndex = nStart;
return null;
}
else if( sCompare2.CompareTo(keywordPath) > 0)
{
insertIndex = nEnd;
return null;
}
else
{
insertIndex = nEnd+1;
}
}
IndexItem itm = arrIndex[nEnd] as IndexItem;
string sCompareI = itm.KeyWordPath;
if(searchKeyword)
sCompareI = itm.KeyWord;
if(caseInsensitive)
sCompareI = sCompareI.ToLower();
if( sCompareI.CompareTo(keywordPath) > 0)
{
insertIndex = nStart;
return null;
}
else if( sCompareI.CompareTo(keywordPath) < 0)
{
insertIndex = nEnd+1;
return null;
}
else
{
insertIndex = -1;
return arrIndex[nEnd] as IndexItem;
}
}
/// <summary>
/// Checks if a keyword exists in a index collection
/// </summary>
/// <param name="arrIndex">index to search (arraylist of IndexItems)</param>
/// <param name="keywordPath">keywordpath to search</param>
/// <returns>Returns the found IndexItem, otherwise null</returns>
private IndexItem ContainsIndex(ArrayList arrIndex, string keywordPath)
{
foreach(IndexItem curItem in arrIndex)
{
if(curItem.KeyWordPath == keywordPath)
return curItem;
}
return null;
}
/// <summary>
/// Searches the alinks- or klinks-index for a specific keyword/associative
/// </summary>
/// <param name="search">keyword/associative to search</param>
/// <param name="typeOfIndex">type of index to search</param>
/// <returns>Returns an ArrayList which contains IndexTopic items or null if nothing was found</returns>
public IndexItem SearchIndex(string search, IndexType typeOfIndex)
{
ArrayList _index = null;
switch( typeOfIndex )
{
case IndexType.AssiciativeLinks: _index = _aLinks;break;
case IndexType.KeywordLinks: _index = _kLinks;break;
}
int insertIdx=0;
IndexItem foundItem = BinSearch(0, _index.Count, _index, search, true, true, ref insertIdx);
return foundItem;
}
}
}

View File

@@ -1,396 +0,0 @@
using System;
using System.IO;
using System.Text;
using System.Collections;
using HtmlHelp.ChmDecoding;
namespace HtmlHelp
{
/// <summary>
/// The class <c>IndexItem</c> implements an help-index item
/// </summary>
public sealed class IndexItem : IComparable
{
/// <summary>
/// Internal member storing the keyword
/// </summary>
private string _keyWord = "";
/// <summary>
/// Internal member storing all associated information type strings
/// </summary>
private ArrayList _infoTypeStrings = new ArrayList();
/// <summary>
/// Internal member storing the flag if this is a see-also keyword
/// </summary>
private bool _isSeeAlso = false;
/// <summary>
/// Internal member storing the indent of the keyword
/// </summary>
private int _indent = 0;
/// <summary>
/// Internal member storing the last index of the keyword in the seperated list
/// </summary>
private int _charIndex = 0;
/// <summary>
/// Internal member storing the entry index
/// </summary>
private int _entryIndex = 0;
/// <summary>
/// Internal member storing an array of see-also values
/// </summary>
private string[] _seeAlso = new string[0];
/// <summary>
/// Internal member storing an array of topic offsets
/// </summary>
private int[] _nTopics = new int[0];
/// <summary>
/// Internal member storing the topics
/// </summary>
private ArrayList _Topics = null;
/// <summary>
/// Associated CHMFile instance
/// </summary>
private CHMFile _chmFile = null;
/// <summary>
/// Internal flag specifying the chm file path
/// </summary>
private string _chmFileName = "";
/// <summary>
/// Constructor of the class
/// </summary>
/// <param name="chmFile">associated CHMFile instance</param>
/// <param name="keyWord">keyword</param>
/// <param name="isSeeAlso">true if it is a see-also keyword</param>
/// <param name="indent">indent of the entry</param>
/// <param name="charIndex">char index of the last keyword in the separated list</param>
/// <param name="entryIndex">index of the entry</param>
/// <param name="seeAlsoValues">string array with see-also values</param>
/// <param name="topicOffsets">integer array with topic offsets</param>
internal IndexItem(CHMFile chmFile, string keyWord, bool isSeeAlso, int indent, int charIndex, int entryIndex, string[] seeAlsoValues, int[] topicOffsets)
{
_chmFile = chmFile;
_chmFileName = _chmFile.ChmFilePath;
_keyWord = keyWord;
_isSeeAlso = isSeeAlso;
_indent = indent;
_charIndex = charIndex;
_entryIndex = entryIndex;
_seeAlso = seeAlsoValues;
_nTopics = topicOffsets;
}
/// <summary>
/// Standard constructor
/// </summary>
public IndexItem()
{
}
#region Data dumping
/// <summary>
/// Dump the class data to a binary writer
/// </summary>
/// <param name="writer">writer to write the data</param>
/// <param name="writeFileName">true if the chm filename should be written</param>
internal void Dump(ref BinaryWriter writer, bool writeFileName)
{
int i=0;
writer.Write(_keyWord);
writer.Write(_isSeeAlso);
writer.Write(_indent);
if(writeFileName)
writer.Write(_chmFileName);
writer.Write(_infoTypeStrings.Count);
for(i=0; i<_infoTypeStrings.Count; i++)
writer.Write( (_infoTypeStrings[i]).ToString() );
writer.Write(_seeAlso.Length);
for(i=0; i<_seeAlso.Length; i++)
{
if(_seeAlso[i] == null)
writer.Write("");
else
writer.Write( _seeAlso[i] );
}
writer.Write(Topics.Count);
for(i=0; i<Topics.Count; i++)
{
IndexTopic topic = ((IndexTopic)(Topics[i]));
topic.Dump(ref writer);
}
}
/// <summary>
/// Dump the class data to a binary writer
/// </summary>
/// <param name="writer">writer to write the data</param>
internal void Dump(ref BinaryWriter writer)
{
Dump(ref writer, false);
}
/// <summary>
/// Reads the object data from a dump store
/// </summary>
/// <param name="reader">reader to read the data</param>
/// <param name="filesList">filelist from helpsystem</param>
internal bool ReadDump(ref BinaryReader reader, ArrayList filesList)
{
int i=0;
_keyWord = reader.ReadString();
_isSeeAlso = reader.ReadBoolean();
_indent = reader.ReadInt32();
_chmFileName = reader.ReadString();
foreach(CHMFile curFile in filesList)
{
if(curFile.ChmFilePath == _chmFileName)
{
_chmFile = curFile;
break;
}
}
if(_chmFile==null)
return false;
int nCnt = reader.ReadInt32();
for(i=0; i<nCnt; i++)
{
string sIT = reader.ReadString();
_infoTypeStrings.Add(sIT);
}
nCnt = reader.ReadInt32();
_seeAlso = new string[nCnt];
for(i=0; i<nCnt; i++)
{
_seeAlso[i] = reader.ReadString();
}
nCnt = reader.ReadInt32();
for(i=0; i<nCnt; i++)
{
IndexTopic topic = new IndexTopic("","","","");
topic.SetChmInfo( _chmFile.CompileFile, _chmFile.ChmFilePath);
topic.AssociatedFile = _chmFile;
topic.ReadDump(ref reader);
Topics.Add(topic);
}
return true;
}
/// <summary>
/// Reads the object data from a dump store
/// </summary>
/// <param name="reader">reader to read the data</param>
internal void ReadDump(ref BinaryReader reader)
{
int i=0;
_keyWord = reader.ReadString();
_isSeeAlso = reader.ReadBoolean();
_indent = reader.ReadInt32();
int nCnt = reader.ReadInt32();
for(i=0; i<nCnt; i++)
{
string sIT = reader.ReadString();
_infoTypeStrings.Add(sIT);
}
nCnt = reader.ReadInt32();
_seeAlso = new string[nCnt];
for(i=0; i<nCnt; i++)
{
_seeAlso[i] = reader.ReadString();
}
nCnt = reader.ReadInt32();
for(i=0; i<nCnt; i++)
{
IndexTopic topic = new IndexTopic("","","","");
topic.AssociatedFile = _chmFile;
topic.SetChmInfo( _chmFile.CompileFile, _chmFile.ChmFilePath);
topic.ReadDump(ref reader);
Topics.Add(topic);
}
}
#endregion
/// <summary>
/// Implements the compareto method which allows sorting.
/// </summary>
/// <param name="obj">object to compare to</param>
/// <returns>See <see cref="System.IComparable">IComparable.CompareTo()</see></returns>
public int CompareTo(object obj)
{
if( obj.GetType() == this.GetType() )
{
IndexItem cmp = (IndexItem)obj;
return this.KeyWordPath.CompareTo( cmp.KeyWordPath );
}
return 0;
}
/// <summary>
/// Gets/Sets the associated CHMFile instance
/// </summary>
internal CHMFile ChmFile
{
get { return _chmFile; }
set { _chmFile = value; }
}
/// <summary>
/// Gets the ArrayList which holds all information types/categories this item is associated
/// </summary>
internal ArrayList InfoTypeStrings
{
get { return _infoTypeStrings; }
}
/// <summary>
/// Adds a see-also string to the index item and marks it as see also item
/// </summary>
/// <param name="seeAlsoString">see also string to add</param>
internal void AddSeeAlso(string seeAlsoString)
{
string[] seeAlso = new string[ _seeAlso.Length +1 ];
for(int i=0; i<_seeAlso.Length; i++)
seeAlso[i] = _seeAlso[i];
seeAlso[_seeAlso.Length] = seeAlsoString;
_seeAlso = seeAlso;
_isSeeAlso = true;
}
/// <summary>
/// Gets/Sets the full keyword-path of this item ( ", " separated list)
/// </summary>
public string KeyWordPath
{
get { return _keyWord; }
set { _keyWord = value; }
}
/// <summary>
/// Gets the keyword of this item
/// </summary>
public string KeyWord
{
get
{
return _keyWord.Substring(_charIndex, _keyWord.Length-_charIndex);
}
}
/// <summary>
/// Gets the keyword of this item with prefixing indent spaces
/// </summary>
public string IndentKeyWord
{
get
{
string sKW = this.KeyWord;
StringBuilder sb = new StringBuilder("",this.Indent*3 + sKW.Length);
for(int i=0; i<this.Indent; i++)
sb.Append(" ");
sb.Append(sKW);
return sb.ToString();
}
}
/// <summary>
/// Gets/Sets the see-also flag of this item
/// </summary>
public bool IsSeeAlso
{
get { return _isSeeAlso; }
set { _isSeeAlso = value; }
}
/// <summary>
/// Gets/Sets the listbox indent for this item
/// </summary>
public int Indent
{
get { return _indent; }
set { _indent = value; }
}
/// <summary>
/// Gets/Sets the character index of an indent keyword
/// </summary>
public int CharIndex
{
get { return _charIndex; }
set { _charIndex = value; }
}
/// <summary>
/// Gets the see-also values of this item
/// </summary>
public string[] SeeAlso
{
get { return _seeAlso; }
}
/// <summary>
/// Gets an array with the associated topics
/// </summary>
public ArrayList Topics
{
get
{
if( _Topics == null )
{
if(IsSeeAlso)
{
_Topics = new ArrayList();
}
else
{
if( (_chmFile != null) && (_chmFile.TopicsFile != null) )
{
_Topics = new ArrayList();
for(int i=0; i<_nTopics.Length; i++)
{
IndexTopic newTopic = IndexTopic.FromTopicEntry((TopicEntry)_chmFile.TopicsFile.TopicTable[ _nTopics[i] ]);
newTopic.AssociatedFile = _chmFile;
_Topics.Add( newTopic );
}
}
else
{
_Topics = new ArrayList();
}
}
}
return _Topics;
}
}
}
}

View File

@@ -1,216 +0,0 @@
using System;
using System.IO;
using HtmlHelp.ChmDecoding;
namespace HtmlHelp
{
/// <summary>
/// The class <c>IndexTopic</c> implements an entry for the <see cref="IndexItem">IndexItem</see> topics list.
/// </summary>
public sealed class IndexTopic
{
private DataMode _topicMode = DataMode.TextBased;
private string _title="";
private string _local="";
private string _compileFile = "";
private string _chmPath = "";
private int _topicOffset = -1;
private CHMFile _associatedFile = null;
/// <summary>
/// Creates a new instance of the class based on an existing TopicEntry
/// </summary>
/// <param name="entry"></param>
internal static IndexTopic FromTopicEntry(TopicEntry entry)
{
return new IndexTopic(entry.EntryOffset, entry.ChmFile);
//return new IndexTopic( entry.Title, entry.Locale, entry.ChmFile.CompileFile, entry.ChmFile.ChmFilePath);
}
/// <summary>
/// Creates a new instance of the class (binary extraction mode)
/// </summary>
/// <param name="topicOffset">offset of the topic entry</param>
/// <param name="associatedFile">associated CHMFile instance</param>
internal IndexTopic(int topicOffset, CHMFile associatedFile)
{
_topicMode = DataMode.Binary;
_topicOffset = topicOffset;
_associatedFile = associatedFile;
}
/// <summary>
/// Constructor of the class
/// </summary>
/// <param name="Title">topic title</param>
/// <param name="local">topic local (content filename)</param>
/// <param name="compilefile">name of the chm file (location of topic)</param>
/// <param name="chmpath">path of the chm file</param>
public IndexTopic(string Title, string local, string compilefile, string chmpath)
{
_topicMode = DataMode.TextBased;
_title = Title;
_local = local;
_compileFile = compilefile;
_chmPath = chmpath;
}
#region Data dumping
/// <summary>
/// Dump the class data to a binary writer
/// </summary>
/// <param name="writer">writer to write the data</param>
internal void Dump(ref BinaryWriter writer)
{
writer.Write((int)_topicMode);
if(_topicMode==DataMode.TextBased)
{
writer.Write(_title);
writer.Write(_local);
}
else
{
writer.Write(_topicOffset);
}
}
/// <summary>
/// Reads the object data from a dump store
/// </summary>
/// <param name="reader">reader to read the data</param>
internal void ReadDump(ref BinaryReader reader)
{
_topicMode = (DataMode)reader.ReadInt32();
if(_topicMode==DataMode.TextBased)
{
_title = reader.ReadString();
_local = reader.ReadString();
}
else
{
_topicOffset = reader.ReadInt32();
}
}
#endregion
/// <summary>
/// Internally used to set the chm-finos when reading from dump store
/// </summary>
/// <param name="compilefile"></param>
/// <param name="chmpath"></param>
internal void SetChmInfo(string compilefile, string chmpath)
{
_compileFile = compilefile;
_chmPath = chmpath;
}
/// <summary>
/// Gets/Sets the associated CHMFile instance
/// </summary>
internal CHMFile AssociatedFile
{
get { return _associatedFile; }
set { _associatedFile = value; }
}
/// <summary>
/// Gets the topic title
/// </summary>
public string Title
{
get
{
if((_topicMode == DataMode.Binary )&&(_associatedFile!=null))
{
if( _topicOffset >= 0)
{
TopicEntry te = (TopicEntry) (_associatedFile.TopicsFile[_topicOffset]);
if(te != null)
{
return te.Title;
}
}
}
return _title;
}
}
/// <summary>
/// Gets the local (content filename)
/// </summary>
public string Local
{
get
{
if((_topicMode == DataMode.Binary )&&(_associatedFile!=null))
{
if( _topicOffset >= 0)
{
TopicEntry te = (TopicEntry) (_associatedFile.TopicsFile[_topicOffset]);
if(te != null)
{
return te.Locale;
}
}
}
return _local;
}
}
/// <summary>
/// Gets the compile file (location)
/// </summary>
public string CompileFile
{
get
{
if(_associatedFile != null)
return _associatedFile.CompileFile;
return _compileFile;
}
}
/// <summary>
/// Gets the chm file path
/// </summary>
public string ChmFilePath
{
get
{
if(_associatedFile != null)
return _associatedFile.ChmFilePath;
return _chmPath;
}
}
/// <summary>
/// Gets the url
/// </summary>
public string URL
{
get
{
string sL = Local;
if(sL.Length<=0)
return "";//"about:blank";
if( (sL.ToLower().IndexOf("http://") >= 0) ||
(sL.ToLower().IndexOf("https://") >= 0) ||
(sL.ToLower().IndexOf("mailto:") >= 0) ||
(sL.ToLower().IndexOf("ftp://") >= 0) ||
(sL.ToLower().IndexOf("ms-its:") >= 0))
return sL;
return HtmlHelpSystem.UrlPrefix + ChmFilePath + "::/" + sL;
}
}
}
}

View File

@@ -1,146 +0,0 @@
using System;
using System.IO;
namespace HtmlHelp
{
/// <summary>
/// Enumeration for specifying the mode of the information type
/// </summary>
public enum InformationTypeMode
{
/// <summary>
/// Inclusive information type. The user will be allowed to select from one or more information types.
/// </summary>
Inclusive = 0,
/// <summary>
/// Exclusive information type. The user will be allowed to choose only one information type within each category
/// </summary>
Exclusive = 1,
/// <summary>
/// Hidden information type. The user cannot see this information types (only for API calls).
/// </summary>
Hidden = 2
}
/// <summary>
/// The class <c>InformationType</c> implements a methods/properties for an information type.
/// </summary>
/// <remarks>Note: Information types and categories allow users to filter help contents.
/// They are only supported if using sitemap TOC and/or sitemap Index.</remarks>
public class InformationType
{
private string _name = "";
private string _description = "";
private InformationTypeMode _typeMode = InformationTypeMode.Inclusive;
private bool _isInCategory = false;
private int _referenceCount = 1;
/// <summary>
/// Standard constructor
/// </summary>
/// <remarks>the mode is set to InformationTypeMode.Inclusive by default</remarks>
public InformationType() : this("","")
{
}
/// <summary>
/// Standard constructor
/// </summary>
/// <param name="name">name of the information type</param>
/// <param name="description">description</param>
/// <remarks>the mode is set to InformationTypeMode.Inclusive by default</remarks>
public InformationType(string name, string description) : this(name, description, InformationTypeMode.Inclusive)
{
}
/// <summary>
/// Standard constructor
/// </summary>
/// <param name="name">name of the information type</param>
/// <param name="description">description</param>
/// <param name="mode">mode of the information type</param>
public InformationType(string name, string description, InformationTypeMode mode)
{
_name = name;
_description = description;
_typeMode = mode;
}
#region Data dumping
/// <summary>
/// Dump the class data to a binary writer
/// </summary>
/// <param name="writer">writer to write the data</param>
internal void Dump(ref BinaryWriter writer)
{
writer.Write( (int)_typeMode );
writer.Write( _name );
writer.Write( _description );
}
/// <summary>
/// Reads the object data from a dump store
/// </summary>
/// <param name="reader">reader to read the data</param>
internal void ReadDump(ref BinaryReader reader)
{
_typeMode = (InformationTypeMode)reader.ReadInt32();
_name = reader.ReadString();
_description = reader.ReadString();
}
#endregion
/// <summary>
/// Sets the flag if this information type is nested in at least one category
/// </summary>
/// <param name="newValue">true or false</param>
internal void SetCategoryFlag(bool newValue)
{
_isInCategory = newValue;
}
/// <summary>
/// Gets/Sets the reference count of this information type instance
/// </summary>
internal int ReferenceCount
{
get { return _referenceCount; }
set { _referenceCount = value; }
}
/// <summary>
/// Gets true if this information type is nested in at least one category
/// </summary>
public bool IsInCategory
{
get { return _isInCategory; }
}
/// <summary>
/// Gets/Sets the name of the information type
/// </summary>
public string Name
{
get { return _name; }
set { _name = value; }
}
/// <summary>
/// Gets/Sets the description of the information type
/// </summary>
public string Description
{
get { return _description; }
set { _name = value; }
}
/// <summary>
/// Gets/Sets the mode of the information type
/// </summary>
public InformationTypeMode Mode
{
get { return _typeMode; }
set { _typeMode = value; }
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,494 +0,0 @@
using System;
using System.IO;
using System.Collections;
using System.Windows.Forms;
using HtmlHelp.ChmDecoding;
namespace HtmlHelp
{
/// <summary>
/// The class <c>TOCItem</c> implements a toc-entry item
/// </summary>
public sealed class TOCItem
{
/// <summary>
/// Constant for standard folder (closed) image index (HH2 image list)
/// </summary>
public const int STD_FOLDER_HH2 = 4;
/// <summary>
/// Constant for standard folder (opened) image index (HH2 image list)
/// </summary>
public const int STD_FOLDER_OPEN_HH2 = 6;
/// <summary>
/// Constant for standard file image index (HH2 image list)
/// </summary>
public const int STD_FILE_HH2 = 16;
/// <summary>
/// Constant for standard folder (closed) image index (HH1 image list)
/// </summary>
public const int STD_FOLDER_HH1 = 0;
/// <summary>
/// Constant for standard folder (opened) image index (HH1 image list)
/// </summary>
public const int STD_FOLDER_OPEN_HH1 = 1;
/// <summary>
/// Constant for standard file image index (HH1 image list)
/// </summary>
public const int STD_FILE_HH1 = 10;
/// <summary>
/// Internal flag specifying the data extraction mode used for this item
/// </summary>
private DataMode _tocMode = DataMode.TextBased;
/// <summary>
/// Internal member storing the offset (only used in binary tocs)
/// </summary>
private int _offset = 0;
/// <summary>
/// Internal member storing the offset of the next item(only used in binary tocs)
/// </summary>
private int _offsetNext = 0;
/// <summary>
/// Internal member storing a merge link.
/// If the target file is in the merged files list of the CHM,
/// this item will be replaced with the target TOC or Topic, if not it will
/// be removed from TOC.
/// </summary>
private string _mergeLink = "";
/// <summary>
/// Internal member storing the toc name
/// </summary>
private string _name = "";
/// <summary>
/// Internal member storing the toc loca (content file)
/// </summary>
private string _local = "";
/// <summary>
/// Internal member storing all associated information type strings
/// </summary>
private ArrayList _infoTypeStrings = new ArrayList();
/// <summary>
/// Internal member storing the associated chm file
/// </summary>
private string _chmFile = "";
/// <summary>
/// Internal member storing the image index
/// </summary>
private int _imageIndex = -1;
/// <summary>
/// Internal member storing the offset of the associated topic entry (for binary tocs)
/// </summary>
private int _topicOffset = -1;
/// <summary>
/// Internal member storing the toc children
/// </summary>
private ArrayList _children = new ArrayList();
/// <summary>
/// Internal member storing the parameter collection
/// </summary>
private Hashtable _otherParams = new Hashtable();
/// <summary>
/// Internal member storing the associated chmfile object
/// </summary>
private CHMFile _associatedFile = null;
/// <summary>
/// Parent item
/// </summary>
private TOCItem _parent=null;
/// <summary>
/// Holds a pointer to the next item in the TOC
/// </summary>
public TOCItem Next=null;
/// <summary>
/// Holds a pointer to the previous item in the TOC
/// </summary>
public TOCItem Prev=null;
/// <summary>
/// Holds a pointer to the TreeNode where this TOC Item is used
/// </summary>
public System.Windows.Forms.TreeNode treeNode=null;
/// <summary>
/// Constructor of the class used during text-based data extraction
/// </summary>
/// <param name="name">name of the item</param>
/// <param name="local">local content file</param>
/// <param name="ImageIndex">image index</param>
/// <param name="chmFile">associated chm file</param>
public TOCItem(string name, string local, int ImageIndex, string chmFile)
{
_tocMode = DataMode.TextBased;
_name = name;
_local = local;
_imageIndex = ImageIndex;
_chmFile = chmFile;
}
/// <summary>
/// Constructor of the class used during binary data extraction
/// </summary>
/// <param name="topicOffset">offset of the associated topic entry</param>
/// <param name="ImageIndex">image index to use</param>
/// <param name="associatedFile">associated chm file</param>
public TOCItem(int topicOffset, int ImageIndex, CHMFile associatedFile)
{
_tocMode = DataMode.Binary;
_associatedFile = associatedFile;
_chmFile = associatedFile.ChmFilePath;
_topicOffset = topicOffset;
_imageIndex = ImageIndex;
}
/// <summary>
/// Standard constructor
/// </summary>
public TOCItem()
{
}
#region Data dumping
/// <summary>
/// Dump the class data to a binary writer
/// </summary>
/// <param name="writer">writer to write the data</param>
/// <param name="writeFilename">true if the chmfile name should be written</param>
internal void Dump(ref BinaryWriter writer, bool writeFilename)
{
writer.Write((int)_tocMode);
writer.Write(_topicOffset);
writer.Write(_name);
if((_tocMode == DataMode.TextBased)||(_topicOffset<0))
{
writer.Write(_local);
}
writer.Write(_imageIndex);
writer.Write(_mergeLink);
if(writeFilename)
writer.Write(_chmFile);
writer.Write(_infoTypeStrings.Count);
for(int i=0; i<_infoTypeStrings.Count; i++)
writer.Write( (_infoTypeStrings[i]).ToString() );
writer.Write(_children.Count);
for(int i=0; i<_children.Count; i++)
{
TOCItem child = ((TOCItem)(_children[i]));
child.Dump(ref writer, writeFilename);
}
}
/// <summary>
/// Dump the class data to a binary writer
/// </summary>
/// <param name="writer">writer to write the data</param>
internal void Dump(ref BinaryWriter writer)
{
Dump(ref writer, false);
}
/// <summary>
/// Reads the object data from a dump store
/// </summary>
/// <param name="reader">reader to read the data</param>
/// <param name="readFilename">true if the chmfile name should be read</param>
internal void ReadDump(ref BinaryReader reader, bool readFilename)
{
int i=0;
_tocMode = (DataMode)reader.ReadInt32();
_topicOffset = reader.ReadInt32();
_name = reader.ReadString();
if((_tocMode == DataMode.TextBased)||(_topicOffset<0))
{
_local = reader.ReadString();
}
_imageIndex = reader.ReadInt32();
_mergeLink = reader.ReadString();
if(readFilename)
_chmFile = reader.ReadString();
int nCnt = reader.ReadInt32();
for(i=0; i<nCnt; i++)
{
string sIT = reader.ReadString();
_infoTypeStrings.Add(sIT);
}
nCnt = reader.ReadInt32();
if(_associatedFile != null)
_chmFile = _associatedFile.ChmFilePath;
for(i=0; i<nCnt; i++)
{
TOCItem child = new TOCItem();
child.AssociatedFile = _associatedFile;
child.ReadDump(ref reader, readFilename);
if(_associatedFile != null)
child.ChmFile = _associatedFile.ChmFilePath;
else if(!readFilename)
child.ChmFile = _chmFile;
child.Parent = this;
_children.Add(child);
if(child.MergeLink.Length > 0)
_associatedFile.MergLinks.Add(child);
}
}
/// <summary>
/// Reads the object data from a dump store
/// </summary>
/// <param name="reader">reader to read the data</param>
internal void ReadDump(ref BinaryReader reader)
{
ReadDump(ref reader, false);
}
#endregion
/// <summary>
/// Gets/Sets the data extraction mode with which this item was created.
/// </summary>
internal DataMode TocMode
{
get { return _tocMode; }
set { _tocMode = value; }
}
/// <summary>
/// Gets/Sets the offset of the associated topic entry
/// </summary>
internal int TopicOffset
{
get { return _topicOffset; }
set { _topicOffset = value; }
}
/// <summary>
/// Gets/Sets the associated CHMFile instance
/// </summary>
internal CHMFile AssociatedFile
{
get { return _associatedFile; }
set
{
_associatedFile = value;
}
}
/// <summary>
/// Gets/Sets the offset of the item.
/// </summary>
/// <remarks>Only used in binary tocs</remarks>
internal int Offset
{
get { return _offset; }
set { _offset = value; }
}
/// <summary>
/// Gets/Sets the offset of the next item.
/// </summary>
/// <remarks>Only used in binary tocs</remarks>
internal int OffsetNext
{
get { return _offsetNext; }
set { _offsetNext = value; }
}
/// <summary>
/// Gets the ArrayList which holds all information types/categories this item is associated
/// </summary>
internal ArrayList InfoTypeStrings
{
get { return _infoTypeStrings; }
}
/// <summary>
/// Gets/Sets the parent of this item
/// </summary>
public TOCItem Parent
{
get { return _parent; }
set { _parent = value; }
}
/// <summary>
/// Gets/Sets the mergelink for this item.
/// <b>You should not set the mergedlink by your own !</b>
/// This is only for loading merged CHMs.
/// </summary>
public string MergeLink
{
get { return _mergeLink; }
set { _mergeLink = value; }
}
/// <summary>
/// Gets/Sets the name of the item
/// </summary>
public string Name
{
get
{
if(_mergeLink.Length > 0)
return "";
if(_name.Length <= 0)
{
if((_tocMode == DataMode.Binary )&&(_associatedFile!=null))
{
if( _topicOffset >= 0)
{
TopicEntry te = (TopicEntry) (_associatedFile.TopicsFile[_topicOffset]);
if(te != null)
{
return te.Title;
}
}
}
}
return _name;
}
set
{
_name = value;
}
}
/// <summary>
/// Gets/Sets the local of the item
/// </summary>
public string Local
{
get
{
if(_mergeLink.Length > 0)
return "";
if(_local.Length <= 0)
{
if((_tocMode == DataMode.Binary )&&(_associatedFile!=null))
{
if( _topicOffset >= 0)
{
TopicEntry te = (TopicEntry) (_associatedFile.TopicsFile[_topicOffset]);
if(te != null)
{
return te.Locale;
}
}
}
}
return _local;
}
set { _local = value; }
}
/// <summary>
/// Gets/Sets the chm file
/// </summary>
public string ChmFile
{
get
{
if(_associatedFile!=null)
return _associatedFile.ChmFilePath;
return _chmFile;
}
set { _chmFile = value; }
}
/// <summary>
/// Gets the url for the webbrowser for this file
/// </summary>
public string Url
{
get
{
string sL = Local;
if( (sL.ToLower().IndexOf("http://") >= 0) ||
(sL.ToLower().IndexOf("https://") >= 0) ||
(sL.ToLower().IndexOf("mailto:") >= 0) ||
(sL.ToLower().IndexOf("ftp://") >= 0) ||
(sL.ToLower().IndexOf("ms-its:") >= 0))
return sL;
return HtmlHelpSystem.UrlPrefix + ChmFile + "::/" + sL;
}
}
/// <summary>
/// Gets/Sets the image index of the item
/// </summary>
/// <remarks>Set this to -1 for a default icon</remarks>
public int ImageIndex
{
get
{
if( _imageIndex == -1)
{
int nFolderAdd = 0;
if((_associatedFile != null) && (_associatedFile.ImageTypeFolder))
{
// get the value which should be added, to display folders instead of books
if(HtmlHelpSystem.UseHH2TreePics)
nFolderAdd = 8;
else
nFolderAdd = 4;
}
if( _children.Count > 0)
return (HtmlHelpSystem.UseHH2TreePics ? (STD_FOLDER_HH2+nFolderAdd) : (STD_FOLDER_HH1+nFolderAdd));
return (HtmlHelpSystem.UseHH2TreePics ? STD_FILE_HH2 : STD_FILE_HH1);
}
return _imageIndex;
}
set { _imageIndex = value; }
}
/// <summary>
/// Gets/Sets the children of this item.
/// </summary>
/// <remarks>Each entry in the ArrayList is of type TOCItem</remarks>
public ArrayList Children
{
get { return _children; }
set { _children = value; }
}
/// <summary>
/// Gets the internal hashtable storing all params
/// </summary>
public Hashtable Params
{
get { return _otherParams; }
}
}
}

View File

@@ -1,198 +0,0 @@
using System;
using System.Diagnostics;
using System.Collections;
using HtmlHelp.ChmDecoding;
namespace HtmlHelp
{
/// <summary>
/// The class <c>TableOfContents</c> holds the TOC of the htmlhelp system class.
/// </summary>
public class TableOfContents
{
private ArrayList _toc = new ArrayList();
/// <summary>
/// Standard constructor
/// </summary>
public TableOfContents()
{
}
/// <summary>
/// Constructor of the class
/// </summary>
/// <param name="toc"></param>
public TableOfContents(ArrayList toc)
{
_toc = toc;
}
/// <summary>
/// Gets the internal stored table of contents
/// </summary>
public ArrayList TOC
{
get { return _toc; }
}
/// <summary>
/// Clears the current toc
/// </summary>
public void Clear()
{
if(_toc!=null)
_toc.Clear();
}
/// <summary>
/// Gets the number of topics in the toc
/// </summary>
/// <returns>Returns the number of topics in the toc</returns>
public int Count()
{
if(_toc!=null)
return _toc.Count;
else
return 0;
}
/// <summary>
/// Merges the <c>arrToC</c> list to the one in this instance
/// </summary>
/// <param name="arrToC">the toc list which should be merged with the current one</param>
internal void MergeToC( ArrayList arrToC )
{
if(_toc==null)
_toc = new ArrayList();
MergeToC(_toc, arrToC, null);
}
/// <summary>
/// Merges the <c>arrToC</c> list to the one in this instance (called if merged files
/// were found in a CHM)
/// </summary>
/// <param name="arrToC">the toc list which should be merged with the current one</param>
/// <param name="openFiles">An arraylist of CHMFile instances.</param>
internal void MergeToC( ArrayList arrToC, ArrayList openFiles )
{
if(_toc==null)
_toc = new ArrayList();
MergeToC(_toc, arrToC, openFiles);
}
/// <summary>
/// Internal method for recursive toc merging
/// </summary>
/// <param name="globalLevel">level of global toc</param>
/// <param name="localLevel">level of local toc</param>
/// <param name="openFiles">An arraylist of CHMFile instances.</param>
private void MergeToC( ArrayList globalLevel, ArrayList localLevel, ArrayList openFiles )
{
foreach( TOCItem curItem in localLevel)
{
// if it is a part of the merged-links, we have to do nothing,
// because the method HtmlHelpSystem.RecalculateMergeLinks() has already
// placed this item at its correct position.
if(!IsMergedItem(curItem.Name, curItem.Local, openFiles))
{
TOCItem globalItem = ContainsToC(globalLevel, curItem.Name);
if(globalItem == null)
{
// the global toc doesn't have a topic with this name
// so we need to add the complete toc node to the global toc
globalLevel.Add( curItem );
}
else
{
// the global toc contains the current topic
// advance to the next level
if( (globalItem.Local.Length <= 0) && (curItem.Local.Length > 0) )
{
// set the associated url
globalItem.Local = curItem.Local;
globalItem.ChmFile = curItem.ChmFile;
}
MergeToC(globalItem.Children, curItem.Children);
}
}
}
}
/// <summary>
/// Checks if the item is part of the merged-links
/// </summary>
/// <param name="name">name of the topic</param>
/// <param name="local">local of the topic</param>
/// <param name="openFiles">An arraylist of CHMFile instances.</param>
/// <returns>Returns true if this item is part of the merged-links</returns>
private bool IsMergedItem(string name, string local, ArrayList openFiles)
{
if(openFiles==null)
return false;
foreach(CHMFile curFile in openFiles)
{
foreach(TOCItem curItem in curFile.MergLinks)
if( (curItem.Name == name) && (curItem.Local == local) )
return true;
}
return false;
}
/// <summary>
/// Checks if a topicname exists in a SINGLE toc level
/// </summary>
/// <param name="arrToC">toc list</param>
/// <param name="Topic">topic to search</param>
/// <returns>Returns the topic item if found, otherwise null</returns>
private TOCItem ContainsToC(ArrayList arrToC, string Topic)
{
foreach(TOCItem curItem in arrToC)
{
if(curItem.Name == Topic)
return curItem;
}
return null;
}
/// <summary>
/// Searches the table of contents for a special topic
/// </summary>
/// <param name="topic">topic to search</param>
/// <returns>Returns an instance of TOCItem if found, otherwise null</returns>
public TOCItem SearchTopic(string topic)
{
return SearchTopic(topic, _toc);
}
/// <summary>
/// Internal recursive tree search
/// </summary>
/// <param name="topic">topic to search</param>
/// <param name="searchIn">tree level list to look in</param>
/// <returns>Returns an instance of TOCItem if found, otherwise null</returns>
private TOCItem SearchTopic(string topic, ArrayList searchIn)
{
foreach(TOCItem curItem in searchIn)
{
if(curItem.Name.ToLower() == topic.ToLower() )
return curItem;
if(curItem.Children.Count>0)
{
TOCItem nf = SearchTopic(topic, curItem.Children);
if(nf != null)
return nf;
}
}
return null;
}
}
}

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