Compare commits

...

2129 Commits

Author SHA1 Message Date
KJK::Hyperion
0a36c36ad7 HEAD merge. Last HEAD merge of the year, not that I'll miss them
svn path=/branches/ELF_support/; revision=12397
2004-12-30 04:37:19 +00:00
KJK::Hyperion
a078cc2f8e - include/elf/common.h: use EM_XXX constants straight from the ABI (the most complete list)
- include/elf/elf-i386.h, include/elf/machine.h: allow architecture-specific headers not matching the build target to be included
 - include/elf/elf32.h, include/elf/elf64.h: use long integer types because nearly all the code in ReactOS does
 - include/pe.h: added some missing constants
 - include/reactos/exefmt.h: added some constants required for full ELF support
 - lib/ntdll/ldr/utils.c: deleted experimental DbgPrint calls I committed by mistake
 - ntoskrnl/Makefile, ntoskrnl/mm/elf.c, ntoskrnl/mm/elf32.c, ntoskrnl/mm/elf64.c: ELF support added to the memory manager. It supports both ELF32 and ELF64, on all architectures, and can map executables with the "wrong" architecture and endianness as required for SEC_IMAGE sections. Scrapped the limited FreeBSD implementation completely. Limits of the loader: doesn't support non-contiguous images (like several non-PIC EXEs), doesn't support images with a virtual size larger than 4GB, doesn't support images with loadable parts whose file offset + size points to beyond ~8EB (Exabytes) into the file - all internal hard limits of the kernel I don't feel like fixing right now - and doesn't fully support Winelib executables yet
 - ntoskrnl/include/internal/mm.h: use LONGLONG for MM_SECTION_SEGMENT.FileOffset, reintroduced MM_SECTION_SEGMENT.WriteCopy, re-limit segments to 4GB each (will raise the limit to MAXULONG_PTR shortly)
 - ntoskrnl/mm/386/page.c: partial merge with HEAD
 - ntoskrnl/mm/pe.c: cleanup of data types, internal helper functions and debug messages; corrected some small bugs; added ASSERTs; set the correct characteristics for the headers segment; adapted to the reintroduction of MM_SECTION_SEGMENT.WriteCopy; disabled debug messages
 - ntoskrnl/mm/section.c: major cleanup, bug-hunt came to an end, finalized the preliminary support for multiple executable formats, temporarily gave up about a lot of ugliness

svn path=/branches/ELF_support/; revision=12390
2004-12-30 01:59:59 +00:00
The ReactOS Team
9554754a7d This commit was manufactured by cvs2svn to create branch 'ELF_support'.
svn path=/branches/ELF_support/; revision=12334
2004-12-25 21:30:20 +00:00
Art Yerkes
af8cd05c99 Added a (currently unworking) accept implementation. Needs work, but doesn't
break anything.
Committed a patch by GvG:
 - SignalSocket: Removed collected parameter, changed Information to actual
   number of bytes returned.

svn path=/trunk/; revision=12333
2004-12-25 21:30:20 +00:00
Filip Navara
bcf559d5f2 - Fix compilation with MinGW runtime 3.5.
svn path=/trunk/; revision=12332
2004-12-25 21:05:19 +00:00
Filip Navara
681a0743e5 - Fix finding of windows by classes in NtUserFindWindow.
- Marshal WM_COPYDATA messages.

svn path=/trunk/; revision=12331
2004-12-25 20:30:50 +00:00
Filip Navara
2d0fbe6020 - Fix KDBG build that I've broken.
svn path=/trunk/; revision=12330
2004-12-25 19:38:17 +00:00
Filip Navara
2aab39efbd - Fix a typo.
svn path=/trunk/; revision=12329
2004-12-25 15:33:30 +00:00
Filip Navara
373381ed59 - Fix comparsion that I broke with my last commit.
svn path=/trunk/; revision=12328
2004-12-25 14:22:57 +00:00
Filip Navara
32dfb00066 - Fix yet another double completition error.
svn path=/trunk/; revision=12327
2004-12-25 12:07:24 +00:00
Filip Navara
c7505530e0 - Fix compilation with GCC 4.0-20041219.
svn path=/trunk/; revision=12326
2004-12-25 11:22:37 +00:00
Filip Navara
37dca7acbd - Fix compilation with GCC 4.0-20041219.
- Don't try to stick (1 << 8) into entry.delivery_mode which is 3-bit integer.

svn path=/trunk/; revision=12325
2004-12-25 11:21:48 +00:00
Filip Navara
f73524a056 - Don't pass uninitialized variables to PropertySheet,
svn path=/trunk/; revision=12324
2004-12-25 11:17:10 +00:00
Magnus Olsen
89384064a9 regsettings for acpi and
fix powerdown when reactos shortdown by Herv� Poussineau

svn path=/trunk/; revision=12323
2004-12-25 00:46:07 +00:00
Magnus Olsen
2b91825e80 fix powerdown when reactos shortdown by Herv� Poussineau
svn path=/trunk/; revision=12322
2004-12-25 00:44:49 +00:00
Filip Navara
63dde03aef - Fix compilation with GCC 4.0-20041219.
svn path=/trunk/; revision=12321
2004-12-24 23:01:35 +00:00
Magnus Olsen
2c0d95525f change NtUserChangeDisplaySettings stub so it report res not supported
geting quake1 working direcly form console with out any extra switch

svn path=/trunk/; revision=12320
2004-12-24 19:02:32 +00:00
Thomas Bluemel
e07e530aa6 revert my temporary class hacks and remove my desktop handling changes temporarily as they cause some trouble
svn path=/trunk/; revision=12319
2004-12-24 17:45:59 +00:00
Eric Kohl
68bf1ffa6a Add simple first stage GUI setup application.
svn path=/trunk/; revision=12317
2004-12-24 17:31:07 +00:00
Eric Kohl
f9131a7f31 - Move english resource to a separate file.
- Keep language-independent resources in welcome.rc.
- Run 'reactos.exe' to install ReactOS.

svn path=/trunk/; revision=12316
2004-12-24 17:19:44 +00:00
Eric Kohl
102860f1bd Add simple first stage GUI setup application.
svn path=/trunk/; revision=12315
2004-12-24 17:17:12 +00:00
Filip Navara
f4e0630b1d - Fix compilation with GCC 4.0-20041219.
svn path=/trunk/; revision=12314
2004-12-24 17:07:00 +00:00
Royce Mitchell III
9f1fc57758 IntEngGradientFill() fix ASSERT statements
svn path=/trunk/; revision=12312
2004-12-24 06:00:53 +00:00
Gunnar Dalsnes
699702d6ce -add some asserts to catch abuse (double insertions, unititialized items etc.)
-add asserts for KeRemoveQueue NTSTATUS returns

svn path=/trunk/; revision=12311
2004-12-24 02:09:12 +00:00
Gunnar Dalsnes
11deb707d5 add bugcode: INVALID_WORK_QUEUE_ITEM
svn path=/trunk/; revision=12310
2004-12-24 02:05:26 +00:00
Gunnar Dalsnes
8d1d54877f ExInitializeWorkItem: synch with Windows (only NULL the Flink)
svn path=/trunk/; revision=12309
2004-12-24 01:39:50 +00:00
Alex Ionescu
8b4b5441b4 Fix building with DBG=1, OPTIMIZED=1. Patch by Stephen Hodges.
svn path=/trunk/; revision=12308
2004-12-24 01:32:38 +00:00
Eric Kohl
38615c56e8 - Pass create parameters for named pipes and mailslots in the stack location.
- Call NpfsFindPipe to search for an existing pipe.

svn path=/trunk/; revision=12307
2004-12-23 23:58:44 +00:00
Eric Kohl
9b7ba3e6fb Pass create parameters for named pipes and mailslots in the stack location.
svn path=/trunk/; revision=12306
2004-12-23 23:56:33 +00:00
Filip Navara
630b572695 - Check the return value of LdrProcessModule instead of uninitialized variable.
svn path=/trunk/; revision=12305
2004-12-23 23:33:54 +00:00
Eric Kohl
09e71d4f7d Fix the signature of Nt/ZwCreateNamedPipe, the 8th to 10th arguments are ULONGs instead of BOOLEANs.
svn path=/trunk/; revision=12303
2004-12-23 20:13:38 +00:00
Gé van Geldorp
52bbffc39f Free process data when LPC port is closed, not when process is terminated,
'cause there now might be a "hide desktop" request coming in after process
termination

svn path=/trunk/; revision=12302
2004-12-23 18:02:12 +00:00
Eric Kohl
ceedef9d54 Merge EXTENDED_IO_STACK_LOCATION into IO_STACK_LOCATION and fix the resulting errors.
svn path=/trunk/; revision=12301
2004-12-23 12:39:16 +00:00
Gé van Geldorp
0b8f1f6126 Rollback last change since it's causing problems on Linux
svn path=/trunk/; revision=12300
2004-12-23 12:05:40 +00:00
Gé van Geldorp
80fe6c33b9 CVS maintenance
svn path=/trunk/; revision=12299
2004-12-23 09:15:18 +00:00
Gé van Geldorp
5eddab1bad Import shdocvw from Wine
svn path=/trunk/; revision=12297
2004-12-23 08:55:00 +00:00
Royce Mitchell III
eba02683e2 give Arch a little more variety
svn path=/trunk/; revision=12296
2004-12-23 02:24:04 +00:00
Gé van Geldorp
0b50bd52b2 Reimport of urlmon from Wine
svn path=/trunk/; revision=12295
2004-12-22 23:15:15 +00:00
Mike Nordell
3d7aa0b923 Tamlin was tired. Now byte order should _really_ be fixed
svn path=/trunk/; revision=12294
2004-12-22 23:05:12 +00:00
Mike Nordell
0a7987564c Remove bad declaration of htons
svn path=/trunk/; revision=12293
2004-12-22 22:57:19 +00:00
Mike Nordell
0fa4a286ba Fix order-of-evalutation bug-to-be
svn path=/trunk/; revision=12292
2004-12-22 22:48:02 +00:00
Royce Mitchell III
e386edfdb9 commited the wrong source for the bot.. sorry
svn path=/trunk/; revision=12291
2004-12-22 21:53:02 +00:00
Royce Mitchell III
5e7ce7f6f5 forgot to commit responses file
svn path=/trunk/; revision=12290
2004-12-22 18:57:09 +00:00
Royce Mitchell III
089686cac2 ArchBlackmann irc bot - works in ReactOS - happy hacking
svn path=/trunk/; revision=12289
2004-12-22 18:25:29 +00:00
Art Yerkes
f781714ac5 This corresponds to the change made in dispatch.c on the 20th.
svn path=/trunk/; revision=12288
2004-12-22 16:23:03 +00:00
Royce Mitchell III
4cf6b9f489 MiQueryVirtualMemory(): created because ZwQueryVirtualMemory() didn't work for me, added cases for memory area types that I needed to walk stack traces.
Stack traces now use MiQueryVirtualMemory to make sure they never step outside the allocated stack they started in ( this prevents page faults at high irql ) - for some reason this patch eliminates the NtW32Callback() crash everybody is seeing with GDI_DEBUG enabled, tho I don't understand why.

svn path=/trunk/; revision=12286
2004-12-22 05:17:44 +00:00
Royce Mitchell III
5dcad29338 msvc compatibility
svn path=/trunk/; revision=12285
2004-12-22 05:06:59 +00:00
Filip Navara
7ea5ac8d87 - Run UserInit program instead of running shell directly.
svn path=/trunk/; revision=12282
2004-12-22 01:22:08 +00:00
Filip Navara
9769f53baa - Wait for the shell process to finish execution.
svn path=/trunk/; revision=12281
2004-12-22 01:20:52 +00:00
Gunnar Dalsnes
d509bf9f98 forgot to add this when making chages to status.c earlier
svn path=/trunk/; revision=12280
2004-12-22 00:58:53 +00:00
Thomas Bluemel
02388014ad - initialize system window classes when creating window stations
- when creating consoles tell CSRSS the window station/desktop where they should created in, if there's information available

svn path=/trunk/; revision=12279
2004-12-21 21:38:27 +00:00
Magnus Olsen
6b4db70aba add dsound include files from wine
svn path=/trunk/; revision=12278
2004-12-21 19:31:07 +00:00
Gé van Geldorp
67cde50ddc - Don't pass a timeout (which wasn't initialized btw), just hang around forever
- Call completion routine

svn path=/trunk/; revision=12277
2004-12-21 18:38:49 +00:00
Gé van Geldorp
ea8bd9a5d2 - Standardize I/O Completion Port initialization function
- Actually call it

svn path=/trunk/; revision=12276
2004-12-21 18:37:28 +00:00
Magnus Olsen
b4ad77b7ad activate wine own guid for dsound ?
first step geting dsound compile
wine dsound compile agein
need todo some clean work now

svn path=/trunk/; revision=12275
2004-12-21 18:14:11 +00:00
Mike Nordell
f651c1283c Command line completion fix (uninitialized memory)
svn path=/trunk/; revision=12274
2004-12-21 16:30:24 +00:00
Filip Navara
df23944ec6 *** empty log message ***
svn path=/trunk/; revision=12273
2004-12-21 15:07:01 +00:00
Filip Navara
75f1fd495c - Add CLSID entries for CLSID_DragDropHelper.
svn path=/trunk/; revision=12272
2004-12-21 14:33:59 +00:00
Royce Mitchell III
d56daebd24 blasted sym files just aren't always in address-order, must search entire sym file to find correct function for our offset.
svn path=/trunk/; revision=12270
2004-12-21 04:32:11 +00:00
Royce Mitchell III
73df8e0872 wrap stack walks in SEH - this doesn't fix page faults tho, so something else is going to have to be done :(
svn path=/trunk/; revision=12269
2004-12-21 04:05:18 +00:00
Gunnar Dalsnes
93af2278c0 NtRemoveIoCompletion: didn't check for possible NTSTATUS codes returned from KeRemoveQueue
Spotted by GvG

svn path=/trunk/; revision=12268
2004-12-21 02:34:32 +00:00
Filip Navara
ff32df1937 - Add registry entries for DXDIAG.
svn path=/trunk/; revision=12267
2004-12-21 00:39:34 +00:00
Magnus Olsen
cd064303bb add devenum to the bootcd
svn path=/trunk/; revision=12266
2004-12-20 22:33:01 +00:00
Magnus Olsen
476dd07c96 add devenum to the build
svn path=/trunk/; revision=12265
2004-12-20 22:26:18 +00:00
Magnus Olsen
cd77453af5 spell error
svn path=/trunk/; revision=12264
2004-12-20 22:18:41 +00:00
Magnus Olsen
8e962ca524 add devnum.dll base adress
svn path=/trunk/; revision=12263
2004-12-20 22:12:43 +00:00
Magnus Olsen
0a80f15977 header file from wine
small change in one of these

svn path=/trunk/; revision=12262
2004-12-20 22:11:56 +00:00
Magnus Olsen
1117373fd8 port over devnum from wine only small change to createdevnum.c
svn path=/trunk/; revision=12261
2004-12-20 22:09:31 +00:00
Hartmut Birr
a736766cac Fixed the include of utime.h. (I should read the mails from others more exactly.)
svn path=/trunk/; revision=12260
2004-12-20 21:50:41 +00:00
Gé van Geldorp
b41e30eb6d Set ownership to NULL for both cursor and mask bitmaps
svn path=/trunk/; revision=12258
2004-12-20 21:34:23 +00:00
Magnus Olsen
026cdb6db3 fix some fualt here.
svn path=/trunk/; revision=12257
2004-12-20 21:09:40 +00:00
Hartmut Birr
22b8e65551 Used stat, utime and utimbuf instead of _stat, _utime and _utimbuf.
svn path=/trunk/; revision=12256
2004-12-20 19:55:26 +00:00
Magnus Olsen
7f6d0de950 rename dxdigan to dxdiagn
now wee remove dxdigan

svn path=/trunk/; revision=12255
2004-12-20 19:55:07 +00:00
Gé van Geldorp
259079e083 Add some stubs to allow msvcp60.dll to load
svn path=/trunk/; revision=12254
2004-12-20 17:32:05 +00:00
Magnus Olsen
3e2ae1fc05 rename dxdigan to dxdiagn
now wee remove dxdigan

svn path=/trunk/; revision=12253
2004-12-20 16:34:47 +00:00
Magnus Olsen
21a54bca5b rename dxdigan to dxdiagn
svn path=/trunk/; revision=12252
2004-12-20 16:32:43 +00:00
Eric Kohl
c443a93492 NtAllocateUuids(): Improve randomness of initial sequence count.
svn path=/trunk/; revision=12251
2004-12-20 14:07:34 +00:00
Magnus Olsen
e49daf9671 add dxdigan.dll to the bootcd
svn path=/trunk/; revision=12250
2004-12-20 06:58:23 +00:00
Magnus Olsen
003b5a6949 add strmiids and dxdigan to the build
svn path=/trunk/; revision=12249
2004-12-20 06:55:28 +00:00
Filip Navara
e9808cae5d - Don't try to free string that isn't allocated.
svn path=/trunk/; revision=12248
2004-12-20 02:31:48 +00:00
Filip Navara
28196d0b54 - Fix calling convention of OpenDriverA.
svn path=/trunk/; revision=12247
2004-12-20 02:16:19 +00:00
Filip Navara
70ea1560fe - Fix RosRtlDevModeA2W and RosRtlDevModeW2A for older versions of DEVMODE[AW] structures.
svn path=/trunk/; revision=12246
2004-12-20 01:52:01 +00:00
Filip Navara
5888259db6 - Fix parameter handling in EnumDisplaySettingsExA.
svn path=/trunk/; revision=12245
2004-12-20 01:50:39 +00:00
Magnus Olsen
27a6be65a9 port from wine
thanks filip to help me with some changes

svn path=/trunk/; revision=12244
2004-12-20 01:10:17 +00:00
Magnus Olsen
566bc4e279 port from wine
Directx digansotic dll
it is working in windows but fails some program in reactos

svn path=/trunk/; revision=12243
2004-12-20 01:08:18 +00:00
Magnus Olsen
10a38eaddf add static lib strmiids for directx
svn path=/trunk/; revision=12242
2004-12-20 00:59:11 +00:00
Magnus Olsen
6199c85de8 add TARGET_BASE = $(TARGET_BASE_LIB_DINPUT8)
svn path=/trunk/; revision=12241
2004-12-20 00:57:38 +00:00
Filip Navara
99eb3217fb - Pass correct parameters to UDPReceiveDatagram.
svn path=/trunk/; revision=12240
2004-12-20 00:55:27 +00:00
Magnus Olsen
4991937434 fix TARGET_BASE_LIB_DINPUT
fix TARGET_BASE_LIB_DINPUT8
fix TARGET_BASE_LIB_DXDIAGN

svn path=/trunk/; revision=12239
2004-12-20 00:54:56 +00:00
Magnus Olsen
56ebacd78f add TARGET_BASE = $(TARGET_BASE_LIB_DINPUT)
svn path=/trunk/; revision=12238
2004-12-20 00:53:54 +00:00
Alex Ionescu
4814e3518f Update AFD Include for WSPCloseSocket
svn path=/trunk/; revision=12237
2004-12-19 22:18:59 +00:00
Hartmut Birr
427f167cae - Set the time of the copied file to the time of the source file.
svn path=/trunk/; revision=12236
2004-12-19 21:49:13 +00:00
Hartmut Birr
7e6f1ac93b - Used the last write time instead of the last access time in GetFileTimes (only on windows).
svn path=/trunk/; revision=12235
2004-12-19 21:45:34 +00:00
Gé van Geldorp
0950c88772 Version number bump on HEAD
svn path=/trunk/; revision=12233
2004-12-19 20:57:53 +00:00
Alex Ionescu
28bce6709b Implemented WSPCloseSocket.
svn path=/trunk/; revision=12232
2004-12-19 20:13:28 +00:00
Filip Navara
9367e001e8 - Fix compilation errors with GCC 4.0-20041212.
svn path=/trunk/; revision=12230
2004-12-19 19:35:05 +00:00
Filip Navara
2513acd5bf - Don't ignore status returned by IOCTLs in WSPAccept.
- Wait for IOCTL_AFD_WAIT_FOR_LISTEN request to finish in pending case.

svn path=/trunk/; revision=12228
2004-12-19 17:28:07 +00:00
Thomas Bluemel
5e9dedd497 use GDI_DEBUG
svn path=/trunk/; revision=12227
2004-12-19 16:53:57 +00:00
Filip Navara
016f144f5b - Remove unused and broken MmSplitMemoryArea function.
- Don't allow releasing section with NtFreeVirtualMemory.
- Implement TokenDefaultDacl case of NtSetInformationToken.

svn path=/trunk/; revision=12226
2004-12-19 16:16:58 +00:00
Filip Navara
e469cf0000 - Fix compilation errors with GCC 4.0-20041212.
svn path=/trunk/; revision=12225
2004-12-19 15:56:53 +00:00
Filip Navara
c30b427a20 - Store the device object we're attached to in the device extension.
svn path=/trunk/; revision=12224
2004-12-19 15:51:51 +00:00
Eric Kohl
e84c9310a5 NtAllocateUuids(): Load and save sequence counter.
svn path=/trunk/; revision=12223
2004-12-19 12:52:42 +00:00
Eric Kohl
1d48593faa Add timezone index mapping value and Rpc key.
svn path=/trunk/; revision=12222
2004-12-19 12:50:55 +00:00
Mike Nordell
51f96d5871 Fix crash clicking desktop during setup (NULL pointer was unchecked)
svn path=/trunk/; revision=12221
2004-12-19 11:05:48 +00:00
Art Yerkes
b950b4dd97 Return error on every read after the first that returns EOF.
svn path=/trunk/; revision=12220
2004-12-19 10:26:01 +00:00
Art Yerkes
08f643dfc4 Recognize and deal with STATUS_END_OF_FILE.
svn path=/trunk/; revision=12219
2004-12-19 10:24:52 +00:00
Royce Mitchell III
4439ab0fb9 small bugfix to KeRosDumpStackFrames
svn path=/trunk/; revision=12218
2004-12-19 05:08:53 +00:00
Royce Mitchell III
b27cf5b226 much improved reporting on gdi handle leaks ( you must completely run out of handles tho - which is rare now that quotas are implemented )
svn path=/trunk/; revision=12217
2004-12-19 05:03:29 +00:00
Royce Mitchell III
4a371112ec gdi handle leak fixed - taskmgr no longer leaks gdi handles whilest sitting still. (why on earth was this commented out?!?!??!)
svn path=/trunk/; revision=12216
2004-12-19 05:00:22 +00:00
Royce Mitchell III
b4101d22b8 HACK: hard-coded gdi handle quotas, excepting code paths I haven't found yet, reactos can handle gdi leaky apps without bsoding or getting hosed now. This is a hack, because we should properly read the quota from the registry upon session initialization and use that value instead.
svn path=/trunk/; revision=12215
2004-12-19 00:03:56 +00:00
Royce Mitchell III
c39a4131db IntSetCursor() don't BSOD in low-resource conditions
svn path=/trunk/; revision=12214
2004-12-18 23:55:26 +00:00
Art Yerkes
60f819d761 Removed some badly formatted checkpoints.
svn path=/trunk/; revision=12213
2004-12-18 23:12:23 +00:00
Art Yerkes
9f1235eb99 Added some extra printing.
Fixed numerous places where we assume lpErrno is non-null.

svn path=/trunk/; revision=12212
2004-12-18 23:09:30 +00:00
Gé van Geldorp
0df032976f Add some DPRINTs
svn path=/trunk/; revision=12211
2004-12-18 22:54:37 +00:00
Gé van Geldorp
edf496d8c5 Add olepro32.dll to build
svn path=/trunk/; revision=12210
2004-12-18 22:28:42 +00:00
Gé van Geldorp
6385199930 Sync to Wine-20041201:
Jon Griffiths <jon_p_griffiths@yahoo.com>
- Ensure DllCanUnloadNow is a truly void function, and give it a unique
name so it can be documented per-dll.

svn path=/trunk/; revision=12209
2004-12-18 22:19:52 +00:00
Gé van Geldorp
b51b7135a4 Add some stubs
svn path=/trunk/; revision=12208
2004-12-18 22:15:07 +00:00
Gregor Anich
c37ff99746 Support mapping of video device memory into usermode - unfortunately this is not correctly supported by the memory manager yet.
svn path=/trunk/; revision=12207
2004-12-18 22:14:39 +00:00
Royce Mitchell III
5016bfecf7 dump some statistics on the gdi handle table when it runs out of handles
svn path=/trunk/; revision=12206
2004-12-18 21:41:17 +00:00
Royce Mitchell III
de1d28fabc NtGdiExtTextOut(): fixed some double-frees I introduced, initialize variables that need it, put {} around DPRINT(1) where needed
svn path=/trunk/; revision=12205
2004-12-18 21:35:35 +00:00
Royce Mitchell III
ef53a44b8a added non-magic-dependant double-free detection via 'status' variable
svn path=/trunk/; revision=12204
2004-12-18 21:30:17 +00:00
Royce Mitchell III
97d6fccc69 use KeRosPrintAddress in RPoolMgr
svn path=/trunk/; revision=12203
2004-12-18 21:27:27 +00:00
Gé van Geldorp
598fa7fea7 Set version info to NT 4.0 Build 1381 Service Pack 6 and include ReactOS
version number after Windows version in szCSDVersion

svn path=/trunk/; revision=12202
2004-12-18 21:06:25 +00:00
Royce Mitchell III
8afda8f04f added KeRosPrintAddress
svn path=/trunk/; revision=12201
2004-12-18 20:55:54 +00:00
Filip Navara
a67fbba8ec - Minor fix in MiniportDpc.
svn path=/trunk/; revision=12200
2004-12-18 20:32:41 +00:00
Royce Mitchell III
8e3c98a05f fix stack dumps from printing an infinite amount of <0> in some cases
svn path=/trunk/; revision=12199
2004-12-18 20:26:03 +00:00
Art Yerkes
91bbf4471d Added missing pending check (pointed out by filip).
svn path=/trunk/; revision=12198
2004-12-18 20:10:39 +00:00
Gé van Geldorp
2fa970d484 Fix harddisk detection for seriously broken BIOS
svn path=/trunk/; revision=12197
2004-12-18 19:53:30 +00:00
Art Yerkes
e8861acfb2 Filip and I have hopefully fixed the ndis completion problem on sends.
After calls to delayed miniport send routines, we check status and if not
pending, do NdisMSendComplete and set the miniport busy flag off.

svn path=/trunk/; revision=12196
2004-12-18 19:32:40 +00:00
Gé van Geldorp
e0c43e5c83 Handle failures better (i.e. without crashing)
svn path=/trunk/; revision=12195
2004-12-18 19:23:05 +00:00
Gregor Anich
35d320bd71 Fix handling of breakpoint exceptions in KDB.
svn path=/trunk/; revision=12194
2004-12-18 19:22:10 +00:00
Art Yerkes
fd0590d3cc Add a busy flag for the receive worker. This needs something better.
Remove #if 0 on send completion.  We need these.  Packets still aren't
getting completed however.  Need to investigate more.

svn path=/trunk/; revision=12193
2004-12-18 18:27:22 +00:00
Art Yerkes
1a2e000397 Check for a bad return from AllocatePacketWithBuffer.
svn path=/trunk/; revision=12192
2004-12-18 18:22:47 +00:00
Royce Mitchell III
f4354d8f89 NtGdiExtTextOut(): improved error handling
svn path=/trunk/; revision=12191
2004-12-18 18:21:02 +00:00
Royce Mitchell III
e6a6a8e434 IntGdiInitBrushInstance(): assume callers pass us valid parameters
svn path=/trunk/; revision=12190
2004-12-18 18:19:24 +00:00
Hartmut Birr
d7be13618b - Fixed the timer calibration for processors without a tsc, spotted by Casper Hornstrup.
svn path=/trunk/; revision=12189
2004-12-18 18:04:18 +00:00
Royce Mitchell III
4bd03f70f7 EngMaskBitBlt() ASSERT instead of if(), this function should trust it's callers
IntEngMaskBlt() trust caller to send required parameters

svn path=/trunk/; revision=12188
2004-12-18 17:52:30 +00:00
Royce Mitchell III
6dce633245 add error checking
svn path=/trunk/; revision=12187
2004-12-18 17:50:22 +00:00
Royce Mitchell III
e35792c4ed BUGFIX: EngMaskBitBlt() shouldn't BSOD if Mask is NULL
svn path=/trunk/; revision=12186
2004-12-18 17:36:13 +00:00
Hartmut Birr
43ccb648b2 - Fixed the definitions of HEAP_GROWABLE and HEAP_NO_VALLOC.
svn path=/trunk/; revision=12185
2004-12-18 17:30:27 +00:00
Royce Mitchell III
4076ea8740 BUGFIX: Missing error handling in IntSetDIBits()
svn path=/trunk/; revision=12184
2004-12-18 17:15:10 +00:00
Royce Mitchell III
9b125b75bd BUGFIX: EngCreateBitmap() - don't call GDIOBJ_SetOwnerShip() with invalid handle
svn path=/trunk/; revision=12183
2004-12-18 17:12:32 +00:00
Steven Edwards
eec9a15bd8 Merged most of the recent changes from the Wine edit control.
We now pass all of the Wine edit regression tests.

Vitaliy Margolen <wine-patch@kievinfo.com>
- return "want all keys" for WM_GETDLGCODE when multi-line
- single-line edit control does not want all messages
- additional style combinations are possible for both multi-line and
  single-line edit controls
- tests to confirm it

James Hawkins <truiken@gmail.com>
Limit scrolling of the edit control to the last line of text.

Ulrich Czekalla <ulrich@codeweavers.com>
Handle painting the border if WS_EX_CLIENTEDGE is not set.

Ulrich Czekalla <ulrich@codeweavers.com>
Allow copying selection when control is read only.

svn path=/trunk/; revision=12182
2004-12-18 16:06:23 +00:00
Hartmut Birr
3d5519a309 - PsUnblockThread must be called with dispatcher database lock held.
svn path=/trunk/; revision=12181
2004-12-18 15:52:51 +00:00
Thomas Bluemel
98d6439521 silence debug message i accidently added
svn path=/trunk/; revision=12180
2004-12-18 13:35:15 +00:00
Thomas Bluemel
b79bb15644 guard SetConsoleInputExeNameW() with SEH to properly release the console lock in case of failure
svn path=/trunk/; revision=12179
2004-12-18 13:33:09 +00:00
Eric Kohl
0ad5627d13 Implement NtAllocateUuids() partially.
svn path=/trunk/; revision=12178
2004-12-18 13:27:58 +00:00
Thomas Bluemel
db7aca35ef implemented undocumented GetConsoleInputExeNameA/W() and SetConsoleInputExeNameA/W() used by NT's cmd.exe
svn path=/trunk/; revision=12177
2004-12-18 13:26:57 +00:00
Hartmut Birr
a653ae39ad - Allocated a zero filled memory block for the font.
- Restored Ge's last changes.

svn path=/trunk/; revision=12176
2004-12-18 11:05:03 +00:00
Gé van Geldorp
04cae08bbc Rollback last change
svn path=/trunk/; revision=12175
2004-12-18 09:39:14 +00:00
KJK::Hyperion
ec30fba4db PSEH: some changes unrelated with the branch. Added support for sharing local variables with filter functions and finally functions, and new macros to declare some common forms of filter functions and finally functions. PSEH now officially cool. Still ugly, though
ExeFmt: new prototype for ReadFile callbacks. See my previous commit message for the ELF_support branch.

kernel32: some "PVOID + offset" bugs corrected.

ntifs.h: SECTION_IMAGE_INFORMATION.EntryPoint is an offset, not a pointer. Our kernel32.dll code even knew that and just casted the value to an integer. Made it an ULONG (not ULONG_PTR because executables have an hard size limit of 4GB even on Win64. Win128 may be a problem, though). SECTION_IMAGE_INFORMATION.StackReserve and SECTION_IMAGE_INFORMATION.StackCommit made into ULONG_PTRs because they were almost the only fields in the PE32 headers Microsoft bothered to extend to 64 bits for PE32+, and that has to mean something,

svn path=/branches/ELF_support/; revision=12174
2004-12-18 02:58:56 +00:00
KJK::Hyperion
48fe94b1e5 - ntoskrnl/mm/i386/page.c: now more flexible in converting the protection flags into page flags - the protection may be one of the PAGE_XXX_WRITECOPY ones, if it comes from a section segment.
- ntoskrnl/mm/pe.c: relaxed several restrictions to make just about any real-world executable load. Also fixed some embarassing errors in the utility functions for address alignment (really, how can you get THAT wrong?). Also, output some explanation for failure, and move the default values for stack reserve, stack commit, ecc. to mm/section.c. Finally, use the new style of ReadFile callback, which is IoPageRead-ready.
 - ntoskrnl/mm/section.c: the usual clusterfuck, only it doesn't even compile ATM. I'm just committing it because I'm too afraid of myself - right now I feel very much like deleting everything, throwing my computer from the window and curling up in a corner of the room. Our Mm/Cc state is THAT sorry. The result of a week of work is a boot sequence that goes up to autochk.exe and then crashes because of unexplicable and unpredictable memory corruption. One step forward and two backwards.

svn path=/branches/ELF_support/; revision=12173
2004-12-18 02:36:09 +00:00
Art Yerkes
478a3a1bd2 Added a few forwards to ws2_32.
svn path=/trunk/; revision=12172
2004-12-18 01:17:35 +00:00
Gunnar Dalsnes
68b0228983 IntReadConsole: in case of unicode read, not all chars were copied
W2k cmd.exe now works for me

svn path=/trunk/; revision=12171
2004-12-18 00:28:16 +00:00
Filip Navara
69c462a21c - Fix issues with DCE clip region ownership.
svn path=/trunk/; revision=12170
2004-12-17 19:42:46 +00:00
Royce Mitchell III
6aa427939e BUGFIX: stabs lookup ( particularly line # lookup )
svn path=/trunk/; revision=12169
2004-12-17 17:51:57 +00:00
Gé van Geldorp
26b1a392bf Pass parameters in correct order
svn path=/trunk/; revision=12168
2004-12-17 17:40:29 +00:00
Filip Navara
7b483dc2f7 - Don't allow changing ownership of foreign GDI handles.
svn path=/trunk/; revision=12167
2004-12-17 15:12:37 +00:00
Filip Navara
c79373c4c1 - Fix ownership issues with DCEs.
svn path=/trunk/; revision=12166
2004-12-17 14:44:19 +00:00
Royce Mitchell III
0fe4682b80 completely rewritten PagedPool.
- more than 800% faster
- support for multiple pools (SpecialPool, etc anyone?)
- can be used for NPool if wanted, too
- tries not to immediately reallocate a block that's just freed for allocations of <= 512 (helps find memory abusers)

svn path=/trunk/; revision=12165
2004-12-17 13:20:05 +00:00
Gregor Anich
7cbb0d7e6e Remove unused defines and structures.
svn path=/trunk/; revision=12164
2004-12-17 13:19:44 +00:00
Gé van Geldorp
af4cfbfdec Don't mess with WNDCLASS contents if class doesn't exist
svn path=/trunk/; revision=12163
2004-12-17 09:56:10 +00:00
Aleksey Bragin
74e4b45769 Include link to IoCsq...() funcs
svn path=/trunk/; revision=12162
2004-12-17 07:31:11 +00:00
Gunnar Dalsnes
0bf2982f43 IntReadConsole: don't tell we failed just because we didn't fill up the read buffer!
svn path=/trunk/; revision=12161
2004-12-17 00:44:46 +00:00
Eric Kohl
ac61295ec2 Simplify time conversion functions.
svn path=/trunk/; revision=12160
2004-12-16 23:46:41 +00:00
Eric Kohl
a2b3047314 Remove 'unassigned' error codes.
svn path=/trunk/; revision=12159
2004-12-16 23:06:07 +00:00
Gé van Geldorp
77e8ed7c6f Implement NtFlushInstructionCache()
svn path=/trunk/; revision=12158
2004-12-16 22:36:09 +00:00
Steven Edwards
8d2782b2fa Added regex support
svn path=/trunk/; revision=12157
2004-12-16 18:37:28 +00:00
Steven Edwards
99a066e54b We need this for now.
svn path=/trunk/; revision=12156
2004-12-16 18:02:32 +00:00
Steven Edwards
682154185b This should not be in CVS
svn path=/trunk/; revision=12155
2004-12-16 18:01:14 +00:00
Steven Edwards
b7ce6af053 KJK::Hyperion has PSEH'ifyed msc.c
svn path=/trunk/; revision=12154
2004-12-16 17:50:36 +00:00
Steven Edwards
1aea28360c First shot at importing dbghelp. Its broken. Dont enable it
until KJK and Alex have a look.

svn path=/trunk/; revision=12153
2004-12-16 17:42:10 +00:00
Steven Edwards
d057566f59 add dbghelp.h and cvconst.h for importing dbghelp.dll
svn path=/trunk/; revision=12152
2004-12-16 17:34:54 +00:00
Gunnar Dalsnes
9cbb3d72e1 -link heaps together instead of using stupid table past peb
-RtlValidateProcessHeaps/RtlGetProcessHeaps/RtlEnumProcessHeaps  didn't process all heaps
-correct RtlDestroyHeap proto. / return value
All changes based on Wine

svn path=/trunk/; revision=12151
2004-12-16 15:10:01 +00:00
Art Yerkes
4d8fc530e9 We can arrive here early on, before the filter is set. Check for a null
filter.

svn path=/trunk/; revision=12150
2004-12-16 07:50:06 +00:00
Alex Ionescu
25c4daa164 Freeldr will not load a UI if Timeout = 0, and will instead immediately load the default OS.
svn path=/trunk/; revision=12149
2004-12-16 07:09:33 +00:00
Alex Ionescu
d986574df1 Set default Freeldr Timeout to 5 seconds (requested).
svn path=/trunk/; revision=12148
2004-12-16 07:08:48 +00:00
Richard Campbell
0132fcd8f1 - Implemented SwitchToThisWindow, not 100% correct more then likely...but it should work well enough, considering the function is deprecated.
- Implemented BringWindowToTop

svn path=/trunk/; revision=12147
2004-12-16 03:57:35 +00:00
Gunnar Dalsnes
f7adabb3ca add InternetOpenUrlA/W stubs
svn path=/trunk/; revision=12146
2004-12-16 03:00:06 +00:00
Richard Campbell
c75ff223da Final Touchups:
- Removed potential copyrighted microsoft icon.  Replaced with ROS icon.

TODO:
 - localize
 - implement code that makes the cpl work
 - sleep.

svn path=/trunk/; revision=12145
2004-12-16 02:09:16 +00:00
Richard Campbell
bfaf8bf9be - Added the remaining two dialog layouts
svn path=/trunk/; revision=12144
2004-12-16 01:56:53 +00:00
Richard Campbell
d9f9895b85 - center some things that i realized weren't centered when actually RUNNING the cpl. (damn visual studio...)
svn path=/trunk/; revision=12143
2004-12-16 01:26:06 +00:00
Richard Campbell
353463b34c - oops...
- added screen saver controls

svn path=/trunk/; revision=12142
2004-12-16 01:12:40 +00:00
Richard Campbell
f7977f0c1c - added background page controls...no code yet, just the resources.
svn path=/trunk/; revision=12141
2004-12-16 00:51:01 +00:00
Richard Campbell
bf25913468 - Removed extra 'properties' in window caption.
svn path=/trunk/; revision=12140
2004-12-16 00:21:40 +00:00
Steven Edwards
965e9ee858 revert change from lastnight.
svn path=/trunk/; revision=12139
2004-12-15 23:34:37 +00:00
Eric Kohl
935e412f83 Fix GetInheritanceSource[A/W] signature.
svn path=/trunk/; revision=12138
2004-12-15 14:23:11 +00:00
Eric Kohl
2f57c7dc4f Remove aclapi.h from include. User the w32api version instead.
svn path=/trunk/; revision=12137
2004-12-15 14:13:34 +00:00
Eric Kohl
6fd5df9a7b Implement simple trustee functions:
- BuildImpersonateTrustee[A/W]
 - GetMultipleTrustee[A/W]
 - GetMultipleTrusteeOperation[A/W]
 - GetTrusteeForm[A/W]
 - GetTrusteeName[A/W]
 - GetTrusteeType[A/W]

svn path=/trunk/; revision=12136
2004-12-15 12:29:36 +00:00
Gé van Geldorp
473143e808 Allocate correct amount of memory.
Fixes bug 451.

svn path=/trunk/; revision=12135
2004-12-15 11:34:52 +00:00
Steven Edwards
54897a486b add notepad to the bootcd
svn path=/trunk/; revision=12134
2004-12-15 06:10:24 +00:00
Steven Edwards
7be51c63cb Disable check for invalid chars in string.
svn path=/trunk/; revision=12133
2004-12-15 05:27:17 +00:00
Steven Edwards
2288ba398c Moved notepad to main CVS module.
svn path=/trunk/; revision=12132
2004-12-15 05:09:32 +00:00
Steven Edwards
d1a61871aa Add notepad to the makefile
svn path=/trunk/; revision=12131
2004-12-15 05:08:44 +00:00
Steven Edwards
d9ccbedded Added Wine notepad to main tree.
svn path=/trunk/; revision=12130
2004-12-15 05:07:53 +00:00
Royce Mitchell III
13277fb296 change a few #ifdefs to allow loading of SYM files for user modules in DBG builds
svn path=/trunk/; revision=12129
2004-12-15 03:00:33 +00:00
Royce Mitchell III
8236f00175 filter out invalid S_FUN entries
svn path=/trunk/; revision=12128
2004-12-15 02:24:35 +00:00
Royce Mitchell III
66468c3013 RSYM: force all sym files to have 0-based function offsets.
NTOSKRNL: look for 0-based offsets instead of absolute offsets.

svn path=/trunk/; revision=12127
2004-12-15 01:49:37 +00:00
Filip Navara
262a6b4866 - Implement NtUserMonitorFromWindow.
svn path=/trunk/; revision=12126
2004-12-14 23:38:14 +00:00
Filip Navara
3b2955e805 - Fix bug in IntCallHookProc for window classes specified with atom.
svn path=/trunk/; revision=12125
2004-12-14 23:14:15 +00:00
Casper Hornstrup
023fe261e3 2004-12-14 Casper S. Hornstrup <chorns@users.sourceforge.net>
* lib/freetype/rosglue.c: Use native line-endings.
	* drivers/lib/bzip2/sample2.ref: Ditto.
	* lib/freetype/builds/mac/ftlib.prj: Ditto.
	* apps/utils/net/telnet/src/tnmsg.h: Ditto.

svn path=/trunk/; revision=12124
2004-12-14 22:57:35 +00:00
Gé van Geldorp
4bd813253a This is a generated file, doesn't belong in CVS
svn path=/trunk/; revision=12123
2004-12-14 22:27:02 +00:00
Gregor Anich
4b5de6d7f7 Fixed compilation with GCC 3.4.2
svn path=/trunk/; revision=12122
2004-12-14 22:15:52 +00:00
Thomas Bluemel
7af8972536 implemented GetUserNameA()
svn path=/trunk/; revision=12121
2004-12-14 22:11:16 +00:00
Art Yerkes
ddd8ede921 Cleaned up a bit. Sorry, I should edit more carefully.
svn path=/trunk/; revision=12120
2004-12-14 21:56:44 +00:00
Thomas Bluemel
dc39a75a6c fixed typo in comment
svn path=/trunk/; revision=12119
2004-12-14 21:26:53 +00:00
Thomas Bluemel
2c84739e31 implemented LookupAccountSidA()
svn path=/trunk/; revision=12118
2004-12-14 21:25:21 +00:00
James Tabor
0056248f6d Update files from WineHq.
svn path=/trunk/; revision=12117
2004-12-14 20:42:02 +00:00
Gé van Geldorp
eb3db535d2 Make GDB work again
svn path=/trunk/; revision=12116
2004-12-14 10:18:57 +00:00
Art Yerkes
a95a04eb35 Store interface speed to retrieve later.
svn path=/trunk/; revision=12115
2004-12-14 08:00:48 +00:00
Royce Mitchell III
c3168d10e5 implemented LookupAccountSidW() thx to the help of Alex Ionescu - this function is needed for GetUserNameA/W().
svn path=/trunk/; revision=12114
2004-12-14 06:40:50 +00:00
Royce Mitchell III
a80be8cc45 ASSERT parameter assumptions
svn path=/trunk/; revision=12113
2004-12-14 04:55:43 +00:00
Royce Mitchell III
9df9a16c4d BUGFIX: bad params to MouseSafetyOnDrawStart() in IntEngTransparentBlt(), also ASSERT parameter assumptions
svn path=/trunk/; revision=12112
2004-12-14 04:40:16 +00:00
Royce Mitchell III
3bbc2dd8e3 ASSERT parameter assumptions in IntEngLineTo()
svn path=/trunk/; revision=12111
2004-12-14 04:30:58 +00:00
Royce Mitchell III
6d6cf25eee ASSERT parameter assumptions in IntEngGradientFill()
svn path=/trunk/; revision=12110
2004-12-14 04:26:49 +00:00
Royce Mitchell III
2e027c01b7 ASSERT parameter assumptions in EngCopyBits()
svn path=/trunk/; revision=12109
2004-12-14 04:22:00 +00:00
Royce Mitchell III
be95834e02 fix infinite loop in KeRosDumpStackFrames()
svn path=/trunk/; revision=12108
2004-12-14 03:46:10 +00:00
Royce Mitchell III
6484c7e5b5 ASSERT parameter assumptions in IntEngStretchBlt() and IntEngMaskBlt()
svn path=/trunk/; revision=12107
2004-12-14 03:36:46 +00:00
Royce Mitchell III
adf92baa5e IntEngBitBlt() ASSERT() some assumptions
svn path=/trunk/; revision=12106
2004-12-14 03:28:34 +00:00
Royce Mitchell III
0dfc0d93bd came across small potential kmode crash while researching another bug fix
svn path=/trunk/; revision=12105
2004-12-14 03:23:14 +00:00
Gunnar Dalsnes
241ac18672 STATUSBAR_SetTextT:
-ntext wasn't freed on return if text was unicode
-part->text was allways freed, but if the previous style was SBT_OWNERDRAW, part->text would contain 32bit data (not a buffer ptr.)

svn path=/trunk/; revision=12104
2004-12-14 01:12:51 +00:00
Gunnar Dalsnes
43ca7fca1f zw.h: correct ZwDuplicateToken proto.
advapi32\token\token.c: DuplicateTokenEx: pass correct values to NtDuplicateToken
security.c: RtlImpersonateSelf: pass correct values to NtDuplicateToken
ntoskrnl\token.c:
-NtSetInformationToken: lie and say we succeded
-NtDuplicateToken: don't deref. nullpointer

svn path=/trunk/; revision=12103
2004-12-14 00:41:24 +00:00
Thomas Bluemel
31a9a2b464 sorry for defining structures twice...
svn path=/trunk/; revision=12102
2004-12-14 00:00:41 +00:00
Filip Navara
d7b522cba2 - Modify RtlGetNtVersionNumbers to allow loading of WinXP SP2 MSVCRT.DLL.
svn path=/trunk/; revision=12101
2004-12-13 23:11:13 +00:00
Thomas Bluemel
f49768c160 cache free gdi handles
svn path=/trunk/; revision=12100
2004-12-13 21:59:28 +00:00
Filip Navara
b02dd7c73d - Remove duplicate typedefs.
svn path=/trunk/; revision=12099
2004-12-13 21:45:36 +00:00
Art Yerkes
402db44755 I had put an IOSB on the stack in TdiConnect. Now we use a PendingIrp
struct that associates it with an IRP.  Better.

svn path=/trunk/; revision=12098
2004-12-13 21:20:38 +00:00
Eric Kohl
c4f4ef9ea2 - Remove Wine-isms from the profile code.
- Wrap single-line if-statements.
- Cleanup the indentation.

svn path=/trunk/; revision=12097
2004-12-13 21:16:26 +00:00
Eric Kohl
c11fd7a860 Don't link kernel32.dll against wine.a.
svn path=/trunk/; revision=12096
2004-12-13 21:11:45 +00:00
Thomas Bluemel
51f494a42c forgot this file
svn path=/trunk/; revision=12095
2004-12-13 20:53:25 +00:00
Art Yerkes
91ff22985a Added stack frames and Tag printing to used blocks. This allows redzone
violations on used blocks to tell where the block was allocated.

svn path=/trunk/; revision=12094
2004-12-13 20:11:08 +00:00
Art Yerkes
0492a94c6f Allocate a final WCHAR for the NUL put on by wcsncat.
svn path=/trunk/; revision=12093
2004-12-13 20:09:26 +00:00
Thomas Bluemel
3340e6eecd added stubs for SetSecurityInfo(), GetInheritanceSourceA/W() and FreeInheritedFromArray()
svn path=/trunk/; revision=12092
2004-12-13 19:06:28 +00:00
Hartmut Birr
1d2f603b9d - Replaced HeapAlloc, HeapFree and HeapReAlloc with alloc, free and realloc.
svn path=/trunk/; revision=12091
2004-12-13 18:30:08 +00:00
Thomas Bluemel
e2e32b1c11 cvs maintainance
svn path=/trunk/; revision=12090
2004-12-13 18:20:28 +00:00
Thomas Bluemel
c88782cd9c cvs maintainance
svn path=/trunk/; revision=12089
2004-12-13 18:06:39 +00:00
Filip Navara
6320501cf5 I was wrong, MiniSendComplete shouldn't be called at all by NDIS except if explicitly asked to by the miniport (in pending case).
svn path=/trunk/; revision=12088
2004-12-13 17:16:36 +00:00
Filip Navara
f687a8456d REVERT:
- Don't call ProtocolSendComplete after NdisSend (NDIS should call it).

svn path=/trunk/; revision=12087
2004-12-13 17:13:24 +00:00
Filip Navara
04afe309b7 - Don't call ProtocolSendComplete after NdisSend (NDIS should call it).
svn path=/trunk/; revision=12086
2004-12-13 16:53:38 +00:00
Filip Navara
48048914c0 MiniSendComplete should be called if MiniportSend routine returns STATUS_SUCCESS even for deserialized miniports.
svn path=/trunk/; revision=12085
2004-12-13 16:50:21 +00:00
Filip Navara
b5fa0b44a1 - Fix compilation errors with GCC 4.0-20041205.
svn path=/trunk/; revision=12084
2004-12-13 16:36:39 +00:00
KJK::Hyperion
df79267757 In hell, child rapists are forced to resolve CVS HEAD merge conflicts... FOREVER. Please let SVN be
svn path=/branches/ELF_support/; revision=12083
2004-12-13 16:18:27 +00:00
Filip Navara
963cbda1e0 - Fix compilation errors with GCC 4.0-20041205.
svn path=/trunk/; revision=12082
2004-12-13 15:39:52 +00:00
Filip Navara
dc866ac5b0 Don't pass UNICODE_STRINGs in the dwTypeData of MENUITEMINFO. Pass the usual strings here.
svn path=/trunk/; revision=12081
2004-12-13 15:38:19 +00:00
Gé van Geldorp
6d6f09144e Fix double-spaced output in crash report
svn path=/trunk/; revision=12080
2004-12-13 15:07:33 +00:00
Filip Navara
b2a1d58158 - Get handling of unhandled exceptions working again.
svn path=/trunk/; revision=12079
2004-12-13 13:32:24 +00:00
Thomas Bluemel
56a8abdfa4 decrement process gdi object counter on object deletion
svn path=/trunk/; revision=12078
2004-12-13 12:51:51 +00:00
KJK::Hyperion
a79c567edf Painful HEAD merge. CVS makes my existence miserable
svn path=/branches/ELF_support/; revision=12077
2004-12-13 09:39:27 +00:00
The ReactOS Team
320b9fd597 This commit was manufactured by cvs2svn to create branch 'ELF_support'.
svn path=/branches/ELF_support/; revision=12076
2004-12-13 09:39:27 +00:00
Royce Mitchell III
55c08f71b9 implemented GetUserNameA() and GetUserNameW() - thanks to kjk_hyperion and Alex Ionescu for help on how to implement them.
svn path=/trunk/; revision=12075
2004-12-13 07:09:56 +00:00
KJK::Hyperion
aa134d5b01 - include/ntos/zw.h, lib/kernel32/process/create.c: fixed SECTION_IMAGE_INFORMATION (EntryPoint is an offset)
- include/pe.h, lib/rtl/random.c: header hell strikes again and again and again
 - include/reactos/exeformat.h: finishing touches
 - ntoskrnl/ex/time.c: merge with HEAD (just enough to get it to compile)
 - ntoskrnl/include/internal/mm.h, ntoskrnl/mm/section.c: Hyperion vs bitrot, Hyperion wins
 - ntoskrnl/mm/pe.c: cosmetic changes

svn path=/branches/ELF_support/; revision=12074
2004-12-13 05:55:32 +00:00
Royce Mitchell III
d2b0c045cd BUGFIX: unhandled error conditions IntGdiCreateDC()
svn path=/trunk/; revision=12073
2004-12-13 05:23:59 +00:00
Gregor Anich
6298e65633 Changed half-verbose build output a bit:
- Do not print "Entering directory ..." messages
 - Do not print "Nothing to be done for ..." messages
 - Print the target name before the command which is executed (does not work with wine dlls yet)

Added/Changed stuff in rules.mak:
FULL_MAP was renamed to BUILD_MAP and can be set to
 - full (default, like FULL_MAP=yes was - build maps with objdump)
 - yes (like FULL_MAP=no was - build maps with nm)
 - no (don't build maps at all)
BUILD_SYM was added - can be set to yes/no (defaults to yes)

svn path=/trunk/; revision=12071
2004-12-13 02:20:09 +00:00
Royce Mitchell III
ed3a9ff266 BUGFIX: get rid of an incorrect ASSERT
svn path=/trunk/; revision=12070
2004-12-13 01:45:18 +00:00
Thomas Bluemel
ce3ef02040 revert some of the changes i did to IntDestroyWindow()
svn path=/trunk/; revision=12069
2004-12-13 00:11:59 +00:00
Thomas Bluemel
29be8a4058 unmark dirty windows on destruction so no painting messages get generated afterwards
svn path=/trunk/; revision=12068
2004-12-12 23:42:35 +00:00
Filip Navara
ed10a7b01f - Acquire the dispatcher lock in KeRevertToUserAffinityThread instead of just using uninintialized oldIrql variable.
svn path=/trunk/; revision=12067
2004-12-12 23:18:55 +00:00
Eric Kohl
f51fcb3a2b Replace assert by ASSERT.
svn path=/trunk/; revision=12066
2004-12-12 23:09:13 +00:00
Filip Navara
eeeb963b9d - Fix compilation errors with GCC 4.0-20041205.
svn path=/trunk/; revision=12065
2004-12-12 23:08:13 +00:00
Thomas Bluemel
02f77a0c2a initialize the unhandled exception filter automatically
svn path=/trunk/; revision=12064
2004-12-12 23:03:56 +00:00
Thomas Bluemel
f920a98034 make SetunhandledExceptionFilter() thread-safe
svn path=/trunk/; revision=12063
2004-12-12 22:39:45 +00:00
Eric Kohl
68f22d804d - Replace hive locks and hive list lock by a global lock to make the registry thread-safe.
svn path=/trunk/; revision=12062
2004-12-12 22:36:10 +00:00
Royce Mitchell III
50a975cc08 BUGFIX: NtGdiGetDeviceCaps() called NtGdiEscape() with hDC when it already had it locked.
BUGFIX: fixed condition surrounding failed ASSERT in NtGdiGetTextExtentPoint32().

svn path=/trunk/; revision=12061
2004-12-12 21:58:42 +00:00
Royce Mitchell III
522137c499 add missing assertion
svn path=/trunk/; revision=12060
2004-12-12 21:43:17 +00:00
Royce Mitchell III
63fcc0cffd BUGFIX: MouseSafety does it's own parameter validation, and this calculation was flat-out wrong anyway
svn path=/trunk/; revision=12059
2004-12-12 21:38:25 +00:00
Thomas Bluemel
4e843a2af2 * Implement EnumDisplayDevicesA
* Better implementation of LookupAccountSidA/W stubs
* Allow enumeration of display settings in CLI mode
* Add route app to compile/install target
* Correct debug messages

Patch by Herv� Poussineau.

svn path=/trunk/; revision=12058
2004-12-12 21:25:05 +00:00
Royce Mitchell III
9530713f4b testing reveals that source rect must be constrained to the boundaries of the source image. Adjust dest rect so that output still lands where user expected it. This fixes kmode crash from comctl32 handing bad data off to StretchBlt().
svn path=/trunk/; revision=12057
2004-12-12 20:58:09 +00:00
Thomas Bluemel
d2cc7ec4a0 MessageBoxIndirectA() should check whether the MB_USERICON bit was set, otherwise in case the lpszIcon field of the MSGBOXPARAMS structure, the application passed to it, was never initialized and is not being interpreted as an atom, it takes this random pointer and tries to convert the string inside it to unicode - which might cause an exception. it solves a problem with winzip hardon discovered.
The bug also exists in wine but doesn't appear to arise.

svn path=/trunk/; revision=12056
2004-12-12 20:40:06 +00:00
Hartmut Birr
803a12e7fe - Split KdInitSystem in two phases, to enable debug prints (serial line and bochs)
in the very early boot stage (before the initialisation from hal).

svn path=/trunk/; revision=12055
2004-12-12 20:14:01 +00:00
Filip Navara
311bcaca5c *** empty log message ***
svn path=/trunk/; revision=12054
2004-12-12 18:14:22 +00:00
Steven Edwards
face862633 added .cvsignore
svn path=/trunk/; revision=12053
2004-12-12 18:07:44 +00:00
Filip Navara
db8aa43455 - Remove -DCOBJMACROS from oleaut32 makefile.
- Minor fixes to OLE interface prototypes.

svn path=/trunk/; revision=12052
2004-12-12 18:01:23 +00:00
Thomas Bluemel
0ced40be8e fixed problems with mouse cursor handling
svn path=/trunk/; revision=12051
2004-12-12 17:56:52 +00:00
Hartmut Birr
e3bd28c5ae - Fixed the definition of SYNCH_LEVEL.
svn path=/trunk/; revision=12050
2004-12-12 17:52:06 +00:00
Hartmut Birr
7e26d1bc15 - Used the lock prefix on smp builds.
svn path=/trunk/; revision=12049
2004-12-12 17:48:20 +00:00
Filip Navara
a714d73871 Hans Leidekker <hans@it.vu.nl>
Fix compilation with GCC 4.

svn path=/trunk/; revision=12048
2004-12-12 17:46:53 +00:00
Hartmut Birr
e2b1bfab2b - Improved KeBugCheckWithTf for smp machines.
svn path=/trunk/; revision=12047
2004-12-12 17:42:00 +00:00
Hartmut Birr
1fcc37658f - Redefined OldIrql. It was lost while my code cleanup.
svn path=/trunk/; revision=12046
2004-12-12 17:36:00 +00:00
Hartmut Birr
973ea3b0bc - Replaced PiThreadLock with the dispatcher databae lock.
- Fixed some problems while setting/changing the affinity of a thread.

svn path=/trunk/; revision=12045
2004-12-12 17:25:53 +00:00
Filip Navara
6d37ab99d0 - Reformulate comment.
svn path=/trunk/; revision=12044
2004-12-12 17:24:30 +00:00
Filip Navara
4bceb917d1 - Workaround infinite loop on loopback connect.
svn path=/trunk/; revision=12043
2004-12-12 17:03:01 +00:00
Filip Navara
7660dbd930 - Don't call IntReleaseWindowObject with handle.
svn path=/trunk/; revision=12042
2004-12-12 16:47:52 +00:00
Filip Navara
1d43b533ec - Fix compilation of non-DBG builds.
svn path=/trunk/; revision=12041
2004-12-12 15:57:15 +00:00
Eric Kohl
a643581101 - Remove Wine-isms from advapi32 because it's a ReactOS DLL!
- Enforce a consistent coding style.
- Remove -D__REACTOS__

svn path=/trunk/; revision=12040
2004-12-12 15:17:38 +00:00
Filip Navara
33c558065f - Fix receiving of loopback packets.
- Fix recursive spinlock acquire in NBQueuePacket.
- Don't pend connect requests if they're satisfied during the call.
- Basic implementation of listen.

svn path=/trunk/; revision=12039
2004-12-12 11:48:04 +00:00
Steven Edwards
3e1fe0ceaa Update the Wine porting documentation.
svn path=/trunk/; revision=12038
2004-12-12 04:43:36 +00:00
James Tabor
ef9b305cdf Need -D__REACTOS__ in makefile for porting from wine.
svn path=/trunk/; revision=12037
2004-12-12 04:34:23 +00:00
Thomas Bluemel
e9615cc222 accidently committed this file, revert changes
svn path=/trunk/; revision=12036
2004-12-12 02:15:23 +00:00
Thomas Bluemel
50b193239b 1. remove mouse cursor hacks from eng/mouse
2. implemented more win2k-like gdi handle table (handle entry lookup is not yet optimized/cached!)
3. moved cursoricon.c from objects to ntuser as it's part of the user api and not of the gdi
4. get rid of the eng handle table
5. minor fixes

svn path=/trunk/; revision=12035
2004-12-12 01:40:39 +00:00
Thomas Bluemel
f6de8b04ac don't leak resources
svn path=/trunk/; revision=12034
2004-12-11 22:39:38 +00:00
Thomas Bluemel
2e7cd83da3 silence some debug output
svn path=/trunk/; revision=12033
2004-12-11 21:19:41 +00:00
Art Yerkes
ab5972cd97 Fixed warnings of mismatched format and arg type.
svn path=/trunk/; revision=12032
2004-12-11 21:07:20 +00:00
Art Yerkes
2dc5f4df19 Added double complete protection so that we never call an upper-level
completion routine more than once for the same packet.  This alleviates
a bug i observe with the realtek 8139, as reported by gge.

Define BREAK_ON_DOUBLE_COMPLETE to get a bugcheck if a send completion
handler would be called more than once.  This define is intended to help
us determine if the actual bug is in our ndis.

svn path=/trunk/; revision=12031
2004-12-11 20:48:33 +00:00
Filip Navara
aeee5da01c - Minor fixes to MenuGetRosMenuItemInfo.
svn path=/trunk/; revision=12030
2004-12-11 20:18:06 +00:00
Steven Edwards
2298445fdd disable 2 environ tests that fail under ros.
svn path=/trunk/; revision=12029
2004-12-11 20:01:50 +00:00
Steven Edwards
686bc7deab Disable a cpp test. We need dbghelp support for name de-mangling.
svn path=/trunk/; revision=12028
2004-12-11 19:51:31 +00:00
Filip Navara
33f1fed6b5 - Fix yet another heap free error.
svn path=/trunk/; revision=12027
2004-12-11 19:45:10 +00:00
Thomas Bluemel
ed47eaa79a 1. don't dispatch sent messages to windows during destruction
2. fixed class lookup in a hacky way (get's rewritten soon anyway)

svn path=/trunk/; revision=12026
2004-12-11 19:39:18 +00:00
Steven Edwards
38520a606d Added Wine msvcrt regression tests.
I am working on making us pass all of them and disabling the ones that fail.

svn path=/trunk/; revision=12025
2004-12-11 19:31:46 +00:00
Steven Edwards
aac9c446c3 Wineism cleanup has started.
svn path=/trunk/; revision=12024
2004-12-11 19:21:35 +00:00
Steven Edwards
6581094403 Remove some of the unneeded internal headers in a further effort
to de-wineify my bad import of msvcrt last year.

svn path=/trunk/; revision=12023
2004-12-11 19:21:11 +00:00
Steven Edwards
46e27ab423 msvcrt lock functions have been dewine-ifyed.
svn path=/trunk/; revision=12022
2004-12-11 19:20:19 +00:00
Steven Edwards
d9b42ea553 de-wineifying parts of msvcrt.
svn path=/trunk/; revision=12021
2004-12-11 19:19:38 +00:00
Steven Edwards
dfe99f3cf7 add wrapper code for the VkKeyScan functions around
VkKeyScanExW and GetKeyboardLayout.
(Both still need to be implemented)

svn path=/trunk/; revision=12020
2004-12-11 18:43:06 +00:00
Gregor Anich
78f1b75052 Fix output of the build system for VERBOSE=yes, add output for "make install" in half-verbose mode.
svn path=/trunk/; revision=12019
2004-12-11 17:53:12 +00:00
Filip Navara
21fc8bafa5 - Manage TCP ports using port set and dynamically assign TCP port number if sin_port == 0.
svn path=/trunk/; revision=12018
2004-12-11 16:36:06 +00:00
Steven Edwards
84d1a39be9 remove accctrl.h from include. The w32api version works fine for us.
svn path=/trunk/; revision=12017
2004-12-11 16:02:22 +00:00
Gregor Anich
78c5a766c0 Add half-verbose output to build system and make it the default (the old output is available via setting VERBOSE=yes)
svn path=/trunk/; revision=12016
2004-12-11 16:02:22 +00:00
Thomas Bluemel
8a11bbf017 RtlLargeIntegerArithmeticShift() shouldn't return uninitialized data from the stack
svn path=/trunk/; revision=12015
2004-12-11 15:23:51 +00:00
Filip Navara
cfabacaaa5 - Implement WSPGetSockName.
- Minor AFD fixes.

svn path=/trunk/; revision=12014
2004-12-11 14:59:32 +00:00
Gé van Geldorp
57bdb75d51 - Detect HDTV output
- Increase scrolling speed
- Blacklist more PCI slots

svn path=/trunk/; revision=12013
2004-12-11 14:45:00 +00:00
Martin Fuchs
090e4f33b3 update Doxyfile format
svn path=/trunk/; revision=12012
2004-12-11 14:15:57 +00:00
Martin Fuchs
01c82c0b58 enable new Doxygen option SHOW_DIRECTORIES
svn path=/trunk/; revision=12011
2004-12-11 13:40:24 +00:00
Filip Navara
309075c9f8 - Don't try to free pointer from union that isn't used.
svn path=/trunk/; revision=12010
2004-12-11 00:33:13 +00:00
Filip Navara
bc537c1d3e - Use malloc/free in C++ new/delete operator implementation (resolves heap issues with Mozilla Firefox).
svn path=/trunk/; revision=12009
2004-12-11 00:24:03 +00:00
Thomas Bluemel
da5463c04a forgot this file
svn path=/trunk/; revision=12008
2004-12-11 00:22:25 +00:00
Thomas Bluemel
4173776e7b port crypt and trustee support from Wine. Patch by Steven Edwards.
svn path=/trunk/; revision=12007
2004-12-11 00:21:33 +00:00
Royce Mitchell III
2c781cf79e PagedPool improvements: differenciate between hiredzone and loredzone, added double-free detection including stack trace of free'er, keep track of Tags, two new utility functions for debugging ( VOID ExRosDumpPagedPoolByTag(ULONG) and ULONG ExRosQueryPoolTag(PVOID) ).
svn path=/trunk/; revision=12006
2004-12-11 00:13:37 +00:00
Thomas Bluemel
0bcccac59e fixed a bug that caused locking a not anymore existing message queue while dispatching a message. Thanks to Royce for helping me :)
svn path=/trunk/; revision=12005
2004-12-10 22:40:29 +00:00
Filip Navara
79ebef95eb - Update registry keys for sound blaster driver.
svn path=/trunk/; revision=12004
2004-12-10 19:09:02 +00:00
Filip Navara
40d1739c83 - Fix HalGetAdapter for ISA adapters.
- Fix layout of EISA_CONTROL structure.

svn path=/trunk/; revision=12003
2004-12-10 19:05:33 +00:00
Gregor Anich
821da7d6f9 Use static buffer for DbgPrint message queueing instead of ExAllocatePool.
svn path=/trunk/; revision=12002
2004-12-10 18:31:04 +00:00
Gé van Geldorp
5898f3701e Add video miniport driver for Xbox, to be used in conjunction with
framebuf.dll DDI

svn path=/trunk/; revision=12001
2004-12-10 17:11:35 +00:00
Filip Navara
7cde3a39e7 - Move desktop code from NtUserUpdatePerUserSystemParameters to IntDesktopUpdatePerUserSettings.
svn path=/trunk/; revision=12000
2004-12-10 16:52:04 +00:00
Filip Navara
c5adfe4512 - Fix definitions of SecurityAnonymous, SecurityIdentification, SecurityImpersonation, SecurityDelegation.
- Fix prototype of NtDuplicateToken and change DuplicateTokenEx accordingly.
- Implement NtOpenThreadToken[Ex] (complete rewrite), PsDisableImpersonation and PsRestoreImpersonation.

svn path=/trunk/; revision=11999
2004-12-10 16:50:38 +00:00
Gregor Anich
bc28145d48 Add an option to serialize DbgPrint - don't worry, it's disabled by default and meant only for those who are tired of reading mixed debug messages.
svn path=/trunk/; revision=11998
2004-12-10 14:58:26 +00:00
KJK::Hyperion
baa78bb61d - include/ddk/ntdef.h: defined some MAX/MIN constants that were missing
- include/pe.h: defined the PE32+ structures for 64-bit support
 - include/reactos/exeformat.h: added just enough definitions to get things to compile
 - ntoskrnl/Makefile: added mm/pe.c to the build
 - ntoskrnl/mm/pe.c: now compiles. The rest of ntoskrnl doesn't yet

svn path=/branches/ELF_support/; revision=11997
2004-12-09 19:31:26 +00:00
Thomas Bluemel
30fd9c8072 implemented GetThreadIOPendingFlag() (only kernel32 part)
svn path=/trunk/; revision=11996
2004-12-09 19:11:07 +00:00
Thomas Bluemel
865bf755ca implemented CheckRemoteDebuggerPresent() (only kernel32 part)
svn path=/trunk/; revision=11995
2004-12-09 19:03:33 +00:00
Thomas Bluemel
e6bc6ec79d implemented SetDllDirectory() and GetDllDirectory(). LoadLibrary(Ex)() should be extended to use the dll directory when present!
svn path=/trunk/; revision=11994
2004-12-09 17:28:10 +00:00
Royce Mitchell III
c29e190650 allow data from SYM files to be used in stack traces in DBG builds
svn path=/trunk/; revision=11993
2004-12-09 14:20:06 +00:00
Steven Edwards
ce5b02a4d0 Started cleaning up the mess from my old import of
Wine code in to msvcrt.

I will start looking at cleaning up the memory allocation problems soon.

svn path=/trunk/; revision=11992
2004-12-09 06:10:06 +00:00
Steven Edwards
48ec3578a0 add dsound to the top makefile.
svn path=/trunk/; revision=11991
2004-12-09 06:04:40 +00:00
Steven Edwards
46b1a8f34e Fix a compile error I was seeing due to lack of mbstowcs.
Please let me know if this breaks anything for anyone else.

svn path=/trunk/; revision=11990
2004-12-09 05:53:47 +00:00
Steven Edwards
f6e33ed19b Doing some work on the msvcrt Wine mess.
Added .cvsignore to make it less trouble to see whats going on.

svn path=/trunk/; revision=11989
2004-12-09 05:34:07 +00:00
Steven Edwards
698924b5ec Disregard that last change. The line endings were messed up.
svn path=/trunk/; revision=11988
2004-12-09 04:47:20 +00:00
Steven Edwards
79d7258886 remove C++ style comments.
svn path=/trunk/; revision=11987
2004-12-09 04:41:13 +00:00
KJK::Hyperion
99f34f65ec - merge with HEAD
- removed dead file from ntdll

svn path=/branches/ELF_support/; revision=11986
2004-12-08 21:57:43 +00:00
The ReactOS Team
213d905bac This commit was manufactured by cvs2svn to create branch 'ELF_support'.
svn path=/branches/ELF_support/; revision=11985
2004-12-08 21:57:43 +00:00
Gé van Geldorp
e00f8cf1fd Don't write to blacklisted PCI functions either
svn path=/trunk/; revision=11984
2004-12-08 21:53:24 +00:00
KJK::Hyperion
859610eec5 - deleted the old <elf.h>: it contained non-standard constant and type names which made it hard to port code. Replaced with the FreeBSD one
- seminal support for multiple executable formats. Doesn't compile yet
 - initial import of the ELF loader from FreeBSD. Doesn't compile yet
 - cleaning up bitrot in Mm: reworked image sections, almost rewrote the PE loader. Doesn't compile yet
 - some (unrelated) PSEH fixes. They may already be in HEAD, not sure

svn path=/branches/ELF_support/; revision=11983
2004-12-08 20:01:41 +00:00
Richard Campbell
de75857e68 - Add DSOUND.DLL to the bootcd
svn path=/trunk/; revision=11982
2004-12-08 16:49:38 +00:00
Gé van Geldorp
284d5b4b23 Disk partitioning handling
svn path=/trunk/; revision=11981
2004-12-08 11:42:28 +00:00
Gé van Geldorp
f4ad8be090 Sync to Wine-20041201
svn path=/trunk/; revision=11980
2004-12-07 23:08:34 +00:00
Gé van Geldorp
125d613073 Sync to Wine-20041201
svn path=/trunk/; revision=11979
2004-12-07 22:45:09 +00:00
Gé van Geldorp
223a2d7ff7 Sync to Wine-20041201
Alexandre Julliard <julliard@winehq.org>
- Avoid using gettimeofday.

svn path=/trunk/; revision=11978
2004-12-07 22:32:28 +00:00
Gé van Geldorp
d50ca5db0b Sync to Wine-20041201
svn path=/trunk/; revision=11977
2004-12-07 22:19:10 +00:00
Gé van Geldorp
c7a5d769f6 Sync to Wine-20041201
Filip Navara <xnavara@volny.cz>
- Check the return value from *_GETNUMDEVS message as per KB90562.
- Fix typo in MMDRV_InstallMap.
Eric Pouech <pouech-eric@wanadoo.fr>
- Const correctness fixes.
Robert Shearman <rob@codeweavers.com>
- Fix broken thread start routines.
Eric Pouech <pouech-eric@wanadoo.fr>
Filip Navara <xnavara@volny.cz>
32 bit low level drivers now use a Unicode interface (used to be ANSI):
- Send the *_GETDEVCAPS messages in unicode format from the
  *GetDevCapsW function and call the *GetDevCapsW from their respective
  Ansi versions.
- Modify all low level drivers to correctly process the *_GETDEVCAPS
  messages as unicode.
- *_GETDEVCAPS messages are now mapped from/to unicode for 16 bit code.
- Removed all SoundBlaster naming oldies.
- Better use of some unicode functions (instead of Ansi) in winmm.
Jeremy White <jwhite@codeweavers.com>
- The Sleep(0) in this loop is incorrect, and should be removed.  This
  fixes iTunes and a game reported by che.
Remi Assailly <remi.assailly@free.fr>
- Add some missing error values in WINMM_ErrorToString.

svn path=/trunk/; revision=11976
2004-12-07 21:41:02 +00:00
Royce Mitchell III
7a672d567c SetDllDirectoryA/W(): lie to caller and indicate that their request completed successfully
svn path=/trunk/; revision=11975
2004-12-07 20:18:49 +00:00
Royce Mitchell III
902d0f0826 removed an ASSERT that occured when system ran out of GDI handles, and added more correct error handling for the condition
svn path=/trunk/; revision=11974
2004-12-07 19:53:44 +00:00
Gé van Geldorp
4b3c9f12ad Sync to Wine-20041201
Eric Pouech <pouech-eric@wanadoo.fr>
- Const correctness fixes.

svn path=/trunk/; revision=11973
2004-12-07 19:35:19 +00:00
Gé van Geldorp
bc927431e4 Sync to Wine-20041201
Eric Pouech <pouech-eric@wanadoo.fr>
- Const correctness fixes.

svn path=/trunk/; revision=11972
2004-12-07 19:28:49 +00:00
James Tabor
2899606a4b Code cleanup and sink with WindHq CVS.
svn path=/trunk/; revision=11971
2004-12-07 08:13:01 +00:00
Gé van Geldorp
12c35f6b5a Sync to Wine-20041201
Eric Pouech <pouech-eric@wanadoo.fr>
- Const correctness fixes.
Juan Lang <juan_lang@yahoo.com>
- Fix CSIDL_CONTROLS and CSIDL_PRINTERS PIDL types, and update tests now
  that they pass.
Robert Shearman <rob@codeweavers.com>
- Use more specific error codes than E_FAIL, where possible.
- Move vtable to end, give it the const modifier, and remove unneeded
  function declarations.
Juan Lang <juan_lang@yahoo.com>
- the correct registry location to override is User Shell Folders, not
  Shell Folders
- if User Shell Folders doesn't exist in HKCU, HKLM should be tried
- SHGetSpecialFolderPath should call SHGetFolderPath, not vice-versa
- the default values should be localizable
- some of the parameter checking and returned LPITEMIDLISTs were a bit
  off
- _SHExpandEnvironmentStrings should return input string if no % found
to expand, and should call ExpandEnvironmentStringsW if it doesn't
handle an environment variable directly.  Based on a patch from Dan
Kegel.
- Avoid copying invalid data on error.
- Update shell32's version to WinXP level.
Aric Stewart <aric@codeweavers.com>
- Implementation of PathCleanupSpec.
Fabrice Menard <menard.fabrice@wanadoo.fr>
- Some French translations added.
- Check the type of error returned by SHCreateDirectoryExW.
Rolf Kalbermatter <rolf.kalbermatter@citeng.com>
- Use SHCreateDirectoryEx function instead of doing explicit recursive
  directory creation.
- Fix bad memory allocation for unicode buffer.
- SHCreateDirectory should create intermediate directories if
  necessary.
- Remove extra boolean parameter in SHNotifyMoveFile as it is not
  used.
- Use in SHFileOperation the function SHNotifyCreateDirectory instead
  of SHCreateDirectoryEx as it does not anymore what is needed here.
- Fix several unsigned/signed mismatch warnings.
Alexandre Julliard <julliard@winehq.org>
- Avoid copying invalid data on error.
Francois Gouget <fgouget@free.fr>
- Assorted spelling fixes.
Tom Wickline <twickline@sitestar.net>
- Version resources cleanup.

svn path=/trunk/; revision=11970
2004-12-06 23:55:46 +00:00
Gunnar Dalsnes
c1a2a1d3de corrected the last error to check for when determining if the file already exists (when using CreateFile with CREATE_NEW)
svn path=/trunk/; revision=11969
2004-12-06 14:45:47 +00:00
Gunnar Dalsnes
018e3f9601 -correct return value/last error
-make use of macros for stu conversion
-pass NULL timeout for INFINITE wait instead of waiting for 292000 years;-D

svn path=/trunk/; revision=11968
2004-12-06 14:37:11 +00:00
Gunnar Dalsnes
aab32a11b0 -add TYPE_ALIGNMENT macro
-add macros for easy conversion to system time units (100ns)
(dunno if this is the right place to put it)

svn path=/trunk/; revision=11967
2004-12-06 14:34:43 +00:00
Gunnar Dalsnes
7a214c6c4b set correct last error
svn path=/trunk/; revision=11966
2004-12-06 14:24:51 +00:00
Gunnar Dalsnes
dd196f60cb replace NtCreateFile with ZwCreateFile
svn path=/trunk/; revision=11965
2004-12-06 13:46:43 +00:00
Gé van Geldorp
e3b65070e7 Sync to Wine-20041201
Eric Pouech <pouech-eric@wanadoo.fr>
- Const correctness fixes.

svn path=/trunk/; revision=11964
2004-12-06 10:20:26 +00:00
Gé van Geldorp
4b2aba9a6f Sync to Wine-20041201
Eric Pouech <pouech-eric@wanadoo.fr>
- Const correctness fixes.

svn path=/trunk/; revision=11963
2004-12-06 10:15:04 +00:00
Gé van Geldorp
87ac9421e8 Sync to Wine-20041201
Robert Shearman <rob@codeweavers.com>
- Add some function declarations to objbase.h.
- Add stubs for server ref counting.
- Implement HRESULT marshaling.
- Implement OleDuplicateData.
Eric Pouech <pouech-eric@wanadoo.fr>
- Const correctness fixes.
Mike Hearn <mh@codeweavers.com>
- Improve OLE function documentation.
- Bail out with CO_E_NOTINITIALIZED when apt is null.
Dmitry Timoshkov <dmitry@codeweavers.com>
- Remove bogus use of nStatCounter and hOleAut32 in CoSetState.
- Remove a comment about protecting per thread data by a critical section.
Francois Gouget <fgouget@free.fr>
- Assorted spelling fixes.
Mike Hearn <mh@codeweavers.com>
- Trace the OLE error info strings.

svn path=/trunk/; revision=11962
2004-12-06 10:07:19 +00:00
Gé van Geldorp
8679951253 Sync to Wine-20041201
Jon Griffiths <jon_p_griffiths@yahoo.com>
- Ensure DllCanUnloadNow is a truly void function, and give it a unique
  name so it can be documented per-dll.
Tom Wickline <twickline@sitestar.net>
- Version resources cleanup.

svn path=/trunk/; revision=11961
2004-12-06 09:57:06 +00:00
Gé van Geldorp
cc46c6f887 Sync to Wine-20041201
Mike McCormack <mike@codeweavers.com>
- CFM_GETSPEC always returns a space-separated list.
- Fix ofn.nFileOffset when multiple files are selected.

svn path=/trunk/; revision=11960
2004-12-06 09:51:03 +00:00
Richard Campbell
1d2d1a4b45 commented out the progress page in setup because it doesn't currently do anything.
svn path=/trunk/; revision=11959
2004-12-06 09:13:28 +00:00
Alex Ionescu
de8be4fff6 Filip and Richard are both smoking something.
Replaced syntax error and incorrect inversion.

dwUnknown is a reserved parameter (dwReserved is more correct) that is never used, but it's still incorrect to pass 0 because we should respect what the user is sending us.

svn path=/trunk/; revision=11958
2004-12-06 08:41:38 +00:00
Richard Campbell
67c8670a31 - More fixes related to the removal of the 'lib' prefix on various libraries.
- BootCD is working again now.

svn path=/trunk/; revision=11957
2004-12-06 08:33:42 +00:00
Richard Campbell
c07d07cd1a Fixed a typo that prevented ROS from booting properly.
svn path=/trunk/; revision=11956
2004-12-06 08:01:57 +00:00
Richard Campbell
4e8102a8ec - Filip is smoking something :-)
- Replaced a syntax error with 0 for now, as we don't know anything about NtUserUpdatePerUserSystemParameters.

svn path=/trunk/; revision=11955
2004-12-06 07:14:47 +00:00
Filip Navara
fc08e5303b - Basic implementation of (NtUser)UpdatePerUserSystemParameters.
- Move code querying for "PaintDesktopVersion" to NtUserUpdatePerUserSystemParameters.

svn path=/trunk/; revision=11954
2004-12-06 02:23:05 +00:00
Gunnar Dalsnes
3bfcecdd7d fix broken ShareAccess set/update. makes 80+ wine regtests pass
svn path=/trunk/; revision=11953
2004-12-06 00:26:47 +00:00
Gé van Geldorp
88f1bf6c5c Sync to Wine-20041201
Ulrich Czekalla <ulrich@codeweavers.com>
- Prevent the animation thread from waiting on itself when it stops.
Robert Shearman <rob@codeweavers.com>
- Remove unnecessary WNDPROC casts.
Alexandre Julliard <julliard@winehq.org>
- Avoid using the MAKEPOINTS macro, it's broken on big endian.
- Use correct type instead of void* in item linked list.
Dimitrie O. Paun <dpaun@rogers.com>
- Minor cleanups.
- Implement proper GWL_STYLE handling, proper reaction to style changes.
- Merge {{Inc,Dec}rement,Reset{Up,Down}}Field into one method. Fix a
  bunch of bugs in the process.  Implement DTM_[GS]ETMCFONT. Indentation
  fixes, cleanups.
- Use typesafe signature where possible.
- Use Unicode functions where possible.
- Send notification messages in the format dictated by
  infoPtr->notifyFormat.
- Audit the month calendar.
- Rename STATUSWINDOWINFO to STATUS_INFO, for consistency with other
  controls. Fix some prototypes. Always pass infoPtr around.
- Use only Unicode functions, it makes it easier to see we are fully
  Unicode compliant.
Robert Shearman <rob@codeweavers.com>
- Always remove WS_BORDER style from ComboBoxEx control.
- Correct the date of the completeness audit.
- Store the new style before redrawing and repositioning the control.
- Set cache bitmap dimensions correctly when a 0x0 image list is used.
- Optimize WM_STYLECHANGED handler to only redraw when a CCS_* style
  is changed, like native.
- bNtfUnicode is a dup' of bUnicode so remove it and fix the few
  places where it was used.
- Remove a load of useless NULL infoPtr checks.
- Hardcode the default padding like native instead of using a wacky formula.
- Replace some tabs with spaces and remove NMHDR casts.
- Implement TBN_RESTORE notification.
- Don't fill in any more information than native does for notifications.
- Store hit code in a signed integer so that we can see whether it is
  less than zero.
- Draw with ILD_TRANSPARENT instead of ILD_NORMAL to draw bitmaps from
  the native shell image list properly (reported by Thorsten Kani).
- Rewrite TOOLBAR_NotifyFormat to avoid side-effects.
James Hawkins <truiken@gmail.com>
- Fixed a few memory leaks.
Zach Gorman <zach@archetypeauction.com>
- Add the DT_NOPREFIX flag when calling DrawText() for single-line
  listview controls.
Dmitry Timoshkov <dmitry@codeweavers.com>
- Pass infoPtr around in month calendar control.
- Add support for WM_SETFONT and WM_GETFONT messages.
- Dimensions of month calendar control should not depend on the client
  window size.
- Convert NativeFont control to unicode, use hbrBackground as in native.
- Do not retrieve infoPtr twice in ToolbarWindowProc entry.
- do not move updown control and buddy if an alignment was not requested
- in UDM_SETACCEL handler do not forget to update number of accelerators
- update arrows info in WM_LBUTTONDOWN as well as in WM_MOUSEMOVE
- use accelerators in WM_LBUTTONDOWN handler
Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
- Monthcal_SetRange: Set proper value for min date.
Thorsten Kani <beebix@gmx.net>
- Use address of tab_item.extra when building drawitemstruct.
- Don't add extra OFFSET_X/Y to the calculation of rcBitmap.top/left,
  just use GetSystemMetrics.
Huw Davies <huw@codeweavers.com>
- The default font for the treeview should be the icon title font.

svn path=/trunk/; revision=11952
2004-12-05 23:09:27 +00:00
Gé van Geldorp
a0b99a485e Another lib prefix killed: libexpat.dll -> expat.dll
svn path=/trunk/; revision=11951
2004-12-05 23:07:22 +00:00
Gé van Geldorp
d753f25ac5 libwine_unicode.dll is better known as wine_unicode.dll these days
svn path=/trunk/; revision=11950
2004-12-05 23:03:22 +00:00
Filip Navara
9a8220ce63 - Fix RtlInitUnicodeStringEx for NULL case (spotted by Herv� Poussineau).
svn path=/trunk/; revision=11949
2004-12-05 21:42:54 +00:00
Gé van Geldorp
3d7ae60229 Sync to Wine-20041201
James Hawkins <truiken@gmail.com>
- Fix cabextract memory leak.

svn path=/trunk/; revision=11948
2004-12-05 21:30:16 +00:00
Filip Navara
03ac59451e - Implement RtlInitUnicodeStringEx.
svn path=/trunk/; revision=11947
2004-12-05 21:16:01 +00:00
Gé van Geldorp
44109026ba hpoussin <poussine@freesurf.fr>:
- Add full FATX support
- Add volume label setting to FAT volumes
- Change all ANSI_STRING to OEM_STRING (thanks Filip!)
- Correct one bug in VfatUpdateEntry
- Correct one bug in VfatShutdown
Fixes bugs 286, 434 and 442

svn path=/trunk/; revision=11946
2004-12-05 16:31:51 +00:00
Gé van Geldorp
cb48d72333 Copy "halup.dll" to bootcd as "hal.dll"
svn path=/trunk/; revision=11945
2004-12-05 16:27:45 +00:00
Thomas Bluemel
9221b12484 get rid of the "global" system process handle since handles are only vaild in the context of the process that they belong to
svn path=/trunk/; revision=11944
2004-12-05 15:42:42 +00:00
Art Yerkes
61a1526935 Removed my preprocessor hack. DBG appeared to be getting swallowed.
Needs some investigation.

svn path=/trunk/; revision=11943
2004-12-05 08:39:09 +00:00
Gunnar Dalsnes
5f6525bc2b KJK:Hyperion: new macro _SEH_STATIC_FILTER, some changes
svn path=/trunk/; revision=11942
2004-12-05 06:05:52 +00:00
Filip Navara
bddec4f91a - Allocate the MDI client context structure only once (and don't create a second one in WM_CREATE and leak the first one).
- Don't call SetScrollInfo with SB_BOTH.
- Don't add empty system icon to the client menu.

svn path=/trunk/; revision=11941
2004-12-05 03:50:47 +00:00
Filip Navara
abd0ead395 - Fix conversion of messages from Unicode to Ansi and back.
svn path=/trunk/; revision=11940
2004-12-05 03:50:33 +00:00
Filip Navara
20aebf67c0 - Don't delete the "first bitmap" of memory DC. It's done by DeleteDC.
svn path=/trunk/; revision=11939
2004-12-05 01:13:29 +00:00
Filip Navara
ace6b4cce4 - Rebar cursors must be destroyed with DestroyCursor and not with DeleteObject.
svn path=/trunk/; revision=11938
2004-12-05 01:12:56 +00:00
Filip Navara
245bf5efa5 - Update .cvsignore files.
- Remove makefile.ros files from CVS.

svn path=/trunk/; revision=11937
2004-12-05 00:40:28 +00:00
Filip Navara
a40265b10e - Correctly destroy tooltip icons.
- Don't use DrawEdge with NULL device context.

svn path=/trunk/; revision=11936
2004-12-05 00:22:03 +00:00
Filip Navara
326cdb4ba6 - Change DPRINT1 to DPRINT in NtUserCreateDesktop.
- Make the pattern brush bitmap objects global to prevent ownership problems.

svn path=/trunk/; revision=11935
2004-12-05 00:20:41 +00:00
Filip Navara
70a0c8d832 - Disable debugging messages.
svn path=/trunk/; revision=11934
2004-12-05 00:20:22 +00:00
Art Yerkes
e6c94e606c afd/connect.c:
- only pend the irp if we got a pending return from tcpip.
afd/info.c:
- info stub for blocking mode info.
afd/main.c:
- added disconnect plumbing.
- some reformatting, add break after each inactive case.
afd/read.c:
- early return for already closed socket.
- function to correctly complete pending recv irps on a closed socket.
- fixed read completion bug, content properly zeroed before buffer is
  replenished.
- only attempt to fulfill read irps if we got data back.
- call ProcessClose in the no data case.
- major changes to AfdConnectedSocketRead due to connection close.  we now
  recognize the case where the request to tcpip returns zero bytes immediately
  and take action, doing processclose.
afd/tdi.c:
- Added TdiDisconnect.
route.c:
- router: fixed routing bug.  we used to reject the default route if the
  address didn't match at least one bit of the target network, even if the
  netmask is zero.
if.c:
- change RouterGetRoute to RouteGetRouteToDestination
tcp.c:
- simplify TCPReceiveData by removing eof clause.  not needed.
- added SEL_FIN branch in signalling.
- added TCPTranslateError to TCPConnect
- added TCPDisconnect
dispatch.c:
- Implement disconnect
ip_output.c:
- Make a contiguous area from each output packet.  We need to streamline this.
msafd:
- Added MsafdReturnWithErrno
- streamlined function returns with standardize errno selection.

svn path=/trunk/; revision=11933
2004-12-04 23:29:56 +00:00
Gé van Geldorp
b0145a85fe Probing functions 1 and 2 of device 0 on bus 0 completely freezes the Xbox,
blacklist those functions

svn path=/trunk/; revision=11932
2004-12-04 22:52:59 +00:00
Filip Navara
b5cbaeae0c - Don't stop backtrace at the first address that can't be displayed with module name (ie. backtrace over syscalls).
svn path=/trunk/; revision=11931
2004-12-04 22:13:09 +00:00
Filip Navara
f8e3085f08 - Don't try to delete stock font.
svn path=/trunk/; revision=11930
2004-12-04 22:09:02 +00:00
Filip Navara
bf002ea532 - Correct freeing of heap memory.
svn path=/trunk/; revision=11929
2004-12-04 22:08:30 +00:00
Filip Navara
86d655cae7 - Set the ownership of NCUpdateRegion before returning the WM_NCPAINT message, so it's possible to delete it.
svn path=/trunk/; revision=11928
2004-12-04 22:07:24 +00:00
Gé van Geldorp
14db5c210e Forgot to remove the space reservation for hal_pagetable
svn path=/trunk/; revision=11927
2004-12-04 21:48:45 +00:00
Gé van Geldorp
6352c035d1 Add beginnings of HAL for Xbox
svn path=/trunk/; revision=11926
2004-12-04 21:43:37 +00:00
Gé van Geldorp
a0422cb524 Use MmMapIoSpace() instead of messing around with the page tables directly
when mapping the video frame buffer for HAL

svn path=/trunk/; revision=11925
2004-12-04 21:40:55 +00:00
Gé van Geldorp
eb23bc5111 Current versions of VMware provide a correct BIOS memory map
svn path=/trunk/; revision=11924
2004-12-04 20:58:13 +00:00
Filip Navara
5958bb419b - Implement SetMenuItemInfo[AW].
svn path=/trunk/; revision=11923
2004-12-04 19:53:55 +00:00
Filip Navara
495274f192 - Implement lstr[i]cmp[AW] using CompareString[AW] and properly handle NULL parameters.
svn path=/trunk/; revision=11922
2004-12-04 19:52:55 +00:00
Filip Navara
7b11cf526c - Implement QueueUserAPC.
svn path=/trunk/; revision=11921
2004-12-04 19:45:56 +00:00
Filip Navara
8ea045450c - Fix the return value of WaitForMultipleObjectsEx.
svn path=/trunk/; revision=11920
2004-12-04 19:31:26 +00:00
Filip Navara
2cb4c8a744 - Implement QueueUserAPC.
svn path=/trunk/; revision=11919
2004-12-04 19:30:09 +00:00
Thomas Bluemel
5070bf0c61 fixed some function prototypes
svn path=/trunk/; revision=11918
2004-12-04 19:28:47 +00:00
Gé van Geldorp
529f4da133 Let HAL handle its own mapping of the video frame buffer
svn path=/trunk/; revision=11917
2004-12-04 17:22:47 +00:00
Gregor Anich
0291044900 Remove some unused files, little cosmetic changes.
svn path=/trunk/; revision=11916
2004-12-04 17:10:52 +00:00
Gregor Anich
7acc56f32e Added InterlockedCompareExchangePointer macro and 64 bit versions for Interlocked[Compare]ExchangePointer macros for use in ntoskrnl.
svn path=/trunk/; revision=11915
2004-12-04 16:56:20 +00:00
Gregor Anich
666228254c Use InterlockedCompareExchange64 instead of InterlockedCompareExchange for 64bit builds.
svn path=/trunk/; revision=11914
2004-12-04 15:49:20 +00:00
Gregor Anich
0467e4ac56 Remove "lib" suffix from "libwine" because it's added by the build system automatically.
svn path=/trunk/; revision=11913
2004-12-04 15:45:38 +00:00
Hartmut Birr
88ab19cd71 - Split up the handling if the fsd returns STATUS_NOT_IMPLEMENTED in MoveFileWithProgressW.
- Converted the destination name before calling NtSetInformationFile in MoveFileWithProgressW.

svn path=/trunk/; revision=11912
2004-12-04 15:38:22 +00:00
Eric Kohl
98ac389c31 Implement GetSystemDefaultUILanguage() and IsValidLocale().
svn path=/trunk/; revision=11911
2004-12-04 13:59:41 +00:00
Gregor Anich
181afb23d6 Prefix libs in dk/w32 and dk/nkm with "lib" to make use of GCC -l switch possible.
svn path=/trunk/; revision=11910
2004-12-03 23:37:44 +00:00
Gé van Geldorp
92ed2da0da Reorganise HAL so multiple HAL versions can be built in parallel
svn path=/trunk/; revision=11909
2004-12-03 20:10:45 +00:00
KJK::Hyperion
671a28dc00 src/libexec/rtld-elf/map_object.c (ELF user-mode mapper) from FreeBSD. Initial commit, no code change yet
svn path=/branches/ELF_support/; revision=11908
2004-12-03 14:17:10 +00:00
James Tabor
bd2288fed5 Fix and add missing files, and will allow the use of bison as an option of choice.
svn path=/trunk/; revision=11907
2004-12-03 06:21:44 +00:00
Thomas Bluemel
67ca81e36d no need to copy the buffers to the stack
svn path=/trunk/; revision=11906
2004-12-02 21:22:36 +00:00
Thomas Bluemel
9786cae211 the time zone buffers need to be large enough, applications like firefox might attempt to write into it
svn path=/trunk/; revision=11905
2004-12-02 21:19:56 +00:00
Filip Navara
3c09abb096 - Remove duplicate definitions.
svn path=/trunk/; revision=11904
2004-12-02 21:01:11 +00:00
Filip Navara
44ed30d08a *** empty log message ***
svn path=/trunk/; revision=11903
2004-12-02 19:46:16 +00:00
Filip Navara
80686a352c - Update OLEAUT32 to Wine-20041202
svn path=/trunk/; revision=11902
2004-12-02 19:38:49 +00:00
Eric Kohl
ccfff75080 Use the GMT timezone by default.
svn path=/trunk/; revision=11901
2004-12-02 14:09:25 +00:00
Eric Kohl
9fbe02e539 - RegQueryValueExA: Return the correct data size for binary data types.
svn path=/trunk/; revision=11900
2004-12-02 14:08:27 +00:00
KJK::Hyperion
4e74d0a081 src/libexec/rtld-elf/rtld.c (ELF runtime linker core) from FreeBSD. Initial commit, no code change yet
svn path=/branches/ELF_support/; revision=11899
2004-12-02 02:44:18 +00:00
Gregor Anich
bfbb47d39e Fixed handling of exceptions in memory read/write functions, moved ASSERT(0) to the right place.
svn path=/trunk/; revision=11898
2004-12-02 01:33:02 +00:00
Emanuele Aliberti
78b654db33 I removed an old comment about replacing PAGESIZE with PAGE_SIZE, which somebody else already did.
svn path=/trunk/; revision=11897
2004-12-01 23:51:11 +00:00
Gregor Anich
383304c284 Catch hang-up regtests, added _DispatcherTimeout macros for tests to specify timeout (default is 5000ms)
svn path=/trunk/; revision=11896
2004-12-01 23:23:47 +00:00
Emanuele Aliberti
550e5093ca *** empty log message ***
svn path=/trunk/; revision=11895
2004-12-01 23:05:37 +00:00
Magnus Olsen
70f9a164de Thx filps
> This is wrong and this file should be autogenerated. Only the
> dinput.spec file should be in CVS!
>
> - Filip

svn path=/trunk/; revision=11894
2004-12-01 20:46:33 +00:00
Filip Navara
b1ac258a6d - Get full OLEAUT32 to compile.
svn path=/trunk/; revision=11893
2004-12-01 20:06:15 +00:00
Thomas Bluemel
18ef45edfe Always use the PSEH names for NLG to avoid conflicts when _SEH_NO_NATIVE_NLG is defined but <setjmp.h> is included nevertheless. This fixes the use of PSEH in win32k. Also declared the _SEHCompilerSpecificHandler as __inline so that GCC will ignore it when it's unused. This fixes the inclusion of <pseh.h> in a PCH
Patch by KJK

svn path=/trunk/; revision=11892
2004-12-01 19:20:53 +00:00
Thomas Bluemel
572a3a13c5 removed unused definitions
svn path=/trunk/; revision=11891
2004-12-01 18:38:04 +00:00
Magnus Olsen
a5e8dcaa7d add
opengl32.dll, glu32.dll, dinput.dll, dinput8.dll to reactos bootcd

svn path=/trunk/; revision=11890
2004-12-01 16:09:03 +00:00
Magnus Olsen
ed830f0425 Build
Dxguid, dinput and dinput8
from reactos make file

svn path=/trunk/; revision=11889
2004-12-01 16:07:57 +00:00
Magnus Olsen
3da7540959 forget add file dinput.spec.def
other wise dinput8 will not build

svn path=/trunk/; revision=11888
2004-12-01 16:05:39 +00:00
Magnus Olsen
d77247b55e forget add file dinput.spec.def
other wise dinput will not build

svn path=/trunk/; revision=11887
2004-12-01 15:58:32 +00:00
Magnus Olsen
3e1bd42330 forget add file dinput.spec.def
other wise dinput will not build

svn path=/trunk/; revision=11886
2004-12-01 15:20:13 +00:00
Eric Kohl
019c9076ee Set timezone without changing the local time.
svn path=/trunk/; revision=11885
2004-12-01 14:28:54 +00:00
Art Yerkes
ceeb351515 - sanity check: assert DISPATCH_LEVEL for the dpc.
- Added a DEBUG_LOCK that shows lock activity.
- Moved crummy externs from event.c to tcp.h
- Withdraw TCPCancelReceiveRequest: i didn't mean to commit that
- Added signalled sockets list to TCP so that we don't do reentrant stuff from
  inside oskit.  The signal list holds sockets that have been identified by
  oskit as needing service.
- After packet receive and on the timer we drain this list, designalling each
  socket and completing relevant irps.
- According to msdn, the io cancellation routine must release the cancel spin
  lock, but we're entered with it acquired.  Our implementation in ntoskrnl
  matches this so the tcpip implementation was wrong.  Removed acquire.
- DDKAPI on DispCancelRequest.  Avoid some stack corruption on DPCs that now
  shows up.
- Make sure to IpMarkIrpPending and not edit flags by hand on Irps in dispatch.

svn path=/trunk/; revision=11884
2004-12-01 08:14:15 +00:00
Art Yerkes
89dd06fa40 miniport:
Make sure MiniQueueDpc is not called from PASSIVE_LEVEL.
Moved NdisMQueryInformationComplete so that the function and not the macro
is called from the DPC.  This was breaking stuff severely.
The adapter lock needn't be held when doing MiniDequeueWorkItem because we're
at DISPATCH_LEVEL already by virtue of being in a DPC target.
protocol:
Make sure MiniQueueWorkItem is called at DISPATCH_LEVEL.

svn path=/trunk/; revision=11883
2004-12-01 08:02:28 +00:00
Richard Campbell
ad7e640f0c msiexec requires msi, so don't build that either, as it breaks the tree.
svn path=/trunk/; revision=11882
2004-12-01 05:49:23 +00:00
Magnus Olsen
c40648eb2d add mouse support to dinput
note the mouse buffer are bit broke. do not expect some games working with the mouse

I hope this will dispary when gdi hooks comes

svn path=/trunk/; revision=11881
2004-11-30 20:29:48 +00:00
Thomas Bluemel
6f1f653942 don't build msi for now as it uses a 3rd party build utility until situation is cleared
svn path=/trunk/; revision=11880
2004-11-30 20:21:33 +00:00
James Tabor
5679e292f7 Added msi.dll and msiexec to the build system.
svn path=/trunk/; revision=11879
2004-11-30 19:19:48 +00:00
James Tabor
a9a6f59924 Sync msiexec with winehq cvs
svn path=/trunk/; revision=11878
2004-11-30 19:16:37 +00:00
James Tabor
34151c8b26 First port of Wine projects msi.dll
svn path=/trunk/; revision=11877
2004-11-30 19:10:50 +00:00
Art Yerkes
6b4f09638b connect: Allow async connections, and assume that concurrent operations
(like write) can happen.
main: Allow empty EaInfo in open, re: async select and the special control
socket.
read + write: assertions
tdi: don't wait for connect to return, remove event.

svn path=/trunk/; revision=11876
2004-11-30 04:49:50 +00:00
Art Yerkes
38ac0afdbb Make packet printing obey debug bits.
svn path=/trunk/; revision=11875
2004-11-30 04:23:42 +00:00
Art Yerkes
3fcb2d5efc Turned off printing in oskittcp.
svn path=/trunk/; revision=11874
2004-11-30 04:17:34 +00:00
Gunnar Dalsnes
00641f6f5b can't free non-allocated memory
svn path=/trunk/; revision=11873
2004-11-30 02:28:00 +00:00
Gunnar Dalsnes
bcf7f5403f don't free non allocated memory
svn path=/trunk/; revision=11872
2004-11-30 02:26:25 +00:00
Art Yerkes
fa6c7ae193 - Defined __NTDRIVER__ to turn on some code that is meant only for kernel mode.
- Removed another address object (AddrBuildAddress)
- Removed ROUTE_CACHE_NODE everywhere and replaced it with NEIGHBOR_CACHE_ENTRY
  anywhere it was used, since NCE contains sufficient information.
  - We will need to reintroduce PathMTU (the only unique information) in RCN.
    I intend to do that by expanding the NCE to contain an entry for each
    remote contact (not only neighbors), and add an MTU field there.
- ICMP, TCP, UDP, RawIP, IPSendDatagram - Changed RCN to NCE
- Protect ip timer work item from being multiply queued under load.
- Router: Add RouteGetRouteToDestination (the only function preserved from
  route.c).  This function is cut down to only calling FindOnLinkInterface
  and RouterGetRoute.
- Added DefaultGateway handling (The default route is automatically added).
- Cleaning in CONNECTION_ENDPOINT (removed ReceivedSegments)
- iinfo: Return correct type number for loopback adapter.

svn path=/trunk/; revision=11871
2004-11-30 00:10:41 +00:00
Gunnar Dalsnes
1abe87090e make some wine reg. tests pass
svn path=/trunk/; revision=11870
2004-11-29 17:31:21 +00:00
Filip Navara
dc2d3110e4 Dmitry Timoshkov <dmitry@codeweavers.com>
DrawTextEx should allocate text buffer on stack for thread safeness.

svn path=/trunk/; revision=11869
2004-11-29 16:51:10 +00:00
Eric Kohl
17f1fe8577 - FileTimeToLocalFileTime() and LocalFileTimeToFileTime() take timezone bias into account.
svn path=/trunk/; revision=11868
2004-11-29 15:02:33 +00:00
Eric Kohl
df74513933 - Convert boot time and system time from local time to UTC as soon as the timezone information is available.
- ExLocalTimeToSystemTime() and ExSystemTimeToLocalTime() take timezone bias into account.

svn path=/trunk/; revision=11867
2004-11-29 15:00:46 +00:00
Steven Edwards
456c0f4377 Removed inclusion of stdio.h as it causes a build error under one of my gccs
svn path=/trunk/; revision=11866
2004-11-29 04:10:31 +00:00
Gunnar Dalsnes
0e4455e169 forgot to remove something
svn path=/trunk/; revision=11865
2004-11-29 01:42:03 +00:00
Magnus Olsen
aafa6f0a89 first port of wine directx support to reactos
add wine dinput and dinput8 it have been modify to working in windows and reactos.
when reactos got hooks implant remove all #ifdef __REACTOS__  and code that belong it compelete, then
remove all #ifndef __REACTOS__  to geting in working in reactos and windows.
dxguid comes from mingw with some modify

todo
rewrite dection code of keyboard, mouse, joystick to using windows registers to get what type of hardware.

Limit
Only keyboard are working in reactos for moment.

svn path=/trunk/; revision=11864
2004-11-29 00:15:23 +00:00
Magnus Olsen
7fed5c71ae remove it for wine dinput
svn path=/trunk/; revision=11863
2004-11-29 00:13:08 +00:00
Gunnar Dalsnes
e108cd331f "import" profiles.c from wine. all Wine's profile reg. tests now pass
svn path=/trunk/; revision=11862
2004-11-29 00:08:59 +00:00
Gunnar Dalsnes
c084bd7f6f add missing glue
svn path=/trunk/; revision=11861
2004-11-29 00:06:22 +00:00
Gunnar Dalsnes
1b870b2636 RtlDetermineDosPathNameType_U: give meaningfull names to constands (from wine)
svn path=/trunk/; revision=11860
2004-11-29 00:05:31 +00:00
Gé van Geldorp
6e001376f9 Add hardware detection stub for Xbox
svn path=/trunk/; revision=11859
2004-11-28 22:42:40 +00:00
Gregor Anich
7123f1d088 Cleaned config.h a bit...
svn path=/trunk/; revision=11858
2004-11-28 22:07:19 +00:00
Gregor Anich
7be720f8ec Move some ntoskrnl compiletime configuration defines into ntoskrnl/include/config.h (new file)
svn path=/trunk/; revision=11857
2004-11-28 22:06:25 +00:00
Gé van Geldorp
90a424deea Adjust screen width if HDTV cable in use
svn path=/trunk/; revision=11856
2004-11-28 21:54:11 +00:00
Gregor Anich
bbc25623e4 Add Mesa3D, FreeBSD and adns to the list of acknowledged projects.
svn path=/trunk/; revision=11855
2004-11-28 21:52:08 +00:00
Art Yerkes
6a56469c5a Turned off debug output in CVS (we need a better way to do this).
svn path=/trunk/; revision=11854
2004-11-28 21:21:11 +00:00
Gunnar Dalsnes
baad262a94 deny usage of too long strings in add/find atom. makes wine reg. tests happy.
svn path=/trunk/; revision=11853
2004-11-28 21:16:15 +00:00
Gregor Anich
e0f64b28d5 There's no reason to set TS in cr0 when returning from a w32 callback - either the thread will have used the FPU, in this case we don't do anything, or it has not used the FPU and we copy it's saved FPU state (if any) into the original's stack FPU area (in this case TS in cr0 will already be set and we don't need to set it)
svn path=/trunk/; revision=11852
2004-11-28 18:14:02 +00:00
Gé van Geldorp
947403dfc8 Fix vertical position of text in single-line edit controls.
svn path=/trunk/; revision=11851
2004-11-28 16:51:18 +00:00
Eric Kohl
d899ea5ca7 Set system time and update boot time and relative timers.
svn path=/trunk/; revision=11850
2004-11-28 12:59:33 +00:00
Hartmut Birr
e8e894de92 - Dipped the code between HalInitializeProcessor and HalStartNextProcessor. Used the functions according its names.
- Changed the init sequence in KeInit1 and KePrepareForApplicationProcessorInit.
- Fixed the pae mode initialisation for application processors.

svn path=/trunk/; revision=11849
2004-11-28 01:31:08 +00:00
Hartmut Birr
e67ae130d4 - Improved smp functions.
- Fixed the enabling/disabling of the higher irqs in Enable8259AIrq/Disable8259AIrq.
- Moved the local apic functions into its own file.
- Implemented the IpiInterrupt.
- Changed the destination of the startup ipis.
- Enabled interrupts on calls to KiDispatchInterrupt and KiDeliverApc.
- Delivered dpcs always on HalEndSystemInterrupt.
- Set the logical apic id according to the processor number from ntoskrnl.
- Dipped the code between HalInitializeProcessor and HalStartNextProcessor.
  Used the functions according its names.

svn path=/trunk/; revision=11848
2004-11-28 01:30:02 +00:00
Hartmut Birr
4ed81178eb - Canceled my last changes.
svn path=/trunk/; revision=11847
2004-11-27 23:50:27 +00:00
Hartmut Birr
7eacfe074f - Used a fast mutex for the client id structure.
svn path=/trunk/; revision=11846
2004-11-27 19:41:55 +00:00
Hartmut Birr
ae233008f1 - Enabled interrupts on page faults also for V86 mode.
svn path=/trunk/; revision=11845
2004-11-27 19:32:57 +00:00
Hartmut Birr
63e5456684 - Fixed a debug message.
svn path=/trunk/; revision=11844
2004-11-27 19:29:22 +00:00
Hartmut Birr
f3a288609e - Fixed the processor number at the call to KiIpiSendRequest.
svn path=/trunk/; revision=11843
2004-11-27 19:27:31 +00:00
Hartmut Birr
728ecbbafb - Simplified the irq lock table.
- Enabled interrupts while calling KiDeliverApc.

svn path=/trunk/; revision=11842
2004-11-27 19:24:15 +00:00
Hartmut Birr
e0b921f698 - Removed the timer value lock, because this lock isn't necessary.
- Update the kernel and user time from the kpcr.

svn path=/trunk/; revision=11841
2004-11-27 16:57:03 +00:00
Hartmut Birr
e64b5d5945 - Acquire the dispatcher database lock in PsBlockThread if the caller didn't
acquire this lock. This prevents from dead locks on smp machines.

svn path=/trunk/; revision=11840
2004-11-27 16:52:35 +00:00
Hartmut Birr
6c0c99c180 - Prevent from terminate a thread for twice.
- Don't call KeCancelTimer for the thread timer if the thread lock is held.

svn path=/trunk/; revision=11839
2004-11-27 16:47:05 +00:00
Hartmut Birr
be30cb2cf0 - Update the page directories for the stack outside of the code where the dispatcher database lock is held.
svn path=/trunk/; revision=11838
2004-11-27 16:42:50 +00:00
Eric Kohl
0a7852d87c - F4 key flips the listbox in default (not extended UI) mode.
svn path=/trunk/; revision=11837
2004-11-27 16:38:28 +00:00
Hartmut Birr
2c9eb4b5f2 - Made a tlb entry invalid on all processors if the mapping is deleted or changed.
svn path=/trunk/; revision=11836
2004-11-27 16:37:52 +00:00
Eric Kohl
460b7f79ca - User ASSERT instead of assert.
svn path=/trunk/; revision=11835
2004-11-27 16:36:01 +00:00
Eric Kohl
79f4538d98 - User ROUND_UP macros to calculate the ACL size.
- Fix potential 64 bit issues.

svn path=/trunk/; revision=11834
2004-11-27 16:33:21 +00:00
Hartmut Birr
79a75d3246 - Implemented KiIpiSendRequest for simple requests.
- Removed KeIpiCallForBootProcessor.
- Used the KPCR of the processors for storing the ipi data.

svn path=/trunk/; revision=11833
2004-11-27 16:32:10 +00:00
Hartmut Birr
b51c0305db - Saved the fpu state before the actual thread switching occurs (only for smp machines).
svn path=/trunk/; revision=11832
2004-11-27 16:19:22 +00:00
Hartmut Birr
2b6de7c143 - Saved the state of the fpu at a win32 call and restored the state
after the call to the previous state.

svn path=/trunk/; revision=11831
2004-11-27 16:12:26 +00:00
Eric Kohl
73c4349b14 Enlarge the timezone combobox so that more timezones are displayed.
svn path=/trunk/; revision=11830
2004-11-27 13:33:40 +00:00
Filip Navara
0548bf639e - Fix calling convention of IoReadPartitionTable, IoSetPartitionInformation and IoWritePartitionTable.
svn path=/trunk/; revision=11829
2004-11-27 13:04:06 +00:00
Eric Kohl
aeda3e3f55 Remove the DPRINT containing SharedData->DosDeviceMap entirely because it doesn't exist any more.
svn path=/trunk/; revision=11828
2004-11-27 11:42:56 +00:00
Casper Hornstrup
dd3ebaf245 2004-11-27 WaxDragon <waxdragon@gmail.com>
* bootdata/packages/reactos.dff: Add dnsapi.dll, iphlpapi.dll,
	rpcrt4.dll, and ole32.dll.

svn path=/trunk/; revision=11827
2004-11-27 00:56:28 +00:00
Casper Hornstrup
2e0a20f0c4 2004-11-27 Casper S. Hornstrup <chorns@users.sourceforge.net>
* apps/utils/driver/load/.cvsignore: Use native line-endings.
	* apps/utils/driver/load/makefile: Ditto.
	* apps/utils/driver/unload/.cvsignore: Ditto.
	* apps/utils/driver/unload/makefile: Ditto.
	* apps/utils/infinst/.cvsignore: Ditto.
	* drivers/fs/ntfs/notes.txt: Ditto.
	* drivers/lib/csq/MAKEFILE: Ditto.
	* drivers/test/csqtest/Makefile: Ditto.
	* drivers/test/csqtest/SOURCES: Ditto.
	* drivers/video/displays/vga/main/enable.c: Ditto.
	* drivers/video/displays/vga/objects/copybits.c: Ditto.
	* include/tgetopt.h: Ditto.
	* include/ntos/kdbgsyms.h: Ditto.
	* lib/freetype/i386/setjmplongjmp.s: Ditto.
	* lib/icmp/icmp.dsp: Ditto.
	* lib/msvcrt/setjmp/i386/setjmp.s: Ditto.
	* lib/string/strncpy.c: Ditto.
	* tools/rgenstat/web/.cvsignore: Ditto.
	* tools/wmc/y_tab.c: Ditto.

svn path=/trunk/; revision=11826
2004-11-27 00:46:25 +00:00
Art Yerkes
e0e18ffc09 Correct silly bugcheck when a packet will not be routed. Not exposed before
because of false positives on loopback adapter.
We need to expect NCE to be NULL.

svn path=/trunk/; revision=11825
2004-11-26 21:17:22 +00:00
Art Yerkes
80178bd318 Removed RouteFriendlyAddRoute. Not needed.
Router now chooses a route correctly:
- Only choose a route if the prefix length is greater than or equal to the
  netmask. for the target route.  (We still choose the most specific route).
- Changed NBAddNeighbor to NBFindOrCreateNeighbor in
  RouteAddRouteToDestination because it triggers an ARP probe.  Setting the
  ARP cache state initially to PROBE skips the first ARP query and runs a
  bit afoul of the cache entry state machine.

svn path=/trunk/; revision=11824
2004-11-26 20:32:54 +00:00
Aleksey Bragin
ca85c39272 Removed DPRINT containing SharedData->DosDeviceMap, since there is no DosDeviceMap in this struct.
If someone thinks this is wrong, please correct me (I asked in channel, but no reaction at all)

svn path=/trunk/; revision=11823
2004-11-26 17:36:18 +00:00
Thomas Bluemel
2a76e70cbe fixed line endings
svn path=/trunk/; revision=11822
2004-11-26 12:53:51 +00:00
Art Yerkes
fe500719a5 Moved pseh.h away from precomp.h to avoid 'defined but not used' warning.
svn path=/trunk/; revision=11821
2004-11-26 08:26:24 +00:00
Art Yerkes
01e1531802 Converted eols.
svn path=/trunk/; revision=11820
2004-11-26 07:41:25 +00:00
Art Yerkes
e593105229 Fixed ws2_32 for __USE_W32API and dnsapi.
svn path=/trunk/; revision=11819
2004-11-26 07:24:17 +00:00
Art Yerkes
b3c9021b8f - Added add and delete route primitives in tcpip/ninfo.c
- Changed signature of RouterRemoveRoute to better match the information
  provided at the time when we delete a route.
- Changed signature of RouterCreateRoute for consistency.
- Cleaned up ninfo, get route info a bit.  Removed 'bad' case, not needed.
  Made magic 2 into TDI_ADDRESS_TYPE_IP, shortened code.
- Added AddrWidenAddress to generate a network address from a target and
  netmask.
- Changed the main mib to contain the number of fib entries, not the number
  of route cache entries.

svn path=/trunk/; revision=11818
2004-11-26 06:55:17 +00:00
Art Yerkes
9eef3a6021 Used IP_FORWARD_ADD and IP_FORWARD_DEL constants instead of numbers.
svn path=/trunk/; revision=11817
2004-11-26 06:52:59 +00:00
Art Yerkes
5f4756c3f5 Added simple route utility that uses iphlpapi to change the route table.
svn path=/trunk/; revision=11816
2004-11-26 06:51:47 +00:00
Art Yerkes
9ee12f6e6e Forwarder for __USE_W32API.
svn path=/trunk/; revision=11815
2004-11-26 06:21:45 +00:00
Art Yerkes
f968d716fa Converted registry functions to unicode.
HeapFree -> RtlFreeHeap and similar.
Populated resinfo_reactos.  We will now pull the nameservers from the
primary list in Services\Tcpip\Parameters, as well as from per-adapter
lists.

svn path=/trunk/; revision=11814
2004-11-26 00:32:59 +00:00
Art Yerkes
d06ac05a3c Fixed dnsapi for use with w32api headers by adjusting a few names (mostly
DNS_RECORDA,W -> DNS_RECORD)
Fixed bug in DnsQuery, we weren't checking NULL on result->rrs.addr.

svn path=/trunk/; revision=11813
2004-11-26 00:12:57 +00:00
Art Yerkes
bcfb287416 - Removed prefix.c and the prefix list. Adapter and route netmasks are now
checked directly.
- Removed ADE lists on adapters and associated functions.  Adapters now have
  a set of address fields with well-known meanings.
- Removed functions that allocate IP_ADDRESS.  No IP_ADDRESS is ever allocated
  alone any longer.  This saves management overhead and heap traffic.
- Removed NET_TABLE_ENTRY and NTE list and associated functions.  Lookups are
  now done against the original information sources, the adapter list, the
  neighbor cache and the route table.
- Propogated NTE removal throughout, changing NTE to IP_INTERFACE in every
  case.
- When we have alias support, we'll create multiple interfaces referencing
  the same adapter.  This is consistent with the way BSDs do it and I feel
  it provides sufficient abstraction.
- Allow a zero-length buffer request in info to return the number of bytes
  needed for the request to succeed.

svn path=/trunk/; revision=11812
2004-11-25 23:56:59 +00:00
Art Yerkes
fd54d2585c Added Exclusive flag in afd, which is used by WSAAsyncSelect. Previous
exclusive selects should be completed with STATUS_CANCELLED when a new
exclusive one is posted.
Minor hack for the locked handle set.  Not dangerous but should be made
better.

svn path=/trunk/; revision=11811
2004-11-25 23:36:36 +00:00
Art Yerkes
c350a8df8c Added WSPEnumNetworkEvents, some reformatting.
Will be modified by alex_ionescu shortly.

svn path=/trunk/; revision=11810
2004-11-25 23:35:06 +00:00
Art Yerkes
773d644b11 Added gethostbyname implementation written by Adam Kelly (insulanus).
- Mostly complete, does not support multiple returned a records or hosts file
  though
- Relies on dnsapi
- Stores hostent struct in teb->Hostent

svn path=/trunk/; revision=11809
2004-11-25 23:32:54 +00:00
Filip Navara
077765450f - Send the WM_ACTIVATE message with WA_INACTIVE when deactivating window to the window being deactivated (ie. revert last w3seek's change).
- Send the deactivation messages *before* setting the active window for message queue.

svn path=/trunk/; revision=11808
2004-11-25 22:18:59 +00:00
Alex Ionescu
1623a0079f Fix IO completion APIs/Structures.
Implement WSPASyncSelect and friends. Event re-enabling functionality missing and will be added tonight.

svn path=/trunk/; revision=11807
2004-11-25 22:18:17 +00:00
KJK::Hyperion
fd6301067f blight's ELF support
svn path=/branches/ELF_support/; revision=11806
2004-11-25 19:48:30 +00:00
The ReactOS Team
41f413349d This commit was manufactured by cvs2svn to create branch 'ELF_support'.
svn path=/branches/ELF_support/; revision=11805
2004-11-25 19:48:30 +00:00
Eric Kohl
3379855217 - Replace WIN32 types by corresponding native types.
- Replace debug macros and fix potential 64bit issues (pointers casted to DWORDs).

svn path=/trunk/; revision=11804
2004-11-25 19:25:06 +00:00
KJK::Hyperion
3bd2eb22b1 blight's elf.h
svn path=/trunk/; revision=11803
2004-11-25 18:24:08 +00:00
Gregor Anich
0662980bf4 Multiprocessor support for FPU/SSE state saving.
svn path=/trunk/; revision=11802
2004-11-25 13:22:54 +00:00
Eric Kohl
0229e6cb3a Preselect the timezone based on the current user language.
svn path=/trunk/; revision=11801
2004-11-24 23:09:46 +00:00
Eric Kohl
c5881e6a93 Add acknowledgement page and license dialog and update title strings.
svn path=/trunk/; revision=11800
2004-11-24 21:28:14 +00:00
Gé van Geldorp
1f759dcf55 If stub name is of the form function@0, output as function@0@0 in the .def
file because the last @0 will be stripped later on

svn path=/trunk/; revision=11799
2004-11-24 20:11:52 +00:00
Filip Navara
6e2b742680 - Fix pointer arithmetic on FileName variable in NtCreateProcess (spotted by Arty).
svn path=/trunk/; revision=11798
2004-11-24 18:13:18 +00:00
Filip Navara
eee803acf7 - Add PCNET driver to the boot CD.
svn path=/trunk/; revision=11797
2004-11-24 17:57:14 +00:00
Filip Navara
5a384bebca - Fix call to RtlInitializeBitMap (spotted and debugged by Arty).
svn path=/trunk/; revision=11796
2004-11-24 17:54:38 +00:00
Eric Kohl
11bc9ef5f4 Replace assert_irql by ASSERT_IRQL.
svn path=/trunk/; revision=11795
2004-11-24 11:12:19 +00:00
Eric Kohl
4605029c67 Don't use a hardcoded sector size of 512 bytes.
svn path=/trunk/; revision=11794
2004-11-24 11:09:49 +00:00
Eric Kohl
0b6ffe64b0 Replace assert by ASSERT.
svn path=/trunk/; revision=11793
2004-11-24 11:02:15 +00:00
Art Yerkes
d1ad9c04ee simple gethostbyname test case
svn path=/trunk/; revision=11792
2004-11-24 04:08:44 +00:00
Thomas Bluemel
a0811f8010 don't send WM_ACTIVATE messages to the previous active window which caused the infinite loop in regedit
svn path=/trunk/; revision=11791
2004-11-24 00:11:06 +00:00
Filip Navara
842b2d68dc Merge:
MiniLocateAdapter never zeroed Adapter if the adapter didn't match,
  and never actually ever matched a name.  It always returned the
  last adapter in the list.

svn path=/trunk/; revision=11790
2004-11-23 23:51:01 +00:00
Filip Navara
f8246d2f62 Merge from ndis_wip_22102004 branch:
- Compile with W32API headers.
- Remove obsolate and no more exported functions (as of NDIS 5.1).
- Shrink the LOGICAL_ADAPTER structure a bit and use NDIS_MINIPORT_BLOCK fields instead.
- Make the WrapperConfigurationHandle an opaque structure instead of registry key handle.
- Use PnP DMA interface instead of the HAL one (TODO: Add reference counting).
- Move Ethernet filter routines from 40gone.c/miniport.c to separate file (efilter.c).
- Add PnP IRP handler and move device intitialization to IRP_MN_START_DEVICE handler.
- Implement device shutdown in IRP_MN_STOP_DEVICE.
- Minor fix for sending packets with deserialized miniports.
- Read bus type, bus number and slot number from registry if the PnP manager doesn't supply them.
- NdisMFreeMapRegisters shouldn't crash if no map registers were allocated.
- Implement NdisMQueryAdapterResources, NdisMGetDmaAlignment and NdisMReadDmaCounter.
- Implement NdisMPciAssignResources (Eric Kohl).
- Fix Ndis[Read/Write]PciSlotInformation to work for non-primary PCI buses (Eric Kohl).

svn path=/trunk/; revision=11789
2004-11-23 18:58:47 +00:00
Gé van Geldorp
0b66faaabd Make transfer of control to kernel work on Xbox
svn path=/trunk/; revision=11787
2004-11-23 11:28:02 +00:00
Magnus Olsen
6de4a5c738 remove -werror to get it compile agein
svn path=/trunk/; revision=11786
2004-11-23 11:14:41 +00:00
Gé van Geldorp
bb446ae87d Change dialog sizes to fit into 640x480
svn path=/trunk/; revision=11783
2004-11-22 20:35:56 +00:00
Art Yerkes
ce8fea9728 Changed Context to PC(NdisPacket)->Context in DLComplete call in
LoopTransmit.  We were passing the wrong context (our own) when we
should have passed the client's context.  Silly bug made possible
by use of void *.

svn path=/trunk/; revision=11782
2004-11-22 17:08:33 +00:00
Eric Kohl
e4b1bafb21 RegQueryValueExA: Free ValueName Unicode string when it is no loger in use.
svn path=/trunk/; revision=11781
2004-11-22 16:11:25 +00:00
Thomas Bluemel
adb7404b3d install msimg32.dll which is required by explorer
svn path=/trunk/; revision=11780
2004-11-22 12:45:23 +00:00
Gé van Geldorp
a652e3b1ee - Add automatic dependency tracking
- Add acknowledgements/license page

svn path=/trunk/; revision=11779
2004-11-22 11:01:45 +00:00
Gé van Geldorp
b87b03682a Zach Gorman <zach@archetypeauction.com>
The initial dialog focus should be established by the default handler
for SetFocus(), not in the dialog creation code.

svn path=/trunk/; revision=11778
2004-11-22 10:59:01 +00:00
Casper Hornstrup
7982beed9e 2004-11-21 Casper S. Hornstrup <chorns@users.sourceforge.net>
* apps/utils/Makefile (UTIL_APPS): Remove regsvr32.

svn path=/trunk/; revision=11777
2004-11-21 23:00:18 +00:00
Casper Hornstrup
2f2747b9dd 2004-11-21 Casper S. Hornstrup <chorns@users.sourceforge.net>
* apps/utils/regsvr32: Move to subsys/system/regsvr32.

svn path=/trunk/; revision=11776
2004-11-21 22:45:51 +00:00
Martin Fuchs
178f3ae085 fix UTF8 conversion for the bookmarks list
svn path=/trunk/; revision=11775
2004-11-21 22:42:51 +00:00
Casper Hornstrup
dd1feec678 * Remove arp, finger, ipconfig, netstat, ping, telnet, and whois; Moved to reactos.
svn path=/trunk/; revision=11774
2004-11-21 22:33:50 +00:00
Casper Hornstrup
4a35f24013 2004-11-21 Casper S. Hornstrup <chorns@users.sourceforge.net>
* apps/utils/Makefile (UTIL_NET_APPS): Add arp, finger, ipconfig,
	netstat, ping, telnet, and whois.
	* bootdata/packages/reactos.dff: Add arp.exe, finger.exe, ipconfig.exe,
	netstat.exe, ping.exe, telnet.exe, and whois.exe.
	* apps\utils\net\arp: New directory; Move from rosapps.
	* apps\utils\net\finger: Ditto.
	* apps\utils\net\ipconfig: Ditto.
	* apps\utils\net\netstat: Ditto.
	* apps\utils\net\ping: Ditto.
	* apps\utils\net\telnet: Ditto.
	* apps\utils\net\whois: Ditto.

svn path=/trunk/; revision=11773
2004-11-21 22:27:01 +00:00
Alex Ionescu
58eb955e58 Put back 1.5 Revision. CVS messed up the update and kept the old mps.h when I comitted.
svn path=/trunk/; revision=11772
2004-11-21 22:01:11 +00:00
Alex Ionescu
1fe3441f75 Hal DMA Patch: Implemented correct AdapterObject, updated some AdapterFunctions, which are much more complete and correct now. Implemented EISA structure for port access instead of hard-coded offsets.
svn path=/trunk/; revision=11771
2004-11-21 21:53:07 +00:00
Gé van Geldorp
ac33643ce2 After creating the nice error message, actually pass it on to the error
reporting routine. Thanks Casper.

svn path=/trunk/; revision=11770
2004-11-21 21:33:04 +00:00
Thomas Bluemel
587b831bb2 don't use uninitialized variable
svn path=/trunk/; revision=11769
2004-11-21 21:23:24 +00:00
Thomas Bluemel
ad45691d40 1. don't allow the ProcessImageFileName information class for NtSetInformationProcess() anymore
2. implemented the ProcessImageFileName class for NtQueryInformationProcess
3. changed NtCreateProcess to obtain the file name of the loaded image

svn path=/trunk/; revision=11768
2004-11-21 21:09:43 +00:00
Casper Hornstrup
19f47c9b4f * Remove calc, regedt32, and regsvr32; Moved to reactos.
svn path=/trunk/; revision=11767
2004-11-21 21:07:33 +00:00
Casper Hornstrup
fd70584747 2004-11-21 Casper S. Hornstrup <chorns@users.sourceforge.net>
* Makefile (SYS_APPS): Add calc, regedt32, and regsvr32.
	* bootdata/packages/reactos.dff: Add calc.exe, regedt32.exe, and
	regsvr32.exe.
	* subsys/system/calc: New directory; Move here from rosapps.
	* subsys/system/regedt32: Ditto.
	* subsys/system/regsvr32: Ditto.

svn path=/trunk/; revision=11766
2004-11-21 21:02:04 +00:00
Art Yerkes
23398b098d - Improvements for select/implementation of event select.
- Added EventSelect PKEVENT, and other bits needed in AFD_FCB to implement
  event select.
- Select and event select are now properly notified on socket hangup.
- Added more places where state changes are needed.
- PollReeval now has the alternate goal of firing the event select event.
- Fixed crash with unsupported protocols, re: null device
- Set AFD_EVENT_SEND and AFD_EVENT_RECEIVE appropriately on connect complete.
- Fixed sending FIN from a dying socket and receiving SEL_FIN on one in tcpip,
  by adding an additional way to lookup sockets.
- Removed even more spew.
- Small speedup: don't need to redo checksum in tcp_input.  It's already done
  in our ip defrag code.

svn path=/trunk/; revision=11765
2004-11-21 20:54:52 +00:00
Gunnar Dalsnes
55ff4ad170 add stubs GetSecurityInfoExA/W
svn path=/trunk/; revision=11764
2004-11-21 20:14:36 +00:00
Casper Hornstrup
98e47a5b69 * Replace bzero with memset and bcopy with memcpy
svn path=/trunk/; revision=11763
2004-11-21 20:10:22 +00:00
Art Yerkes
3adacc20ec Correct uninitialized warnings for Status in two places.
svn path=/trunk/; revision=11762
2004-11-21 19:51:37 +00:00
Steven Edwards
27e4ae606f Most of what is needed is already in w32api/include.
svn path=/trunk/; revision=11761
2004-11-21 19:18:01 +00:00
Casper Hornstrup
9cfd7436ac 2004-11-21 Casper S. Hornstrup <chorns@users.sourceforge.net>
* bootdata/hivesys.inf: Remove kmregtests.

svn path=/trunk/; revision=11760
2004-11-21 19:11:31 +00:00
Gunnar Dalsnes
b424efdf6b kill.c: remove useless call to KeRemoveAllWaitsThread + misc
usecall.c: fix apc delivery
debug.c: add irql asserts

svn path=/trunk/; revision=11759
2004-11-21 18:42:58 +00:00
Casper Hornstrup
e4a0875a54 2004-11-21 Casper S. Hornstrup <chorns@users.sourceforge.net>
* Makefile (DLLS_KBD): Add kbdda.
	* bootdata/txtsetup.sif: Add Danish language 406.
	* bootdata/hivesys.inf: Add kbdda.dll for Danish language 406.
	* bootdata/packages/reactos.dff: Ditto.
	* lib/kbdda: New directory.
	* lib/kbdda/.cvsignore: New file.
	* lib/kbdda/kbdda.c: Ditto.
	* lib/kbdda/kbdda.def: Ditto.
	* lib/kbdda/kbdda.rc: Ditto.
	* lib/kbdda/makefile: Ditto.

svn path=/trunk/; revision=11758
2004-11-21 18:40:38 +00:00
Gunnar Dalsnes
eedd0d823f work.c: reimpl. using kernel queues
resource.c: add asserts

svn path=/trunk/; revision=11757
2004-11-21 18:38:51 +00:00
Gunnar Dalsnes
4635919140 call KiDeliverAPc at correct irql
svn path=/trunk/; revision=11756
2004-11-21 18:37:56 +00:00
Gunnar Dalsnes
24dc4f3595 add missing KeEnter/LeaveCriticalRegion before/after aquireing/releasing resource lock
svn path=/trunk/; revision=11755
2004-11-21 18:35:05 +00:00
Gunnar Dalsnes
0c5a9ba4f5 fix kernel queues + misc fixes/cleanups
svn path=/trunk/; revision=11754
2004-11-21 18:33:54 +00:00
Hartmut Birr
0f6f4de9e1 - Acquire always the dpc lock on smp systems.
- Set/reset DpcRoutineActive at HIGH_LEVEL (or if the dpc queue is locked).

svn path=/trunk/; revision=11753
2004-11-21 18:13:47 +00:00
Filip Navara
7af1a71e33 Revert:
- Fix prototype of FsRtlInitializeLargeMcb and FsRtlInitializeMcb.

svn path=/trunk/; revision=11752
2004-11-21 17:47:22 +00:00
Filip Navara
f2b2fe0a5d - Fix prototype of FsRtlInitializeLargeMcb and FsRtlInitializeMcb.
- Fix some FsRtl* exports.

svn path=/trunk/; revision=11751
2004-11-21 16:34:57 +00:00
Martin Fuchs
af60a0a9e2 cleanup resource script
svn path=/trunk/; revision=11750
2004-11-21 15:46:16 +00:00
Martin Fuchs
7ce0322c85 decode HTML-encoded bookmark names
svn path=/trunk/; revision=11749
2004-11-21 15:35:15 +00:00
Martin Fuchs
4e66d23d42 work around GCC's wide string constant bug when compiling inline functions
svn path=/trunk/; revision=11748
2004-11-21 14:26:14 +00:00
Gregor Anich
e1e1824939 Properly fix "Unused variable" warning.
svn path=/trunk/; revision=11747
2004-11-21 13:33:34 +00:00
Gé van Geldorp
ea32cbced0 Don't print "sector size" message, it is causing confusion
svn path=/trunk/; revision=11746
2004-11-21 13:30:44 +00:00
Thomas Bluemel
7f363e4ceb use ASSERT instead of assert
svn path=/trunk/; revision=11745
2004-11-21 13:18:19 +00:00
Thomas Bluemel
c116c5fefe fixed crash on shutdown
svn path=/trunk/; revision=11744
2004-11-21 13:02:02 +00:00
Thomas Bluemel
d23655f8c4 export AlphaBlend(), GradientFill() and TransparentBlt() as STDCALL
svn path=/trunk/; revision=11743
2004-11-21 12:55:05 +00:00
Gé van Geldorp
ad4cf3bf0b Report on which drive we couldn't find a partition table
svn path=/trunk/; revision=11742
2004-11-21 12:28:12 +00:00
Gé van Geldorp
4d111bdd6c Work around broken BIOSes which report random API subset support bitmaps
when checking for extended INT13 availability for CDROMs

svn path=/trunk/; revision=11741
2004-11-21 12:27:01 +00:00
Filip Navara
df6bd1fced - Use IntGdiSetRect instead of NtGdiSetRect.
svn path=/trunk/; revision=11740
2004-11-21 12:14:34 +00:00
Martin Fuchs
425c131de1 avoid "unused variable" warning
svn path=/trunk/; revision=11739
2004-11-21 11:58:55 +00:00
Hartmut Birr
5eb96dfc97 - Set also FS and GS on a debug service call.
svn path=/trunk/; revision=11738
2004-11-21 11:37:22 +00:00
Thomas Bluemel
afc7938b56 check the status code NtQueryInformationProcess returned
svn path=/trunk/; revision=11737
2004-11-21 11:03:17 +00:00
Thomas Bluemel
f290137ce4 properly copy the device map - it's still not initialized properly
svn path=/trunk/; revision=11736
2004-11-21 10:59:11 +00:00
Filip Navara
dcdb5fefb0 - Use absolute value of width in NtGdiCreateBitmap.
svn path=/trunk/; revision=11735
2004-11-21 10:55:29 +00:00
Martin Fuchs
375d7004a4 alpha-blend hidden notification icons
svn path=/trunk/; revision=11734
2004-11-21 10:53:55 +00:00
Hartmut Birr
d69a931982 - Fixed the check for the empty (or not empty) dpc queue in KeInsertQueueDpc.
svn path=/trunk/; revision=11733
2004-11-21 10:48:33 +00:00
Thomas Bluemel
dc61134cf1 fixed building problems
svn path=/trunk/; revision=11732
2004-11-21 10:39:12 +00:00
Alex Ionescu
2a42da87f2 1) Updated KUSER_SHARED_DATA to NT5+ exported documented defintiion, which meant the removal of DosDevices. Used proper NT _DEVICE_MAP Structure for this, but did it in a "hack" way, ie, not a fully implementation, but enough to keep the basic old functionality as before. This will need an review once the Ob Manager is overhaulted. Modified kernel32 to request the _DEVICE_MAP for the current process, implemented the query routine (but made it return the default systme device map intead of per process) and changed the kernel code to use the default device map instead.
2) Updated the HalDispatchTable to Version 3.0. Not a huge change, just added/updated some functions.
3) Rewrote most of the DPC Code to take advantage of the CPU/Importance "laws". Stress testing on my machine revealed no issues on CVS HEAD. Still needs some review to make it so that idle threads can call dpcs (so that low importance dpcs will be dispatched by the idle thread). I will modify this later.

svn path=/trunk/; revision=11731
2004-11-21 06:51:18 +00:00
Art Yerkes
5fea7dac8b Patch to correct multiple adapter bind from protocols. There were two
bugs here:
1) The loop in protocol.c was wrong and was rewritten by Andrew Munger
   with help from Thomas Weidenmueller
2) MiniLocateAdapter never zeroed Adapter if the adapter didn't match,
   and never actually ever matched a name.  It always returned the
   last adapter in the list (spotted and fixed after the above fixes).

svn path=/trunk/; revision=11730
2004-11-21 04:20:38 +00:00
Art Yerkes
30be599db3 Add a null check to prevent crashes during the vulnerable time when Filter
is not set.

svn path=/trunk/; revision=11729
2004-11-21 03:02:57 +00:00
Gregor Anich
8119f6f384 FPU/SSE state saving on taskswitching, FPU and SSE exception support.
svn path=/trunk/; revision=11728
2004-11-20 23:46:37 +00:00
Martin Fuchs
ede5e4a1f9 update doxygen script
svn path=/trunk/; revision=11727
2004-11-20 23:06:52 +00:00
Martin Fuchs
716bc3dbb3 notification area button to toggle hidden icons
svn path=/trunk/; revision=11726
2004-11-20 22:35:06 +00:00
Art Yerkes
110f1eeb5e Forgot to update a prototype in here. Also, a while ago, I stopped getting
the LDR_MODULE definition, so I fixed that.

svn path=/trunk/; revision=11725
2004-11-20 22:21:35 +00:00
Gé van Geldorp
25dc91ca69 Make it compile
svn path=/trunk/; revision=11724
2004-11-20 22:20:12 +00:00
Filip Navara
f5c76d2826 - Add IRQL assert to ExFreePagedPool.
svn path=/trunk/; revision=11723
2004-11-20 21:16:38 +00:00
Filip Navara
c7802eb216 - Allocate buffer for sub keys from NonPagedPool in order to prevent crashes in CmiAddKeyToList where the buffer is accessed at DISPATCH_LEVEL.
svn path=/trunk/; revision=11722
2004-11-20 21:14:16 +00:00
Martin Fuchs
a4efd45e84 display notification icon change times
svn path=/trunk/; revision=11721
2004-11-20 19:30:41 +00:00
Thomas Bluemel
ba5522cda3 silence debug message
svn path=/trunk/; revision=11720
2004-11-20 19:08:37 +00:00
Steven Edwards
9a2f072607 added riched20 to the build
svn path=/trunk/; revision=11719
2004-11-20 18:30:52 +00:00
Steven Edwards
984b8c4f6a Added dummy riched20.dll by Aric Stewart from CrossOver.
This is not a correct implementation, it is just enough to get some applications
to work. A fully working riched20 will be developed in winehq.

svn path=/trunk/; revision=11718
2004-11-20 18:26:16 +00:00
Casper Hornstrup
0315098375 2004-11-20 Casper S. Hornstrup <chorns@users.sourceforge.net>
* drivers/net/tcpip/tests/tests/ipreceive.c (RunTest): Switch parameters
	to _AssertEqualValue.
	* drivers/net/tcpip/tests/stubs.tst: Add missing stubs.
	* lib/ws2_32/tests/stubs.tst: Ditto.
	* ntoskrnl/tests/stubs.tst: Ditto.
	* regtests/shared/regtests.h: Use unsigned format specifiers.

svn path=/trunk/; revision=11717
2004-11-20 17:56:23 +00:00
Thomas Bluemel
74ce6443c2 added missing definitions
svn path=/trunk/; revision=11715
2004-11-20 17:55:41 +00:00
Casper Hornstrup
68e9370d78 2004-11-20 Casper S. Hornstrup <chorns@users.sourceforge.net>
* config (SEH): Remove.
	* regtests/shared/regtests.c (_alloca): Remove; Use from malloca.h
	instead.
	(PerformTest): Use PSEH to catch exceptions while running tests.
	* tools/config.mk (CONFIG): Don't add SEH.
	* tools/helper.mk: Link tests with pseh.a.

svn path=/trunk/; revision=11714
2004-11-20 17:48:38 +00:00
Art Yerkes
e2632afc71 Fixed continue in the GDB stub. Sorry for breaking it.
svn path=/trunk/; revision=11713
2004-11-20 17:45:15 +00:00
Thomas Bluemel
b7100ed2fc 1. removed window station/desktop hacks from ntoskrnl
2. implemented window station/desktop inheritance on thread/process startup
3. implemented process locking
4. fixed some fields in the EPROCESS structure

svn path=/trunk/; revision=11712
2004-11-20 16:46:06 +00:00
Martin Fuchs
76bd18b75f update change list
svn path=/trunk/; revision=11710
2004-11-20 16:23:35 +00:00
Eric Kohl
75d4557d4c Add UpdatePerUserSystemParameters stub and call it from winlogon.
svn path=/trunk/; revision=11709
2004-11-20 15:55:45 +00:00
Gé van Geldorp
65708377d8 Implement NtUserGetClipboardOwner
svn path=/trunk/; revision=11707
2004-11-20 09:34:43 +00:00
KJK::Hyperion
34149e19fc Use _alloca instead of stack variables, because the compiler feels too damn smart
svn path=/trunk/; revision=11706
2004-11-19 23:58:33 +00:00
Gé van Geldorp
c99ffa31ca At least show the window when wParam is TRUE and the window is currently
invisible

svn path=/trunk/; revision=11705
2004-11-19 23:07:09 +00:00
Gunnar Dalsnes
90125b20eb return correct ExitCode for non-terminated threads
svn path=/trunk/; revision=11704
2004-11-19 22:19:33 +00:00
Filip Navara
6699c721fc - Correctly calculate size of the CM_RESOURCE_LIST structure.
svn path=/trunk/; revision=11703
2004-11-19 21:31:02 +00:00
Thomas Bluemel
7857b6c7e9 report proper buffer sizes as documented
svn path=/trunk/; revision=11701
2004-11-19 20:02:47 +00:00
Thomas Bluemel
b260dfd4b0 buffers are calculated properly, no need to allocate more memory for safety anymore
svn path=/trunk/; revision=11700
2004-11-19 19:34:11 +00:00
Steven Edwards
35ab538802 Add more non-standard LANG_* ids.
svn path=/trunk/; revision=11699
2004-11-19 13:00:12 +00:00
Thomas Bluemel
cd57e3d41d 1. fixed definition of the DEBUG_MODULE_INFORMATION structure
2. implemented module and heap list enumeration for toolhelp

svn path=/trunk/; revision=11698
2004-11-19 01:30:35 +00:00
Filip Navara
c145b0b293 - Allocate the memory from paged pool instead of non-paged pool as almost all code (and none of the font code) in Win32k runs at IRQL < DISPATCH_LEVEL.
svn path=/trunk/; revision=11697
2004-11-18 22:22:46 +00:00
Eric Kohl
f5912089d2 Pass a fake translated resource list to a driver when a device is started.
svn path=/trunk/; revision=11695
2004-11-18 11:46:07 +00:00
Gé van Geldorp
583f2092ad Rollback identify code (Filip reluctantly agrees)
svn path=/trunk/; revision=11694
2004-11-18 08:32:32 +00:00
Art Yerkes
f404e670d5 Removed bad assertion. It's ok for TCPSendData to return immediately if the
data has been copied into the tcp buffer.  Requiring STATUS_PENDING here is
definately an error.

svn path=/trunk/; revision=11693
2004-11-18 05:02:10 +00:00
Art Yerkes
a2f6011b3d Changed kdbg a bit by adding some new flags (and a new command):
condition [all|umode|kmode]

condition all -> Handle all exceptions.  This is like the current kdbg
condition umode -> Handle unhandled usermode exceptions and all kmode
	exceptions.
condition kmode -> Handle only unhandled kernelmode exceptions (default)

svn path=/trunk/; revision=11692
2004-11-18 02:10:28 +00:00
Gunnar Dalsnes
4af944d53d revert incorrect fix
svn path=/trunk/; revision=11691
2004-11-17 23:55:36 +00:00
Gé van Geldorp
c9e0a17bab Get rid of global volume boot sector and store required info in separate
variables

svn path=/trunk/; revision=11690
2004-11-17 22:07:45 +00:00
Filip Navara
4d21897222 - Don't report CmResourceTypeNull resources for unused PCI descriptor resource entries.
svn path=/trunk/; revision=11688
2004-11-17 20:39:27 +00:00
Eric Kohl
9a7c335263 Implement NdisOverrideBusNumber.
svn path=/trunk/; revision=11686
2004-11-17 13:10:01 +00:00
Art Yerkes
ce37c3ed04 Member unknown renamed internaluse.
svn path=/trunk/; revision=11685
2004-11-17 07:12:27 +00:00
Art Yerkes
2c9bba03b5 tcpip: fix for udp socket close.
ws2_32: unstub WSAFDIsSet, small amount of work on select
msafd: select fixes
afd: major select overhaul
- 1 exit point for poll objects from the deviceext
- make sure to cancel the timer
- UpdatePollWithFCB now runs at DISPATCH_LEVEL in every case
- Added handle locks so we can signal and check handles properly

svn path=/trunk/; revision=11684
2004-11-17 05:17:22 +00:00
Martin Fuchs
4a7d199e30 make read_directory_unix() static
svn path=/trunk/; revision=11682
2004-11-16 19:42:08 +00:00
Martin Fuchs
36c518427e fix german menu text
svn path=/trunk/; revision=11681
2004-11-16 19:41:54 +00:00
Casper Hornstrup
59f81f9539 2004-11-16 Casper S. Hornstrup <chorns@users.sourceforge.net>
* drivers/lib/ip/network/arp.c: Assert certain conditions.
	* drivers/lib/ip/network/loopback.c: Ditto.
	* drivers/lib/ip/network/neighbor.c: Ditto.
	* drivers/lib/ip/transport/tcp/tcp.c: Ditto.
	* drivers/net/tcpip/datalink/lan.c: Ditto.
	* drivers/net/tcpip/datalink/loopback.c: Ditto.
	* drivers/net/tcpip/include/debug.h (ASSERT_KM_POINTER): Define.
	* drivers/lib/ip/transport/tcp/if.c: Remove disabled code.
	* drivers/net/afd/afd/main.c (AfdDispatch): Print known unimplemented
	IOCTLs.
	* drivers/net/tcpip/include/precomp.h: Include roscfg.h.
	* drivers/net/tcpip/tcpip/dispatch.c (DispTdiListen): Pass the right
	connection object to TCPListen.
	* drivers/net/tcpip/tcpip/mocklock.c: Fix some assertions.

svn path=/trunk/; revision=11680
2004-11-16 18:07:58 +00:00
Gregor Anich
845737a0c6 Simple implementation of some multi-monitor APIs (I hope this was the last one)
svn path=/trunk/; revision=11679
2004-11-16 17:36:37 +00:00
Gregor Anich
ad2c067338 Simple implementation of some multi-monitor APIs.
svn path=/trunk/; revision=11678
2004-11-16 17:25:47 +00:00
Gregor Anich
3de1bbc635 Simple implementation of some multi-monitor APIs.
svn path=/trunk/; revision=11677
2004-11-16 16:29:21 +00:00
Eric Kohl
43d65f019d - Make WrapperConfigurationContext a pointer to a WRAPPER_CONTEXT structure.
- Use correct bus number in NtImmediateReadPciSlotInformation, NdisImmediateWritePciSlotInformation, NdisReadPciSlotInformation and NdisWritePciSlotInformation.

svn path=/trunk/; revision=11676
2004-11-16 16:21:09 +00:00
Gunnar Dalsnes
1d44f8fade fix broken work item impl.
svn path=/trunk/; revision=11675
2004-11-15 23:14:36 +00:00
Gé van Geldorp
22e0d4d8eb Create Int versions of Rect functions
svn path=/trunk/; revision=11674
2004-11-15 23:10:42 +00:00
Art Yerkes
ccc0695954 Need AFD_IMMEDIATE.
svn path=/trunk/; revision=11673
2004-11-15 20:17:48 +00:00
Gunnar Dalsnes
d06c68bb99 add some error checking
svn path=/trunk/; revision=11672
2004-11-15 19:20:23 +00:00
Art Yerkes
28bfa5fcdd Implemented non-blocking recv and recvfrom.
Fixed address pass-through in afd.
Fixed some address cruft in udp and datagram regarding incoming
datagrams.

svn path=/trunk/; revision=11671
2004-11-15 18:24:57 +00:00
Eric Kohl
f44ad86cf8 Silence debug messages.
svn path=/trunk/; revision=11670
2004-11-15 16:36:28 +00:00
Eric Kohl
514e74cba8 Remove the default locale id.
svn path=/trunk/; revision=11669
2004-11-15 14:43:55 +00:00
Eric Kohl
42991379db Don't set the default locale id.
svn path=/trunk/; revision=11668
2004-11-15 14:41:25 +00:00
Eric Kohl
4d1046ee76 Don't retrieve the system locale id from the registry, use ZwQueryDefaultLocale instead.
svn path=/trunk/; revision=11667
2004-11-15 14:40:14 +00:00
Eric Kohl
f838190b50 NtSetDefaultLocale must only store the lanuage id (lower half) of the given system locale id.
svn path=/trunk/; revision=11666
2004-11-15 14:38:37 +00:00
Eric Kohl
0fafbcbcf4 Use autogenerated device names for PDOs on PCI buses.
svn path=/trunk/; revision=11665
2004-11-15 11:49:37 +00:00
Eric Kohl
d0da55a427 Add support for FILE_AUTOGENERATED_DEVICE_NAME to IoCreateDevice.
svn path=/trunk/; revision=11664
2004-11-15 11:41:33 +00:00
Eric Kohl
3b5c8f81f3 Register handler for PCI bus 2.
svn path=/trunk/; revision=11663
2004-11-15 09:18:19 +00:00
Gé van Geldorp
be441ae62f Don't need flashleds
svn path=/trunk/; revision=11662
2004-11-14 22:07:53 +00:00
Gé van Geldorp
4e5131fd86 Add UI support on the Xbox
svn path=/trunk/; revision=11661
2004-11-14 22:04:39 +00:00
Art Yerkes
b055a01bc8 Added port allocation.
Datagram: only match a sender if a sender match was specified.

svn path=/trunk/; revision=11660
2004-11-14 21:28:21 +00:00
Art Yerkes
e280e1272c Fixed UDP.
- Header size adjustments corrected.
- Added callback specified by caller.
- Port allocation added.

svn path=/trunk/; revision=11659
2004-11-14 21:27:15 +00:00
Hartmut Birr
9c5da940f0 - Started the implementation of the ipi calls.
svn path=/trunk/; revision=11658
2004-11-14 20:00:06 +00:00
Art Yerkes
323b7c4460 UDP working.
svn path=/trunk/; revision=11657
2004-11-14 19:45:16 +00:00
Hartmut Birr
1dcd7629c6 - Stored the apc/dpc requests in the KPCR.
svn path=/trunk/; revision=11656
2004-11-14 19:04:42 +00:00
Hartmut Birr
35636e998d - Used the time stamp counter from a pentium if it is available
(in KeStallExecutionProcessor/KeQueryPerformanceCounter).

svn path=/trunk/; revision=11655
2004-11-14 19:01:31 +00:00
Hartmut Birr
b39c7349f9 - Used the shared user data page instead of NtQuerySystemTime to get the time.
svn path=/trunk/; revision=11654
2004-11-14 18:53:11 +00:00
Hartmut Birr
349e167cae - Implemented waitable console handles.
- Removed a fake event after a input event to empty the queue in CsrReadInputEvent.

svn path=/trunk/; revision=11653
2004-11-14 18:47:10 +00:00
Gregor Anich
26b8d50a75 Fix handling of debug traps in GDB stub/KiDispatchException (This time for real I hope, sorry for the breakage)
svn path=/trunk/; revision=11652
2004-11-14 16:00:02 +00:00
Eric Kohl
e9d3254541 Set the current date/time and update the current time zone name on the date/time page.
svn path=/trunk/; revision=11651
2004-11-14 12:28:21 +00:00
Art Yerkes
11070b8093 Fixed bug in ne2000 driver, re: copying ethernet frame header when only
payload should be copied in MiniportTransferData.

Changed tcpip to not consider the ethernet header anywhere above
ProtocolReceive.

svn path=/trunk/; revision=11650
2004-11-14 10:13:17 +00:00
Steven Edwards
62e00f3e2f Enabled the ReactOS pcnet driver by default.
Added 1 line note about how to use the vendor driver rather than ours.

svn path=/trunk/; revision=11649
2004-11-14 03:51:26 +00:00
Hartmut Birr
ea6e7df66a - Stored the informations from the cpuid instruction within the KPCR of each processor.
svn path=/trunk/; revision=11648
2004-11-13 23:08:35 +00:00
Gregor Anich
59881376cd Fix handling of debug traps in GDB stub/KiDispatchException.
svn path=/trunk/; revision=11647
2004-11-13 23:00:15 +00:00
Hartmut Birr
60c952c6ce - Fixed the scanning for boot options.
svn path=/trunk/; revision=11646
2004-11-13 22:30:18 +00:00
Hartmut Birr
5260bf08c8 - Removed some unnecessary type casts.
svn path=/trunk/; revision=11645
2004-11-13 22:27:16 +00:00
Casper Hornstrup
9f05cd01e3 2004-11-13 Casper S. Hornstrup <chorns@users.sourceforge.net>
* apps/utils/net/roshttpd/include/list.h (CList<Item>::Get): Declare i
	before use.

svn path=/trunk/; revision=11644
2004-11-13 17:20:30 +00:00
Thomas Bluemel
3e0c6c7994 implemented MmGetSystemRoutineAddress()
svn path=/trunk/; revision=11643
2004-11-13 13:09:07 +00:00
Filip Navara
d0917c6faf - Add NdisCopyLookaheadData macro.
svn path=/trunk/; revision=11642
2004-11-13 12:28:08 +00:00
Richard Campbell
0c3b663f9c - removed a few more DPRINTs that make no sense.
svn path=/trunk/; revision=11641
2004-11-13 02:02:07 +00:00
Richard Campbell
7b3d7ecb51 - Removed more nonsense debug prints.
- btw these changes are based on behavior discovered, on Windows XP SP2.  Your mileage may vary.

svn path=/trunk/; revision=11640
2004-11-13 01:57:45 +00:00
Richard Campbell
ad0e8d471b - Check for a valid hwnd.
- passing Key Up messages  as a parameter always returns 0;
- WM_SYSCHAR IS used however.
- Get rid of an odd debug print message.
- Changed the Window parameter name to hWnd.

svn path=/trunk/; revision=11639
2004-11-13 01:52:56 +00:00
Richard Campbell
c29ce9bc5b - Fixed a typo
svn path=/trunk/; revision=11638
2004-11-13 01:14:42 +00:00
Eric Kohl
6c7ede35c0 Add remaining time zones.
svn path=/trunk/; revision=11637
2004-11-13 00:16:32 +00:00
Art Yerkes
9a7c38e472 lib/ip:
transport/tcp/* remove some spew, eliminate deadlock condition (calling afd
  with socket locked).
 network/router.c -- GvG noticed a wrong condition at line 153:
  This code used to stop when finding a matching bit, not a non-matching one.
net/tcpip:
 makefile: change order of .a files.  Could break compilation before under
  the right circumstances.
 turn off some spew
 datalink/lan.c:
  NdisTransferData does not count header size when figuring out how many bytes
  to copy.  Most of the tcpip code does, so we do something wierd here.  We
  must fix this later in a better way.

svn path=/trunk/; revision=11636
2004-11-13 00:06:33 +00:00
Steven Edwards
2b84842184 Added .cvsignore file.
svn path=/trunk/; revision=11635
2004-11-12 21:30:13 +00:00
Aleksey Bragin
32333d3280 Removed PriorityBoost from DPRINT at IoSecondStageCompletion, since there is no priority boost in this func
svn path=/trunk/; revision=11634
2004-11-12 18:50:53 +00:00
Aleksey Bragin
0745f5a9ae Remove a warning about incorrect types, after discussion in channel it was decided to do it as &Process->Pcb instead of (PKPROCESS)Process.
svn path=/trunk/; revision=11633
2004-11-12 18:42:25 +00:00
Gé van Geldorp
2e3419423b Since CreateProcessA() is called, also use the Ansi version of STARTUPINFO
svn path=/trunk/; revision=11632
2004-11-12 18:23:31 +00:00
Gé van Geldorp
b4ef4b5e8f Add FATX support
svn path=/trunk/; revision=11631
2004-11-12 17:17:08 +00:00
Eric Kohl
69b5fdb8f1 - Build UNICODE dll.
- Fix the crash when the customize input locale button is pressed.

svn path=/trunk/; revision=11630
2004-11-12 15:42:36 +00:00
Eric Kohl
83541672c0 Defedf is not needed any longer.
svn path=/trunk/; revision=11629
2004-11-12 12:07:51 +00:00
Eric Kohl
7cd6c44a8a - Move NtAllocateUuids from the Security Reference Monitor to the Executive.
- Update NtAllocateUuids to W2K signature.
- Add NtSetUuidSeed.

svn path=/trunk/; revision=11628
2004-11-12 12:06:54 +00:00
Eric Kohl
55b37c64ca - Move NtAllocateUuids from the Security Reference Monitor to the Executeive.
- Update NtAllocateUuids to W2K signature.
- Add NtSetUuidSeed.

svn path=/trunk/; revision=11627
2004-11-12 12:04:32 +00:00
Art Yerkes
1eb22067d1 Small DBG related patches.
svn path=/trunk/; revision=11626
2004-11-12 09:27:02 +00:00
Art Yerkes
dea7f87980 Prevent some deadlock scenarios by unlocking the FCB while calling into
tcpip.sys.

svn path=/trunk/; revision=11625
2004-11-12 07:34:56 +00:00
Steven Edwards
0af675ba07 Added new patch for Alex's BindImage, Map and Load and
friends to CVS for next merge. This patch applies clean to
Winehq tip.

svn path=/trunk/; revision=11624
2004-11-12 03:55:15 +00:00
Alex Ionescu
126f95c1ea Fix calls to KeAttachProcess
svn path=/trunk/; revision=11623
2004-11-11 22:40:30 +00:00
Alex Ionescu
a9c33470e5 Kernel:
- apc.c: Fixed some bugs and used Dispatcher Lock. Simplified some functions and renamed/inlined others.
- wait.c: Fixed some assumptions about Dispatcher Lock and Waiting/Alertability
- process.c: Fully implemented KeStackAttachProcess and KeStackDetachProcess. Made all functions use PKPROCESS and not PEPROCESS.
Memory Manager: Fixed calls to KeAttachProcess/DetachProcess to typecast PKPROCESS
Process Manager: Removed call to empty function in apc.c

svn path=/trunk/; revision=11622
2004-11-11 22:23:52 +00:00
Eric Kohl
0cc7d4d22d Fix typo: Call RegDeleteValue to delete a value.
svn path=/trunk/; revision=11621
2004-11-11 17:46:22 +00:00
Steven Edwards
301bbb3f0b grrr I forgot to do binary.....
svn path=/trunk/; revision=11620
2004-11-11 17:27:58 +00:00
Steven Edwards
1dc6cec99d grrr I forgot to do binary.....
svn path=/trunk/; revision=11619
2004-11-11 17:27:24 +00:00
Steven Edwards
fa83dde5e5 some simple sounds for ReactOS by Stefan Zehe.
svn path=/trunk/; revision=11618
2004-11-11 17:26:55 +00:00
Eric Kohl
816885ccb2 Clean-up.
svn path=/trunk/; revision=11617
2004-11-11 12:27:40 +00:00
Eric Kohl
ca9e2e3b6d Enable automatic adjustment of daylight savings changes.
svn path=/trunk/; revision=11616
2004-11-11 12:24:56 +00:00
Eric Kohl
2fcf84ea37 Add even more time zones.
svn path=/trunk/; revision=11615
2004-11-11 12:21:45 +00:00
Eric Kohl
7ac73dbbc4 RegSetValueExA: lpData can be NULL.
This fixes three failures of the WINE regression tests.

svn path=/trunk/; revision=11614
2004-11-11 11:21:30 +00:00
Gé van Geldorp
2fada79f2e Add partition handling for the Xbox
svn path=/trunk/; revision=11613
2004-11-10 23:45:37 +00:00
Gregor Anich
6f9d1917af Print exception names/strings when KDB is entered.
svn path=/trunk/; revision=11612
2004-11-10 23:16:16 +00:00
Eric Kohl
992f09bfbe Add more time zones.
svn path=/trunk/; revision=11611
2004-11-10 10:03:02 +00:00
Alex Ionescu
39a5847ee5 Rewrote APC Implementation.
TODO: KiSwapApcEnvironment, Honour SpecialApcDisable.
Special thanks to Thomas and Filip.

Fixed I/O Manager Bugs. APCs were not created with the right parameters in the right places, or had useless parameters being sent.

Added mmdrv and midimap to bootcd.

Fixed KTHREAD defintion.

Fixed some thread alertability issue in thread creation.

svn path=/trunk/; revision=11610
2004-11-10 02:51:00 +00:00
Gregor Anich
8b3a000e7b Fix RecursionTrap (RescursionTrap) in UnhandledExceptionFilter to allow more than 2 exceptions beeing handled by the toplevel filter.
svn path=/trunk/; revision=11609
2004-11-10 01:07:45 +00:00
Gé van Geldorp
2950511d3e Add disk I/O (well, input only, no output) for the Xbox
svn path=/trunk/; revision=11608
2004-11-09 23:36:20 +00:00
Gregor Anich
d5b047feae Fix _control87, the old implementation was terribly wrong and broken.
svn path=/trunk/; revision=11607
2004-11-09 23:15:17 +00:00
Alex Ionescu
9e12bbeae6 baseaddress.cfg - Add entry for midimap.dll. Fix msacm's base address. It was conflicting with iplhapi and generated an unncessary relocation and error message.
Makefile - Add entry for midimap.dll, Build mmdrv because it's trying to get loaded at system startup and that caused an error
bootdata/hivedef.inf - Create PaintDesktopVersion key and set it to 0. Win32k was trying to read this value and gave an error message because it did not exist.
lib/samlib/samlib.c - Silence samlib for informational messages that aren't errors.(if NDEBUG is on)
lib/userenv/directory.c -Silence for informational messages that aren't errors (if NDEBUG is on)
lib/setupapi/devinst.c - Turn SetupDiInstallClassW blank debug message into something a little more informational.
lib/syssetup/install.c - Make syssetup check if samlib returned ERROR_USER_EXISTS, in which case instead of pointlessly rebooting (which probably never allowed the user to actually setup ros...if error_user_Exists is returned it means  that setup was abandonned for some reason, so we would want to restart it instead of giving up), it will  restart setup.

svn path=/trunk/; revision=11606
2004-11-09 15:02:35 +00:00
Eric Kohl
f167a592d3 Use BF_SOFT style to draw pushbutton edges.
svn path=/trunk/; revision=11605
2004-11-09 14:59:37 +00:00
Eric Kohl
3b4262a4c2 Add more time zones.
svn path=/trunk/; revision=11604
2004-11-09 14:56:05 +00:00
Alex Ionescu
ab31ca4db5 Move midimap.drv (a 9x component) to midimap.dll (an NT component), make it build with baseaddress.cfg.
svn path=/trunk/; revision=11603
2004-11-09 14:52:52 +00:00
Art Yerkes
60a319ecaa Cleaing in receive: fixed one bugcheck.
Removed much small allocation cruft (20 byte or less objects)

svn path=/trunk/; revision=11602
2004-11-09 09:39:38 +00:00
Steven Edwards
bdaa32578b One of the buggy versions of Mingw I have fails to compile this if I dont
include stdio.h.

svn path=/trunk/; revision=11601
2004-11-09 03:22:17 +00:00
Alex Ionescu
885ff857c4 Silence informational messages.
svn path=/trunk/; revision=11600
2004-11-09 00:38:37 +00:00
Gé van Geldorp
5882e75d37 Support video and memory detection on the Xbox
svn path=/trunk/; revision=11599
2004-11-08 22:02:48 +00:00
Thomas Bluemel
cfde60c60d 1. fixed GetProfilesDirectoryW(). the lpcchSize parameter takes the size of the buffer in characters, not bytes.
2. LoadUserProfileW() should pass the buffer size to GetProfilesDirectoryW()

svn path=/trunk/; revision=11598
2004-11-08 21:23:34 +00:00
Eric Kohl
2f3caac348 Select current time zone on the time zone property page.
svn path=/trunk/; revision=11597
2004-11-08 10:33:08 +00:00
Eric Kohl
d63d756d2c Add some more time zones.
svn path=/trunk/; revision=11596
2004-11-08 10:31:52 +00:00
Thomas Bluemel
dbd1890dee make better use of precompiled headers
svn path=/trunk/; revision=11595
2004-11-08 02:16:06 +00:00
Thomas Bluemel
3e1e519f2e don't return uninitialized variable. thx to Alex.
svn path=/trunk/; revision=11594
2004-11-08 01:46:12 +00:00
Thomas Bluemel
3e2287907c forgot this file
svn path=/trunk/; revision=11593
2004-11-08 00:37:19 +00:00
Gregor Anich
1664862298 Check for installed exception handlers if the kernel debugger returns not kdDoNotHandleException, and not not kdHandleException.
svn path=/trunk/; revision=11592
2004-11-08 00:36:41 +00:00
Thomas Bluemel
762aaad968 separate epsapi as per kjk's request again, sorry for that.
svn path=/trunk/; revision=11591
2004-11-08 00:34:46 +00:00
Filip Navara
93c256ba7e - Fix prototype for KeConnectInterrupt.
svn path=/trunk/; revision=11590
2004-11-07 23:22:39 +00:00
Gregor Anich
2a5fa312ec Add SSE detection.
svn path=/trunk/; revision=11589
2004-11-07 23:03:43 +00:00
Filip Navara
5879eeb98a - Export the InitSafeBootMode variable as per KB83764.
- Remove KeRescheduleThread (it's not present neither on WinNT4 nor on WinXP SP2).
- Fix IoOpenDeviceRegistryKey for PLUGPLAY_REGKEY_DRIVER case. (Oops)
- Move IoConnectInterrupt and IoDisconnectInterrupt outside from Ke.

svn path=/trunk/; revision=11588
2004-11-07 22:55:38 +00:00
Art Yerkes
da8cb9fe17 Preliminary stub generator ported from my shell script.
svn path=/trunk/; revision=11587
2004-11-07 22:54:04 +00:00
Gregor Anich
a6fdf80a8b Fix FORCE_INLINE for GNUC.
svn path=/trunk/; revision=11586
2004-11-07 22:20:50 +00:00
Steven Edwards
609b0c5307 Added Wine ole32 tests.
As of 2004-10-7 we pass all of the tests except the one marked todo
in Wine. It has been disabled.

svn path=/trunk/; revision=11585
2004-11-07 22:19:07 +00:00
Filip Navara
96c1aa383f - Initialize DriverObject->HardwareDatabase for newly created device objects.
svn path=/trunk/; revision=11584
2004-11-07 21:20:51 +00:00
Filip Navara
22d4c31e4c - New and complete implementation of IoOpenDeviceRegistryKey.
svn path=/trunk/; revision=11583
2004-11-07 21:18:33 +00:00
Art Yerkes
8a640a70d2 Removed remaining kernel imports from ip lib.
Removed unneeded precomp.h from drivers/lib/ip.
Removed some memtrack and other spew.
Removed datagram send pipe part, and accompanying address file queue.
Simplified send pipe (major changes):
- Neighbor is solely responsible for firing normal ip datagrams to the peer.
- Transmit is the only place normal ip datagrams are passed to neighbor from.
- Simplified fragmentation code.
- Made callbacks explicit and always called in neighbor and transmit.
- Clarified ownership of transmitted NdisPacket.
- Ditto IPPackets here and in icmp.
- PC(Packet)->DLComplete is *only* used by lan.c and loopback.c
- Simplified loopback send mechanism
Added the beginnings of a test suite

svn path=/trunk/; revision=11582
2004-11-07 20:37:21 +00:00
Steven Edwards
da9108e6ff Added Wine psapi tests.
As of 2004-10-7 we pass 17 out of 20 tests.
I have disabled the three we fail.

svn path=/trunk/; revision=11581
2004-11-07 20:05:22 +00:00
KJK::Hyperion
626b0a1f74 Moved VerSetConditionMask in RTL so it can be exported from ntoskrnl too
svn path=/trunk/; revision=11580
2004-11-07 18:45:52 +00:00
Thomas Bluemel
11aba14d5f fixed typo
svn path=/trunk/; revision=11579
2004-11-07 18:43:33 +00:00
Thomas Bluemel
5a1d86c75b corrected image base address
svn path=/trunk/; revision=11578
2004-11-07 18:41:19 +00:00
Eric Kohl
3c3bf1e647 Fill the time zone list.
svn path=/trunk/; revision=11577
2004-11-07 16:03:51 +00:00
Gregor Anich
5a1530f454 Translate EXCEPTION_XXX defines into EXCEPTION_DISPOSITION enum values.
svn path=/trunk/; revision=11576
2004-11-07 15:58:41 +00:00
Filip Navara
31e89ab427 - Define RTL_REGISTRY_HANDLE and RTL_REGISTRY_OPTIONAL.
svn path=/trunk/; revision=11575
2004-11-07 15:40:31 +00:00
Thomas Bluemel
4cebb355ef ignore .gch files
svn path=/trunk/; revision=11574
2004-11-07 15:39:22 +00:00
Thomas Bluemel
6414f19557 added stubs for winscard.dll
svn path=/trunk/; revision=11573
2004-11-07 15:37:41 +00:00
Steven Edwards
af0423f839 Added Wine Common Control Regression tests.
As of 2004-10-7 we pass all of these tests.

svn path=/trunk/; revision=11572
2004-11-07 14:36:23 +00:00
KJK::Hyperion
515d472b0f Implemented VerSetConditionMask.
[HEADER HELL] VER_XXX macros defined inside the source file. Sorry

svn path=/trunk/; revision=11571
2004-11-07 13:08:24 +00:00
Eric Kohl
aba2c302f3 Add more time zones.
svn path=/trunk/; revision=11570
2004-11-07 11:49:55 +00:00
Steven Edwards
edcdbd6b73 Cleanup the warnings.
Patch by Vandread this closes bug 306.

svn path=/trunk/; revision=11569
2004-11-07 03:22:50 +00:00
Gé van Geldorp
473854d2fd Use correct context.
Patch by Theodor Willax <theodor_willax@hotmail.com>

svn path=/trunk/; revision=11568
2004-11-06 22:28:11 +00:00
Filip Navara
d00861b8e8 - Fix ACL size calculation in SepInitDACLs.
- Fix size check in RtlpAddKnownAce.

svn path=/trunk/; revision=11567
2004-11-06 21:32:16 +00:00
Steven Edwards
6b9538eb54 include stdlib.h, string.h and ctype.h to fix a build problem I am seeing.
svn path=/trunk/; revision=11566
2004-11-06 21:06:52 +00:00
Eric Kohl
f7f3b5cbfe Add some more timezones.
svn path=/trunk/; revision=11565
2004-11-06 19:41:44 +00:00
Gregor Anich
fc99b33d66 Add ExtendedRegisters to CONTEXT_X86, CONTEXT_EXTENDED_REGISTERS and MAXIMUM_SUPPORTED_EXTENSIONS defines.
I just hope I don't break anything!

svn path=/trunk/; revision=11564
2004-11-06 19:15:15 +00:00
Thomas Bluemel
068b78cfc6 silence debug output
svn path=/trunk/; revision=11559
2004-11-06 18:17:32 +00:00
Art Yerkes
03c08fd7b9 Changes:
- Turn two instances of stricmp(...,".[Cc]") into one of strcaseccmp(...,".c")
  in filename parsing.
- Streamline line parsing a bit:
  - Scan the line only once, looking for any line terminator
  - Ignore leading and trailing blanks
  - Handle comments properly

svn path=/trunk/; revision=11557
2004-11-06 17:37:29 +00:00
Eric Kohl
de2ab6cf8b - Make TIME_ZONE_ID_XXX constants available from kernel mode.
- Fix definition of KSYSTEM_TIME.
- Set default time zone bias and id in the shared user page.

svn path=/trunk/; revision=11556
2004-11-06 16:05:49 +00:00
Eric Kohl
a7ffdcff0e - Replace TIME type by LARGE_INTEGER in FILE_*_INFORMATION structures.
- Make sure that filesystem-specific data and time are converted to/from system time.
- Replace assert() by ASSERT().

svn path=/trunk/; revision=11555
2004-11-06 13:44:57 +00:00
Eric Kohl
0a4eb63a58 - Replace TIME type by LARGE_INTEGER in FILE_*_INFORMATION structures.
- Make sure that filesystem-specific data and time are converted to/from system time.

svn path=/trunk/; revision=11554
2004-11-06 13:38:45 +00:00
Thomas Bluemel
2ec823a6b0 1. implemented GetPerformanceInfo()
2. fixed definition of SYSTEM_HANDLE_INFORMATION and SYSTEM_HANDLE_TABLE_ENTRY_INFO

svn path=/trunk/; revision=11553
2004-11-06 11:45:47 +00:00
Thomas Bluemel
112d5270ee removed obsolete forward declaration
svn path=/trunk/; revision=11551
2004-11-06 10:10:02 +00:00
Alex Ionescu
8cb1d77efd Reimplimented IO Timers correctly.
svn path=/trunk/; revision=11550
2004-11-06 04:12:59 +00:00
Thomas Bluemel
caa0346413 fixed return value of GetProcessImageFileNameA/W()
svn path=/trunk/; revision=11549
2004-11-06 01:43:59 +00:00
Thomas Bluemel
3b90d19697 1. fixed field names of the SYSTEM_PAGEFILE_INFORMATION structure
2. implemented EnumPageFilesA/W()

svn path=/trunk/; revision=11548
2004-11-06 01:42:04 +00:00
Thomas Bluemel
6903fc73af implemented GetProcessImageFileNameA/W()
svn path=/trunk/; revision=11547
2004-11-05 23:53:06 +00:00
Thomas Bluemel
2b4a515e61 fixed typo
svn path=/trunk/; revision=11546
2004-11-05 22:47:02 +00:00
Thomas Bluemel
2296e99d56 1. export all psapi stubs
2. added missing psapi declarations to w32api

svn path=/trunk/; revision=11545
2004-11-05 22:36:36 +00:00
Eric Kohl
e339d82c69 Read time zone information from registry at startup.
svn path=/trunk/; revision=11544
2004-11-05 17:42:20 +00:00
Thomas Bluemel
8655dad649 no need to reference the job object pointer in NtIsProcessInJob()
svn path=/trunk/; revision=11543
2004-11-05 13:30:18 +00:00
Eric Kohl
8ee82ee7cc Use ASSERT() instead of assert().
svn path=/trunk/; revision=11542
2004-11-05 12:28:19 +00:00
Thomas Bluemel
2d115eb645 pass lstrcpynW() the maximum number of characters, not bytes
svn path=/trunk/; revision=11541
2004-11-05 11:51:18 +00:00
Eric Kohl
6388bdc46c - Time zone combobox must have CBS_DROPDOWNLIST style.
- Select and install time zone information.

svn path=/trunk/; revision=11540
2004-11-05 11:48:45 +00:00
Eric Kohl
e24dc12954 Make sure that NtSetSystemTime won't crash if the new systen time is NULL.
svn path=/trunk/; revision=11539
2004-11-05 11:46:02 +00:00
Eric Kohl
c37b036361 Add some timezone information.
svn path=/trunk/; revision=11538
2004-11-05 11:44:38 +00:00
Thomas Bluemel
7ae4dcc791 epsapi.a doesn't exist anymore...
svn path=/trunk/; revision=11537
2004-11-04 22:14:41 +00:00
Gé van Geldorp
e838464040 TimeOut < 0 means not set yet, so we need a signed type to store that
svn path=/trunk/; revision=11536
2004-11-04 13:44:18 +00:00
Thomas Bluemel
1fe7b789a1 merged epsapi into psapi and reformatted some code to make it readable
svn path=/trunk/; revision=11535
2004-11-03 22:43:00 +00:00
Gé van Geldorp
65184e9a08 bootcd and livecd want cards.dll, so build it by default
svn path=/trunk/; revision=11534
2004-11-03 20:12:59 +00:00
Thomas Bluemel
a3901ae581 1. reformatted the code so human beings can read it
2. enabled precompiled headers

svn path=/trunk/; revision=11533
2004-11-02 23:42:49 +00:00
Martin Fuchs
f99b2df6d1 Design Shell About dialog more Windows-like (Klemens Friedl <frik85@hotmail.com>)
svn path=/trunk/; revision=11532
2004-11-02 23:11:37 +00:00
Thomas Bluemel
de6c4c8cb3 1. get rid of InternalGetProcessId()
2. Implemented GetProcessIdOfThread() and GetThreadId()

svn path=/trunk/; revision=11531
2004-11-02 21:51:25 +00:00
Thomas Bluemel
91ae432126 use ReadConsoleInputW() for unicode builds
svn path=/trunk/; revision=11530
2004-11-02 20:47:05 +00:00
Thomas Bluemel
c524730883 1. Implemented WriteConsoleW(), ReadConsoleW(), FillConsoleOutputCharacterW(), WriteConsoleInputW(), ReadConsoleOutputCharacterW(), ScrollConsoleScreenBufferW()
2. added stub for SetThreadUILanguage()
This get's XP's cmd.exe to start (unfortunately it exits for some reason after one hits the enter key).

svn path=/trunk/; revision=11529
2004-11-02 20:42:06 +00:00
Gé van Geldorp
f9029e5cd8 Generate stub functions from .spec file
svn path=/trunk/; revision=11528
2004-11-02 19:47:18 +00:00
Gé van Geldorp
5e46da95f8 windres 2.15.90 20040222 doesn't like the empty string on COMBOBOXes
svn path=/trunk/; revision=11527
2004-11-02 19:28:17 +00:00
Eric Kohl
983347820f Add the 'Date and Time' page.
Selecting a timezone does not work yet.

svn path=/trunk/; revision=11526
2004-11-02 15:42:09 +00:00
Alex Ionescu
7d6071de5d Fix Mailslot and Named Pipe Drivers
svn path=/trunk/; revision=11525
2004-11-01 22:54:24 +00:00
Gé van Geldorp
a10211cdc2 Add ability to be loaded as "multiboot kernel" from other multiboot loaders
svn path=/trunk/; revision=11524
2004-11-01 20:49:32 +00:00
Hartmut Birr
3ec6acd622 - Fixed KeGetCurrentThread for mp machines.
- Initialized the idle thread for application processors earlier.

svn path=/trunk/; revision=11523
2004-11-01 19:10:07 +00:00
Hartmut Birr
128ff94899 - Initialized the fpu of an application processor.
svn path=/trunk/; revision=11522
2004-11-01 19:03:26 +00:00
Hartmut Birr
f23530ddc9 - Changed/rewrote parts of the mp code to get my ASUS p2b-ds motherboard to working.
svn path=/trunk/; revision=11521
2004-11-01 19:01:25 +00:00
Hartmut Birr
3edce321a2 - Share the irq/irql/vector definitions between ntoskrnl and hal.
- Changed the handling of interrupts for uniprocessor machines from irqs to interrupt vectors.

svn path=/trunk/; revision=11520
2004-11-01 14:37:19 +00:00
Filip Navara
c8583d9809 - Use common KiInterruptDispatch2 function for both UP and MP kernels.
svn path=/trunk/; revision=11519
2004-10-31 23:57:15 +00:00
Alex Ionescu
a30fcc1117 Fix deleted line.
svn path=/trunk/; revision=11518
2004-10-31 23:49:33 +00:00
Alex Ionescu
7cc191567e Mailslot/Named Pipe structures.
svn path=/trunk/; revision=11517
2004-10-31 23:40:10 +00:00
Alex Ionescu
e24de43a0b cleanup.c: Fix typo
Fix Named Pipe and Mailslot Creation Implementation.

svn path=/trunk/; revision=11516
2004-10-31 23:00:41 +00:00
Alex Ionescu
47cef79cec Use proper IRP structure
svn path=/trunk/; revision=11515
2004-10-31 22:21:41 +00:00
Filip Navara
129c75c64d - Call KiDispatchInterrupt only if DPC software interrupt was requested. (TODO: The same should be done for APCs.)
- Request DPC/APC software interrupts where we should.
- Fix condition in KeUpdateRunTime to allow switching thread early in the boot.
- Set default thread quantum for system process.

svn path=/trunk/; revision=11514
2004-10-31 21:22:06 +00:00
Emanuele Aliberti
1ffec948ad Guarded mutex (no code and off makefile).
svn path=/trunk/; revision=11513
2004-10-31 21:21:14 +00:00
Emanuele Aliberti
5f451aa443 Normalize private symbols in LPC, plus minor changes/adds.
svn path=/trunk/; revision=11512
2004-10-31 20:27:08 +00:00
Emanuele Aliberti
430b802b99 Modular resource script for POSIX+ terminal emulator in W32.
svn path=/trunk/; revision=11511
2004-10-31 20:11:09 +00:00
Eric Kohl
8c1d092798 Code clean-up.
svn path=/trunk/; revision=11510
2004-10-31 19:46:10 +00:00
Thomas Bluemel
9bb9d462ba fixed typo
svn path=/trunk/; revision=11509
2004-10-31 19:24:31 +00:00
Hartmut Birr
0e80529be4 - Fixed the definition of KeGetCurrentKPCR.
svn path=/trunk/; revision=11508
2004-10-31 17:05:50 +00:00
Hartmut Birr
cb919902cb - Implemented KeSetTargetProcessorDpc.
- Fixed KeInsertQueueDpc and KeRemoveQueueDpc for mp machines.

svn path=/trunk/; revision=11507
2004-10-31 17:02:31 +00:00
Thomas Bluemel
0a216b2be5 German RC-File for sysdm and timedate and a few change in the Englich RC-File. Patch by Michael Fritscher
svn path=/trunk/; revision=11506
2004-10-31 16:24:31 +00:00
Filip Navara
9b10ed5a9a - Synchronize HalDisplayString using spinlocks at HIGH_LEVEL.
svn path=/trunk/; revision=11505
2004-10-31 15:56:20 +00:00
Hartmut Birr
a3278967c6 - Dpc's must be always deliver before a thread switch can start.
svn path=/trunk/; revision=11504
2004-10-31 15:31:40 +00:00
Hartmut Birr
7287eafc08 - The quantum of the idle thread must also end.
svn path=/trunk/; revision=11503
2004-10-31 15:24:06 +00:00
Hartmut Birr
914140ad22 - Queried some values from pcr at DISPATCH_LEVEL to prevent from changing the processor after a thread switch.
- Changed from bx to dx within inline assembler, because the ebx register must be saved.

svn path=/trunk/; revision=11502
2004-10-31 14:02:20 +00:00
Hartmut Birr
0ca2950639 - Initialize the pcr for an application processor before it is booted.
- Initialize the dpc implementation for the boot processor earlier.

svn path=/trunk/; revision=11501
2004-10-31 13:20:58 +00:00
Hartmut Birr
780bd8e919 - Removed PiApcLock, because apc's are thread local and not global.
svn path=/trunk/; revision=11500
2004-10-31 13:01:04 +00:00
Hartmut Birr
67b8ce4f3b - Save/initialize/restore the gs register on interrupt begin/return.
svn path=/trunk/; revision=11499
2004-10-31 12:49:37 +00:00
Eric Kohl
d81bcce9de Install new inf files and control panel applications.
svn path=/trunk/; revision=11498
2004-10-31 11:56:26 +00:00
Eric Kohl
e90523893c - Define a unique base address for each control panel application.
- Use the W32API.

svn path=/trunk/; revision=11497
2004-10-31 11:54:58 +00:00
Eric Kohl
39a395e1f1 Define a unique base address for each control panel application.
svn path=/trunk/; revision=11496
2004-10-31 11:54:22 +00:00
Eric Kohl
ee001b7a4d Add SCSI device class installer inf file and global layout file.
svn path=/trunk/; revision=11495
2004-10-31 11:49:33 +00:00
James Tabor
2b7e477fd0 Added missing header info for helping to compile msi.dll
svn path=/trunk/; revision=11494
2004-10-31 02:19:52 +00:00
Thomas Bluemel
8301eaaa24 fixed memory leak in CheckNameLegalDOS8Dot3A() (free the allocated unicode string)
svn path=/trunk/; revision=11493
2004-10-31 01:36:37 +00:00
Thomas Bluemel
f33c6e48c8 implemented InitializeProcessForWsWatch() and GetWsChanges()
svn path=/trunk/; revision=11492
2004-10-31 01:23:05 +00:00
Thomas Bluemel
0e568c5b9f fixed a comment
svn path=/trunk/; revision=11491
2004-10-31 00:14:18 +00:00
Thomas Bluemel
b298e3ec15 removed obsolete debug output
svn path=/trunk/; revision=11490
2004-10-31 00:09:12 +00:00
Thomas Bluemel
0a1dce4016 implemented Heap32ListFirst(), Heap32ListNext(), Module32First(), Module32FirstW(), Module32Next(), Module32NextW(), Process32First(), Process32FirstW(), Process32Next(), Process32NextW(), Thread32First(), Thread32Next(), Toolhelp32ReadProcessMemory() and CreateToolhelp32Snapshot().
Currently only the flags TH32CS_SNAPPROCESS, TH32CS_SNAPTHREAD and TH32CS_INHERIT are supported, snapshots of heaps and modules are not fully implemented yet.

svn path=/trunk/; revision=11489
2004-10-31 00:04:19 +00:00
Filip Navara
095f2900e8 - Change ULONG to ULONG_PTR for StackLimit.
- Move code from KiUpdateSystemTime to KeUpdateSystemTime.
- Move code from KiUpdateProcessThreadTime to KeUpdateRunTime.
- Honour thread quantums while scheduling.

svn path=/trunk/; revision=11488
2004-10-30 23:48:57 +00:00
Thomas Bluemel
75d9d45c27 avoid overlaps of kernel32 and ntdll when kernel32 gets too big. Thanks to Filip for pointing this out.
svn path=/trunk/; revision=11487
2004-10-30 22:57:05 +00:00
Thomas Bluemel
1c2597f8e9 added a few missing structures and some janitory work
svn path=/trunk/; revision=11486
2004-10-30 22:18:17 +00:00
Martin Fuchs
53f429e243 adjust WINE specific texts for ReactOS (Klemens Friedl <frik85@hotmail.com>)
svn path=/trunk/; revision=11485
2004-10-30 21:28:19 +00:00
Martin Fuchs
0775105df6 adjust about dialog to ROS font sizes (Klemens Friedl <frik85@hotmail.com>)
svn path=/trunk/; revision=11484
2004-10-30 20:23:59 +00:00
Filip Navara
12143ef1ae - Allow 0x80 to be a BIOS assigned drive number for CD-ROM.
svn path=/trunk/; revision=11483
2004-10-30 19:32:29 +00:00
Eric Kohl
6f9c0194f4 Add Date/Time control panel application.
svn path=/trunk/; revision=11482
2004-10-30 19:16:20 +00:00
Eric Kohl
10e480947b Use W32API.
svn path=/trunk/; revision=11481
2004-10-30 19:14:22 +00:00
Casper Hornstrup
d0c462bb30 - Print stack frames on crashes.
- Users should report errors to ros-dev@reactos.com.

svn path=/trunk/; revision=11480
2004-10-30 17:25:38 +00:00
Alex Ionescu
1acbbc2ca0 Fix some values.
svn path=/trunk/; revision=11479
2004-10-30 16:07:46 +00:00
Filip Navara
0ca74773d6 - Make InitializeListHead, InsertHeadList, InsertTailList and
RemoveEntryList an inline functions instead of macros to match DDK.
  It's important because using macros can lead to variable name
  conflicts.
- Make PopEntryList, PushEntryList a macro instead of inline function
  (to match DDK).
- RemoveEntryList, RemoveHeadList and RemoveTailList shouldn't zero
  Blink and Flink of the removed entry. The MS documentation is wrong
  and there has been already submitted an official bug report for that.

svn path=/trunk/; revision=11478
2004-10-30 14:02:04 +00:00
Filip Navara
f9f887791c - Use KfAcquireSpinLock/KfReleaseSpinLock instead of KiAcquireSpinLock/KiReleaseSpinLock.
svn path=/trunk/; revision=11477
2004-10-30 13:30:03 +00:00
Eric Kohl
26be094c41 Add ability to start individual control panel applications.
svn path=/trunk/; revision=11476
2004-10-30 12:38:52 +00:00
Eric Kohl
7b61512539 Build new control panel applications.
svn path=/trunk/; revision=11475
2004-10-30 12:37:02 +00:00
Eric Kohl
92ac842d73 Add Keyboard and Mouse (Main) control panel application.
svn path=/trunk/; revision=11474
2004-10-30 12:36:14 +00:00
Eric Kohl
b2a213a80c Add Regional Options (Intl) control panel application.
svn path=/trunk/; revision=11473
2004-10-30 12:33:51 +00:00
Casper Hornstrup
ab2c6fba8b - Support FULL_MAP command line option.
- Allow DEBUG to be set on command line.

svn path=/trunk/; revision=11472
2004-10-30 11:19:45 +00:00
Eric Kohl
b0a01fd7b7 Sort control panels by name.
svn path=/trunk/; revision=11471
2004-10-29 16:59:16 +00:00
Casper Hornstrup
7c19997893 2004-10-29 Casper S. Hornstrup <chorns@users.sourceforge.net>
* ntoskrnl/include/internal/test.h (NtLockVirtualMemoryInternal): Rename
	to MiLockVirtualMemory.
	* ntoskrnl/include/internal/test.h: Update.
	* ntoskrnl/tests/tests/VirtualMemory.c: Update.

svn path=/trunk/; revision=11470
2004-10-29 16:48:10 +00:00
Eric Kohl
f776678f2d - Support control panel applications that provide more than one control panel.
- Clean-up to improve readability.

svn path=/trunk/; revision=11468
2004-10-29 12:27:58 +00:00
Filip Navara
d338969f54 - Remove duplicate definition of RTL_RANGE_LIST_SHARED_OK and
RTL_RANGE_LIST_NULL_CONFLICT_OK.
- Fix declaration of PRTL_CONFLICT_RANGE_CALLBACK.

svn path=/trunk/; revision=11467
2004-10-28 21:41:58 +00:00
Casper Hornstrup
e89808b094 2004-10-28 Casper S. Hornstrup <chorns@users.sourceforge.net>
* drivers/net/tcpip/tests/setup.c: Include windows.h.
	* lib/gdiplus/tests/setup.c: Ditto.
	* lib/kernel32/tests/setup.c: Ditto.
	* lib/ws2_32/tests/setup.c: Ditto.
	* subsys/win32k/tests/setup.c: Ditto.
	* ntoskrnl/tests/setup.c: Ditto.
	* ntoskrnl/include/ntoskrnl.h: Include test.h.
	* ntoskrnl/mm/virtual.c (NtLockVirtualMemoryInternal): New function.
	(NtLockVirtualMemory): Use NtLockVirtualMemoryInternal.
	* ntoskrnl/tests/Makefile (TARGET_CFLAGS): Add -I../include.
	* ntoskrnl/tests/stubs.tst: Remove stubs for functions in libgcc.
	* regtests/shared/regtests.h: Make independent of windows.h.
	* tools/helper.mk (run): Link with libgcc.
	* tools/regtests.c (EXESTUB): Include windows.h.
	* ntoskrnl/include/internal/test.h: New file.
	* ntoskrnl/tests/tests/VirtualMemory.c: Ditto.

svn path=/trunk/; revision=11466
2004-10-28 19:01:59 +00:00
Filip Navara
497ef5e058 - Define IoReleaseRemoveLock.
- Fix definiton of IoReleaseRemoveLockAndWait.

svn path=/trunk/; revision=11465
2004-10-27 21:36:19 +00:00
Gregor Anich
8c57ab6af9 Added KdbpSafeRead/WriteMemory macros (translated into MmSafeCopyFrom/ToUser) and made KDB use them for accessing unsafe memory - should prevent it from crashing.
svn path=/trunk/; revision=11464
2004-10-27 13:33:59 +00:00
Eric Kohl
9accaf0d0e DrawStatusText() must not process prefix characters.
svn path=/trunk/; revision=11463
2004-10-26 13:15:06 +00:00
Eric Kohl
2e1e51f902 Pressing ENTER when a value is selected in the listview will open the edit dialog.
svn path=/trunk/; revision=11462
2004-10-26 11:05:49 +00:00
Eric Kohl
4daf602867 Use FileHeader->SizeOfOptionalHeader instead of sizeof(IMAGE_OPTIONAL_HEADER) as the real size of the optional header.
svn path=/trunk/; revision=11461
2004-10-26 10:56:38 +00:00
Gregor Anich
d85e7ec614 Fixed debug build
svn path=/trunk/; revision=11457
2004-10-25 14:22:21 +00:00
Thomas Bluemel
0402fbbd25 more prototype fixes
svn path=/trunk/; revision=11422
2004-10-24 20:37:27 +00:00
Casper Hornstrup
b69a77aa97 2004-10-24 Casper S. Hornstrup <chorns@users.sourceforge.net>
* ntoskrnl/Makefile (TARGET_REGTESTS): Define to yes.
	* regtests/regtests/regtests.c (_ExitProcess): Declare.
	* regtests/regtests/regtests.def (_ExitProcess@4): Ditto.
	* regtests/shared/regtests.h (_ExitProcess): Ditto.
	* tools/regtests.c: Exit process using _ExitProcess();
	Properly support fastcall symbols.
	* ntoskrnl/tests: New directory.
	* ntoskrnl/tests/tests: Ditto.
	* ntoskrnl/tests/.cvsignore: New file.
	* ntoskrnl/tests/Makefile: Ditto.
	* ntoskrnl/tests/setup.c: Ditto.
	* ntoskrnl/tests/stubs.tst: Ditto.
	* ntoskrnl/tests/tests/.cvsignore: Ditto.

svn path=/trunk/; revision=11420
2004-10-24 17:51:29 +00:00
Thomas Bluemel
1dbfd30e1e fixed prototypes of NtCreateProfile() and NtQueryIntervalProfile()
svn path=/trunk/; revision=11419
2004-10-24 17:14:27 +00:00
Thomas Bluemel
b4e530e530 fixed prototypes of NtCreateMutant(), NtQueryMutant(), NtQuerySemaphore(), NtQueryTimer(), NtReleaseMutant(), NtReleaseSemaphore(), NtSetTimerResolution() and NtSetTimer()
svn path=/trunk/; revision=11418
2004-10-24 16:49:49 +00:00
Thomas Bluemel
4a6dd7de44 fixed prototypes of NtSetEvent(), NtResetEvent(), NtQueryEvent(), NtPulseEvent(), NtOpenEvent() and NtCreateEvent()
svn path=/trunk/; revision=11417
2004-10-24 15:26:14 +00:00
Thomas Bluemel
4bd798e343 added some base addresses to the list
svn path=/trunk/; revision=11416
2004-10-24 13:05:53 +00:00
Thomas Bluemel
cb1bf2ae32 minor fixes
svn path=/trunk/; revision=11415
2004-10-24 12:55:19 +00:00
Casper Hornstrup
6003c5cb06 2004-10-24 Casper S. Hornstrup <chorns@users.sourceforge.net>
* config (REGRESSIONTESTS): Remove.
	* tools/config.mk: Update.
	* lib/kernel32/misc/dllmain.c: Update.
	* drivers/net/tcpip/tests/Makefile (TARGET_OBJECTS): Add setup.o.
	* lib/gdiplus/tests/Makefile (TARGET_OBJECTS): Ditto.
	* lib/kernel32/tests/Makefile (TARGET_OBJECTS): Ditto.
	* lib/ws2_32/tests/Makefile (TARGET_OBJECTS): Ditto.
	* subsys/win32k/tests/makefile (TARGET_OBJECTS): Ditto.
	* regtests/shared/regtests.h (SetupOnce, _SetupOnce): Declare.
	(DISPATCHER): Rename to _Dispatcher.
	* lib/gdiplus/tests/tests/test-1.c: Update.
	* lib/kernel32/tests/tests/CreateFile.c: Ditto.
	* lib/ws2_32/tests/tests/WinsockEvent.c: Ditto.
	* subsys/win32k/tests/tests/eng-mem-1.c: Ditto.
	* tools/helper.mk: Be quiet when building tests.
	* tools/regtests.c: Remove unused code.
	* drivers/net/tcpip/tests/setup.c: New file.
	* lib/gdiplus/tests/setup.c: Ditto.
	* lib/kernel32/tests/setup.c: Ditto.
	* lib/ws2_32/tests/setup.c: Ditto.
	* subsys/win32k/tests/setup.c: Ditto.

svn path=/trunk/; revision=11414
2004-10-24 12:39:54 +00:00
Thomas Bluemel
40851010a8 minor fixes
svn path=/trunk/; revision=11413
2004-10-24 12:36:12 +00:00
Thomas Bluemel
565f4d669b minor fixes
svn path=/trunk/; revision=11412
2004-10-24 12:26:27 +00:00
Thomas Bluemel
0dd86887a1 minor fixes
svn path=/trunk/; revision=11411
2004-10-24 12:16:54 +00:00
Eric Kohl
f443b5edcf Set processor features in the shared user page.
This fixes bug #387.

svn path=/trunk/; revision=11410
2004-10-24 12:00:01 +00:00
Filip Navara
baac7ae72e - Return STATUS_SUCCESS for PCI bus PDO PnP IRPs so that function drivers can process them.
svn path=/trunk/; revision=11409
2004-10-24 09:14:03 +00:00
Filip Navara
b02b780b4a - Return STATUS_SUCCESS for root bus PDO PnP IRPs so that function drivers can process them.
svn path=/trunk/; revision=11408
2004-10-24 09:13:18 +00:00
Alex Ionescu
cad7a781f2 Fixed up some HAL prototypes and fixed some header problems in regards to upcoming DMA patch I will commit tomorrow.
svn path=/trunk/; revision=11407
2004-10-23 23:43:23 +00:00
Casper Hornstrup
eae828b789 2004-10-23 Casper S. Hornstrup <chorns@users.sourceforge.net>
* Makefile: Support regtests_implib.
	* rules.mak (REGTESTS_PATH): Define.
	* drivers/net/tcpip/makefile (TARGET_BUILDENV_TEST): Remove.
	* drivers/net/tcpip/tests/Makefile: Update.
	* lib/gdiplus/tests/.cvsignore: Ditto.
	* lib/gdiplus/tests/Makefile: Ditto.
	* lib/kernel32/tests/Makefile: Ditto.
	* lib/kernel32/tests/stubs.tst (HeapAlloc, HeapFree): Add.
	* lib/ws2_32/makefile (TARGET_REGTESTS): Define to yes.
	* regtests/Makefile: Update.
 	* regtests/shared/regtests.c (_alloca): Define.
	(FrameworkGetHook): Move to here.
 	* regtests/shared/regtests.h (_AssertTrue, _AssertFalse): Define.
 	(_GetModuleHandleA, _GetProcAddress, _LoadLibraryA): Define.
 	(FrameworkGetExportedFunctionNameInternal): Define.
 	* subsys/win32k/tests/makefile: Update.
 	* tools/helper.mk: Create dependencies.
 	* tools/regtests.c: Move FrameworkGetHook; Support forwarded exports.
	* lib/ws2_32/tests: New directory.
	* lib/ws2_32/tests/.cvsignore: New file.
	* lib/ws2_32/tests/Makefile: Ditto.
	* lib/ws2_32/tests/stubs.tst: Ditto.
	* lib/ws2_32/tests/tests: New directory.
	* lib/ws2_32/tests/tests/.cvsignore: New file.
	* lib/ws2_32/tests/tests/WinsockEvent.c: New file.
	* regtests/regtests: New directory.
	* regtests/regtests/.cvsignore: New file.
	* regtests/regtests/Makefile: Ditto.
	* regtests/regtests/regtests.c: Ditto.
	* regtests/regtests/regtests.def: Ditto.

svn path=/trunk/; revision=11406
2004-10-23 21:05:12 +00:00
Gé van Geldorp
825e1dc162 Take DC origin into account
svn path=/trunk/; revision=11405
2004-10-23 19:17:54 +00:00
Filip Navara
985184b134 - Add _hooks.c and _stubs.S to list of ignore files.
svn path=/trunk/; revision=11404
2004-10-23 17:39:51 +00:00
Filip Navara
1b13f5b90b - Minor device node fixes.
svn path=/trunk/; revision=11402
2004-10-23 17:32:51 +00:00
Thomas Bluemel
9c06590d72 finally get rid of loadros
svn path=/trunk/; revision=11401
2004-10-23 17:07:07 +00:00
Gregor Anich
7e179dae1f Fixed debug build
svn path=/trunk/; revision=11400
2004-10-23 15:17:35 +00:00
Gregor Anich
fcfc4f85d1 Fixed debug build, uncommented NDEBUG in io/pnpmgr.c
svn path=/trunk/; revision=11399
2004-10-23 14:52:51 +00:00
Eric Kohl
dbc9b1b7dd Update DEVICE_NODE structure but some ReactOS specific components still remain.
svn path=/trunk/; revision=11398
2004-10-23 14:48:16 +00:00
Gé van Geldorp
f0497fdefd InProcServer32 entries only take a DLL name, no resource identifier
svn path=/trunk/; revision=11397
2004-10-23 13:10:57 +00:00
Filip Navara
b5e5b4f012 - Add declarations for the PnP arbiter and resource translation interfaces (ARBITER_REQUEST_SOURCE, ARBITER_RESULT, ARBITER_ACTION, ARBITER_CONFLICT_INFO, ARBITER_PARAMETERS, ARBITER_LIST_ENTRY, PARBITER_HANDLER, ARBITER_INTERFACE, RESOURCE_TRANSLATION_DIRECTION, PTRANSLATE_RESOURCE_HANDLER, PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER, TRANSLATOR_INTERFACE).
svn path=/trunk/; revision=11396
2004-10-23 08:10:57 +00:00
Thomas Bluemel
75009fd35f hopefully a better implementation of rundown protections, thanks also to Alex.
svn path=/trunk/; revision=11395
2004-10-22 22:49:00 +00:00
Thomas Bluemel
1270089c9f fixed redefinition of ASSERT
svn path=/trunk/; revision=11394
2004-10-22 21:21:52 +00:00
Eric Kohl
2a175cb990 Use upper-case ASSERT macros.
svn path=/trunk/; revision=11393
2004-10-22 20:57:39 +00:00
Eric Kohl
92239abf04 IoAdjustPagingPathCount is a macro.
svn path=/trunk/; revision=11392
2004-10-22 20:54:57 +00:00
Filip Navara
9fb531fab6 - Check for DeviceNode->CapabilityFlags being NULL before trying to access it.
svn path=/trunk/; revision=11391
2004-10-22 20:44:48 +00:00
Eric Kohl
b1a58d7d7e Use upper-case ASSERT macros.
svn path=/trunk/; revision=11390
2004-10-22 20:43:58 +00:00
Eric Kohl
9e01875f9c Use upper-case ASSERT macros.
svn path=/trunk/; revision=11389
2004-10-22 20:19:58 +00:00
Eric Kohl
8c62a8159a Use ASSERT macro instead of assert macro.
svn path=/trunk/; revision=11388
2004-10-22 20:08:22 +00:00
Filip Navara
e49ebc81df - Fix uninitialized variable warning in KeFlushEntireTb.
svn path=/trunk/; revision=11387
2004-10-22 20:07:13 +00:00
Eric Kohl
1e9ad342c8 Define ASSERT macro.
svn path=/trunk/; revision=11386
2004-10-22 20:04:05 +00:00
Eric Kohl
72aae9d8ca Define ASSERT and ASSERTMSG macros.
svn path=/trunk/; revision=11385
2004-10-22 20:02:32 +00:00
Filip Navara
ce60fe1bee - Add the afiler.h (ARC MAC filter) and wdmguid.h (GUIDs for buses, device events, ...) headers.
svn path=/trunk/; revision=11383
2004-10-22 19:35:19 +00:00
Filip Navara
3d8c71fce1 - Define the PLUGPLAY_REGKEY_* flags.
svn path=/trunk/; revision=11382
2004-10-22 19:29:44 +00:00
Filip Navara
6b8a09e4a4 - Support the BINARY_COMPATIBLE compile definition.
- Declare NDIS_PROCESSOR_TYPE and NDIS_ENVIRONMENT_TYPE.

svn path=/trunk/; revision=11381
2004-10-22 19:29:28 +00:00
Eric Kohl
ca8388ad0c Fix a debug message
svn path=/trunk/; revision=11380
2004-10-22 18:34:11 +00:00
Filip Navara
0214f20262 - Fix RtlIsRangeAvailable for boundary addresses and honour the RTL_RANGE_SHARED flag.
svn path=/trunk/; revision=11379
2004-10-22 16:30:58 +00:00
Filip Navara
ec9c488f06 - Fix a case when a device with same IDs is located on two or more buses in the same slot (honour bus number in FdoLocateChildDevice).
- Read only the common PCI header and not private device data while enumerating.

svn path=/trunk/; revision=11378
2004-10-22 16:30:46 +00:00
Eric Kohl
c647cbd575 - Remove obsolete variables from the DEVICE_NODE structure and store it in the registry instead.
- IoGetDeviceProperty() supports more properties (untested).

svn path=/trunk/; revision=11377
2004-10-22 11:00:41 +00:00
Eric Kohl
2461583881 - Remove obsolete variables from the DEVICE_NODE structure and store it in the registry instead.
- IoGetDeviceProperty() supports more properties (untested).

svn path=/trunk/; revision=11376
2004-10-22 10:55:35 +00:00
Gé van Geldorp
b3e27217fd - Don't double-quote an already double-quoted argument
- Properly increment the fmt pointer

svn path=/trunk/; revision=11375
2004-10-21 18:30:36 +00:00
Thomas Bluemel
69b98bb582 fixed a comment
svn path=/trunk/; revision=11374
2004-10-21 18:28:05 +00:00
Art Yerkes
8238df107b Corrected build problem: hal.a was not placed in the ddk implib
directory.

svn path=/trunk/; revision=11373
2004-10-21 18:04:48 +00:00
Steven Edwards
4cd92d7bd7 Thats it. the tests are now in rosapps.
svn path=/trunk/; revision=11372
2004-10-21 12:05:13 +00:00
Gé van Geldorp
2ecd28627f Put back -D__REACTOS__ for now
svn path=/trunk/; revision=11371
2004-10-21 12:02:18 +00:00
Steven Edwards
24617fc41e Almost done removing old tests
svn path=/trunk/; revision=11370
2004-10-21 11:58:12 +00:00
Gé van Geldorp
d8a803d10b Better drawing of +/- boxes at smaller icon sizes
svn path=/trunk/; revision=11369
2004-10-21 08:38:36 +00:00
Steven Edwards
2d23921220 I'll finish in the morning......
svn path=/trunk/; revision=11368
2004-10-21 05:30:46 +00:00
Steven Edwards
2b58d249c6 Started removing tests
svn path=/trunk/; revision=11367
2004-10-21 05:27:50 +00:00
Steven Edwards
75fbd2832d Added regexpl and tests to the makefile.
Let me know if something is broken on linux.

svn path=/trunk/; revision=11366
2004-10-21 05:20:52 +00:00
Steven Edwards
005fb790e6 Re-enable almost all tests.
svn path=/trunk/; revision=11365
2004-10-21 05:20:21 +00:00
Steven Edwards
10a923d083 Moving tests....Almost done.
svn path=/trunk/; revision=11364
2004-10-21 05:12:02 +00:00
Steven Edwards
4ed7672428 Remove tests from the Main Makefile.
svn path=/trunk/; revision=11363
2004-10-21 05:08:32 +00:00
Steven Edwards
5368a4c682 Moving the tests.....still more....
svn path=/trunk/; revision=11362
2004-10-21 04:59:01 +00:00
Steven Edwards
e1c8dd64af Moving the tests.....more
svn path=/trunk/; revision=11361
2004-10-21 04:53:21 +00:00
Steven Edwards
dbf0e6e889 Moving the tests
svn path=/trunk/; revision=11360
2004-10-21 04:48:46 +00:00
Art Yerkes
68d63b431f Added null check for CapabilityFlags.
svn path=/trunk/; revision=11359
2004-10-21 03:39:37 +00:00
Thomas Bluemel
48008b5f19 fixed language code
svn path=/trunk/; revision=11358
2004-10-20 22:41:16 +00:00
Thomas Bluemel
85de1b945e forgot to add these files
svn path=/trunk/; revision=11357
2004-10-20 22:31:05 +00:00
Casper Hornstrup
e1a7bb0d2f 2004-10-20 Casper S. Hornstrup <chorns@users.sourceforge.net>
* lib/gdiplus/makefile (TARGET_BUILDENV_TEST): Remove.
	(TARGET_TYPE): Set to test.
	* lib/kernel32/makefile: Ditto.
	* subsys/win32k/makefile: Ditto.
	* tools/helper.mk (TARGET_BUILDENV_TEST): Remove.
	(TARGET_TYPE): New value test.
	* regtests/shared/regtests.c (_Result, _Buffer): Add.
	* regtests/shared/regtests.h (_Result, _Buffer): Declare extern.
	(TestRoutine): Make void return type and remove Buffer parameter.
	(FAIL*): Remove.

svn path=/trunk/; revision=11356
2004-10-20 20:51:21 +00:00
Gé van Geldorp
8139ac2333 Sync to Wine-20041019
svn path=/trunk/; revision=11355
2004-10-20 20:35:58 +00:00
Gé van Geldorp
ef42acd73f Remove global -DCOBJMACROS for winedll's since they #define it themselves
now when needed

svn path=/trunk/; revision=11354
2004-10-20 20:31:36 +00:00
Thomas Bluemel
5df79e4eec disabled mouse tracking should just supress MSG_MOUSE_MOVED - all other mouse messages are supposed to be dispatched.
svn path=/trunk/; revision=11353
2004-10-20 19:19:12 +00:00
Gé van Geldorp
ab895b1d38 Update status
svn path=/trunk/; revision=11352
2004-10-20 18:33:05 +00:00
Gé van Geldorp
b16df368f7 Sync to Wine-20041019
svn path=/trunk/; revision=11350
2004-10-20 18:30:39 +00:00
Gé van Geldorp
1b613704b0 Sync to Wine-20041019:
Vincent Beron <vberon@mecano.gme.usherb.ca>
- Fix various function prototypes.
Jeremy White <jwhite@codeweavers.com>
- Revise winmm/time.c to fix timer resolution at 1 ms. This then allows
a much more efficient implementation of timer events and timeGetTime,
and callers that used sub 10 ms resolution will now get correct
results.
Hans Leidekker <hans@it.vu.nl>
- Fix signed/unsigned comparison warnings.
Eric Pouech <pouech-eric@wanadoo.fr>
- bring the multimedia doc up-to-date
- moved the TODO from the doc into the code

svn path=/trunk/; revision=11349
2004-10-20 17:42:11 +00:00
Gé van Geldorp
c333fa4ed1 Sync to Wine-20041019:
Francois Gouget <fgouget@free.fr>
- Don't define COBJMACROS in objbase.h.
- Update the Wine sources accordingly.
Robert Shearman <rob@codeweavers.com>
- Don't define GWL_USERDATA, GWL_ID, GWL_HWNDPARENT, GWL_HINSTANCE and
GWL_WNDPROC when compiling the Wine source.
Mike McCormack <mike@codeweavers.com>
- Fix some -Wsigned-compare warnings.
Huw Davies <huw@codeweavers.com>
- Rewrite PathCreateFromUrl.
- Implement PathSearchAndQualify.
- Fix UrlUnescapeW.
- PathIsURL should return TRUE even if a scheme is unknown.
- UrlEscape has different rules depending on the protocol.
- Added a load of tests.
- ParseURL is now documented, so move it into shlwapi.h.
Bill Medland <billmedland@mercuryspeed.com>
- Fix SHDeleteKey so that it will handle deleting a key with more than
one subkey.  Also includes test.
Steven Edwards <steven_ed4153@yahoo.com>
- Move URL_SCHEME typedef to match PSDK.

svn path=/trunk/; revision=11348
2004-10-20 16:49:27 +00:00
Gé van Geldorp
4667670c9e Simplify wine/shlwapi.h
svn path=/trunk/; revision=11347
2004-10-20 16:20:22 +00:00
Gé van Geldorp
dc9f9834d9 Sync to Wine-20041019:
Mike McCormack <mike@codeweavers.com>
- Add stub implementation for CreateProxyFromTypeInfo.
Francois Gouget <fgouget@free.fr>
- Don't define COBJMACROS in objbase.h.
- Update the Wine sources accordingly.
Vincent Beron <vberon@mecano.gme.usherb.ca>
- Fix various function prototypes.
Hans Leidekker <hans@it.vu.nl>
- Fix signed/unsigned comparison warnings.

svn path=/trunk/; revision=11346
2004-10-20 09:38:15 +00:00
Gé van Geldorp
65e1445718 Hans Leidekker <hans@it.vu.nl>
- Fix signed/unsigned comparison warnings.

svn path=/trunk/; revision=11345
2004-10-20 09:32:11 +00:00
Gé van Geldorp
bf5400ab2a Sync to Wine-20041019:
Alexandre Julliard <julliard@winehq.org>
- Build the .h files from their idl source at compile time, and remove
them from CVS.
- Build idl files as part of the normal build process.
- Avoid depending on the non-standard IUnknown_METHODS macro in Wine
internal headers.
Francois Gouget <fgouget@free.fr>
- Don't define COBJMACROS in objbase.h.
- Update the Wine sources accordingly.
- Assorted spelling fixes.
Joris Huizer <jorishuizer@planet.nl>
- Ref count increment/decrement cleanup.
Robert Shearman <rob@codeweavers.com>
- Improve proxy destruction comment.
Mike McCormack <mike@codeweavers.com>
- CoSuspendClassObjects stub implementation.
Vincent Beron <vberon@mecano.gme.usherb.ca
- Fix some types problems.
Hans Leidekker <hans@it.vu.nl>
- Fix signed/unsigned comparison warnings.

svn path=/trunk/; revision=11344
2004-10-20 09:27:43 +00:00
Gé van Geldorp
b48649a01d Jacek Caban <jack@itma.pwr.wroc.pl>
- Added/updated Polish translations.
Robert Shearman <rob@codeweavers.com>
- GetWindowLong -> GetWindowLongPtr.
Vincent Beron <vberon@mecano.gme.usherb.ca>
- Fix various function prototypes.
- Better document some apis in commdlg and mscms.
Francois Gouget <fgouget@free.fr>
- Don't define COBJMACROS in objbase.h.
- Update the Wine sources accordingly.
Jon Griffiths <jon_p_griffiths@yahoo.com>
- Constify some statics and make them smaller.
Steven Edwards <steven_ed4153@yahoo.com>
- Remove unneeded include statements.
Dimitrie O. Paun <dpaun@rogers.com>
- Avoid W->A transitions.

svn path=/trunk/; revision=11343
2004-10-20 08:53:06 +00:00
Gé van Geldorp
695f33412e Sync to Wine-20041019:
Dmitry Timoshkov <dmitry@codeweavers.com>
- If an animation is already playing do not restart it.
- Remove WM_CLOSE handler, it leads to a memory corruption later on.
- Do not use GlobalFree for a memory returned by LoadResource.
Robert Shearman <rob@codeweavers.com>
- Implement SetPathWordBreakProc and MirrorIcon.
- Implement ImageList_SetColorTable.
- Implement WS_DISABLED style.
- Issue EN_CHANGE notification.
- Make the control look more like native by using the right font and
  spacing.
- Use TextOutW rather than DrawTextW as we don't use any features of
  DrawTextW.
- Fix caret size and position.
- Implement WM_CHAR and WM_SYSCHAR messages.
- Status update.
- Should create HOTKEY_INFO storage in WM_NCCREATE rather than in
  WM_CREATE so that we can also add the WS_EX_CLIENTEDGE style.
- Remove code that draws the client edge; it is already drawn by
  DefWindowProc.
- Document status of control against v6.0 of native version.
- Don't use TrackMouseEvents/WM_MOUSELEAVE API for handling the hot
  button; use plain mouse capture instead like native.
- Return only HTTRANSPARENT/HTCLIENT from WM_NCHITTEST and remove
  associated hacks of WM_SETCURSOR, WM_NCLBUTTONDOWN and
  WM_NCLBUTTONUP.
- Refactor state change code so that state changes don't happen as
  side effects from messages such as WM_NCCALCSIZE, instead only from
  user input messages like WM_MOUSEMOVE.
- Rebar completeness audit.
- TBN_DELETINGBUTTON sends the command ID, not the index.
- Fill in tbButton structure for TBN_DELETINGBUTTON notification.
- Document TBN_QUERY* sending indices.
- Fix some TRACEs
- More A->W conversions missed by previous patch.
- Fix off-by-one error in validating drag-n-drop from available
  buttons list box to actual buttons list box.
- Unicode flag should be based on the notification window.
- Use Unicode window messages.
- Determine whether to do label edit before sending NM_CLICK.
Francois Gouget <fgouget@free.fr>
- Don't define COBJMACROS in objbase.h.
- Update the Wine sources accordingly.
- Assorted spelling fixes.
Filip Navara <xnavara@volny.cz>
- Implement PSM_INDEXTOID, PSM_INDEXTOPAGE and PSM_PAGETOINDEX messages.
- Partially implement the PSH_WIZARDCONTEXTHELP and PSH_NOCONTEXTHELP
  styles.
- Add note about unimplemented TB_SAVERESTORE message.
- Fix obviously wrong condition in an "if" statement.
Dimitrie O. Paun <dpaun@rogers.com>
- We now have ICC_LINK_CLASS.
- Cleanup W->A transition.
Jon Griffiths <jon_p_griffiths@yahoo.com>
- ImageList_Merge should not fail if indices are bad.
- Add tests for this case, a visible test mode and fix DrawIndirect test
under some native comctl32.dll's.
- Items are variable sized, use an accessor to get at them.
- Combine A/W calls together to remove duplication.
- Don't leak text when removing/changing items.
- Turn off hot tracking when we delete the last item.
- Use the 'delete 1 item' logic when deleting all items.
- Draw +/- correctly for large icon sizes.
- Item height/expand button width must be >= than imagelist size.
- Avoid a magic number, add FIXME for incorrect +/- drawing.
Michael Stefaniuc <mstefani@redhat.com>
- native ImageList_Remove dosn't spit out an error message when
  deleting an index out of range so don't do that either
- add 2 ImageList_Remove tests
Aric Stewart <aric@codeweavers.com>
- Check to make sure PropSheetInfo* is not null before dereferencing it
for some windows messages.
Vitaliy Margolen <wine-patch@kievinfo.com>
- Don't loose last band on insert.
Ge van Geldorp <gvg@reactos.com>
- Pass correct uiParam for SPI_GETNONCLIENTMETRICS.

svn path=/trunk/; revision=11342
2004-10-20 08:36:55 +00:00
Gé van Geldorp
177b871326 Vincent B�ron <vberon@mecano.gme.usherb.ca>
Fix various function prototypes.

svn path=/trunk/; revision=11341
2004-10-20 07:47:39 +00:00
James Tabor
2b473d593e Ported Wine CompareStringA.
svn path=/trunk/; revision=11340
2004-10-20 03:46:27 +00:00
Hartmut Birr
5b5e2d9b00 - Fixed the size calculation of the resource list in IopSetDeviceInstanceData.
svn path=/trunk/; revision=11339
2004-10-19 23:23:04 +00:00
Eric Kohl
91ff1098cb Cosmetical fixes.
svn path=/trunk/; revision=11338
2004-10-19 22:47:38 +00:00
Emanuele Aliberti
8bf1b284bf cvs-ignore compiled resources
svn path=/trunk/; revision=11337
2004-10-19 21:12:42 +00:00
Filip Navara
dc5c114cdd - Fix the values of KeepObject, DeallocateObject and DeallocateObjectKeepRegisters.
svn path=/trunk/; revision=11336
2004-10-19 20:36:52 +00:00
Filip Navara
0d7040d3bb - Successfully complete IRP_MN_START_DEVICE and IRP_MN_STOP_DEVICE so that the drivers lower in the device stack can work.
svn path=/trunk/; revision=11335
2004-10-19 19:39:23 +00:00
Filip Navara
953b49dd54 - Fix various bugs in IoGetDmaAdapter.
- Fill the IoStatus values in the Irp I/O status block in IopInitiatePnpIrp.

svn path=/trunk/; revision=11334
2004-10-19 19:37:45 +00:00
Eric Kohl
cbc7c9eac2 Install class installers.
svn path=/trunk/; revision=11333
2004-10-19 14:33:07 +00:00
Eric Kohl
fe3da89e8e Disable debug messages.
svn path=/trunk/; revision=11332
2004-10-19 14:32:13 +00:00
Eric Kohl
9058842f67 Implement
- SetupDiBuildClassInfoList(ExW)
 - SetupDiClassGuidsFromName(W/ExW),
 - SetupDiClassNameFromGuid(W/ExW)
 - SetupDiGetActualSectionToInstallW
 - SetupDiGetClassDescription(W/ExW)
 - SetupDiInstallClassW partially
 - SetupDiOpenClassRegKey(ExW)
 - SetupOpenMasterInf

Fix compiler warnings.

svn path=/trunk/; revision=11331
2004-10-19 11:19:16 +00:00
Eric Kohl
f8eb27af13 Implement
-  SetupDiBuildClassInfoList(ExW), SetupDiClassGuidsFromName(W/ExW),
 - SetupDiClassNameFromGuid(W/ExW)
 - SetupDiGetActualSectionToInstallW
 - SetupDiGetClassDescription(W/ExW)
 - SetupDiInstallClassW partially
 - SetupDiOpenClassRegKey(ExW)

svn path=/trunk/; revision=11330
2004-10-19 11:13:11 +00:00
Thomas Bluemel
2bcdc488b3 the last parameter of NtQueryInformationProcess() is optional, don't use it when not needed.
svn path=/trunk/; revision=11329
2004-10-19 10:27:11 +00:00
Gé van Geldorp
b35df7844e Rolf Kalbermatter <rolf.kalbermatter@citeng.com>
- Added SHFreeNameMappings implementation.
- Modify ANSI functions to allocate intermediate Unicode strings on the
heap instead of stack.
Mike McCormack <mike@codeweavers.com>
- Convert the shellmenu code to use unicode.

svn path=/trunk/; revision=11328
2004-10-19 10:17:53 +00:00
Gé van Geldorp
b373e014a9 Simplify wine/shellapi.h
svn path=/trunk/; revision=11327
2004-10-19 10:17:05 +00:00
Gé van Geldorp
9f29b6e41d Windows doesn't check uiParam for SPI_GETNONCLIENTMETRICS
svn path=/trunk/; revision=11326
2004-10-19 08:25:25 +00:00
Gé van Geldorp
5d5362aca5 Don't free subclass stack while it's still in use
svn path=/trunk/; revision=11325
2004-10-18 21:31:41 +00:00
Filip Navara
bd1f1924a0 - Change _NDIS_ define to NDIS_WRAPPER.
svn path=/trunk/; revision=11324
2004-10-18 21:08:20 +00:00
Filip Navara
83c1f21479 - Fix a typo.
svn path=/trunk/; revision=11323
2004-10-18 21:07:42 +00:00
Filip Navara
dbcfba9bdb - Fix calling convention of ExInterlockedPushEntrySList and ExInterlockedPopEntrySList.
svn path=/trunk/; revision=11322
2004-10-18 20:56:22 +00:00
Casper Hornstrup
9af4f499f3 2004-10-18 Casper S. Hornstrup <chorns@users.sourceforge.net>
* lib/kernel32/makefile (TARGET_BUILDENV_TEST): Set to yes.
	* lib/kernel32/tests/Makefile: New target run.
	* lib/kernel32/tests/tests/file-1.c: Remove.
	* lib/kernel32/tests/tests/CreateFile.c: New file.
	* lib/kernel32/tests/stubs.tst: New file.
	* lib/gdiplus/tests/tests/test-1.c: Update.
	* lib/gdiplus/tests/stubs.tst: Update.
	* lib/gdiplus/tests/Makefile: Update.
	* lib/tools/helper.mk: Better support for TARGET_BUILDENV_TEST.
	* tools/regtests.c: Terminate process after running tests.
	* regtests/shared/regtests.c (PerformTest): Increase buffer sizes.
	* regtests/Makefile: Update.
	* regtests/kmregtests/*: Remove.
	* regtests/kmrtint/*: Remove.
	* regtests/regtests/*: Remove.
	* regtests/win32base/*: Remove.
	* subsys/win32k/tests/tests/eng-mem-1.c: Update.
	* subsys/win32k/tests/stubs.tst: New file.
	* drivers/net/tcpip/tests/Makefile: Update.
	* drivers/net/tcpip/makefile: Update.
	* drivers/net/tcpip/stubs.tst: New file.
	* drivers/net/tcpip/tests/Makefile: Update.

svn path=/trunk/; revision=11321
2004-10-18 19:11:09 +00:00
Gé van Geldorp
41fed98970 Sort by address to make searching easier
svn path=/trunk/; revision=11320
2004-10-17 21:25:43 +00:00
Richard Campbell
1dcf1a09de commented out an assert(0); that was causing crashes in windows.
svn path=/trunk/; revision=11319
2004-10-17 20:41:16 +00:00
Gé van Geldorp
9f4291ecfc Move resource constant to local header file
svn path=/trunk/; revision=11318
2004-10-17 18:51:09 +00:00
Hartmut Birr
f7f880f8e9 - Fixed the changing of the PGE bit in cr4.
- Check if the cpu supports global pages.

svn path=/trunk/; revision=11317
2004-10-17 17:28:45 +00:00
Hartmut Birr
53a23c65e8 - Used variables from the KPCR for the current irql, for dpc's, for time counters and for the idle thread.
svn path=/trunk/; revision=11316
2004-10-17 15:39:30 +00:00
Hartmut Birr
70919642d8 - Simplified the definition of KeGetCurrentKPCR for the UP target.
svn path=/trunk/; revision=11315
2004-10-17 13:26:48 +00:00
Filip Navara
108bfdf09f - Fix calling convention of ExInterlocked* functions.
svn path=/trunk/; revision=11314
2004-10-17 13:08:26 +00:00
Hartmut Birr
7090b2771a - Fixed the definition KPCR_SELF and KeGetCurrentKPCR.
svn path=/trunk/; revision=11313
2004-10-17 10:53:05 +00:00
Hartmut Birr
6fe0a87268 - Fixed the dependency check for ntoskrnl.
svn path=/trunk/; revision=11312
2004-10-17 10:43:57 +00:00
Filip Navara
fdfdfbe2d2 - Fix NdisMSynchronizeWithInterrupt.
svn path=/trunk/; revision=11310
2004-10-17 10:15:07 +00:00
Filip Navara
6815a62066 - Fix cut & paste mistake (s/NdisDprAcquireSpinLock/NdisDprReleaseSpinLock/).
- Fix values passed to NdisMRegisterInterrupt.

svn path=/trunk/; revision=11309
2004-10-17 10:15:02 +00:00
Gé van Geldorp
b91c380949 More shutdown messages
svn path=/trunk/; revision=11308
2004-10-17 09:36:08 +00:00
Alex Ionescu
020a7e0b2d Fixed definition of KPCR_TIB to match W32API/NT5 defintion. Fixed bug in Makefile (fixed by Filip)
svn path=/trunk/; revision=11307
2004-10-17 05:20:29 +00:00
Alex Ionescu
a5262fdf54 Fix accidental change.
svn path=/trunk/; revision=11306
2004-10-17 03:55:05 +00:00
Alex Ionescu
b3f049be4f KeStackAttach: Acquire lock before getting thread
svn path=/trunk/; revision=11305
2004-10-17 03:43:26 +00:00
Filip Navara
1f59f1138b - Fix the CFLAGS handling to avoid duplicating flags on command line.
svn path=/trunk/; revision=11304
2004-10-17 02:51:39 +00:00
Filip Navara
33a12b714a - Fix IRQL restrictions.
svn path=/trunk/; revision=11303
2004-10-17 01:59:36 +00:00
Filip Navara
921ff5c94d - Add comment to NdisMRegisterIoPortRange about the meaning of InitialPort parameter and pass the bus number to HalTranslateBusAddress.
svn path=/trunk/; revision=11302
2004-10-17 01:59:18 +00:00
Filip Navara
d788739c0e - Compile with W32API headers.
- Add multicast support.
- Add media state detection support.
- Protect the adapter context with spinlock and move code talking to card to inside NdisMSynchronizeWithInterrupt calls where necessary.

svn path=/trunk/; revision=11301
2004-10-17 01:55:54 +00:00
Filip Navara
3d1e209ba7 - Cleanup handling of NDISxx definitions.
- Define NDIS_MINIPORT_MAJOR_VERSION, NDIS_MINIPORT_MINOR_VERSION, NDIS_PROTOCOL_MAJOR_VERSION and NDIS_PROTOCOL_MINOR_VERSION when necessary.
- Fix definition of NdisMIndicateStatus macro.
- Add prototypes for NdisMSetTimer, NdisMInitializeTimer, NdisMSetPeriodicTimer, NdisMCancelTimer.

svn path=/trunk/; revision=11300
2004-10-17 01:55:33 +00:00
Gé van Geldorp
712015d695 Centralize definition of version resource
svn path=/trunk/; revision=11299
2004-10-16 22:30:19 +00:00
Gé van Geldorp
600222621e Undo change to DBG
svn path=/trunk/; revision=11298
2004-10-16 20:29:32 +00:00
Gé van Geldorp
4221b60000 - Centralize definition of version resource
- Give DLLs a high version number, so installers won't overwrite them

svn path=/trunk/; revision=11297
2004-10-16 20:27:43 +00:00
Alex Ionescu
f5d1a75a57 Fix Typo
svn path=/trunk/; revision=11296
2004-10-16 18:56:54 +00:00
Alex Ionescu
10d4df0a8b Fixed ExGetCurrentProcessorUsage (thanks to Mike)
svn path=/trunk/; revision=11295
2004-10-16 18:45:03 +00:00
Gé van Geldorp
597aeb8577 Fix legacy detection of AGP cards
svn path=/trunk/; revision=11294
2004-10-15 22:48:43 +00:00
Thomas Bluemel
8d81aae9b5 some german translations and fixes by Michael Wirth
svn path=/trunk/; revision=11293
2004-10-15 14:07:42 +00:00
Filip Navara
ca8df5d139 - Update prototype of NdisMAllocateMapRegisters.
- Fix declaration of NDIS_MINIPORT_CHARACTERISTICS, NDIS_PROTOCOL_CHARACTERISTICS and NDIS_MAC_CHARACTERISTICS.

svn path=/trunk/; revision=11292
2004-10-14 18:46:57 +00:00
Eric Kohl
23d3eee3ec Silence debug message.
svn path=/trunk/; revision=11291
2004-10-14 11:49:55 +00:00
Alex Ionescu
44c0fd942d Implemented KeSetEventBoostPriority, KeFindConfigurationEntry, KeDeregisterBugCheckCallback, KeIsAttachedProcess, KeQueryActiveProcessors, KeSetDmaIoCoherency, KeSetTimeIncrement, KeQueryRuntimeThread, KeUpdateRunTime, KeUpdateSystemTime. Made KeRegisterBugCheckCallback check if Callback isn't already registered.
svn path=/trunk/; revision=11290
2004-10-13 22:27:03 +00:00
Gé van Geldorp
196a075d05 Pass win.ini as filename to *PrivateProfile* functions instead of NULL
svn path=/trunk/; revision=11289
2004-10-13 19:52:09 +00:00
Filip Navara
2cc81267e3 - Handle all required OID requests.
- Fix handling of OID_GEN_MAXIMUM_FRAME_SIZE and OID_GEN_DRIVER_VERSION.
- Generate error statistics.

svn path=/trunk/; revision=11288
2004-10-13 18:50:09 +00:00
Gé van Geldorp
e2e8956ca7 Create "Program Files" directory and store its location in the registry.
Not sure if this is the correct place to implement it, feel free to move
around.

svn path=/trunk/; revision=11287
2004-10-13 18:14:07 +00:00
Eric Kohl
218066682a Use the W32API headers.
Clean-up the indentation.

svn path=/trunk/; revision=11286
2004-10-13 10:17:41 +00:00
Alex Ionescu
b0f334f36a Sorry, forgot to add this.
svn path=/trunk/; revision=11285
2004-10-13 02:58:59 +00:00
Alex Ionescu
c30ca53066 Implemented KeAreApcsDisabled, KeFlushEntireTb, KeIsExecutingDpc, KeSetKernelStackSwapEnable, KeQueryPriorityThread, KeRevertToUserAffinityThread, KeSetIdealProcessorThread, KeSetSystemAffinityThread, KeTerminateThread, KeStackAttachProcess, KeUnstackDetachProcess
svn path=/trunk/; revision=11284
2004-10-13 01:42:14 +00:00
Gé van Geldorp
83a232d3a2 LastError needs to be set always if disposition is CREATE_ALWAYS or OPEN_ALWAYS
svn path=/trunk/; revision=11283
2004-10-12 22:04:51 +00:00
Filip Navara
56531ca70d - Fix logic error in PsDeleteCidHandle.
svn path=/trunk/; revision=11282
2004-10-12 20:00:40 +00:00
Eric Kohl
9b57fe0ffa Add default hardware profile settings.
svn path=/trunk/; revision=11281
2004-10-12 12:00:29 +00:00
Eric Kohl
58ae572645 Implement GetCurrentHwProfileA/W.
svn path=/trunk/; revision=11280
2004-10-12 11:56:04 +00:00
Alex Ionescu
973021673c Implemented ExVerifySuite, ExInterlockedFlushSList, ExSystemExceptionFilter, ExRaiseException, ExGetCurrentProcessorCpuUsage, ExGetCurrentProcessorCounts
svn path=/trunk/; revision=11279
2004-10-12 00:56:46 +00:00
Alex Ionescu
9623e3cbe8 Added complete defintion of FX_SAVE_AREA and moved it to fpu.h instead of ps.h.
svn path=/trunk/; revision=11278
2004-10-12 00:33:30 +00:00
Thomas Bluemel
fb49f8ddd7 removed obsolete typecasts
svn path=/trunk/; revision=11277
2004-10-11 21:27:22 +00:00
Thomas Bluemel
fe8243b96a use INT_PTR as return type for dialog callbacks as documented in favor of portability
svn path=/trunk/; revision=11276
2004-10-11 21:08:06 +00:00
Eric Kohl
c104ab305d Store device instance data in the registry.
svn path=/trunk/; revision=11275
2004-10-11 19:07:25 +00:00
Filip Navara
4107035c78 - Change Start value for PCnet to demand load. (Now really!)
svn path=/trunk/; revision=11274
2004-10-11 18:42:49 +00:00
Filip Navara
2683ce6f26 - Allow querying information for root enumerated devices using IoGetDeviceProperty.
svn path=/trunk/; revision=11273
2004-10-11 18:36:20 +00:00
Filip Navara
df95ba950b - Add root bus enumeration registry for NE2000 driver.
- Change Start value for PCnet to demand load.

svn path=/trunk/; revision=11272
2004-10-11 18:36:17 +00:00
Filip Navara
095f953de7 - Return correct error value from WSPSocket.
svn path=/trunk/; revision=11271
2004-10-11 17:26:50 +00:00
Filip Navara
f321359e16 - Fix receive to work on VMware emulated adapters. We need to set busmaster bit on PCI command register in order to get packets. Otherwise we just get "missing frame" error and the ring buffer remains empty.
- Indicate receive completition.
- Implement basic packet transmitting.
- Don't read slot number from registry and report itself as NDIS 5.0 miniport.
- Fix nasty bugs in halt code path (incorrect assignment and wrong parameters to NdisMFreeSharedMemory calls).

svn path=/trunk/; revision=11270
2004-10-11 15:03:13 +00:00
Eric Kohl
2dea5c279b Minor simplifications.
svn path=/trunk/; revision=11269
2004-10-11 12:37:04 +00:00
Steven Edwards
e9542274b4 Make regexpl build again. (I know I really should fix this to be unicode)
BTW this is a kick ass tool that does work over the network. I just tested it
editing the registry on the wifes box.

svn path=/trunk/; revision=11268
2004-10-11 01:24:22 +00:00
Steven Edwards
ee08f03b99 Make regexpl build again. This has been bitrotting for a while.
svn path=/trunk/; revision=11267
2004-10-11 01:20:13 +00:00
Filip Navara
0f86ec1497 Don't use NdisTransferData if the whole packet is contained in the header+lookup buffer.
svn path=/trunk/; revision=11266
2004-10-10 22:38:22 +00:00
Filip Navara
02b3928237 Fix printing of packet contents to really print the contents instead of destroying them.
svn path=/trunk/; revision=11265
2004-10-10 21:06:13 +00:00
Filip Navara
f39899be58 Update registry entries for NE2000 driver to match the new layout.
svn path=/trunk/; revision=11264
2004-10-10 21:03:23 +00:00
Filip Navara
87079b419a Ignore registry reading errors while building services database.
svn path=/trunk/; revision=11263
2004-10-10 21:00:59 +00:00
Eric Kohl
e8fa5a048e Remove obsolete comments.
svn path=/trunk/; revision=11262
2004-10-10 18:28:05 +00:00
Eric Kohl
29240c3d8b Silence a debug message.
svn path=/trunk/; revision=11261
2004-10-10 18:26:33 +00:00
Eric Kohl
50fcbd0ea9 NtReadFile(): Take FILE_USE_FILE_POINTER_POSITION into account.
svn path=/trunk/; revision=11260
2004-10-10 18:23:09 +00:00
Filip Navara
1d16f49bbf - Fix debug message.
svn path=/trunk/; revision=11259
2004-10-10 17:23:13 +00:00
Filip Navara
33b2ec789a - Fix the NdisMEthIndicateReceive macro and ETH_RCV_INDICATE_HANDLER prototype to be binary compatible with Windows (R).
- Modify NDIS accordingly.

svn path=/trunk/; revision=11258
2004-10-10 17:16:42 +00:00
Gregor Anich
1ad4234f07 Fixed compiler warning ('RegistryPropertyName' might be used uninitialized in this function)
svn path=/trunk/; revision=11257
2004-10-10 15:51:52 +00:00
Eric Kohl
cd9eae5e7a NtDeviceIoControlFile() and NtFsControlFile():
Check granted access rights against access rights from IoControlCode.

svn path=/trunk/; revision=11256
2004-10-10 14:01:50 +00:00
Art Yerkes
fc10d9f802 Change flags of some network-related registry values. They were wrong.
svn path=/trunk/; revision=11255
2004-10-10 10:46:02 +00:00
Eric Kohl
009d1a6a71 Implement RegQueryMultipleValuesA().
svn path=/trunk/; revision=11254
2004-10-10 10:43:23 +00:00
Hartmut Birr
6fada73411 - Fixed some size calculations according to the last changes in cm/ntfunc.c.
svn path=/trunk/; revision=11253
2004-10-10 10:10:52 +00:00
Gé van Geldorp
7600e9b587 - Implement GetPrivateProfileSectionA/W()
- Handle value-less keys
- Handle comments

svn path=/trunk/; revision=11252
2004-10-09 18:46:41 +00:00
Filip Navara
0a6aa71bb4 - Attach NDIS miniport devices to the device stack.
- Gain the bus type and slot number using IoGetDeviceProperty from the PnP stack.
- Read the registry values for NDIS miniports from the correct place. See www.plasmic.com/~vizzini/ntnetarch.html for details.
- Update NdisReadPciSlotInformation/NdisWritePciSlotInformation to use the adapter slot information.

svn path=/trunk/; revision=11251
2004-10-09 18:17:08 +00:00
Filip Navara
1e6e22e32e - Implement IoOpenDeviceRegistryKey for PLUGPLAY_REGKEY_DRIVER case.
- Implement IoGetDeviceProperty for DevicePropertyClassName, DevicePropertyClassGuid, DevicePropertyDriverKeyName, DevicePropertyManufacturer, DevicePropertyFriendlyName cases.

svn path=/trunk/; revision=11250
2004-10-09 18:16:58 +00:00
Filip Navara
dd7fed7f38 - Delete all build files on "make clean".
svn path=/trunk/; revision=11249
2004-10-09 17:14:11 +00:00
Martin Fuchs
fbd3aee44b correct array size
svn path=/trunk/; revision=11248
2004-10-09 14:07:13 +00:00
Gé van Geldorp
85ec38bb53 Pass requested base address to MmAllocateSection()
svn path=/trunk/; revision=11247
2004-10-09 12:17:54 +00:00
Martin Fuchs
05cc213374 add splitpath.c
svn path=/trunk/; revision=11246
2004-10-09 11:42:39 +00:00
Martin Fuchs
7715f83501 unixcalls.c
svn path=/trunk/; revision=11245
2004-10-09 11:40:44 +00:00
Martin Fuchs
08faa2ac23 Update French translation.
svn path=/trunk/; revision=11244
2004-10-09 11:40:08 +00:00
Thomas Bluemel
6712cd665f Create named pipes with security information if argument is present
svn path=/trunk/; revision=11243
2004-10-08 23:24:01 +00:00
Thomas Bluemel
d0953a3d80 Create mail slots with security information if argument is present
svn path=/trunk/; revision=11242
2004-10-08 23:20:57 +00:00
Thomas Bluemel
a30f6d7c94 little simplification
svn path=/trunk/; revision=11241
2004-10-08 23:12:29 +00:00
Thomas Bluemel
6961ff9728 atomically increment the pipe id to be thread-safe. Thanks to Mark Grosberg for reporting it.
svn path=/trunk/; revision=11240
2004-10-08 21:48:46 +00:00
Thomas Bluemel
d02f400b31 little simplification
svn path=/trunk/; revision=11239
2004-10-08 21:37:16 +00:00
Thomas Bluemel
82a44258db fixed return value of FindCloseChangeNotification()
svn path=/trunk/; revision=11238
2004-10-08 21:29:40 +00:00
Thomas Bluemel
db533baf58 implemented GetNamedPipeHandleStateA() and a few fixes for GetNamedPipeHandleStateW()
svn path=/trunk/; revision=11237
2004-10-08 21:25:18 +00:00
Filip Navara
4664a1f6ed - Fix one error case to prevent crashes when registry enumeration fails.
svn path=/trunk/; revision=11236
2004-10-08 21:20:35 +00:00
Filip Navara
1e09759df9 Correctly handle small buffers in NtEnumerate[Value]Key and NtQuery[Value]Key registry routines:
- If buffer is too small to contain even fixed size information for specified type return STATUS_BUFFER_TOO_SMALL.
- If buffer is large enough to contain some information, but not all information requested, fill as much as we can and return STATUS_BUFFER_OVERFLOW.
- If we fill the entire buffer return STATUS_SUCCESS.

svn path=/trunk/; revision=11235
2004-10-08 21:19:12 +00:00
Gé van Geldorp
ef253bf9d3 Add SYSTEM_REGISTRY_QUOTA_INFORMATION
svn path=/trunk/; revision=11234
2004-10-08 21:14:21 +00:00
Martin Fuchs
b0468e7ffa call vswprintf@msvcrt in Wine's UNICODE version
svn path=/trunk/; revision=11233
2004-10-08 20:20:15 +00:00
Gé van Geldorp
8d52d923ed - Return some values for NtQuerySystemInformation(SystemRegistryQuotaInformation)
- Print messages for not implemented system information classes
- Silence some debug messages

svn path=/trunk/; revision=11232
2004-10-08 20:02:30 +00:00
Martin Fuchs
d5c0bee9ae resource files
svn path=/trunk/; revision=11231
2004-10-08 19:30:45 +00:00
Martin Fuchs
41c01ba24e tchar.h
svn path=/trunk/; revision=11230
2004-10-08 19:30:30 +00:00
Martin Fuchs
8fa949ca79 call Unix functions in separate module read_unix.c
svn path=/trunk/; revision=11229
2004-10-08 18:19:53 +00:00
Eric Kohl
4d19c5066a - User resource strings instead of constant strings for folder names.
- Add english and german resource strings.

svn path=/trunk/; revision=11228
2004-10-08 11:52:30 +00:00
Martin Fuchs
475d618db9 UNICODE for WINE version
svn path=/trunk/; revision=11227
2004-10-08 09:53:37 +00:00
Martin Fuchs
26a5b94393 german resource strings
svn path=/trunk/; revision=11226
2004-10-08 08:35:02 +00:00
Martin Fuchs
4e85d9668a convert string constants into string resources and character arrays
svn path=/trunk/; revision=11225
2004-10-08 08:18:42 +00:00
Steven Edwards
9117b8fb51 Remove the GNU from the name as its not a GNU program.
svn path=/trunk/; revision=11224
2004-10-08 04:09:51 +00:00
Steven Edwards
ba571f2170 Sync notepad with Winehq. It looks more like Windows notepad.
svn path=/trunk/; revision=11223
2004-10-08 04:05:11 +00:00
Art Yerkes
068cb50dec Added makefile dependency in both dirs, and proper relinking rule for
oskittcp and ip.

svn path=/trunk/; revision=11222
2004-10-08 01:28:32 +00:00
Gé van Geldorp
f9bf3651a1 Remove forgotten breakpoint
svn path=/trunk/; revision=11221
2004-10-07 21:05:36 +00:00
Gé van Geldorp
8438655244 Fix GetFullPathNameA/W() return value
svn path=/trunk/; revision=11220
2004-10-07 20:39:04 +00:00
Gé van Geldorp
ed6cee0a13 Undo last change, since GetFullPathName is supposed to return the length
including terminating nul char when the buffer is too small

svn path=/trunk/; revision=11219
2004-10-07 19:24:26 +00:00
Gé van Geldorp
e961e71fec Don't rely on UNICODE being #define'ed
svn path=/trunk/; revision=11218
2004-10-07 19:20:57 +00:00
Gé van Geldorp
1541b702fa Don't corrupt the registry when deleting a REG_DWORD value
svn path=/trunk/; revision=11217
2004-10-07 18:00:10 +00:00
Art Yerkes
5be7877f22 some formatting and prototype changes
memtrack on
moved timer dpc out of libip
added work item for ip timer callback to work at passive level

svn path=/trunk/; revision=11216
2004-10-07 15:04:45 +00:00
Gé van Geldorp
7e61a0ac6d Francois Gouget <fgouget@free.fr>
-Don't define COBJMACROS in objbase.h.
Update the Wine sources accordingly.

svn path=/trunk/; revision=11215
2004-10-07 09:13:56 +00:00
Martin Fuchs
82ccd0b94c use TREE_LINE_DX for better look of the tree with big fonts
svn path=/trunk/; revision=11214
2004-10-07 08:43:34 +00:00
Steven Edwards
42906c61fc Allow NtGdiCreateScaleableFontResource to keep going.
(This allows OpenOffice 1.1.1 to load)

svn path=/trunk/; revision=11213
2004-10-07 05:26:54 +00:00
Art Yerkes
7c750ecdd6 Sorry jimtabor and rcampbell, it turns out that ip.a was not getting cleaned
and you guys were using an old one.  sedwards helped me figure that out.
I've been cleaning these dirs explicitly since i'm working in them.

This should fix the clean for those.

svn path=/trunk/; revision=11212
2004-10-07 04:47:42 +00:00
Gé van Geldorp
d24addb280 GetFullPathName returns length without nul byte
svn path=/trunk/; revision=11211
2004-10-06 23:46:09 +00:00
Martin Fuchs
85f0c7023d update item height after changing the font
svn path=/trunk/; revision=11210
2004-10-06 09:08:50 +00:00
Martin Fuchs
1011770d88 ID_FILE_MOVE resources
svn path=/trunk/; revision=11209
2004-10-06 09:08:16 +00:00
Gé van Geldorp
1eb248c43e Rolf Kalbermatter <rolf.kalbermatter@citeng.com>
- Fix bug found by Piotr Caban, where our function tried to delete a
directory eventhough the user canceled the operation.

svn path=/trunk/; revision=11208
2004-10-06 07:29:58 +00:00
Art Yerkes
4368f11574 More stuff moved out of ip lib.
svn path=/trunk/; revision=11207
2004-10-06 04:40:34 +00:00
Gé van Geldorp
91447e78e2 Do some simple error checking on .cur and .ico file structure
svn path=/trunk/; revision=11206
2004-10-05 22:08:56 +00:00
Gé van Geldorp
cdefabd236 Francois Gouget <fgouget@free.fr>
- Assorted spelling fixes.

svn path=/trunk/; revision=11205
2004-10-05 20:58:38 +00:00
Hartmut Birr
fc5e4daca1 - Bugcheck on a page fault, if the reason was code executing in a non executable area (only available on a AMD64).
svn path=/trunk/; revision=11204
2004-10-05 19:11:17 +00:00
Hartmut Birr
fa64b48be5 - Changed some functions from Nt to Zw in RtlFormatCurrentUserKeyPath to bypass the buffer checks.
svn path=/trunk/; revision=11203
2004-10-05 19:04:09 +00:00
Hartmut Birr
3fdd7a717c - Removed some hard coded values, which depend on a kernel base of 0xc0000000.
svn path=/trunk/; revision=11202
2004-10-05 18:53:28 +00:00
Gregor Anich
306d451c3b Mesa version 6.2 import (also removed _MSC_VER define for building with mingw) - look at http://www.mesa3d.org/ for changelogs.
svn path=/trunk/; revision=11201
2004-10-05 14:19:13 +00:00
Steven Edwards
c383ed94fd Silence a few warnings and bring the source (mostly) back in line
with the source drop from embedded.cl

svn path=/trunk/; revision=11200
2004-10-05 13:57:29 +00:00
Eric Kohl
e48441fd2e Remove outdated profile path postfix.
svn path=/trunk/; revision=11199
2004-10-05 13:39:42 +00:00
Steven Edwards
528acaf7b3 Added a simple embedded GPL dhcp server for ReactOS by
Carlos Manuel Duclos Vergara

TODO:
Make it a real Window Service
Make it use the registry rather than dhcpd.conf
.......

svn path=/trunk/; revision=11198
2004-10-05 13:09:46 +00:00
Eric Kohl
e345820c8e Remove fixed heap base address (HEAP_BASE) to enable bottom-up heap allocation.
svn path=/trunk/; revision=11197
2004-10-05 10:40:13 +00:00
Gé van Geldorp
baf11aeb1c Recognize our CD-Rom drives
svn path=/trunk/; revision=11196
2004-10-05 07:51:11 +00:00
Gé van Geldorp
7f50dbe3fe Alexandre Julliard <julliard@winehq.org>
- Fixed typo in ProgramsW.
- Changed the case of windows and system directories to match the
  directories we create by default.
- Avoid depending on the non-standard IUnknown_METHODS macro in Wine
  internal headers.

svn path=/trunk/; revision=11195
2004-10-05 07:43:19 +00:00
Alex Ionescu
dc70244c68 Un-hardcoded the 0xC0000000 value, and stuck the define in one single place both for ASM and C code. This define is 0x80000000 by default, but automatically sets itself to 0xC0000000 if 3GB is set to 1 in reactos/config. This option is turned on by default for now, because the Default heap is at 0xA0000000, which doesn't work on a non 3GB system. Lower values seem to crash Win32K but I fill figure out a solution.
svn path=/trunk/; revision=11193
2004-10-04 21:38:49 +00:00
Casper Hornstrup
8646668c58 2004-10-04 Casper S. Hornstrup <chorns@users.sourceforge.net>
* tools/helper.mk: Support for kernel TARGET_TYPE.
	* ntoskrnl/Makefile: Simplified makefile.

svn path=/trunk/; revision=11192
2004-10-04 20:04:49 +00:00
Gé van Geldorp
841c394e6f Piotr Caban <pio13@poczta.onet.pl>
- Added Polish translation.

svn path=/trunk/; revision=11191
2004-10-04 19:44:11 +00:00
Gé van Geldorp
aec725dce4 Reapply winehq change:
Robert Shearman <rob@codeweavers.com>
- Simplify getting custom icons for a folder by utilising the new
  SHELL32_GetCustomFolderAttribute function.
- Add support for custom shell folders, such as the History folder.
- Always try to initialize folder using IPersistFolder3 interface and
  then fall back on IPersistFolder if not supported.
Ge van Geldorp <gvg@reactos.com>
- Can't pass NULL as default value to GetPrivateProfileString.

svn path=/trunk/; revision=11190
2004-10-04 19:41:31 +00:00
Casper Hornstrup
67a41ff238 2004-10-04 Casper S. Hornstrup <chorns@users.sourceforge.net>
* tools/helper.mk: Clean autogenerated files.
	* tools/regtests.c: Remove newlines.

svn path=/trunk/; revision=11189
2004-10-04 19:41:28 +00:00
Jens Collin
f539cfcea7 return hardcoded value (1) for SM_CMONITORS.
svn path=/trunk/; revision=11188
2004-10-04 19:23:31 +00:00
Gé van Geldorp
aa496615df Use GetStringTypeW() for implementation of IsCharAlphaNumericW(),
IsCharAlphaW(), IsCharLowerW() and IsCharUpperW()

svn path=/trunk/; revision=11187
2004-10-04 19:22:16 +00:00
Jens Collin
7e15de6d4a defined SM_CMONITORS (80)
svn path=/trunk/; revision=11186
2004-10-04 19:22:02 +00:00
Gé van Geldorp
1736e3772b Implement GetStringTypeA/W() and GetStringTypeExA/W()
svn path=/trunk/; revision=11185
2004-10-04 19:17:58 +00:00
Art Yerkes
2638336b0e Fixed IPStartup prototype and moved DisplayIPPacket out of ifdef.
svn path=/trunk/; revision=11184
2004-10-04 18:32:30 +00:00
Art Yerkes
706ff78e48 Removed unneeded DriverObject parameter to IPStartup.
svn path=/trunk/; revision=11183
2004-10-04 18:31:40 +00:00
Hartmut Birr
49871ae71b - Fixed the setting of the page protection for ntoskrnl.
The image is loaded without the size of the bss section.
  Pages after the bss section may not be changed.

svn path=/trunk/; revision=11182
2004-10-04 17:27:13 +00:00
Martin Fuchs
a573c6ea80 sync with WINE source
svn path=/trunk/; revision=11181
2004-10-04 17:13:03 +00:00
Casper Hornstrup
8ec117a236 Revert:
2004-10-02  Casper S. Hornstrup  <chorns@users.sourceforge.net>

	* ntoskrnl/Makefile: Fix dependencies when PCH is enabled.

2004-10-02  Casper S. Hornstrup  <chorns@users.sourceforge.net>

	* tools/helper.mk: Support for kernel TARGET_TYPE.
	* ntoskrnl/Makefile: Simplified makefile.

svn path=/trunk/; revision=11180
2004-10-04 10:16:59 +00:00
Martin Fuchs
83de11e97e merged corrected version of the Wine commit http://cvs.winehq.org/patch.py?id=13936:
- added choosing fonts
- added file moving

svn path=/trunk/; revision=11179
2004-10-04 09:31:10 +00:00
Art Yerkes
184c8d80f1 First shot at ip lib test app.
svn path=/trunk/; revision=11178
2004-10-04 04:26:00 +00:00
Alex Ionescu
4e21459b33 DBG should be 0 by default. Also, DBG = 1 seems to break ROS (it hangs before ntoskrnl is even loaded.)
svn path=/trunk/; revision=11177
2004-10-04 03:19:07 +00:00
Art Yerkes
3b2388081c Added new targets. ip and oskittcp should now clean with the rest of the
tree.

svn path=/trunk/; revision=11176
2004-10-03 22:55:45 +00:00
Art Yerkes
8eb5ca6ffa Final propogation of TDI_CONNECTION_INFORMATION/TRANSPORT_ADDRESS changes.
svn path=/trunk/; revision=11175
2004-10-03 21:44:43 +00:00
Art Yerkes
bab3b21d32 Propogating TDI address changes.
svn path=/trunk/; revision=11174
2004-10-03 21:16:31 +00:00
Gé van Geldorp
7eb30acddb Rollback last change since it was incorrect.
See http://www.reactos.com/bugzilla/show_bug.cgi?id=36

svn path=/trunk/; revision=11173
2004-10-03 21:03:06 +00:00
Art Yerkes
fc4b179d93 New file buffer.c which contains NDIS_BUFFER and NDIS_PACKET routines.
svn path=/trunk/; revision=11172
2004-10-03 20:39:19 +00:00
Art Yerkes
5394560307 Fixed UDP protocol.
Leaned interface between tcpip and ip lib to not include ndis buffers and
such, as well as datagram request structs.  This both eliminates code
setting up these structs as well as making use of ip lib easier from userland.
Moved ndis buffer routines to tcpip/buffer.c.  They are a bit separate from
the neutral routines functions.

svn path=/trunk/; revision=11171
2004-10-03 20:38:48 +00:00
Art Yerkes
a52618ca99 Fixed use of TA_ADDRESS in favor of TRANSPORT_ADDRESS. This still confuses
me.
write, read: Handle errors correctly.

svn path=/trunk/; revision=11170
2004-10-03 20:36:46 +00:00
Gé van Geldorp
81e60d8ded Move final user stack cleanup to kernelmode
svn path=/trunk/; revision=11169
2004-10-03 18:53:05 +00:00
Gé van Geldorp
9584768301 CVS maintenance
svn path=/trunk/; revision=11168
2004-10-03 18:46:07 +00:00
Gé van Geldorp
91083c72fd Remove faulty debug statement
svn path=/trunk/; revision=11167
2004-10-03 18:22:33 +00:00
Thomas Bluemel
737ea5b737 don't let dlltool mess up c++ mangled exports for crtdll and msvcrt
svn path=/trunk/; revision=11166
2004-10-03 14:24:43 +00:00
Thomas Bluemel
c0f9c7505c fixed GetHandleInformation(), SetHandleInformation() and minor fixes to CloseHandle() and DuplicateHandle()
svn path=/trunk/; revision=11165
2004-10-03 10:05:56 +00:00
Eric Kohl
d8ea61531d Update a new users private shell folder paths when a new user profile is created.
svn path=/trunk/; revision=11164
2004-10-03 09:27:22 +00:00
Alex Ionescu
772a37758e Sorry, forgot these updates for WIN32K to build with new KPCR.
svn path=/trunk/; revision=11163
2004-10-03 03:07:18 +00:00
Alex Ionescu
4d9e3a1cae Corrected KPCR structure, removed IKPCR, set up CurrentThread in proper structure (implemented KPRCB), added some types needed by KPRCB.
svn path=/trunk/; revision=11162
2004-10-03 03:03:54 +00:00
Thomas Bluemel
b26683b0b3 fixed ProcessIdToSessionId()
svn path=/trunk/; revision=11161
2004-10-02 21:14:08 +00:00
Thomas Bluemel
3f75c451d1 don't duplicate tons of code for error handling
svn path=/trunk/; revision=11160
2004-10-02 20:56:54 +00:00
Thomas Bluemel
86b4ec40d4 INF Helper tool for installation of .inf files, by Michael Biggins
svn path=/trunk/; revision=11159
2004-10-02 18:33:12 +00:00
Filip Navara
a73f47bd18 Allocate memory for the handle table from paged pool!
svn path=/trunk/; revision=11158
2004-10-02 16:48:12 +00:00
Filip Navara
8e9f6624d1 Change the ASSERT_IRQL in ExAllocatePagedPoolWithTag from PASSIVE_LEVEL to APC_LEVEL.
svn path=/trunk/; revision=11157
2004-10-02 16:48:05 +00:00
Thomas Bluemel
190c655d90 added stubs for winfax.dll
svn path=/trunk/; revision=11156
2004-10-02 16:43:05 +00:00
Casper Hornstrup
05ee9bbcc3 2004-10-02 Casper S. Hornstrup <chorns@users.sourceforge.net>
* ntoskrnl/Makefile: Fix dependencies when PCH is enabled.

svn path=/trunk/; revision=11155
2004-10-02 14:38:37 +00:00
Casper Hornstrup
cf4df378aa 2004-10-02 Casper S. Hornstrup <chorns@users.sourceforge.net>
* tools/helper.mk: Support for kernel TARGET_TYPE.
	* ntoskrnl/Makefile: Simplified makefile.

svn path=/trunk/; revision=11154
2004-10-02 14:03:51 +00:00
Eric Kohl
b8e59707a9 Add common user shell folder key.
svn path=/trunk/; revision=11153
2004-10-02 12:35:12 +00:00
Eric Kohl
d2e9fecf72 Remove default users shell folder paths.
svn path=/trunk/; revision=11152
2004-10-02 12:33:20 +00:00
Eric Kohl
19c3f3e06e Improve creation of shell folder settings.
Todo:
 - Store folder names in resource strings.
 - Update current users shell folder paths when a new profile is created.

svn path=/trunk/; revision=11151
2004-10-02 12:31:28 +00:00
Hartmut Birr
acb1dd91c6 - Made cmt unicode compatible.
- Enabled time counting.
- Improved the waiting of key input events.

svn path=/trunk/; revision=11150
2004-10-02 10:26:48 +00:00
Hartmut Birr
d2a8a1bc51 - Terminate the wait thread if the handle was from a console.
svn path=/trunk/; revision=11149
2004-10-02 10:19:38 +00:00
Hartmut Birr
c8641fc2a3 - Updated the workingset size in the rmap functions.
svn path=/trunk/; revision=11148
2004-10-02 10:16:10 +00:00
Casper Hornstrup
9495493fde 2004-10-02 Casper S. Hornstrup <chorns@users.sourceforge.net>
* lib/gdiplus/tests/.cvsignore: Ignore _hooks.c and _stubs.S.
	* lib/gdiplus/tests/Makefile (TARGET_OBJECTS): Remove passthrough.o and
	add _hooks.o and _stubs.o.
	* lib/gdiplus/tests/tests/test-1.c: Test API hooking.
	* regtests/shared/regtests.h: Add support for API hooking.
	* tools/helper.mk: Generate stubs.
	* tools/regtests.c: Add support for generating stubs and hooks.
	* lib/gdiplus/tests/passthrough.c: Remove.
	* lib/gdiplus/tests/stubs.tst: New file.

svn path=/trunk/; revision=11147
2004-10-02 08:44:54 +00:00
Hartmut Birr
d12bb0393c - Fixed the definition of SNMP_FUNC_TYPE.
svn path=/trunk/; revision=11146
2004-10-02 08:28:34 +00:00
Art Yerkes
0b03f1a2a9 Sorry i didn't have all the assertions correct in ntoskrnl/mm/pool.c
Now i've moved them to npool.c and ppool.c, where they are shorter.

svn path=/trunk/; revision=11145
2004-10-01 20:51:29 +00:00
Gé van Geldorp
adeb131ada Don't use more than a single page for a TEB (forgotten file)
svn path=/trunk/; revision=11144
2004-10-01 20:29:58 +00:00
Gé van Geldorp
228cddee4a Don't use more than a single page for a TEB
svn path=/trunk/; revision=11143
2004-10-01 20:26:05 +00:00
Hartmut Birr
f6fb22a9ef - Rewrote parts of the Process & Thread time count functions.
svn path=/trunk/; revision=11142
2004-10-01 20:09:57 +00:00
Gé van Geldorp
96bb83f2a9 Handle mapping a view of a section at non-zero file offset
svn path=/trunk/; revision=11141
2004-10-01 20:06:43 +00:00
Art Yerkes
a07571a47c pool.c: assert irql and pool type for PASSIVE_LEVEL and above.
ntoskrnl/ob/security.c:
This function did not either identify the new descriptor as self relative
nor honor the case where self-relative was not set.  Now fixed.
Bug identified by WaxDragon (while loading a cygwin app)

svn path=/trunk/; revision=11140
2004-10-01 04:00:11 +00:00
Art Yerkes
2c3fecda88 Added needed rc file.
svn path=/trunk/; revision=11139
2004-10-01 02:31:05 +00:00
Art Yerkes
9fd341c9ae Zero the new descriptor so that the Dacl, Sacl etc pointers will be zeroed
if not initialized.  cygwin was exercising this.

svn path=/trunk/; revision=11138
2004-10-01 01:28:56 +00:00
Art Yerkes
f45c8f618d It seems there's a subtle difference between mingw32 on windows and on
unixen.  Apparently, include_next does not count repeated include
directories on unixen but does on windows, thus windows users of mingw
saw the build of the ip lib break for not having included
w32api/include/basetsd.h through the include/basetsd.h.  It would
include include/basetsd.h again and (since the include guard in that
file surrounds the include_next), would do nothing the second time.  I guess
I'm the only person who got bit by this difference.

svn path=/trunk/; revision=11137
2004-09-30 22:04:13 +00:00
Emanuele Aliberti
c7eba737e2 Correct spelling errors in some remarks.
svn path=/trunk/; revision=11136
2004-09-30 21:14:24 +00:00
Eric Kohl
639754c6b8 Remove common shell folder settings.
svn path=/trunk/; revision=11135
2004-09-30 20:24:51 +00:00
Eric Kohl
3036e1670c - Add proper file header.
- Create common shell folder registry values in InitializeProfiles().

svn path=/trunk/; revision=11134
2004-09-30 20:23:00 +00:00
Richard Campbell
1de98ec592 rollback change for now
svn path=/trunk/; revision=11133
2004-09-30 16:47:49 +00:00
Art Yerkes
7b91f0c3fb Fixed makefile. Wrong name for ip.a
svn path=/trunk/; revision=11132
2004-09-30 16:30:43 +00:00
Richard Campbell
c831dac0e0 - For now, hardcode the all users profile path until we get better user management code in place
- removed the %USERPROFILE% prefix, this will go in combination with my other fix to hopefully get things working right again.

svn path=/trunk/; revision=11131
2004-09-30 15:39:48 +00:00
Royce Mitchell III
2ab40c2827 You're such a trooper, Marvin
svn path=/trunk/; revision=11130
2004-09-30 13:44:48 +00:00
Gé van Geldorp
e167d42360 You can tune a file system, but you can't tunafish
svn path=/trunk/; revision=11129
2004-09-30 10:07:00 +00:00
Gé van Geldorp
ae3fd2574d Rollback winehq merge since it breaks Explorer
svn path=/trunk/; revision=11128
2004-09-30 06:49:06 +00:00
Art Yerkes
0bccb9dbb0 Most files moved to linkable library drivers/lib/ip, which can be linked
from kernel land, or from userland with the help of drivers/lib/undis.
Hopefully, I'll be able to simulate a sufficient environment with undis
that we'll be able to test most problems with the ip system in userland.
This follows my general priniciple of getting most interesting code into
a place where we can really examine it and work with it.  The interface
to the ip library is still a bit raw.  I was hoping to do a better job
of isolating it and especially digging nt kernel dependencies out into
the remaining framework files (tcpip/dispatch.c, tcpip/fileobjs.c), but
it was taking too long.  Hopefully I can return to that later.

svn path=/trunk/; revision=11127
2004-09-30 06:00:42 +00:00
Art Yerkes
4ec1a851b9 Changes to the interface to componentized ip library. This commit is where
the ambiguously linked library starts being used in km.  There are further
cleanups i need to do, but hopefully having this checked in will help others
who are eager to help work on it.

svn path=/trunk/; revision=11126
2004-09-30 05:44:10 +00:00
Art Yerkes
03a9fe5219 Fixes to interface. Prototypes which were being stubborn. I will have to
figure out how to use these headers better.

svn path=/trunk/; revision=11125
2004-09-30 05:41:09 +00:00
Art Yerkes
e60bec5f2c Undis now builds a dll, carefully skirting the linkage problem i was facing.
I also add more and more correct functions.

svn path=/trunk/; revision=11124
2004-09-30 05:40:15 +00:00
Thomas Bluemel
c8de36191c use ULONG_PTR to calculate pointers
svn path=/trunk/; revision=11122
2004-09-29 08:41:39 +00:00
Gé van Geldorp
b8e45d0e41 Robert Shearman <rob@codeweavers.com>
- Simplify getting custom icons for a folder by utilising the new
  SHELL32_GetCustomFolderAttribute function.
- Add support for custom shell folders, such as the History folder.
- Always try to initialize folder using IPersistFolder3 interface and
  then fall back on IPersistFolder if not supported.

svn path=/trunk/; revision=11121
2004-09-29 07:01:37 +00:00
Art Yerkes
a6797af759 Getting there. Smoothing out the public interface and eliminating useless
types.

svn path=/trunk/; revision=11120
2004-09-29 06:11:27 +00:00
Art Yerkes
4c30d6be10 IP library. These files were moved from tcpip.sys and can be linked with
apps/tests/iptest using the undis library.  We need to make a change to
the way this is built so that we end up with ip.a (userland) and
ipkernel.a.  I'm still deciding how i want to do that.  For our purposes
now, it'll be fine to have it userland only as long as we still have the
option to build it for kernel use by hand to try out.

svn path=/trunk/; revision=11119
2004-09-29 05:10:48 +00:00
Art Yerkes
0f5152aa1c Added a header to lie between undis and net/ndis.h. This header will be used
to wrap and modify ndis definitions if necessary.

svn path=/trunk/; revision=11118
2004-09-29 04:57:26 +00:00
Art Yerkes
107ff56d07 Simple library which captures the remaining link-time dependencies for ip.a
Incomplete as yet.

Open question: how to make ip.a ambiguously linkable without building it
twice in it's present form.  Oskit was relatively simple because the
system dependencies were already isolated.  We need to capture and isolate
system dependencies in ip.a as well.

svn path=/trunk/; revision=11117
2004-09-29 04:54:26 +00:00
Art Yerkes
91a2bfd277 These calls to ExAllocatePool are done at != PASSIVE_LEVEL. Allocate
non-paged-pool.

svn path=/trunk/; revision=11116
2004-09-29 03:36:52 +00:00
Richard Campbell
1fea21808f - Changed a few REG_EXPAND_SZ to REG_SZs as per Windows
svn path=/trunk/; revision=11115
2004-09-29 01:26:35 +00:00
Royce Mitchell III
af06b2d654 sprintf bad
svn path=/trunk/; revision=11114
2004-09-29 00:47:42 +00:00
Gé van Geldorp
79d6604660 NtAllocateVirtualMemory() should return 64k aligned areas (forgotten file)
svn path=/trunk/; revision=11113
2004-09-28 20:58:29 +00:00
Gé van Geldorp
8e7f16e570 Don't return data length if not requested
svn path=/trunk/; revision=11112
2004-09-28 20:40:15 +00:00
Hartmut Birr
8ceb672cc0 - Fixed LdrLookupPageProtection.
svn path=/trunk/; revision=11111
2004-09-28 20:16:24 +00:00
James Tabor
e3bfa4f45a Add advpack.
svn path=/trunk/; revision=11110
2004-09-28 19:49:27 +00:00
Gé van Geldorp
d243b55958 NtAllocateVirtualMemory() should return 64k aligned areas
svn path=/trunk/; revision=11109
2004-09-28 19:49:21 +00:00
Steven Edwards
43787ecece Ported icmp.dll from wine.
svn path=/trunk/; revision=11108
2004-09-28 19:07:56 +00:00
Thomas Bluemel
3ef6e3494f relicense to LGPL
svn path=/trunk/; revision=11107
2004-09-28 16:05:24 +00:00
Thomas Bluemel
fdde8be2a7 avoid compiler warning
svn path=/trunk/; revision=11106
2004-09-28 15:14:04 +00:00
Thomas Bluemel
2d01207958 1. get rid of the global thread list and group threads in processes instead
2. get rid of all reactos-specific fields in the E/KTHREAD structure and make them match the 2k layout
3. identify threads (and later processes) using a client id table (which should propably be replaced by a global handle table instead)
4. disabled thread event pair functions by default (NT4 only) as they require a field in the ETHREAD structure that is not present in later versions

svn path=/trunk/; revision=11105
2004-09-28 15:02:31 +00:00
Eric Kohl
c0e4836b17 - Implement IoFreeErrorLogEntry().
- Fix log size calculation in IopLogWorker().

svn path=/trunk/; revision=11104
2004-09-28 12:51:14 +00:00
Eric Kohl
f665fe8a22 Use FILE_APPEND_DATA access right to write log entries.
svn path=/trunk/; revision=11103
2004-09-28 12:50:23 +00:00
Eric Kohl
f15ffecda4 Support special FILE_WRITE_TO_END_OF_FILE byte offset to append data to a file.
svn path=/trunk/; revision=11102
2004-09-28 10:52:55 +00:00
Eric Kohl
d394870def NtWriteFile must append to file if it was opened with the FILE_APPEND_DATA access.
FILE_WRITE_DATA take precedence over FILE_APPEND_DATA.

svn path=/trunk/; revision=11101
2004-09-28 10:51:05 +00:00
Gé van Geldorp
3d82d976d3 NtSetInformationThread() expects a pointer, not the handle itself
svn path=/trunk/; revision=11100
2004-09-27 20:04:53 +00:00
Eric Kohl
db47f999dd Define FILE_WRITE_TO_END_OF_FILE.
svn path=/trunk/; revision=11094
2004-09-27 11:32:31 +00:00
Gé van Geldorp
46dbd3190e Sylvain Petreolle <spetreolle@yahoo.fr>
- rules.mak is included too late in tools/winebuild/Makefile, which makes
  TARGET, "all:", CLEAN_FILES and HOST_CFLAGS wrong.

svn path=/trunk/; revision=11093
2004-09-27 08:15:07 +00:00
Steven Edwards
73a66a9cc9 Some fixes for MS_VC.
svn path=/trunk/; revision=11092
2004-09-27 04:32:52 +00:00
Steven Edwards
6a64eeeb08 Add a shutdown message.
svn path=/trunk/; revision=11091
2004-09-27 04:12:40 +00:00
Steven Edwards
21d354a1c1 Slightly new and improved stub for GetUserNameA based on the Winehq
code and hacked by Royce and Me.

svn path=/trunk/; revision=11082
2004-09-26 21:15:51 +00:00
Gé van Geldorp
05848ce54b Scream when an unimplemented function is called
svn path=/trunk/; revision=11081
2004-09-26 20:28:22 +00:00
Gé van Geldorp
f427428df7 Stub LookupAccountNameA/W
svn path=/trunk/; revision=11080
2004-09-26 20:26:13 +00:00
Gé van Geldorp
409e2330e1 Call GetProcessHeap() instead of passing it's address
svn path=/trunk/; revision=11079
2004-09-26 19:17:21 +00:00
Hartmut Birr
6375fca5be - Added a little sample which tests the noexecute protection.
svn path=/trunk/; revision=11077
2004-09-26 17:00:15 +00:00
Royce Mitchell III
9d63d77c6e add a little more debug output in case of unhandled exceptions
svn path=/trunk/; revision=11076
2004-09-26 16:54:53 +00:00
Hartmut Birr
1b03d41981 - Detect more cpu features.
- Implemented the noexecute protection for the AMD64 cpu.

svn path=/trunk/; revision=11075
2004-09-26 16:32:18 +00:00
Thomas Bluemel
455470d018 minor fix
svn path=/trunk/; revision=11074
2004-09-26 16:14:05 +00:00
Thomas Bluemel
cc0fabacd1 use Get/SetWindowLongPtr() where appropriate in favor of 64bit compatibility
svn path=/trunk/; revision=11073
2004-09-26 15:55:53 +00:00
Martin Fuchs
d3f70f50f0 introduce XPath syntax to make handling configuration a bit easier
svn path=/trunk/; revision=11071
2004-09-26 15:13:16 +00:00
Hartmut Birr
c8e0c372d9 - Rewrote (copied from ntdll) parts of the relocation and import fixup code.
- Don't load no-load sections at the end of the  driver.
- Don't relocate the relocation section itself.
- Set the correct page protection for section which are executable.
- Added a (dirty) fix for the fireport driver.
- Fixed the detection of the noguiboot option.

svn path=/trunk/; revision=11070
2004-09-26 15:07:44 +00:00
Filip Navara
a2446b3408 - Move shldisp.h to the right place.
- Get rid of the ICOM crap.

svn path=/trunk/; revision=11069
2004-09-26 14:34:23 +00:00
Thomas Bluemel
c28cd9af2c minor fix
svn path=/trunk/; revision=11068
2004-09-26 13:25:42 +00:00
Thomas Bluemel
5ee10c6024 add hid.dll to the build system
svn path=/trunk/; revision=11067
2004-09-26 12:39:30 +00:00
Eric Kohl
a1463efaf0 Delete a boot log from the registry after it was written to the boot log file.
svn path=/trunk/; revision=11066
2004-09-26 11:29:50 +00:00
Thomas Bluemel
1a541c9ebb enable PCH
svn path=/trunk/; revision=11065
2004-09-26 10:43:00 +00:00
Thomas Bluemel
dae8e69f8c fixed typo
svn path=/trunk/; revision=11064
2004-09-26 10:01:09 +00:00
Thomas Bluemel
06fc0007ce added shell extension that enables the user to change compatibility modes for .exe files in the file properties.
svn path=/trunk/; revision=11063
2004-09-26 09:56:23 +00:00
Hartmut Birr
82f36a4a4e - Reselected the drive (master/slave) after a soft reset.
svn path=/trunk/; revision=11062
2004-09-26 09:14:20 +00:00
Art Yerkes
a3091079d6 Fixed each call to use a unique event. This is needed because send, recv,
connect, etc can complete independently even on the same socket.
Fixed connect to pass the status from afd back correctly.  Connect now
fails as expected when we couldn't make a connection.

svn path=/trunk/; revision=11061
2004-09-26 07:55:32 +00:00
Royce Mitchell III
97fcd66fc7 more sayings
svn path=/trunk/; revision=11060
2004-09-26 02:33:31 +00:00
Filip Navara
93f1330753 - Fix RtlFindClearBits to correctly treat the hint.
svn path=/trunk/; revision=11059
2004-09-25 22:59:17 +00:00
Gé van Geldorp
200da8e7da Don't abandon file creation if hTemplateFile is INVALID_HANDLE_VALUE
svn path=/trunk/; revision=11058
2004-09-25 21:44:02 +00:00
Art Yerkes
e1741d6626 Use the recursive mutex to lock the TCP.
svn path=/trunk/; revision=11057
2004-09-25 21:32:56 +00:00
Art Yerkes
1eb1e27110 Added simple recursive mutex adapted from my afd one. Works both above
and below DISPATCH_LEVEL.

svn path=/trunk/; revision=11056
2004-09-25 21:32:18 +00:00
Art Yerkes
3a4c09d746 More experimental detritus. Sorry about that.
svn path=/trunk/; revision=11055
2004-09-25 21:08:53 +00:00
Filip Navara
630b1b2eb3 - Fix usage of RtlFindSetBits and loops in CmiStartLogUpdate and CmiStartHiveUpdate.
svn path=/trunk/; revision=11054
2004-09-25 20:53:29 +00:00
Filip Navara
3823d945f5 - Fix implementation of RtlFindSetBits to be able to return bits that are at lower location than the supplied hint.
svn path=/trunk/; revision=11053
2004-09-25 20:49:57 +00:00
Art Yerkes
91fea9194d Previously checked in with some detritus from some experimental rtl stuff.
Fixed.

svn path=/trunk/; revision=11052
2004-09-25 20:38:46 +00:00
Art Yerkes
3725308f3e Fixed connection locking in tcp.c
Added a work item in lan.c re: dpc callback from the adapter.  This keeps
us from needing mdl functions at dpc level.
Track IRPs to be completed with memtrack.

svn path=/trunk/; revision=11051
2004-09-25 20:24:00 +00:00
Filip Navara
ee0f0ee26f - Remove the incorrect ALIGN macro (missing "* (align)") and replace it with ROUND_UP.
svn path=/trunk/; revision=11050
2004-09-25 19:39:57 +00:00
Gé van Geldorp
fceb614b2b Make some installers happy (well, happier at least)
svn path=/trunk/; revision=11049
2004-09-25 18:22:33 +00:00
Emanuele Aliberti
0f2014b8bb Fixed spelling error.
svn path=/trunk/; revision=11048
2004-09-25 15:46:52 +00:00
Eric Kohl
23a709ca5f - CmiAddValueToKey(): Double the size of the value list cell when it is completely filled. This prevents fragmentation if a key got lots of values.
- CmiDeleteValueFromKey(): Fix corruption of the value list cell when a value is removed from the list.
- Rename the variable VBOffset to ValueCellOffset.

svn path=/trunk/; revision=11047
2004-09-25 15:25:28 +00:00
Eric Kohl
1f82196fd5 - Use ROUND_UP macro instead of explicit calculation.
- Replace fixed values by appropriate constants.
- Replace STATUS_UNSUCCESSFUL by better status codes.

svn path=/trunk/; revision=11046
2004-09-25 12:11:13 +00:00
Gé van Geldorp
95210d36ee - Round up requested amount of memory instead of down
- Simplify space check, old version didn't work because of signed/unsigned issues

svn path=/trunk/; revision=11045
2004-09-25 08:58:44 +00:00
Gé van Geldorp
79c3ba475a SeAccessCheck() returns TRUE on success
svn path=/trunk/; revision=11044
2004-09-25 08:49:06 +00:00
Filip Navara
ee3726520d - Remove duplicate SPI_* definitions.
svn path=/trunk/; revision=11043
2004-09-25 08:21:12 +00:00
Filip Navara
d8db49d056 - Remove duplicate definitions and redundant header file.
svn path=/trunk/; revision=11042
2004-09-25 08:20:16 +00:00
Martin Fuchs
5ee46f4794 compareType refactoring
svn path=/trunk/; revision=11041
2004-09-25 07:55:31 +00:00
Art Yerkes
0089446cc6 cm/regfile.c, ldr/init.c, ldr/loader.c: OBJ_CASE_INSENSITIVE patch I proposed
on the list.  This makes the registry, and dll loading case insensitive when
we are on a case preserving filesystem.

ntoskrnl/ex/power.c: My own contributions to the poweroff message list.

ntoskrnl/mm/npool.c: Fixed bit-rot in whole page alloc.  That's how i found
the bug below.

se/semgr.c, lib/rtl/sd.c:
semgr, when creating a SECURITY_DESCRIPTOR, anded the PRESENT and DEFAULT
flags rather than oring them for group, dacl, and sacl, leading to
RtlLengthSecurityDescriptor giving the wrong length to sdcache.  When
sdcache would copy the security descriptor, it would be too short, and
the bound check from the whole-page allocator would go off.  I fixed this
and made rtl/sd.c use the ROUND_UP macro and RtlLengthSid.  This is cleaner.
It may not be completely correct yet but it no-longer truncates security
descriptors into the cache, which means that the Owner, Group and etc
SIDs should now actually work right when coming from the cache, no matter
what happens in the heap.  They probably seemed to work before simply
because they trashed the ends of their blocks and never moved in the
cache.

svn path=/trunk/; revision=11040
2004-09-25 06:41:16 +00:00
Art Yerkes
906e734ab4 Changed functions RtlClearAllBits and RtlSetAllBits to use SizeOfBitMap
as the number of bits, not the number of bytes in the bitmap.  This was
making the whole page allocator in ntoskrnl/mm/npool.c crash early in
the boot process with whole page allocations on.  This may affect other
things adversely as well.

The documentation for RtlInitializeBitMap is here:
http://www.osronline.com/ddkx/kmarch/k109_5sfm.htm

svn path=/trunk/; revision=11039
2004-09-25 03:20:16 +00:00
Thomas Bluemel
9e91360716 1. implemented GetThreadSelectorEntry()
2. added missing DESCRIPTOR_TABLE_ENTRY structure

svn path=/trunk/; revision=11037
2004-09-24 20:55:58 +00:00
Gé van Geldorp
29df1f045e You can't wait for 0 objects
svn path=/trunk/; revision=11036
2004-09-24 20:26:43 +00:00
Thomas Bluemel
4d0a1d7cea don't skip the detection code
svn path=/trunk/; revision=11035
2004-09-24 20:20:46 +00:00
Thomas Bluemel
9dfe6f1d9c enabled the Wizard97 style
svn path=/trunk/; revision=11034
2004-09-24 20:18:16 +00:00
Eric Kohl
01aff80376 Enable wizard 97 style and add a dummy progress page.
svn path=/trunk/; revision=11033
2004-09-24 18:52:29 +00:00
Thomas Bluemel
109dc19c13 added stub for ObFindHandleForObject() and export it
svn path=/trunk/; revision=11031
2004-09-24 16:18:28 +00:00
Filip Navara
ec73e88d5f - Remove duplicate definitions.
svn path=/trunk/; revision=11030
2004-09-24 16:13:21 +00:00
Gé van Geldorp
df80dc6da3 Implement PathIsCharValidA/W
svn path=/trunk/; revision=11029
2004-09-24 15:17:20 +00:00
Filip Navara
c9da2445aa - Don't validate parents after sending the WM_ERASEBKGND message.
- Fix support for SWP_NOREDRAW flag in SetWindowPos.

svn path=/trunk/; revision=11028
2004-09-24 15:07:38 +00:00
Eric Kohl
78e1dba27f Close the bootlog key if value enumeration or writing to the log file fails.
svn path=/trunk/; revision=11027
2004-09-24 15:00:34 +00:00
Gé van Geldorp
361d78ab88 Merge back commit from winehq
svn path=/trunk/; revision=11026
2004-09-24 12:13:54 +00:00
Gé van Geldorp
b92ba82e5f - SHGetAppCompatFlags() takes 4 bytes of parameters
- QueryInterface will return NULL for the new pointer if it fails

svn path=/trunk/; revision=11025
2004-09-24 11:12:44 +00:00
Eric Kohl
97037edf6b - Print correct ReactOS version in the boot log header.
- Add ntoskrnl.exe and hal.dll to the boot log.

svn path=/trunk/; revision=11024
2004-09-24 10:51:35 +00:00
Art Yerkes
102c8c9a78 Initialize ext so that MCLFREE will be called appropriately.
This macro was freeing (m)->m_data, but m was not a macro parameter.
It compiled because virtually every mbuf * is named m.  Fixed.

svn path=/trunk/; revision=11023
2004-09-24 04:58:17 +00:00
Art Yerkes
d7a6bf353f Also wait in the success, no data case in socket state change.
svn path=/trunk/; revision=11022
2004-09-24 00:56:39 +00:00
Art Yerkes
2c75d67c33 Fix send function as well to properly deallocate the irp on failure on
MmProbeAndLockPages.

svn path=/trunk/; revision=11021
2004-09-24 00:51:31 +00:00
Thomas Bluemel
2eb5ead6ed implemented GetUserDefaultUILanguage()
svn path=/trunk/; revision=11020
2004-09-24 00:36:14 +00:00
Thomas Bluemel
5b552386bc don't attempt to reference NULL objects in NtIsProcessInJob()
svn path=/trunk/; revision=11019
2004-09-23 22:02:39 +00:00
Thomas Bluemel
b50f152bc1 implemented NtIsProcessInJob()
svn path=/trunk/; revision=11018
2004-09-23 21:23:34 +00:00
Emanuele Aliberti
bf3b5cc677 Emanuele Aliberti <ea@reactos.com>
- Some stubs for ts moved in process/session.c.
- Implemented ProcessIdToSessionId.

svn path=/trunk/; revision=11017
2004-09-23 21:01:23 +00:00
Art Yerkes
b0f758cf33 tcp: print error when we can't allocate a bucket.
event: Don't report eof if we have bytes to deliver still.
       Made a mistake moving statuses around.  Requeue the request on
       STATUS_PENDING.

svn path=/trunk/; revision=11016
2004-09-23 20:51:46 +00:00
Art Yerkes
e91d1416ab Write: print bytes returned so we can see it.
Read : notify ourselves that the buffer is empty and reset the pointers.
Tdi  : since the handler part is an inner function, don't return from it
       but instead set Status and return afterward.

svn path=/trunk/; revision=11015
2004-09-23 20:48:40 +00:00
Gé van Geldorp
0a185bdb18 Sync to Wine:
Alexandre Julliard <julliard@winehq.org>
- Store all information about the current dll in a structure instead of
  using global variables to make it easier to reuse the parsing
  routines.
- Added native mode dll support (based on a patch by Marcus Meissner).
- Added support for building a dll from a .def file for cases where we
  don't want to write a full .spec.
- Renamed --spec option to --dll for consistency.
- Removed the Unicode exe modes, and instead detect automatically which
  mode to use based on the existence of main or wmain.
- Automatically detect whether the entry point is main or WinMain
  instead of depending on the subsystem type.
- Do not strip stdcall decoration in spec files.
- Print a warning when DllRegisterServer and similar functions are not
  marked private.
- Fill in the proper offsets in the resource directory instead of
  relying on the compiler to do it.
Jukka Heinonen <jhei@iki.fi>
- Remove support for generating interrupt handlers.
- DPMI programs now handle pending events.
Robert Shearman <R.J.Shearman@warwick.ac.uk>
- Fix proc name reported in delay load failure.
Richard Cohen <richard@daijobu.co.uk>
- Remove . from default library search path.
Eric Pouech <pouech-eric@wanadoo.fr>
- added size information about most of the generated thunks (import,
  16/32 relay...)
- marked the wine thunks by inserting specific symbols (to be managed
  by wine's dbghelp)
- removed the stabs generation:
  + mostly used by winedbg, and the previous item will replace it for
    dbghelp
  + still broken for gdb anyway
- enhanced const correctness
Pierre d'Herbemont <stegefin@free.fr>
- Detection of .size instruction.
- Detection of the assembler name prefix.
- Delayed import fix for Darwin and PowerPC Host.
- Be more accurate on Darwin stack size.
- Delay import fix on PowerPC hosts.
Marcus Meissner <meissner@suse.de>
- Use "LD" instead of "ld" in winebuild to be able to use a different ld
  or ld options.
Dmitry Timoshkov <dmitry@codeweavers.com>
- Add a few missing __ASM_NAME macros.

svn path=/trunk/; revision=11014
2004-09-23 20:27:30 +00:00
Casper Hornstrup
219e1cea20 2004-09-23 Casper S. Hornstrup <chorns@users.sourceforge.net>
* lib/msafd/makefile (TARGET_CFLAGS): Don't define DBG.
	* lib/msafd/include/debug.h: Redefine ASSERT.

svn path=/trunk/; revision=11013
2004-09-23 20:05:32 +00:00
Thomas Bluemel
f9de66edba remove implemented stubs
svn path=/trunk/; revision=11011
2004-09-23 19:03:26 +00:00
Thomas Bluemel
8fd7d74051 fixed returning a wrong handle count in GetProcessHandleCount()
svn path=/trunk/; revision=11010
2004-09-23 19:01:38 +00:00
Thomas Bluemel
3d915100ab fixed initialization of the object attributes in CreateJobObjectW()
svn path=/trunk/; revision=11009
2004-09-23 18:55:18 +00:00
Thomas Bluemel
808e28016e implemented OpenJobObjectA/W() - untested though
svn path=/trunk/; revision=11008
2004-09-23 18:46:10 +00:00
Martin Fuchs
c39da650dd work around GCC's wide string constant bug
svn path=/trunk/; revision=11007
2004-09-23 18:37:57 +00:00
Thomas Bluemel
51c36121e9 implemented CreateJobObjectA/W() - untested though
svn path=/trunk/; revision=11006
2004-09-23 18:31:51 +00:00
Thomas Bluemel
b85ef6c64a implemented IsProcessInJob(), AssignProcessToJobObject(), QueryInformationJobObject(), SetInformationJobObject() and TerminateJobObject(), all untested though
svn path=/trunk/; revision=11005
2004-09-23 18:02:19 +00:00
Royce Mitchell III
04c8adbef9 add some debug output
svn path=/trunk/; revision=11004
2004-09-23 18:00:29 +00:00
Thomas Bluemel
1c5a999278 export job functions
svn path=/trunk/; revision=11003
2004-09-23 17:03:59 +00:00
Thomas Bluemel
08dea69da5 forgot to add job access rights
svn path=/trunk/; revision=11002
2004-09-23 16:53:25 +00:00
Thomas Bluemel
dcea0ecb49 proper job access mapping
svn path=/trunk/; revision=11001
2004-09-23 16:31:21 +00:00
Martin Fuchs
62c06f1198 encode &quot; and &apos;
svn path=/trunk/; revision=11000
2004-09-23 16:09:15 +00:00
Art Yerkes
d774499bf8 event.c: Don't infinite loop while completing a zero-length read.
tcp.c: Correctly pass on length in recv.

svn path=/trunk/; revision=10999
2004-09-23 14:16:27 +00:00
Royce Mitchell III
0dbb29fa23 small fix to OskitDumpBuffer() - each line should display the address of it's first byte, not the address of the beginning of the dump...
svn path=/trunk/; revision=10998
2004-09-23 12:43:49 +00:00
Royce Mitchell III
2c63cbebbc new version of OskitDumpBuffer() that shows ascii characters, too, for easier debugging
svn path=/trunk/; revision=10997
2004-09-23 12:36:19 +00:00
Eric Kohl
6e00d9b507 Implement boot logging. Add /BOOTLOG to the command line to enable boot logging.
svn path=/trunk/; revision=10996
2004-09-23 11:27:58 +00:00
Art Yerkes
d0135b1184 Fixed the way send and recv are called and return errors.
added some printing.
dllmains: adjusted printing.

svn path=/trunk/; revision=10995
2004-09-23 08:16:16 +00:00
Gé van Geldorp
18318e6e17 Steven Edwards <steven_ed4153@yahoo.com>
- Remove some unneeded include statements.

svn path=/trunk/; revision=10994
2004-09-23 06:48:09 +00:00
Art Yerkes
51580f3182 Fixes: Lock does not need to acquire a spinlock in the non-passive-level
case because we can't contend with outselves in passive level.
Realized subtle bug in select.

Select needs a referenced file object rather than a handle.  Will change
this when i get time.

svn path=/trunk/; revision=10993
2004-09-23 06:42:16 +00:00
Art Yerkes
36cc9bb181 Main changes: reimported uipc_socket.c which had lots of differences with
freebsd.
Fixed: OskitTCPReceive.  Now rely exclusively on uio as suggested.

svn path=/trunk/; revision=10992
2004-09-23 06:39:16 +00:00
Royce Mitchell III
bb9e009623 forgot to save workspace before commiting. removed directory from include path that was only meant to be temporary
svn path=/trunk/; revision=10991
2004-09-23 03:13:35 +00:00
Royce Mitchell III
438e4eae22 oskittcp can now be built with vs6
svn path=/trunk/; revision=10990
2004-09-23 03:02:29 +00:00
Martin Fuchs
696d3bd2b6 remove wStringTableOffset
svn path=/trunk/; revision=10989
2004-09-22 23:00:24 +00:00
Martin Fuchs
8e81012956 configuration dialog to choose between MDI and SDI mode with persistent storage
svn path=/trunk/; revision=10988
2004-09-22 22:57:00 +00:00
Thomas Bluemel
40637ed24b initialize the job management and export PsJobType
svn path=/trunk/; revision=10987
2004-09-22 22:31:46 +00:00
Steven Edwards
ba27e813a3 Fix building mdi test on MS_VC and Mingw
svn path=/trunk/; revision=10986
2004-09-22 22:25:13 +00:00
Steven Edwards
3cf59b7b6c Fix building dnsquery test on MS_VC and Mingw
svn path=/trunk/; revision=10985
2004-09-22 22:13:56 +00:00
Gé van Geldorp
4170c2ae26 Henning Gerhardt <henning.gerhardt@web.de>
- Minor fixes and updates to the German resource files.
Marcelo Duarte <wine-devel@bol.com.br>
- French translation and other adjustments.
- Update localization for Portuguese language.
Ivan Leo Puoti <puoti@inwind.it>
- Changed my name, so update copyright info.
- Added Italian resources.
Jose Manuel Ferrer Ortiz <jmfo1982@yahoo.es>
- Updated the Spanish shell32 translation and made some corrections to
  other language files.

svn path=/trunk/; revision=10984
2004-09-22 20:50:30 +00:00
Thomas Bluemel
594cfc6a04 1. fixed RtlValidSecurityDescriptor() that attempted to validate nonexisting owner/group SID
2. implemented RtlValidRelativeSecurityDescriptor()

svn path=/trunk/; revision=10983
2004-09-22 20:16:02 +00:00
Steven Edwards
c92d7b8a36 Fix building for building on both Mingw and MS_VC.
svn path=/trunk/; revision=10982
2004-09-22 19:53:14 +00:00
Gé van Geldorp
dab159a4de Robert Shearman <rob@codeweavers.com>
- GetWindowLong -> GetWindowLongPtr.

svn path=/trunk/; revision=10981
2004-09-22 19:46:52 +00:00
Gé van Geldorp
5a585fd014 Ulrich Czekalla <ulrich@codeweavers.com>
- When we send out a notification to a registered window with
  SHCNRF_NewDelivery, we should send a LPNOTIFICATIONLIST and the
  process id of the caller.

svn path=/trunk/; revision=10980
2004-09-22 19:38:54 +00:00
Gé van Geldorp
c2678bf64e Francois Gouget <fgouget@free.fr>
- Assorted spelling fixes.

svn path=/trunk/; revision=10979
2004-09-22 19:24:14 +00:00
Gé van Geldorp
b49b939efd Stefan Leichter <Stefan.Leichter@camLine.com>
- Moved stub of Control_FillCache_RunDLL from ascii to unicode.

svn path=/trunk/; revision=10978
2004-09-22 19:13:36 +00:00
Gé van Geldorp
f505dd6839 Merge back commit from winehq.
Mike McCormack <mike@codeweavers.com>
- Use Heap function in preference to malloc/free.

svn path=/trunk/; revision=10977
2004-09-22 18:47:39 +00:00
Gé van Geldorp
2e87325d12 Huw Davies <huw@codeweavers.com>
- Change dialogs to use MS Shell Dlg rather than Helv or MS Sans Serif.

svn path=/trunk/; revision=10976
2004-09-22 18:10:57 +00:00
Royce Mitchell III
b608a8ac83 don't zero out OtcpEvent structure from InitOskitTCP(), because it has already been initialized at this point. Also added a check for null to avoid crash in ifa_ifwithnet()
svn path=/trunk/; revision=10975
2004-09-22 17:41:52 +00:00
Thomas Bluemel
bebf5b5e5e 1. added EJOB structure
2. implemented PsGetProcessJob(), PsGetJobLock(), PsGetJobSessionId() and PsGetJobUIRestrictionsClass()

svn path=/trunk/; revision=10974
2004-09-22 14:53:26 +00:00
Royce Mitchell III
cd3894b51d clean up/simplify 'type' command some more and don't append command-terminating carriage-return to the output buffer.
svn path=/trunk/; revision=10973
2004-09-22 13:55:07 +00:00
Royce Mitchell III
540291d651 replace problematic stack variable in OskitTCPSend() with properly allocated mbuf, and get rid of a redundant memcpy() in OskitTCPReceiveDatagram().
svn path=/trunk/; revision=10972
2004-09-22 13:35:11 +00:00
Thomas Bluemel
3c9fc0f8ce accidently changed the @unimplemented marks
svn path=/trunk/; revision=10971
2004-09-22 10:58:06 +00:00
Thomas Bluemel
c436cba1b9 don't be silent when calling unimplemented functions
svn path=/trunk/; revision=10970
2004-09-22 10:49:07 +00:00
Thomas Bluemel
6c07abd294 implemented CheckNameLegalDOS8Dot3A/W()
svn path=/trunk/; revision=10969
2004-09-22 09:31:01 +00:00
Gé van Geldorp
2b9416f467 Robert Shearman <rob@codeweavers.com>
- Share version information between DllGetVersion and resource file.

svn path=/trunk/; revision=10968
2004-09-22 05:08:04 +00:00
Gé van Geldorp
9fcfe5a590 Juan Lang <juan_lang@yahoo.com>
- If a folder contains a desktop.ini, check it for the icon location
  before using the default folder icon.

svn path=/trunk/; revision=10967
2004-09-21 22:14:38 +00:00
Thomas Bluemel
cbfc9645ec implemented GetSystemRegistryQuota()
svn path=/trunk/; revision=10966
2004-09-21 22:08:18 +00:00
Thomas Bluemel
5f701004c0 fixed definition of the SYSTEM_REGISTRY_QUOTA_INFORMATION structure
svn path=/trunk/; revision=10965
2004-09-21 22:07:38 +00:00
Thomas Bluemel
1f2ec88e90 implemented GetProcessHandleCount()
svn path=/trunk/; revision=10964
2004-09-21 21:53:45 +00:00
Gé van Geldorp
63b36d9681 Francois Gouget <fgouget@codeweavers.com>
- Fix CSIDL_COMMON_{STARTMENU,PROGRAMS,DESKTOPDIRECTORY} so they all use
  paths in 'All Users' like CSIDL_COMMON_STARTUP.
  The CSIDL_COMMON_PROGRAMS fix solves many menu creation problems.

svn path=/trunk/; revision=10963
2004-09-21 21:13:49 +00:00
Gé van Geldorp
664942baf9 Eric Pouech <pouech-eric@wanadoo.fr>
- GetModuleFileName[AW] doesn't terminate the string if the buffer is
  too small.
Jon Griffiths <jon_p_griffiths@yahoo.com>
- Don't leak cache imagelists on exit.

svn path=/trunk/; revision=10962
2004-09-21 20:48:02 +00:00
Gé van Geldorp
ffa3b3d7fd Match whitespace to winehq
svn path=/trunk/; revision=10961
2004-09-21 19:44:19 +00:00
Gé van Geldorp
2ff29d7662 Juan Lang <juan_lang@yahoo.com>
- Correct return value in a couple of error cases.
Marcus Meissner <marcus@jet.franken.de>
- Marked some functions in debughlp as static.
- Do not use REFIID as return, but IID*.

svn path=/trunk/; revision=10960
2004-09-21 19:38:17 +00:00
Gé van Geldorp
a867629b4f Juan Lang <juan_lang@yahoo.com>
- Correct some PIDL types and eliminate some magic numbers in PIDL
  allocation; correct a copy-pasto from a previous patch.

svn path=/trunk/; revision=10959
2004-09-21 19:34:21 +00:00
Thomas Bluemel
e831b21339 implemented CreateMemoryResourceNotification() and QueryMemoryResourceNotification(), but only the kernel32 part
svn path=/trunk/; revision=10958
2004-09-21 19:17:26 +00:00
Gé van Geldorp
d0fa47278d Sync to winehq
svn path=/trunk/; revision=10957
2004-09-21 19:11:35 +00:00
Gé van Geldorp
e74c23bc36 We have our own tray code
svn path=/trunk/; revision=10956
2004-09-21 19:02:01 +00:00
Gé van Geldorp
af135d8b9b Juan Lang <juan_lang@yahoo.com>
- Add stub for ShellDDEInit to let Windows explorer.exe get past the
  beginning.
Francois Gouget <fgouget@free.fr>
- Make Unicode strings static const.
Eric Pouech <pouech-eric@wanadoo.fr>
- GetModuleFileName[AW] doesn't terminate the string if the buffer is
  too small.
Jon Griffiths <jon_p_griffiths@yahoo.com>
- Delete the about dialog font when the dialog is closed.
Juan Lang <juan_lang@yahoo.com>
- Added support for DLLVERSIONINFO2 in DllGetVersion.

svn path=/trunk/; revision=10955
2004-09-21 18:55:53 +00:00
Gé van Geldorp
4ac1e6a310 Mike McCormack <mike@codeweavers.com>
- Update path from relative path on loading.

svn path=/trunk/; revision=10954
2004-09-21 18:14:15 +00:00
Thomas Bluemel
bd7af734b8 implemented IsDBCSLeadByte() and IsDBCSLeadByteEx()
svn path=/trunk/; revision=10953
2004-09-21 17:41:24 +00:00
Art Yerkes
fa965094ed Fixed tcptest to not do send recv or close on a socket that's not connected.
This keeps the user from doing something inappropriate.
makefile: add -g back in

svn path=/trunk/; revision=10952
2004-09-21 04:06:15 +00:00
Royce Mitchell III
6f6e411eef bcopy()'s arguments are different order than memcpy()
svn path=/trunk/; revision=10951
2004-09-21 04:00:14 +00:00
Gé van Geldorp
822b8e1a47 Francois Gouget <fgouget@free.fr>
- Make Unicode const strings static so they are not copied to the stack
  each time we enter the function.
Aric Stewart <aric@codeweavers.com>
- In IPersistFile_Save if the exe file is not found, trust the path we
  are given and allow creation of the link.
- Make sure exePath contains the path since it is used later in the
  function as well.
Ge van Geldorp <gvg@reactos.com>
- Match whitespace to winehq

svn path=/trunk/; revision=10950
2004-09-20 21:39:04 +00:00
Hartmut Birr
093f4a09c5 - Implemented the loading of drivers according to the order
of the tag entries in the GroupOrderList key.

svn path=/trunk/; revision=10949
2004-09-20 19:47:25 +00:00
Gé van Geldorp
c9ece8cfa5 Maxime Belleng� <maxime.bellenge@laposte.net>
- Add the IAutoComplete and IAutoComplete2 implementation (but methods
  stubbed for now).

svn path=/trunk/; revision=10948
2004-09-20 19:47:14 +00:00
Gé van Geldorp
6eb55219c8 Merge back commits from winehq
Maxime Bellenge <maxime.bellenge@laposte.net>
- Add the IAutoComplete and IAutoComplete2 implementation (but methods
  stubbed for now).

svn path=/trunk/; revision=10947
2004-09-20 18:55:21 +00:00
Gé van Geldorp
dfd4f0156b Francois Gouget <fgouget@free.fr>
- Fix some field names in CSFV and QCMINFO.
Patrik Stridvall <ps@leissner.se>
- Fixed some issues found by winapi_check.

svn path=/trunk/; revision=10946
2004-09-20 18:45:00 +00:00
Gé van Geldorp
5a384553bd Robert Shearman <rob@codeweavers.com>
- Add exports for missing ordinals 191-194.
- Stub for SHUpdateImageW.

svn path=/trunk/; revision=10945
2004-09-20 18:32:33 +00:00
Gé van Geldorp
6382d705ab Francois Gouget <fgouget@free.fr>
- Don't export the shell32 SHAllocShared functions by name.
  Implement them by calling out their shlwapi equivalent (which had a
  much more complete implementation anyway).
- Fix the prototype of shlwapi's SHAllocShared().
- Don't crash if lpvData is NULL in SHAllocShared().
- Add a conformance test to shlwapi.

svn path=/trunk/; revision=10944
2004-09-20 18:29:10 +00:00
Gé van Geldorp
cccdc00157 Fork a small change which has little change of being accepted by winehq
svn path=/trunk/; revision=10943
2004-09-20 18:08:37 +00:00
Gé van Geldorp
322da3c44c Vincent Beron <vberon@mecano.gme.usherb.ca>
- Don't hardcode c:\windows paths in msi.dll.
Huw Davies <huw@codeweavers.com>
- Unicodify a load of strings.

svn path=/trunk/; revision=10942
2004-09-20 18:07:54 +00:00
Hartmut Birr
553993dcd2 - Implemented the driver loading by the sequence of tag entries in the GroupOrderList key.
svn path=/trunk/; revision=10941
2004-09-20 18:02:36 +00:00
Hartmut Birr
b23fa198a6 - Added the 'GroupOrderList' key.
- Added entries for some scsi port drivers.
- Added the tag key for the atapi driver.

svn path=/trunk/; revision=10940
2004-09-20 17:57:46 +00:00
Gé van Geldorp
f634e3c46c Return status code
svn path=/trunk/; revision=10939
2004-09-20 17:55:16 +00:00
Gé van Geldorp
67f1b8f671 Martin Fuchs <martin-fuchs@gmx.net>
- make drive letters in PIDLs always uppercase to enable PIDL
  comparison
- Unicodify _ILCreateDrive()

svn path=/trunk/; revision=10938
2004-09-20 17:47:49 +00:00
Gé van Geldorp
e4f5d86770 Martin Fuchs <martin-fuchs@gmx.net>
Return "file not found" error values instead of E_INVALIDARG if
_ILCreateFromPathA() failed to find files.

svn path=/trunk/; revision=10936
2004-09-20 17:42:57 +00:00
Royce Mitchell III
cd1222eced initialize fields that sosend() expects to have valid values
svn path=/trunk/; revision=10935
2004-09-20 15:47:03 +00:00
Gé van Geldorp
db2f0db5f7 Martin Fuchs <martin-fuchs@gmx.net>
- make drive letters in PIDLs always uppercase to enable PIDL
  comparison
- Unicodify _ILCreateDrive()

svn path=/trunk/; revision=10934
2004-09-20 15:36:07 +00:00
Gé van Geldorp
56dec0d9ee Merge back commit from winehq
svn path=/trunk/; revision=10933
2004-09-20 15:07:21 +00:00
Gé van Geldorp
91923bdc1d Mike McCormack <mike@codeweavers.com>
- Clean up messy comment in SHFileOperation.
- Reduce the number of goto labels in SHFileOperation by one.

svn path=/trunk/; revision=10932
2004-09-20 14:52:47 +00:00
Gé van Geldorp
88a015f877 Vitaliy Margolen <wine-patch@kievinfo.com>
- IShellFolder::CompareIDs - return only -1/0/1 in lower 16 bit.

svn path=/trunk/; revision=10931
2004-09-20 14:45:07 +00:00
Gé van Geldorp
8985a9b088 Alexandre Julliard <julliard@winehq.org>
- Don't define BEGIN_INTERFACE in unknwn.h.
Francois Gouget <fgouget@free.fr>
- Add #define COBJMACROS where needed in Wine.
Juan Lang <juan_lang@yahoo.com>
- IShellView seems reasonably complete, change a FIXME to a TRACE to
  speed up open/save dialogs.

Merge back commits from winehq

svn path=/trunk/; revision=10930
2004-09-20 14:38:30 +00:00
Gé van Geldorp
0785062c81 Alexandre Julliard <julliard@winehq.org>
- Get rid of the non-standard ICOM_DEFINE macro.
- Get rid of the non-standard ICOM_VFIELD macro.
- Get rid of the non-standard ICOM_VTABLE macro.
- Get rid of the no longer used ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
  macro.
- Removed some more uses of the non-standard ICOM_THIS macro.

svn path=/trunk/; revision=10929
2004-09-20 09:18:52 +00:00
Gé van Geldorp
f7f21544a4 Remove incorrect assert. An APC can be queued to the attached environment,
as long as it is delivered before KeDetachProcess() is called.

svn path=/trunk/; revision=10928
2004-09-20 08:17:44 +00:00
Art Yerkes
2d1b661aa1 Implemented MCLGET for reactos, not dependent on either bsd or oskit
facilities.

svn path=/trunk/; revision=10927
2004-09-20 05:03:28 +00:00
Art Yerkes
03fea0db7d Royce Mitchell pointed out that we could eliminate these ifdefs if we don't
use a uio, and that the uio is not needed because an mbuf can't be partially
accepted.

svn path=/trunk/; revision=10926
2004-09-20 04:18:45 +00:00
Royce Mitchell III
10adf2be06 sosend( ) will not process mbuf if you pass it a uio (according to arty)
svn path=/trunk/; revision=10925
2004-09-20 04:13:46 +00:00
Gé van Geldorp
5124ae5f88 Fix copy/paste error
svn path=/trunk/; revision=10924
2004-09-19 22:07:40 +00:00
Gé van Geldorp
b22290537c Francois Gouget <fgouget@free.fr>
- Moved declarations from undocshell.h to shlobj.h to match the latest
  platform SDK.

svn path=/trunk/; revision=10923
2004-09-19 22:02:28 +00:00
Royce Mitchell III
2613fbbeb9 added 'type' command
svn path=/trunk/; revision=10922
2004-09-19 15:55:35 +00:00
Thomas Bluemel
17cd1043bb 1. implemented SetProcessWorkingSetSize()
2. fixed Set/GetPriorityClass() not to call csrss and use NtSet/QueryInformationProcess() instead

svn path=/trunk/; revision=10921
2004-09-19 14:36:47 +00:00
Thomas Bluemel
b912ada645 don't memcpy TIME structures to FILETIME structures
svn path=/trunk/; revision=10920
2004-09-19 12:45:55 +00:00
Martin Fuchs
fb19ab485e remove explorer references
svn path=/trunk/; revision=10919
2004-09-19 12:33:17 +00:00
Martin Fuchs
00bbf934b7 added Wine translations for winefile:
es.rc, fr.rc, hu.rc, it.rc, nl.rc, pt.rc, ru.rc, si.rc, zh.rc
Thanks to Sylvain Petreolle <spetreolle@yahoo.fr>

svn path=/trunk/; revision=10918
2004-09-19 12:23:31 +00:00
Hartmut Birr
035b22b542 - Call MmFreeSectionSegments if the Bcb reference count is zero (in CcRosReleaseFileCache).
svn path=/trunk/; revision=10917
2004-09-19 12:11:44 +00:00
Gé van Geldorp
06bac7f0b9 Avoid crash
svn path=/trunk/; revision=10916
2004-09-19 11:25:43 +00:00
Gé van Geldorp
510df619d2 Sync to Wine-20040914
svn path=/trunk/; revision=10915
2004-09-19 11:15:58 +00:00
Gé van Geldorp
0645493981 Sync to Wine-20040914:
Robert Reif <reif@earthlink.net>
- Don't try to find alternate formats for non PCM formats.

svn path=/trunk/; revision=10913
2004-09-19 11:13:17 +00:00
Gé van Geldorp
601c767280 Sync to Wine-20040914:
David Kredba <kredba@ibot.cas.cz>
- Added Czech resources.
Robert Reif <reif@earthlink.net>
- Remove wine specific DRV_QUERYDSOUNDGUID message and calculate it in
  dsound.dll (like in 2k/xp).
Dmitry Timoshkov <dmitry@codeweavers.com>
- Fix an obvious typo leading to a crash.
Alexandre Julliard
- Function parameters don't need WINE_UNUSED.
Eric Pouech <pouech-eric@wanadoo.fr>
- Implemented the mmTask* functions.

svn path=/trunk/; revision=10912
2004-09-19 11:07:39 +00:00
Emanuele Aliberti
976020b12d .cvsignore updated.
svn path=/trunk/; revision=10911
2004-09-19 10:48:43 +00:00
Gé van Geldorp
7a8404b20f Sync to Wine-20040914:
Hans Leidekker <hans@it.vu.nl>
- Dutch resource translation.
Alexandre Julliard
- Removed some uses of the non-standard ICOM_THIS macro.
- Get rid of the no longer used ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
  macro.
Mike McCormack <mike@codeweavers.com>
- Fix some -Wsigned-compare warnings.
- Don't read past end of table in PathFileExistsDefExtW.
- Use the ACP define in MB/WC conversion functions.
Jon Griffiths <jon_p_griffiths@yahoo.com>
- Implement SHSimulateDrop, MIME_GetExtensionA/W, StrCpyNXA/W,
  SHAnsiToAnsi, SHUnicodeToUnicode.
Francois Gouget <fgouget@free.fr>
- Don't export the shell32 SHAllocShared functions by name.
- Implement them by calling out their shlwapi equivalent (which had a
  much more complete implementation anyway).
- Fix the prototype of shlwapi's SHAllocShared().
- Don't crash if lpvData is NULL in SHAllocShared().
- Add a conformance test to shlwapi.
- Assorted spelling fixes.
Diego Petten= <dgp85@users.sourceforge.net>
- Add support for file:/// urls in PathCreateFromUrl.
- Add support in UrlIs() for URLIS_DIRECTORY and URLIS_FILEURL flags.
James Hawkins <truiken@gmail.com>
- Fix buffer overflow in PathSetDlgItemPathW that led to a trashed
  stack.

svn path=/trunk/; revision=10910
2004-09-19 10:46:48 +00:00
Gé van Geldorp
77b4d47ea6 Sync to Wine-20040914:
Mike McCormack <mike@codeweavers.com>
- Avoid non-standard types in rpcdcep.h.
Alexandre Julliard:
- Get rid of the no longer used ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
  macro.
- Removed some uses of the non-standard ICOM_THIS macro.
Francois Gouget <fgouget@free.fr>
- Fix and unify parsing of calling conventions.
- Hack handling of 'struct { } *NDR_SCONTEXT;' so we don't cause a parse
  error as this is a valid C construct.
- Generate type tests for rpcrt4.
- Remove PRPC_BINDING_VECTOR and PUUID_VECTOR, they don't exist on
  Windows.
- Fix the MIDL_STUB_MESSAGE, MIDL_SERVER_INFO and
  MIDL_STUBLESS_PROXY_INFO structs.
- Add NDR_ALLOC_ALL_NODES_CONTEXT, NDR_POINTER_QUEUE_STATE and
  CS_STUB_INFO.

svn path=/trunk/; revision=10909
2004-09-19 10:35:24 +00:00
Gé van Geldorp
414bb6e2c0 Sync to Wine-20040914:
Mike McCormack <mike@codeweavers.com>
- Use buffers rather than linked lists for input and out buffers.
- Stop reading input at a nul byte.
Evan Deaubl <wine@warpedview.com>
- Stop processing input stream when the outermost RTF group is closed.

svn path=/trunk/; revision=10908
2004-09-19 10:28:59 +00:00
Gé van Geldorp
95fadd5bb4 Sync to Wine-20040914:
Huw Davies <huw@codeweavers.com>
- Change dialogs to use MS Shell Dlg rather than Helv or MS Sans Serif.
David Kredba <kredba@ibot.cas.cz>
- Added Czech resources.

svn path=/trunk/; revision=10907
2004-09-19 10:24:48 +00:00
Gé van Geldorp
5693a82971 Sync to Wine-20040914:
Alexandre Julliard:
- Added recursive idl target to allow updating idl files private to a
  dll.
- Get rid of the non-standard ICOM_THIS macro.
- Get rid of the no longer used ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
  macro.
- Inline functions don't need WINE_UNUSED.
- Don't define BEGIN_INTERFACE in unknwn.h.
Mike McCormack <mike@codeweavers.com>
- Fix some warnings found with -Wsign-compare.
Francois Gouget <fgouget@free.fr>
- Move the PROPVARIANT declaration from objidl.idl to propidl.idl.
- Move related API declarations from individual C files to propidl.idl.
- Remove uneeded include of propidl.h in the propvariant.c test.
Robert Shearman <rob@codeweavers.com>
- Fix PropVariantCopy for VT_LPSTR and VT_LPWSTR.
- Test case VT_BSTR, VT_LPSTR and VT_LPWSTR.
- Fix PropVariantClear to reject invalid types.
- Don't crash on NULL pointers.
- Add test case.

svn path=/trunk/; revision=10906
2004-09-19 10:20:48 +00:00
Gé van Geldorp
07a136b6e9 Sync to Wine-20040914:
Hans Leidekker <hans@it.vu.nl>
- Dutch resource translation.

svn path=/trunk/; revision=10905
2004-09-19 10:08:06 +00:00
Gé van Geldorp
6a086fc044 Sync to Wine-20040914:
Hans Leidekker <hans@it.vu.nl>
- Dutch resource translation.
David Kredba <kredba@ibot.cas.cz>
- Added Czech resources.

svn path=/trunk/; revision=10904
2004-09-19 10:07:26 +00:00
Gé van Geldorp
6dfffdb082 Sync to Wine-20040913:
Huw Davies <huw@codeweavers.com>
- Change dialogs to use MS Shell Dlg rather than Helv or MS Sans Serif.
- Fix printer selection in PD_PRINTSETUP type dialogs.
Dmitry Timoshkov <dmitry@codeweavers.com>
- Use "MS Shell Dlg" in the Open File dialog templates as in Windows
- Resize child dialog when its controls are moved relatively stc32
  "magic" control.
- Y coordinate of the "magic" static control should be treated
  inclusively.
Jacek Caban <jack@itma.pwr.wroc.pl>
- Polish translation update.
Rein Klazes <rklazes@xs4all.nl>
- Fix a crash saving a file without file name extension and without
  extension filter.
Hans Leidekker <hans@it.vu.nl>
- Fix signed/unsigned comparison warnings.
Alexandre Julliard
- Removed some uses of the non-standard ICOM_THIS macro.
- Get rid of the no longer used ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
  macro.
- Get rid of the non-standard CONV_POINT and CONV_RECT functions.

svn path=/trunk/; revision=10903
2004-09-19 10:03:26 +00:00
Gé van Geldorp
a795a4185c Sync to Wine-20040913:
Robert Shearman <rob@codeweavers.com>
- Add 16x16 error, info and warning icons.
- Replace GetWindowLong by GetWindowLongPtr.
- Implement insert marks.
- Rearrange TOOLBAR_INFO.
- Clear data structure after dragging.
- WM_SETCURSOR does not need to be handled as it is not sent whilst
  the window is captured.
- Make uDragListMessage non-static so that we can re-use it
  elsewhere.
- Set class hbrBackground and style to the same as native.
- Set hbrBackground class property to same value as native.
- Use Unicode window functions instead of ANSI.
- Always redraw dialog on changing between pages.
- Set hbrBackground class property to same value as native.
- Remove no longer needed WM_ERASEBKGND handler.
- Use Unicode window functions instead of ANSI.
- Make customization list boxes into drag list boxes.
- Order available buttons in the same way as the native version.
- Obey TBCDRF_NOOFFSET for the button text.
- Make anchor highlighting behave more like native version.
- Don't recalculate toolbar in TOOLBAR_Unkwn460.
- Obey WM_SETREDRAW for the WM_ERASEBKGND message as well as
  WM_PAINT.
- TB_MARKITEM should redraw button.
- Send NM_LDOWN notification.
- NM_RDBLCLK only needs to send a NMHDR structure.
- On mouse notifications returning 0 DefWndProc should be called.
- Fix regression with IE's Menu Bar.
- Implement insert marks.
- Rearrange TOOLBAR_INFO.
- Fix anchor highlighting.
- Remove redundant test in TOOLBAR_DrawButton.
- Status update.
- Remove no longer valid comment.
- Minor coding style cleanups.
- Implement titles.
Hans Leidekker <hans@it.vu.nl>
- Fix signed/unsigned comparison warnings.
Ulrich Czekalla <ulrich@codeweavers.com>
- Forward focus to combobox, otherwise edit control won't get focus.
- The rectangle passed in DRAWITEMSTRUCT is slightly too large as
  compared with Windows.
- Clear tooltip when text is set to NULL.
- Repaint tooltip when item info changes.
Kevin Koltzau <kevin@plop.org>
- Fix bug with chained messages.
- Make SetWindowSubclass behave with SetWindowLong subclasses.
- Allow unlimited number of subclasses.
- Correct issue when SendMessage is called from within a subclass proc.
- Add regression test.
Huw Davies <huw@codeweavers.com>
- Change dialogs to use MS Shell Dlg rather than Helv or MS Sans Serif.
David Kredba <kredba@ibot.cas.cz>
- Added Czech resources.
Vitaliy Margolen <wine-patch@kievinfo.com>
- Send correct tracing notification messages.
Michael Stefaniuc <mstefani@redhat.de>
- Fix hotspot handling
- Remove unused flag from the InternalDrag struct.
Filip Navara <xnavara@volny.cz>
- Status update.
- Fix resizing of wizards.
- Fill the area next to watermark bitmap with window color and subclass
  exterior wizard pages to suppress drawing background.
- Correct displaying of wizard subtitle.
- Do not distinguish exterior wizard pages by their position, but
  instead expect that every page in wizard that doesn't have header is
  exterior.
- Move the property sheet resizing code from PROPSHEET_CreatePage to
  PROPSHEET_SetCurSel. It needs to be executed on every page change
  because the application can modify it during the notifications.
- Draw the Wizard97 header bitmaps before drawing the header strings.
- Center the header bitmap of the new Wizard97 correctly.
- Display the correct wizard title for any wizard type and do not
  change it for reqular property sheets.
- Fix loading wizard title and subtitle from resources.
Mike McCormack <mike@codeweavers.com>
- Calculate the correct size of dialog templates in the propsheet
  control.
Zach Gorman <zach@archetypeauction.com>
- OK button should be default in non-wizard property sheets.
- Propsheet pages need WS_EX_CONTROLPARENT style.
Jon Griffiths <jon_p_griffiths@yahoo.com>
- CreateDCA -> CreateDCW
Vitaliy Margolen <wine-patch@kievinfo.com>
- Make sure TreeView gets redrawn after calling EnsureVisible.

svn path=/trunk/; revision=10902
2004-09-19 09:50:06 +00:00
Gé van Geldorp
4319f1c249 Sync to Wine-20040914:
Hans Leidekker <hans@it.vu.nl>
- Fix signed/unsigned comparison warnings.

svn path=/trunk/; revision=10901
2004-09-19 09:18:36 +00:00
Gé van Geldorp
5d5247de81 Prepare for syncing to Wine-20040914
svn path=/trunk/; revision=10900
2004-09-19 09:11:12 +00:00
Gé van Geldorp
ac1e392aec Fix insertion of APCs where the target thread is attached to another process
svn path=/trunk/; revision=10899
2004-09-18 19:43:00 +00:00
Magnus Olsen
767ca4f4ac fix some compilings warings when you using some optimze settings in gcc compiler
env.c: In function `RtlDestroyEnvironment':
env.c:108: warning: dereferencing type-punned pointer will break strict-aliasing rules
env.c: In function `RtlSetEnvironmentVariable':
env.c:347: warning: dereferencing type-punned pointer will break strict-aliasing rules
env.c:393: warning: dereferencing type-punned pointer will break strict-aliasing rules

svn path=/trunk/; revision=10898
2004-09-18 09:31:53 +00:00
Magnus Olsen
c98cf6b15e fix some compilings warings
svn path=/trunk/; revision=10897
2004-09-18 07:25:53 +00:00
Magnus Olsen
e1dbb4b414 fix last compilings warings from this file.
svn path=/trunk/; revision=10896
2004-09-18 07:10:14 +00:00
Magnus Olsen
b743a5f954 fix last compilings warings from this file.
svn path=/trunk/; revision=10895
2004-09-17 18:37:37 +00:00
Magnus Olsen
5a3f530e45 fix last compilings warings from this file.
svn path=/trunk/; revision=10894
2004-09-17 18:19:52 +00:00
Magnus Olsen
9a099491c4 fix last compilings warings from this file.
svn path=/trunk/; revision=10893
2004-09-17 18:12:17 +00:00
Magnus Olsen
94bcb6fe25 fix last compilings warings from this file.
svn path=/trunk/; revision=10892
2004-09-17 17:54:46 +00:00
Magnus Olsen
a99b01ff0c fix some compings warings not all yet
svn path=/trunk/; revision=10891
2004-09-17 17:47:14 +00:00
Magnus Olsen
7a1f8074b5 fix some compings warings not all yet
svn path=/trunk/; revision=10890
2004-09-17 17:31:08 +00:00
Martin Fuchs
25547e2d8c Handle "." and ".." as special direcory names and move them at the very first beginning of directory listings
svn path=/trunk/; revision=10888
2004-09-17 16:56:46 +00:00
Art Yerkes
1c08e25544 Userland test for lan.sys
svn path=/trunk/; revision=10887
2004-09-17 16:07:41 +00:00
Art Yerkes
77700375d6 Interface for lan.sys
svn path=/trunk/; revision=10886
2004-09-17 15:51:52 +00:00
Art Yerkes
83fc2a9406 Removed arp.h until the arp part is finished.
svn path=/trunk/; revision=10885
2004-09-17 15:51:07 +00:00
Art Yerkes
885107a541 lan.sys is a simple driver providing access to ndis. This stuff is
ripped from tcpip.sys in preparation for a big breakup.

svn path=/trunk/; revision=10884
2004-09-17 15:50:16 +00:00
Gé van Geldorp
865a63875c Restore old DBG and KDBG defaults
svn path=/trunk/; revision=10883
2004-09-17 14:48:20 +00:00
Magnus Olsen
74d54596e4 fix small spelling fault
svn path=/trunk/; revision=10882
2004-09-17 09:25:10 +00:00
Gé van Geldorp
6c4737effa Get rid of .edf files
svn path=/trunk/; revision=10881
2004-09-16 21:31:50 +00:00
Magnus Olsen
01926b2642 my small change to config to add optimze build for a cpu
did break build for shm
it  did need small change in makefile for lpc  now it works agein

sorry all

svn path=/trunk/; revision=10880
2004-09-16 19:22:12 +00:00
Magnus Olsen
f9b6a686e0 my small change to config to add optimze build for a cpu
did break build for nptest
it  did need small change in makefile for lpc  now it works agein

sorry all

svn path=/trunk/; revision=10879
2004-09-16 19:20:57 +00:00
Magnus Olsen
475dcac67e my small change to config to add optimze build for a cpu
did break build for mstest
it  did need small change in makefile for lpc  now it works agein

sorry all

svn path=/trunk/; revision=10878
2004-09-16 19:19:34 +00:00
Magnus Olsen
1106a16497 my small change to config to add optimze build for a cpu
did break build for lpc
it  did need small change in makefile for lpc  now it works agein

sorry all

svn path=/trunk/; revision=10877
2004-09-16 18:47:20 +00:00
Magnus Olsen
e75c574ed1 In config add switch OARCH for optimze build for the cpu you want
for rule.mak
remove hardcoding of optimze build for cpu.
-march=i486 to -march=$(OARCH)

svn path=/trunk/; revision=10876
2004-09-16 17:35:33 +00:00
Gé van Geldorp
8523764fef Add forceifhung flag
svn path=/trunk/; revision=10875
2004-09-16 12:46:43 +00:00
Martin Fuchs
21784c13af add shell32.a
svn path=/trunk/; revision=10874
2004-09-16 12:02:49 +00:00
Eric Kohl
9f8dc789cf Implement NtQueryDefaultUILanguage, NtQueryInstallUILanguage and NtSetDefaultUILanguage.
svn path=/trunk/; revision=10873
2004-09-16 11:47:18 +00:00
Eric Kohl
1672f6069e Sort entries and remove duplicates.
svn path=/trunk/; revision=10872
2004-09-16 11:46:17 +00:00
Gé van Geldorp
d3275bbd8b Get rid of .edf files
svn path=/trunk/; revision=10871
2004-09-16 10:25:18 +00:00
Martin Fuchs
0f892545b8 PaintDesktop(): print system version on desktop background
svn path=/trunk/; revision=10870
2004-09-15 20:53:43 +00:00
Thomas Bluemel
e740fd1758 add function to the header file
svn path=/trunk/; revision=10869
2004-09-15 19:01:23 +00:00
Thomas Bluemel
1388215acb added a few usermode helper functions to work with sparse files
svn path=/trunk/; revision=10868
2004-09-15 18:57:02 +00:00
Thomas Bluemel
bc5e02eafd forgot to commit this file
svn path=/trunk/; revision=10867
2004-09-15 17:06:34 +00:00
Aleksey Bragin
380da77736 Make icon drawing mode corresponding to the current display settings (4,8,16,24,32 bit colors)
By Semyon "Tappak" Novikov.

svn path=/trunk/; revision=10866
2004-09-15 16:03:09 +00:00
Martin Fuchs
57dbd89701 fix RegSetValueEx() call
svn path=/trunk/; revision=10865
2004-09-15 14:25:46 +00:00
Thomas Bluemel
650bd77805 implemented EnableVolumeCompression()
svn path=/trunk/; revision=10864
2004-09-15 13:32:27 +00:00
Martin Fuchs
919419da33 remove direct version output from desktop; instead store the activation flag into the registry
svn path=/trunk/; revision=10863
2004-09-15 10:55:02 +00:00
Martin Fuchs
83a9ed824f add winefile
svn path=/trunk/; revision=10862
2004-09-15 10:16:05 +00:00
Martin Fuchs
384543f280 move winefile into subsys/system
svn path=/trunk/; revision=10861
2004-09-15 10:08:34 +00:00
Hartmut Birr
e3c3fe8e95 - Fixed the length calculation in WriteConsoleOutputAttribute.
svn path=/trunk/; revision=10860
2004-09-14 22:30:56 +00:00
Hartmut Birr
581f980ede - Execute the reset command previous the present test for each unit (master/slave).
svn path=/trunk/; revision=10859
2004-09-14 22:09:06 +00:00
Eric Kohl
5ad00f54e3 - Use Unicode strings instead of WCHAR strings.
- Use FsRtl functions to handle wildcards.

svn path=/trunk/; revision=10858
2004-09-14 21:46:39 +00:00
Gé van Geldorp
5a97f250e7 Check if attached when terminating thread. Suggested by tamlin.
svn path=/trunk/; revision=10857
2004-09-14 18:37:40 +00:00
Thomas Bluemel
7678fed2ef do something in wcsnlen() - but it should be (as strnlen() in this file) not implemented there, just so IsBadStringPtrW() works even though it lacks SEH protection at the moment
svn path=/trunk/; revision=10856
2004-09-14 14:01:25 +00:00
Eric Kohl
4a4dcb92cf Implement SeLockSubjectContext and SeUnlockSubjectContext.
svn path=/trunk/; revision=10855
2004-09-14 11:04:48 +00:00
Thomas Bluemel
2da90fee73 little fix
svn path=/trunk/; revision=10854
2004-09-14 01:30:02 +00:00
Art Yerkes
dff481387d Added WSAStartup.
svn path=/trunk/; revision=10852
2004-09-13 22:59:22 +00:00
Thomas Bluemel
c7f278a12e silence debug message
svn path=/trunk/; revision=10850
2004-09-13 21:37:32 +00:00
Thomas Bluemel
09afb31c28 implemented RtlIpv4AddressToStringA/W and made ntdll export them.
svn path=/trunk/; revision=10848
2004-09-13 20:25:26 +00:00
Gé van Geldorp
2161bebe79 Fix closing of LPC ports
svn path=/trunk/; revision=10847
2004-09-13 19:10:45 +00:00
Jens Collin
32bd722bb4 Fixed small mistake in string handling in my last commit.
svn path=/trunk/; revision=10846
2004-09-13 18:04:09 +00:00
Thomas Bluemel
89c8c187f3 adapted RtlInt64ToUnicodeString() from RtlIntegerToUnicodeString()
svn path=/trunk/; revision=10845
2004-09-13 17:27:23 +00:00
Gé van Geldorp
40016817aa Log error code when freetype fails to initialize
svn path=/trunk/; revision=10844
2004-09-13 17:17:17 +00:00
Thomas Bluemel
30c43d3c95 adapted RtlIntegerToUnicode() from RtlIntegerToChar()
svn path=/trunk/; revision=10843
2004-09-13 16:58:58 +00:00
Eric Kohl
7347219eb4 Rename HANDLE_REP to HANDLE_ENTRY.
svn path=/trunk/; revision=10842
2004-09-13 14:43:50 +00:00
Eric Kohl
b6a00f0a9a RegQueryInfoKeyW returns correct security descriptor size.
svn path=/trunk/; revision=10841
2004-09-13 14:42:37 +00:00
Eric Kohl
44e5201910 - Implement AddAccessAllowedAceEx, AddAccessDeniedAceEx and AddAuditAccessAceEx.
- Add GetCurrentHwProfileW stub.

svn path=/trunk/; revision=10840
2004-09-13 12:14:55 +00:00
Eric Kohl
00443884ee - Return a default security descriptor when someone wants to retrieve the key security.
- Disable debug messages.

svn path=/trunk/; revision=10839
2004-09-13 11:46:07 +00:00
Eric Kohl
f34a907c7a - Fix a typo in RegGetKeySecurity().
- Set missing error values.

svn path=/trunk/; revision=10838
2004-09-13 11:41:26 +00:00
Eric Kohl
14f00f3aeb Implement RegGetKeySecurity.
svn path=/trunk/; revision=10837
2004-09-13 08:51:40 +00:00
Royce Mitchell III
b1958574f7 fix -lstdc++
svn path=/trunk/; revision=10836
2004-09-13 03:14:35 +00:00
Art Yerkes
baa35b140c Fixed -lstdc++.
svn path=/trunk/; revision=10835
2004-09-13 03:12:11 +00:00
Gé van Geldorp
556c9464b6 Make the end a little bit more interesting
svn path=/trunk/; revision=10834
2004-09-12 21:58:01 +00:00
Thomas Bluemel
ba5fcd9590 revert the changes i accidently committed to HEAD
svn path=/trunk/; revision=10831
2004-09-12 19:47:49 +00:00
Gé van Geldorp
d77482d763 Fix external termination of thread while thread is waiting in GetMessage()
svn path=/trunk/; revision=10830
2004-09-12 19:29:23 +00:00
Thomas Bluemel
eed6b713aa rewrote the gdi handle table that behaves similar 2k/XP and works without global locks
svn path=/trunk/; revision=10829
2004-09-12 19:21:08 +00:00
Thomas Bluemel
04ccf93084 reduce debug output
svn path=/trunk/; revision=10828
2004-09-12 18:50:03 +00:00
Jens Collin
5a1180477c Merged with wine. (Fixed const string handling)
svn path=/trunk/; revision=10827
2004-09-12 11:21:30 +00:00
Filip Navara
b7cf80521b - Fix MS2PS rule to work on Windows.
- Include PSEH header in the MS2PS generated files.

svn path=/trunk/; revision=10826
2004-09-12 10:22:31 +00:00
Gé van Geldorp
5334c75998 Add french language to syssetup. Fixes part 2 of bug 401.
Patch by Herv� Poussineau <poussine@freesurf.fr>

svn path=/trunk/; revision=10825
2004-09-12 09:52:48 +00:00
Gé van Geldorp
44d3d874aa Use Wine's language matching algorithm when searching for resources.
Fixes bug 261.

svn path=/trunk/; revision=10823
2004-09-11 17:06:33 +00:00
Eric Kohl
14399d738b - Implement FsRtlLegalAnsiCharacterArray.
- Fix FsRtlDissectDbcs and FsRtlDoesDbcsContainWildCards prototypes.

svn path=/trunk/; revision=10822
2004-09-11 14:49:41 +00:00
Eric Kohl
44c503e1d4 Define LOCALE_SYEARMONTH, DATE_YEARMONTH, DATE_LTRREADING and DATE_RTLREADING.
svn path=/trunk/; revision=10821
2004-09-11 08:48:27 +00:00
Filip Navara
37734f772d - Define NOTHING.
svn path=/trunk/; revision=10820
2004-09-11 03:54:42 +00:00
Filip Navara
6244c47ebf - Define FILE_USE_FILE_POINTER_POSITION and FILE_WRITE_TO_END_OF_FILE.
- Correct prototype of PFAST_IO_UNLOCK_ALL_BY_KEY.

svn path=/trunk/; revision=10819
2004-09-11 03:52:18 +00:00
Filip Navara
4ed49e10fb - Add declaration of FsRtlDissectName.
svn path=/trunk/; revision=10818
2004-09-11 03:51:13 +00:00
Steven Edwards
3585f39f48 We need to import ntdll for DbgPrint
svn path=/trunk/; revision=10817
2004-09-10 23:30:45 +00:00
Steven Edwards
c8686d8770 Added Filips patch allowing for Wine testing output to go to DbgPrint as well as stdout.
svn path=/trunk/; revision=10816
2004-09-10 23:30:23 +00:00
Steven Edwards
bd82ff9f5e Moved interlocked function to rosrtl rather than exporting them from ntdll as windows does not export them from there.
svn path=/trunk/; revision=10815
2004-09-10 23:29:28 +00:00
Steven Edwards
d0cbef2f9f minor bug fix for building with other headers.
svn path=/trunk/; revision=10814
2004-09-10 23:22:22 +00:00
Filip Navara
9a4721af9c Fix the reset sequence in AtapiFindDevices to work correctly in VMware.
svn path=/trunk/; revision=10813
2004-09-10 23:17:45 +00:00
Gé van Geldorp
fb16e656c4 Send CTRL_CLOSE_EVENT to processes attached to a console when that console
is closed. Default handle the event by terminating the process.

svn path=/trunk/; revision=10812
2004-09-10 22:14:52 +00:00
Steven Edwards
5f870e152c removed tests until a proper fix is found.
Sorry about the breakage.

svn path=/trunk/; revision=10811
2004-09-10 15:49:54 +00:00
Steven Edwards
1c6eb466cb Removed the user32 test pending a understanding of how to make our system and Wines play together. It needed to be moved to the user32 module as per Caspers recommendation.
svn path=/trunk/; revision=10810
2004-09-09 23:49:49 +00:00
Steven Edwards
099b821285 These tests pass under ReactOS with curret CVS. Trying to figure out how to make Caspers regression system and Wines system to play nice.
svn path=/trunk/; revision=10809
2004-09-09 23:48:36 +00:00
Hartmut Birr
faaad49380 - Implemented PAE (physical address extension) mapping.
- Added the command line switches /pae and /noexecute for enabling the PAE mapping.

svn path=/trunk/; revision=10808
2004-09-09 20:42:33 +00:00
Hartmut Birr
176e26ac5d - Implemented ExfInterlockedCompareExchange64 and ExfpInterlockedExchange64
svn path=/trunk/; revision=10807
2004-09-09 18:51:17 +00:00
Eric Kohl
a3105b78bf - Use SeQuerySecurityDescriptorInfo() to retrieve an objects security descriptor.
- Disable debug messages.

svn path=/trunk/; revision=10806
2004-09-09 12:20:48 +00:00
Steven Edwards
9071fcfe51 Added user32 regression tests that we pass to the regtests system. Working on reviewing all of the Wine tests we pass and then figuring out a way to merge them in with our testing framework.
svn path=/trunk/; revision=10805
2004-09-09 04:18:30 +00:00
Eric Kohl
b451846efb Add support for setting a security descriptor for a file. Send an
IRP_MJ_SET_SECURITY to the filesystem driver and return
STATUS_SUCCESS if the filesystem driver does not support
this IRP.

svn path=/trunk/; revision=10804
2004-09-08 11:42:56 +00:00
Eric Kohl
539582375e - Fix a typo in NtSetSecurityObject().
svn path=/trunk/; revision=10803
2004-09-08 11:39:59 +00:00
Eric Kohl
1b398faac1 Implement SetFileSecurityA/W.
svn path=/trunk/; revision=10802
2004-09-08 11:36:24 +00:00
Steven Edwards
a19098ac83 Add some resources from Winehq CVS.
svn path=/trunk/; revision=10801
2004-09-07 23:09:54 +00:00
Gé van Geldorp
b1c0463316 Fix compile-time warning, spotted by Sylvain Petreolle <spetreolle@yahoo.fr>
svn path=/trunk/; revision=10800
2004-09-07 14:27:04 +00:00
Eric Kohl
144119a87d Return a security descriptor that grants full access to everyone if a filesystem
driver does not handle IRP_MJ_QUERY_SECURITY.

svn path=/trunk/; revision=10799
2004-09-07 11:51:13 +00:00
Eric Kohl
67e0d5082e IopInvalidDeviceRequest must return STATUS_INVALID_DEVICE_REQUEST.
svn path=/trunk/; revision=10798
2004-09-07 11:48:16 +00:00
Hartmut Birr
d4595781ee - Removed most of the calls to KeAttachProcess/KeDetachProcess.
- Used the kernel map to map page tables from other process's.
  In the future this should be replaced by a per process kernel map (hyperspace map).

svn path=/trunk/; revision=10797
2004-09-07 11:08:16 +00:00
Hartmut Birr
a3d5d79146 - Added the dependency checking for precompiled headers.
svn path=/trunk/; revision=10796
2004-09-07 08:20:06 +00:00
Hartmut Birr
ff08835fad - Replaced the target extension with '.h.gch' if the source extension was '.h'
svn path=/trunk/; revision=10795
2004-09-07 08:14:30 +00:00
Eric Kohl
78d5c83574 Implement GetFileSecurityA/W.
svn path=/trunk/; revision=10794
2004-09-06 22:12:25 +00:00
Thomas Bluemel
ccbc81e0fa 1. make use of precompiled headers everywhere
2. moved some unicode stubs out of the ansi stub file

svn path=/trunk/; revision=10793
2004-09-06 21:15:46 +00:00
Thomas Bluemel
a961785e1d don't copy LARGE_INTEGER structs to FILETIME structs with memcpy, it works but it's confusing as they're different structures that happen to be identical.
svn path=/trunk/; revision=10792
2004-09-06 15:56:25 +00:00
Steven Edwards
b1d9a8f8ff We are not using wpp at this time. We can always add a
more recent copy if we ever need it.

svn path=/trunk/; revision=10791
2004-09-06 15:04:16 +00:00
Eric Kohl
23e7f4df4f Implement ANSI group and item functions.
svn path=/trunk/; revision=10790
2004-09-06 12:00:40 +00:00
Hartmut Birr
873819daac - Check first for an existing directory object in NtCreateDirectoryObject.
svn path=/trunk/; revision=10789
2004-09-05 22:26:17 +00:00
Hartmut Birr
5fa2297ffd - Returned STATUS_OBJECT_NAME_NOT_FOUND if no directory was found in ObReferenceObjectByName.
svn path=/trunk/; revision=10788
2004-09-05 22:25:36 +00:00
Emanuele Aliberti
ad39a9fec5 .cvsignore updated.
svn path=/trunk/; revision=10787
2004-09-05 12:34:25 +00:00
Emanuele Aliberti
55003962a3 Version information added.
.cvsignore updated.

svn path=/trunk/; revision=10786
2004-09-05 12:27:36 +00:00
Art Yerkes
703e2aa5f9 Fixes:
Socket destruction is correct.  When IRPs are left to cancel, the socket
will remain until all pending irps complete.  The DestroySocket function
does this.  It is always safe to call DestroySocket at any time after the
FsContext member of the FileObject has been nulled.

Fixed UDP data delivery in.  UDP send still has a problem but it seems to
be in tcpip.sys more than likely.  I've sliced another 6000 lines out of
tcpip.sys that i will debug as a userspace library and link to tcpip.

Fixed poll reeval (old reported bug fix I hadn't committed yet).

Miscellaneously better sanity in a few rough spots.

svn path=/trunk/; revision=10785
2004-09-05 04:26:30 +00:00
Steven Edwards
2c8687b1a2 disable typedef for socklen_t for the moment.
svn path=/trunk/; revision=10784
2004-09-04 21:44:30 +00:00
Filip Navara
f0120ac1d7 Handle matching of "f0_*.*" expression to "f0_000" file name in FsRtlIsNameInExpression and add relevant regression test.
svn path=/trunk/; revision=10783
2004-09-04 15:02:00 +00:00
Magnus Olsen
67a29489d2 fix compings warings
not all waring have been fix

svn path=/trunk/; revision=10782
2004-09-04 10:51:20 +00:00
Steven Edwards
4074dc813b Added check for socklen_t
svn path=/trunk/; revision=10781
2004-09-03 21:34:48 +00:00
Magnus Olsen
d2e1a6010a fix compings warings
src/types.c: In function `pap_qstring':
src/types.c:99: warning: passing arg 2 of `adns__alloc_interim' as unsigned due to prototype
src/types.c:103: warning: passing arg 3 of `memcpy' as unsigned due to prototype
src/types.c: In function `pap_domain':
src/types.c:352: warning: passing arg 2 of `adns__alloc_interim' as unsigned due to prototype
src/types.c:356: warning: passing arg 3 of `memcpy' as unsigned due to prototype
src/types.c: In function `pap_findaddrs':
src/types.c:422: warning: passing arg 2 of `adns__vbuf_ensure' as signed due to prototype
src/types.c: In function `csp_hostaddr':
src/types.c:573: warning: passing arg 3 of `csp_qstring' as signed due to prototype
src/types.c: In function `icb_ptr':
src/types.c:705: warning: passing arg 3 of `memcmp' as unsigned due to prototype
src/types.c: In function `pa_ptr':
src/types.c:747: warning: passing arg 3 of `memcpy' as unsigned due to prototype
src/types.c:755: warning: passing arg 3 of `memcmp' as unsigned due to prototype
src/types.c:765: warning: passing arg 1 of `htonl' as unsigned due to prototype
src/types.c: In function `pap_mailbox822':
src/types.c:880: warning: passing arg 2 of `adns__alloc_interim' as unsigned due to prototype
src/types.c:881: warning: passing arg 3 of `memcpy' as unsigned due to prototype

svn path=/trunk/; revision=10780
2004-09-03 17:47:29 +00:00
Magnus Olsen
c203723e4f compings warings. and some did have wrong protypes.
0. fix warning: passing arg 1 of `send' as unsigned due to prototype
1. fix warning: passing arg 3 of `memcpy' as unsigned due to prototype
2. fix warning: passing arg 3 of `send' as signed due to prototype
3. fix warning: unused variable `bytes_written'
4. fix warning: dereferencing type-punned
    pointer will break strict-aliasing rules

5. fix warning: dereferencing type-punned
   pointer will break strict-aliasing rules

svn path=/trunk/; revision=10779
2004-09-03 16:49:18 +00:00
Filip Navara
d6740a2c10 - Disable debugging messages.
svn path=/trunk/; revision=10778
2004-09-03 04:44:45 +00:00
Filip Navara
87204d5906 - Revert the I/O port change from my previous patch. I didn't notice we're doing "+ 2" there.
svn path=/trunk/; revision=10777
2004-09-03 04:19:12 +00:00
Filip Navara
2d99115181 Issue soft reset command for identification and not ATAPI reset command which works only for packet based devices like CD-ROM drives and it's use on ATA devices is prohibited by the standard. If an ATAPI device is detected then and only then issue the ATAPI reset command. Also fix the addresses in AtapiClaimHwResources. This might fix bug #406.
svn path=/trunk/; revision=10776
2004-09-03 02:55:50 +00:00
Magnus Olsen
46256f9c81 fix lite more waring when it compiling
svn path=/trunk/; revision=10775
2004-09-03 00:15:04 +00:00
Magnus Olsen
88adadd6c6 fix follow warings msg
Warning: resolving  x by linking to
                DrvCopyContext@12
	DrvCreateContext@4
	DrvCreateLayerContext@8
	DrvDeleteContext@4
	DrvDescribeLayerPlane@20
	DrvDescribePixelFormat@16
	DrvGetLayerPaletteEntries@20
	DrvGetProcAddress@4
	DrvReleaseContext@4
	DrvRealizeLayerPalette@12
	DrvSetContext@12
	DrvSetLayerPaletteEntries@20
	DrvSetPixelFormat@8
	DrvShareLists@8
	DrvSwapBuffers@4
	DrvSwapLayerBuffers@8
	DrvValidateVersion@4

svn path=/trunk/; revision=10774
2004-09-02 23:51:07 +00:00
Magnus Olsen
a40f706f8e change ccflags = -O march=i386 to march=i486
All asm code are writen for i486. so why did we compile it for i386 when it does not work on i386.

svn path=/trunk/; revision=10773
2004-09-02 19:49:44 +00:00
Art Yerkes
198d9eefbc ADNS lib afer eol conversion. Greatlord pointed out that the DOS eols
checked in double when checked out in a certain way on windows.

svn path=/trunk/; revision=10772
2004-09-02 19:03:45 +00:00
Art Yerkes
b880d380cc Added python command app to oskit test.
svn path=/trunk/; revision=10771
2004-09-02 02:33:11 +00:00
Art Yerkes
05cf09a12d Activate dnsapi and adns.
svn path=/trunk/; revision=10770
2004-09-01 23:49:39 +00:00
Filip Navara
0f860fb51e - Disable debugging messages.
svn path=/trunk/; revision=10768
2004-09-01 20:41:07 +00:00
Art Yerkes
8e1426d027 Implement WSHGetWildcardAddress
svn path=/trunk/; revision=10766
2004-09-01 03:39:29 +00:00
Art Yerkes
500044ccc8 Corrected compile error due to different enum used in prototype.
svn path=/trunk/; revision=10765
2004-09-01 02:33:50 +00:00
Art Yerkes
f8b9ad2133 EXT2 should now be allowed in arcnames, etc.
svn path=/trunk/; revision=10764
2004-09-01 00:37:29 +00:00
Filip Navara
d9002d2afe - Allow shared read access to the debug.log file.
svn path=/trunk/; revision=10763
2004-09-01 00:15:08 +00:00
Filip Navara
03d477407b - Don't use ULONG for storing pointers.
svn path=/trunk/; revision=10762
2004-08-31 23:53:40 +00:00
Filip Navara
92b839476c - Don't use ULONG for storing pointers.
svn path=/trunk/; revision=10761
2004-08-31 23:48:02 +00:00
Gé van Geldorp
1d76d6dd93 - Return value of WM_GETTEXTLENGTH is in TCHARs, not in bytes, so there is
no need to convert between Ansi and Unicode (number of characters remains
  the same)
- Allocate Ansi buffer for WM_GETTEXT since MultiByteToWideChar can't handle
  overlapping buffers

svn path=/trunk/; revision=10760
2004-08-31 23:32:01 +00:00
Hartmut Birr
a9bae8fa65 - Removed the member OldProcess from the ETHREAD structure.
svn path=/trunk/; revision=10759
2004-08-31 20:17:18 +00:00
Hartmut Birr
2d0d1ee993 - Allow always shared read for a file which is opened for read only.
svn path=/trunk/; revision=10758
2004-08-31 20:07:06 +00:00
Hartmut Birr
4f6383edcb - Store always offsets on cluster boundaries in FCB->LastOffset.
svn path=/trunk/; revision=10757
2004-08-31 20:02:24 +00:00
Filip Navara
0ebfc36a78 - Fix converting of UTF8 sequences in IntMultiByteToWideCharUTF8.
svn path=/trunk/; revision=10755
2004-08-31 19:54:14 +00:00
Filip Navara
3db1c05c05 - Restoring of character size in VBEResetHw. Patch by Herv� Poussineau.
svn path=/trunk/; revision=10754
2004-08-31 18:28:50 +00:00
Filip Navara
9cc8b8a571 - Use FsRtl routines for wildcard handling.
svn path=/trunk/; revision=10753
2004-08-31 16:08:38 +00:00
Hartmut Birr
b50ad1e5ec - Fixed some wchar to char translations.
svn path=/trunk/; revision=10751
2004-08-31 14:40:50 +00:00
Filip Navara
d4aa975e56 Implement IntWideCharToMultiByteUTF8 since it's needed for saving Explorer configuration. (This change should be ported to the release branch.)
svn path=/trunk/; revision=10748
2004-08-31 07:01:43 +00:00
Filip Navara
67d68774ab - Revise order of PsInitializeThread to insert the thread to the lists after *all* the fields are initialized and while holding the PiThreadListLock lock acquired.
svn path=/trunk/; revision=10747
2004-08-31 06:08:38 +00:00
Steven Edwards
51bdcda011 Removed SeaShell from the tip.
Its in the attic if anyone needs to look at it.

svn path=/trunk/; revision=10746
2004-08-31 02:38:41 +00:00
Filip Navara
37aba5c9fc - Add NET_NIC.inf and syssetup.inf files to bootcd.
svn path=/trunk/; revision=10745
2004-08-30 20:33:36 +00:00
Filip Navara
e78e4ea757 - Close the registry hive file object in CmiInitNonVolatileRegistryHive.
svn path=/trunk/; revision=10744
2004-08-30 19:28:59 +00:00
Art Yerkes
9980d7cf9c Since system services are now provided by the client, we need the
callback struct first.

svn path=/trunk/; revision=10743
2004-08-30 18:12:30 +00:00
Eric Kohl
6277a93862 - Fixed some compiler warnings.
- Detect and report PCI-BIOS.

svn path=/trunk/; revision=10742
2004-08-30 10:53:38 +00:00
Martin Fuchs
3dd13e9ba0 fix tab order
svn path=/trunk/; revision=10741
2004-08-30 06:29:46 +00:00
Martin Fuchs
626e081cd1 Display "ReactOS" instead of "Microsoft Windows NT" for the ROS builded version
svn path=/trunk/; revision=10740
2004-08-30 06:28:54 +00:00
Emanuele Aliberti
d43c07d508 .cvsignore added.
svn path=/trunk/; revision=10739
2004-08-30 05:40:13 +00:00
James Tabor
2173fff654 Added Advpack to build process.
svn path=/trunk/; revision=10738
2004-08-30 04:59:40 +00:00
James Tabor
9f62d71a84 First implementation of advpack.dll.
svn path=/trunk/; revision=10737
2004-08-30 04:49:03 +00:00
Art Yerkes
5f189314eb Test app for oskittcp. Takes datagrams by UDP and send any replies to the
last host/port that contacted it.  I intend to use it to finish isolating
bugs in the main body of tcpip.sys and oskittcp interface.

svn path=/trunk/; revision=10736
2004-08-30 04:47:34 +00:00
Aleksey Bragin
e43bc9a08b Added WintrustAddActionID stub.
Added CRYPT_REGISTER_ACTIONID struct
Added CRYPT_TRUST_REG_ENTRY struct.z ` By Semyon "Tappak" Novikov.

svn path=/trunk/; revision=10735
2004-08-29 20:47:18 +00:00
Art Yerkes
aa3eb8fc7c Oskit can now be linked from userland. This is part one of my plan.
tcpip: provide malloc + free, sleep + wakeup functions
oskittcp: remove functions and headers that imply km and supply them from the
user.
tcp_usrreq: i was printing a possibly free mbuf here.

svn path=/trunk/; revision=10734
2004-08-29 20:04:42 +00:00
Art Yerkes
e78fa73912 This patch adds actually informative messages about what went wrong loading
the registry entries for NLS files, etc.

svn path=/trunk/; revision=10733
2004-08-29 18:29:48 +00:00
Thomas Bluemel
cb968187d0 silence debug messages
svn path=/trunk/; revision=10732
2004-08-29 15:50:53 +00:00
Thomas Bluemel
bc95cf8c84 implemented SetProcessPriorityBoost() and GetProcessPriorityBoost() (only the kernel32 part)
svn path=/trunk/; revision=10731
2004-08-29 14:46:02 +00:00
Thomas Bluemel
001b020926 mark GetSystemWindowsDirectory() as implemented as it does exactly the same as GetWindowsDirectory()
svn path=/trunk/; revision=10730
2004-08-29 12:12:34 +00:00
Filip Navara
a48983fc6d - Use ULONG_PTR instead of ULONG for integer arithmetics on pointers.
svn path=/trunk/; revision=10729
2004-08-28 22:22:39 +00:00
Filip Navara
28c8c91905 - Implement file sharing checks.
svn path=/trunk/; revision=10728
2004-08-28 22:19:12 +00:00
Filip Navara
3a31604b7d - Mapping zero-sized files is prohibited.
svn path=/trunk/; revision=10727
2004-08-28 22:18:24 +00:00
Filip Navara
f81fb98e23 - Simplify CreateFileMapping[AW].
- Fix return value of GlobalReAlloc and GlobalUnlock.

svn path=/trunk/; revision=10726
2004-08-28 22:16:27 +00:00
Filip Navara
b1f6932d44 - RtlReAllocateHeap shouldn't allocate memory if ptr == NULL.
svn path=/trunk/; revision=10725
2004-08-28 22:14:08 +00:00
Filip Navara
034e605634 - Change GlobalDiscard and LocalDiscard to macros.
svn path=/trunk/; revision=10724
2004-08-28 22:09:53 +00:00
Filip Navara
e97f806718 - Simplified version of _lcreat.
svn path=/trunk/; revision=10723
2004-08-28 22:08:54 +00:00
Filip Navara
9008b900fe - Fix handling of INVALID_HANDLE_VALUE case in FindNextFile.
svn path=/trunk/; revision=10722
2004-08-28 22:07:51 +00:00
Filip Navara
20ab7d6b27 - Remove invalid code from CreateToolhelp32Snapshot.
svn path=/trunk/; revision=10721
2004-08-28 22:06:02 +00:00
Gé van Geldorp
16034df8e6 Prevent crash when a thread is terminated while sending a cross-thread
message

svn path=/trunk/; revision=10719
2004-08-28 15:01:46 +00:00
Eric Kohl
5dda152b8d Use '$Windows NT$' signature because setupapi doesn't accept '$ReactOS$' yet.
svn path=/trunk/; revision=10718
2004-08-28 12:42:19 +00:00
Eric Kohl
0251ddf48c - Add preliminary wizard page title and subtitle string resources.
- Use setupapi functions to process syssetup.inf.

svn path=/trunk/; revision=10717
2004-08-28 11:08:50 +00:00
Gé van Geldorp
0d89489d43 Remove NASM_CMD definition since it is already correctly defined in the
top level rules.mak

svn path=/trunk/; revision=10716
2004-08-28 07:27:22 +00:00
James Tabor
1f00798a4b Cvs ingnore file added.
svn path=/trunk/; revision=10715
2004-08-27 23:10:13 +00:00
James Tabor
7f32d07583 Port of Msiexec from Wine.
svn path=/trunk/; revision=10714
2004-08-27 23:08:00 +00:00
James Tabor
e51ac8f476 Port Wine Msiexec to ROS.
svn path=/trunk/; revision=10713
2004-08-27 22:54:29 +00:00
Gé van Geldorp
1f0d87df05 Change nasm to nasmw (to match what's used in the reactos module)
svn path=/trunk/; revision=10712
2004-08-27 20:38:24 +00:00
Art Yerkes
ad74693225 This adds a rule which will trigger automatic conversion between msvc
style and pseh syntactically.  Name any file that should be converted
as foo_msvc.c and put foo.o in TARGET_OBJECTS and the file will be
preprocessed.

I asked some opinions about the naming and everyone seems ok with it.

svn path=/trunk/; revision=10711
2004-08-27 18:24:28 +00:00
Aleksey Bragin
fbd1a52cdf Wintrust lib stub (not imported from Wine). By Semyon "Tappak" Novikov.
svn path=/trunk/; revision=10709
2004-08-27 12:10:27 +00:00
Aleksey Bragin
d4c39be9ba Header file for wintrust lib. By Semyon "Tappak" Novikov.
svn path=/trunk/; revision=10708
2004-08-27 12:06:29 +00:00
Hartmut Birr
1a80e84bb2 - Establish the pde's for the callback stack if the stack was recycled from the list.
svn path=/trunk/; revision=10705
2004-08-27 10:25:46 +00:00
Hartmut Birr
16a24538c2 - Establish the pde for the thread structure within the process
before a switch to the process occurs.

svn path=/trunk/; revision=10704
2004-08-27 10:24:04 +00:00
Filip Navara
aa00673d45 - Complete rewrite of environment variable handling to get rid of memory leaks, heap corruption and spurious pointers.
- Remove some ancient Wine stuff that either wasn't used or didn't work.
- Fix realloc to not call HeapReAlloc for allocating new memory.

svn path=/trunk/; revision=10703
2004-08-27 03:08:23 +00:00
Gregor Anich
0f59361d11 Do not call HalReleaseDisplayOwnership when KDB is entered and screen debugging is not enabled. After an exception the screen will not turn blue but will freeze and be un-frozen when KDB is left (cont) I hope this can not damage old monitors if the card starts producing garbage signals when the driver is suspended - in VMWare it works well.
svn path=/trunk/; revision=10702
2004-08-27 00:14:01 +00:00
Magnus Olsen
2d8bef8799 fix
some waring msg  when it being compile

svn path=/trunk/; revision=10701
2004-08-26 21:08:06 +00:00
Gé van Geldorp
7f48b18098 Bump version number to 0.2.5
svn path=/trunk/; revision=10700
2004-08-26 21:05:42 +00:00
Robert Kopferl
509a299316 changed back to CVS, false br
svn path=/trunk/; revision=10698
2004-08-26 20:36:11 +00:00
Robert Kopferl
9e24ae99ae changed to RC1
svn path=/trunk/; revision=10697
2004-08-26 20:24:40 +00:00
Hartmut Birr
df72452da1 - Changed -Wno-strict-aliasing to -fno-strict-aliasing.
- Reduced optimisation from -O6 to -O3.

svn path=/trunk/; revision=10696
2004-08-26 19:55:20 +00:00
Magnus Olsen
5b63ba578e fix
some waring msg  when it being compile

svn path=/trunk/; revision=10695
2004-08-26 19:53:37 +00:00
Magnus Olsen
7eaa01f5e9 fix
some waring msg  when it being compile
type
redefinition of `LPCOLESTR16'
redefinition of `OLECHAR16'
redefinition of `LPOLESTR16'

svn path=/trunk/; revision=10693
2004-08-26 16:48:46 +00:00
Gregor Anich
87bdedbed2 Change stabs handling of KDB - does no longer allocate a block of memory for each stub entry, instead each .sym file is loaded completely into (non-paged) memory.
svn path=/trunk/; revision=10692
2004-08-26 16:04:50 +00:00
Hartmut Birr
66ff876aa8 - Implemented GetACP() and GetOEMCP().
svn path=/trunk/; revision=10691
2004-08-26 16:03:09 +00:00
Hartmut Birr
3b571ec48d - Added more nls files.
svn path=/trunk/; revision=10690
2004-08-26 16:01:26 +00:00
Magnus Olsen
41b885d24d fix
waring msg  when it being compile

svn path=/trunk/; revision=10689
2004-08-26 15:11:50 +00:00
Gé van Geldorp
9dc1445d4c If SendMessageTimeout() times out, GetLastError() should return 0
svn path=/trunk/; revision=10688
2004-08-26 12:29:37 +00:00
Magnus Olsen
e90a1b168c fix
ntoskrnl so it can be compile with optimze -O2 or higher

svn path=/trunk/; revision=10687
2004-08-26 11:58:33 +00:00
Gé van Geldorp
5b3ce7b494 Fix MSVCRT compile-time error due to duplicate symbol definition
svn path=/trunk/; revision=10686
2004-08-26 07:54:47 +00:00
Gregor Anich
e9706d1315 Change <GL\\gl.h> to "GL/gl.h" include.
svn path=/trunk/; revision=10685
2004-08-26 02:04:48 +00:00
Gregor Anich
94ec82db25 Fix GL/glu.h include...
svn path=/trunk/; revision=10684
2004-08-26 01:54:03 +00:00
Gregor Anich
94d6abb6d2 Fix GL/gl.h include for cross-compiling from linux.
svn path=/trunk/; revision=10683
2004-08-26 01:52:06 +00:00
Gé van Geldorp
93b57832ce Avoid arithmetic overflow
svn path=/trunk/; revision=10682
2004-08-25 22:31:01 +00:00
Casper Hornstrup
6fa3492ab7 2004-08-25 Casper S. Hornstrup <chorns@users.sourceforge.net>
* tools/cdmake/cdmake.c: Error out if extension is too long.

svn path=/trunk/; revision=10681
2004-08-25 20:47:22 +00:00
Gregor Anich
a8e8bea6fa Disable SSE - When Mesa with SSE enabled is ran in ReactOS/VMWare it crashes with SIGILL.
svn path=/trunk/; revision=10680
2004-08-25 20:20:09 +00:00
Gregor Anich
ca451d1442 Add OpenGL to the user libraries (glu32, mesa32, opengl32)
svn path=/trunk/; revision=10679
2004-08-25 15:58:12 +00:00
Filip Navara
1e7841a2e8 - Implement CcRepinBcb and CcGetFileObjectFromBcb.
- Partially implement CcUnpinRepinnedBcb, CcPinMappedData,
  CcPinRead, CcPreparePinWrite, CcInitializeCacheMap (Art Yerkes)
  and CcUninitializeCacheMap.
- Fix ReadCacheSegmentChain to handle correctly big request and
  check for MDL request memory overflow.
- Allow passing NULL BCB to CcSetFileSizes.
- Ensure that registry files are opened using lowercase file names.

svn path=/trunk/; revision=10678
2004-08-25 15:08:29 +00:00
Filip Navara
b8648c7bf4 - Do not depend on paths returned by FileNameInformation requests to be NULL terminated.
svn path=/trunk/; revision=10677
2004-08-25 15:04:19 +00:00
Filip Navara
e877ccfb63 - Fix masking out the write flags in IoCheckShareAccess and IoSetShareAccess.
svn path=/trunk/; revision=10676
2004-08-25 15:01:48 +00:00
Gregor Anich
cfc4008f6b Mesa version 6.1 import - Forgot the new Makefile/def file
svn path=/trunk/; revision=10675
2004-08-25 12:43:28 +00:00
Gregor Anich
d0f74a3f67 Mesa version 6.1 import.
svn path=/trunk/; revision=10674
2004-08-25 12:35:24 +00:00
Hartmut Birr
c56daa8b92 - Fixed the back-space-handling in ConioWriteConsole.
svn path=/trunk/; revision=10673
2004-08-25 10:37:14 +00:00
Filip Navara
2f4838080b Fix compilation with GCC 3.4.x
svn path=/trunk/; revision=10672
2004-08-24 18:27:53 +00:00
Filip Navara
0e272062f2 - Add definition of LOCALE_IDEFAULTMACCODEPAGE.
svn path=/trunk/; revision=10671
2004-08-24 17:36:15 +00:00
Filip Navara
489265e774 - Load also the last font file in the font directory.
svn path=/trunk/; revision=10670
2004-08-24 17:29:00 +00:00
Filip Navara
df072d8e25 - Always use non-antialiased font for consoles.
- Minor correction to multibyte character conversion for GUI consoles.
- Support for non-ENABLE_PROCESSED_OUTPUT and non-ENABLE_WRAP_AT_EOL_OUTPUT modes in ConioWriteConsole.
- Other minor fixes to get Wine Kernel32 Console test working.

svn path=/trunk/; revision=10669
2004-08-24 17:25:17 +00:00
Filip Navara
5e458f6f4e - Implementation of GetCPFileNameFromRegistry, GetNlsSectionName and IsValidCodePage.
- Partial implementation of MultiByteToWideChar and WideCharToMultiByte.
- Cleanup buffer allocation in some console functions.

svn path=/trunk/; revision=10668
2004-08-24 17:21:12 +00:00
Filip Navara
29fc781674 - Fix Get[System/Window]Directory[AW] for Buffer == NULL case.
- Fix return value of GetDriveType[AW].

svn path=/trunk/; revision=10667
2004-08-24 17:15:42 +00:00
Filip Navara
ccec5bfedd - Remove dereferencing non-referenced FileObject in error cases.
svn path=/trunk/; revision=10666
2004-08-24 17:08:18 +00:00
Filip Navara
aaa5aaec7e - Fix NtQueryDirectoryObject for empty directories.
svn path=/trunk/; revision=10665
2004-08-24 17:07:27 +00:00
Gé van Geldorp
1230297d02 Add shutdown registry entries
svn path=/trunk/; revision=10664
2004-08-24 09:43:33 +00:00
Hartmut Birr
b78c2817c4 - Check if the given address points into a valid section (in MmUnmapViewOfSection).
- Check if the section isn't deleted straight (in MmUnmapViewOfSection).

svn path=/trunk/; revision=10663
2004-08-23 22:29:43 +00:00
Gé van Geldorp
e208613f37 Implement ConvertSidToStringSidA/w
svn path=/trunk/; revision=10662
2004-08-23 21:16:26 +00:00
James Tabor
a380ffb184 Fixed import unicode names from remote processes.
svn path=/trunk/; revision=10661
2004-08-23 14:28:29 +00:00
Hartmut Birr
34e45ee1c2 - Enabled the declaration of DbgPrint because they is used in DPRINT and CHECKPOINT macros.
svn path=/trunk/; revision=10660
2004-08-22 21:06:36 +00:00
Hartmut Birr
868756af46 - Fixed the compilation as unicode.
- Search only for the file name directly if the name contains a known extension.
- Don't add an extension if the file name contains a known extension.

svn path=/trunk/; revision=10659
2004-08-22 20:55:15 +00:00
Filip Navara
4af77c2b3c - Implement ReadConsoleInputW, PeekConsoleInputW, ReadConsoleOutputW, WriteConsoleOutputW, SetConsoleIcon and GetConsoleWindow.
- Fix input peeking in CSRSS to not return fake events.

svn path=/trunk/; revision=10658
2004-08-22 20:52:28 +00:00
Filip Navara
cce0fb451f - More complete implementation of CharUpperA.
svn path=/trunk/; revision=10657
2004-08-22 20:51:57 +00:00
Filip Navara
270129d009 - Implement NtNotifyChangeDirectoryFile.
- Honour ApcRoutine and ApcContext parameters of NtQueryDirectoryFile.

svn path=/trunk/; revision=10656
2004-08-22 20:51:43 +00:00
Hartmut Birr
1b391b9333 - Fixed the compilation as unicode.
svn path=/trunk/; revision=10655
2004-08-22 20:47:20 +00:00
Hartmut Birr
2f1ea7feae - Added '-Werror' to the compiler options.
svn path=/trunk/; revision=10654
2004-08-22 20:37:05 +00:00
Hartmut Birr
df7a301805 - Fixed some 'dereferencing type-punned pointer will break strict-aliasing rules'
warnings on higher optimisation levels.

svn path=/trunk/; revision=10653
2004-08-22 20:32:32 +00:00
Hartmut Birr
adc7fbb548 - Fixed some pointer increments/decrements.
svn path=/trunk/; revision=10652
2004-08-22 20:13:44 +00:00
Mike Nordell
15ffb673df Safety added to trace output.
svn path=/trunk/; revision=10651
2004-08-22 18:49:11 +00:00
Art Yerkes
c24ef8433f AFD: Fixed handling of cancelling in flight requests when closing the socket.
Closing a socket doesn't crash but still hangs.  Needs work.
oskittcp: corrected problem with send data, trying out slightly different
scheme of dealing with closed socket.
tcpip: added support for SEL_FIN in socket state callback and corrected
support for returning error in TCPReceiveData.

svn path=/trunk/; revision=10650
2004-08-22 18:42:42 +00:00
Art Yerkes
36d2e136c7 Fixed missing unlock in write.
svn path=/trunk/; revision=10649
2004-08-22 02:15:57 +00:00
Mike Nordell
2496ef39ee Fix misplaced STDCALL
svn path=/trunk/; revision=10648
2004-08-21 21:20:08 +00:00
Mike Nordell
c373c9ebb1 Make inline assembler compilable using VC
svn path=/trunk/; revision=10647
2004-08-21 21:14:59 +00:00
Mike Nordell
96b46798d8 Wrong path in comment.
svn path=/trunk/; revision=10646
2004-08-21 21:13:45 +00:00
Mike Nordell
0d5eda7a62 Fix misplaced STDCALL
svn path=/trunk/; revision=10645
2004-08-21 21:09:39 +00:00
Mike Nordell
7095fe07cd Fix misplaced STDCALL
svn path=/trunk/; revision=10644
2004-08-21 20:55:41 +00:00
Mike Nordell
b7e51fe08f Fix arithmetics on void.
svn path=/trunk/; revision=10643
2004-08-21 20:47:28 +00:00
Mike Nordell
cb6798f145 Fix arithmetics on void.
svn path=/trunk/; revision=10642
2004-08-21 20:42:10 +00:00
Mike Nordell
03e25a0998 Fix misplaced STDCALL calling convention specifiers.
svn path=/trunk/; revision=10641
2004-08-21 20:40:27 +00:00
Mike Nordell
1c43621083 Fix import/export linkage mismatches.
svn path=/trunk/; revision=10640
2004-08-21 20:18:07 +00:00
Mike Nordell
f04772cf3e Make code portable to compilers with SEH.
svn path=/trunk/; revision=10639
2004-08-21 20:05:35 +00:00
Art Yerkes
8da48834d5 Fixed eols for pp directives, honor original eols.
svn path=/trunk/; revision=10638
2004-08-21 19:59:52 +00:00
Gé van Geldorp
7f5aece68d Implement EnumDesktopsA/W and EnumWindowStationsA, rewrite of
EnumWindowStationsW

svn path=/trunk/; revision=10637
2004-08-21 19:50:39 +00:00
Art Yerkes
a48867230f Respect line breaks in the original code, making it easier to compare.
svn path=/trunk/; revision=10636
2004-08-21 19:49:22 +00:00
Hartmut Birr
9995491445 - Made the partition list movable if it is necessary.
svn path=/trunk/; revision=10635
2004-08-21 19:30:12 +00:00
Hartmut Birr
0ebfb773cb - Check for a valid layout buffer entry in xHalIoAssignDriveLetters.
svn path=/trunk/; revision=10634
2004-08-21 19:13:22 +00:00
Mike Nordell
fca2504ae6 Linkage specification correctly placed.
svn path=/trunk/; revision=10633
2004-08-21 19:04:47 +00:00
Mike Nordell
dc4796ce53 Make the code legal C (89)
svn path=/trunk/; revision=10632
2004-08-21 19:03:04 +00:00
Mike Nordell
e5c5aaadd2 fix import/export linkage for declaration of MmSystemRangeStart
svn path=/trunk/; revision=10631
2004-08-21 18:45:01 +00:00
Mike Nordell
0804fde9a5 fix misplaced STDCALL
svn path=/trunk/; revision=10630
2004-08-21 15:34:32 +00:00
Mike Nordell
818dcf2277 stop wasting power at shutdown
svn path=/trunk/; revision=10629
2004-08-21 15:29:08 +00:00
Mike Nordell
0f057d10d9 make code C89-compilable again
svn path=/trunk/; revision=10628
2004-08-21 13:21:44 +00:00
Mike Nordell
7ab9404fc9 fix definition of EVENT_TRACE_HEADER
svn path=/trunk/; revision=10627
2004-08-21 13:20:25 +00:00
Mike Nordell
65c3f8c5a6 fix placement of STDCALL for function declarations
svn path=/trunk/; revision=10626
2004-08-21 12:34:58 +00:00
Mike Nordell
51b6704c3b fix placement of STDCALL for function declarations
svn path=/trunk/; revision=10625
2004-08-21 12:12:35 +00:00
Filip Navara
3d98b86904 - Maintain higher internal precision during font rendering.
- Honour bitmap->bitmap_left while rendering.

svn path=/trunk/; revision=10624
2004-08-21 02:22:45 +00:00
Filip Navara
d76b781f65 Minor optimalization to handle allocation algorithm.
svn path=/trunk/; revision=10623
2004-08-20 23:46:21 +00:00
Gé van Geldorp
261286187f Implement NtUserBuildNamesList()
svn path=/trunk/; revision=10622
2004-08-20 22:38:49 +00:00
Gé van Geldorp
847119b3cd Use MmCopyFrom/ToCaller to transfer data in NtQueryDirectoryObject, also
lock list when traversing it

svn path=/trunk/; revision=10621
2004-08-20 22:38:10 +00:00
Filip Navara
b71178e84e - NtQuerySection should check for SECTION_QUERY access right and not SECTION_MAP_READ.
- Fix prototype of NtExtendSection.

svn path=/trunk/; revision=10620
2004-08-20 21:23:49 +00:00
Art Yerkes
5eef6d16e3 Removed ASSERT_KM macro. It's not used any longer.
svn path=/trunk/; revision=10619
2004-08-20 16:26:10 +00:00
Filip Navara
3f9427ed02 Fix few compiler/linker warnings.
svn path=/trunk/; revision=10618
2004-08-20 15:19:38 +00:00
Eric Kohl
26981b72cf - Provide better PCI device descriptions.
- Use public macros to analyze the PCI configuration space.

svn path=/trunk/; revision=10617
2004-08-20 13:33:51 +00:00
Eric Kohl
a5e0bea967 Define more PCI device subclasses.
svn path=/trunk/; revision=10616
2004-08-20 13:29:14 +00:00
Magnus Olsen
ee97250d94 fix
gcc 3.3.x stop comiling and give a error msg
network/icmp.c: In function `SendICMPComplete':
network/icmp.c:28: warning: unused variable `IPPacket'
make[1]: *** [network/icmp.o] Error 1
make: *** [tcpip] Error 2

svn path=/trunk/; revision=10615
2004-08-20 09:44:20 +00:00
Gé van Geldorp
d204e60565 Don't export all make variables by default
Based on work by Hartmut Birr

svn path=/trunk/; revision=10614
2004-08-20 07:02:09 +00:00
Gé van Geldorp
e8936ed5d6 Older binutils don't like the -noname attribute
on forwarded exports

svn path=/trunk/; revision=10613
2004-08-20 06:58:58 +00:00
Filip Navara
57bca780f3 Fix compiler warnings.
svn path=/trunk/; revision=10612
2004-08-20 00:57:55 +00:00
Filip Navara
ed43fa6083 Remove definitions already present in W32API.
svn path=/trunk/; revision=10611
2004-08-20 00:57:42 +00:00
Filip Navara
0d5febe573 Fix syntax errors in .edf file.
svn path=/trunk/; revision=10610
2004-08-20 00:57:41 +00:00
Casper Hornstrup
28a9052b11 2004-08-20 Casper S. Hornstrup <chorns@users.sourceforge.net>
* Makefile: Fix ntoskrnl dependency problem.

svn path=/trunk/; revision=10609
2004-08-19 23:11:41 +00:00
Hartmut Birr
147f2a9166 - Changed the sequence of some memory initialisation functions.
svn path=/trunk/; revision=10608
2004-08-19 22:17:47 +00:00
Hartmut Birr
a9797a23d6 - Rewrote MmInitializePageList. It isn't necessary to setup the pde's
for the largest memory configuration at boot time.
- Made the parts of the page directory map inaccessible from user mode
  which are setup at boot time.

svn path=/trunk/; revision=10607
2004-08-19 22:14:31 +00:00
Hartmut Birr
9112fef190 - Fixed a crash which occurs on thread switching if the pde's for the new
process structure are not established within the address space of the old thread.

svn path=/trunk/; revision=10606
2004-08-19 21:56:17 +00:00
Art Yerkes
67781c7635 More notes on oskit. braindumping.
svn path=/trunk/; revision=10605
2004-08-19 21:53:43 +00:00
Hartmut Birr
020f18ca0b - Set the pde's for the kernel stack at thread creation time and not at any task switch.
svn path=/trunk/; revision=10604
2004-08-19 21:51:06 +00:00
Hartmut Birr
30188f2c6c - Replaced MmUpdateStackPageDir by MmUpdatePageDir which can establish
the pde's of a process for any address range within the kernel address range.

svn path=/trunk/; revision=10603
2004-08-19 21:47:51 +00:00
Eric Kohl
7314aec7ff Define PCI subclasses and macros.
svn path=/trunk/; revision=10602
2004-08-19 21:42:44 +00:00
Art Yerkes
9d7db6ee1c oskittcp: new import. less diff output versus pure sources.
no deleted code this time around.  all properly ifdef'd
more use of bsd style adapter structs and adapter queries with provided
support by tcpip.sys.
correct prototypes
some diff output is reformatting

tcpip: some bug fixes, -Wall -Werror on, all prototypes in
remove the need for MaxLLHeaderSize anywhere except lan.c
unify meaning of Header and Data members of IP_PACKET
unify PCHAR types in routines.c
move one more address into the struct, eliminating management and extra
poll alloc in NCE
eliminate wrong use of PIP_INTERFACE as NTE pointer in dispatch functions
other fixes

svn path=/trunk/; revision=10601
2004-08-19 21:39:00 +00:00
Filip Navara
4376799eac - Move out LPCGUID from scsiwmi.h to basetyps.h where it belongs.
- Fix initguid.h to eliminate warnings when compiling C programs.

svn path=/trunk/; revision=10600
2004-08-19 18:16:39 +00:00
Filip Navara
d2f7f5c128 Remove some unused headers or parts of headers.
svn path=/trunk/; revision=10599
2004-08-19 18:12:29 +00:00
Filip Navara
a7693505df Fix syntax error in .def file.
svn path=/trunk/; revision=10598
2004-08-19 18:08:47 +00:00
Casper Hornstrup
4989d6438f 2004-08-19 Casper S. Hornstrup <chorns@users.sourceforge.net>
* regtests/shared/regtests.c: Mark test name with |.

svn path=/trunk/; revision=10597
2004-08-19 00:48:18 +00:00
Casper Hornstrup
ab33683488 2004-08-19 Casper S. Hornstrup <chorns@users.sourceforge.net>
* Makefile: Depend on roscfg.h.

svn path=/trunk/; revision=10596
2004-08-19 00:39:59 +00:00
Casper Hornstrup
d291ec0ebe 2004-08-19 Casper S. Hornstrup <chorns@users.sourceforge.net>
* tools/regtests2xml: New directory.
	* tools/regtests2xml/.cvsignore: New file.
	* tools/regtests2xml/Makefile: Ditto.
	* tools/regtests2xml/regtests2xml.c: Ditto.

svn path=/trunk/; revision=10595
2004-08-19 00:35:15 +00:00
Eric Kohl
87c899380d Report the correct resource flags.
svn path=/trunk/; revision=10594
2004-08-18 22:11:15 +00:00
Eric Kohl
9acd2c65c2 Update resource-related defines.
svn path=/trunk/; revision=10593
2004-08-18 22:06:55 +00:00
Filip Navara
2004f45dcd Replace 0x7ffeffff by MmHighestUserAddress.
svn path=/trunk/; revision=10592
2004-08-18 20:41:03 +00:00
Gé van Geldorp
2db705b1c2 Update to FreeType 2.1.9
svn path=/trunk/; revision=10591
2004-08-18 20:25:11 +00:00
Filip Navara
96bdafef41 - Copy over device object SectorSize and AlignmentRequirement in IoAttachDeviceToDeviceStack.
svn path=/trunk/; revision=10590
2004-08-18 15:09:02 +00:00
Eric Kohl
c9f2fda0b2 Don't retrieve a resource list when a device gets started, use the device nodes resource list.
svn path=/trunk/; revision=10589
2004-08-18 08:33:25 +00:00
Eric Kohl
b299113f7b Fix IRP_MN_QUERY_RESOURCES and implement IRP_MN_QUERY_RESOURCE_REQUIREMENTS.
svn path=/trunk/; revision=10588
2004-08-18 08:25:58 +00:00
Filip Navara
543091ce46 - Fix FsRtlDoesNameContainWildCards loop to take into account the first and lst letter of the expression.
- Dumb implementation of FsRtlIsNameInExpression.

svn path=/trunk/; revision=10587
2004-08-18 02:32:00 +00:00
Filip Navara
f43bd6e656 - Move SectionPageProtection checks from helper routines to NtCreateSection.
- Remove dependency on ReactOS specific FO_FCB_IS_VALID magic and don't access FCB directly, use NtQueryInformationFile instead.
- Fix deleting of section if an early failure during section creation happens and not all structures are initialized yet.

svn path=/trunk/; revision=10586
2004-08-18 02:29:37 +00:00
Filip Navara
04e70454de - Don't increase Irp->AssociatedIrp.IrpCount in IoMakeAssociatedIrp. The caller is responsible for doing it.
- Don't unlock MDLs of associated Irps.

svn path=/trunk/; revision=10585
2004-08-18 02:24:02 +00:00
Filip Navara
5ce987d59f - Set StackPtr->Parameters.Read.Length in IoPageRead.
- Set StackPtr->Parameters.Write.Length in Io[Synchronous]PageWrite.

svn path=/trunk/; revision=10584
2004-08-18 02:21:53 +00:00
Filip Navara
b7ca7786e4 Print in the debug traces if a partition is recognized or not.
svn path=/trunk/; revision=10583
2004-08-18 02:20:00 +00:00
Filip Navara
13fc2fb445 Link to our SDK libraries instead of using the W32API ones.
svn path=/trunk/; revision=10582
2004-08-18 02:16:00 +00:00
Filip Navara
bf2c0b0d8b Fix declaration of FILE_DISPOSITION_INFORMATION.
svn path=/trunk/; revision=10581
2004-08-18 02:13:27 +00:00
Thomas Bluemel
0e686e8470 remove debug output
svn path=/trunk/; revision=10580
2004-08-17 21:52:17 +00:00
Thomas Bluemel
90e663c1bf load the wallpaper on startup and set it
svn path=/trunk/; revision=10579
2004-08-17 21:49:51 +00:00
Thomas Bluemel
c6a9402e60 added very basic support for desktop wallpapers
svn path=/trunk/; revision=10578
2004-08-17 21:47:36 +00:00
Thomas Bluemel
2ac9e121e9 use WM_NOTIFY messages to communicate with the desktop window thread as they can't be sent from processes other than csrss
svn path=/trunk/; revision=10577
2004-08-17 14:57:52 +00:00
Casper Hornstrup
a7f4ff2664 2004-08-17 Casper S. Hornstrup <chorns@users.sourceforge.net>
* tools/depend.mk: Don't generate dependencies for implib target.

svn path=/trunk/; revision=10576
2004-08-17 13:53:05 +00:00
Casper Hornstrup
f55fbceea5 2004-08-16 Casper S. Hornstrup <chorns@users.sourceforge.net>
* Makefile: Correct dependencies.
	* tools/Makefile: Silence some annoying messages.
	* tools/config.mk: Ditto.
	* rules.mak (MINIMALDEPENDENCIES): New option; minimal dependencies
	(yes/no). If yes, then components do not depend on all import libraries.
	If no, then they do. Defaults to yes.

svn path=/trunk/; revision=10575
2004-08-16 22:31:05 +00:00
Gé van Geldorp
b236b6a240 Avoid collision with MinGW wctype_t
svn path=/trunk/; revision=10574
2004-08-16 20:02:23 +00:00
Martin Fuchs
7566350740 display version information in about dialog and on the desktop
svn path=/trunk/; revision=10572
2004-08-16 18:49:58 +00:00
Casper Hornstrup
5b9f8a442b 2004-08-16 Casper S. Hornstrup <chorns@users.sourceforge.net>
* lib/user32/include/debug.h (ASSERT): Don't call KeBugCheck.
	* lib/user32/misc/dllmain.c (KeBugCheck): Remove declaration.

svn path=/trunk/; revision=10571
2004-08-16 17:28:46 +00:00
Eric Kohl
3a5f687b18 Implement:
- IRP_MN_READ_CONFIG
  - IRP_MN_WRITE_CONFIG
  - IRP_MN_QUERY_RESOURCES
  - IRP_MN_QUREY_DEVICE_TEXT

Implement (disabled):
  - IRP_MN_QUERY_ID.BusQueryInstanceID

svn path=/trunk/; revision=10570
2004-08-16 09:13:00 +00:00
Casper Hornstrup
ad002d5bd9 2004-08-16 Casper S. Hornstrup <chorns@users.sourceforge.net>
* drivers/net/tcpip/include/.cvsignore: New file.
	* drivers/net/tcpip/include/precomp.h: New file.
	* drivers/net/tcpip/Makefile (TARGET_PCH): Set to include/precomp.h.
	* drivers/net/tcpip/tests/Makefile (TARGET_PCH): Reset.
	* drivers/net/tcpip/*/*.c: Use pre-compiled header.

svn path=/trunk/; revision=10569
2004-08-15 23:41:26 +00:00
Casper Hornstrup
455ea22b67 2004-08-16 Casper S. Hornstrup <chorns@users.sourceforge.net>
* drivers/net/ndis/include/.cvsignore: New file.
	* drivers/net/ndis/.cvsignore: Add *.d.
	* drivers/net/ndis/Makefile (TARGET_PCH): Set to include/ndissys.h.
	* drivers/net/ndis/*.c: Use pre-compiled header.

svn path=/trunk/; revision=10568
2004-08-15 23:12:33 +00:00
Casper Hornstrup
7ffd28c060 2004-08-16 Casper S. Hornstrup <chorns@users.sourceforge.net>
* drivers/net/afd/include/.cvsignore: New file.
	* drivers/net/afd/include/tdiconn.h: Don't include <afd.h>.
	* drivers/net/afd/.cvsignore: Add *.d.
	* drivers/net/afd/makefile (TARGET_PCH): Set to include/afd.h.

svn path=/trunk/; revision=10567
2004-08-15 22:51:57 +00:00
Casper Hornstrup
c78a7ee5ec 2004-08-16 Casper S. Hornstrup <chorns@users.sourceforge.net>
* subsys/system/taskmgr/.cvsignore: Add *.gch.
	* subsys/system/taskmgr/precomp.h: New file.
	* subsys/system/taskmgr/makefile (TARGET_PCH): Set to precomp.h.
	* subsys/system/taskmgr/*.c: Use pre-compiled header.

svn path=/trunk/; revision=10566
2004-08-15 22:40:34 +00:00
Casper Hornstrup
ed1baab85f 2004-08-16 Casper S. Hornstrup <chorns@users.sourceforge.net>
* subsys/system/usetup/.cvsignore: Add *.gch.
	* subsys/system/usetup/precomp.h: New file.
	* subsys/system/usetup/makefile (TARGET_PCH): Set to precomp.h.
	* subsys/system/usetup/*.c: Use pre-compiled header.

svn path=/trunk/; revision=10565
2004-08-15 22:29:50 +00:00
Casper Hornstrup
74ad04945e 2004-08-16 Casper S. Hornstrup <chorns@users.sourceforge.net>
* subsys/system/cmd/.cvsignore: Add *.gch.
	* subsys/system/cmd/precomp.h: New file.
	* subsys/system/cmd/Makefile (TARGET_PCH): Set to precomp.h.
	* subsys/system/cmd/*.c: Use pre-compiled header.

svn path=/trunk/; revision=10564
2004-08-15 22:15:23 +00:00
Casper Hornstrup
0ded881f1f Simplify precomp.h.
svn path=/trunk/; revision=10563
2004-08-15 21:39:59 +00:00
Casper Hornstrup
e14ef8a1c4 2004-08-15 Casper S. Hornstrup <chorns@users.sourceforge.net>
* lib/user32/include/.cvsignore: New file.
	* lib/user32/Makefile (TARGET_PCH): Set to include/user32.h.
	* lib/user32/*/*.c: Use pre-compiled header.
	* include/wine/debug.h (FIXME): Override previous declaration is needed.

svn path=/trunk/; revision=10562
2004-08-15 21:36:30 +00:00
Gé van Geldorp
a6fc248d31 Handle shell link files contained in double quotes
svn path=/trunk/; revision=10561
2004-08-15 21:01:14 +00:00
Thomas Bluemel
fdf4e54dc9 added missing file
svn path=/trunk/; revision=10560
2004-08-15 20:24:43 +00:00
Casper Hornstrup
231eeedea1 2004-08-15 Casper S. Hornstrup <chorns@users.sourceforge.net>
* lib/userenv/.cvsignore: Add *.gch.
	* lib/userenv/makefile (TARGET_PCH): Set to precomp.h.
	* lib/userenv/*.c: Use pre-compiled header.

svn path=/trunk/; revision=10559
2004-08-15 19:02:40 +00:00
Casper Hornstrup
5d7f1d7e68 2004-08-15 Casper S. Hornstrup <chorns@users.sourceforge.net>
* lib/ws2_32/include/.cvsignore: New file.
	* lib/ws2_32/makefile (TARGET_PCH): Set to include/ws2_32.h.
	* lib/ws2_32/include/[catalog.h, handle.h]: Don't include ws2_32.h.

svn path=/trunk/; revision=10558
2004-08-15 18:53:07 +00:00
Casper Hornstrup
07ceadec8e 2004-08-15 Casper S. Hornstrup <chorns@users.sourceforge.net>
* lib/gdi32/include/.cvsignore: New file.
	* lib/gdi32/.cvsignore: Remove *.gch.

svn path=/trunk/; revision=10557
2004-08-15 18:42:57 +00:00
Casper Hornstrup
a3a8b50447 2004-08-15 Casper S. Hornstrup <chorns@users.sourceforge.net>
* lib/gdi32/.cvsignore: Ignore *.gch.
	* lib/gdi32/include/precomp.h: New file.
	* lib/gdi32/Makefile (TARGET_PCH): Set to include/precomp.h.
	* lib/gdi32/*/*.c: Use pre-compiled header.

svn path=/trunk/; revision=10556
2004-08-15 18:40:07 +00:00
Casper Hornstrup
84385f6e26 2004-08-15 Casper S. Hornstrup <chorns@users.sourceforge.net>
* lib/msvcrt/.cvsignore: Ignore *.gch.
	* lib/msvcrt/precomp.h: New file.
	* lib/msvcrt/Makefile (TARGET_PCH): Set to precomp.h.
	* lib/msvcrt/*/*.c: Use pre-compiled header.

svn path=/trunk/; revision=10555
2004-08-15 18:16:39 +00:00
Casper Hornstrup
aa7fdaac83 2004-08-15 Casper S. Hornstrup <chorns@users.sourceforge.net>
* lib/crtdll/.cvsignore: Ignore *.gch.
	* lib/crtdll/precomp.h: New file.
	* lib/crtdll/Makefile (TARGET_PCH): Set to precomp.h.
	* lib/crtdll/*/*.c: Use pre-compiled header.

svn path=/trunk/; revision=10554
2004-08-15 17:34:28 +00:00
Casper Hornstrup
03664157d6 2004-08-15 Casper S. Hornstrup <chorns@users.sourceforge.net>
* lib/advapi32/.cvsignore: Ignore *.gch.
	* lib/advapi32/advapi32.h: New file.
	* lib/advapi32/*/*.c: Use pre-compiled header.

svn path=/trunk/; revision=10553
2004-08-15 17:03:15 +00:00
Art Yerkes
0d69d982e0 More info about naming.
svn path=/trunk/; revision=10552
2004-08-15 16:52:13 +00:00
Gero Kuehn
e16725fbe4 improved network control panel
more registry keys for the network configuration
preliminary TCPIP property sheet

svn path=/trunk/; revision=10551
2004-08-15 16:50:30 +00:00
Casper Hornstrup
1bf0775833 2004-08-15 Casper S. Hornstrup <chorns@users.sourceforge.net>
* ntoskrnl/include/.cvsignore: New file.
	* ntoskrnl/include/ntoskrnl.h: Ditto.
	* ntoskrnl/*/*.c: Use pre-compiled header.
	* ntoskrnl/Makefile: Support pre-compiled header.
	* tools/helper.mk: .pch files are now .gch files.

svn path=/trunk/; revision=10550
2004-08-15 16:39:12 +00:00
Filip Navara
41ca6025bd - Revert to old dependency system.
svn path=/trunk/; revision=10549
2004-08-15 01:44:31 +00:00
Filip Navara
0a2918d47b - Revert to old dependency system.
svn path=/trunk/; revision=10548
2004-08-15 01:23:19 +00:00
Filip Navara
f530a33909 - Minor correction to shut up compiler warning.
svn path=/trunk/; revision=10547
2004-08-15 00:51:51 +00:00
Filip Navara
e2635a47ed - Don't append to existing files.
svn path=/trunk/; revision=10546
2004-08-15 00:51:01 +00:00
Eric Kohl
525f112e0c Try to retrieve the resource list before starting a pnp device.
svn path=/trunk/; revision=10545
2004-08-14 22:47:08 +00:00
Gé van Geldorp
4bf8b7d19b Avoid crash
svn path=/trunk/; revision=10544
2004-08-14 22:36:38 +00:00
Gé van Geldorp
fe0c27e5c2 Sync to Wine-20040813: update status
svn path=/trunk/; revision=10543
2004-08-14 21:02:42 +00:00
Filip Navara
45e78bd69f - Fix dependency tracking for relative paths.
svn path=/trunk/; revision=10542
2004-08-14 20:51:46 +00:00
Steven Edwards
99ef31f67f Get it building. Linking is next
svn path=/trunk/; revision=10541
2004-08-14 20:43:40 +00:00
Gé van Geldorp
d0307c2139 Sync to Wine-20040813:
Alexandre Julliard
- Avoid some non-portable makefile constructs, and get rid of the
  ALTNAMES variable.
Robert Reif <reif@earthlink.net>
- Change MIXER_GetDev to take pointer to returned address pointer and
  return one of 3 possible return values rather than an address or
  NULL.
- Adds *GetDevCapsW bad pointer check.
- Adds waveOutGetDevCapsW test.
Filip Navara <xnavara@volny.cz>
- Implementation of mmTaskCreate. Based on patch by Eric Pouech.
- Fallback implementation in waveOut[Un]PrepareHeader.
Marcelo Duarte <wine-devel@bol.com.br>
- Localization of devenum to Portuguese and minor corrections.

svn path=/trunk/; revision=10539
2004-08-14 20:36:35 +00:00
Gé van Geldorp
82663d1e65 Sync to Wine-20040813:
Ivan Leo Puoti <puoti@inwind.it>
- Added Italian resources.
Marcelo Duarte <wine-devel@bol.com.br>
- Update localization for Portuguese language.
Alexandre Julliard
- Get rid of the non-standard ICOM_VTABLE macro.
- Get rid of the non-standard ICOM_VFIELD macro.
- Fixed flags handling in StrIsIntlEqualA/W (spotted by James Hawkins).
Jacek Caban <jack@itma.pwr.wroc.pl>
- Implemented IsOS function.
Francois Gouget <fgouget@free.fr>
- Modify widl to put the C COM macros inside an #ifdef COBJMACROS block
  as is done in the Windows headers.
- Add #define COBJMACROS where needed in Wine.
- Fixes the compilation of the oleaut32/tests/olefont.c and
  urlmon/tests/url.c conformance tests with the Windows headers.
Stefan Leichter <Stefan.Leichter@camLine.com>
- Forward shlwapi.459/460 (SHExpandEnvironmentStringsA/W) to
  kernel32.ExpandEnvironmentStringsA/W.

svn path=/trunk/; revision=10538
2004-08-14 20:24:42 +00:00
Gé van Geldorp
86eb12c5fc Sync to Wine-20040813:
Alexandre Julliard
- Moved ICOM_THIS_MULTI definition out of objbase.h and into the files
  that use it.
- Get rid of the non-standard ICOM_VTABLE macro.
- Get rid of the non-standard ICOM_VFIELD macro.

svn path=/trunk/; revision=10537
2004-08-14 20:09:12 +00:00
Gé van Geldorp
40d3ca1e0b Sync to Wine-20040813:
Mike McCormack <mike@codeweavers.com>
- Remove dead code.
Jacek Caban<jack@itma.pwr.wroc.pl>
- Added EM_SCROLLCARET definition in include/richedit.h and handling in
  WindowProc.

svn path=/trunk/; revision=10536
2004-08-14 20:05:16 +00:00
Gé van Geldorp
73d3df3e28 Sync to Wine-20040813:
Alexandre Julliard
- Avoid some non-portable makefile constructs, and get rid of the
  ALTNAMES variable.
- Get rid of the non-standard ICOM_VTABLE macro.
- Get rid of the non-standard ICOM_VFIELD macro.
- Get rid of the non-standard ICOM_DEFINE macro.
- Moved ICOM_THIS_MULTI definition out of objbase.h and into the files
  that use it.
Mike McCormack <mike@codeweavers.com>
- Added a test for stat'ing a memory based storage file.
- stat on memory storage should return a NULL name, not "".
Francois Gouget <fgouget@free.fr>
- Assorted spelling fixes.
- Modify widl to put the C COM macros inside an #ifdef COBJMACROS block
  as is done in the Windows headers.
- Add #define COBJMACROS where needed in Wine.
- Fixes the compilation of the oleaut32/tests/olefont.c and
  urlmon/tests/url.c conformance tests with the Windows headers.
Mike Hearn <mh@codeweavers.com>
- Implement disconnect for proxies so that stubs are properly
  destroyed.
- Disconnect proxies at COM shutdown to release the corresponding
  stubs.
- Don't marshal IClassFactory into the local server pipe until we have
  connected, otherwise we might end up with stubs that are never used.
- Pass -Embedding switch to EXE servers, more tracing.
- Fix misleading warning ole CoGetClassObject.
- Fix ref counting in StdMarshalImpl_MarshalInterface for case where the
  stub already exists.
- Implement StdMarshal::ReleaseMarshalData.
- Fix infinite loops by checking the return value of _invoke_onereq and
  bailing appropriately.
- Add a comment on the SendReceive behaviour. Improve two others.
- Unref stub after invoking on it.
Robert Shearman <rob@codeweavers.com>
- Remove unneeded STUBMGR_Start call.
- Cleanup compobj_private.h.
- Fix some inaccuracies in a comment and reformat.
- Add static to non-exported marshal functions.
- Remove unused marshal functions.
- Rename several RPC functions.
- Emit fixme for known local wrong behaviour.
- Implement StdMarshal::ReleaseMarshalData.
- Document wrong behaviour for IRunningObjectTable.
- Fix infinite loops by checking the return value of _invoke_onereq and
  bailing appropriately.
- Add a comment on the SendReceive behaviour. Improve two others.
- Set RPC data representation.
Jeroen Janssen <japj@xs4all.nl>
- Updated some MSDN links in the code.

svn path=/trunk/; revision=10535
2004-08-14 20:00:59 +00:00
Gé van Geldorp
0f2899c24b Sync to Wine-20040813:
Ivan Leo Puoti <puoti@inwind.it>
- Added Italian resources.
Marcelo Duarte <wine-devel@bol.com.br>
- Update localization for Portuguese language.

svn path=/trunk/; revision=10534
2004-08-14 19:25:03 +00:00
Gé van Geldorp
5dd30e3526 Sync to Wine-20040813:
Alexandre Julliard
- Avoid some non-portable makefile constructs, and get rid of the
  ALTNAMES variable.
- Get rid of the non-standard ICOM_VTABLE macro.
Henning Gerhardt <henning.gerhardt@web.de>
- Minor fixes and updates to the German resource files.
Jacek Caban <jack@itma.pwr.wroc.pl>
- Translation update.
Mike McCormack <mike@codeweavers.com>
- Unicode file dialogs send and receive unicode messages.
Jacek Caban <jack@itma.pwr.wroc.pl>
- Fix a bug in passing parameters to CFn_WMInitDialog and CFn_WMCommand
  in FormatCharDlgProcW.
James Hawkins <truiken@gmail.com>
- Cleanup A->W cross calls.
- Better fix for collate icon behavior.

svn path=/trunk/; revision=10533
2004-08-14 19:21:01 +00:00
Gé van Geldorp
6d0e0e250c Sync to Wine-20040813:
Jon Griffiths <jon_p_griffiths@yahoo.com>
- Make pattern brush data const.
Mike McCormack <mike@codeweavers.com>
- Prevent listview from crashing when a null sort function is passed to
  LVM_SORTITEMS.
Filip Navara <xnavara@volny.cz>
- Don't update infoPtr->dwStyle in LISTVIEW_WindowProc. It's already
  handled in LISTVIEW_StyleChanged and LISTVIEW_Create processing.
- Ignore WS_VSCROLL/WS_HSCROLL flags in infoPtr->dwStyle because they're
  not always up-to-date.
- Use correct dialog title for Wizard 97 and correctly display header
  bitmap for old-style Wizard 97.
- Fix TOOLBAR_DrawMasked to correctly use image list mask.
Eric Kohl <eric.kohl@t-online.de>
- Move watermark and header bitmap loading code from
  PROPSHEET_CreatePage into its own function PROPSHEET_LoadWizardBitmaps
  and call this function from property sheet's dialog procedure.
Thomas Weidenmueller <w3seek@reactos.com>
- Correct tooltips behavior.

svn path=/trunk/; revision=10532
2004-08-14 19:12:35 +00:00
Steven Edwards
0b6388b665 Update the README.WINE. It now contains a list of almost
everything we share with Wine. Needs updates and
corrections.

svn path=/trunk/; revision=10531
2004-08-14 16:00:23 +00:00
Hartmut Birr
6657310a77 - Fixed the definition of X86_CR4_PGE.
svn path=/trunk/; revision=10530
2004-08-14 15:17:09 +00:00
Thomas Bluemel
e3e1c39945 a few fixes.
I'm not going to continue working on this due to a lack of knowledge of the security api, so someone else who knows a bit more about them should step in...

svn path=/trunk/; revision=10529
2004-08-14 11:50:25 +00:00
Thomas Bluemel
d07b810759 implemented GI_EnableMouseTracking()
svn path=/trunk/; revision=10528
2004-08-14 10:47:19 +00:00
Filip Navara
108e98c65d - Remove the now unused .edf file.
svn path=/trunk/; revision=10527
2004-08-14 10:23:11 +00:00
Filip Navara
51f265db45 - Forward everything everything we can to MSVCRT and WS2_32.
svn path=/trunk/; revision=10526
2004-08-14 10:22:10 +00:00
Hartmut Birr
ba5235cc90 - Enabled global pages if it is possible.
- Put the kernel map onto a fixed location and establish a page table
  for the first 4MB in the very early boot process.
- Disable the mapping for the page table pages within the bss section.

svn path=/trunk/; revision=10525
2004-08-14 09:17:05 +00:00
Filip Navara
ca1a1af64c - Implementation of GI_message_box.
svn path=/trunk/; revision=10524
2004-08-14 07:15:05 +00:00
Thomas Bluemel
9bab45b05a fixed a few parameters
svn path=/trunk/; revision=10523
2004-08-14 01:03:38 +00:00
Thomas Bluemel
62e97aca3c convert license to LGPL
svn path=/trunk/; revision=10522
2004-08-14 00:50:27 +00:00
Alex Ionescu
1301082015 *CORRECT* version of Defintion file.
svn path=/trunk/; revision=10521
2004-08-14 00:47:33 +00:00
Thomas Bluemel
c90dfac1f8 implementation of __libc_init_memory()
svn path=/trunk/; revision=10520
2004-08-14 00:39:19 +00:00
Alex Ionescu
067e284424 Removed duplicate entries.
svn path=/trunk/; revision=10519
2004-08-14 00:35:09 +00:00
Steven Edwards
e2ebe8412b build with w32api
svn path=/trunk/; revision=10518
2004-08-13 23:31:36 +00:00
Filip Navara
b5ba0a23cf - SkyOS menu functions implementation.
svn path=/trunk/; revision=10517
2004-08-13 20:14:40 +00:00
Filip Navara
74718af76f - Fix GC_destroy for window DCs.
svn path=/trunk/; revision=10516
2004-08-13 17:10:22 +00:00
Thomas Bluemel
0d2d58122c implemented a few window placement functions and more checks for NULL-pointers
svn path=/trunk/; revision=10515
2004-08-13 12:29:19 +00:00
Thomas Bluemel
4d50bed0ad Patch by Filip: Implemented some graphics functions and bugfixes to the windowing functions.
svn path=/trunk/; revision=10514
2004-08-13 11:24:07 +00:00
Richard Campbell
6b30f2a9ed added urlmon to the source tree, doesn't compile due to COM interface issues that i'm not quite interesting in trying to solve at the moment...if someone feels like taking a crack at it, go ahead, firefox needs this dll to be functional. This is from the latest wine CVS.
svn path=/trunk/; revision=10513
2004-08-13 06:14:48 +00:00
Richard Campbell
8063cf6601 added a few stubs to help get urlmon from the wine source tree to compile, there are still a few things left to do before i can bring in URLMon however.
svn path=/trunk/; revision=10512
2004-08-13 05:44:55 +00:00
Alex Ionescu
08fcd22543 Updated EDF file with new stubs in alphabetical order and synched EDF and DEF file.
svn path=/trunk/; revision=10511
2004-08-13 05:06:18 +00:00
Alex Ionescu
760cc9dbc7 Added Dbg Stubs and moved old ones to correct header and files.
svn path=/trunk/; revision=10510
2004-08-13 05:00:35 +00:00
Thomas Bluemel
cd550a1f78 dispatch MSG_QUIT and MSG_GUI_REDRAW messages. Thanks also to Filip.
svn path=/trunk/; revision=10509
2004-08-12 23:38:17 +00:00
Thomas Bluemel
a7d6dcd7c1 started an interface to emulate the skygi windowing but actually use win32 apis
svn path=/trunk/; revision=10508
2004-08-12 19:27:12 +00:00
Alex Ionescu
81ace77431 Added two stubs.
svn path=/trunk/; revision=10507
2004-08-12 16:43:37 +00:00
Alex Ionescu
28ad49e6f7 I/O Manager fixes. Patch by Filip Navara.
svn path=/trunk/; revision=10506
2004-08-12 16:43:12 +00:00
Thomas Bluemel
78f66ec97c an attempt to partially implement ctor_dtor_initialize() and a few more libskygi stubs
svn path=/trunk/; revision=10505
2004-08-12 15:41:36 +00:00
Alex Ionescu
7cf25ed92f Set the thread to the Allocated IRPs created by Io/Nt Query functions that didn't do this. This can cause problems if the thread is ever read on a completed request.
svn path=/trunk/; revision=10504
2004-08-12 06:15:50 +00:00
Alex Ionescu
359fe88806 Fixed/Added Stubs.
Implemented PsRevertThreadToSelf

svn path=/trunk/; revision=10503
2004-08-12 06:04:21 +00:00
Art Yerkes
e9fc7ea7df According to alex_ionescu, callers of IoAllocateIrp should set the
Tail.Overlay.Thread member themselves in the new Irp.  These calls
to IoAllocateIrp were not followed by setting the thread.

svn path=/trunk/; revision=10502
2004-08-12 05:59:25 +00:00
Thomas Bluemel
7dd153e40e Steven Edwards wanted me to commit this.
This adds a vew basic stubs of the SkyOS libraries libsky and libskygi. This actually was an experiment if SkyOS apps run in ReactOS/Win/WINE. It gets a slightly patched (only the optional PE header needs to be set to the right subsys code) version of TicTacToe released in the SkyOS forums. It doesn't crash but also doesn't work yet of course, but it successfully launches and calls the functions as you can see in the debug output.

svn path=/trunk/; revision=10501
2004-08-12 02:50:35 +00:00
James Tabor
cb9fb81c44 Added Lock and Heap Info struc's.
svn path=/trunk/; revision=10500
2004-08-11 21:03:11 +00:00
James Tabor
4e8265f044 Module Library supported now. There is a bug with scanning winlogon that causes a exception. The version.dll data is worng.
svn path=/trunk/; revision=10499
2004-08-11 21:02:12 +00:00
Thomas Bluemel
5d4aa40ac6 Krishna Murthy <Krishna.Murthy@guptaworldwide.com>
Replaced LISTBOX_SetCaretIndex() with LISTBOX_MoveCaret() in
LB_SELECTSTRING handler so that the caret moves to the index and item
is highlighted.

svn path=/trunk/; revision=10498
2004-08-11 10:37:06 +00:00
Eric Kohl
6f267c1f3c Add RtlFormatMessage stub.
svn path=/trunk/; revision=10497
2004-08-11 09:30:23 +00:00
Thomas Bluemel
86f612b5f1 pass LUIDs to RosEnableThreadPrivileges()
svn path=/trunk/; revision=10496
2004-08-11 08:48:20 +00:00
Thomas Bluemel
2f6a9da97d little fix
svn path=/trunk/; revision=10495
2004-08-11 08:32:48 +00:00
Thomas Bluemel
05d68bd490 added RosEnableThreadPrivileges() and RosResetThreadPrivileges() helper functions for easier thread privilege management
svn path=/trunk/; revision=10494
2004-08-11 08:28:13 +00:00
James Tabor
486bb2502f Replaced RtlAllocateHeap with NtAllocateVirtualMemory.
svn path=/trunk/; revision=10493
2004-08-11 03:48:31 +00:00
Thomas Bluemel
ca0c109cec Implemented CreateSecurityPage() to create an empty property sheet.
svn path=/trunk/; revision=10492
2004-08-11 01:21:53 +00:00
Gé van Geldorp
446f5adc02 Fix RtlEqualLuid()
svn path=/trunk/; revision=10491
2004-08-10 23:26:39 +00:00
Gé van Geldorp
794fe5ff6a Allocate new LUID for each logon session
svn path=/trunk/; revision=10490
2004-08-10 21:18:16 +00:00
Gé van Geldorp
78a5367c1d Copy AuthenticationId from existing token when duplicating a token
svn path=/trunk/; revision=10489
2004-08-10 21:11:20 +00:00
Gé van Geldorp
39bfabb1d4 Change debugging statement
svn path=/trunk/; revision=10488
2004-08-10 20:30:35 +00:00
Gé van Geldorp
a696f85479 Implement TokenOrigin class for GetTokenInformation
svn path=/trunk/; revision=10487
2004-08-10 20:13:42 +00:00
Hartmut Birr
03d66eb75a - Fixed the calculation of used non paged pool pages in grow_block.
svn path=/trunk/; revision=10486
2004-08-10 20:00:49 +00:00
Hartmut Birr
2a373c783c - Returned more of the protection bits in MmGetPageProtect.
- Ignore the PAGE_SYSTEM attribute and set the user bit according to the
  given address in MmSetPageProtect and MmCreateVirtualMappingUnsafe.
- Don't change the accessed and dirty bit in MmSetPageProtect.

svn path=/trunk/; revision=10485
2004-08-10 19:57:58 +00:00
Hartmut Birr
a91173016c - Replaced MmGetPageEntry with MmGetPageProtect/MmSetPageProtect in KdbOverwriteInst.
svn path=/trunk/; revision=10484
2004-08-10 19:49:25 +00:00
Eric Kohl
bc751c87d7 Minor fix
svn path=/trunk/; revision=10483
2004-08-10 19:12:40 +00:00
Thomas Bluemel
ffdafcd0c4 Dmitry Timoshkov <dmitry@codeweavers.com>
Fix button behaviour on WM_SETFOCUS/WM_KILLFOCUS with a test case.

svn path=/trunk/; revision=10482
2004-08-10 19:09:37 +00:00
Thomas Bluemel
d0d5ed5109 added aclui.dll to the bootcd
svn path=/trunk/; revision=10481
2004-08-10 17:10:57 +00:00
Thomas Bluemel
8dac27ed6f fixed typo spotted by Royce.
svn path=/trunk/; revision=10480
2004-08-10 16:21:27 +00:00
Thomas Bluemel
7c8662b9af added aclui.dll to the automatic build
svn path=/trunk/; revision=10479
2004-08-10 15:49:55 +00:00
Thomas Bluemel
8fa77f76c9 implemented EditSecurity()
svn path=/trunk/; revision=10478
2004-08-10 15:47:54 +00:00
Thomas Bluemel
87a27e883c little fix
svn path=/trunk/; revision=10477
2004-08-10 15:21:27 +00:00
Filip Navara
29d654749b - Remove forgotten temporary debug message.
svn path=/trunk/; revision=10476
2004-08-10 15:09:14 +00:00
Thomas Bluemel
7a93d2f239 stop animation timer after completion
svn path=/trunk/; revision=10475
2004-08-10 15:08:05 +00:00
Thomas Bluemel
e1c935fafd improved the installation process
svn path=/trunk/; revision=10474
2004-08-10 15:00:22 +00:00
Eric Kohl
e9533d09c4 Sort Rtl* functions.
svn path=/trunk/; revision=10473
2004-08-10 12:07:11 +00:00
Eric Kohl
8f674bc02f Move bitmap functions to the shared rtl library.
svn path=/trunk/; revision=10472
2004-08-10 12:05:20 +00:00
Thomas Bluemel
bfa54c3f9a include the right files
svn path=/trunk/; revision=10471
2004-08-10 12:00:55 +00:00
Eric Kohl
f3320ad230 Move bitmap functions to the shared rtl library.
Implement RtlClearBit, RtlSetBit and RtlTestBit.

svn path=/trunk/; revision=10470
2004-08-10 12:00:09 +00:00
Thomas Bluemel
c4b330cce6 split up headers
svn path=/trunk/; revision=10469
2004-08-10 11:54:43 +00:00
Thomas Bluemel
3a88fe367b Added a few helper functions for easier usage of strings in resources
svn path=/trunk/; revision=10468
2004-08-10 10:57:54 +00:00
Filip Navara
5775259453 - Fixed lots of bugs in NTFS code and added correct update sequence
fixups handling and untested NTFS 3+ sparse file support.

svn path=/trunk/; revision=10467
2004-08-10 09:28:56 +00:00
Emanuele Aliberti
99e5dd3e01 Fixed typographical error.
svn path=/trunk/; revision=10466
2004-08-10 07:25:49 +00:00
Alex Ionescu
5317d303e8 Small fixes to I/O Manager and Implemented IoMakeAssociatedIrp. Parts by Filip Navara.
svn path=/trunk/; revision=10465
2004-08-10 06:26:42 +00:00
Filip Navara
2199f89e4d Fix compiler warnings.
svn path=/trunk/; revision=10464
2004-08-10 01:49:37 +00:00
Thomas Bluemel
757eac9cfb fixed file headers
svn path=/trunk/; revision=10463
2004-08-10 00:12:31 +00:00
Thomas Bluemel
a201e6c460 added stubs for aclui.dll
svn path=/trunk/; revision=10462
2004-08-10 00:09:40 +00:00
Thomas Bluemel
692929e156 added header for aclui.dll
svn path=/trunk/; revision=10461
2004-08-09 23:29:06 +00:00
Gé van Geldorp
0f07e3b53f NtOpenThread should look at the CIDs UniqueThread member only, not at
UniqueProcess. Makes OpenThread() work.

svn path=/trunk/; revision=10460
2004-08-09 22:15:01 +00:00
James Tabor
d81fcdb79e Mostly implemented, Listdlls half way works now.
svn path=/trunk/; revision=10459
2004-08-09 19:55:33 +00:00
James Tabor
082128c460 Adding missing structures for Debug information.
svn path=/trunk/; revision=10458
2004-08-09 19:41:13 +00:00
Gé van Geldorp
354bc795aa Undo test change
svn path=/trunk/; revision=10457
2004-08-09 18:28:28 +00:00
Gé van Geldorp
6e83a89501 Test log_accum.pl
svn path=/trunk/; revision=10456
2004-08-09 18:26:26 +00:00
James Tabor
0b8a58aaa9 Added Debug Buffer Information. Testing with SysInternals.com listdlls.exe.
svn path=/trunk/; revision=10455
2004-08-09 18:17:23 +00:00
Gé van Geldorp
08707afede Add internal flags for ExitWindowsEx()
svn path=/trunk/; revision=10454
2004-08-09 17:54:56 +00:00
Thomas Bluemel
94efe6c3c1 implemented a couple of Hid device functions
svn path=/trunk/; revision=10453
2004-08-09 16:02:43 +00:00
Filip Navara
a17d473fa8 Update porting status for COMCTL32.
svn path=/trunk/; revision=10452
2004-08-09 15:42:04 +00:00
Filip Navara
7949648a6f Thomas Weidenm�ller <w3seek@reactos.org>
Implemented syslink control.

svn path=/trunk/; revision=10451
2004-08-09 15:35:58 +00:00
Filip Navara
1a31bc2b07 Definitions for SysLink control.
svn path=/trunk/; revision=10450
2004-08-09 15:34:50 +00:00
Filip Navara
8aa4fdb954 Marcus Meissner <marcus@jet.franken.de>
Implemented PSM_INDEXTOHWND.

svn path=/trunk/; revision=10449
2004-08-09 15:22:28 +00:00
Filip Navara
87c79ea203 Filip Navara <xnavara@volny.cz>
- Properly calculate caption length when converting multi-byte string
  to wide character one.
- Wizard contents shouldn't be moved by the size of watermark bitmap.
- Fix PSH_WIZARD97_[NEW/OLD] checks.
- Blit the watermark even if PSH_USEHBMWATERMARK flag isn't set and
  blit only the part that fits into the dialog.

svn path=/trunk/; revision=10448
2004-08-09 15:21:57 +00:00
Filip Navara
85be46acc4 Define PBS_MARQUEE and PBM_SETMARQUEE.
svn path=/trunk/; revision=10447
2004-08-09 15:15:20 +00:00
Filip Navara
0b219a650f Filip Navara <xnavara@volny.cz>
Use system metrics values in TOOLBAR_DrawPattern instead of hardcoded
values.

svn path=/trunk/; revision=10446
2004-08-09 15:12:24 +00:00
Filip Navara
a8f3fd698d Thomas Weidenmueller <wine-patches@reactsoft.com>
Added support for PBS_MARQUEE style.

svn path=/trunk/; revision=10445
2004-08-09 15:09:17 +00:00
Filip Navara
4b8b200e80 Dmitry Timoshkov <dmitry@codeweavers.com>
Create toolbar with a not zero default size, it allows applications
which check toolbar size before adding buttons to it work.

svn path=/trunk/; revision=10444
2004-08-09 15:08:23 +00:00
Filip Navara
5152995d4e Filip Navara <xnavara@volny.cz>
Fix CreateMappedBitmap for palette-less bitmaps.

svn path=/trunk/; revision=10443
2004-08-09 15:08:00 +00:00
Filip Navara
d6e606d1b2 Henning Gerhardt <henning.gerhardt@web.de>
Minor fixes and updates to the German resource files.

svn path=/trunk/; revision=10442
2004-08-09 15:07:37 +00:00
Eric Kohl
7bd374681e Sort Zw* functions
svn path=/trunk/; revision=10441
2004-08-09 11:18:08 +00:00
Alex Ionescu
52279b1490 Rundown Protection Implementation. Implemented ExAcquireRundownProtection, ExAcquireRundownProtectionEx, ExInitializeRundownProtection, ExReInitializeRundownProtection, ExReleaseRundownProtection, ExReleaseRundownProtectionEx, ExRundownCompleted, ExWaitForRundownProtectionRelease
svn path=/trunk/; revision=10440
2004-08-09 01:26:10 +00:00
Art Yerkes
846acbcf70 Added a (C) notice.
svn path=/trunk/; revision=10439
2004-08-08 22:07:06 +00:00
Gé van Geldorp
30417399c0 Sync to Wine-20040716
svn path=/trunk/; revision=10438
2004-08-08 21:50:40 +00:00
Art Yerkes
3ffa79d49a Simple preprocessor for converting try ... except to our pseh-style exception
handling.  Should allow us to use source files from open source drivers that
compile with msvc given some care.  Not a complete solution but it eliminates
the most tedious part of the job.

svn path=/trunk/; revision=10437
2004-08-08 21:40:09 +00:00
Gé van Geldorp
c953f01971 Sync to Wine-20040716:
Henning Gerhardt <henning.gerhardt@web.de>
- More German translations.
Hajime Segawa <winetips@sidenet.ddo.jp>
- Added some Japanese translations.
Dimitrie O. Paun <dpaun@rogers.com>
- Lookup driver information in registry and system.ini.
- Make the code inspect the registry/system.ini at call time, rather
  then initialization time.
- Code cleanups.

svn path=/trunk/; revision=10435
2004-08-08 21:36:20 +00:00
Gé van Geldorp
760a5fbb46 Sync to Wine-20040716:
Mike McCormack <mike@codeweavers.com>
- Fix memory allocation problems.
Marcus Meissner <marcus@jet.franken.de>
- Do not assign to casted values.
Alexandre Julliard
- Implemented GetUIVersion (based on a patch by Stefan Leichter).
Stefan Leichter <Stefan.Leichter@camLine.com>
- Removed the crosscalls (unicode to ascii) from GetAcceptLanguagesW.
- Removed todo_wine from GetAcceptLanguagesA tests.
- Added tests for GetAcceptLanguagesA.
Henning Gerhardt <henning.gerhardt@web.de>
- Translated some English resource files into German.
Hajime Segawa <winetips@sidenet.ddo.jp>
- Added some Japanese translations.

svn path=/trunk/; revision=10434
2004-08-08 21:15:48 +00:00
Gé van Geldorp
9811098a69 Sync to Wine-20040716:
Mike Hearn <mh@codeweavers.com>
- Don't ERR on a used connection being destroyed.
- Don't print an extra newline in the olerelay code.
- Remove the RPC connection cache as Windows does not allow multiple
  binds on the same connection.
- Correct connection releases on error path in RPCRT4_OpenBinding.

svn path=/trunk/; revision=10433
2004-08-08 21:07:12 +00:00
Gé van Geldorp
0bc264aea8 Sync to Wine-20040716:
Henning Gerhardt <henning.gerhardt@web.de>
- Translated some English resource files into German.
- More German translations.
Hajime Segawa <winetips@sidenet.ddo.jp>
- Added some Japanese translations.

svn path=/trunk/; revision=10432
2004-08-08 20:49:55 +00:00
Gé van Geldorp
d0bf3394ea Sync to Wine-20040716:
Mike McCormack <mike@codeweavers.com>
- Fix a few serious race conditions in the OLE object pipe server.
- Add some explanations to compobj.c, implement flushing message queue
  on shutdown.
Francois Gouget <fgouget@free.fr>
- Assorted spelling fixes.
Marcus Meissner <marcus@jet.franken.de>
- IMalloc vtables are static.
- IID_IObjectWithSite is already in libuuid, no need to declare here.
Aric Stewart <aric@codeweavers.com>
- Return an error in CoMarshalInterface if the IUnknown pointer is NULL
  and don't crash.
Ivan Leo Puoti <puoti@inwind.it>
- Removed the winedefault.reg message.
Robert Shearman <rob@codeweavers.com>
- Add static to non-exported marshal functions.
- Remove unused marshal functions.
- Rename several RPC functions.

svn path=/trunk/; revision=10431
2004-08-08 20:42:47 +00:00
Gé van Geldorp
66219a7d31 Sync to Wine-20040716:
Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
- HeapAlloc for WSTR must allocate len* sizeof(WCHARS).
Henning Gerhardt <henning.gerhardt@web.de>
- Translated some English resource files into German.
JosT Manuel Ferrer Ortiz <jmfo1982@yahoo.es>
- Added Spanish translation.
Hajime Segawa <winetips@sidenet.ddo.jp>
- Added some Japanese translations.

svn path=/trunk/; revision=10430
2004-08-08 20:33:39 +00:00
Alex Ionescu
9fa7984747 Initial Support for Quota Pool Allocations.
Implemented ExAllocatePoolWithQuota, ExAllocatePoolWithQuotaTag, PsChargePoolQuota, PsChargeProcessNonPagedPoolQuota, PsChargeProcessPagedPoolQuota, PsChargeProcessPoolQuota.
Also implemented a basic ExAllocatePoolWithTagPriority, but needs Special Pool support for Driver Verifier functionality. The allocation works however.

svn path=/trunk/; revision=10429
2004-08-08 20:33:17 +00:00
Gé van Geldorp
823ef8a298 Set explicit base address for notifyhook.dll so it won't get relocated
svn path=/trunk/; revision=10428
2004-08-08 20:26:43 +00:00
Gé van Geldorp
28676c56c8 Sync to Wine-20040716:
Krishna Murthy <Krishna.Murthy@guptaworldwide.com>
- Add the selected extension from file type filter if file name does not
  contain the file extension.
Dmitry Timoshkov <dmitry@codeweavers.com>
- Fix control coordinates in German and French versions of open file
  dialog.
- Remove duplicate control ids in Catalan, Russian and Ukrainian
  dialogs.
James Hawkins <truiken@gmail.com>
- Fixed collate icon behavior.
- Check for empty PrinterName in PRINTDLG_WMCommandW.

svn path=/trunk/; revision=10427
2004-08-08 20:15:06 +00:00
Gé van Geldorp
1c0c11dcb3 Sync to Wine-20040716:
Mike McCormack <mike@codeweavers.com>
- Create a tooltip on demand in the Listview.
Robert Shearman <rob@codeweavers.com>
- Implemented PSM_HWNDTOINDEX.
- Add stubs for some new property sheet messages.
- Clean up the mask drawing code.
- Improve bitmap not found message.
- Start of balloon tip support.
Jon Griffiths <jon_p_griffiths@yahoo.com>
- Don't crash on NULL tab text.
Filip Navara <xnavara@volny.cz>
- Make the pattern drawing in TOOLBAR_DrawPattern look better.

svn path=/trunk/; revision=10425
2004-08-08 20:04:00 +00:00
Gé van Geldorp
a4617084d5 Add some property sheet messages
svn path=/trunk/; revision=10424
2004-08-08 20:02:57 +00:00
Martin Fuchs
09528fb211 german translation of task manager by Klemens Friedl <frik85@hotmail.com>
svn path=/trunk/; revision=10423
2004-08-08 19:16:10 +00:00
Martin Fuchs
4e20a1b256 german translation of welcome.exe by Klemens Friedl <frik85@hotmail.com>
svn path=/trunk/; revision=10422
2004-08-08 19:15:57 +00:00
James Tabor
3c977fea43 Fixed warning messages ans set -Werror in make file.
svn path=/trunk/; revision=10421
2004-08-08 18:46:25 +00:00
Alex Ionescu
32b533c632 Allow alternate SEH construct. Patch by Art Yerkes.
svn path=/trunk/; revision=10420
2004-08-08 18:26:47 +00:00
Thomas Bluemel
a2b32fbcd6 serialize gui switching and switching the focus message queue
svn path=/trunk/; revision=10419
2004-08-08 17:57:34 +00:00
Jens Collin
35b0435a15 Partial merge with wine-code. Solves BZ#230. Executing text-doc from start-Run. Same change sent to wine-patches
svn path=/trunk/; revision=10418
2004-08-08 16:04:00 +00:00
Jens Collin
82cdbd3a97 notepad takes input filename as parameter %1.
svn path=/trunk/; revision=10417
2004-08-08 16:01:07 +00:00
Filip Navara
287525992a - Fix section object dereferencing in NtCreateSection.
svn path=/trunk/; revision=10416
2004-08-08 10:46:20 +00:00
Steven Edwards
6ba86d77fa Added advapi32 test for the registry.
svn path=/trunk/; revision=10415
2004-08-07 22:51:27 +00:00
Steven Edwards
a730cae54d Added vmwinst and imagehlp to the bootcd
(imagehlp allows openoffice setup to work)

svn path=/trunk/; revision=10414
2004-08-07 22:26:00 +00:00
Steven Edwards
7fe2c42738 When doing a debug boot pass /NOGUIBOOT to disable the
splash screen so we can see the /DEBUGPORT=SCREEN
output.

svn path=/trunk/; revision=10413
2004-08-07 20:26:41 +00:00
Filip Navara
e0449489e5 - Faster dependency system.
svn path=/trunk/; revision=10412
2004-08-07 20:23:33 +00:00
Alex Ionescu
cd351f4dc9 Tagged certain functions that were exported both under NT and ROS, but not marked as un/implemented.
svn path=/trunk/; revision=10411
2004-08-07 19:13:27 +00:00
Alex Ionescu
730a1f48e2 Added shared RTL functions to appear in ntoskrnl exports (Since they are in fact exported by ntoskrnl)
svn path=/trunk/; revision=10410
2004-08-07 06:48:49 +00:00
Steven Edwards
592b1ab19b Renamed /DEBUGPORT=FILELOG to
/DEBUGPORT=BOOTLOG to be compatbile with Windows.

svn path=/trunk/; revision=10409
2004-08-07 03:41:31 +00:00
Filip Navara
312d818b93 - Correctly handle ClipCursor(NULL) case.
svn path=/trunk/; revision=10408
2004-08-07 00:25:10 +00:00
Gero Kuehn
17fbcf5e93 added display properties skeleton
svn path=/trunk/; revision=10407
2004-08-07 00:05:23 +00:00
Filip Navara
956358275c - Move code from NtCreateSection to MmCreateSection and adjust it.
- Use MmCreateSection instead of NtCreateSection where possible.

svn path=/trunk/; revision=10406
2004-08-05 19:59:13 +00:00
Alex Ionescu
054fcf9a85 Fixed Names.
svn path=/trunk/; revision=10405
2004-08-05 19:03:24 +00:00
Alex Ionescu
3c1d312107 Added RTL Stubs, Prototypes and Exports.
svn path=/trunk/; revision=10404
2004-08-05 18:17:37 +00:00
Emanuele Aliberti
172a11d61b Report "access denied" errors.
svn path=/trunk/; revision=10403
2004-08-05 12:11:49 +00:00
James Tabor
b1a51402e2 Update query thread times.
svn path=/trunk/; revision=10402
2004-08-05 11:38:01 +00:00
Filip Navara
68a3b15468 - Separate out cluster chain extending functionality from GetNextCluster to GetNextClusterExtend.
- Fix a typo in VfatHasFileSystem.

svn path=/trunk/; revision=10401
2004-08-05 02:48:18 +00:00
Thomas Bluemel
0004f90a07 Reverted my changes to timers
svn path=/trunk/; revision=10400
2004-08-04 22:31:17 +00:00
Martin Fuchs
f34c1d586a fix clean target for new standard makefiles
svn path=/trunk/; revision=10399
2004-08-04 21:42:33 +00:00
Magnus Olsen
f3f6e3172f notifyhook.dll are not in subsys/system/explore mapp it is in subsys/system/explore/notifyhook/ mapp
I did only corrrect the path so make bootcd works agein

svn path=/trunk/; revision=10397
2004-08-04 21:36:28 +00:00
Magnus Olsen
bfa88618a8 Thx to Herv� Poussineau the gcc 3.3.x are working agein
poussine@freesurf.fr

svn path=/trunk/; revision=10396
2004-08-04 19:53:27 +00:00
Filip Navara
f167814f32 - Remove completion routine for VfatReadDisk. IRPs build with IoBuildSynchronousFsdRequest mustn't be freed by IoFreeIrp, because they're still associated with a thread.
- Don't call IoBuildAsynchronousFsdRequest with NULL buffer for read/write requests. It's explicitly prohibited per DDK documentation and causes crashes on Windows (R) NT systems.

svn path=/trunk/; revision=10395
2004-08-04 19:40:45 +00:00
Filip Navara
8db63af2d6 - Correct a comment.
svn path=/trunk/; revision=10394
2004-08-04 18:27:21 +00:00
Filip Navara
0bde909135 - Fix compiling Explorer with precompiled headers.
svn path=/trunk/; revision=10393
2004-08-04 18:22:41 +00:00
Filip Navara
c4811617d1 - Don't allow selecting separators in start menu and avoid nasty refreshing when moving mouse above the left ReactOS Logo bar.
svn path=/trunk/; revision=10392
2004-08-04 18:19:01 +00:00
Emanuele Aliberti
bde15621e5 Register the LPC Port object object in the system name space.
svn path=/trunk/; revision=10390
2004-08-04 12:50:42 +00:00
Eric Kohl
3faddac950 Add missing functions to the .def and .edf files and sort existing entries.
svn path=/trunk/; revision=10389
2004-08-04 12:11:45 +00:00
Alex Ionescu
c23f194bf6 Fix Compiler warning with -O2
svn path=/trunk/; revision=10388
2004-08-04 02:36:53 +00:00
Filip Navara
08f1890738 - Change -fno-strict-aliasing to -Wno-strict-aliasing for optimized builds.
svn path=/trunk/; revision=10387
2004-08-04 02:27:07 +00:00
Filip Navara
f9ee38ed2b - Fix setting of GDT and IDT pointers in KPCR.
svn path=/trunk/; revision=10386
2004-08-04 02:24:40 +00:00
Alex Ionescu
47b5abbd99 Fix Compiler warning with -O2
svn path=/trunk/; revision=10385
2004-08-04 00:45:36 +00:00
Filip Navara
1740e56356 - Destroy associated listview when IShellView is destroyed.
svn path=/trunk/; revision=10384
2004-08-04 00:23:28 +00:00
Filip Navara
a5154371b4 - Use NDIS_DbgPrint instead of DbgPrint for NDIS buffer messages.
svn path=/trunk/; revision=10383
2004-08-04 00:19:11 +00:00
Alex Ionescu
2aa9311ef8 Fix Compiler warning with -O2
svn path=/trunk/; revision=10382
2004-08-04 00:18:01 +00:00
Filip Navara
0cff98313c - Disable debug messages of floppy driver.
svn path=/trunk/; revision=10381
2004-08-04 00:17:49 +00:00
Filip Navara
ba0ae4ebaf - Don't print stack frames in NtContinue if NDEBUG is defined.
svn path=/trunk/; revision=10380
2004-08-04 00:17:14 +00:00
Martin Fuchs
d9f7a83889 move doxygen targets into separate scripts
svn path=/trunk/; revision=10379
2004-08-03 20:05:02 +00:00
Martin Fuchs
49c4d2b4f2 move doxygen targets to separate scripts
svn path=/trunk/; revision=10378
2004-08-03 20:04:49 +00:00
Gregor Anich
57da2ced76 Implement NtUserEnumDisplaySettings/IntEnumDisplaySettings.
svn path=/trunk/; revision=10377
2004-08-03 19:55:58 +00:00
Martin Fuchs
16904f000e readd additional non-standard Makefile targets
svn path=/trunk/; revision=10376
2004-08-03 19:53:03 +00:00
Martin Fuchs
e092a67cea add .cvsignore files for *.o and *.d
svn path=/trunk/; revision=10375
2004-08-03 19:48:00 +00:00
Martin Fuchs
08cf5682c3 get version number to display from RES_STR_PRODUCT_VERSION
svn path=/trunk/; revision=10374
2004-08-03 19:43:45 +00:00
Martin Fuchs
22147c5757 get version number to display from RES_STR_PRODUCT_VERSION
svn path=/trunk/; revision=10372
2004-08-03 19:43:45 +00:00
Alex Ionescu
c5a9f20753 Added Se Stubs, Prototypes and Exports.
svn path=/trunk/; revision=10370
2004-08-03 19:20:39 +00:00
Filip Navara
01767fb5d8 - Execute the implib rule for system applications.
svn path=/trunk/; revision=10369
2004-08-03 14:50:56 +00:00
Eric Kohl
48ff8c0e48 Add wizard watermark and header bitmaps.
svn path=/trunk/; revision=10368
2004-08-03 14:10:49 +00:00
Eric Kohl
f0d259c7bc SeAssignSecurity():
- Inherit SACL.
- Make sure SIDs and ACLs are 4 byte aligned.

svn path=/trunk/; revision=10367
2004-08-03 13:58:56 +00:00
Eric Kohl
437de0500e - Use 'MS Shell Dlg' font in all dialogs.
- Fix some typos in german dialogs.
- Add locale page dialog.
- Store owner name, owner organization and computer name in the registry.

svn path=/trunk/; revision=10366
2004-08-03 13:43:00 +00:00
Martin Fuchs
62d46e8d85 correct TARGET_PCH to 'precomp.h'
svn path=/trunk/; revision=10365
2004-08-02 20:55:26 +00:00
Martin Fuchs
932a73bfc2 context menus for start menus
svn path=/trunk/; revision=10364
2004-08-02 20:00:56 +00:00
Martin Fuchs
62f1a2a671 context menus for qick launch bar
svn path=/trunk/; revision=10363
2004-08-02 19:16:18 +00:00
Filip Navara
efb2135435 - Add TARGET_PCH to Explorer makefile.
- Delete only the one used .pch file and not *.pch in helper.mk.

svn path=/trunk/; revision=10362
2004-08-02 15:51:23 +00:00
Filip Navara
3639da0250 - Use __KeStallExecutionProcessor instead of plain loop in HalCalibratePerformanceCounter since __KeStallExecutionProcessor is safe even for optimized builds.
svn path=/trunk/; revision=10361
2004-08-02 15:09:22 +00:00
Gregor Anich
64a312d97d If initializing the desktop implementation fails, print "Failed to initialize desktop implementation!", not "Failed to initialize window station implementation!"
svn path=/trunk/; revision=10360
2004-08-02 15:07:26 +00:00
Filip Navara
0eb15adf43 - Ignore msacm32.spec.def and Makefile.ros.
svn path=/trunk/; revision=10359
2004-08-02 15:07:09 +00:00
Filip Navara
7193e1d360 - Delete ntoskrnl/ps/i386/*.o on "make clean".
- Standardize Explorer makefile.
- Remove obsolete WINE_MODE and WINE_RC handling from helper.mk.

svn path=/trunk/; revision=10358
2004-08-02 15:04:24 +00:00
Filip Navara
16ac657bde - Fix building of MidiMap and WaveMap audio drivers.
svn path=/trunk/; revision=10357
2004-08-02 14:58:59 +00:00
Martin Fuchs
da6bb56348 update binres tools and fix renaming bug
svn path=/trunk/; revision=10356
2004-08-02 07:59:38 +00:00
Filip Navara
5efcf7ad5c - Remove build generated files from CVS.
svn path=/trunk/; revision=10355
2004-08-02 03:12:04 +00:00
Filip Navara
d6ee3ac209 - Use #include <xxx> for system include files instead of #include "xxx".
svn path=/trunk/; revision=10354
2004-08-02 03:07:36 +00:00
Filip Navara
c7dda4d8da - Remove msvfw32.spec.def as *.spec.def files are generated during the build.
svn path=/trunk/; revision=10353
2004-08-02 03:04:40 +00:00
Filip Navara
aa682a95e1 - Remove #include directives surrounded by #ifndef __REACTOS__.
svn path=/trunk/; revision=10352
2004-08-02 03:03:10 +00:00
Filip Navara
b80f0e34e1 - Remove unused makefiles.
svn path=/trunk/; revision=10351
2004-08-02 03:01:50 +00:00
Filip Navara
cb394360c0 - Get rid of WINE_MODE and WINE_RC usage in makefiles.
svn path=/trunk/; revision=10350
2004-08-02 02:55:08 +00:00
Filip Navara
3c76881837 - Add definition of _tmakepath.
svn path=/trunk/; revision=10349
2004-08-02 02:52:31 +00:00
Filip Navara
39799e45c9 - Make sure all build files and directories are properly deleted on "make clean".
svn path=/trunk/; revision=10348
2004-08-01 23:27:56 +00:00
Filip Navara
03578741a9 - Add *.pch to list of ignored files.
svn path=/trunk/; revision=10347
2004-08-01 22:02:30 +00:00
Filip Navara
a0198bed0d - Ignore all .ico files.
svn path=/trunk/; revision=10346
2004-08-01 22:00:33 +00:00
Filip Navara
4b0c6682d0 - Replace some usages of KEBUGCHECK(0) with correct bug check codes.
svn path=/trunk/; revision=10345
2004-08-01 21:57:35 +00:00
Filip Navara
a9f6cf2b6c - Change all FAT*FindAvailableCluster functions to new functions
FAT*FindAndMarkAvailableCluster which have incorporated the setting of
  EOF marker in the File Allocation Table for the returned cluster.

- Rewritten FAT32CountAvailableClusters, FAT32FindAndMarkAvailableCluster,
  FAT16CountAvailableClusters and FAT16FindAndMarkAvailableCluster for
  better performance. These functions were using one big loop for traversing
  the FAT and had a block of code in the loop for requesting cache manger
  for next chunk of FAT *if necessary* (which commonly wasn't the case).
  Now it's changed to request always a whole FAT chunk and process it at once
  in a nested loop.

- Cache last offset + cluster pair while reading/writing from/to file. This
  ensures almost linear times when doing sequential reads/writes, because the
  whole FAT traversing for the file is not done again for every request.
  Previously there was code for this, but it was neither correctly used
  nor working. It stored the last offset + cluster pair in file CCB structure
  (that is unique for each opened file handle) and not FCB structure (which
  is shared among all instances of the same file). This resulted in
  inconsistent cluster + offset number when the file allocation chain was
  changed (eg. by enlarging/shrinking the file), but since the cached offsets
  weren't actully used it went unnoticed.

- Remove old hack from NextCluster and fix the call to it in VfatAddEntry.
  Not much to say about it, there was an temporary hack in NextCluster and
  with fixed VfatAddEntry it's now no longer needed.

- Add pointers to WriteCluster, FindAndMarkAvailableCluster and
  GetNextCluster functions to device extension (set during mount) and use
  them at appropriate locations. This avoids some nasty if's in the code
  and causes some unnoticable performance improvment in the low-level
  FAT code.

- Lock the directory FCB in VfatAddEntry while modifying it. This should
  propably be done on more places, but it needs more investigations.

- Increase the file cache allocation size in VfatRead/VfatWrite. It boosts
  the overall speed of the driver a lot.

svn path=/trunk/; revision=10344
2004-08-01 21:57:18 +00:00
Martin Fuchs
0f48b872aa correct icon image order
svn path=/trunk/; revision=10343
2004-08-01 21:23:21 +00:00
Martin Fuchs
009b55a91e insert new ramdisk icon from Klemens Friedl
svn path=/trunk/; revision=10342
2004-08-01 20:56:59 +00:00
Thomas Bluemel
f258f3380a fixed popup menu for edit controls
svn path=/trunk/; revision=10341
2004-08-01 19:49:21 +00:00
Jens Collin
ace328553a corrected build error.
svn path=/trunk/; revision=10340
2004-08-01 15:56:15 +00:00
Jens Collin
9bedba895d merged with wine-version of dialogs.c and replaced CreateProcess-call with ShellExecute to be able to launch any file from start-menu
svn path=/trunk/; revision=10339
2004-08-01 15:37:06 +00:00
Thomas Bluemel
f9d899b01f fixed KDBG:=1 builds. Patch by blight
svn path=/trunk/; revision=10338
2004-08-01 11:40:37 +00:00
Martin Fuchs
d0f962adaf display different drive icons depending on the drive type
svn path=/trunk/; revision=10337
2004-08-01 11:26:13 +00:00
Martin Fuchs
09124408c9 integrate new drive icons of Klemens Friedl <frik85@hotmail.com>
(see http://reactosde.funpic.de/mediadetail.php?sec=Graphic%20arts&cat=icons&mdnr=8)

svn path=/trunk/; revision=10336
2004-08-01 11:24:43 +00:00
Martin Fuchs
79e842231c implement IServiceprovider interface
svn path=/trunk/; revision=10334
2004-08-01 09:26:27 +00:00
Hartmut Birr
06b9a76a1b - Stopped the printing of frames after the nice value 'deadbeef' in KeRosDumpStackFrames.
svn path=/trunk/; revision=10333
2004-08-01 07:28:43 +00:00
Hartmut Birr
b36f5c8459 - Changed all internal memory functions to use the page frame number instead of the physical address.
- Allowed MmCreateVirtualMapping to create mappings for more than one page.
- Used invplg to invalidate a single tlb entry.
- Simplified the access to the page tables/directories.

svn path=/trunk/; revision=10332
2004-08-01 07:27:25 +00:00
Hartmut Birr
fd411381da - Changed all internal memory functions to use the page frame number instead of the physical address.
- Allowed MmCreateVirtualMapping to create mappings for more than one page.

svn path=/trunk/; revision=10331
2004-08-01 07:24:59 +00:00
Magnus Olsen
5f1aa6ff61 change back after filps advace
svn path=/trunk/; revision=10330
2004-07-31 15:09:59 +00:00
Magnus Olsen
abcc1f252b DUMMYSTRUCTNAME1, DUMMYSTRUCTNAME1 s1, DUMMYUNIONNAME u1 where missing
did forget change DUMMYUNIONNAME u1 to DUMMYUNIONNAME1 u1

svn path=/trunk/; revision=10329
2004-07-31 14:47:09 +00:00
Eric Kohl
fa3393af0c Implement SeQuerySecurityDescriptorInfo().
svn path=/trunk/; revision=10328
2004-07-31 12:21:19 +00:00
Magnus Olsen
be56bd2bbd DUMMYSTRUCTNAME1, DUMMYSTRUCTNAME1 s1, DUMMYUNIONNAME u1 where missing
svn path=/trunk/; revision=10327
2004-07-31 12:10:32 +00:00
Magnus Olsen
f5848006c0 DUMMYSTRUCTNAME1, DUMMYSTRUCTNAME1 s1, DUMMYSTRUCTNAME1 u1 where missing
svn path=/trunk/; revision=10326
2004-07-31 12:04:23 +00:00
Hartmut Birr
ae9493fada - Used MmStats.NrFreePages instead of MiNrAvailablePages.
svn path=/trunk/; revision=10325
2004-07-31 09:44:36 +00:00
Hartmut Birr
b67cc5006c - Update the page counters in MmGetContinuousPages.
- Add a flag to PHYSICAL_PAGE, to detect if a free page is on the zeroed or on the unzeroed list.

svn path=/trunk/; revision=10324
2004-07-31 09:43:54 +00:00
James Tabor
f811b0ed5c Fix up SystemPageFileInfo and SystemCacheInfo. May not have all the right data.
svn path=/trunk/; revision=10322
2004-07-31 00:14:39 +00:00
James Tabor
1cac450d4c Moved KiTimerSystemAuditing flag to main.c.
svn path=/trunk/; revision=10321
2004-07-30 19:29:18 +00:00
James Tabor
3ba2c74617 Moved KiTimerSystemAuditing flag to main.c so it can set when everything is up and running. Also, turn the time auditing back on.
svn path=/trunk/; revision=10320
2004-07-30 19:28:49 +00:00
James Tabor
b31a0f3811 Implemented OpenThread and GetSystemTimes.
svn path=/trunk/; revision=10319
2004-07-30 19:18:39 +00:00
Thomas Bluemel
26ecba1c13 added "hide on minimize" feature and added context menu to the tray icon
svn path=/trunk/; revision=10318
2004-07-30 13:39:56 +00:00
Thomas Bluemel
61430b7b65 Patch by Filip Navaraf: Removed the mouse class gdi callback
svn path=/trunk/; revision=10317
2004-07-30 09:42:11 +00:00
Thomas Bluemel
6a79a66086 attempt to fix a few message queue and timer bugs
svn path=/trunk/; revision=10316
2004-07-30 09:16:06 +00:00
James Tabor
acb7361211 New Process & Thread time locking and experimental DPC accounting support.
svn path=/trunk/; revision=10315
2004-07-29 23:28:48 +00:00
James Tabor
a769548161 Add ps to system build.
svn path=/trunk/; revision=10314
2004-07-29 22:32:37 +00:00
James Tabor
cd7d90c696 New process listing command.
svn path=/trunk/; revision=10313
2004-07-29 22:31:56 +00:00
James Tabor
a514022aea Fixing Taskmgr and GlobalMemoryStatusEx return numbers.
svn path=/trunk/; revision=10312
2004-07-29 20:37:02 +00:00
Thomas Bluemel
7d74fb9d99 fixed compiling errors with gcc 3.4.x
svn path=/trunk/; revision=10311
2004-07-29 16:46:22 +00:00
Thomas Bluemel
a8c60b138d don't change selection if not capturing the console window
svn path=/trunk/; revision=10310
2004-07-29 13:54:45 +00:00
Thomas Bluemel
310098e324 fixed calculation of selected cells
svn path=/trunk/; revision=10309
2004-07-29 13:43:38 +00:00
Thomas Bluemel
1ee783cd7d fix assertion statement
svn path=/trunk/; revision=10308
2004-07-29 12:03:47 +00:00
Art Yerkes
bc0ec8c03d Fixed includes so that DBG keys on roscfg.h
Fixed subtle bug in miniport.c: if exactly one protocol is registered we
would skip it in MiniIndicateData because we took the .Flink value from the
list head, then compared CurrentEntry->Flink to the list head address.

svn path=/trunk/; revision=10307
2004-07-29 05:00:43 +00:00
Art Yerkes
c14c59021f Accidentally missed one breakpoint from the previous debugging session.
svn path=/trunk/; revision=10306
2004-07-29 04:10:53 +00:00
Art Yerkes
c0dd64494d Fixed memory overwrite due to too-small allocation.
svn path=/trunk/; revision=10305
2004-07-29 04:09:06 +00:00
Thomas Bluemel
b6a9c73c88 allow selecting text with the mouse in gui consoles
svn path=/trunk/; revision=10304
2004-07-28 22:28:50 +00:00
Steven Edwards
c9f548f45a Add all the new fonts to the bootcd.
svn path=/trunk/; revision=10303
2004-07-28 04:20:44 +00:00
Steven Edwards
7c8435a226 patch by Arty to fix casting issue.
I lost the old patch by Filip.

svn path=/trunk/; revision=10302
2004-07-28 04:20:12 +00:00
Steven Edwards
b4cbfd1d28 C++ flags not C Flags
svn path=/trunk/; revision=10301
2004-07-28 04:02:47 +00:00
Magnus Olsen
303ce93000 remove struct _DDSCAPSEX
it are allread in ddraw.h

svn path=/trunk/; revision=10298
2004-07-27 11:47:10 +00:00
Magnus Olsen
1e873b4f31 From wine include files for preption for directx support in reactos
no changes have been made on this file
to sync with wine only copy thuse file from wine when it need.

svn path=/trunk/; revision=10297
2004-07-27 10:46:27 +00:00
Magnus Olsen
c0779f51d4 From wine include files for preption for directx support in reactos
no changes have been made on this file
to sync with wine only copy thuse file from wine when it need.

svn path=/trunk/; revision=10296
2004-07-27 10:30:11 +00:00
Filip Navara
a646b85ed6 * dlls/shell32/shellpath.c: Aric Stewart <aric@codeweavers.com>
Make sure that the size of the buffer passed to RegSetValueExW is in
bytes not WCHARs.

svn path=/trunk/; revision=10291
2004-07-26 17:02:30 +00:00
James Tabor
2fe9583bc7 Patch for fixing EnumThreadWindows.
svn path=/trunk/; revision=10290
2004-07-26 14:58:35 +00:00
Eric Kohl
6b53247ee6 Remove dead code.
svn path=/trunk/; revision=10289
2004-07-26 13:19:34 +00:00
Eric Kohl
9528bf078e Implement SeValidSecurityDescriptor().
svn path=/trunk/; revision=10288
2004-07-26 12:44:40 +00:00
Eric Kohl
66a51a8a25 Implement NtSetSecurityObject().
svn path=/trunk/; revision=10287
2004-07-25 17:06:37 +00:00
Steven Edwards
6e3095a9e1 Cleaned up Taskmgr resources to break each language in
to its own resource file.

Spanish translation by Carlos Garcia Gomez.

svn path=/trunk/; revision=10286
2004-07-25 16:02:48 +00:00
Thomas Bluemel
9953b620f8 fixed compiling
svn path=/trunk/; revision=10285
2004-07-25 15:11:24 +00:00
Eric Kohl
f4fe39f27b Implement NtQuerySecurityObject() for objects that keep the security in the object header.
svn path=/trunk/; revision=10284
2004-07-25 12:39:28 +00:00
Eric Kohl
7d6581aebc Move generic access rights to a common header file and add missing access rights.
svn path=/trunk/; revision=10283
2004-07-25 12:36:45 +00:00
Martin Fuchs
8fb1163c02 recalculate start menu root position for any call
svn path=/trunk/; revision=10281
2004-07-24 20:09:45 +00:00
Thomas Bluemel
ce336586ba implementation of TouchFileTimes(), Thanks to Florian Stinglmayr for submitting a rough draft ;)
svn path=/trunk/; revision=10279
2004-07-24 10:42:55 +00:00
Thomas Bluemel
d7c54ad860 Krishna Murthy <Krishna.Murthy@guptaworldwide.com>
Modified EDIT_WM_Char() to restrict keying in of letters other than
	numbers when ES_NUMBER style is set.

svn path=/trunk/; revision=10278
2004-07-24 09:43:09 +00:00
Art Yerkes
5fd1995681 Parallel commit: See this osr page:
http://www.osr.com/ddk/network/103ndisx_51pu.htm
Fixes problem with reactos ne2000 driver and ndis resulting in random
heap corruption.  The NdisMEthIndicateReceive macro passes the
MiniportAdapterHandle, not the ETH_FILTER from inside it.

svn path=/trunk/; revision=10277
2004-07-24 04:49:33 +00:00
Art Yerkes
a85dce53e9 According to this osr page:
http://www.osr.com/ddk/network/103ndisx_51pu.htm

NdisMEthIndicateReceive passes an NDIS_HANDLE (Specifically,
MiniportAdapterHandle), rather than the ETH_FILTER structure.  God knows why
this wasn't caught before but it did awfully strange stuff including the
occasional crash, and more importantly, seemingly randomly corrupting the
LAN_ADAPTER and IP_INTERFACE structures in tcpip.sys when we landed in
packet receiving in datalink/lan.c.  Fixed now.

svn path=/trunk/; revision=10276
2004-07-24 04:48:01 +00:00
Thomas Bluemel
b477fd3439 ignore dependency files
svn path=/trunk/; revision=10275
2004-07-24 01:37:43 +00:00
Thomas Bluemel
b4c02404fd Sync with wine-20040724
svn path=/trunk/; revision=10274
2004-07-24 01:32:58 +00:00
Filip Navara
96364f9b04 - Fix WS_CAPTION style handling.
svn path=/trunk/; revision=10273
2004-07-24 01:28:15 +00:00
Filip Navara
5ada12c0d9 - Associate Irp with thread in NtSetInformationFile.
svn path=/trunk/; revision=10272
2004-07-24 01:28:04 +00:00
Filip Navara
e99d2b956a - Replace incorrect casts and comparsions by using the HIWORD macro so we get the correct debug info.
svn path=/trunk/; revision=10271
2004-07-24 01:28:01 +00:00
Filip Navara
05f0512081 - Fix OpenFile for OF_CREATE case.
svn path=/trunk/; revision=10270
2004-07-24 01:27:54 +00:00
Thomas Bluemel
8033e5b560 Sync with wine-20040724
svn path=/trunk/; revision=10269
2004-07-24 01:21:34 +00:00
Thomas Bluemel
bfcd174365 Sync with wine-20040724
svn path=/trunk/; revision=10268
2004-07-24 00:55:39 +00:00
Thomas Bluemel
c7c06a5864 Sync with wine-20040724
svn path=/trunk/; revision=10267
2004-07-24 00:45:31 +00:00
Thomas Bluemel
2effacb2e6 Sync with wine-20040724
svn path=/trunk/; revision=10266
2004-07-24 00:40:01 +00:00
Casper Hornstrup
abc9d6261c 2004-07-24 Casper S. Hornstrup <chorns@users.sourceforge.net>
* Makefile (DLLS): Add gdiplus.
	* apistatus.lst: Add gdiplus.dll.
	* baseaddress.cfg (TARGET_BASE_LIB_GDIPLUS): Declare.
	* bootdata/packages/reactos.dff: Add gdiplus.dll.
	* include/ntos/rtl.h (InsertTailList): Remove dependency on RtlAssert.
	* lib/gdiplus/(gdiplus, include, tests, tests/tests): New directories.
	* lib/gdiplus/(.cvsignore, gdiplus.def, gdiplus.edf, gdiplus.rc,
	makefile): New files.
	* lib/gdiplus/gdiplus/(.cvsignore, *.c): Ditto.
	* lib/gdiplus/include/(debug.h, GdiPlusPrivate.h): Ditto.
	* lib/gdiplus/tests/(.cvsignore, Makefile, passthrough.c): Ditto.
	* lib/gdiplus/tests/tests/(.cvsignore, test-1.c): Ditto.

svn path=/trunk/; revision=10265
2004-07-23 21:54:55 +00:00
Eric Kohl
013e3c728c Implement ObGetObjectSecurity() and ObReleaseObjectSecurity().
svn path=/trunk/; revision=10264
2004-07-23 21:44:10 +00:00
Jason Filby
23cd7fb231 Set TMPF_TRUETYPE flag for TEXTMETRICW variable in NtGdiGetTextMetrics if dealing with a TrueType font
svn path=/trunk/; revision=10263
2004-07-23 20:46:20 +00:00
Jason Filby
6c4e90a9ab Port GetCharacterPlacementW from WINE; copy lpString to lpResults->lpGlyphs if it (destination string) is not null
svn path=/trunk/; revision=10262
2004-07-23 20:41:09 +00:00
Casper Hornstrup
3d3df3bc4e 2004-07-23 Casper S. Hornstrup <chorns@users.sourceforge.net>
* Makefile, drivers/video/makefile, lib/cpl/Makefile, ntoskrnl/Makefile,
	tools/helper.mk: Add test target.
	* include/ntos/types.h (UINT16, PUINT16): Declare.
	* regtests/kmregtests/tests/mdl-1.c, regtests/kmregtests/tests/mdl-2.c,
	regtests/kmregtests/tests/mm-1.c, subsys/win32k/tests/tests/eng-mem-1.c:
	Simplify tests.
	* regtests/shared/regtests.c: Include <ctype.h> and <stdlib.h>.
	* regtests/shared/regtests.h (DISPATCHER): Declare the whole function.
	* tools/regtests.c: Refactor part of register_test into get_test_name();
	Stub for running tests in the build environment.
	* w32api/include/basetsd.h (INT16, PINT16, UINT16, PUINT16): Declare.
	* lib/user32/misc/exticon.c (UINT16): Remove declaration.

svn path=/trunk/; revision=10261
2004-07-23 20:03:26 +00:00
Casper Hornstrup
ba42192c97 2004-07-23 Casper S. Hornstrup <chorns@users.sourceforge.net>
* rules.mak: Be silent only if VERBOSE=no.

svn path=/trunk/; revision=10260
2004-07-23 19:07:44 +00:00
Casper Hornstrup
6dbdb2b832 2004-07-23 Casper S. Hornstrup <chorns@users.sourceforge.net>
* rules.mak: Do not print "'target' is up to date." messages.

svn path=/trunk/; revision=10259
2004-07-23 17:48:10 +00:00
Eric Kohl
38d792196e Move security information constants.
svn path=/trunk/; revision=10258
2004-07-23 09:26:29 +00:00
James Tabor
b2f73e07c8 Added thread counting with PsEnumThreadsByProcess and thread support in SystemProcessInformation.
svn path=/trunk/; revision=10257
2004-07-23 07:44:26 +00:00
Filip Navara
651d364842 - Fix handling of METHOD_IN_DIRECT IRPs.
svn path=/trunk/; revision=10256
2004-07-22 20:40:17 +00:00
Filip Navara
bdedaa4fe0 - Support for deserialized miniports (experimental).
svn path=/trunk/; revision=10255
2004-07-22 18:54:36 +00:00
Filip Navara
6e64d6266e - Implementation of HalReadDmaCounter.
- Cleaned up implementation of HalGetAdapter. Moved the initialization
  stuff from there to HalpInitDma that is called by HalInitSystem.
- Let HalAllocateCommonBuffer allocated 64K aligned memory.
- Change IoMapTransfer to support auto initialize and single transfer mode,
  16-bit DMA and common buffers.
- Stop DMA transfer in IoFlushAdapterBuffers.

svn path=/trunk/; revision=10254
2004-07-22 18:49:18 +00:00
Eric Kohl
ec5f846d4c - Add security function for file and registry key objects.
- Implement ObAssignSecurity().

svn path=/trunk/; revision=10253
2004-07-22 18:38:08 +00:00
James Tabor
b6e1dfaded Fixing time accounting errors when mult & div into LARGE_INTEGER.
svn path=/trunk/; revision=10252
2004-07-22 17:22:38 +00:00
Filip Navara
46e6b49f21 - Fix handling of METHOD_IN_DIRECT IRPs.
svn path=/trunk/; revision=10251
2004-07-22 16:21:39 +00:00
James Tabor
0b05c8aa29 Fix DosDateTimeToFileTime too.
svn path=/trunk/; revision=10248
2004-07-22 06:28:52 +00:00
James Tabor
b95aac5417 You can not stuff 60 seconds in 5 bits.
svn path=/trunk/; revision=10247
2004-07-22 06:07:02 +00:00
Filip Navara
58adcd8099 - Fix initialization order.
svn path=/trunk/; revision=10246
2004-07-22 02:36:43 +00:00
Filip Navara
c846dde012 - Fix heap corruption on converting ANSI -> UNICODE strings.
svn path=/trunk/; revision=10245
2004-07-22 02:32:53 +00:00
Filip Navara
b4b6a5f134 - Map the GENERIC_* flags depending of the object type in IoCreateFile.
svn path=/trunk/; revision=10244
2004-07-22 02:32:43 +00:00
Filip Navara
d17f542edd Revert this patch:
- Convert the user mode dwDesiredAccess flags in CreateFile to the kernel mode ones that are used by NtCreateFile.

svn path=/trunk/; revision=10243
2004-07-22 02:32:40 +00:00
Eric Kohl
5d44bfe942 Implement simple DACL inheritance.
svn path=/trunk/; revision=10242
2004-07-21 23:38:15 +00:00
Casper Hornstrup
88662ac62e 2004-07-21 Casper S. Hornstrup <chorns@users.sourceforge.net>
* w32api/include/(GdiPlus.h, GdiPlusBase.h, GdiPlusBrush.h, GdiPlusColor.h,
	GdiPlusColorMatrix.h, GdiPlusEffects.h, GdiPlusEnums.h, GdiPlusFlat.h,
	GdiPlusGpStubs.h, GdiPlusGraphics.h, GdiPlusHeaders.h,
	GdiPlusImageAttributes.h, GdiPlusImaging.h GdiPlusInit.h,
	GdiPlusLineCaps.h, GdiPlusMatrix.h, GdiPlusMem.h, GdiPlusMetaFile.h,
	GdiPlusMetaHeader.h, GdiPlusPath.h, GdiPlusPen.h, GdiPlusPixelFormats.h,
	GdiPlusStringFormat.h, GdiPlusTypes.h): New files.

svn path=/trunk/; revision=10241
2004-07-21 20:10:05 +00:00
Martin Fuchs
6dc20a8084 use same startmenu entries height as MS explorer
svn path=/trunk/; revision=10240
2004-07-21 19:05:19 +00:00
Casper Hornstrup
4175709d6c 2004-07-21 Casper S. Hornstrup <chorns@users.sourceforge.net>
* rules.mak, iface/addsys/makefile, iface/native/makefile,
	tools/Makefile: Be quiet if VERBOSE=no.
	* tools/helper.mk: Print module name if it was successfully built.
	* tools/regtests.c, tools/wine2ros/wine2ros.c: Be quiet.

svn path=/trunk/; revision=10239
2004-07-21 18:17:50 +00:00
Alex Ionescu
0b9e69fecf Implemented PsGetThreadFreezeCount, PsGetThreadHardErrorsAreDisabled, PsGetThreadId, PsGetThreadProcess, PsGetThreadProcessId, PsGetThreadSessionId, PsGetThreadTeb, PsGetThreadWin32Thread, PsGetCurrentThreadPreviousMode, PsGetCurrentThreadStackBase, PsGetCurrentThreadStackLimit, PsSetThreadHardErrorsAreDisabled, PsSetThreadWin32Thread
svn path=/trunk/; revision=10238
2004-07-21 01:05:26 +00:00
Alex Ionescu
2afa5d7040 Implemented PsGetProcessCreateTimeQuadPart, PsGetProcessDebugPort, PsGetProcessExitProcessCalled, PsGetProcessExitStatus, PsGetProcessId, PsGetProcessImageFileName, PsGetProcessInheritedFromUniqueProcessId, PsGetProcessPeb,
PsGetProcessPriorityClass, PsGetProcessSectionBaseAddress,
PsGetProcessSecurityPort, PsGetProcessWin32Process,
PsGetProcessWin32WindowStation, PsIsProcessBeingDebugged,
PsGetCurrentProcessSessionId, PsGetProcessSessionId, PsSetProcessPriorityClass, PsSetProcessSecurityPort, PsSetProcessWin32Process, PsSetProcessWin32WindowStation

svn path=/trunk/; revision=10237
2004-07-20 23:58:35 +00:00
Hartmut Birr
f8db6a5d2a - Replaced all single pushf/popf inline assembler instructions with a macro
which doesn't change the stack layout.

svn path=/trunk/; revision=10236
2004-07-20 21:25:36 +00:00
Steven Edwards
54ed416bfe added msacm32.dll to the build. This gets Winamp loading.
Cleaned up the list of libs a bit.

svn path=/trunk/; revision=10235
2004-07-20 19:24:39 +00:00
Steven Edwards
55a9f27fef These files are auto-generated.
svn path=/trunk/; revision=10234
2004-07-20 19:14:48 +00:00
Alex Ionescu
27a729d88d Implemented ImageLoad, MapAndLoad, ImageRvaToVa, ImageRvaToSection, ImageDirectoryEntryToData, GetImageUnusedHeaderBytes and BindImageEx
svn path=/trunk/; revision=10233
2004-07-20 16:48:18 +00:00
Eric Kohl
c5ad1ab780 SeAssignSecurity:
- Build a self-relative security descriptor.
- Inherit owner and group SIDs or assign useful default SIDs.
- Copy DACL from explicit secuity descriptor.

svn path=/trunk/; revision=10232
2004-07-20 12:08:04 +00:00
Filip Navara
ce98b463a5 - Fix handling of METHOD_IN_DIRECT IRPs.
svn path=/trunk/; revision=10231
2004-07-20 11:06:47 +00:00
Steven Edwards
3a9f5e2f86 the resources are still in upper case. Adjust the RC to match this to fix the linux build
svn path=/trunk/; revision=10230
2004-07-19 21:51:49 +00:00
Gregor Anich
10b4b57ad4 Don't interpret \\r\\n as 2 newlines.
svn path=/trunk/; revision=10229
2004-07-19 19:40:01 +00:00
Thomas Bluemel
7497d9c86e fixed calculation of memory address
svn path=/trunk/; revision=10228
2004-07-19 17:55:33 +00:00
Eric Kohl
de32ec78dc - Add @implemented tag to NtMakePermanentObject().
- Capture the security context before calling SeAsignSecurity() and release it later.

svn path=/trunk/; revision=10227
2004-07-19 12:48:59 +00:00
Eric Kohl
ae95148c4b SeCaptureSubjectContext() must not crash if no current thread exists.
svn path=/trunk/; revision=10226
2004-07-19 12:45:56 +00:00
Thomas Bluemel
06272913f0 added missing colors
svn path=/trunk/; revision=10225
2004-07-19 12:13:45 +00:00
Thomas Bluemel
ae734f5bd5 fixed file names
svn path=/trunk/; revision=10224
2004-07-19 09:55:26 +00:00
Thomas Bluemel
f1075c6387 fixed file names
svn path=/trunk/; revision=10223
2004-07-19 09:54:46 +00:00
Alex Ionescu
87ea80f6b7 Added Ps Stubs and Prototypes.
svn path=/trunk/; revision=10222
2004-07-19 06:08:21 +00:00
Alex Ionescu
8aab59acbf Added OPTIMIZED Flag to config file to build optimized versions of NTOSKRNL and WIN32K. Disabled by default.
svn path=/trunk/; revision=10221
2004-07-19 04:52:24 +00:00
Art Yerkes
659a6041bc Forgot to add file tilists.h
svn path=/trunk/; revision=10220
2004-07-19 04:30:04 +00:00
Gero Kuehn
42d52c68a5 added preparations for installing .INF files (for class installers) during setup, added Reactos\Inf
svn path=/trunk/; revision=10219
2004-07-19 01:33:48 +00:00
Filip Navara
48316edcd9 - Change IoReportResourceUsage from using UNIMPLEMENTED macro to just print an message that the function is unimplemented.
svn path=/trunk/; revision=10218
2004-07-18 23:52:50 +00:00
Filip Navara
f810ae11e4 - Change length checking semantics of NtEnumerateKey for KeyBasicInformation.
- Correct buffer size calculations.

svn path=/trunk/; revision=10217
2004-07-18 23:52:38 +00:00
Filip Navara
579f24da75 - Properly set last error in WaitForSingleObjectEx.
svn path=/trunk/; revision=10216
2004-07-18 23:52:31 +00:00
Filip Navara
9ec9ff807a - RegEnumValueW should fill in *lpcbData if lpData == NULL.
svn path=/trunk/; revision=10215
2004-07-18 23:52:30 +00:00
Art Yerkes
6a793b2703 Fixed after prototype change.
svn path=/trunk/; revision=10212
2004-07-18 22:53:59 +00:00
Art Yerkes
a01c282993 Changed include for afd.
svn path=/trunk/; revision=10211
2004-07-18 22:50:52 +00:00
Art Yerkes
0f1eb55991 First commit of afd and msafd onto head.
tcpip: Turned off debug info in CVS.

svn path=/trunk/; revision=10210
2004-07-18 22:49:18 +00:00
Gero Kuehn
cd35daab59 added initial version of the network cpl
svn path=/trunk/; revision=10209
2004-07-18 22:37:08 +00:00
Gero Kuehn
5633682080 added registry entries for the network configuration
svn path=/trunk/; revision=10208
2004-07-18 22:25:05 +00:00
Art Yerkes
6ac4bce416 msafd + afd: Changed type of PVOID args to PAFD_WSABUF, avoiding some casts.
Added some tracing.
Converted afd.sys to use METHOD_NEITHER in the correct places.
oskittcp: Added some tracking in tcp_input and tcp_output to help look for
the ack bug.
tcpip: some cleaning.  Realized that an NTE was getting sent to IPReceive as
the Context parameter, but was later treated as IP_INTERFACE.  Changed
prototypes to keep this from happening again.

svn path=/trunk/; revision=10207
2004-07-18 22:03:49 +00:00
Thomas Bluemel
430efd137f don't create read-only files
svn path=/trunk/; revision=10206
2004-07-18 21:39:55 +00:00
Gregor Anich
06dd253e6e Delete read-only files too.
svn path=/trunk/; revision=10205
2004-07-18 21:15:47 +00:00
Alex Ionescu
c49a1aa591 Fixed broken build. Added functions were already defined in /lib/rtl and unecessary in ntoskrnl.
svn path=/trunk/; revision=10204
2004-07-18 17:45:28 +00:00
Magnus Olsen
288862f4dc *** empty log message ***
svn path=/trunk/; revision=10202
2004-07-18 17:38:17 +00:00
Filip Navara
5586cebc70 - Since DirecrSound is not implemented at all we should return error in DirectSoundCreate.
svn path=/trunk/; revision=10201
2004-07-18 17:16:57 +00:00
Filip Navara
cf649ce107 - Convert the user mode dwDesiredAccess flags in CreateFile to the kernel mode ones that are used by NtCreateFile.
svn path=/trunk/; revision=10200
2004-07-18 17:08:29 +00:00
Filip Navara
6a7a2b5854 - Fallback implementation in waveOut[Un]PrepareHeader.
svn path=/trunk/; revision=10199
2004-07-18 17:06:03 +00:00
Thomas Bluemel
a8da150d8b Added and updated some German translations. Patch by Michael Fritscher.
svn path=/trunk/; revision=10198
2004-07-18 16:07:58 +00:00
Thomas Bluemel
e88c525321 cvs maintainance
svn path=/trunk/; revision=10197
2004-07-18 16:00:05 +00:00
Eric Kohl
4962573e85 Use SeAssignSecurity() to build a security descriptor for a new object.
svn path=/trunk/; revision=10196
2004-07-18 13:03:43 +00:00
Martin Fuchs
04642b4ea7 precompiled header support for GCC 3.4.1
svn path=/trunk/; revision=10194
2004-07-18 13:03:06 +00:00
Eric Kohl
9e08323787 Implement most simple code path of SeAssignSecurity().
svn path=/trunk/; revision=10193
2004-07-18 13:02:28 +00:00
Gregor Anich
9ba0b83e50 Added RosRtlDevModeW2A function.
svn path=/trunk/; revision=10192
2004-07-18 12:51:46 +00:00
Martin Fuchs
b96e6b7b0a eliminate useless GCC warning by initializing the entry variable
svn path=/trunk/; revision=10191
2004-07-18 09:31:02 +00:00
Martin Fuchs
4afe092bc0 fix UNICODE string buffer allocation
svn path=/trunk/; revision=10190
2004-07-18 09:20:38 +00:00
Gregor Anich
f7dff7223a Fix EnumDisplaySettingsExA (did not output anything into devmode)
svn path=/trunk/; revision=10189
2004-07-18 00:36:33 +00:00
Gregor Anich
cec39741e7 Added RosRtlDevModeW2A function.
svn path=/trunk/; revision=10188
2004-07-18 00:30:08 +00:00
Filip Navara
5a725770bc - Fixed memory referencing in mmTaskCreate.
svn path=/trunk/; revision=10187
2004-07-17 22:28:23 +00:00
Thomas Bluemel
e5b2c95bf3 simplified assigning DDI functions
svn path=/trunk/; revision=10186
2004-07-17 21:10:25 +00:00
Eric Kohl
491fa2e1ef Assign a security descriptor to the root directory object.
svn path=/trunk/; revision=10185
2004-07-17 20:34:42 +00:00
Eric Kohl
23dac2681b Create missing default DACLs.
svn path=/trunk/; revision=10184
2004-07-17 20:32:11 +00:00
Gregor Anich
349c610706 Removed some comments - previous change didn't fix infinite re-creation of print.c deps for me.
svn path=/trunk/; revision=10183
2004-07-17 17:37:41 +00:00
Filip Navara
70d717f742 - Disable debug messages.
svn path=/trunk/; revision=10182
2004-07-17 17:24:45 +00:00
Filip Navara
9eee1e99ee - RegQueryValueExW shouldn't touch *lpcbData if lpData == NULL.
svn path=/trunk/; revision=10179
2004-07-17 16:09:07 +00:00
Gregor Anich
96e0da3b7b Changed comments a bit, previous version did create print.c dependencies over and over again for me.
svn path=/trunk/; revision=10178
2004-07-17 15:52:43 +00:00
Gregor Anich
1bd5f9a981 Handle return value 0 from ExtEscape as special case (means to use the default driver)
svn path=/trunk/; revision=10177
2004-07-17 15:13:37 +00:00
Gregor Anich
13bc74184a Handle escape to get opengl driver info in IntEngExtEscape to avoid the infinite loop in the UNIMPLEMENTED macro (needed by opengl32.dll)
svn path=/trunk/; revision=10176
2004-07-17 15:12:25 +00:00
Eric Kohl
a3a123ab31 Implement NtMakePermanentObject().
svn path=/trunk/; revision=10175
2004-07-17 12:08:21 +00:00
Alex Ionescu
14f18e7d6d Added exports for new stubs and fixed some issues with recently commited stubs.
svn path=/trunk/; revision=10174
2004-07-17 05:13:05 +00:00
Alex Ionescu
c015d55c31 Added keys for Winsock
svn path=/trunk/; revision=10173
2004-07-17 04:17:32 +00:00
Alex Ionescu
6a9ab71231 Added keys for Winsock
svn path=/trunk/; revision=10172
2004-07-17 04:04:08 +00:00
Alex Ionescu
4762b47e36 Added New System Call Prototypes and Stubs
svn path=/trunk/; revision=10171
2004-07-17 03:07:00 +00:00
Alex Ionescu
e7874284d0 Added Mm Prototypes
svn path=/trunk/; revision=10170
2004-07-17 03:04:45 +00:00
Alex Ionescu
a0e9802e90 Added Mm Stubs
svn path=/trunk/; revision=10169
2004-07-17 03:03:52 +00:00
Gregor Anich
60676902f6 Fix loading of default driver.
svn path=/trunk/; revision=10168
2004-07-17 02:26:33 +00:00
Alex Ionescu
858364e468 Added keys for Winsock
svn path=/trunk/; revision=10167
2004-07-17 01:12:24 +00:00
Gregor Anich
a69987ef04 Add registry entries for the Mesa OpenGL driver.
svn path=/trunk/; revision=10166
2004-07-16 23:53:38 +00:00
Gregor Anich
3351ce053d Fixed more warnings, compiles with -Werror now.
svn path=/trunk/; revision=10165
2004-07-16 23:48:54 +00:00
Steven Edwards
73cbc815c1 moved these docs to a folder. The file names broke the
livecd build

svn path=/trunk/; revision=10164
2004-07-16 23:41:14 +00:00
Filip Navara
cf38bc01b7 - Get rid of linker warnings.
svn path=/trunk/; revision=10163
2004-07-16 23:37:26 +00:00
Gregor Anich
e62f0e4796 Fix warning.
svn path=/trunk/; revision=10162
2004-07-16 23:35:19 +00:00
Gregor Anich
3231bd4977 Remove unused files.
svn path=/trunk/; revision=10161
2004-07-16 23:29:10 +00:00
Alex Ionescu
37b963937e Added keys for Winsock
svn path=/trunk/; revision=10160
2004-07-16 23:28:55 +00:00
Gregor Anich
a535f99338 Fix some warnings.
svn path=/trunk/; revision=10159
2004-07-16 23:21:04 +00:00
Steven Edwards
89746fb06e cleanup
svn path=/trunk/; revision=10157
2004-07-16 23:01:56 +00:00
Steven Edwards
0ff1d5da1c Fix building on Linux
svn path=/trunk/; revision=10156
2004-07-16 22:59:43 +00:00
Gregor Anich
6d2d63a8e1 Fix unknown pragma warnings and gl.h include for linux builds.
svn path=/trunk/; revision=10155
2004-07-16 22:54:48 +00:00
Gregor Anich
794c39610f Fix unknown pragma warnings.
svn path=/trunk/; revision=10154
2004-07-16 22:45:08 +00:00
Steven Edwards
76b091d0f5 added Spanish translation by Carlos Garcia Gomez.
svn path=/trunk/; revision=10152
2004-07-16 22:33:23 +00:00
Gregor Anich
46de716b21 Import Mesa-6.0.1 for use as software OpenGL renderer.
svn path=/trunk/; revision=10151
2004-07-16 22:32:04 +00:00
Steven Edwards
9be76f0f19 added Spanish translation by Carlos Garcia Gomez.
svn path=/trunk/; revision=10150
2004-07-16 22:24:24 +00:00
Gregor Anich
6fc4d22bde Import Mesa-6.0.1 for use as software OpenGL renderer.
svn path=/trunk/; revision=10149
2004-07-16 22:12:43 +00:00
Gregor Anich
a3ce97af9b Import Mesa-6.0.1 for use as software OpenGL renderer.
svn path=/trunk/; revision=10148
2004-07-16 21:50:40 +00:00
Jens Collin
15971f9aa5 ShellExecute is run when executable is not found to open for example Notepad files by typing "myfile.txt".
svn path=/trunk/; revision=10147
2004-07-16 20:39:06 +00:00
Filip Navara
016e6a3f65 - Implementation of mmTaskCreate. Based on patch by Eric Pouech.
svn path=/trunk/; revision=10146
2004-07-16 20:24:59 +00:00
Thomas Bluemel
f82a992ec2 fixed typo
svn path=/trunk/; revision=10145
2004-07-16 20:20:53 +00:00
Eric Kohl
fa2ac0c0ca Fix an old typo.
svn path=/trunk/; revision=10144
2004-07-16 19:54:05 +00:00
Art Yerkes
fbdcc7cb6f Fonts converted by Larry Snyder
Converted suitably licensed X fonts from type 1 to TTF for use in ROS.

svn path=/trunk/; revision=10143
2004-07-16 17:21:05 +00:00
Eric Kohl
9d87061713 Implement security descriptor cache.
svn path=/trunk/; revision=10142
2004-07-16 17:20:23 +00:00
Gregor Anich
243d59c9e6 Fix some bugs, works on Windows and ReactOS with Mesa and NVIDIA driver.
x86 asm version of gl dispatch functions work now too (in gl.c)

svn path=/trunk/; revision=10141
2004-07-16 16:16:16 +00:00
Alex Ionescu
28e3667b69 Fixed prototypes to work in MSVC.
svn path=/trunk/; revision=10139
2004-07-16 13:45:02 +00:00
Filip Navara
3ab4ec1f54 - Handle indexed palettes in IntEngCreateSrcMonoXlate.
svn path=/trunk/; revision=10135
2004-07-15 21:14:51 +00:00
Martin Fuchs
e7d21fa39e ignore unexpected exceptions while extracting icons
svn path=/trunk/; revision=10133
2004-07-15 21:04:02 +00:00
Martin Fuchs
4fd7ec5f63 replace BUFFER_LEN by dynamic allocations
svn path=/trunk/; revision=10132
2004-07-15 20:43:18 +00:00
Filip Navara
3281baa0bf - Minor correction to DIB_32BPP_BitBlt that I broke with my last patch.
svn path=/trunk/; revision=10126
2004-07-15 18:13:22 +00:00
Eric Kohl
64b9c0f3cc Implement RtlAddAuditAccessAceEx().
svn path=/trunk/; revision=10125
2004-07-15 08:15:49 +00:00
James Tabor
b1fb96b44c Clear Partition0 DriveNotReady, for Removable Media.
svn path=/trunk/; revision=10124
2004-07-15 04:04:08 +00:00
Art Yerkes
e6f5d067e0 oskittcp: fixed handling of uio in send.
afd: fixed send.
tcpip: fixed double-complete of send irp.

svn path=/trunk/; revision=10122
2004-07-15 03:21:47 +00:00
Art Yerkes
9ce1fe0ddb Small changes to debug output in catalog, handle, upcall.
ns.c -- getservbyport contributed by Cameron Palmer.

svn path=/trunk/; revision=10121
2004-07-15 02:03:07 +00:00
Steven Edwards
c26b523ad9 added Spanish translation by Carlos Garcia Gomez.
svn path=/trunk/; revision=10120
2004-07-14 22:20:07 +00:00
Steven Edwards
383e5a9c1a Warn rather than bail on HWND_MESSAGE windows
request. This gets the Scintilla Editor from theopencd to work.

svn path=/trunk/; revision=10119
2004-07-14 21:52:23 +00:00
Filip Navara
3baccc96f1 - Accidently commited this file with my last patch. Reverting.
svn path=/trunk/; revision=10118
2004-07-14 21:45:05 +00:00
Filip Navara
219e1664cf - Add FIXME comment to LoadIconImage.
svn path=/trunk/; revision=10117
2004-07-14 20:52:13 +00:00
Filip Navara
dcbabca872 - Change the prototype of DIB_*_BitBlt* functions to take a pointer to a BLTINFO structure instead of many parameters.
- Make DIB_GetSource and DIB_GetSourceIndex macros.
- Add IntEngCreateSrcMonoXlate.
- Change the semantics of IntEngCreate*Xlate functions to treat palette mode == 0 as mode of the passed palette.
- Add XlateBrush and XlatePen to the DC structure.
- Fixed the bad design decision that caused mess when one brush was selected into more than one DC.
- Remove incorrect Int[Get/Set]DCColor implementation (used by [Get/Set]DC[Pen/Brush]Color).
- Get rid of compiler warnings in Win32k.

svn path=/trunk/; revision=10116
2004-07-14 20:48:58 +00:00
Steven Edwards
d0ba990059 Sync msacm32 with Winehq cvs. will merge my tweaks soon.
This gets Winamp5 loading.

svn path=/trunk/; revision=10115
2004-07-14 18:30:54 +00:00
Steven Edwards
d1d2a0a14a Use Bitstream Vera Sans for Helv subsititute. This makes the Run dialog readable. Thanks to Filip Navara.
svn path=/trunk/; revision=10114
2004-07-14 17:47:03 +00:00
Steven Edwards
93cfddbb38 Added licensing page to usetup.
svn path=/trunk/; revision=10112
2004-07-14 16:24:00 +00:00
Eric Kohl
c6ec21e207 - Move access checks from NtAccessCheck() to SeAccessCheck().
- Check for 'take ownership' privilege.

svn path=/trunk/; revision=10111
2004-07-14 14:25:31 +00:00
Gé van Geldorp
6e17c87e59 Split "old-style Win 3.1" file dialog into 16 and 32 bit code
svn path=/trunk/; revision=10110
2004-07-14 06:52:29 +00:00
Filip Navara
cbda303409 - Revert part of my last TLS patch.
svn path=/trunk/; revision=10109
2004-07-14 02:40:45 +00:00
Eric Kohl
91946de006 First experimental implementstion of NtAccessCheck().
This should fix bug #362.

svn path=/trunk/; revision=10108
2004-07-13 16:59:35 +00:00
Eric Kohl
4cc77e37cc Move some access rights so they are usable form kernel-mode.
svn path=/trunk/; revision=10107
2004-07-13 16:57:35 +00:00
Eric Kohl
3e7bd9bd79 RtlImpersonateSelf(): Set impersonation level in call to NtDuplicateToken().
svn path=/trunk/; revision=10106
2004-07-13 11:52:09 +00:00
Eric Kohl
3ed7b52fb9 NtOpenThreadToken() opens the thread token if OpenAsSelf is FALSE.
svn path=/trunk/; revision=10105
2004-07-13 11:48:32 +00:00
Eric Kohl
eda69bc46f NtDuplicateToken() must create and return a handle to the duplicated token.
svn path=/trunk/; revision=10104
2004-07-13 08:43:35 +00:00
James Tabor
6e5edb7df9 Force a rebuild of the partition table if it already exists with a DeviceObject.
svn path=/trunk/; revision=10103
2004-07-13 02:43:06 +00:00
Gé van Geldorp
1605dba90a SetLogonNotifyWindow is now implemented
svn path=/trunk/; revision=10102
2004-07-12 22:34:27 +00:00
Gé van Geldorp
9a26dd9c78 Fix RestartDialog() and RestartDialogEx() prototypes
svn path=/trunk/; revision=10101
2004-07-12 22:07:34 +00:00
Gé van Geldorp
0cffba8389 Robert Shearman <R.J.Shearman@warwick.ac.uk>
- Make ole32 a delay-load import of shell32.
(except that the ReactOS build system doesn't handle delay-load imports
yet, so make it a normal import)

svn path=/trunk/; revision=10100
2004-07-12 22:03:09 +00:00
Gé van Geldorp
bd1c1f6d7b Fix syntax problem for some windres versions
svn path=/trunk/; revision=10099
2004-07-12 22:01:22 +00:00
Gé van Geldorp
935851acb6 Ilya Korniyko <k_ilya@ukr.net>
- Added Ukrainian translations.
Jos� Manuel Ferrer Ortiz <jmfo1982@yahoo.es>
- Updated the Spanish shell32 translation and made some corrections to
  other language files.

svn path=/trunk/; revision=10098
2004-07-12 21:26:39 +00:00
Gé van Geldorp
55dc46bf13 Use string resources for ExitWindowsDialog() and RestartDialogEx() to allow
internationalization.

svn path=/trunk/; revision=10097
2004-07-12 20:53:24 +00:00
Gé van Geldorp
aa38cd0cd1 Marcus Meissner <marcus@jet.franken.de>
- Fixed double applet = applet = assignment.
- Removed sic_hdpa only used in 1 C file as static var.
- Make VT_Shell_IMalloc32 and related variables static.

svn path=/trunk/; revision=10096
2004-07-12 20:32:16 +00:00
Gé van Geldorp
a1f4820c31 Shutdown step 1: inform winlogon (forgotten file)
svn path=/trunk/; revision=10095
2004-07-12 20:26:35 +00:00
Gé van Geldorp
4ce7742222 Shutdown step 1: inform winlogon
svn path=/trunk/; revision=10094
2004-07-12 20:09:35 +00:00
Eric Kohl
16a868a4e7 Replace hardcoded values by new constants.
svn path=/trunk/; revision=10092
2004-07-12 19:39:29 +00:00
Thomas Bluemel
11997022fd forgot to export 2 functions
svn path=/trunk/; revision=10091
2004-07-12 16:27:46 +00:00
Thomas Bluemel
32b2a4dc1a implementation of HidD_GetHidGuid()
svn path=/trunk/; revision=10090
2004-07-12 16:04:37 +00:00
Thomas Bluemel
ef8c92364b added stubs for the Hid User Library (hid.dll)
svn path=/trunk/; revision=10089
2004-07-12 15:08:43 +00:00
Eric Kohl
32e7b224da Define missing PNTSTATUS.
svn path=/trunk/; revision=10088
2004-07-12 13:51:29 +00:00
Eric Kohl
72b6ef30e7 Fix NtAccessCheck() prototype.
svn path=/trunk/; revision=10087
2004-07-12 12:05:49 +00:00
Thomas Bluemel
ad9cdc4edc simplified dynamic loading of dlls
svn path=/trunk/; revision=10086
2004-07-12 10:33:04 +00:00
Thomas Bluemel
6535d130b7 removed wrong comments
svn path=/trunk/; revision=10085
2004-07-11 23:08:31 +00:00
Thomas Bluemel
02c02382be do not statically link to ole32.dll, import the functions dynamically instead. This is required since winlogon statically links to userenv.dll and then ole32.dll would automatically be loaded which causes ole32.dll to register a window class before the first window station is created (-> the ole32 window class(es) couldn't be registered). Besides it's bad to have winlogon depend on ole32.dll
svn path=/trunk/; revision=10083
2004-07-11 22:35:07 +00:00
Gé van Geldorp
093e925a66 Use default PATHEXT if none found in environment
svn path=/trunk/; revision=10082
2004-07-11 16:23:12 +00:00
Gé van Geldorp
c8d9ece95d Jens Collin <jens.collin@lakhei.com>
Add PATHEXT env var and use it to locate command

svn path=/trunk/; revision=10081
2004-07-11 16:13:44 +00:00
Eric Kohl
839cdb0644 Add missing security constants.
svn path=/trunk/; revision=10080
2004-07-11 16:09:37 +00:00
Eric Kohl
8d58125bdc Fix typo in SetSecurityDescriptorOwner().
svn path=/trunk/; revision=10079
2004-07-11 13:33:40 +00:00
Thomas Bluemel
f85cea6c2c register the winlogon application directly after startup
svn path=/trunk/; revision=10078
2004-07-11 13:31:28 +00:00
Filip Navara
85cec6dde5 - Fixed locking in NtGdiGetCharWidth32. This caused problems with AbiWord reported by Jason Filby.
svn path=/trunk/; revision=10076
2004-07-11 02:10:48 +00:00
Thomas Bluemel
ce4aa8ef2e added a key security editor (not yet working properly)
svn path=/trunk/; revision=10075
2004-07-10 23:25:17 +00:00
Thomas Bluemel
13eda5be1f added some missing definitions
svn path=/trunk/; revision=10074
2004-07-10 23:23:06 +00:00
Gero Kuehn
b563ceb9af added SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
svn path=/trunk/; revision=10073
2004-07-10 22:27:18 +00:00
Gero Kuehn
948db6b780 fixed PROPSHEETHEADER nPages calculation
svn path=/trunk/; revision=10072
2004-07-10 22:06:40 +00:00
Gero Kuehn
7933210d3c copied HalRequestSoftwareInterrupt from uniproc irql.c to fix SMP builds
svn path=/trunk/; revision=10071
2004-07-10 21:58:35 +00:00
Steven Edwards
14a26ef7bf added expand.exe and msvfw32.dll to the build.
svn path=/trunk/; revision=10070
2004-07-10 21:44:14 +00:00
Gé van Geldorp
c01cec79d9 Roll back __USE_W32API test, add _tsplitpath definition
svn path=/trunk/; revision=10069
2004-07-10 21:23:18 +00:00
Steven Edwards
2396faea94 Added msvfw32 ported from Wine. This fixes bug 388.
svn path=/trunk/; revision=10068
2004-07-10 21:19:46 +00:00
Eric Kohl
e32637bc50 Fix default DACL of the logon token.
svn path=/trunk/; revision=10067
2004-07-10 21:15:26 +00:00
Steven Edwards
43a041190d Removed Microsoft code.
svn path=/trunk/; revision=10066
2004-07-10 21:11:13 +00:00
Hartmut Birr
3768902d9b - Implemented NtQueryVirtualMemory for unallocated regions.
- Fixed some minor bugs in NtQueryVirtualMemory and its related query functions.

svn path=/trunk/; revision=10065
2004-07-10 17:01:03 +00:00
Thomas Bluemel
35f4d34682 export GetSecurityInfo()
svn path=/trunk/; revision=10064
2004-07-10 14:38:24 +00:00
Eric Kohl
5b9cf862e0 Create group SIDs for logon token.
svn path=/trunk/; revision=10063
2004-07-10 13:12:24 +00:00
Eric Kohl
39da3d41f9 Fix RtlEqualSid().
svn path=/trunk/; revision=10062
2004-07-10 13:11:18 +00:00
Hartmut Birr
7f900f8f7e - Fixed the return value in VirtualQueryEx if NtQueryVirtualMemory returns an error.
svn path=/trunk/; revision=10061
2004-07-10 13:08:02 +00:00
Hartmut Birr
95e1a9b247 - Fixed the comparing of video modes in IntInitScreenInfo.
svn path=/trunk/; revision=10060
2004-07-10 13:05:08 +00:00
Gé van Geldorp
4f24993634 FindWindow() should search the threads desktop, not the active one.
svn path=/trunk/; revision=10059
2004-07-09 20:57:38 +00:00
Filip Navara
fe2b1d6967 - Implementation of [NtGdi]GetTextFace[W] and [NtGdi]GetFontData[W].
- Print a message for unimplemented functions in GDI32.dll.

svn path=/trunk/; revision=10058
2004-07-09 20:28:20 +00:00
The ReactOS Team
d4a3555442 This commit was manufactured by cvs2svn to create branch 'avendor'.
svn path=/branches/avendor/; revision=8047
2004-02-06 08:21:52 +00:00
The ReactOS Team
abc01da30c This commit was manufactured by cvs2svn to create branch 'avendor'.
svn path=/branches/avendor/; revision=2401
2001-11-28 01:38:00 +00:00
The ReactOS Team
7aeca22fed This commit was manufactured by cvs2svn to create branch 'avendor'.
svn path=/branches/avendor/; revision=2398
2001-11-27 14:24:15 +00:00
The ReactOS Team
36e1bb60e8 This commit was manufactured by cvs2svn to create branch 'avendor'.
svn path=/branches/avendor/; revision=2320
2001-10-25 23:22:09 +00:00
The ReactOS Team
74e77bb16f This commit was manufactured by cvs2svn to create branch 'avendor'.
svn path=/branches/avendor/; revision=2316
2001-10-23 21:15:45 +00:00
Casper Hornstrup
e3a75fb4da no message
svn path=/branches/avendor/; revision=1279
2000-08-01 18:43:38 +00:00
The ReactOS Team
ce122bcdea This commit was manufactured by cvs2svn to create branch 'avendor'.
svn path=/branches/avendor/; revision=1278
2000-08-01 18:43:38 +00:00
5649 changed files with 546444 additions and 537417 deletions

View File

@@ -1,339 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
675 Mass Ave, Cambridge, MA 02139, USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
Appendix: How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) 19yy <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) 19yy name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

View File

@@ -1,158 +0,0 @@
; FreeLoader by Brian Palmer
; FREELDR.INI - FreeLoader Initialization file
;
; Each line must be less than 1024 characters long
; and must be either a section heading (i.e. [section_name])
; or a setting (i.e. name=value) or a blank line.
; Comments start with a ';' character.
; Background colors can be any one of the following:
; Black
; Blue
; Green
; Cyan
; Red
; Magenta
; Brown
; Gray
; Text colors can be any one of the background
; colors and any of the following:
; DarkGray
; LightBlue
; LightGreen
; LightCyan
; LightRed
; LightMagenta
; Yellow
; White
; [FREELOADER] Section Commands:
;
; MessageBox - displays the specified text in a message box upon bootup
; MessageLine - adds a new line of text to a message box (must come before MessageBox command)
; TitleText - text that is displayed in the title box
; StatusBarColor - color of status bar's background
; StatusBarTextColor - color of status bar's text
; BackdropTextColor - color of the backdrop's fill
; BackdropColor - color of the backdrop's background
; BackdropFillStyle - backdrop fill style - can be Light, Medium, or Dark
; TitleBoxTextColor - title box text color
; TitleBoxColor - title box background color
; MessageBoxTextColor - message box text color
; MessageBoxColor - message box background color
; MenuTextColor - menu text color
; MenuColor - menu color
; TextColor - normal text color
; SelectedTextColor - selected text color
; SelectedColor - selected text background color
; TimeOut - sets the timeout (in seconds) before the first OS listed gets booted automagically
; [OS-General] Section Commands:
;
; BootType - sets the boot type: ReactOS, Linux, BootSector, Partition, Drive
; BootDrive - sets the boot drive: 0 - first floppy, 1 - second floppy, 0x80 - first hard disk, 0x81 - second hard disk
; BootPartition - sets the boot partition
; DriveMap - maps a BIOS drive number to another (i.e. DriveMap=hd1,hd0 maps harddisk1 to harddisk0 or DriveMap=fd1,fd0)
; [BootSector OSType] Section Commands:
;
; BootSector - sets the filename of the bootsector to be loaded
; [ReactOS OSType] Section Commands:
;
; SystemPath - sets the system root path (must be a valid ARC - Path):
; multi(0)disk(0)rdisk(0)partition(1)\reactos
; multi(0)disk(0)fdisk(0)
; Options - sets the command line options for the kernel being booted
; Kernel - sets the kernel filename (default: ntoskrnl.exe)
; Hal - sets the HAL filename (default: hal.dll)
[FREELOADER]
MessageBox=Welcome to FreeLoader!\nCopyright (c) 2003 by Brian Palmer <brianp@sginet.com>\n\nThis is a sample FreeLoader configuration file.\nEdit FREELDR.INI to change the boot settings.
DefaultOS=ReactOSHD
TimeOut=10
; DisplayMode can be:
; NORMAL_VGA for 80x25
; EXTENDED_VGA for 80x50 on VGA 80x43 on EGA
; 0x501C for 80x28
; 0x501E for 80x30
; 0x5022 for 80x34
; 0x502B for 80x43
; 0x503C for 80x60
[Display]
DisplayMode=NORMAL_VGA
TitleText=Brian<61>s Custom FreeLoader Boot Disk
StatusBarColor=Cyan
StatusBarTextColor=Black
BackdropTextColor=White
BackdropColor=Blue
BackdropFillStyle=Medium
TitleBoxTextColor=White
TitleBoxColor=Red
MessageBoxTextColor=White
MessageBoxColor=Blue
MenuTextColor=White
MenuColor=Blue
TextColor=Yellow
SelectedTextColor=Black
SelectedColor=Gray
SpecialEffects=Yes
[Operating Systems]
ReactOSHD="ReactOS (HardDrive)"
ReactOSFloppy="ReactOS (Floppy)"
Linux="Debian Linux"
Floppy="3 1/2 Floppy (A:)"
MSWinders="Microsoft Windows (C:)"
DriveD="Drive D:"
; Load ReactOS from harddisk (drive C:)
[ReactOSHD]
BootType=ReactOS
SystemPath=multi(0)disk(0)rdisk(0)partition(1)\reactos
Options=/DEBUGPORT=SCREEN
Kernel=\REACTOS\SYSTEM32\NTOSKRNL.EXE
Hal=\REACTOS\SYSTEM32\HAL.DLL
; Load ReactOS from floppy (drive A:)
[ReactOSFloppy]
BootType=ReactOS
SystemPath=multi(0)disk(0)fdisk(0)
Options=/DEBUGPORT=SCREEN
Kernel=\reactos\NTOSKRNL.EXE
Hal=\reactos\HAL.DLL
;[ReactOS (Debug)]
;BootType=ReactOS
;SystemPath=multi(0)disk(0)rdisk(0)partition(1)\reactos
;Options=/DEBUG /DEBUGPORT=COM1 /BAUDRATE=19200
;Kernel=\NTOSKRNL.EXE
;Hal=\HAL.DLL
[Linux]
BootType=Linux
BootDrive=hd1
BootPartition=1
Kernel=/vmlinuz
Initrd=/initrd.img
CommandLine="root=/dev/sdb1"
[Floppy]
BootType=Drive
BootDrive=fd0
[MSWinders]
BootType=Partition
BootDrive=hd0
BootPartition=1
;DriveMap=hd1,hd0
;DriveMap=hd2,hd0
;DriveMap=hd3,hd0
[DriveD]
BootType=Partition
BootDrive=hd1
BootPartition=1

View File

@@ -1,41 +0,0 @@
#
# FreeLoader
# Copyright (C) 1999, 2000, 2001 Brian Palmer <brianp@sginet.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
# Windows is default host environment
ifeq ($(HOST),)
HOST = mingw32-windows
endif
include rules.mak
all:
$(MAKE) -C tools
$(MAKE) -C bootsect
$(MAKE) -C freeldr
$(MAKE) -C install
$(MAKE) -C fdebug
clean:
$(MAKE) -C bootsect clean
$(MAKE) -C freeldr clean
$(MAKE) -C install clean
$(MAKE) -C fdebug clean
$(MAKE) -C tools clean
.PHONY : clean

View File

@@ -1,3 +0,0 @@
*.exe
*.bin
*.h

View File

@@ -1,76 +0,0 @@
#
# FreeLoader
# Copyright (C) 1999, 2000, 2001 Brian Palmer <brianp@sginet.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
BOOTCD_DIR = ../../bootcd
.PHONY : clean bootcd
all: $(BIN2C) dosmbr.bin fat.bin fat32.bin isoboot.bin ext2.bin
$(BIN2C) :
@$(MAKE) --no-print-directory -C $(TOOLSDIR)
dosmbr.bin : dosmbr.asm
@echo ===================================================== Assembling dosmbr
@$(NASM_CMD) $(NFLAGS) -o dosmbr.bin -f bin dosmbr.asm
fat.bin : fat.asm $(BIN2C)
@echo ===================================================== Assembling fat
@$(NASM_CMD) $(NFLAGS) -o fat.bin -f bin fat.asm
@$(BIN2C) fat.bin fat.h fat_data
fat32.bin : fat32.asm $(BIN2C)
@echo ===================================================== Assembling fat32
@$(NASM_CMD) $(NFLAGS) -o fat32.bin -f bin fat32.asm
@$(BIN2C) fat32.bin fat32.h fat32_data
isoboot.bin : isoboot.asm
@echo ===================================================== Assembling isoboot
@$(NASM_CMD) $(NFLAGS) -o isoboot.bin -f bin isoboot.asm
ext2.bin : ext2.asm
@echo ===================================================== Assembling ext2
@$(NASM_CMD) $(NFLAGS) -o ext2.bin -f bin ext2.asm
@$(BIN2C) ext2.bin ext2.h ext2_data
.PHONY : bootcd
bootcd: bootcd_dirs isoboot.bin
$(CP) isoboot.bin $(BOOTCD_DIR)
$(CP) dosmbr.bin $(BOOTCD_DIR)/disk/loader
$(CP) ext2.bin $(BOOTCD_DIR)/disk/loader
$(CP) fat.bin $(BOOTCD_DIR)/disk/loader
$(CP) fat32.bin $(BOOTCD_DIR)/disk/loader
$(CP) isoboot.bin $(BOOTCD_DIR)/disk/loader
.PHONY : bootcd_dirs
bootcd_dirs:
$(MKDIR) $(BOOTCD_DIR)
$(MKDIR) $(BOOTCD_DIR)/disk
$(MKDIR) $(BOOTCD_DIR)/disk/reactos
$(MKDIR) $(BOOTCD_DIR)/disk/install
$(MKDIR) $(BOOTCD_DIR)/disk/bootdisk
$(MKDIR) $(BOOTCD_DIR)/disk/loader
clean:
@-$(RM) *.bin
@-$(RM) *.h
@echo Clean ALL done.

View File

@@ -1,179 +0,0 @@
;
; normal DOS boot sector
;
; Ported to nasm from FreeDOS fdisk 1.2.0 by:
; Casper Hornstrup (chorns@users.sourceforge.net)
;
align 2, db 0
global _bootnormal_code
_bootnormal_code:
;-----------------------------------------------------------------------
; ENTRY (copied from freedos bootsector)
;
; IN: DL = boot drive
;OUT: DL = boot drive
;
;-----------------------------------------------------------------------
real_start: cli
cld
xor ax, ax
mov ss, ax ; initialize stack
mov ds, ax
mov bp, 0x7c00
lea sp, [bp-0x20]
sti
mov ax, 0x1FE0
mov es, ax
mov si, bp
mov di, bp
mov cx, 0x0100
rep movsw
jmp word 0x1FE0:0x7c00+ cont-real_start
cont: mov ds, ax
mov ss, ax
xor ax,ax
mov es,ax
; search for active partition
lea di, [bp+0x1be] ; start of partition table
test_next_for_active:
test byte [di],0x80
jne active_partition_found
add di,0x10 ; next table
cmp di, 07c00h+0x1fe; scanned beyond end of table ??
jb test_next_for_active
;*****************************************************************
call print
db 'no active partition found',0
WAIT_FOR_REBOOT:
jmp $
;*****************************************************************
trouble_reading_drive:
call print
db 'read error while reading drive',0
jmp WAIT_FOR_REBOOT
;*****************************************************************
invalid_partition_code:
call print
db 'partition signature != 55AA',0
jmp WAIT_FOR_REBOOT
;*****************************************************************
active_partition_found:
; call print
; db 'loading active partition',0
call read_boot_sector
jc trouble_reading_drive
cmp word [es:0x7c00+0x1fe],0xaa55
jne invalid_partition_code
jmp word 0x0:0x7c00 ; and jump to boot sector code
;*****************************
; read_boot_sector
;
; IN: DI--> partition info
;OUT:CARRY
;*****************************
read_boot_sector:
; /* check for LBA support */
mov bx,0x55aa
mov ah,0x41
int 0x13
jc StandardBios ; if (regs.b.x != 0xaa55 || (regs.flags & 0x01))
cmp bx,0xaa55 ; goto StandardBios;
jne StandardBios
; /* if DAP cannot be used, don't use LBA */
; if ((regs.c.x & 1) == 0)
; goto StandardBios;
test cl,1
jz StandardBios
jmp short LBABios
_bios_LBA_address_packet:
db 0x10
db 0
db 4 ; read four sectors - why not
db 0
dw 0x7c00 ; fixed boot address for DOS sector
dw 0x0000
_bios_LBA_low dw 0
_bios_LBA_high dw 0
dw 0,0
LBABios:
; copy start address of partition to DAP
mov ax,[di+8]
mov [0x7c00+ (_bios_LBA_low-real_start)],ax
mov ax,[di+8+2]
mov [0x7c00+ (_bios_LBA_high-real_start)],ax
mov ax,0x4200 ; regs.a.x = LBA_READ;
mov si,0x7c00+ (_bios_LBA_address_packet-real_start); regs.si = FP_OFF(&dap);
int 0x13
ret
;*****************************************************************
; read disk, using standard BIOS
;
StandardBios:
mov ax,0x0204 ; regs.a.x = 0x0201;
mov bx,0x7c00 ; regs.b.x = FP_OFF(buffer);
mov cx,[di+2] ; regs.c.x =
; ((chs.Cylinder & 0xff) << 8) + ((chs.Cylinder & 0x300) >> 2) +
; chs.Sector;
; that was easy ;-)
mov dh,[di+1] ; regs.d.b.h = chs.Head;
; regs.es = FP_SEG(buffer);
int 0x13
ret
;****** PRINT
; prints text after call to this function.
print_1char:
xor bx, bx ; video page 0
mov ah, 0x0E ; else print it
int 0x10 ; via TTY mode
print: pop si ; this is the first character
print1: lodsb ; get token
push si ; stack up potential return address
cmp al, 0 ; end of string?
jne print_1char ; until done
ret ; and jump to it
times 0x1fe-$+$$ db 0
db 0x55,0xaa

View File

@@ -1,663 +0,0 @@
; EXT2.ASM
; EXT2 Boot Sector
; Copyright (c) 2002, 2003 Brian Palmer
; [bp-0x04] Here we will store the number of sectors per track
; [bp-0x08] Here we will store the number of heads
; [bp-0x0c] Here we will store the size of the disk as the BIOS reports in CHS form
; [bp-0x10] Here we will store the number of LBA sectors read
SECTORS_PER_TRACK equ 0x04
NUMBER_OF_HEADS equ 0x08
BIOS_CHS_DRIVE_SIZE equ 0x0C
LBA_SECTORS_READ equ 0x10
EXT2_ROOT_INO equ 2
EXT2_S_IFMT equ 0f0h
EXT2_S_IFREG equ 080h
org 7c00h
segment .text
bits 16
start:
jmp short main
nop
BootDrive db 0x80
;BootPartition db 0 ; Moved to end of boot sector to have a standard format across all boot sectors
;SectorsPerTrack db 63 ; Moved to [bp-SECTORS_PER_TRACK]
;NumberOfHeads dw 16 ; Moved to [bp-NUMBER_OF_HEADS]
;BiosCHSDriveSize dd (1024 * 1024 * 63) ; Moved to [bp-BIOS_CHS_DRIVE_SIZE]
;LBASectorsRead dd 0 ; Moved to [bp-LBA_SECTORS_READ]
Ext2VolumeStartSector dd 263088 ; Start sector of the ext2 volume
Ext2BlockSize dd 2 ; Block size in sectors
Ext2BlockSizeInBytes dd 1024 ; Block size in bytes
Ext2PointersPerBlock dd 256 ; Number of block pointers that can be contained in one block
Ext2GroupDescPerBlock dd 32 ; Number of group descriptors per block
Ext2FirstDataBlock dd 1 ; First data block (1 for 1024-byte blocks, 0 for bigger sizes)
Ext2InodesPerGroup dd 2048 ; Number of inodes per group
Ext2InodesPerBlock dd 8 ; Number of inodes per block
Ext2ReadEntireFileLoadSegment:
dw 0
Ext2InodeIndirectPointer:
dd 0
Ext2InodeDoubleIndirectPointer:
dd 0
Ext2BlocksLeftToRead:
dd 0
main:
xor ax,ax ; Setup segment registers
mov ds,ax ; Make DS correct
mov es,ax ; Make ES correct
mov ss,ax ; Make SS correct
mov bp,7c00h
mov sp,7b00h ; Setup a stack
cmp BYTE [BYTE bp+BootDrive],BYTE 0xff ; If they have specified a boot drive then use it
jne GetDriveParameters
mov [BYTE bp+BootDrive],dl ; Save the boot drive
GetDriveParameters:
mov ah,08h
mov dl,[BYTE bp+BootDrive] ; Get boot drive in dl
int 13h ; Request drive parameters from the bios
jnc CalcDriveSize ; If the call succeeded then calculate the drive size
; If we get here then the call to the BIOS failed
; so just set CHS equal to the maximum addressable
; size
mov cx,0ffffh
mov dh,cl
CalcDriveSize:
; Now that we have the drive geometry
; lets calculate the drive size
mov bl,ch ; Put the low 8-bits of the cylinder count into BL
mov bh,cl ; Put the high 2-bits in BH
shr bh,6 ; Shift them into position, now BX contains the cylinder count
and cl,3fh ; Mask off cylinder bits from sector count
; CL now contains sectors per track and DH contains head count
movzx eax,dh ; Move the heads into EAX
movzx ebx,bx ; Move the cylinders into EBX
movzx ecx,cl ; Move the sectors per track into ECX
inc eax ; Make it one based because the bios returns it zero based
mov [BYTE bp-NUMBER_OF_HEADS],eax ; Save number of heads
mov [BYTE bp-SECTORS_PER_TRACK],ecx ; Save number of sectors per track
inc ebx ; Make the cylinder count one based also
mul ecx ; Multiply heads with the sectors per track, result in edx:eax
mul ebx ; Multiply the cylinders with (heads * sectors) [stored in edx:eax already]
; We now have the total number of sectors as reported
; by the bios in eax, so store it in our variable
mov [BYTE bp-BIOS_CHS_DRIVE_SIZE],eax
LoadExtraBootCode:
; First we have to load our extra boot code at
; sector 1 into memory at [0000:7e00h]
;mov eax,01h
xor eax,eax
inc eax ; Read logical sector 1, EAX now = 1
mov cx,1 ; Read one sector
mov bx,7e00h ; Read sector to [0000:7e00h]
call ReadSectors
jmp LoadRootDirectory
; Reads ext2 group descriptor into [7000:8000]
; We read it to this arbitrary location so
; it will not cross a 64k boundary
; EAX has group descriptor number to read
Ext2ReadGroupDesc:
shl eax,5 ; Group = (Group * sizeof(GROUP_DESCRIPTOR) /* 32 */)
xor edx,edx
div DWORD [BYTE bp+Ext2GroupDescPerBlock] ; Group = (Group / Ext2GroupDescPerBlock)
add eax,DWORD [BYTE bp+Ext2FirstDataBlock] ; Group = Group + Ext2FirstDataBlock + 1
inc eax ; EAX now has the group descriptor block number
; EDX now has the group descriptor offset in the block
; Adjust the read offset so that the
; group descriptor is read to 7000:8000
mov ebx,78000h
sub ebx,edx
shr ebx,4
mov es,bx
xor bx,bx
; Everything is now setup to call Ext2ReadBlock
; Instead of using the call instruction we will
; just put Ext2ReadBlock right after this routine
; Reads ext2 block into [ES:BX]
; EAX has logical block number to read
Ext2ReadBlock:
mov ecx,DWORD [BYTE bp+Ext2BlockSize]
mul ecx
jmp ReadSectors
; Reads ext2 inode into [6000:8000]
; We read it to this arbitrary location so
; it will not cross a 64k boundary
; EAX has inode number to read
Ext2ReadInode:
dec eax ; Inode = Inode - 1
xor edx,edx
div DWORD [BYTE bp+Ext2InodesPerGroup] ; Inode = (Inode / Ext2InodesPerGroup)
mov ebx,eax ; EBX now has the inode group number
mov eax,edx
xor edx,edx
div DWORD [BYTE bp+Ext2InodesPerBlock] ; Inode = (Inode / Ext2InodesPerBlock)
shl edx,7 ; FIXME: InodeOffset *= 128 (make the array index a byte offset)
; EAX now has the inode offset block number from inode table
; EDX now has the inode offset in the block
; Save the inode values and put the group
; descriptor number in EAX and read it in
push edx
push eax
mov eax,ebx
call Ext2ReadGroupDesc
; Group descriptor has been read, now
; grab the inode table block number from it
push WORD 7000h
pop es
mov di,8008h
pop eax ; Restore inode offset block number from stack
add eax,DWORD [es:di] ; Add the inode table start block
; Adjust the read offset so that the
; inode we want is read to 6000:8000
pop edx ; Restore inode offset in the block from stack
mov ebx,68000h
sub ebx,edx
shr ebx,4
mov es,bx
xor bx,bx
call Ext2ReadBlock
ret
; Reads logical sectors into [ES:BX]
; EAX has logical sector number to read
; CX has number of sectors to read
ReadSectors:
add eax,DWORD [BYTE bp+Ext2VolumeStartSector] ; Add the start of the volume
cmp eax,DWORD [BYTE bp-BIOS_CHS_DRIVE_SIZE] ; Check if they are reading a sector outside CHS range
jae ReadSectorsLBA ; Yes - go to the LBA routine
; If at all possible we want to use LBA routines because
; They are optimized to read more than 1 sector per read
pushad ; Save logical sector number & sector count
CheckInt13hExtensions: ; Now check if this computer supports extended reads
mov ah,0x41 ; AH = 41h
mov bx,0x55aa ; BX = 55AAh
mov dl,[BYTE bp+BootDrive] ; DL = drive (80h-FFh)
int 13h ; IBM/MS INT 13 Extensions - INSTALLATION CHECK
jc ReadSectorsCHS ; CF set on error (extensions not supported)
cmp bx,0xaa55 ; BX = AA55h if installed
jne ReadSectorsCHS
test cl,1 ; CX = API subset support bitmap
jz ReadSectorsCHS ; Bit 0, extended disk access functions (AH=42h-44h,47h,48h) supported
popad ; Restore sector count & logical sector number
ReadSectorsLBA:
pushad ; Save logical sector number & sector count
cmp cx,byte 64 ; Since the LBA calls only support 0x7F sectors at a time we will limit ourselves to 64
jbe ReadSectorsSetupDiskAddressPacket ; If we are reading less than 65 sectors then just do the read
mov cx,64 ; Otherwise read only 64 sectors on this loop iteration
ReadSectorsSetupDiskAddressPacket:
mov [BYTE bp-LBA_SECTORS_READ],cx
mov WORD [BYTE bp-LBA_SECTORS_READ+2],0
o32 push byte 0
push eax ; Put 64-bit logical block address on stack
push es ; Put transfer segment on stack
push bx ; Put transfer offset on stack
push cx ; Set transfer count
push byte 0x10 ; Set size of packet to 10h
mov si,sp ; Setup disk address packet on stack
mov dl,[BYTE bp+BootDrive] ; Drive number
mov ah,42h ; Int 13h, AH = 42h - Extended Read
int 13h ; Call BIOS
jc PrintDiskError ; If the read failed then abort
add sp,byte 0x10 ; Remove disk address packet from stack
popad ; Restore sector count & logical sector number
push bx
mov ebx,DWORD [BYTE bp-LBA_SECTORS_READ]
add eax,ebx ; Increment sector to read
shl ebx,5
mov dx,es
add dx,bx ; Setup read buffer for next sector
mov es,dx
pop bx
sub cx,[BYTE bp-LBA_SECTORS_READ]
jnz ReadSectorsLBA ; Read next sector
ret
; Reads logical sectors into [ES:BX]
; EAX has logical sector number to read
; CX has number of sectors to read
ReadSectorsCHS:
popad ; Get logical sector number & sector count off stack
ReadSectorsCHSLoop:
pushad
xor edx,edx
mov ecx,DWORD [BYTE bp-SECTORS_PER_TRACK]
div ecx ; Divide logical by SectorsPerTrack
inc dl ; Sectors numbering starts at 1 not 0
mov cl,dl ; Sector in CL
mov edx,eax
shr edx,16
div WORD [BYTE bp-NUMBER_OF_HEADS] ; Divide logical by number of heads
mov dh,dl ; Head in DH
mov dl,[BYTE bp+BootDrive] ; Drive number in DL
mov ch,al ; Cylinder in CX
ror ah,2 ; Low 8 bits of cylinder in CH, high 2 bits
; in CL shifted to bits 6 & 7
or cl,ah ; Or with sector number
mov ax,0201h
int 13h ; DISK - READ SECTORS INTO MEMORY
; AL = number of sectors to read, CH = track, CL = sector
; DH = head, DL = drive, ES:BX -> buffer to fill
; Return: CF set on error, AH = status (see AH=01h), AL = number of sectors read
jc PrintDiskError ; If the read failed then abort
popad
inc eax ; Increment Sector to Read
mov dx,es
add dx,byte 20h ; Increment read buffer for next sector
mov es,dx
loop ReadSectorsCHSLoop ; Read next sector
ret
; Displays a disk error message
; And reboots
PrintDiskError:
mov si,msgDiskError ; Bad boot disk message
call PutChars ; Display it
Reboot:
mov si,msgAnyKey ; Press any key message
call PutChars ; Display it
xor ax,ax
int 16h ; Wait for a keypress
int 19h ; Reboot
PutChars:
lodsb
or al,al
jz short Done
call PutCharsCallBios
jmp short PutChars
PutCharsCallBios:
mov ah,0eh
mov bx,07h
int 10h
retn
Done:
mov al,0dh
call PutCharsCallBios
mov al,0ah
call PutCharsCallBios
retn
msgDiskError db 'Disk error',0
; Sorry, need the space...
;msgAnyKey db 'Press any key to restart',0
msgAnyKey db 'Press any key',0
times 509-($-$$) db 0 ; Pad to 509 bytes
BootPartition db 0
dw 0aa55h ; BootSector signature
; End of bootsector
;
; Now starts the extra boot code that we will store
; at sector 1 on a EXT2 volume
LoadRootDirectory:
mov eax,EXT2_ROOT_INO ; Put the root directory inode number in EAX
call Ext2ReadInode ; Read in the inode
; Point ES:DI to the inode structure at 6000:8000
push WORD 6000h
pop es
mov di,8000h
push di
push es ; Save these for later
; Get root directory size from inode structure
mov eax,DWORD [es:di+4]
push eax
; Now that the inode has been read in load
; the root directory file data to 0000:8000
call Ext2ReadEntireFile
; Since the root directory was loaded to 0000:8000
; then add 8000h to the root directory's size
pop eax
mov edx,8000h ; Set EDX to the current offset in the root directory
add eax,edx ; Initially add 8000h to the size of the root directory
SearchRootDirectory:
push edx ; Save current offset in root directory
push eax ; Save the size of the root directory
; Now we have to convert the current offset
; in the root directory to a SEGMENT:OFFSET pair
mov eax,edx
xor edx,edx
mov ecx,16
div ecx ; Now AX:DX has segment & offset
mov es,ax
mov di,dx
push di ; Save the start of the directory entry
add di,byte 8 ; Add the offset to the filename
mov si,filename
mov cl,11
rep cmpsb ; Compare the file names
pop di
pop eax
pop edx
jz FoundFile
; Nope, didn't find it in this entry, keep looking
movzx ecx,WORD [es:di+4]
add edx,ecx
; Check to see if we have reached the
; end of the root directory
cmp edx,eax
jb SearchRootDirectory
jmp PrintFileNotFound
FoundFile:
mov eax,[es:di] ; Get inode number from directory entry
call Ext2ReadInode ; Read in the inode
; Point ES:DI to the inode structure at 6000:8000
pop es
pop di ; These were saved earlier
mov cx,[es:di] ; Get the file mode so we can make sure it's a regular file
and ch,EXT2_S_IFMT ; Mask off everything but the file type
cmp ch,EXT2_S_IFREG ; Make sure it's a regular file
je LoadFreeLoader
jmp PrintRegFileError
LoadFreeLoader:
mov si,msgLoading ; "Loading FreeLoader..." message
call PutChars ; Display it
call Ext2ReadEntireFile ; Read freeldr.sys to 0000:8000
mov dl,[BYTE bp+BootDrive]
mov dh,[BYTE bp+BootPartition]
push byte 0 ; We loaded at 0000:8000
push WORD 8000h ; We will do a far return to 0000:8000h
retf ; Transfer control to FreeLoader
; Reads ext2 file data into [0000:8000]
; This function assumes that the file's
; inode has been read in to 6000:8000 *and*
; ES:DI points to 6000:8000
; This will load all the blocks up to
; and including the double-indirect pointers.
; This should be sufficient because it
; allows for ~64MB which is much bigger
; than we need for a boot loader.
Ext2ReadEntireFile:
; Reset the load segment
mov WORD [BYTE bp+Ext2ReadEntireFileLoadSegment],800h
; Now we must calculate how
; many blocks to read in
; We will do this by rounding the
; file size up to the next block
; size and then dividing by the block size
mov eax,DWORD [BYTE bp+Ext2BlockSizeInBytes] ; Get the block size in bytes
push eax
dec eax ; Ext2BlockSizeInBytes -= 1
add eax,DWORD [es:di+4] ; Add the file size
xor edx,edx
pop ecx ; Divide by the block size in bytes
div ecx ; EAX now contains the number of blocks to load
push eax
; Make sure the file size isn't zero
cmp eax,byte 0
jnz Ext2ReadEntireFile2
jmp PrintFileSizeError
Ext2ReadEntireFile2:
; Save the indirect & double indirect pointers
mov edx,DWORD [es:di+0x58] ; Get indirect pointer
mov [BYTE bp+Ext2InodeIndirectPointer],edx ; Save indirect pointer
mov edx,DWORD [es:di+0x5c] ; Get double indirect pointer
mov [BYTE bp+Ext2InodeDoubleIndirectPointer],edx ; Save double indirect pointer
; Now copy the direct pointers to 7000:0000
; so that we can call Ext2ReadDirectBlocks
push ds ; Save DS
push es
push WORD 7000h
pop es
pop ds
mov si,8028h
xor di,di ; DS:SI = 6000:8028 ES:DI = 7000:0000
mov cx,24 ; Moving 24 words of data
rep movsw
pop ds ; Restore DS
; Now we have all the block pointers in the
; right location so read them in
pop eax ; Restore the total number of blocks in this file
xor ecx,ecx ; Set the max count of blocks to read to 12
mov cl,12 ; which is the number of direct block pointers in the inode
call Ext2ReadDirectBlockList
; Check to see if we actually have
; blocks left to read
cmp eax,byte 0
jz Ext2ReadEntireFileDone
; Now we have read all the direct blocks in
; the inode. So now we have to read the indirect
; block and read all it's direct blocks
push eax ; Save the total block count
mov eax,DWORD [BYTE bp+Ext2InodeIndirectPointer] ; Get the indirect block pointer
push WORD 7000h
pop es
xor bx,bx ; Set the load address to 7000:0000
call Ext2ReadBlock ; Read the block
; Now we have all the block pointers from the
; indirect block in the right location so read them in
pop eax ; Restore the total block count
mov ecx,DWORD [BYTE bp+Ext2PointersPerBlock] ; Get the number of block pointers that one block contains
call Ext2ReadDirectBlockList
; Check to see if we actually have
; blocks left to read
cmp eax,byte 0
jz Ext2ReadEntireFileDone
; Now we have read all the direct blocks from
; the inode's indirect block pointer. So now
; we have to read the double indirect block
; and read all it's indirect blocks
; (whew, it's a good thing I don't support triple indirect blocks)
mov [BYTE bp+Ext2BlocksLeftToRead],eax ; Save the total block count
mov eax,DWORD [BYTE bp+Ext2InodeDoubleIndirectPointer] ; Get the double indirect block pointer
push WORD 7800h
pop es
push es ; Save an extra copy of this value on the stack
xor bx,bx ; Set the load address to 7000:8000
call Ext2ReadBlock ; Read the block
pop es ; Put 7800h into ES (saved on the stack already)
xor di,di
Ext2ReadIndirectBlock:
mov eax,DWORD [es:di] ; Get indirect block pointer
add di,BYTE 4 ; Update DI for next array index
push es
push di
push WORD 7000h
pop es
xor bx,bx ; Set the load address to 7000:0000
call Ext2ReadBlock ; Read the indirect block
; Now we have all the block pointers from the
; indirect block in the right location so read them in
mov eax,DWORD [BYTE bp+Ext2BlocksLeftToRead] ; Restore the total block count
mov ecx,DWORD [BYTE bp+Ext2PointersPerBlock] ; Get the number of block pointers that one block contains
call Ext2ReadDirectBlockList
mov [BYTE bp+Ext2BlocksLeftToRead],eax ; Save the total block count
pop di
pop es
; Check to see if we actually have
; blocks left to read
cmp eax,byte 0
jnz Ext2ReadIndirectBlock
Ext2ReadEntireFileDone:
ret
; Reads a maximum number of blocks
; from an array at 7000:0000
; and updates the total count
; ECX contains the max number of blocks to read
; EAX contains the number of blocks left to read
; On return:
; EAX contians the new number of blocks left to read
Ext2ReadDirectBlockList:
cmp eax,ecx ; Compare it to the maximum number of blocks to read
ja CallExt2ReadDirectBlocks ; If it will take more blocks then just read all of the blocks
mov cx,ax ; Otherwise adjust the block count accordingly
CallExt2ReadDirectBlocks:
sub eax,ecx ; Subtract the number of blocks being read from the total count
push eax ; Save the new total count
call Ext2ReadDirectBlocks
pop eax ; Restore the total count
ret
; Reads a specified number of blocks
; from an array at 7000:0000
; CX contains the number of blocks to read
Ext2ReadDirectBlocks:
push WORD 7000h
pop es
xor di,di ; Set ES:DI = 7000:0000
Ext2ReadDirectBlocksLoop:
mov eax,[es:di] ; Get direct block pointer from array
add di,BYTE 4 ; Update DI for next array index
push cx ; Save number of direct blocks left
push es ; Save array segment
push di ; Save array offset
mov es,[BYTE bp+Ext2ReadEntireFileLoadSegment]
xor bx,bx ; Setup load address for next read
call Ext2ReadBlock ; Read the block (this updates ES for the next read)
mov [BYTE bp+Ext2ReadEntireFileLoadSegment],es ; Save updated ES
pop di ; Restore the array offset
pop es ; Restore the array segment
pop cx ; Restore the number of blocks left
loop Ext2ReadDirectBlocksLoop
; At this point all the direct blocks should
; be loaded and ES (Ext2ReadEntireFileLoadSegment)
; should be ready for the next read.
ret
; Displays a file not found error message
; And reboots
PrintFileNotFound:
mov si,msgFreeLdr ; FreeLdr not found message
jmp short DisplayItAndReboot
; Displays a file size is 0 error
; And reboots
PrintFileSizeError:
mov si,msgFileSize ; Error message
jmp short DisplayItAndReboot
; Displays a file is not a regular file error
; And reboots
PrintRegFileError:
mov si,msgRegFile ; Error message
DisplayItAndReboot:
call PutChars ; Display it
jmp Reboot
msgFreeLdr db 'freeldr.sys not found',0
msgFileSize db 'File size is 0',0
msgRegFile db 'freeldr.sys isnt a regular file',0
filename db 'freeldr.sys'
msgLoading db 'Loading FreeLoader...',0
times 1022-($-$$) db 0 ; Pad to 1022 bytes
dw 0aa55h ; BootSector signature

View File

@@ -1,402 +0,0 @@
; FAT.ASM
; FAT12/16 Boot Sector
; Copyright (c) 1998, 2001, 2002 Brian Palmer
; This is a FAT12/16 file system boot sector
; that searches the entire root directory
; for the file freeldr.sys and loads it into
; memory.
;
; The stack is set to 0000:7BF2 so that the first
; WORD pushed will be placed at 0000:7BF0
;
; The DWORD at 0000:7BFC or BP-04h is the logical
; sector number of the start of the data area.
;
; The DWORD at 0000:7BF8 or BP-08h is the total
; sector count of the boot drive as reported by
; the computers bios.
;
; The WORD at 0000:7BF6 or BP-0ah is the offset
; of the ReadSectors function in the boot sector.
;
; The WORD at 0000:7BF4 or BP-0ch is the offset
; of the ReadCluster function in the boot sector.
;
; The WORD at 0000:7BF2 or BP-0eh is the offset
; of the PutChars function in the boot sector.
;
; When it locates freeldr.sys on the disk it will
; load the first sector of the file to 0000:8000
; With the help of this sector we should be able
; to load the entire file off the disk, no matter
; how fragmented it is.
;
; We load the entire FAT table into memory at
; 7000:0000. This improves the speed of floppy disk
; boots dramatically.
BootSectorStackTop equ 0x7bf2
DataAreaStartHigh equ 0x2
DataAreaStartLow equ 0x4
BiosCHSDriveSizeHigh equ 0x6
BiosCHSDriveSizeLow equ 0x8
BiosCHSDriveSize equ 0x8
ReadSectorsOffset equ 0xa
ReadClusterOffset equ 0xc
PutCharsOffset equ 0xe
org 7c00h
segment .text
bits 16
start:
jmp short main
nop
OEMName db 'FrLdr1.0'
BytesPerSector dw 512
SectsPerCluster db 1
ReservedSectors dw 1
NumberOfFats db 2
MaxRootEntries dw 224
TotalSectors dw 2880
MediaDescriptor db 0f0h
SectorsPerFat dw 9
SectorsPerTrack dw 18
NumberOfHeads dw 2
HiddenSectors dd 0
TotalSectorsBig dd 0
BootDrive db 0
Reserved db 0
ExtendSig db 29h
SerialNumber dd 00000000h
VolumeLabel db 'NO NAME '
FileSystem db 'FAT12 '
main:
xor ax,ax
mov ss,ax
mov bp,7c00h
mov sp,BootSectorStackTop ; Setup a stack
mov ds,ax ; Make DS correct
mov es,ax ; Make ES correct
cmp BYTE [BYTE bp+BootDrive],BYTE 0xff ; If they have specified a boot drive then use it
jne GetDriveParameters
mov [BYTE bp+BootDrive],dl ; Save the boot drive
GetDriveParameters:
mov ah,08h
mov dl,[BYTE bp+BootDrive] ; Get boot drive in dl
int 13h ; Request drive parameters from the bios
jnc CalcDriveSize ; If the call succeeded then calculate the drive size
; If we get here then the call to the BIOS failed
; so just set CHS equal to the maximum addressable
; size
mov cx,0ffffh
mov dh,cl
CalcDriveSize:
; Now that we have the drive geometry
; lets calculate the drive size
mov bl,ch ; Put the low 8-bits of the cylinder count into BL
mov bh,cl ; Put the high 2-bits in BH
shr bh,6 ; Shift them into position, now BX contains the cylinder count
and cl,3fh ; Mask off cylinder bits from sector count
; CL now contains sectors per track and DH contains head count
movzx eax,dh ; Move the heads into EAX
movzx ebx,bx ; Move the cylinders into EBX
movzx ecx,cl ; Move the sectors per track into ECX
inc eax ; Make it one based because the bios returns it zero based
inc ebx ; Make the cylinder count one based also
mul ecx ; Multiply heads with the sectors per track, result in edx:eax
mul ebx ; Multiply the cylinders with (heads * sectors) [stored in edx:eax already]
; We now have the total number of sectors as reported
; by the bios in eax, so store it in our variable
mov [BYTE bp-BiosCHSDriveSize],eax
; Now we must find our way to the first sector of the root directory
xor ax,ax
xor cx,cx
mov al,[BYTE bp+NumberOfFats] ; Number of fats
mul WORD [BYTE bp+SectorsPerFat] ; Times sectors per fat
add ax,WORD [BYTE bp+HiddenSectors]
adc dx,WORD [BYTE bp+HiddenSectors+2] ; Add the number of hidden sectors
add ax,WORD [BYTE bp+ReservedSectors] ; Add the number of reserved sectors
adc dx,cx ; Add carry bit
mov WORD [BYTE bp-DataAreaStartLow],ax ; Save the starting sector of the root directory
mov WORD [BYTE bp-DataAreaStartHigh],dx ; Save it in the first 4 bytes before the boot sector
mov si,WORD [BYTE bp+MaxRootEntries] ; Get number of root dir entries in SI
pusha ; Save 32-bit logical start sector of root dir
; DX:AX now has the number of the starting sector of the root directory
; Now calculate the size of the root directory
xor dx,dx
mov ax,0020h ; Size of dir entry
mul si ; Times the number of entries
mov bx,[BYTE bp+BytesPerSector]
add ax,bx
dec ax
div bx ; Divided by the size of a sector
; AX now has the number of root directory sectors
add [BYTE bp-DataAreaStartLow],ax ; Add the number of sectors of the root directory to our other value
adc [BYTE bp-DataAreaStartHigh],cx ; Now the first 4 bytes before the boot sector contain the starting sector of the data area
popa ; Restore root dir logical sector start to DX:AX
LoadRootDirSector:
mov bx,7e0h ; We will load the root directory sector
mov es,bx ; Right after the boot sector in memory
xor bx,bx ; We will load it to [0000:7e00h]
xor cx,cx ; Zero out CX
inc cx ; Now increment it to 1, we are reading one sector
xor di,di ; Zero out di
push es ; Save ES because it will get incremented by 20h
call ReadSectors ; Read the first sector of the root directory
pop es ; Restore ES (ES:DI = 07E0:0000)
SearchRootDirSector:
cmp [es:di],ch ; If the first byte of the directory entry is zero then we have
jz ErrBoot ; reached the end of the directory and FREELDR.SYS is not here so reboot
pusha ; Save all registers
mov cl,0xb ; Put 11 in cl (length of filename in directory entry)
mov si,filename ; Put offset of filename string in DS:SI
repe cmpsb ; Compare this directory entry against 'FREELDR SYS'
popa ; Restore all the registers
jz FoundFreeLoader ; If we found it then jump
dec si ; SI holds MaxRootEntries, subtract one
jz ErrBoot ; If we are out of root dir entries then reboot
add di,BYTE +0x20 ; Increment DI by the size of a directory entry
cmp di,0200h ; Compare DI to 512 (DI has offset to next dir entry, make sure we haven't gone over one sector)
jc SearchRootDirSector ; If DI is less than 512 loop again
jmp short LoadRootDirSector ; Didn't find FREELDR.SYS in this directory sector, try again
FoundFreeLoader:
; We found freeldr.sys on the disk
; so we need to load the first 512
; bytes of it to 0000:8000
; ES:DI has dir entry (ES:DI == 07E0:XXXX)
mov ax,WORD [es:di+1ah] ; Get start cluster
push ax ; Save start cluster
push WORD 800h ; Put 800h on the stack and load it
pop es ; Into ES so that we load the cluster at 0000:8000
call ReadCluster ; Read the cluster
pop ax ; Restore start cluster of FreeLoader
; Save the addresses of needed functions so
; the helper code will know where to call them.
mov WORD [BYTE bp-ReadSectorsOffset],ReadSectors ; Save the address of ReadSectors
mov WORD [BYTE bp-ReadClusterOffset],ReadCluster ; Save the address of ReadCluster
mov WORD [BYTE bp-PutCharsOffset],PutChars ; Save the address of PutChars
; Now AX has start cluster of FreeLoader and we
; have loaded the helper code in the first 512 bytes
; of FreeLoader to 0000:8000. Now transfer control
; to the helper code. Skip the first three bytes
; because they contain a jump instruction to skip
; over the helper code in the FreeLoader image.
;jmp 0000:8003h
jmp 8003h
; Displays an error message
; And reboots
ErrBoot:
mov si,msgFreeLdr ; FreeLdr not found message
call PutChars ; Display it
Reboot:
mov si,msgAnyKey ; Press any key message
call PutChars ; Display it
xor ax,ax
int 16h ; Wait for a keypress
int 19h ; Reboot
PutChars:
lodsb
or al,al
jz short Done
mov ah,0eh
mov bx,07h
int 10h
jmp short PutChars
Done:
retn
; Displays a bad boot message
; And reboots
BadBoot:
mov si,msgDiskError ; Bad boot disk message
call PutChars ; Display it
jmp short Reboot
; Reads cluster number in AX into [ES:0000]
ReadCluster:
; StartSector = ((Cluster - 2) * SectorsPerCluster) + ReservedSectors + HiddenSectors;
dec ax ; Adjust start cluster by 2
dec ax ; Because the data area starts on cluster 2
xor ch,ch
mov cl,BYTE [BYTE bp+SectsPerCluster]
mul cx ; Times sectors per cluster
add ax,[BYTE bp-DataAreaStartLow] ; Add start of data area
adc dx,[BYTE bp-DataAreaStartHigh] ; Now we have DX:AX with the logical start sector of OSLOADER.SYS
xor bx,bx ; We will load it to [ES:0000], ES loaded before function call
;mov cl,BYTE [BYTE bp+SectsPerCluster]; Sectors per cluster still in CX
;call ReadSectors
;ret
; Reads logical sectors into [ES:BX]
; DX:AX has logical sector number to read
; CX has number of sectors to read
ReadSectors:
; We can't just check if the start sector is
; in the BIOS CHS range. We have to check if
; the start sector + length is in that range.
pusha
dec cx
add ax,cx
adc dx,byte 0
cmp dx,WORD [BYTE bp-BiosCHSDriveSizeHigh] ; Check if they are reading a sector within CHS range
ja ReadSectorsLBA ; No - go to the LBA routine
jb ReadSectorsCHS ; Yes - go to the old CHS routine
cmp ax,WORD [BYTE bp-BiosCHSDriveSizeLow] ; Check if they are reading a sector within CHS range
jbe ReadSectorsCHS ; Yes - go to the old CHS routine
ReadSectorsLBA:
popa
ReadSectorsLBALoop:
pusha ; Save logical sector number & sector count
o32 push byte 0
push dx ; Put 64-bit logical
push ax ; block address on stack
push es ; Put transfer segment on stack
push bx ; Put transfer offset on stack
push byte 1 ; Set transfer count to 1 sector
push byte 0x10 ; Set size of packet to 10h
mov si,sp ; Setup disk address packet on stack
; We are so totally out of space here that I am forced to
; comment out this very beautifully written piece of code
; It would have been nice to have had this check...
;CheckInt13hExtensions: ; Now make sure this computer supports extended reads
; mov ah,0x41 ; AH = 41h
; mov bx,0x55aa ; BX = 55AAh
; mov dl,[BYTE bp+BootDrive] ; DL = drive (80h-FFh)
; int 13h ; IBM/MS INT 13 Extensions - INSTALLATION CHECK
; jc PrintDiskError ; CF set on error (extensions not supported)
; cmp bx,0xaa55 ; BX = AA55h if installed
; jne PrintDiskError
; test cl,1 ; CX = API subset support bitmap
; jz PrintDiskError ; Bit 0, extended disk access functions (AH=42h-44h,47h,48h) supported
; Good, we're here so the computer supports LBA disk access
; So finish the extended read
mov dl,[BYTE bp+BootDrive] ; Drive number
mov ah,42h ; Int 13h, AH = 42h - Extended Read
int 13h ; Call BIOS
jc BadBoot ; If the read failed then abort
add sp,byte 0x10 ; Remove disk address packet from stack
popa ; Restore sector count & logical sector number
inc ax ; Increment Sector to Read
adc dx,byte 0
push bx
mov bx,es
add bx,byte 20h ; Increment read buffer for next sector
mov es,bx
pop bx
loop ReadSectorsLBALoop ; Read next sector
ret
; Reads logical sectors into [ES:BX]
; DX:AX has logical sector number to read
; CX has number of sectors to read
; CarryFlag set on error
ReadSectorsCHS:
popa
ReadSectorsCHSLoop:
pusha
xchg ax,cx
xchg ax,dx
xor dx,dx
div WORD [BYTE bp+SectorsPerTrack]
xchg ax,cx
div WORD [BYTE bp+SectorsPerTrack] ; Divide logical by SectorsPerTrack
inc dx ; Sectors numbering starts at 1 not 0
xchg cx,dx
div WORD [BYTE bp+NumberOfHeads] ; Number of heads
mov dh,dl ; Head to DH, drive to DL
mov dl,[BYTE bp+BootDrive] ; Drive number
mov ch,al ; Cylinder in CX
ror ah,2 ; Low 8 bits of cylinder in CH, high 2 bits
; in CL shifted to bits 6 & 7
or cl,ah ; Or with sector number
mov ax,0201h
int 13h ; DISK - READ SECTORS INTO MEMORY
; AL = number of sectors to read, CH = track, CL = sector
; DH = head, DL = drive, ES:BX -> buffer to fill
; Return: CF set on error, AH = status (see AH=01h), AL = number of sectors read
jc BadBoot
popa
inc ax ;Increment Sector to Read
jnz NoCarryCHS
inc dx
NoCarryCHS:
push bx
mov bx,es
add bx,byte 20h
mov es,bx
pop bx
; Increment read buffer for next sector
loop ReadSectorsCHSLoop ; Read next sector
ret
msgDiskError db 'Disk error',0dh,0ah,0
msgFreeLdr db 'freeldr.sys not found',0dh,0ah,0
; Sorry, need the space...
;msgAnyKey db 'Press any key to restart',0dh,0ah,0
msgAnyKey db 'Press any key',0dh,0ah,0
filename db 'FREELDR SYS'
times 509-($-$$) db 0 ; Pad to 509 bytes
BootPartition:
db 0
BootSignature:
dw 0aa55h ; BootSector signature

View File

@@ -1,505 +0,0 @@
; FAT32.ASM
; FAT32 Boot Sector
; Copyright (c) 1998, 2000, 2001, 2002 Brian Palmer
org 7c00h
segment .text
bits 16
start:
jmp short main
nop
OEMName db 'FrLdr1.0'
BytesPerSector dw 512
SectsPerCluster db 0
ReservedSectors dw 32
NumberOfFats db 2
MaxRootEntries dw 0 ; Always zero for FAT32 volumes
TotalSectors dw 0 ; Always zero for FAT32 volumes
MediaDescriptor db 0f8h
SectorsPerFat dw 0 ; Always zero for FAT32 volumes
SectorsPerTrack dw 0
NumberOfHeads dw 0
HiddenSectors dd 0
TotalSectorsBig dd 0
; FAT32 Inserted Info
SectorsPerFatBig dd 0
ExtendedFlags dw 0
FSVersion dw 0
RootDirStartCluster dd 0
FSInfoSector dw 0
BackupBootSector dw 6
Reserved1 times 12 db 0
; End FAT32 Inserted Info
BootDrive db 0
Reserved db 0
ExtendSig db 29h
SerialNumber dd 00000000h
VolumeLabel db 'NO NAME '
FileSystem db 'FAT32 '
main:
xor ax,ax ; Setup segment registers
mov ds,ax ; Make DS correct
mov es,ax ; Make ES correct
mov ss,ax ; Make SS correct
mov bp,7c00h
mov sp,7c00h ; Setup a stack
cmp BYTE [BYTE bp+BootDrive],BYTE 0xff ; If they have specified a boot drive then use it
jne CheckSectorsPerFat
mov [BYTE bp+BootDrive],dl ; Save the boot drive
CheckSectorsPerFat:
cmp WORD [BYTE bp+SectorsPerFat],byte 0x00 ; Check the old 16-bit value of SectorsPerFat
jnz CheckFailed ; If it is non-zero then exit with an error
CheckTotalSectors: ; Check the old 16-bit value of TotalSectors & MaxRootEntries
cmp DWORD [BYTE bp+MaxRootEntries],byte 0x00; by comparing the DWORD at offset MaxRootEntries to zero
jnz CheckFailed ; If it is non-zero then exit with an error
CheckFileSystemVersion:
cmp WORD [BYTE bp+FSVersion],byte 0x00 ; Check the file system version word
jna GetDriveParameters ; It is zero, so continue
CheckFailed:
jmp PrintFileSystemError ; If it is not zero then exit with an error
GetDriveParameters:
mov ax,0800h
mov dl,[BYTE bp+BootDrive] ; Get boot drive in dl
int 13h ; Request drive parameters from the bios
jnc CalcDriveSize ; If the call succeeded then calculate the drive size
; If we get here then the call to the BIOS failed
; so just set CHS equal to the maximum addressable
; size
mov cx,0ffffh
mov dh,cl
CalcDriveSize:
; Now that we have the drive geometry
; lets calculate the drive size
mov bl,ch ; Put the low 8-bits of the cylinder count into BL
mov bh,cl ; Put the high 2-bits in BH
shr bh,6 ; Shift them into position, now BX contains the cylinder count
and cl,3fh ; Mask off cylinder bits from sector count
; CL now contains sectors per track and DH contains head count
movzx eax,dh ; Move the heads into EAX
movzx ebx,bx ; Move the cylinders into EBX
movzx ecx,cl ; Move the sectors per track into ECX
inc eax ; Make it one based because the bios returns it zero based
inc ebx ; Make the cylinder count one based also
mul ecx ; Multiply heads with the sectors per track, result in edx:eax
mul ebx ; Multiply the cylinders with (heads * sectors) [stored in edx:eax already]
; We now have the total number of sectors as reported
; by the bios in eax, so store it in our variable
mov [BiosCHSDriveSize],eax
LoadExtraBootCode:
; First we have to load our extra boot code at
; sector 14 into memory at [0000:7e00h]
mov eax,0eh
add eax,DWORD [BYTE bp+HiddenSectors] ; Add the number of hidden sectors
mov cx,1
xor bx,bx
mov es,bx ; Read sector to [0000:7e00h]
mov bx,7e00h
call ReadSectors
jmp StartSearch
; Reads logical sectors into [ES:BX]
; EAX has logical sector number to read
; CX has number of sectors to read
ReadSectors:
cmp eax,DWORD [BiosCHSDriveSize] ; Check if they are reading a sector outside CHS range
jae ReadSectorsLBA ; Yes - go to the LBA routine
; If at all possible we want to use LBA routines because
; They are optimized to read more than 1 sector per read
pushad ; Save logical sector number & sector count
CheckInt13hExtensions: ; Now check if this computer supports extended reads
mov ah,0x41 ; AH = 41h
mov bx,0x55aa ; BX = 55AAh
mov dl,[BYTE bp+BootDrive] ; DL = drive (80h-FFh)
int 13h ; IBM/MS INT 13 Extensions - INSTALLATION CHECK
jc ReadSectorsCHS ; CF set on error (extensions not supported)
cmp bx,0xaa55 ; BX = AA55h if installed
jne ReadSectorsCHS
test cl,1 ; CX = API subset support bitmap
jz ReadSectorsCHS ; Bit 0, extended disk access functions (AH=42h-44h,47h,48h) supported
popad ; Restore sector count & logical sector number
ReadSectorsLBA:
pushad ; Save logical sector number & sector count
cmp cx,64 ; Since the LBA calls only support 0x7F sectors at a time we will limit ourselves to 64
jbe ReadSectorsSetupDiskAddressPacket ; If we are reading less than 65 sectors then just do the read
mov cx,64 ; Otherwise read only 64 sectors on this loop iteration
ReadSectorsSetupDiskAddressPacket:
mov [LBASectorsRead],cx
o32 push byte 0
push eax ; Put 64-bit logical block address on stack
push es ; Put transfer segment on stack
push bx ; Put transfer offset on stack
push cx ; Set transfer count
push byte 0x10 ; Set size of packet to 10h
mov si,sp ; Setup disk address packet on stack
mov dl,[BYTE bp+BootDrive] ; Drive number
mov ah,42h ; Int 13h, AH = 42h - Extended Read
int 13h ; Call BIOS
jc PrintDiskError ; If the read failed then abort
add sp,byte 0x10 ; Remove disk address packet from stack
popad ; Restore sector count & logical sector number
push bx
mov ebx,DWORD [LBASectorsRead]
add eax,ebx ; Increment sector to read
shl ebx,5
mov dx,es
add dx,bx ; Setup read buffer for next sector
mov es,dx
pop bx
sub cx,[LBASectorsRead]
jnz ReadSectorsLBA ; Read next sector
ret
LBASectorsRead:
dd 0
; Reads logical sectors into [ES:BX]
; EAX has logical sector number to read
; CX has number of sectors to read
ReadSectorsCHS:
popad ; Get logical sector number & sector count off stack
ReadSectorsCHSLoop:
pushad
xor edx,edx
movzx ecx,WORD [BYTE bp+SectorsPerTrack]
div ecx ; Divide logical by SectorsPerTrack
inc dl ; Sectors numbering starts at 1 not 0
mov cl,dl ; Sector in CL
mov edx,eax
shr edx,16
div WORD [BYTE bp+NumberOfHeads] ; Divide logical by number of heads
mov dh,dl ; Head in DH
mov dl,[BYTE bp+BootDrive] ; Drive number in DL
mov ch,al ; Cylinder in CX
ror ah,1 ; Low 8 bits of cylinder in CH, high 2 bits
ror ah,1 ; in CL shifted to bits 6 & 7
or cl,ah ; Or with sector number
mov ax,0201h
int 13h ; DISK - READ SECTORS INTO MEMORY
; AL = number of sectors to read, CH = track, CL = sector
; DH = head, DL = drive, ES:BX -> buffer to fill
; Return: CF set on error, AH = status (see AH=01h), AL = number of sectors read
jc PrintDiskError ; If the read failed then abort
popad
inc eax ; Increment Sector to Read
mov dx,es
add dx,byte 20h ; Increment read buffer for next sector
mov es,dx
loop ReadSectorsCHSLoop ; Read next sector
ret
; Displays a disk error message
; And reboots
PrintDiskError:
mov si,msgDiskError ; Bad boot disk message
call PutChars ; Display it
jmp Reboot
; Displays a file system error message
; And reboots
PrintFileSystemError:
mov si,msgFileSystemError ; FreeLdr not found message
call PutChars ; Display it
Reboot:
mov si,msgAnyKey ; Press any key message
call PutChars ; Display it
xor ax,ax
int 16h ; Wait for a keypress
int 19h ; Reboot
PutChars:
lodsb
or al,al
jz short Done
mov ah,0eh
mov bx,07h
int 10h
jmp short PutChars
Done:
retn
BiosCHSDriveSize dd 0
msgDiskError db 'Disk error',0dh,0ah,0
msgFileSystemError db 'File system error',0dh,0ah,0
msgAnyKey db 'Press any key to restart',0dh,0ah,0
times 509-($-$$) db 0 ; Pad to 509 bytes
BootPartition:
db 0
BootSignature:
dw 0aa55h ; BootSector signature
; End of bootsector
;
; Now starts the extra boot code that we will store
; at sector 14 on a FAT32 volume
;
; To remain multi-boot compatible with other operating
; systems we must not overwrite anything other than
; the bootsector which means we will have to use
; a different sector like 14 to store our extra boot code
StartSearch:
; Now we must get the first cluster of the root directory
mov eax,DWORD [BYTE bp+RootDirStartCluster]
cmp eax,0ffffff8h ; Check to see if this is the last cluster in the chain
jb ContinueSearch ; If not continue, if so then we didn't find freeldr.sys
jmp PrintFileNotFound
ContinueSearch:
mov bx,2000h
mov es,bx ; Read cluster to [2000:0000h]
call ReadCluster ; Read the cluster
; Now we have to find our way through the root directory to
; The OSLOADER.SYS file
xor bx,bx
mov bl,[BYTE bp+SectsPerCluster]
shl bx,4 ; BX = BX * 512 / 32
mov ax,2000h ; We loaded at 2000:0000
mov es,ax
xor di,di
mov si,filename
mov cx,11
rep cmpsb ; Compare filenames
jz FoundFile ; If same we found it
dec bx
jnz FindFile
jmp PrintFileNotFound
FindFile:
mov ax,es ; We didn't find it in the previous dir entry
add ax,2 ; So lets move to the next one
mov es,ax ; And search again
xor di,di
mov si,filename
mov cx,11
rep cmpsb ; Compare filenames
jz FoundFile ; If same we found it
dec bx ; Keep searching till we run out of dir entries
jnz FindFile ; Last entry?
; Get the next root dir cluster and try again until we run out of clusters
mov eax,DWORD [BYTE bp+RootDirStartCluster]
call GetFatEntry
mov [BYTE bp+RootDirStartCluster],eax
jmp StartSearch
FoundFile:
; Display "Loading FreeLoader..." message
mov si,msgLoading ; Loading message
call PutChars ; Display it
xor di,di ; ES:DI has dir entry
xor dx,dx
mov ax,WORD [es:di+14h] ; Get start cluster high word
shl eax,16
mov ax,WORD [es:di+1ah] ; Get start cluster low word
CheckStartCluster:
cmp eax,2 ; Check and see if the start cluster starts at cluster 2 or above
jnb CheckEndCluster ; If so then continue
jmp PrintFileSystemError ; If not exit with error
CheckEndCluster:
cmp eax,0ffffff8h ; Check and see if the start cluster is and end of cluster chain indicator
jb InitializeLoadSegment ; If not then continue
jmp PrintFileSystemError ; If so exit with error
InitializeLoadSegment:
mov bx,800h
mov es,bx
LoadFile:
cmp eax,0ffffff8h ; Check to see if this is the last cluster in the chain
jae LoadFileDone ; If so continue, if not then read the next one
push eax
xor bx,bx ; Load ROSLDR starting at 0000:8000h
push es
call ReadCluster
pop es
xor bx,bx
mov bl,[BYTE bp+SectsPerCluster]
shl bx,5 ; BX = BX * 512 / 16
mov ax,es ; Increment the load address by
add ax,bx ; The size of a cluster
mov es,ax
pop eax
push es
call GetFatEntry ; Get the next entry
pop es
jmp LoadFile ; Load the next cluster (if any)
LoadFileDone:
mov dl,[BYTE bp+BootDrive] ; Load boot drive into DL
mov dh,[BootPartition] ; Load boot partition into DH
xor ax,ax
push ax ; We loaded at 0000:8000
push WORD 8000h ; We will do a far return to 0000:8000h
retf ; Transfer control to ROSLDR
; Returns the FAT entry for a given cluster number
; On entry EAX has cluster number
; On return EAX has FAT entry for that cluster
GetFatEntry:
shl eax,2 ; EAX = EAX * 4 (since FAT32 entries are 4 bytes)
mov ecx,eax ; Save this for later in ECX
xor edx,edx
movzx ebx,WORD [BYTE bp+BytesPerSector]
push ebx
div ebx ; FAT Sector Number = EAX / BytesPerSector
movzx ebx,WORD [BYTE bp+ReservedSectors]
add eax,ebx ; FAT Sector Number += ReservedSectors
mov ebx,DWORD [BYTE bp+HiddenSectors]
add eax,ebx ; FAT Sector Number += HiddenSectors
pop ebx
dec ebx
and ecx,ebx ; FAT Offset Within Sector = ECX % BytesPerSector
; EAX holds logical FAT sector number
; ECX holds FAT entry offset
; Now we have to check the extended flags
; to see which FAT is the active one
; and use it, or if they are mirrored then
; no worries
movzx ebx,WORD [BYTE bp+ExtendedFlags] ; Get extended flags and put into ebx
and bx,0x0f ; Mask off upper 8 bits, now we have active fat in bl
jz LoadFatSector ; If fat is mirrored then skip fat calcs
cmp bl,[BYTE bp+NumberOfFats] ; Compare bl to number of fats
jb GetActiveFatOffset
jmp PrintFileSystemError ; If bl is bigger than numfats exit with error
GetActiveFatOffset:
push eax ; Save logical FAT sector number
mov eax,[BYTE bp+SectorsPerFatBig] ; Get the number of sectors occupied by one fat in eax
mul ebx ; Multiplied by the active FAT index we have in ebx
pop edx ; Get logical FAT sector number
add eax,edx ; Add the current FAT sector offset
LoadFatSector:
push ecx
; EAX holds logical FAT sector number
; Check if we have already loaded it
cmp eax,DWORD [FatSectorInCache]
je LoadFatSectorAlreadyLoaded
mov DWORD [FatSectorInCache],eax
mov bx,7000h
mov es,bx
xor bx,bx ; We will load it to [7000:0000h]
mov cx,1
call ReadSectors
LoadFatSectorAlreadyLoaded:
mov bx,7000h
mov es,bx
pop ecx
mov eax,DWORD [es:ecx] ; Get FAT entry
and eax,0fffffffh ; Mask off reserved bits
ret
FatSectorInCache: ; This variable tells us which sector we currently have in memory
dd 0ffffffffh ; There is no need to re-read the same sector if we don't have to
; Reads cluster number in EAX into [ES:0000]
ReadCluster:
; StartSector = ((Cluster - 2) * SectorsPerCluster) + ReservedSectors + HiddenSectors;
dec eax
dec eax
xor edx,edx
movzx ebx,BYTE [BYTE bp+SectsPerCluster]
mul ebx
push eax
xor edx,edx
movzx eax,BYTE [BYTE bp+NumberOfFats]
mul DWORD [BYTE bp+SectorsPerFatBig]
movzx ebx,WORD [BYTE bp+ReservedSectors]
add eax,ebx
add eax,DWORD [BYTE bp+HiddenSectors]
pop ebx
add eax,ebx ; EAX now contains the logical sector number of the cluster
xor bx,bx ; We will load it to [ES:0000], ES loaded before function call
movzx cx,BYTE [BYTE bp+SectsPerCluster]
call ReadSectors
ret
; Displays a file not found error message
; And reboots
PrintFileNotFound:
mov si,msgFreeLdr ; FreeLdr not found message
call PutChars ; Display it
mov si,msgAnyKey ; Press any key message
call PutChars ; Display it
jmp Reboot
msgFreeLdr db 'freeldr.sys not found',0dh,0ah,0
filename db 'FREELDR SYS'
msgLoading db 'Loading FreeLoader...',0dh,0ah,0
times 1022-($-$$) db 0 ; Pad to 1022 bytes
dw 0aa55h ; BootSector signature

File diff suppressed because it is too large Load Diff

View File

@@ -1,466 +0,0 @@
;
; Win2k FAT32 Boot Sector
;
; Brian Palmer <brianp@sginet.com>
;
;
; The BP register is initialized to 0x7c00, the start of
; the boot sector. The SP register is initialized to
; 0x7bf4, leaving 12 bytes of data storage space above
; the stack.
;
; The DWORD that gets stored at 0x7bf4 is 0xffffffff ??
;
; The DWORD that gets stored at 0x7bf8 is the count of
; total sectors of the volume, calculated from the BPB.
;
; The DWORD that gets stored at 0x7bfc is the logical
; sector number of the start of the data area.
;
org 7c00h
segment .text
bits 16
start:
jmp short main
nop
OEMName db 'MSWIN4.0'
BytesPerSector dw 512
SectsPerCluster db 1
ReservedSectors dw 1
NumberOfFats db 2
MaxRootEntries dw 0 ;512 - Always zero for FAT32 volumes
TotalSectors dw 0 ;2880 - Always zero for FAT32 volumes
MediaDescriptor db 0f8h
SectorsPerFat dw 0 ;9 - Always zero for FAT32 volumes
SectorsPerTrack dw 18
NumberOfHeads dw 2
HiddenSectors dd 0
TotalSectorsBig dd 0
; FAT32 Inserted Info
SectorsPerFatBig dd 0
ExtendedFlags dw 0
FSVersion dw 0
RootDirStartCluster dd 0
FSInfoSector dw 0
BackupBootSector dw 6
Reserved1 times 12 db 0
; End FAT32 Inserted Info
BootDrive db 80h
Reserved db 0
ExtendSig db 29h
SerialNumber dd 00000000h
VolumeLabel db 'NO NAME '
FileSystem db 'FAT32 '
main:
00007C5A 33C9 xor cx,cx
00007C5C 8ED1 mov ss,cx ; Setup the stack
00007C5E BCF47B mov sp,0x7bf4 ; Give us 12 bytes of space above the stack
00007C61 8EC1 mov es,cx
00007C63 8ED9 mov ds,cx
00007C65 BD007C mov bp,0x7c00
00007C68 884E02 mov [bp+0x2],cl ; Zero out the nop instruction?? (3rd byte of the boot sector)
00007C6B 8A5640 mov dl,[bp+BootDrive]
00007C6E B408 mov ah,0x8
00007C70 CD13 int 0x13 ; Int 13, func 8 - Get Drive Parameters
00007C72 7305 jnc drive_param_ok ; If no error jmp
drive_param_error:
00007C74 B9FFFF mov cx,0xffff ; We couldn't determine the drive parameters
00007C77 8AF1 mov dh,cl ; So just set the CHS to 0xff
drive_param_ok:
00007C79 660FB6C6 movzx eax,dh ; Store the number of heads in eax
00007C7D 40 inc ax ; Make it one-based because the bios returns it zero-based
00007C7E 660FB6D1 movzx edx,cl ; Store the sectors per track in edx
00007C82 80E23F and dl,0x3f ; Mask off the cylinder bits
00007C85 F7E2 mul dx ; Multiply the sectors per track with the heads, result in dx:ax
00007C87 86CD xchg cl,ch ; Switch the cylinder with the sectors
00007C89 C0ED06 shr ch,0x6 ; Move the top two cylinder bits down where they should be
00007C8C 41 inc cx ; Make it one-based because the bios returns it zero-based
00007C8D 660FB7C9 movzx ecx,cx
00007C91 66F7E1 mul ecx ; Multiply the cylinders with (heads * sectors) [stored in dx:ax already]
00007C94 668946F8 mov [bp-0x8],eax ; This value is the number of total sectors on the disk, so save it for later
00007C98 837E1600 cmp word [bp+TotalSectors],byte +0x0 ; Check the old 16-bit value of TotalSectors
00007C9C 7538 jnz print_ntldr_error_message ; If it is non-zero then exit with an error
00007C9E 837E2A00 cmp word [bp+FSVersion],byte +0x0 ; Check the file system version word
00007CA2 7732 ja print_ntldr_error_message ; If it is not zero then exit with an error
;
; We are now ready to load our second sector of boot code
; But first, a bit of undocumented information about how
; Win2k stores it's second sector of boot code.
;
; The FAT32 filesystem was designed so that you can store
; multiple sectors of boot code. The boot sector of a FAT32
; volume is actually three sectors long. Microsoft extended
; the BPB so much that you can't fit enough code in the
; boot sector to make it work. So they extended it. Sector 0
; is the traditional boot sector, sector 1 is the FSInfo sector,
; and sector 2 is used to store extra boot code to make up
; for the lost space the BPB takes.
;
; Now this creates an interesting problem. Suppose for example
; that the user has Win98 and Win2k installed. The Win2k
; boot sector is stored at sector 0 and the Win98 boot sector is
; stored as BOOTSECT.DOS on the file system. Now if Win2k were
; to store it's second sector of boot code in sector 2 like
; the fat spec says to do then when you try to dual boot back
; to Win98 the Win98 boot sector will load Win2k's second
; sector of boot code. Understand? ;-)
;
; To get around this problem Win2k stores it's second sector
; of boot code elsewhere. This sector is always stored at sector 13
; on the file system. Now don't ask me what happens when you don't
; have enough reserved sectors to store it, but I've never seen a
; FAT32 volume that didn't have at least 32 reserved sectors.
;
00007CA4 668B461C mov eax,[bp+HiddenSectors] ; Get the count of hidden sectors
00007CA8 6683C00C add eax,byte +0xc ; Add 12 to that value so that we are loading the 13th sector of the volume
00007CAC BB0080 mov bx,0x8000 ; Read the sector to address 0x8000
00007CAF B90100 mov cx,0x1 ; Read just one sector
00007CB2 E82B00 call read_sectors ; Read it
00007CB5 E94803 jmp 0x8000 ; Jump to the next sector of boot code
print_disk_error_message:
00007CB8 A0FA7D mov al,[DISK_ERR_offset_from_0x7d00]
putchars:
00007CBB B47D mov ah,0x7d
00007CBD 8BF0 mov si,ax
get_another_char:
00007CBF AC lodsb
00007CC0 84C0 test al,al
00007CC2 7417 jz reboot
00007CC4 3CFF cmp al,0xff
00007CC6 7409 jz print_reboot_message
00007CC8 B40E mov ah,0xe
00007CCA BB0700 mov bx,0x7
00007CCD CD10 int 0x10
00007CCF EBEE jmp short get_another_char
print_reboot_message:
00007CD1 A0FB7D mov al,[RESTART_ERR_offset_from_0x7d00]
00007CD4 EBE5 jmp short putchars
print_ntldr_error_message:
00007CD6 A0F97D mov al,[NTLDR_ERR_offset_from_0x7d00]
00007CD9 EBE0 jmp short putchars
reboot:
00007CDB 98 cbw
00007CDC CD16 int 0x16
00007CDE CD19 int 0x19
read_sectors:
00007CE0 6660 pushad
00007CE2 663B46F8 cmp eax,[bp-0x8]
00007CE6 0F824A00 jc near 0x7d34
00007CEA 666A00 o32 push byte +0x0
00007CED 6650 push eax
00007CEF 06 push es
00007CF0 53 push bx
00007CF1 666810000100 push dword 0x10010
00007CF7 807E0200 cmp byte [bp+0x2],0x0
00007CFB 0F852000 jnz near 0x7d1f
00007CFF B441 mov ah,0x41
00007D01 BBAA55 mov bx,0x55aa
00007D04 8A5640 mov dl,[bp+BootDrive]
00007D07 CD13 int 0x13
00007D09 0F821C00 jc near 0x7d29
00007D0D 81FB55AA cmp bx,0xaa55
00007D11 0F851400 jnz near 0x7d29
00007D15 F6C101 test cl,0x1
00007D18 0F840D00 jz near 0x7d29
00007D1C FE4602 inc byte [bp+0x2]
00007D1F B442 mov ah,0x42
00007D21 8A5640 mov dl,[bp+BootDrive]
00007D24 8BF4 mov si,sp
00007D26 CD13 int 0x13
00007D28 B0F9 mov al,0xf9
00007D2A 6658 pop eax
00007D2C 6658 pop eax
00007D2E 6658 pop eax
00007D30 6658 pop eax
00007D32 EB2A jmp short 0x7d5e
00007D34 6633D2 xor edx,edx
00007D37 660FB74E18 movzx ecx,word [bp+SectorsPerTrack]
00007D3C 66F7F1 div ecx
00007D3F FEC2 inc dl
00007D41 8ACA mov cl,dl
00007D43 668BD0 mov edx,eax
00007D46 66C1EA10 shr edx,0x10
00007D4A F7761A div word [bp+NumberOfHeads]
00007D4D 86D6 xchg dl,dh
00007D4F 8A5640 mov dl,[bp+BootDrive]
00007D52 8AE8 mov ch,al
00007D54 C0E406 shl ah,0x6
00007D57 0ACC or cl,ah
00007D59 B80102 mov ax,0x201
00007D5C CD13 int 0x13
00007D5E 6661 popad
00007D60 0F8254FF jc near print_disk_error_message
00007D64 81C30002 add bx,0x200
00007D68 6640 inc eax
00007D6A 49 dec cx
00007D6B 0F8571FF jnz near read_sectors
00007D6F C3 ret
NTLDR db 'NTLDR '
filler times 49 db 0
NTLDR_ERR db 0dh,0ah,'NTLDR is missing',0ffh
DISK_ERR db 0dh,0ah,'Disk error',0ffh
RESTART_ERR db 0dh,0ah,'Press any key to restart',0dh,0ah
more_filler times 16 db 0
NTLDR_offset_from_0x7d00 db 0
NTLDR_ERR_offset_from_0x7d00 db 0ach
DISK_ERR_offset_from_0x7d00 db 0bfh
RESTART_ERR_offset_from_0x7d00 db 0cch
dw 0
dw 0aa55h
;
; And that ends the code that makes up the traditional boot sector
; From here on out is a disassembly of the extra sector of boot
; code required for a FAT32 volume. Win2k stores this code at
; sector 13 on the file system.
;
00008000 660FB64610 movzx eax,byte [bp+NumberOfFats] ; Put the number of fats into eax
00008005 668B4E24 mov ecx,[bp+SectorsPerFatBig] ; Put the count of sectors per fat into ecx
00008009 66F7E1 mul ecx ; Multiply them, edx:eax = (eax * ecx)
0000800C 6603461C add eax,[bp+HiddenSectors] ; Add the hidden sectors to eax
00008010 660FB7560E movzx edx,word [bp+ReservedSectors] ; Put the count of reserved sectors into edx
00008015 6603C2 add eax,edx ; Add it to eax
00008018 668946FC mov [bp-0x4],eax ; eax now contains the start of the data area, so save it for later
0000801C 66C746F4FFFFFFFF mov dword [bp-0xc],0xffffffff ; Save 0xffffffff for later??
00008024 668B462C mov eax,[bp+RootDirStartCluster] ; Put the starting cluster of the root directory into eax
00008028 6683F802 cmp eax,byte +0x2 ; Check and see if the root directory starts at cluster 2 or above
0000802C 0F82A6FC jc near print_ntldr_error_message ; If not exit with error
00008030 663DF8FFFF0F cmp eax,0xffffff8 ; Check and see if the root directory start cluster is and end of cluster chain indicator
00008036 0F839CFC jnc near print_ntldr_error_message ; If so exit with error
search_root_directory_cluster:
0000803A 6650 push eax ; Save root directory start cluster on stack
0000803C 6683E802 sub eax,byte +0x2 ; Adjust it because the first two fat entries are unused so the third entry marks the first data area cluster
00008040 660FB65E0D movzx ebx,byte [bp+SectsPerCluster] ; Put the number of sectors per cluster in ebx
00008045 8BF3 mov si,bx ; Now store it also in si register
00008047 66F7E3 mul ebx ; Multiply sectors per cluster with root directory start cluster
0000804A 660346FC add eax,[bp-0x4] ; Add the start sector of the data area
read_directory_sector:
0000804E BB0082 mov bx,0x8200 ; We now have the start sector of the root directory, so load it to 0x8200
00008051 8BFB mov di,bx ; Put the address of the root directory sector in di also
00008053 B90100 mov cx,0x1 ; Read one sector
00008056 E887FC call read_sectors ; Perform the read
check_entry_for_ntldr:
00008059 382D cmp [di],ch ; Check the first byte of the root directory entry for zero
0000805B 741E jz ntldr_not_found ; If so then NTLDR is missing so exit with error
0000805D B10B mov cl,0xb ; Put the value 11 in cl so we can compare an 11-byte filename
0000805F 56 push si ; Save si (which contains the number of sectors per cluster)
00008060 BE707D mov si,NTLDR ;0x7d70 ; Check and see if "NTLDR" is the first file entry
00008063 F3A6 repe cmpsb ; Do the compare
00008065 5E pop si ; Restore sectors per cluster into si
00008066 741B jz ntldr_found ; If we found it then continue, else check next entry
00008068 03F9 add di,cx ; Add 0 to di? the next entry is 0x15 bytes away
0000806A 83C715 add di,byte +0x15 ; Add 0x15 to di
0000806D 3BFB cmp di,bx ; Check to see if we have reached the end of our sector we loaded, read_sectors sets bx = end address of data loaded
0000806F 72E8 jc check_entry_for_ntldr ; If we haven't reached the end then check the next entry
00008071 4E dec si ; decrement si, si holds the number of sectors per cluster
00008072 75DA jnz read_directory_sector ; If it's not zero then search the next sector for NTLDR
00008074 6658 pop eax ; If we got here that means we didn't find NTLDR in the previous root directory cluster, so restore eax with the start cluster
00008076 E86500 call get_fat_entry ; Get the next cluster in the fat chain
00008079 72BF jc search_root_directory_cluster ; If we reached end-of-file marker then don't jump, otherwise continue search
ntldr_not_found:
0000807B 83C404 add sp,byte +0x4
0000807E E955FC jmp print_ntldr_error_message
ntldr_load_segment_address dw 0x2000
ntldr_found:
00008083 83C404 add sp,byte +0x4 ; Adjust stack to remove root directory start cluster
00008086 8B7509 mov si,[di+0x9] ; Put start cluster high word in si
00008089 8B7D0F mov di,[di+0xf] ; Put start cluster low word in di
0000808C 8BC6 mov ax,si ; Put high word in ax
0000808E 66C1E010 shl eax,0x10 ; Shift it into position
00008092 8BC7 mov ax,di ; Put low word in ax, now eax contains start cluster of NTLDR
00008094 6683F802 cmp eax,byte +0x2 ; Check and see if the start cluster of NTLDR starts at cluster 2 or above
00008098 0F823AFC jc near print_ntldr_error_message ; If not exit with error
0000809C 663DF8FFFF0F cmp eax,0xffffff8 ; Check and see if the start cluster of NTLDR is and end of cluster chain indicator
000080A2 0F8330FC jnc near print_ntldr_error_message ; If so exit with error
load_next_ntldr_cluster:
000080A6 6650 push eax ; Save NTLDR start cluster for later
000080A8 6683E802 sub eax,byte +0x2 ; Adjust it because the first two fat entries are unused so the third entry marks the first data area cluster
000080AC 660FB64E0D movzx ecx,byte [bp+SectsPerCluster] ; Put the sectors per cluster into ecx
000080B1 66F7E1 mul ecx ; Multiply sectors per cluster by the start cluster, we now have the logical start sector
000080B4 660346FC add eax,[bp-0x4] ; Add the start of the data area logical sector
000080B8 BB0000 mov bx,0x0 ; Load NTLDR to offset zero
000080BB 06 push es ; Save es
000080BC 8E068180 mov es,[ntldr_load_segment_address] ; Get the segment address to load NTLDR to
000080C0 E81DFC call read_sectors ; Load the first cluster
000080C3 07 pop es ; Restore es
000080C4 6658 pop eax ; Restore eax to NTLDR start cluster
000080C6 C1EB04 shr bx,0x4 ; bx contains the amount of data we transferred, so divide it by 16
000080C9 011E8180 add [ntldr_load_segment_address],bx ; Add that value to the segment
000080CD E80E00 call get_fat_entry ; Get the next cluster in eax
000080D0 0F830200 jnc near jump_to_ntldr ; If we have reached the end of file then lets get to NTLDR
000080D4 72D0 jc load_next_ntldr_cluster ; If not, then load another cluster
jump_to_ntldr:
000080D6 8A5640 mov dl,[bp+BootDrive] ; Put the boot drive in dl
000080D9 EA00000020 jmp 0x2000:0x0 ; Jump to NTLDR
get_fat_entry:
000080DE 66C1E002 shl eax,0x2 ; Multiply cluster by 4
000080E2 E81100 call load_fat_sector ; Load the fat sector
000080E5 26668B01 mov eax,[es:bx+di] ; Get the fat entry
000080E9 6625FFFFFF0F and eax,0xfffffff ; Mask off the most significant 4 bits
000080EF 663DF8FFFF0F cmp eax,0xffffff8 ; Compare it to end of file marker to set the flags correctly
000080F5 C3 ret ; Return to caller
load_fat_sector:
000080F6 BF007E mov di,0x7e00 ; We will load the fat sector to 0x7e00
000080F9 660FB74E0B movzx ecx,word [bp+SectsPerCluster] ; Get the sectors per cluster
000080FE 6633D2 xor edx,edx ; We will divide (cluster * 4) / sectorspercluster
00008101 66F7F1 div ecx ; eax is already set before we get to this routine
00008104 663B46F4 cmp eax,[bp-0xc] ; Compare eax to 0xffffffff (initially, we set this value later)
00008108 743A jz load_fat_sector_end ; If it is the same return
0000810A 668946F4 mov [bp-0xc],eax ; Update that value
0000810E 6603461C add eax,[bp+HiddenSectors] ; Add the hidden sectors
00008112 660FB74E0E movzx ecx,word [bp+ReservedSectors] ; Add the reserved sectors
00008117 6603C1 add eax,ecx ; To the hidden sectors + the value we computed earlier
0000811A 660FB75E28 movzx ebx,word [bp+ExtendedFlags] ; Get extended flags and put into ebx
0000811F 83E30F and bx,byte +0xf ; Mask off upper 8 bits
00008122 7416 jz load_fat_sector_into_memory ; If fat is mirrored then skip fat calcs
00008124 3A5E10 cmp bl,[bp+NumberOfFats] ; Compare bl to number of fats
00008127 0F83ABFB jnc near print_ntldr_error_message ; If bl is bigger than numfats exit with error
0000812B 52 push dx ; Save dx
0000812C 668BC8 mov ecx,eax ; Put the current fat sector offset into ecx
0000812F 668B4624 mov eax,[bp+SectorsPerFatBig] ; Get the number of sectors occupied by one fat
00008133 66F7E3 mul ebx ; Multiplied by the active fat index
00008136 6603C1 add eax,ecx ; Add the current fat sector offset
00008139 5A pop dx ; Restore dx
load_fat_sector_into_memory:
0000813A 52 push dx ; Save dx, what is so important in dx??
0000813B 8BDF mov bx,di ; Put 0x7e00 in bx
0000813D B90100 mov cx,0x1 ; Load one sector
00008140 E89DFB call read_sectors ; Perform the read
00008143 5A pop dx ; Restore dx
load_fat_sector_end:
00008144 8BDA mov bx,dx ; Put it into bx, what is this value??
00008146 C3 ret ; Return
00008147 0000 add [bx+si],al
00008149 0000 add [bx+si],al
0000814B 0000 add [bx+si],al
0000814D 0000 add [bx+si],al
0000814F 0000 add [bx+si],al
00008151 0000 add [bx+si],al
00008153 0000 add [bx+si],al
00008155 0000 add [bx+si],al
00008157 0000 add [bx+si],al
00008159 0000 add [bx+si],al
0000815B 0000 add [bx+si],al
0000815D 0000 add [bx+si],al
0000815F 0000 add [bx+si],al
00008161 0000 add [bx+si],al
00008163 0000 add [bx+si],al
00008165 0000 add [bx+si],al
00008167 0000 add [bx+si],al
00008169 0000 add [bx+si],al
0000816B 0000 add [bx+si],al
0000816D 0000 add [bx+si],al
0000816F 0000 add [bx+si],al
00008171 0000 add [bx+si],al
00008173 0000 add [bx+si],al
00008175 0000 add [bx+si],al
00008177 0000 add [bx+si],al
00008179 0000 add [bx+si],al
0000817B 0000 add [bx+si],al
0000817D 0000 add [bx+si],al
0000817F 0000 add [bx+si],al
00008181 0000 add [bx+si],al
00008183 0000 add [bx+si],al
00008185 0000 add [bx+si],al
00008187 0000 add [bx+si],al
00008189 0000 add [bx+si],al
0000818B 0000 add [bx+si],al
0000818D 0000 add [bx+si],al
0000818F 0000 add [bx+si],al
00008191 0000 add [bx+si],al
00008193 0000 add [bx+si],al
00008195 0000 add [bx+si],al
00008197 0000 add [bx+si],al
00008199 0000 add [bx+si],al
0000819B 0000 add [bx+si],al
0000819D 0000 add [bx+si],al
0000819F 0000 add [bx+si],al
000081A1 0000 add [bx+si],al
000081A3 0000 add [bx+si],al
000081A5 0000 add [bx+si],al
000081A7 0000 add [bx+si],al
000081A9 0000 add [bx+si],al
000081AB 0000 add [bx+si],al
000081AD 0000 add [bx+si],al
000081AF 0000 add [bx+si],al
000081B1 0000 add [bx+si],al
000081B3 0000 add [bx+si],al
000081B5 0000 add [bx+si],al
000081B7 0000 add [bx+si],al
000081B9 0000 add [bx+si],al
000081BB 0000 add [bx+si],al
000081BD 0000 add [bx+si],al
000081BF 0000 add [bx+si],al
000081C1 0000 add [bx+si],al
000081C3 0000 add [bx+si],al
000081C5 0000 add [bx+si],al
000081C7 0000 add [bx+si],al
000081C9 0000 add [bx+si],al
000081CB 0000 add [bx+si],al
000081CD 0000 add [bx+si],al
000081CF 0000 add [bx+si],al
000081D1 0000 add [bx+si],al
000081D3 0000 add [bx+si],al
000081D5 0000 add [bx+si],al
000081D7 0000 add [bx+si],al
000081D9 0000 add [bx+si],al
000081DB 0000 add [bx+si],al
000081DD 0000 add [bx+si],al
000081DF 0000 add [bx+si],al
000081E1 0000 add [bx+si],al
000081E3 0000 add [bx+si],al
000081E5 0000 add [bx+si],al
000081E7 0000 add [bx+si],al
000081E9 0000 add [bx+si],al
000081EB 0000 add [bx+si],al
000081ED 0000 add [bx+si],al
000081EF 0000 add [bx+si],al
000081F1 0000 add [bx+si],al
000081F3 0000 add [bx+si],al
000081F5 0000 add [bx+si],al
000081F7 0000 add [bx+si],al
000081F9 0000 add [bx+si],al
000081FB 0000 add [bx+si],al
000081FD 0055AA add [di-0x56],dl ; We can't forget the infamous boot signature

View File

@@ -1,249 +0,0 @@
;
; The BP register is initialized to 0x7c00, the start of
; the boot sector. The SP register is initialized to
; 0x7bf0, leaving 16 bytes of data storage space above
; the stack.
;
; The DWORD that gets stored at 0x7bfc is the logical
; sector number of the start of the data area.
;
; The DWORD that gets stored at 0x7bf8 is ????????
;
; The DWORD that gets stored at 0x7bf4 is ????????
;
; The DWORD that gets stored at 0x7bf0 is ????????
;
org 7c00h
segment .text
bits 16
start:
jmp short main
nop
OEMName db 'MSWIN4.0'
BytesPerSector dw 512
SectsPerCluster db 1
ReservedSectors dw 1
NumberOfFats db 2
MaxRootEntries dw 0 ;512 - Always zero for FAT32 volumes
TotalSectors dw 0 ;2880 - Always zero for FAT32 volumes
MediaDescriptor db 0f8h
SectorsPerFat dw 0 ;9 - Always zero for FAT32 volumes
SectorsPerTrack dw 18
NumberOfHeads dw 2
HiddenSectors dd 0
TotalSectorsBig dd 0
BootDrive db 80h
Reserved db 0
ExtendSig db 29h
SerialNumber dd 00000000h
VolumeLabel db 'NO NAME '
FileSystem db 'FAT16 '
main:
00007C3E 33C9 xor cx,cx
00007C40 8ED1 mov ss,cx ; Setup stack
00007C42 BCF07B mov sp,0x7bf0 ; Give us 16 bytes (4 dwords) of space above stack
00007C45 8ED9 mov ds,cx
00007C47 B80020 mov ax,0x2000
00007C4A 8EC0 mov es,ax ; Setup ES:0000 == 2000:0000
00007C4C FC cld
00007C4D BD007C mov bp,0x7c00
00007C50 384E24 cmp [bp+BootDrive],cl ; Compare the boot drive to zero (I think they are testing for a hard disk drive number)
00007C53 7D24 jnl floppy_boot ; Nope, it's a floppy, skip partition table tests
00007C55 8BC1 mov ax,cx ; Move zero to AX
00007C57 99 cwd ; DX:AX now contains zero
00007C58 E83C01 call read_one_sector ; Try to read in the MBR sector
00007C5B 721C jc floppy_boot ; Read failed, continue
00007C5D 83EB3A sub bx,byte +0x3a ; BX comes back with 512, make it equal to 454 (offset of partition table in MBR)
00007C60 66A11C7C mov eax,[HiddenSectors] ; Put HiddenSectors in EAX
find_our_partition:
00007C64 26663B07 cmp eax,[es:bx] ; Compare partition table entry's start sector to HiddenSectors
00007C68 268A57FC mov dl,[es:bx-0x4] ; Get partition type byte for this entry
00007C6C 7506 jnz next_partition_entry ; If partition start sector != HiddenSectors then skip this entry
00007C6E 80CA02 or dl,0x2 ; Set the second bit in partition type?? I guess this makes types 4 & 6 identical
00007C71 885602 mov [bp+0x2],dl ; Save it on top of nop instruction (3rd byte of boot sector)
next_partition_entry:
00007C74 80C310 add bl,0x10 ; Add 16 to bl (offset of next entry in partition table)
00007C77 73EB jnc find_our_partition ; Jump back until we hit the end of the partition table
; We now have our partition type at 0000:7C02
; If the type was 4 or 6 then that byte is 6
; I can't imagine why the boot sector needs to store
; this information, but hopefully I will uncover it
; as I further disassemble this boot sector.
floppy_boot:
00007C79 33C9 xor cx,cx ; Zero out CX
00007C7B 8A4610 mov al,[bp+NumberOfFats] ; Get the number of FATs in AL (usually 2)
00007C7E 98 cbw ; Sign extend it into AX (AX == 2)
00007C7F F76616 mul word [bp+NumberOfFats] ; Multiply it with NumberOfFats PLUS the low byte of MaxRootEntries!!??
00007C82 03461C add ax,[bp+HiddenSectors] ; Result is in DX:AX
00007C85 13561E adc dx,[bp+HiddenSectors+2] ; Add HiddenSectors to DX:AX
00007C88 03460E add ax,[bp+ReservedSectors] ; Add ReservedSectors to DX:AX
00007C8B 13D1 adc dx,cx ; CX still contains zero
00007C8D 8B7611 mov si,[bp+MaxRootEntries] ; Get MaxRootEntries in SI
00007C90 60 pusha ; Save all registers (right now DX:AX has starting sector of root dir)
00007C91 8946FC mov [bp-0x4],ax ; Save the starting sector of the root directory
00007C94 8956FE mov [bp-0x2],dx ; Save it in the first 4 bytes before the boot sector
00007C97 B82000 mov ax,0x20 ; AX == 32 (size of a directory entry)
00007C9A F7E6 mul si ; Multiply it with MaxRootEntries (DX:AX == length in bytes of root directory)
00007C9C 8B5E0B mov bx,[bp+BytesPerSector] ; Get the BytesPerSector in BX
00007C9F 03C3 add ax,bx ; Add it to AX (what if this addition carries? MS should 'adc dx,0' shouldn't they?)
00007CA1 48 dec ax ; Subtract one (basically rounding up)
00007CA2 F7F3 div bx ; Divide DX:AX (length of root dir in bytes) by the size of a sector
00007CA4 0146FC add [bp-0x4],ax ; Add the number of sectors of the root directory to our other value
00007CA7 114EFE adc [bp-0x2],cx ; Now the first 4 bytes before the boot sector contain the starting sector of the data area
00007CAA 61 popa ; Restore all registers (DX:AX has start sector of root dir)
load_root_dir_sector:
00007CAB BF0000 mov di,0x0 ; Zero out di
00007CAE E8E600 call read_one_sector ; Read the first sector of the root directory
00007CB1 7239 jc print_disk_error_message ; Read failed, print disk error and reboot
search_directory:
00007CB3 26382D cmp [es:di],ch ; If the first byte of the directory entry is zero then we have reached the end
00007CB6 7417 jz print_ntldr_error_message; of the directory and NTLDR is not here so reboot
00007CB8 60 pusha ; Save all registers
00007CB9 B10B mov cl,0xb ; Put 11 in cl (length of filename in directory entry)
00007CBB BEA17D mov si,NTLDR ; Put offset of filename string in DS:SI
00007CBE F3A6 repe cmpsb ; Compare this directory entry against 'NTLDR '
00007CC0 61 popa ; Restore all the registers
00007CC1 7432 jz found_ntldr ; If we found NTLDR then jump
00007CC3 4E dec si ; SI holds MaxRootEntries, subtract one
00007CC4 7409 jz print_ntldr_error_message; If we are out of root dir entries then reboot
00007CC6 83C720 add di,byte +0x20 ; Increment DI by the size of a directory entry
00007CC9 3BFB cmp di,bx ; Compare DI to BX (DI has offset to next dir entry, BX has address of end of directory sector in memory)
00007CCB 72E6 jc search_directory ; If DI is less than BX loop again
00007CCD EBDC jmp short load_root_dir_sector ; Didn't find NTLDR in this directory sector, try again
print_ntldr_error_message:
00007CCF A0FB7D mov al,[NTLDR_ERR_offset_from_0x7d00]
putchars:
00007CD2 B47D mov ah,0x7d
00007CD4 8BF0 mov si,ax
get_another_char:
00007CD6 AC lodsb
00007CD7 98 cbw
00007CD8 40 inc ax
00007CD9 740C jz print_reboot_message
00007CDB 48 dec ax
00007CDC 7413 jz reboot
00007CDE B40E mov ah,0xe
00007CE0 BB0700 mov bx,0x7
00007CE3 CD10 int 0x10
00007CE5 EBEF jmp short get_another_char
print_reboot_message:
00007CE7 A0FD7D mov al,[RESTART_ERR_offset_from_0x7d00]
00007CEA EBE6 jmp short putchars
print_disk_error_message:
00007CEC A0FC7D mov al,[DISK_ERR_offset_from_0x7d00]
00007CEF EBE1 jmp short putchars
reboot:
00007CF1 CD16 int 0x16
00007CF3 CD19 int 0x19
found_ntldr:
00007CF5 268B551A mov dx,[es:di+0x1a] ; Get NTLDR start cluster in DX
00007CF9 52 push dx ; Save it on the stack
00007CFA B001 mov al,0x1 ; Read 1 cluster? Or is this one sector?
00007CFC BB0000 mov bx,0x0 ; ES:BX is the load address (2000:0000)
00007CFF E83B00 call read_cluster ; Do the read
00007D02 72E8 jc print_disk_error_message ; If it failed then reboot
00007D04 5B pop bx ; Get the start cluster of NTLDR in BX
00007D05 8A5624 mov dl,[bp+BootDrive] ; Get boot drive in DL
00007D08 BE0B7C mov si,0x7c0b
00007D0B 8BFC mov di,sp
00007D0D C746F03D7D mov word [bp-0x10],read_cluster
00007D12 C746F4297D mov word [bp-0xc],0x7d29
00007D17 8CD9 mov cx,ds
00007D19 894EF2 mov [bp-0xe],cx
00007D1C 894EF6 mov [bp-0xa],cx
00007D1F C606967DCB mov byte [0x7d96],0xcb
00007D24 EA03000020 jmp 0x2000:0x3
00007D29 0FB6C8 movzx cx,al
00007D2C 668B46F8 mov eax,[bp-0x8]
00007D30 6603461C add eax,[bp+HiddenSectors]
00007D34 668BD0 mov edx,eax
00007D37 66C1EA10 shr edx,0x10
00007D3B EB5E jmp short 0x7d9b
read_cluster:
00007D3D 0FB6C8 movzx cx,al
00007D40 4A dec dx
00007D41 4A dec dx
00007D42 8A460D mov al,[bp+SectsPerCluster]
00007D45 32E4 xor ah,ah
00007D47 F7E2 mul dx
00007D49 0346FC add ax,[bp-0x4]
00007D4C 1356FE adc dx,[bp-0x2]
00007D4F EB4A jmp short 0x7d9b
read_sectors:
00007D51 52 push dx
00007D52 50 push ax
00007D53 06 push es
00007D54 53 push bx
00007D55 6A01 push byte +0x1
00007D57 6A10 push byte +0x10
00007D59 91 xchg ax,cx
00007D5A 8B4618 mov ax,[bp+SectorsPerTrack]
00007D5D 96 xchg ax,si
00007D5E 92 xchg ax,dx
00007D5F 33D2 xor dx,dx
00007D61 F7F6 div si
00007D63 91 xchg ax,cx
00007D64 F7F6 div si
00007D66 42 inc dx
00007D67 87CA xchg cx,dx
00007D69 F7761A div word [bp+NumberOfHeads]
00007D6C 8AF2 mov dh,dl
00007D6E 8AE8 mov ch,al
00007D70 C0CC02 ror ah,0x2
00007D73 0ACC or cl,ah
00007D75 B80102 mov ax,0x201
00007D78 807E020E cmp byte [bp+0x2],0xe
00007D7C 7504 jnz 0x7d82
00007D7E B442 mov ah,0x42
00007D80 8BF4 mov si,sp
00007D82 8A5624 mov dl,[bp+BootDrive]
00007D85 CD13 int 0x13
00007D87 61 popa
00007D88 61 popa
00007D89 720B jc 0x7d96
00007D8B 40 inc ax
00007D8C 7501 jnz 0x7d8f
00007D8E 42 inc dx
00007D8F 035E0B add bx,[bp+BytesPerSector]
00007D92 49 dec cx
00007D93 7506 jnz 0x7d9b
00007D95 F8 clc
00007D96 C3 ret
read_one_sector:
00007D97 41 inc cx
00007D98 BB0000 mov bx,0x0
00007D9B 60 pusha
00007D9C 666A00 o32 push byte +0x0
00007D9F EBB0 jmp short 0x7d51
NTLDR db 'NTLDR '
NTLDR_ERR db 0dh,0ah,'NTLDR is missing',0ffh
DISK_ERR db 0dh,0ah,'Disk error',0ffh
RESTART_ERR db 0dh,0ah,'Press any key to restart',0dh,0ah
filler times 18 db 0
NTLDR_offset_from_0x7d00 db 0
NTLDR_ERR_offset_from_0x7d00 db 0ach
DISK_ERR_offset_from_0x7d00 db 0bfh
RESTART_ERR_offset_from_0x7d00 db 0cch
dw 0
dw 0aa55h

View File

@@ -1 +0,0 @@
*.res

View File

@@ -1,49 +0,0 @@
#
# FreeLoader
# Copyright (C) 1999 - 2003 Brian Palmer <brianp@sginet.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
FLAGS = -Wall
OBJS = rs232.o fdebug.o fdebug.res
.PHONY : clean
all: fdebug.exe
fdebug.exe: $(OBJS)
@echo ===================================================== LINKING fdebug
$(CC) $(FLAGS) -o fdebug.exe $(OBJS) -lgdi32 -lcomdlg32 -Wl,--subsystem,windows
fdebug.res: fdebug.rc resource.h
@echo ===================================================== Compiling $*
$(WINDRES) -o fdebug.res fdebug.rc -O coff
fdebug.o: fdebug.c rs232.h
@echo ===================================================== Compiling $*
$(CC) $(FLAGS) -o fdebug.o -c fdebug.c
rs232.o: rs232.c rs232.h
@echo ===================================================== Compiling $*
$(CC) $(FLAGS) -o rs232.o -c rs232.c
clean:
@-$(RM) *.o
@-$(RM) *.res
@-$(RM) *.exe
@echo Clean ALL done.

View File

@@ -1,554 +0,0 @@
// fdebug.cpp : Defines the entry point for the application.
//
#include <windows.h>
#include <commdlg.h>
#include <process.h>
#include <stdio.h>
#include <tchar.h>
#include "resource.h"
#include "rs232.h"
#define MAX_LOADSTRING 100
// Global Variables:
HINSTANCE hInst; // current instance
TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text
HWND hMainWnd; // The main window handle
HWND hDisplayWnd; // The window to display the incoming data
HWND hEditWnd; // The edit window to get input from the user
TCHAR strComPort[MAX_PATH] = TEXT("COM1"); // The COM port to use
TCHAR strBaudRate[MAX_PATH] = TEXT("115200"); // The baud rate to use
TCHAR strCaptureFileName[MAX_PATH] = TEXT(""); // The file name to capture to
BOOL bConnected = FALSE; // Tells us if we are currently connected
BOOL bCapturing = FALSE; // Tells us if we are currently capturing data
BOOL bLocalEcho = FALSE; // Tells us if local echo is currently enabled
HANDLE hCaptureFile; // Handle to the capture file
DWORD dwThreadId = 0; // Thread id of RS232 communication thread
// Foward declarations of functions included in this code module:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK ConnectionDialogProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK CaptureDialogProc(HWND, UINT, WPARAM, LPARAM);
VOID EnableConnectMenuItem(BOOL Enable);
VOID EnableDisconnectMenuItem(BOOL Enable);
VOID EnableStartCaptureMenuItem(BOOL Enable);
VOID EnableStopCaptureMenuItem(BOOL Enable);
VOID CheckLocalEchoMenuItem(BOOL Checked);
VOID Rs232Thread(VOID* Parameter);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
MSG msg;
HACCEL hAccelTable;
// Initialize global strings
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_FDEBUG, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);
// Perform application initialization:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_FDEBUG);
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
//
// FUNCTION: MyRegisterClass()
//
// PURPOSE: Registers the window class.
//
// COMMENTS:
//
// This function and its usage is only necessary if you want this code
// to be compatible with Win32 systems prior to the 'RegisterClassEx'
// function that was added to Windows 95. It is important to call this function
// so that the application will get 'well formed' small icons associated
// with it.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_FDEBUG);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = NULL;//(HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = (LPCSTR)IDC_FDEBUG;
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);
return RegisterClassEx(&wcex);
}
//
// FUNCTION: InitInstance(HANDLE, int)
//
// PURPOSE: Saves instance handle and creates main window
//
// COMMENTS:
//
// In this function, we save the instance handle in a global variable and
// create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance; // Store instance handle in our global variable
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
hMainWnd = hWnd;
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
RECT rc;
TCHAR WndText[MAX_PATH];
DWORD Index;
NONCLIENTMETRICS ncm;
HFONT hFont;
switch (message)
{
case WM_CREATE:
hEditWnd = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("EDIT"), "", WS_CHILD|WS_VISIBLE|WS_VSCROLL|ES_AUTOHSCROLL|ES_LEFT|ES_MULTILINE, 0, 0, 0, 0, hWnd, NULL, hInst, NULL);
hDisplayWnd = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("EDIT"), "", WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|ES_MULTILINE, 0, 0, 0, 0, hWnd, NULL, hInst, NULL);
memset(&ncm, 0, sizeof(NONCLIENTMETRICS));
ncm.cbSize = sizeof(NONCLIENTMETRICS);
SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0);
hFont = CreateFontIndirect(&ncm.lfMessageFont);
SendMessage(hEditWnd, WM_SETFONT, (WPARAM)hFont, TRUE);
SendMessage(hDisplayWnd, WM_SETFONT, (WPARAM)hFont, TRUE);
break;
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
if (lParam == (LPARAM)hEditWnd && wmEvent == EN_CHANGE)
{
GetWindowText(hEditWnd, WndText, MAX_PATH);
if (_tcslen(WndText) > 0)
{
SetWindowText(hEditWnd, TEXT(""));
if (!bConnected)
{
MessageBox(hWnd, TEXT("You are not currently connected!"), TEXT("Error"), MB_OK|MB_ICONSTOP);
break;
}
for (Index=0; Index<_tcslen(WndText); Index++)
{
if (dwThreadId != 0)
{
PostThreadMessage(dwThreadId, WM_CHAR, (WPARAM)WndText[Index], (LPARAM)0);
}
}
}
}
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
case ID_FILE_CONNECT:
if (bConnected)
{
MessageBox(hWnd, TEXT("You are already connected!"), TEXT("Error"), MB_OK|MB_ICONSTOP);
}
else
{
if (DialogBox(hInst, (LPCTSTR)IDD_CONNECTION, hWnd, (DLGPROC)ConnectionDialogProc) == IDOK)
{
bConnected = TRUE;
EnableDisconnectMenuItem(TRUE);
EnableConnectMenuItem(FALSE);
_beginthread(Rs232Thread, 0, NULL);
}
}
break;
case ID_FILE_DISCONNECT:
if (bConnected)
{
bConnected = FALSE;
EnableDisconnectMenuItem(FALSE);
EnableConnectMenuItem(TRUE);
}
else
{
MessageBox(hWnd, TEXT("You are not currently connected!"), TEXT("Error"), MB_OK|MB_ICONSTOP);
}
break;
case ID_FILE_STARTCAPTURE:
if (DialogBox(hInst, (LPCTSTR)IDD_CAPTURE, hWnd, (DLGPROC)CaptureDialogProc) == IDOK)
{
bCapturing = TRUE;
EnableStopCaptureMenuItem(TRUE);
EnableStartCaptureMenuItem(FALSE);
hCaptureFile = CreateFile(strCaptureFileName, FILE_APPEND_DATA, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
}
break;
case ID_FILE_STOPCAPTURE:
if (bCapturing)
{
bCapturing = FALSE;
EnableStopCaptureMenuItem(FALSE);
EnableStartCaptureMenuItem(TRUE);
CloseHandle(hCaptureFile);
hCaptureFile = NULL;
}
break;
case ID_FILE_LOCALECHO:
if (bLocalEcho)
{
bLocalEcho = FALSE;
CheckLocalEchoMenuItem(bLocalEcho);
}
else
{
bLocalEcho = TRUE;
CheckLocalEchoMenuItem(bLocalEcho);
}
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
break;
case WM_SIZE:
GetClientRect(hWnd, &rc);
MoveWindow(hDisplayWnd, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top - 20, TRUE);
MoveWindow(hEditWnd, rc.left, rc.bottom - 20, rc.right - rc.left, 20, TRUE);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
HWND hLicenseEditWnd;
TCHAR strLicense[0x1000];
switch (message)
{
case WM_INITDIALOG:
hLicenseEditWnd = GetDlgItem(hDlg, IDC_LICENSE_EDIT);
LoadString(hInst, IDS_LICENSE, strLicense, 0x1000);
SetWindowText(hLicenseEditWnd, strLicense);
return TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}
LRESULT CALLBACK ConnectionDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
SetWindowText(GetDlgItem(hDlg, IDC_COMPORT), strComPort);
SetWindowText(GetDlgItem(hDlg, IDC_BAUTRATE), strBaudRate);
return TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK)
{
GetWindowText(GetDlgItem(hDlg, IDC_COMPORT), strComPort, MAX_PATH);
GetWindowText(GetDlgItem(hDlg, IDC_BAUTRATE), strBaudRate, MAX_PATH);
}
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}
LRESULT CALLBACK CaptureDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
OPENFILENAME ofn;
switch (message)
{
case WM_INITDIALOG:
SetWindowText(GetDlgItem(hDlg, IDC_CAPTUREFILENAME), strCaptureFileName);
return TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDC_BROWSE)
{
memset(&ofn, 0, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hDlg;
ofn.hInstance = hInst;
ofn.lpstrFilter = NULL;
ofn.lpstrCustomFilter = NULL;
ofn.nMaxCustFilter = 0;
ofn.nFilterIndex = 0;
ofn.lpstrFile = strCaptureFileName;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.lpstrTitle = NULL;
ofn.Flags = OFN_HIDEREADONLY|OFN_NOREADONLYRETURN;
if (GetOpenFileName(&ofn))
{
SetWindowText(GetDlgItem(hDlg, IDC_CAPTUREFILENAME), strCaptureFileName);
}
}
if (LOWORD(wParam) == IDOK)
{
GetWindowText(GetDlgItem(hDlg, IDC_CAPTUREFILENAME), strCaptureFileName, MAX_PATH);
}
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}
VOID EnableConnectMenuItem(BOOL Enable)
{
HMENU hMenuBar;
HMENU hFileMenu;
hMenuBar = GetMenu(hMainWnd);
hFileMenu = GetSubMenu(hMenuBar, 0);
if (Enable)
{
EnableMenuItem(hFileMenu, ID_FILE_CONNECT, MF_BYCOMMAND|MF_ENABLED);
}
else
{
EnableMenuItem(hFileMenu, ID_FILE_CONNECT, MF_BYCOMMAND|MF_GRAYED);
}
}
VOID EnableDisconnectMenuItem(BOOL Enable)
{
HMENU hMenuBar;
HMENU hFileMenu;
hMenuBar = GetMenu(hMainWnd);
hFileMenu = GetSubMenu(hMenuBar, 0);
if (Enable)
{
EnableMenuItem(hFileMenu, ID_FILE_DISCONNECT, MF_BYCOMMAND|MF_ENABLED);
}
else
{
EnableMenuItem(hFileMenu, ID_FILE_DISCONNECT, MF_BYCOMMAND|MF_GRAYED);
}
}
VOID EnableStartCaptureMenuItem(BOOL Enable)
{
HMENU hMenuBar;
HMENU hFileMenu;
hMenuBar = GetMenu(hMainWnd);
hFileMenu = GetSubMenu(hMenuBar, 0);
if (Enable)
{
EnableMenuItem(hFileMenu, ID_FILE_STARTCAPTURE, MF_BYCOMMAND|MF_ENABLED);
}
else
{
EnableMenuItem(hFileMenu, ID_FILE_STARTCAPTURE, MF_BYCOMMAND|MF_GRAYED);
}
}
VOID EnableStopCaptureMenuItem(BOOL Enable)
{
HMENU hMenuBar;
HMENU hFileMenu;
hMenuBar = GetMenu(hMainWnd);
hFileMenu = GetSubMenu(hMenuBar, 0);
if (Enable)
{
EnableMenuItem(hFileMenu, ID_FILE_STOPCAPTURE, MF_BYCOMMAND|MF_ENABLED);
}
else
{
EnableMenuItem(hFileMenu, ID_FILE_STOPCAPTURE, MF_BYCOMMAND|MF_GRAYED);
}
}
VOID CheckLocalEchoMenuItem(BOOL Checked)
{
HMENU hMenuBar;
HMENU hFileMenu;
hMenuBar = GetMenu(hMainWnd);
hFileMenu = GetSubMenu(hMenuBar, 0);
if (Checked)
{
CheckMenuItem(hFileMenu, ID_FILE_LOCALECHO, MF_BYCOMMAND|MF_CHECKED);
}
else
{
CheckMenuItem(hFileMenu, ID_FILE_LOCALECHO, MF_BYCOMMAND|MF_UNCHECKED);
}
}
VOID Rs232Thread(VOID* Parameter)
{
BYTE Byte;
TCHAR String[MAX_PATH];
MSG msg;
DWORD dwNumberOfBytesWritten;
dwThreadId = GetCurrentThreadId();
if (!Rs232OpenPortWin32(strComPort))
{
MessageBox(hMainWnd, TEXT("Error opening port!"), TEXT("Error"), MB_OK|MB_ICONSTOP);
bConnected = FALSE;
return;
}
_stprintf(String, TEXT("%s,n,8,1"), strBaudRate);
if (!Rs232ConfigurePortWin32(String))
{
MessageBox(hMainWnd, TEXT("Error configuring port!"), TEXT("Error"), MB_OK|MB_ICONSTOP);
bConnected = FALSE;
return;
}
while (bConnected)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_CHAR)
{
Rs232WriteByteWin32((BYTE)msg.wParam);
if (bLocalEcho && msg.wParam != (WPARAM)TEXT('\r'))
{
PostMessage(hDisplayWnd, WM_CHAR, (WPARAM)msg.wParam, (LPARAM)0);
if (hCaptureFile)
{
WriteFile(hCaptureFile, &msg.wParam, sizeof(TCHAR), &dwNumberOfBytesWritten, NULL);
}
}
}
}
if (Rs232ReadByteWin32(&Byte))
{
_stprintf(String, TEXT("%c"), Byte);
PostMessage(hDisplayWnd, WM_CHAR, (WPARAM)String[0], (LPARAM)0);
if (hCaptureFile)
{
WriteFile(hCaptureFile, &String[0], sizeof(TCHAR), &dwNumberOfBytesWritten, NULL);
}
}
}
dwThreadId = 0;
Rs232ClosePortWin32();
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1,215 +0,0 @@
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#define APSTUDIO_HIDDEN_SYMBOLS
#include "windows.h"
#undef APSTUDIO_HIDDEN_SYMBOLS
#include "resource.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_FDEBUG ICON DISCARDABLE "fdebug.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDC_FDEBUG MENU DISCARDABLE
BEGIN
POPUP "&File"
BEGIN
MENUITEM "&Connect", ID_FILE_CONNECT
MENUITEM "&Disconnect", ID_FILE_DISCONNECT, GRAYED
MENUITEM SEPARATOR
MENUITEM "&Start Capture", ID_FILE_STARTCAPTURE
MENUITEM "S&top Capture", ID_FILE_STOPCAPTURE, GRAYED
MENUITEM SEPARATOR
MENUITEM "&Local Echo", ID_FILE_LOCALECHO
MENUITEM SEPARATOR
MENUITEM "E&xit", IDM_EXIT
END
POPUP "&Help"
BEGIN
MENUITEM "&About ...", IDM_ABOUT
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Accelerator
//
IDC_FDEBUG ACCELERATORS MOVEABLE PURE
BEGIN
"?", IDM_ABOUT, ASCII, ALT
"/", IDM_ABOUT, ASCII, ALT
END
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
"#include ""windows.h""\r\n"
"#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
"#include ""resource.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
IDD_ABOUTBOX, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 252
TOPMARGIN, 7
BOTTOMMARGIN, 203
END
IDD_CONNECTION, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 189
TOPMARGIN, 7
BOTTOMMARGIN, 93
END
IDD_CAPTURE, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 244
TOPMARGIN, 7
BOTTOMMARGIN, 88
END
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_ABOUTBOX DIALOG DISCARDABLE 22, 17, 259, 210
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "About FreeLoader Debugger"
FONT 8, "Tahoma"
BEGIN
CONTROL "FreeLoader Debugger v1.0\nCopyright (C) 2003\nby Brian Palmer (brianp@reactos.org)",
IDC_STATIC,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,53,28,
122,26
DEFPUSHBUTTON "OK",IDOK,183,189,44,14,WS_GROUP
ICON IDI_FDEBUG,IDC_STATIC,19,30,20,20
EDITTEXT IDC_LICENSE_EDIT,53,63,174,107,ES_MULTILINE |
ES_READONLY | WS_VSCROLL
END
IDD_CONNECTION DIALOG DISCARDABLE 0, 0, 196, 100
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Connection Options"
FONT 8, "Tahoma"
BEGIN
LTEXT "Enter the COM port (e.g. COM1):",IDC_STATIC,7,7,108,8
EDITTEXT IDC_COMPORT,7,17,182,14,ES_AUTOHSCROLL
LTEXT "Enter the baud rate (e.g. 115200):",IDC_STATIC,7,38,114,
8
EDITTEXT IDC_BAUTRATE,7,48,182,14,ES_AUTOHSCROLL
DEFPUSHBUTTON "OK",IDOK,45,79,50,14
PUSHBUTTON "Cancel",IDCANCEL,100,79,50,14
END
IDD_CAPTURE DIALOG DISCARDABLE 0, 0, 251, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Capture File"
FONT 8, "Tahoma"
BEGIN
LTEXT "Capture File Name:",IDC_STATIC,7,17,62,8
EDITTEXT IDC_CAPTUREFILENAME,7,26,181,14,ES_AUTOHSCROLL
PUSHBUTTON "&Browse",IDC_BROWSE,194,26,50,14
DEFPUSHBUTTON "OK",IDOK,139,74,50,14
PUSHBUTTON "Cancel",IDCANCEL,194,74,50,14
END
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE DISCARDABLE
BEGIN
IDS_APP_TITLE "fdebug"
IDS_HELLO "Hello World!"
IDC_FDEBUG "FDEBUG"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_LICENSE "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\r\n\r\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA."
END
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View File

@@ -1,40 +0,0 @@
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by fdebug.rc
//
#define IDC_MYICON 2
#define IDD_FDEBUG_DIALOG 102
#define IDD_ABOUTBOX 103
#define IDS_APP_TITLE 103
#define IDM_ABOUT 104
#define IDM_EXIT 105
#define IDS_HELLO 106
#define IDI_FDEBUG 107
#define IDI_SMALL 108
#define IDC_FDEBUG 109
#define IDR_MAINFRAME 128
#define IDD_CONNECTION 130
#define IDD_CAPTURE 131
#define IDC_COMPORT 1000
#define IDC_BAUTRATE 1001
#define IDC_CAPTUREFILENAME 1002
#define IDC_BROWSE 1003
#define IDC_LICENSE_EDIT 1029
#define ID_FILE_CONNECT 32771
#define ID_FILE_DISCONNECT 32772
#define ID_FILE_STARTCAPTURE 32773
#define ID_FILE_STOPCAPTURE 32774
#define ID_FILE_LOCALECHO 32775
#define IDS_LICENSE 32815
#define IDC_STATIC -1
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 132
#define _APS_NEXT_COMMAND_VALUE 32776
#define _APS_NEXT_CONTROL_VALUE 1004
#define _APS_NEXT_SYMED_VALUE 110
#endif
#endif

View File

@@ -1,257 +0,0 @@
/*
* FreeLoader - rs232.c
*
* Copyright (C) 2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <windows.h>
#include <winioctl.h>
#include <tchar.h>
#include <stdio.h>
#include "rs232.h"
HANDLE hPortHandle = NULL;
BOOL Rs232OpenPortWin32(TCHAR* CommPort)
{
TCHAR PortName[MAX_PATH];
DWORD ErrorCode;
// First check and make sure they don't already have the
// OBD2 connection open. We don't want to open things twice.
if (hPortHandle != NULL)
{
_tprintf(TEXT("Port handle not NULL. Must be already open. Returning FALSE...\n"));
return FALSE;
}
_stprintf(PortName, TEXT("\\\\.\\%s"), CommPort);
hPortHandle = CreateFile(PortName,
GENERIC_READ|GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
0,
0);
if (hPortHandle == INVALID_HANDLE_VALUE)
{
hPortHandle = NULL;
ErrorCode = GetLastError();
_tprintf(TEXT("CreateFile(\"%s\") failed. GetLastError() = %lu.\n"), PortName, ErrorCode);
return FALSE;
}
return TRUE;
}
BOOL Rs232ClosePortWin32(VOID)
{
HANDLE hTempPortHandle = hPortHandle;
hPortHandle = NULL;
if (hTempPortHandle == NULL)
{
return FALSE;
}
return CloseHandle(hTempPortHandle);
}
// DeviceControlString
// [in] Pointer to a null-terminated string that specifies device-control information.
// The string must have the same form as the mode command's command-line arguments.
//
// For example, the following string specifies a baud rate of 1200, no parity, 8 data bits, and 1 stop bit:
// "baud=1200 parity=N data=8 stop=1"
//
// The following string specifies a baud rate of 115200, no parity, 8 data bits, and 1 stop bit:
// "115200,n,8,1"
//
// The device name is ignored if it is included in the string, but it must specify a valid device, as follows:
// "COM1: baud=1200 parity=N data=8 stop=1"
//
// For further information on mode command syntax, refer to the end-user documentation for your operating system.
BOOL Rs232ConfigurePortWin32(TCHAR* DeviceControlString)
{
DCB dcb;
DWORD ErrorCode;
/*if (!GetCommState(hPortHandle, &dcb))
{
ErrorCode = GetLastError();
_tprintf(TEXT("GetCommState() failed. GetLastError() = %lu.\n"), ErrorCode);
return FALSE;
}
dcb.BaudRate = BaudRate;
dcb.ByteSize = DataBits;
dcb.Parity = Parity;
dcb.StopBits = StopBits;
dcb.fBinary = TRUE;
dcb.fDsrSensitivity = FALSE;
dcb.fParity = (Parity == NOPARITY) ? FALSE : TRUE;
dcb.fOutX = FALSE;
dcb.fInX = FALSE;
dcb.fNull = FALSE;
dcb.fAbortOnError = TRUE;
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fDsrSensitivity = FALSE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxCtsFlow = FALSE;*/
memset(&dcb, 0, sizeof(DCB));
dcb.DCBlength = sizeof(dcb);
if (!BuildCommDCB(DeviceControlString, &dcb))
{
ErrorCode = GetLastError();
_tprintf(TEXT("BuildCommDCB() failed. GetLastError() = %lu.\n"), ErrorCode);
return FALSE;
}
if (!SetCommState(hPortHandle, &dcb))
{
ErrorCode = GetLastError();
_tprintf(TEXT("SetCommState() failed. GetLastError() = %lu.\n"), ErrorCode);
return FALSE;
}
// Set the timeouts
if (!Rs232SetCommunicationTimeoutsWin32(MAXDWORD, 0, 0, 0, 0))
{
return FALSE;
}
return TRUE;
}
// Members
// ReadIntervalTimeout
// Specifies the maximum time, in milliseconds, allowed to elapse between the arrival of two characters on the communications line. During a ReadFile operation, the time period begins when the first character is received. If the interval between the arrival of any two characters exceeds this amount, the ReadFile operation is completed and any buffered data is returned. A value of zero indicates that interval time-outs are not used.
// A value of MAXDWORD, combined with zero values for both the ReadTotalTimeoutConstant and ReadTotalTimeoutMultiplier members, specifies that the read operation is to return immediately with the characters that have already been received, even if no characters have been received.
//
// ReadTotalTimeoutMultiplier
// Specifies the multiplier, in milliseconds, used to calculate the total time-out period for read operations. For each read operation, this value is multiplied by the requested number of bytes to be read.
// ReadTotalTimeoutConstant
// Specifies the constant, in milliseconds, used to calculate the total time-out period for read operations. For each read operation, this value is added to the product of the ReadTotalTimeoutMultiplier member and the requested number of bytes.
// A value of zero for both the ReadTotalTimeoutMultiplier and ReadTotalTimeoutConstant members indicates that total time-outs are not used for read operations.
//
// WriteTotalTimeoutMultiplier
// Specifies the multiplier, in milliseconds, used to calculate the total time-out period for write operations. For each write operation, this value is multiplied by the number of bytes to be written.
// WriteTotalTimeoutConstant
// Specifies the constant, in milliseconds, used to calculate the total time-out period for write operations. For each write operation, this value is added to the product of the WriteTotalTimeoutMultiplier member and the number of bytes to be written.
// A value of zero for both the WriteTotalTimeoutMultiplier and WriteTotalTimeoutConstant members indicates that total time-outs are not used for write operations.
//
// Remarks
// If an application sets ReadIntervalTimeout and ReadTotalTimeoutMultiplier to MAXDWORD and sets ReadTotalTimeoutConstant to a value greater than zero and less than MAXDWORD, one of the following occurs when the ReadFile function is called:
//
// If there are any characters in the input buffer, ReadFile returns immediately with the characters in the buffer.
// If there are no characters in the input buffer, ReadFile waits until a character arrives and then returns immediately.
// If no character arrives within the time specified by ReadTotalTimeoutConstant, ReadFile times out.
BOOL Rs232SetCommunicationTimeoutsWin32(DWORD ReadIntervalTimeout, DWORD ReadTotalTimeoutMultiplier, DWORD ReadTotalTimeoutConstant, DWORD WriteTotalTimeoutMultiplier, DWORD WriteTotalTimeoutConstant)
{
COMMTIMEOUTS ct;
DWORD ErrorCode;
if (!GetCommTimeouts(hPortHandle, &ct))
{
ErrorCode = GetLastError();
_tprintf(TEXT("GetCommTimeouts() failed. GetLastError() = %lu.\n"), ErrorCode);
return FALSE;
}
ct.ReadIntervalTimeout = ReadIntervalTimeout;
ct.ReadTotalTimeoutConstant = ReadTotalTimeoutConstant;
ct.ReadTotalTimeoutMultiplier = ReadTotalTimeoutMultiplier;
ct.WriteTotalTimeoutConstant = WriteTotalTimeoutConstant;
ct.WriteTotalTimeoutMultiplier = WriteTotalTimeoutMultiplier;
if (!SetCommTimeouts(hPortHandle, &ct))
{
ErrorCode = GetLastError();
_tprintf(TEXT("SetCommTimeouts() failed. GetLastError() = %lu.\n"), ErrorCode);
return FALSE;
}
return TRUE;
}
BOOL Rs232ReadByteWin32(BYTE* DataByte)
{
DWORD BytesRead = 0;
DWORD ErrorCode;
// If ReadFile() fails then report error
if (!ReadFile(hPortHandle, DataByte, 1, &BytesRead, NULL))
{
ErrorCode = GetLastError();
_tprintf(TEXT("ReadFile() failed. GetLastError() = %lu.\n"), ErrorCode);
return FALSE;
}
// If ReadFile() succeeds, but BytesRead isn't 1
// then a timeout occurred.
if (BytesRead != 1)
{
return FALSE;
}
return TRUE;
}
BOOL Rs232WriteByteWin32(BYTE DataByte)
{
DWORD BytesWritten = 0;
BOOL Success;
DWORD ErrorCode;
Success = WriteFile(hPortHandle, &DataByte, 1, &BytesWritten, NULL);
if (!Success || BytesWritten != 1)
{
ErrorCode = GetLastError();
_tprintf(TEXT("WriteFile() failed. GetLastError() = %lu.\n"), ErrorCode);
return FALSE;
}
return TRUE;
}

View File

@@ -1,46 +0,0 @@
/*
* FreeLoader - rs232.h
*
* Copyright (C) 2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __RS232_H
#define __RS232_H
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
//////////////////////////////////////////////////////////////////////////////////////////
//
// Function prototypes for RS232 communication under Win32
//
//////////////////////////////////////////////////////////////////////////////////////////
BOOL Rs232OpenPortWin32(TCHAR* CommPort);
BOOL Rs232ClosePortWin32(VOID);
BOOL Rs232ConfigurePortWin32(TCHAR* DeviceControlString);
BOOL Rs232SetCommunicationTimeoutsWin32(DWORD ReadIntervalTimeout, DWORD ReadTotalTimeoutMultiplier, DWORD ReadTotalTimeoutConstant, DWORD WriteTotalTimeoutMultiplier, DWORD WriteTotalTimeoutConstant);
BOOL Rs232ReadByteWin32(BYTE* DataByte);
BOOL Rs232WriteByteWin32(BYTE DataByte);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif // !defined(__RS232_H)

View File

@@ -1 +0,0 @@
obj

View File

@@ -1,306 +0,0 @@
Changes in v1.8.21 (21/05/2004) (navaraf)
- Experimental NTFS reading support with no boot code yet.
- Adjusted detection timeouts for PS/2 and RS232 to the minimum
allowed by the specifications.
- Enabled the 'Press any key to boot from CD' message in the ISO
boot code and show it only when some hard disk is present.
Changes in v1.8.20 (21/05/2004) (navaraf)
- Added support for special value "LiveCD" of SystemPath option
for loading ReactOS. It uses the known boot drive information
as the boot path.
Changes in v1.8.19 (12/20/2003) (ekohl)
- Detect PS/2 Port and Pointer Device (Mouse).
- Calculate CPU speed.
- Fixed delay counter overrun.
Changes in v1.8.18 (12/14/2003) (ekohl)
- Detect serial ports and serial pointer devices (Mice/Trackballs)
Changes in v1.8.17 (10/19/2003) (ekohl)
- Ignore case of registry key and value names
Changes in v1.8.16 (10/12/2003) (ekohl)
- Renamed a lot of variables and functions in the registry
- Fixed buggy cell size calculation
Changes in v1.8.15 (8/29/2003) (chorns)
- Add top-level makefile
- Add fdebug/.cvsignore
- Don't use rdel to remove files in tools/Makefile
- Remove warning in freeldr/mm/meminit.c
Changes in v1.8.14 (8/10/2003) (chorns)
- Clear screen to black when booting ReactOS
Changes in v1.8.13 (6/05/2003) (brianp)
- Added support for booting Linux 2.4.x kernels
- i386 exception handler now reports FreeLoader version number
Changes in v1.8.12 (5/25/2003) (ekohl)
- Added .inf-file parser
- SetupLdr loads and uses txtsetup.sif
- Removed .hiv (text-hive) parser
Changes in v1.8.11 (4/30/2003) (ekohl)
- Added DiskGetExtendedDriveParameters()
- Moved hardware detection into the arch directory
- Rewrote/completed harddisk detection
- Removed PCI and IDE detection
- Added basic CPU detection
Changes in v1.8.10 (4/27/2003) (chorns)
- Query BIOS for supported disk drives
Changes in v1.8.9 (4/25/2003) (chorns)
- Detect PCI busses
- Detect IDE controllers and devices
- Improved RegEnumValue()
Changes in v1.8.8 (4/25/2003) (ekohl)
- Added memmove().
- Added hardware hive export.
Changes in v1.8.7 (4/22/2003) (brianp)
- Added a file system recognizer to get around problems where
the partition id did not match the file system type.
Changes in v1.8.6 (4/14/2003) (brianp)
- Fixed a bug in fathelp.asm where is wasn't adding the hidden sector
count before performing a subtraction.
Changes in v1.8.5 (4/10/2003) (ekohl)
- Added support for binary system hive.
Changes in v1.8.4 (4/5/2003) (chorns)
- Added DOS compatible Master Boot Record (MBR)
Changes in v1.8.3 (3/18/2003) (brianp)
- Added _alloca() function because Mingw32 generates code that needs it
- Defined _mainCRTStartup in fathelp.asm because Mingw32 looks for that symbol
Changes in v1.8.2 (1/24/2003) (ekohl)
- Relaxed check for Int13-Extension support.
Some BIOSes have a strange opinion about what is supported. :-/
Changes in v1.8.1 (1/20/2003) (ekohl)
- Fixed the ISO filesystem detection code.
- Removed IsSetupLdr.
Changes in v1.8 (1/18/2003) (brianp)
- Added F8 options menu
- Added custom Boot functionality
- Moved all OS= settings from [FreeLoader] section to [Operating Systems] section.
- Removed MessageLine= setting. MessageBox= now accepts "\n" as an escape character for newlines.
- Added descriptions for disk error codes returned by the BIOS.
- Device names like "fd0" and "hd0" and "hd1" as well as BIOS drive numbers can now be used as BootDrive= settings.
Changes in v1.7.12 (12/05/2002) (brianp)
- Minor tweak to UI code to allow description
text to be displayed along with the progress
bar.
Changes in v1.7.11 (12/05/2002) (brianp)
- Added memory map count to GetBiosMemoryMap() so that
it doesn't just assume the size of the array.
- Fix so that we use the continuation value that
the BIOS returns.
Changes in v1.7.10 (11/24/2002) (brianp)
- Added assembler versions of memcmp() memcpy() memset()
- Implemented Int386() so that real-mode interrupts can be called from C-code
- Removed unnecessary call in DbgPrint() macro (freeldr.sys is ~16k smaller now)
- 64-bit lba sector addressing for disk calls
- Re-coded biosdisk.S as i386disk.c
- Re-coded mem.S as i386mem.c
- Re-coded rtlcode.S as i386rtl.c
- Cleaned up i386trap.S so that it only saves the registers once.
- Re-coded biosvid.S as i386vid.c
- Video fade in/out
- VESA text modes supported now
- Offscreen buffering to remove flicker
- Standardized format of boot sector so that BootPartition is stored right before 0xaa55
- Prefixed all file system functions with 'Fs'
Changes in v1.7.9 (9/30/2002) (brianp)
- Fix for bug in BiosInt13ReadExtended() (biosdisk.S)
by Christophe Bothamy & Mike Lerwill
Changes in v1.7.8 (9/7/2002) (ekohl)
- Added new 'bootcd' target.
- Removed/disabled debugging code.
- SetupLdr must not call BiosInt13ExtensionsSupported to check
extended int13 capabilities because they are already used to
boot a CD and some BIOSes return incorrect results when a CD-ROM
drive is checked.
Changes in v1.7.7 (9/5/2002) (ekohl)
- fs/iso.c: Got iso-fs working again.
- reactos/setupldr.c: Implemented very simple setup loader.
Changes in v1.7.6 (8/31/2002) (ekohl)
- bootsect/isoboot.asm: Reduced read transfer size to ensure that
the read buffer for an int13/ah=42h (exended read) does not
cross a segment boundary.
- freeldr.c, bootmgr.c, setupldr.c, makefile: Renamed
LoadBootManager() and ReactOSRunSetupLoader() to RunLoader().
Either bootmgr.o or setupldr.o is used to build freeldr.sys or
setupldr.sys
Changes in v1.7.5 (8/21/2002) (brianp)
- biosvid.S (BiosVideoDisableBlinkBit): Added code to
disable the blink bit in the text mode character
attribute byte so that the full range of
background colors can be used.
Changes in v1.7.4 (8/20/2002) (brianp)
- Boot sector code now reports to freeldr.sys the partition
that it was installed on. This is specified by a byte
value in the boot sector code. By default the boot partition
is set to zero which indicates the active (bootable)
partition, unless the installer sets the value to non-zero.
If FreeLoader is installed on a partition other than
the active (bootable) partition then the installer must
set this byte to that partition number. Otherwise
FreeLoader will not be able to find freeldr.ini.
- i386trap.S: Added debug macros BREAKPOINT(),
INSTRUCTION_BREAKPOINTX(), MEMORY_READWRITE_BREAKPOINTX(), &
MEMORY_WRITE_BREAKPOINTX().
- partition.c (DiskGetPartitionEntry): Add the relative offset
of the extended partition to the partitions start sector.
- ext2.c (Ext2ReadBlockPointerList, Ext2CopyIndirectBlockPointers,
Ext2CopyDoubleIndirectBlockPointers, Ext2CopyTripleIndirectBlockPointers):
Rewrote the block pointer functions so they actually work.
- ini_init.c (IniFileInitialize, IniOpenIniFile): Looks for freeldr.ini
on both the active (bootable) partition and the partition
passed in from the boot sector code.
- meminit.c (MmInitializeMemoryManager, MmFixupSystemMemoryMap,
MmGetEndAddressOfAnyMemory, MmGetAddressablePageCountIncludingHoles,
MmInitPageLookupTable): Fixed bug that would cause FreeLoader to
have an off-by-one error when accessing the last entry in the
page lookup table on systems with 4GB of memory (or memory mapped
at the end of the address space).
Changes in v1.7.2 (8/7/2002) (brianp)
- Fragment size must be equal to the block size
Changes in v1.7.1 (8/7/2002) (brianp)
- Symbolic links on EXT2/3 are now supported
Changes in v1.7 (8/6/2002) (brianp)
- EXT2/EXT3 file system support.
- Does not yet support symbolic links or booting from an EXT2/3 partition.
- Fixed bug in UI code.
- Added '%%' format specifier to printf()-like functions.
- Added functions __udivdi3 & __umoddi3 so that 64-bit division is now supported.
- Changed types BYTE, WORD, DWORD, LONG, ULONG to U8, U16, U32, S32, U32
so that you know the size of the variable across different
architectures with different sized words & dwords, etc.
- Types CHAR, UCHAR, PCHAR, PUCHAR, WCHAR, PWCHAR have not been
changed yet (I haven't decided exactly how I'm going to handle unicode)
Changes in v1.6.2 (7/28/2002) (brianp)
- Fix for GetFatEntry16 bug (fathelp.asm) by Mike Lerwill
Changes in v1.6.1 (7/22/2002) (brianp)
- Fix for disk caching while doing drive remapping
Changes in v1.6 (7/21/2002) (brianp)
- Added BIOS drive mapping functionality
Changes in v1.5 (7/13/2002)
- If symbols are available then pass them to the OS as multiboot modules
Changes in v1.4 (6/27/2002)
- Added separate configuration for a SETUPLDR version
Changes in v1.3.1 (6/8/2002)
- Implemented MmAllocateMemoryAtAddress()
- Fixed Linux boot code to go through the memory manager to allocate memory at 1MB
Changes in v1.3 (6/5/2002)
- Added protected mode exception handling in case FreeLoader crashes
- Reworked memory manager to use all of extended memory
- Reworked UI code, now supports multiple text-mode resolutions
Changes in v1.2.2 (5/4/2002)
- Fixed memory leak in menu.c
Changes in v1.2.1 (5/3/2002)
- Makefile updates
- Optimized the Makefile
- Removed recursive make functionality (builds much faster now)
- Places all output into one single directory
- Added automagically generated dependencies
Changes in v1.2 (4/30/2002)
- All Linux kernels are supported (zImage & bzImage, loaded high & low)
- Initrd support
- FreeLoader now compiles under Mingw32 instead of just DJGPP, but
the Mingw32 linker seems to output a corrupt binary.
Changes in v1.01 (4/28/2002)
- Fixed FAT short file name buffer overflow that was causing
some long filenames not to work correctly.
Changes in v1.0 (4/24/2002)
- FreeLoader version 1.0!
- Supports booting ReactOS
- Supports booting Linux bzImage kernels
- No initrd support (yet)
- No zImage support (yet)
- No ext2 file system support (yet)
- Supports FAT & ISO-9660 file systems
- Forward slashes '/' as well as backslashes '\' can be used
for path names in FAT & ISO-9600
- Fixed bug in LBA code where it was only reading one sector
even if you asked for more
- Fixed bug in FAT code, was also present in ISO-9660 code where
it wasn't incrementing the buffer address correctly

View File

@@ -1,387 +0,0 @@
#
# FreeLoader
# Copyright (C) 1998-2002 Brian Palmer <brianp@sginet.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#############################################
# CHANGE THESE FOR YOUR OUTPUT
#
TARGET = i386
# Debugging information on (bigger binary)
#DEBUG = yes
# Debugging information off (smaller binary)
DEBUG = no
OBJDIR = obj
OUTPUT_DIR = $(OBJDIR)/$(TARGET)
BOOTCD_DIR = ../../bootcd
#############################################
# COMPILER AND LINKER PROGRAMS
#
TOOLSDIR = $(SRCDIR)/../tools
RM = $(subst /,$(SEP),$(TOOLSDIR))$(SEP)rdel
CP = $(subst /,$(SEP),$(TOOLSDIR))$(SEP)rcopy
MKDIR = $(subst /,$(SEP),$(TOOLSDIR))$(SEP)rmkdir
RMDIR = $(subst /,$(SEP),$(TOOLSDIR))$(SEP)rrmdir
NASM_CMD = nasm
OBJCOPY = objcopy
DEPTOOL = $(subst /,$(SEP),$(TOOLSDIR))$(SEP)deptool
HOSTTOOL = $(subst /,$(SEP),$(TOOLSDIR))$(SEP)hosttype
TOOLS = $(DEPTOOL) $(HOSTTOOL)
HOSTTYPE = $(shell $(HOSTTOOL))
#-----------------------------------------------------------------------------------------------------
# TEST IF WE ARE IN THE TARGET DIRECTORY
# IF NOT WE WILL CHANGE TO THE TARGET DIRECTORY AND RUN MAKE FROM THERE
#-----------------------------------------------------------------------------------------------------
#ifeq (,$(filter $(CURDIR)/$(OUTPUT_DIR),$(notdir $(CURDIR))))
ifneq ($(CURDIR), $(SRCDIR)/$(OUTPUT_DIR))
SRCDIR = $(CURDIR)
.SUFFIXES:
#############################################
# VARIABLE TO CHANGE TO TARGET DIRECTORY AND INVOKE MAKE FROM THERE
#
MAKETARGET = $(MAKE) --no-print-directory -C $(OUTPUT_DIR) \
-f ../../Makefile SRCDIR=$(CURDIR) $(MAKECMDGOALS)
.PHONY: CHANGE_TO_TARGET
CHANGE_TO_TARGET setupldr : BUILD_TOOLS $(OBJDIR) $(OBJDIR)/$(TARGET)
@echo Calculating source file dependencies...
+@$(MAKETARGET)
.PHONY: BUILD_TOOLS
BUILD_TOOLS:
@$(MAKE) --no-print-directory -C $(TOOLSDIR)
$(OBJDIR):
@echo Creating directory: $(OBJDIR)
@$(MKDIR) $(OBJDIR)
$(OBJDIR)/$(TARGET): $(OBJDIR)
@echo Creating directory: $(OBJDIR)/$(TARGET)
@$(MKDIR) $(OBJDIR)/$(TARGET)
Makefile : ;
% :: CHANGE_TO_TARGET
#############################################
.PHONY : clean
clean:
@$(MAKE) --no-print-directory -C $(TOOLSDIR)
@echo Cleaning directory $(OBJDIR)/$(TARGET)
@-$(RM) $(OBJDIR)/$(TARGET)/*
@echo Removing directory $(OBJDIR)/$(TARGET)
@-$(RMDIR) $(OBJDIR)/$(TARGET)
@-$(RMDIR) $(OBJDIR)
@echo Clean ALL done.
#############################################
.PHONY : bootcd
bootcd : bootcd_dirs setup_loader boot_loader
.PHONY : bootcd_dirs
bootcd_dirs:
$(MKDIR) $(BOOTCD_DIR)
$(MKDIR) $(BOOTCD_DIR)/disk
$(MKDIR) $(BOOTCD_DIR)/disk/reactos
$(MKDIR) $(BOOTCD_DIR)/disk/install
$(MKDIR) $(BOOTCD_DIR)/disk/bootdisk
$(MKDIR) $(BOOTCD_DIR)/disk/loader
.PHONY : boot_loader
boot_loader : $(OBJDIR)/$(TARGET)/freeldr.sys
$(CP) $(OBJDIR)/$(TARGET)/freeldr.sys $(BOOTCD_DIR)/disk/loader/freeldr.sys
$(CP) ../freeldr.ini $(BOOTCD_DIR)/disk/loader/freeldr.ini
.PHONY : setup_loader
setup_loader : $(OBJDIR)/$(TARGET)/setupldr.sys
$(CP) $(OBJDIR)/$(TARGET)/setupldr.sys $(BOOTCD_DIR)/disk/loader/setupldr.sys
#############################################
#-----------------------------------------------------------------------------------------------------
# END MAGIC TARGET DIRECTORY CHANGE STUFF
#-----------------------------------------------------------------------------------------------------
else
#############################################
# COMPILER COMMAND LINE OPTIONS
#
COMPILER_OPTIONS = -Wall -nostdlib -nostdinc -ffreestanding -fno-builtin -fno-inline \
-fno-zero-initialized-in-bss -O1 -MD
# FreeLoader does not use any of the standard libraries, includes, or built-in functions
#############################################
# COMPILER DEFINES
#
ifeq ($(DEBUG),yes)
COMPILER_DEBUG_DEFINES = -DDEBUG
else
COMPILER_DEBUG_DEFINES =
endif
COMPILER_DEFINES = -D__$(TARGET)__ $(COMPILER_DEBUG_DEFINES)
#############################################
# INCLUDE DIRECTORY OPTIONS
#
COMPILER_INCLUDES = -I$(SRCDIR)/include
#############################################
# COMPILER FLAGS
#
CFLAGS = $(COMPILER_OPTIONS) \
$(COMPILER_DEFINES) \
$(COMPILER_INCLUDES)
#############################################
# LINKER COMMAND LINE OPTIONS
#
#LINKER_OPTIONS = -N -Ttext=0x8000 --oformat=binary -s
LINKER_OPTIONS = -N -Ttext=0x8000
#############################################
# LINKER FLAGS
#
LFLAGS = $(LINKER_OPTIONS)
#############################################
# NASM FLAGS
#
ifeq ($(HOSTTYPE), dos)
NASMFLAGS = -f coff
else
ifeq ($(HOSTTYPE), win32)
NASMFLAGS = -f win32
else
NASMFLAGS = -f elf
endif
endif
#############################################
# LIST ALL THE OBJECT FILE GROUPS
#
# fathelp.o must come first in the link line because it contains bootsector helper code
# arch.o must come second in the link line because it contains the startup code
ARCH_OBJS = fathelp.o \
arch.o \
i386idt.o \
i386trap.o \
i386cpu.o \
i386pnp.o \
boot.o \
linux.o \
mb.o \
i386mem.o \
i386rtl.o \
i386vid.o \
drvmap.o \
int386.o \
i386disk.o \
portio.o \
hardware.o \
hwcpu.o \
_alloca.o # For Mingw32 builds
RTL_OBJS = print.o \
stdlib.o \
string.o \
list.o \
memcmp.o \
memcpy.o \
memmove.o \
memset.o
FS_OBJS = fs.o \
fat.o \
iso.o \
ext2.o \
ntfs.o \
fsrec.o
UI_OBJS = tui.o \
tuimenu.o \
ui.o \
gui.o
REACTOS_OBJS= arcname.o \
binhive.o \
registry.o
COMM_OBJS = rs232.o
DISK_OBJS = disk.o \
geometry.o \
partition.o
MM_OBJS = mm.o \
meminit.o
CACHE_OBJS = cache.o \
blocklist.o
INIFILE_OBJS= inifile.o \
ini_init.o \
parse.o
INFFILE_OBJS= inffile.o
VIDEO_OBJS = video.o \
vidmode.o \
fade.o \
palette.o \
pixel.o \
bank.o
# libgcc2.o contains code (__udivdi3, __umoddi3) necessary to do
# 64-bit division on the i386 (and other 32-bit) architectures
# This code was taken from the GCC v3.1 source
MATH_OBJS = libgcc2.o
BASE_OBJS = freeldr.o \
debug.o \
multiboot.o \
version.o
FREELDR_OBJS= bootmgr.o \
drivemap.o \
miscboot.o \
options.o \
linuxboot.o \
oslist.o \
custom.o
ROSLDR_OBJS = reactos.o
SETUPLDR_OBJS= setupldr.o
COMMON_OBJS = $(ARCH_OBJS) \
$(RTL_OBJS) \
$(FS_OBJS) \
$(UI_OBJS) \
$(REACTOS_OBJS) \
$(COMM_OBJS) \
$(DISK_OBJS) \
$(MM_OBJS) \
$(CACHE_OBJS) \
$(VIDEO_OBJS) \
$(MATH_OBJS) \
$(BASE_OBJS)
SPECIAL_OBJS = $(INIFILE_OBJS) \
$(INFFILE_OBJS) \
$(FREELDR_OBJS) \
$(ROSLDR_OBJS) \
$(SETUPLDR_OBJS)
F_OBJS = $(COMMON_OBJS) \
$(INIFILE_OBJS) \
$(ROSLDR_OBJS) \
$(FREELDR_OBJS)
S_OBJS = $(COMMON_OBJS) \
$(INIFILE_OBJS) \
$(INFFILE_OBJS) \
$(SETUPLDR_OBJS)
#############################################
# ALL THE OBJECTS
#
ALL_OBJS = $(COMMON_OBJS) \
$(SPECIAL_OBJS)
#############################################
# SET THE VPATH SO MAKE CAN FIND THE SOURCE FILES
#
VPATH = $(SRCDIR)/ \
$(SRCDIR)/arch/$(TARGET) \
$(SRCDIR)/rtl \
$(SRCDIR)/fs \
$(SRCDIR)/ui \
$(SRCDIR)/reactos \
$(SRCDIR)/comm \
$(SRCDIR)/disk \
$(SRCDIR)/mm \
$(SRCDIR)/cache \
$(SRCDIR)/inifile \
$(SRCDIR)/inffile \
$(SRCDIR)/video \
$(SRCDIR)/math \
$(SRCDIR)/include
#############################################
all : freeldr.sys setupldr.sys
@echo Make ALL done.
#############################################
freeldr.sys : $(ALL_OBJS)
@echo ===================================================== LINKING $@
# @$(LD) -N -Ttext=0x8000 --oformat=binary -s -o freeldr.sys $(F_OBJS)
@$(LD) $(LFLAGS) -Map freeldr.map -o freeldr.exe $(F_OBJS)
# @$(CC) -Wl,-Ttext=0x8000,-N,-Map,freeldr.map -o freeldr.exe $(F_OBJS)
@$(NM) --numeric-sort freeldr.exe > freeldr.sym
@$(OBJCOPY) -O binary freeldr.exe freeldr.sys
#############################################
setupldr.sys : $(ALL_OBJS)
@echo ===================================================== LINKING $@
@$(LD) $(LFLAGS) -Map setupldr.map -o setupldr.exe $(S_OBJS)
@$(NM) --numeric-sort setupldr.exe > setupldr.sym
@$(OBJCOPY) -O binary setupldr.exe setupldr.sys
#############################################
%.o :: %.c
@echo ===================================================== Compiling $*
@$(CC) $(CFLAGS) -o $@ -c $<
@$(DEPTOOL) $*.d
%.o :: %.S
@echo ===================================================== Assembling $*
@$(CC) $(CFLAGS) -o $@ -c $<
@$(DEPTOOL) $*.d
%.o :: %.asm
@echo ===================================================== Assembling $*
@$(NASM_CMD) $(NASMFLAGS) -o $@ $<
#############################################
# Include the automagically generated dependencies
-include $(ALL_OBJS:%.o=%.d)
#############################################
endif

View File

@@ -1,33 +0,0 @@
/* stuff needed for libgcc on win32. */
/*#ifdef L_chkstk*/
#ifdef WIN32
.global ___chkstk
.global __alloca
___chkstk:
__alloca:
pushl %ecx /* save temp */
movl %esp,%ecx /* get sp */
addl $0x8,%ecx /* and point to return addr */
probe: cmpl $0x1000,%eax /* > 4k ?*/
jb done
subl $0x1000,%ecx /* yes, move pointer down 4k*/
orl $0x0,(%ecx) /* probe there */
subl $0x1000,%eax /* decrement count */
jmp probe /* and do it again */
done: subl %eax,%ecx
orl $0x0,(%ecx) /* less that 4k, just peek here */
movl %esp,%eax
movl %ecx,%esp /* decrement stack */
movl (%eax),%ecx /* recover saved temp */
movl 4(%eax),%eax /* get return address */
jmp *%eax
#endif

View File

@@ -1,335 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2002 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
.text
.code16
#define ASM
#include <arch.h>
EXTERN(RealEntryPoint)
cli
/* Setup segment registers */
xorw %ax,%ax
movw %ax,%ds
movw %ax,%es
movw %ax,%fs
movw %ax,%gs
movw %ax,%ss
/* Setup a stack */
movw stack16,%sp
sti
/* Init pmode */
call switch_to_prot
.code32
/* Store the boot drive */
movb %dl,(_BootDrive)
/* Store the boot partition */
movb %dh,(_BootPartition)
/* GO! */
call _BootMain
call switch_to_real
.code16
int $0x19
/* We should never get here */
stop:
jmp stop
nop
nop
/*
* Switches the processor to protected mode
* it destroys eax
*/
EXTERN(switch_to_prot)
.code16
cli /* None of these */
/* We don't know what values are currently */
/* in the segment registers. So we are */
/* going to reload them with sane values. */
/* Of course CS has to already be valid. */
/* We are currently in real-mode so we */
/* need real-mode segment values. */
movw $0x0000,%ax
movw %ax,%ds
movw %ax,%es
movw %ax,%fs
movw %ax,%gs
movw %ax,%ss
/* Get the return address off the stack */
popw (code32ret)
/* Save 16-bit stack pointer */
movw %sp,stack16
/* Load the GDT */
lgdt gdtptr
/* Load the IDT */
lidt i386idtptr
/* Enable Protected Mode */
mov %cr0,%eax
orl $CR0_PE_SET,%eax
mov %eax,%cr0
/* Clear prefetch queue & correct CS */
ljmp $PMODE_CS, $inpmode
.code32
inpmode:
/* Setup segment selectors */
movw $PMODE_DS,%ax
movw %ax,%ds
movw %ax,%es
movw %ax,%fs
movw %ax,%gs
movw %ax,%ss
movl stack32,%esp
/* Put the return address back onto the stack */
pushl (code32ret)
/* Now return in p-mode! */
ret
/*
* Switches the processor back to real mode
* it destroys eax
*/
EXTERN(switch_to_real)
.code32
/* We don't know what values are currently */
/* in the segment registers. So we are */
/* going to reload them with sane values. */
/* Of course CS has to already be valid. */
/* We are currently in protected-mode so we */
/* need protected-mode segment values. */
movw $PMODE_DS,%ax
movw %ax,%ds
movw %ax,%es
movw %ax,%fs
movw %ax,%gs
movw %ax,%ss
/* Get the return address off the stack */
popl (code16ret)
/* Save 32-bit stack pointer */
movl %esp,stack32
/* jmp to 16-bit segment to set the limit correctly */
ljmp $RMODE_CS, $switch_to_real16
switch_to_real16:
.code16
/* Restore segment registers to correct limit */
movw $RMODE_DS,%ax
movw %ax,%ds
movw %ax,%es
movw %ax,%fs
movw %ax,%gs
movw %ax,%ss
/* Disable Protected Mode */
mov %cr0,%eax
andl $CR0_PE_CLR,%eax
mov %eax,%cr0
/* Clear prefetch queue & correct CS */
ljmp $0, $inrmode
inrmode:
movw %cs,%ax
movw %ax,%ds
movw %ax,%es
movw %ax,%fs
movw %ax,%gs
movw %ax,%ss
/* Clear out the high 16-bits of ESP */
/* This is needed because I have one */
/* machine that hangs when booted to dos if */
/* anything other than 0x0000 is in the high */
/* 16-bits of ESP. Even though real-mode */
/* code should only use SP and not ESP. */
xorl %esp,%esp
movw stack16,%sp
/* Put the return address back onto the stack */
pushw (code16ret)
/* Load IDTR with real mode value */
lidt rmode_idtptr
sti /* These are ok now */
/* Now return in r-mode! */
ret
/*
* Needed for enabling the a20 address line
*/
.code16
empty_8042:
.word 0x00eb,0x00eb // jmp $+2, jmp $+2
inb $0x64,%al
testb $0x02,%al
jnz empty_8042
ret
/*
* Enable the A20 address line (to allow access to over 1mb)
*/
EXTERN(_EnableA20)
.code32
pushal
call switch_to_real
.code16
call empty_8042
movb $0xD1,%al // command write
outb %al,$0x64
call empty_8042
mov $0xDF,%al // A20 on
out %al,$0x60
call empty_8042
call switch_to_prot
.code32
popal
ret
/*
* Disable the A20 address line
*/
EXTERN(_DisableA20)
.code32
pushal
call switch_to_real
.code16
call empty_8042
movb $0xD1,%al // command write
outb %al,$0x64
call empty_8042
mov $0xDD,%al // A20 off
out %al,$0x60
call empty_8042
call switch_to_prot
.code32
popal
ret
/* 16-bit stack pointer */
stack16:
.word STACK16ADDR
/* 32-bit stack pointer */
stack32:
.long STACK32ADDR
/* 16-bit return address */
code16ret:
.long 0
/* 32-bit return address */
code32ret:
.long 0
.p2align 2 /* force 4-byte alignment */
gdt:
/* NULL Descriptor */
.word 0x0000
.word 0x0000
.word 0x0000
.word 0x0000
/* 32-bit flat CS */
.word 0xFFFF
.word 0x0000
.word 0x9A00
.word 0x00CF
/* 32-bit flat DS */
.word 0xFFFF
.word 0x0000
.word 0x9200
.word 0x00CF
/* 16-bit real mode CS */
.word 0xFFFF
.word 0x0000
.word 0x9E00
.word 0x0000
/* 16-bit real mode DS */
.word 0xFFFF
.word 0x0000
.word 0x9200
.word 0x0000
/* GDT table pointer */
gdtptr:
.word 0x27 /* Limit */
.long gdt /* Base Address */
/* Real-mode IDT pointer */
rmode_idtptr:
.word 0x3ff /* Limit */
.long 0 /* Base Address */
EXTERN(_BootDrive)
.long 0
EXTERN(_BootPartition)
.long 0

View File

@@ -1,62 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2002 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
.text
.code16
#define ASM
#include <arch.h>
EXTERN(_ChainLoadBiosBootSectorCode)
.code32
call switch_to_real
.code16
/* Set the boot drive */
movb (_BootDrive),%dl
/* Load segment registers */
cli
movw $0x0000,%bx
movw %bx,%ds
movw %bx,%es
movw %bx,%fs
movw %bx,%gs
movw %bx,%ss
movw $0x7C00,%sp
ljmpl $0x0000,$0x7C00
EXTERN(_SoftReboot)
.code32
call switch_to_real
.code16
movw $0x40,%ax
movw %ax,%ds
movw $0x72,%si
// Set the word at location 40:72 to 1234h
movw $0x1234,(%si)
// and jump to location FFFF:0 in ROM
ljmpl $0xFFFF,$0x0000

View File

@@ -1,132 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2002 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
.text
.code16
#define ASM
#include <arch.h>
EXTERN(_DriveMapInt13HandlerStart)
Int13Handler:
pushw %bp
movw %sp,%bp
pushw %ax
pushw %cx
pushw %si
cld
/* Get callers flags from stack */
movw 0x06(%bp),%ax
movw %ax,%cs:(CallersFlags - Int13Handler)
/* Save the drive number they passed in */
movb %dl,%cs:(PassedInDriveNumber - Int13Handler)
/* Now we need to perform the mapping */
xorw %cx,%cx
movw $(Int13HandlerMapCount - Int13Handler),%si
/* Get the count of drives in the map list */
movb %cs:(%si),%cl
incw %si
/* If the map list is empty then just call the old int 13h handler */
cmpb $0,%cl
jz CallOldInt13Handler
GetMappedDriveNumberLoop:
/* Get the next drive number in the list */
lodsw %cs:(%si),%ax
/* Check to see if it's the one they are calling int 13h for */
cmpb %al,%dl
/* If not get the next one */
jne GetMappedDriveNumberLoopNext
/* If we get here then we have found a mapped drive */
/* Send new drive number on to the old int 13h handler */
movb %ah,%dl
/* Call BIOS Int 13 Handler */
jmp CallOldInt13Handler
GetMappedDriveNumberLoopNext:
loop GetMappedDriveNumberLoop
CallOldInt13Handler:
/* Restore the registers we changed off the stack */
popw %si
popw %cx
popw %ax
/* Put flags onto stack */
pushw %cs:(CallersFlags - Int13Handler)
/* Call old int 13h handler with new drive number */
.byte 0x9a /* lcall */
EXTERN(_DriveMapOldInt13HandlerAddress)
.word 0
.word 0
/* Update the callers flags with the values the BIOS returned */
pushw %ax
pushf
popw %ax
movw %ax,0x06(%bp)
popw %ax
/* Restore the callers drive number */
movb %cs:(PassedInDriveNumber - Int13Handler),%dl
popw %bp
iret
CallersFlags:
.word 0
PassedInDriveNumber:
.byte 0
EXTERN(_DriveMapInt13HandlerMapList)
Int13HandlerMapCount:
.byte 0
Int13HandlerDrive1:
.byte 0
Int13HandlerDriveNew1:
.byte 0
Int13HandlerDrive2:
.byte 0
Int13HandlerDriveNew2:
.byte 0
Int13HandlerDrive3:
.byte 0
Int13HandlerDriveNew3:
.byte 0
Int13HandlerDrive4:
.byte 0
Int13HandlerDriveNew4:
.byte 0
EXTERN(_DriveMapInt13HandlerEnd)

View File

@@ -1,233 +0,0 @@
; FATHELP.ASM
; FAT12/16 Boot Sector Helper Code
; Copyright (c) 1998, 2001, 2002, 2003 Brian Palmer
;org 8000h
segment .text
bits 16
BootSectorStackTop equ 0x7bf2
DataAreaStartHigh equ 0x2
DataAreaStartLow equ 0x4
BiosCHSDriveSizeHigh equ 0x6
BiosCHSDriveSizeLow equ 0x8
BiosCHSDriveSize equ 0x8
ReadSectorsOffset equ 0xa
ReadClusterOffset equ 0xc
PutCharsOffset equ 0xe
OEMName equ 3
BytesPerSector equ 11
SectsPerCluster equ 13
ReservedSectors equ 14
NumberOfFats equ 16
MaxRootEntries equ 17
TotalSectors equ 19
MediaDescriptor equ 21
SectorsPerFat equ 22
SectorsPerTrack equ 24
NumberOfHeads equ 26
HiddenSectors equ 28
TotalSectorsBig equ 32
BootDrive equ 36
Reserved equ 37
ExtendSig equ 38
SerialNumber equ 39
VolumeLabel equ 43
FileSystem equ 54
BootPartition equ 0x7dfd
; This code will be stored in the first 512 bytes
; of freeldr.sys. The first 3 bytes will be a jmp
; instruction to skip past the FAT helper code
; that is stored in the rest of the 512 bytes.
;
; This code is loaded at 0000:8000 so we have to
; encode a jmp instruction to jump to 0000:8200
global _mainCRTStartup ; For Mingw32 builds where the linker looks for this symbol
_mainCRTStartup:
global start
start:
db 0xe9
db 0xfd
db 0x01
; Now starts the extra boot code that we will store
; in the first 512 bytes of freeldr.sys. This code
; allows the FAT12/16 bootsector to navigate the
; FAT table so that we can still load freeldr.sys
; even if it is fragmented.
FatHelperEntryPoint:
push ax ; First save AX - the start cluster of freeldr.sys
; Display "Loading FreeLoader..." message
mov esi,msgLoading ; Loading message
call [bp-PutCharsOffset] ; Display it
call ReadFatIntoMemory
pop ax ; Restore AX (start cluster)
; AX has start cluster of freeldr.sys
mov bx,800h
mov es,bx
LoadFile:
push ax
call IsFat12
pop ax
jnc LoadFile2
cmp ax,0ff8h ; Check to see if this is the last cluster in the chain
jmp LoadFile3
LoadFile2:
cmp ax,0fff8h
LoadFile3:
jae LoadFile_Done ; If so continue, if not then read then next one
push ax
xor bx,bx ; Load ROSLDR starting at 0000:8000h
push es
call [bp-ReadClusterOffset]
pop es
xor bx,bx
mov bl,BYTE [BYTE bp+SectsPerCluster]
shl bx,5 ; BX = BX * 512 / 16
mov ax,es ; Increment the load address by
add ax,bx ; The size of a cluster
mov es,ax
call IsFat12
pop ax
push es
jnc LoadFile4
call GetFatEntry12 ; Get the next entry
jmp LoadFile5
LoadFile4:
call GetFatEntry16
LoadFile5:
pop es
jmp LoadFile ; Load the next cluster (if any)
LoadFile_Done:
mov dl,BYTE [BYTE bp+BootDrive] ; Load the boot drive into DL
mov dh,[BootPartition] ; Load the boot partition into DH
push WORD 0x0000
push WORD 0x8000 ; We will do a far return to 0000:8000h
retf ; Transfer control to ROSLDR
; Reads the entire FAT into memory at 7000:0000
ReadFatIntoMemory:
mov ax,WORD [BYTE bp+HiddenSectors]
mov dx,WORD [BYTE bp+HiddenSectors+2]
add ax,WORD [BYTE bp+ReservedSectors]
adc dx,byte 0
mov cx,WORD [BYTE bp+SectorsPerFat]
mov bx,7000h
mov es,bx
xor bx,bx
call [bp-ReadSectorsOffset]
ret
; Returns the FAT entry for a given cluster number for 16-bit FAT
; On entry AX has cluster number
; On return AX has FAT entry for that cluster
GetFatEntry16:
mov cx,2 ; AX = AX * 2 (since FAT16 entries are 2 bytes)
mul cx
shl dx,12
mov bx,7000h
add bx,dx
mov es,bx
mov bx,ax ; Restore FAT entry offset
mov ax,WORD [es:bx] ; Get FAT entry
ret
; Returns the FAT entry for a given cluster number for 12-bit FAT
; On entry AX has cluster number
; On return AX has FAT entry for that cluster
GetFatEntry12:
push ax
mov cx,ax
shr ax,1
add ax,cx ; AX = AX * 1.5 (AX = AX + (AX / 2)) (since FAT12 entries are 12 bits)
mov bx,7000h
mov es,bx
mov bx,ax ; Put FAT entry offset into BX
mov ax,WORD [es:bx] ; Get FAT entry
pop cx ; Get cluster number from stack
and cx,1
jz UseLow12Bits
and ax,0fff0h
shr ax,4
jmp GetFatEntry12_Done
UseLow12Bits:
and ax,0fffh
GetFatEntry12_Done:
ret
; Returns CF = 1 if this is a FAT12 file system
; Otherwise CF = 0 for FAT16
IsFat12:
mov ebx,DWORD [BYTE bp-DataAreaStartLow]
; EBX now has the number of the starting sector of the data area
; starting from the beginning of the disk, so subtrace hidden sectors
sub ebx,DWORD [BYTE bp+HiddenSectors]
xor eax,eax
mov ax,WORD [BYTE bp+TotalSectors]
cmp ax,byte 0
jnz IsFat12_2
mov eax,DWORD [BYTE bp+TotalSectorsBig]
; EAX now contains the number of sectors on the volume
IsFat12_2:
sub eax,ebx ; Subtract data area start sector
xor edx,edx ; from total sectors of volume
; EDX:EAX now contains the number of data sectors on the volume
movzx ebx,BYTE [BYTE bp+SectsPerCluster]
div ebx
; EAX now has the number of clusters on the volume
stc
cmp eax,4085
jb IsFat12_Done
clc
IsFat12_Done:
ret
msgLoading db 'Loading FreeLoader...',0dh,0ah,0
times 510-($-$$) db 0 ; Pad to 510 bytes
dw 0aa55h ; BootSector signature

File diff suppressed because it is too large Load Diff

View File

@@ -1,184 +0,0 @@
/*
* FreeLoader
*
* Copyright (C) 2003 Eric Kohl
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __I386_HARDWARE_H_
#define __I386_HARDWARE_H_
typedef enum
{
InterfaceTypeUndefined = -1,
Internal,
Isa,
Eisa,
MicroChannel,
TurboChannel,
PCIBus,
VMEBus,
NuBus,
PCMCIABus,
CBus,
MPIBus,
MPSABus,
ProcessorInternal,
InternalPowerBus,
PNPISABus,
MaximumInterfaceType
} INTERFACE_TYPE, *PINTERFACE_TYPE;
typedef enum _CM_RESOURCE_TYPE
{
CmResourceTypeNull = 0,
CmResourceTypePort,
CmResourceTypeInterrupt,
CmResourceTypeMemory,
CmResourceTypeDma,
CmResourceTypeDeviceSpecific,
CmResourceTypeMaximum
} CM_RESOURCE_TYPE;
typedef enum _CM_SHARE_DISPOSITION
{
CmResourceShareUndetermined = 0,
CmResourceShareDeviceExclusive,
CmResourceShareDriverExclusive,
CmResourceShareShared
} CM_SHARE_DISPOSITION;
typedef U64 PHYSICAL_ADDRESS;
typedef struct
{
U8 Type;
U8 ShareDisposition;
U16 Flags;
union
{
struct
{
PHYSICAL_ADDRESS Start;
U32 Length;
} __attribute__((packed)) Port;
struct
{
U32 Level;
U32 Vector;
U32 Affinity;
} __attribute__((packed)) Interrupt;
struct
{
PHYSICAL_ADDRESS Start;
U32 Length;
} __attribute__((packed)) Memory;
struct
{
U32 Channel;
U32 Port;
U32 Reserved1;
} __attribute__((packed)) Dma;
struct
{
U32 DataSize;
U32 Reserved1;
U32 Reserved2;
} __attribute__((packed)) DeviceSpecificData;
} __attribute__((packed)) u;
} __attribute__((packed)) CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
/* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags */
#define CM_RESOURCE_PORT_MEMORY 0x0000
#define CM_RESOURCE_PORT_IO 0x0001
#define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
#define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
typedef struct
{
U16 Version;
U16 Revision;
U32 Count;
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];
} __attribute__((packed))CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
typedef struct
{
INTERFACE_TYPE InterfaceType;
U32 BusNumber;
CM_PARTIAL_RESOURCE_LIST PartialResourceList;
} __attribute__((packed)) CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;
typedef struct _CM_COMPONENT_INFORMATION
{
U32 Flags;
U32 Version;
U32 Key;
U32 Affinity;
} __attribute__((packed)) CM_COMPONENT_INFORMATION, *PCM_COMPONENT_INFORMATION;
/* CM_COMPONENT_INFORMATION.Flags */
#define Failed 0x00000001
#define ReadOnly 0x00000002
#define Removable 0x00000004
#define ConsoleIn 0x00000008
#define ConsoleOut 0x00000010
#define Input 0x00000020
#define Output 0x00000040
/* PROTOTYPES ***************************************************************/
/* hardware.c */
VOID KeStallExecutionProcessor(U32 Microseconds);
VOID SetComponentInformation(HKEY ComponentKey,
U32 Flags,
U32 Key,
U32 Affinity);
/* hwcpu.c */
VOID DetectCPUs(HKEY SystemKey);
/* i386cpu.S */
U32 CpuidSupported(VOID);
VOID GetCpuid(U32 Level,
U32 *eax,
U32 *ebx,
U32 *ecx,
U32 *edx);
U64 RDTSC(VOID);
/* i386pnp.S */
U32 PnpBiosSupported(VOID);
U32 PnpBiosGetDeviceNodeCount(U32 *NodeSize,
U32 *NodeCount);
U32 PnpBiosGetDeviceNode(U8 *NodeId,
U8 *NodeBuffer);
#endif /* __I386_HARDWARE_H_ */
/* EOF */

View File

@@ -1,635 +0,0 @@
/*
* FreeLoader
*
* Copyright (C) 2003 Eric Kohl
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <freeldr.h>
#include <arch.h>
#include <rtl.h>
#include <debug.h>
#include <mm.h>
#include <portio.h>
#include "../../reactos/registry.h"
#include "hardware.h"
#define MP_FP_SIGNATURE 0x5F504D5F /* "_MP_" */
#define MP_CT_SIGNATURE 0x504D4350 /* "_MP_" */
typedef struct _MP_FLOATING_POINT_TABLE
{
U32 Signature; /* "_MP_" */
U32 PhysicalAddressPointer;
U8 Length;
U8 SpecRev;
U8 Checksum;
U8 FeatureByte[5];
} PACKED MP_FLOATING_POINT_TABLE, *PMP_FLOATING_POINT_TABLE;
typedef struct _MPS_CONFIG_TABLE_HEADER
{
U32 Signature; /* "PCMP" */
U16 BaseTableLength;
U8 SpecRev;
U8 Checksum;
U8 OemIdString[8];
U8 ProductIdString[12];
U32 OemTablePointer;
U16 OemTableLength;
U16 EntryCount;
U32 AddressOfLocalAPIC;
U16 ExtendedTableLength;
U8 ExtendedTableChecksum;
U8 Reserved;
} PACKED MP_CONFIGURATION_TABLE, *PMP_CONFIGURATION_TABLE;
typedef struct _MP_PROCESSOR_ENTRY
{
U8 EntryType;
U8 LocalApicId;
U8 LocalApicVersion;
U8 CpuFlags;
U32 CpuSignature;
U32 FeatureFlags;
U32 Reserved1;
U32 Reserved2;
} PACKED MP_PROCESSOR_ENTRY, *PMP_PROCESSOR_ENTRY;
/* FUNCTIONS ****************************************************************/
static U32
GetCpuSpeed(VOID)
{
U64 Timestamp1;
U64 Timestamp2;
U64 Diff;
/* Read TSC (Time Stamp Counter) */
Timestamp1 = RDTSC();
/* Wait for 0.1 seconds (= 100 milliseconds = 100000 microseconds)*/
KeStallExecutionProcessor(100000);
/* Read TSC (Time Stamp Counter) again */
Timestamp2 = RDTSC();
/* Calculate elapsed time (check for counter overrun) */
if (Timestamp2 > Timestamp1)
{
Diff = Timestamp2 - Timestamp1;
}
else
{
Diff = Timestamp2 + (((U64)-1) - Timestamp1);
}
return (U32)(Diff / 100000);
}
static VOID
DetectCPU(HKEY CpuKey,
HKEY FpuKey)
{
char VendorIdentifier[13];
char Identifier[64];
U32 FeatureSet;
HKEY CpuInstKey;
HKEY FpuInstKey;
U32 eax = 0;
U32 ebx = 0;
U32 ecx = 0;
U32 edx = 0;
U32 *Ptr;
S32 Error;
BOOL SupportTSC = FALSE;
U32 CpuSpeed;
/* Create the CPU instance key */
Error = RegCreateKey(CpuKey,
"0",
&CpuInstKey);
if (Error != ERROR_SUCCESS)
{
DbgPrint((DPRINT_HWDETECT, "RegCreateKey() failed (Error %u)\n", (int)Error));
return;
}
/* Create the FPU instance key */
Error = RegCreateKey(FpuKey,
"0",
&FpuInstKey);
if (Error != ERROR_SUCCESS)
{
DbgPrint((DPRINT_HWDETECT, "RegCreateKey() failed (Error %u)\n", (int)Error));
return;
}
eax = CpuidSupported();
if (eax & 1)
{
DbgPrint((DPRINT_HWDETECT, "CPUID supported\n"));
/* Get vendor identifier */
GetCpuid(0, &eax, &ebx, &ecx, &edx);
VendorIdentifier[12] = 0;
Ptr = (U32*)&VendorIdentifier[0];
*Ptr = ebx;
Ptr++;
*Ptr = edx;
Ptr++;
*Ptr = ecx;
/* Get Identifier */
GetCpuid(1, &eax, &ebx, &ecx, &edx);
sprintf(Identifier,
"x86 Family %u Model %u Stepping %u",
(unsigned int)((eax >> 8) & 0x0F),
(unsigned int)((eax >> 4) & 0x0F),
(unsigned int)(eax & 0x0F));
FeatureSet = edx;
if (((eax >> 8) & 0x0F) >= 5)
SupportTSC = TRUE;
}
else
{
DbgPrint((DPRINT_HWDETECT, "CPUID not supported\n"));
strcpy(VendorIdentifier, "Unknown");
sprintf(Identifier,
"x86 Family %u Model %u Stepping %u",
(unsigned int)((eax >> 8) & 0x0F),
(unsigned int)((eax >> 4) & 0x0F),
(unsigned int)(eax & 0x0F));
FeatureSet = 0;
}
/* Set 'Conmponent Information' value (CPU and FPU) */
SetComponentInformation(CpuInstKey, 0, 0, 1);
SetComponentInformation(FpuInstKey, 0, 0, 1);
/* Set 'FeatureSet' value (CPU only) */
DbgPrint((DPRINT_HWDETECT, "FeatureSet: %x\n", FeatureSet));
Error = RegSetValue(CpuInstKey,
"FeatureSet",
REG_DWORD,
(PU8)&FeatureSet,
sizeof(U32));
if (Error != ERROR_SUCCESS)
{
DbgPrint((DPRINT_HWDETECT, "RegSetValue() failed (Error %u)\n", (int)Error));
}
/* Set 'Identifier' value (CPU and FPU) */
DbgPrint((DPRINT_HWDETECT, "Identifier: %s\n", Identifier));
Error = RegSetValue(CpuInstKey,
"Identifier",
REG_SZ,
(PU8)Identifier,
strlen(Identifier) + 1);
if (Error != ERROR_SUCCESS)
{
DbgPrint((DPRINT_HWDETECT, "RegSetValue() failed (Error %u)\n", (int)Error));
}
Error = RegSetValue(FpuInstKey,
"Identifier",
REG_SZ,
(PU8)Identifier,
strlen(Identifier) + 1);
if (Error != ERROR_SUCCESS)
{
DbgPrint((DPRINT_HWDETECT, "RegSetValue() failed (Error %u)\n", (int)Error));
}
/* Set 'VendorIdentifier' value (CPU only) */
DbgPrint((DPRINT_HWDETECT, "Vendor Identifier: %s\n", VendorIdentifier));
Error = RegSetValue(CpuInstKey,
"VendorIdentifier",
REG_SZ,
(PU8)VendorIdentifier,
strlen(VendorIdentifier) + 1);
if (Error != ERROR_SUCCESS)
{
DbgPrint((DPRINT_HWDETECT, "RegSetValue() failed (Error %u)\n", (int)Error));
}
/* FIXME: Set 'Update Signature' value (CPU only) */
/* FIXME: Set 'Update Status' value (CPU only) */
/* Set '~MHz' value (CPU only) */
if (SupportTSC)
{
CpuSpeed = GetCpuSpeed();
Error = RegSetValue(CpuInstKey,
"~MHz",
REG_DWORD,
(PU8)&CpuSpeed,
sizeof(U32));
if (Error != ERROR_SUCCESS)
{
DbgPrint((DPRINT_HWDETECT, "RegSetValue() failed (Error %u)\n", (int)Error));
}
}
}
static VOID
SetMpsProcessor(HKEY CpuKey,
HKEY FpuKey,
PMP_PROCESSOR_ENTRY CpuEntry)
{
char VendorIdentifier[13];
char Identifier[64];
char Buffer[8];
U32 FeatureSet;
HKEY CpuInstKey;
HKEY FpuInstKey;
U32 eax = 0;
U32 ebx = 0;
U32 ecx = 0;
U32 edx = 0;
U32 *Ptr;
S32 Error;
U32 CpuSpeed;
/* Get processor instance number */
sprintf(Buffer, "%u", CpuEntry->LocalApicId);
/* Create the CPU instance key */
Error = RegCreateKey(CpuKey,
Buffer,
&CpuInstKey);
if (Error != ERROR_SUCCESS)
{
DbgPrint((DPRINT_HWDETECT, "RegCreateKey() failed (Error %u)\n", (int)Error));
return;
}
/* Create the FPU instance key */
Error = RegCreateKey(FpuKey,
Buffer,
&FpuInstKey);
if (Error != ERROR_SUCCESS)
{
DbgPrint((DPRINT_HWDETECT, "RegCreateKey() failed (Error %u)\n", (int)Error));
return;
}
/* Get 'VendorIdentifier' */
GetCpuid(0, &eax, &ebx, &ecx, &edx);
VendorIdentifier[12] = 0;
Ptr = (U32*)&VendorIdentifier[0];
*Ptr = ebx;
Ptr++;
*Ptr = edx;
Ptr++;
*Ptr = ecx;
/* Get 'Identifier' */
sprintf(Identifier,
"x86 Family %u Model %u Stepping %u",
(U32)((CpuEntry->CpuSignature >> 8) & 0x0F),
(U32)((CpuEntry->CpuSignature >> 4) & 0x0F),
(U32)(CpuEntry->CpuSignature & 0x0F));
/* Get FeatureSet */
FeatureSet = CpuEntry->FeatureFlags;
/* Set 'Configuration Data' value (CPU and FPU) */
SetComponentInformation(CpuInstKey,
0,
CpuEntry->LocalApicId,
1 << CpuEntry->LocalApicId);
SetComponentInformation(FpuInstKey,
0,
CpuEntry->LocalApicId,
1 << CpuEntry->LocalApicId);
/* Set 'FeatureSet' value (CPU only) */
DbgPrint((DPRINT_HWDETECT, "FeatureSet: %x\n", FeatureSet));
Error = RegSetValue(CpuInstKey,
"FeatureSet",
REG_DWORD,
(PU8)&FeatureSet,
sizeof(U32));
if (Error != ERROR_SUCCESS)
{
DbgPrint((DPRINT_HWDETECT, "RegSetValue() failed (Error %u)\n", (int)Error));
}
/* Set 'Identifier' value (CPU and FPU) */
DbgPrint((DPRINT_HWDETECT, "Identifier: %s\n", Identifier));
Error = RegSetValue(CpuInstKey,
"Identifier",
REG_SZ,
(PU8)Identifier,
strlen(Identifier) + 1);
if (Error != ERROR_SUCCESS)
{
DbgPrint((DPRINT_HWDETECT, "RegSetValue() failed (Error %u)\n", (int)Error));
}
Error = RegSetValue(FpuInstKey,
"Identifier",
REG_SZ,
(PU8)Identifier,
strlen(Identifier) + 1);
if (Error != ERROR_SUCCESS)
{
DbgPrint((DPRINT_HWDETECT, "RegSetValue() failed (Error %u)\n", (int)Error));
}
/* Set 'VendorIdentifier' value (CPU only) */
DbgPrint((DPRINT_HWDETECT, "Vendor Identifier: %s\n", VendorIdentifier));
Error = RegSetValue(CpuInstKey,
"VendorIdentifier",
REG_SZ,
(PU8)VendorIdentifier,
strlen(VendorIdentifier) + 1);
if (Error != ERROR_SUCCESS)
{
DbgPrint((DPRINT_HWDETECT, "RegSetValue() failed (Error %u)\n", (int)Error));
}
/* FIXME: Set 'Update Signature' value (CPU only) */
/* FIXME: Set 'Update Status' value (CPU only) */
/* Set '~MHz' value (CPU only) */
if (((CpuEntry->CpuSignature >> 8) & 0x0F) >= 5)
{
CpuSpeed = GetCpuSpeed();
Error = RegSetValue(CpuInstKey,
"~MHz",
REG_DWORD,
(PU8)&CpuSpeed,
sizeof(U32));
if (Error != ERROR_SUCCESS)
{
DbgPrint((DPRINT_HWDETECT, "RegSetValue() failed (Error %u)\n", (int)Error));
}
}
}
static PMP_FLOATING_POINT_TABLE
GetMpFloatingPointTable(VOID)
{
PMP_FLOATING_POINT_TABLE FpTable;
char *Ptr;
U8 Sum;
U32 Length;
U32 i;
FpTable = (PMP_FLOATING_POINT_TABLE)0xF0000;
while ((U32)FpTable < 0x100000)
{
if (FpTable->Signature == MP_FP_SIGNATURE)
{
Length = FpTable->Length * 0x10;
Ptr = (char *)FpTable;
Sum = 0;
for (i = 0; i < Length; i++)
{
Sum += Ptr[i];
}
DbgPrint((DPRINT_HWDETECT,
"Checksum: %u\n",
Sum));
if (Sum != 0)
{
DbgPrint((DPRINT_HWDETECT,
"Invalid MP floating point checksum: %u\n",
Sum));
return NULL;
}
return FpTable;
}
FpTable = (PMP_FLOATING_POINT_TABLE)((U32)FpTable + 0x10);
}
return NULL;
}
static PMP_CONFIGURATION_TABLE
GetMpConfigurationTable(PMP_FLOATING_POINT_TABLE FpTable)
{
PMP_CONFIGURATION_TABLE ConfigTable;
char *Ptr;
U8 Sum;
U32 Length;
U32 i;
if (FpTable->FeatureByte[0] != 0 ||
FpTable->PhysicalAddressPointer == 0)
return NULL;
ConfigTable = (PMP_CONFIGURATION_TABLE)FpTable->PhysicalAddressPointer;
if (ConfigTable->Signature != MP_CT_SIGNATURE)
return NULL;
DbgPrint((DPRINT_HWDETECT,
"MP Configuration Table at: %x\n",
(U32)ConfigTable));
/* Calculate base table checksum */
Length = ConfigTable->BaseTableLength;
Ptr = (char *)ConfigTable;
Sum = 0;
for (i = 0; i < Length; i++)
{
Sum += Ptr[i];
}
DbgPrint((DPRINT_HWDETECT,
"MP Configuration Table base checksum: %u\n",
Sum));
if (Sum != 0)
{
DbgPrint((DPRINT_HWDETECT,
"Invalid MP Configuration Table base checksum: %u\n",
Sum));
return NULL;
}
if (ConfigTable->ExtendedTableLength != 0)
{
/* FIXME: Check extended table */
}
return ConfigTable;
}
static BOOL
DetectMps(HKEY CpuKey,
HKEY FpuKey)
{
PMP_FLOATING_POINT_TABLE FpTable;
PMP_CONFIGURATION_TABLE ConfigTable;
PMP_PROCESSOR_ENTRY CpuEntry;
char *Ptr;
U32 Offset;
/* Get floating point table */
FpTable = GetMpFloatingPointTable();
if (FpTable == NULL)
return FALSE;
DbgPrint((DPRINT_HWDETECT,
"MP Floating Point Table at: %x\n",
(U32)FpTable));
if (FpTable->FeatureByte[0] == 0)
{
/* Get configuration table */
ConfigTable = GetMpConfigurationTable(FpTable);
if (ConfigTable == NULL)
{
DbgPrint((DPRINT_HWDETECT,
"Failed to find the MP Configuration Table\n"));
return FALSE;
}
Offset = sizeof(MP_CONFIGURATION_TABLE);
while (Offset < ConfigTable->BaseTableLength)
{
Ptr = (char*)((U32)ConfigTable + Offset);
switch (*Ptr)
{
case 0:
CpuEntry = (PMP_PROCESSOR_ENTRY)Ptr;
DbgPrint((DPRINT_HWDETECT, "Processor Entry\n"));
DbgPrint((DPRINT_HWDETECT,
"APIC Id %u APIC Version %u Flags %x Signature %x Feature %x\n",
CpuEntry->LocalApicId,
CpuEntry->LocalApicVersion,
CpuEntry->CpuFlags,
CpuEntry->CpuSignature,
CpuEntry->FeatureFlags));
DbgPrint((DPRINT_HWDETECT,
"Processor %u: x86 Family %u Model %u Stepping %u\n",
CpuEntry->LocalApicId,
(U32)((CpuEntry->CpuSignature >> 8) & 0x0F),
(U32)((CpuEntry->CpuSignature >> 4) & 0x0F),
(U32)(CpuEntry->CpuSignature & 0x0F)));
SetMpsProcessor(CpuKey, FpuKey, CpuEntry);
Offset += 0x14;
break;
case 1:
DbgPrint((DPRINT_HWDETECT, "Bus Entry\n"));
Offset += 0x08;
break;
case 2:
DbgPrint((DPRINT_HWDETECT, "I/0 APIC Entry\n"));
Offset += 0x08;
break;
case 3:
DbgPrint((DPRINT_HWDETECT, "I/0 Interrupt Assignment Entry\n"));
Offset += 0x08;
break;
case 4:
DbgPrint((DPRINT_HWDETECT, "Local Interrupt Assignment Entry\n"));
Offset += 0x08;
break;
default:
DbgPrint((DPRINT_HWDETECT, "Unknown Entry %u\n",(U32)*Ptr));
return FALSE;
}
}
}
else
{
DbgPrint((DPRINT_HWDETECT,
"Unsupported MPS configuration: %x\n",
FpTable->FeatureByte[0]));
/* FIXME: Identify default configurations */
return FALSE;
}
return TRUE;
}
VOID
DetectCPUs(HKEY SystemKey)
{
HKEY CpuKey;
HKEY FpuKey;
S32 Error;
/* Create the 'CentralProcessor' key */
Error = RegCreateKey(SystemKey,
"CentralProcessor",
&CpuKey);
if (Error != ERROR_SUCCESS)
{
DbgPrint((DPRINT_HWDETECT, "RegCreateKey() failed (Error %u)\n", (int)Error));
return;
}
/* Create the 'FloatingPointProcessor' key */
Error = RegCreateKey(SystemKey,
"FloatingPointProcessor",
&FpuKey);
if (Error != ERROR_SUCCESS)
{
DbgPrint((DPRINT_HWDETECT, "RegCreateKey() failed (Error %u)\n", (int)Error));
return;
}
/* Detect CPUs */
if (!DetectMps(CpuKey, FpuKey))
{
DetectCPU(CpuKey, FpuKey);
}
}
/* EOF */

View File

@@ -1,131 +0,0 @@
/*
* FreeLoader
* Copyright (C) 2003 Eric Kohl <ekohl@rz-online.de>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
.text
.code16
#define ASM
#include <arch.h>
/*
* U32 CpuidSupported(VOID);
*
* RETURNS:
* 0x00000001: CPU supports the CPUID instruction
* 0x00000300: Found 80386 CPU
* 0x00000400: Found 80486 CPU without CPUID support
*/
EXTERN(_CpuidSupported)
.code32
pushl %ecx /* save ECX */
pushfl /* push original EFLAGS */
popl %eax /* get original EFLAGS */
movl %eax,%ecx /* save original EFLAGS */
xorl $0x40000,%eax /* flip AC bit in EFLAGS */
pushl %eax /* save new EFLAGS value on stack */
popfl /* replace current EFLAGS value */
pushfl /* get new EFLAGS */
popl %eax /* store new EFLAGS in EAX */
xorl %ecx, %eax /* can't toggle AC bit, processor=80386 */
movl $0x300,%eax /* return processor id */
jz NoCpuid /* jump if 80386 processor */
pushl %ecx
popfl /* restore AC bit in EFLAGS first */
movl %ecx,%eax /* get original EFLAGS */
xorl $0x200000,%eax /* flip ID bit in EFLAGS */
pushl %eax /* save new EFLAGS value on stack */
popfl /* replace current EFLAGS value */
pushfl /* get new EFLAGS */
popl %eax /* store new EFLAGS in EAX */
xorl %ecx,%eax /* can't toggle ID bit, */
movl $0x400,%eax /* return processor id */
je NoCpuid /* processor=80486 */
movl $1,%eax /* CPUID supported */
NoCpuid:
pushl %ecx
popfl /* restore EFLAGS */
popl %ecx /* retore ECX */
ret
/*
* VOID GetCpuid(U32 Level, U32 *eax, U32 *ebx, U32 *ecx, U32 *edx);
*/
EXTERN(_GetCpuid)
.code32
pushl %ebp
movl %esp,%ebp
pushl %eax
pushl %ebx
pushl %ecx
pushl %edx
pushl %esi
movl 0x08(%ebp),%eax
cpuid
movl 0x0C(%ebp),%esi
movl %eax, (%esi)
movl 0x10(%ebp),%esi
movl %ebx, (%esi)
movl 0x14(%ebp),%esi
movl %ecx, (%esi)
movl 0x18(%ebp),%esi
movl %edx, (%esi)
popl %esi
popl %edx
popl %ecx
popl %ebx
popl %eax
movl %ebp,%esp
popl %ebp
ret
/*
* U64 RDTSC(VOID);
*/
EXTERN(_RDTSC)
.code32
rdtsc
ret
/* EOF */

View File

@@ -1,487 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <freeldr.h>
#include <disk.h>
#include <rtl.h>
#include <arch.h>
#include <debug.h>
#include <portio.h>
typedef struct
{
U8 PacketSize; // 00h - Size of packet (10h or 18h)
U8 Reserved; // 01h - Reserved (0)
U16 LBABlockCount; // 02h - Number of blocks to transfer (max 007Fh for Phoenix EDD)
U16 TransferBufferOffset; // 04h - Transfer buffer offset (seg:off)
U16 TransferBufferSegment; // Transfer buffer segment (seg:off)
U64 LBAStartBlock; // 08h - Starting absolute block number
U64 TransferBuffer64; // 10h - (EDD-3.0, optional) 64-bit flat address of transfer buffer
// used if DWORD at 04h is FFFFh:FFFFh
} PACKED I386_DISK_ADDRESS_PACKET, *PI386_DISK_ADDRESS_PACKET;
/////////////////////////////////////////////////////////////////////////////////////////////
// FUNCTIONS
/////////////////////////////////////////////////////////////////////////////////////////////
#ifdef __i386__
BOOL DiskReadLogicalSectors(U32 DriveNumber, U64 SectorNumber, U32 SectorCount, PVOID Buffer)
{
DbgPrint((DPRINT_DISK, "DiskReadLogicalSectors() DriveNumber: 0x%x SectorNumber: %I64d SectorCount: %d Buffer: 0x%x\n", DriveNumber, SectorNumber, SectorCount, Buffer));
//
// Check to see if it is a fixed disk drive
// If so then check to see if Int13 extensions work
// If they do then use them, otherwise default back to BIOS calls
//
if ((DriveNumber >= 0x80) && DiskInt13ExtensionsSupported(DriveNumber))
{
DbgPrint((DPRINT_DISK, "Using Int 13 Extensions for read. DiskInt13ExtensionsSupported(%d) = %s\n", DriveNumber, DiskInt13ExtensionsSupported(DriveNumber) ? "TRUE" : "FALSE"));
//
// LBA is easy, nothing to calculate
// Just do the read
//
return DiskReadLogicalSectorsLBA(DriveNumber, SectorNumber, SectorCount, Buffer);
}
else
{
// LBA is not supported default to the CHS calls
return DiskReadLogicalSectorsCHS(DriveNumber, SectorNumber, SectorCount, Buffer);
}
return TRUE;
}
BOOL DiskReadLogicalSectorsLBA(U32 DriveNumber, U64 SectorNumber, U32 SectorCount, PVOID Buffer)
{
REGS RegsIn;
REGS RegsOut;
U32 RetryCount;
PI386_DISK_ADDRESS_PACKET Packet = (PI386_DISK_ADDRESS_PACKET)(BIOSCALLBUFFER);
DbgPrint((DPRINT_DISK, "DiskReadLogicalSectorsLBA() DriveNumber: 0x%x SectorNumber: %I64d SectorCount: %d Buffer: 0x%x\n", DriveNumber, SectorNumber, SectorCount, Buffer));
// BIOS int 0x13, function 42h - IBM/MS INT 13 Extensions - EXTENDED READ
RegsIn.b.ah = 0x42; // Subfunction 42h
RegsIn.b.dl = DriveNumber; // Drive number in DL (0 - floppy, 0x80 - harddisk)
RegsIn.x.ds = BIOSCALLBUFSEGMENT; // DS:SI -> disk address packet
RegsIn.w.si = BIOSCALLBUFOFFSET;
// Setup disk address packet
RtlZeroMemory(Packet, sizeof(I386_DISK_ADDRESS_PACKET));
Packet->PacketSize = sizeof(I386_DISK_ADDRESS_PACKET);
Packet->Reserved = 0;
Packet->LBABlockCount = SectorCount;
Packet->TransferBufferOffset = ((U32)Buffer) & 0x0F;
Packet->TransferBufferSegment = ((U32)Buffer) >> 4;
Packet->LBAStartBlock = SectorNumber;
Packet->TransferBuffer64 = 0;
// BIOS int 0x13, function 42h - IBM/MS INT 13 Extensions - EXTENDED READ
// Return:
// CF clear if successful
// AH = 00h
// CF set on error
// AH = error code
// disk address packet's block count field set to the
// number of blocks successfully transferred
// Retry 3 times
for (RetryCount=0; RetryCount<3; RetryCount++)
{
Int386(0x13, &RegsIn, &RegsOut);
// If it worked return TRUE
if (INT386_SUCCESS(RegsOut))
{
return TRUE;
}
// If it was a corrected ECC error then the data is still good
else if (RegsOut.b.ah == 0x11)
{
return TRUE;
}
// If it failed the do the next retry
else
{
DiskResetController(DriveNumber);
continue;
}
}
// If we get here then the read failed
DiskError("Disk Read Failed", RegsOut.b.ah);
return FALSE;
}
BOOL DiskReadLogicalSectorsCHS(U32 DriveNumber, U64 SectorNumber, U32 SectorCount, PVOID Buffer)
{
U32 PhysicalSector;
U32 PhysicalHead;
U32 PhysicalTrack;
GEOMETRY DriveGeometry;
U32 NumberOfSectorsToRead;
REGS RegsIn;
REGS RegsOut;
U32 RetryCount;
DbgPrint((DPRINT_DISK, "DiskReadLogicalSectorsCHS()\n"));
//
// Get the drive geometry
//
if (!DiskGetDriveGeometry(DriveNumber, &DriveGeometry))
{
return FALSE;
}
while (SectorCount)
{
//
// Calculate the physical disk offsets
//
PhysicalSector = 1 + (SectorNumber % DriveGeometry.Sectors);
PhysicalHead = (SectorNumber / DriveGeometry.Sectors) % DriveGeometry.Heads;
PhysicalTrack = (SectorNumber / DriveGeometry.Sectors) / DriveGeometry.Heads;
//
// Calculate how many sectors we need to read this round
//
if (PhysicalSector > 1)
{
if (SectorCount >= (DriveGeometry.Sectors - (PhysicalSector - 1)))
NumberOfSectorsToRead = (DriveGeometry.Sectors - (PhysicalSector - 1));
else
NumberOfSectorsToRead = SectorCount;
}
else
{
if (SectorCount >= DriveGeometry.Sectors)
NumberOfSectorsToRead = DriveGeometry.Sectors;
else
NumberOfSectorsToRead = SectorCount;
}
//
// Make sure the read is within the geometry boundaries
//
if ((PhysicalHead >= DriveGeometry.Heads) ||
(PhysicalTrack >= DriveGeometry.Cylinders) ||
((NumberOfSectorsToRead + PhysicalSector) > (DriveGeometry.Sectors + 1)) ||
(PhysicalSector > DriveGeometry.Sectors))
{
DiskError("Disk read exceeds drive geometry limits.", 0);
return FALSE;
}
// BIOS Int 13h, function 2 - Read Disk Sectors
// AH = 02h
// AL = number of sectors to read (must be nonzero)
// CH = low eight bits of cylinder number
// CL = sector number 1-63 (bits 0-5)
// high two bits of cylinder (bits 6-7, hard disk only)
// DH = head number
// DL = drive number (bit 7 set for hard disk)
// ES:BX -> data buffer
// Return:
// CF set on error
// if AH = 11h (corrected ECC error), AL = burst length
// CF clear if successful
// AH = status
// AL = number of sectors transferred
// (only valid if CF set for some BIOSes)
RegsIn.b.ah = 0x02;
RegsIn.b.al = NumberOfSectorsToRead;
RegsIn.b.ch = (PhysicalTrack & 0xFF);
RegsIn.b.cl = (PhysicalSector + ((PhysicalTrack & 0x300) >> 2));
RegsIn.b.dh = PhysicalHead;
RegsIn.b.dl = DriveNumber;
RegsIn.w.es = ((U32)Buffer) >> 4;
RegsIn.w.bx = ((U32)Buffer) & 0x0F;
//
// Perform the read
// Retry 3 times
//
for (RetryCount=0; RetryCount<3; RetryCount++)
{
Int386(0x13, &RegsIn, &RegsOut);
// If it worked break out
if (INT386_SUCCESS(RegsOut))
{
break;
}
// If it was a corrected ECC error then the data is still good
else if (RegsOut.b.ah == 0x11)
{
break;
}
// If it failed the do the next retry
else
{
DiskResetController(DriveNumber);
continue;
}
}
// If we retried 3 times then fail
if (RetryCount >= 3)
{
DiskError("Disk Read Failed", RegsOut.b.ah);
return FALSE;
}
// I have learned that not all bioses return
// the sector read count in the AL register (at least mine doesn't)
// even if the sectors were read correctly. So instead
// of checking the sector read count we will rely solely
// on the carry flag being set on error
Buffer += (NumberOfSectorsToRead * DriveGeometry.BytesPerSector);
SectorCount -= NumberOfSectorsToRead;
SectorNumber += NumberOfSectorsToRead;
}
return TRUE;
}
BOOL DiskResetController(U32 DriveNumber)
{
REGS RegsIn;
REGS RegsOut;
DbgPrint((DPRINT_DISK, "DiskResetController(0x%x) DISK OPERATION FAILED -- RESETTING CONTROLLER\n", DriveNumber));
// BIOS Int 13h, function 0 - Reset disk system
// AH = 00h
// DL = drive (if bit 7 is set both hard disks and floppy disks reset)
// Return:
// AH = status
// CF clear if successful
// CF set on error
RegsIn.b.ah = 0x00;
RegsIn.b.dl = DriveNumber;
// Reset the disk controller
Int386(0x13, &RegsIn, &RegsOut);
return INT386_SUCCESS(RegsOut);
}
BOOL DiskInt13ExtensionsSupported(U32 DriveNumber)
{
REGS RegsIn;
REGS RegsOut;
DbgPrint((DPRINT_DISK, "DiskInt13ExtensionsSupported()\n"));
// IBM/MS INT 13 Extensions - INSTALLATION CHECK
// AH = 41h
// BX = 55AAh
// DL = drive (80h-FFh)
// Return:
// CF set on error (extensions not supported)
// AH = 01h (invalid function)
// CF clear if successful
// BX = AA55h if installed
// AH = major version of extensions
// 01h = 1.x
// 20h = 2.0 / EDD-1.0
// 21h = 2.1 / EDD-1.1
// 30h = EDD-3.0
// AL = internal use
// CX = API subset support bitmap
// DH = extension version (v2.0+ ??? -- not present in 1.x)
//
// Bitfields for IBM/MS INT 13 Extensions API support bitmap
// Bit 0, extended disk access functions (AH=42h-44h,47h,48h) supported
// Bit 1, removable drive controller functions (AH=45h,46h,48h,49h,INT 15/AH=52h) supported
// Bit 2, enhanced disk drive (EDD) functions (AH=48h,AH=4Eh) supported
// extended drive parameter table is valid
// Bits 3-15 reserved
RegsIn.b.ah = 0x41;
RegsIn.w.bx = 0x55AA;
RegsIn.b.dl = DriveNumber;
// Reset the disk controller
Int386(0x13, &RegsIn, &RegsOut);
if (!INT386_SUCCESS(RegsOut))
{
// CF set on error (extensions not supported)
return FALSE;
}
if (RegsOut.w.bx != 0xAA55)
{
// BX = AA55h if installed
return FALSE;
}
// Note:
// The original check is too strict because some BIOSes report that
// extended disk access functions are not suported when booting
// from a CD (e.g. Phoenix BIOS v6.00PG). Argh!
#if 0
if (!(RegsOut.w.cx & 0x0001))
{
// CX = API subset support bitmap
// Bit 0, extended disk access functions (AH=42h-44h,47h,48h) supported
return FALSE;
}
#endif
// Use this relaxed check instead
if (RegsOut.w.cx == 0x0000)
{
// CX = API subset support bitmap
return FALSE;
}
return TRUE;
}
VOID DiskStopFloppyMotor(VOID)
{
WRITE_PORT_UCHAR((PUCHAR)0x3F2, 0);
}
BOOL DiskGetDriveParameters(U32 DriveNumber, PGEOMETRY Geometry)
{
REGS RegsIn;
REGS RegsOut;
U32 Cylinders;
DbgPrint((DPRINT_DISK, "DiskGetDriveParameters()\n"));
// BIOS Int 13h, function 08h - Get drive parameters
// AH = 08h
// DL = drive (bit 7 set for hard disk)
// ES:DI = 0000h:0000h to guard against BIOS bugs
// Return:
// CF set on error
// AH = status (07h)
// CF clear if successful
// AH = 00h
// AL = 00h on at least some BIOSes
// BL = drive type (AT/PS2 floppies only)
// CH = low eight bits of maximum cylinder number
// CL = maximum sector number (bits 5-0)
// high two bits of maximum cylinder number (bits 7-6)
// DH = maximum head number
// DL = number of drives
// ES:DI -> drive parameter table (floppies only)
RegsIn.b.ah = 0x08;
RegsIn.b.dl = DriveNumber;
RegsIn.w.es = 0x0000;
RegsIn.w.di = 0x0000;
// Get drive parameters
Int386(0x13, &RegsIn, &RegsOut);
if (!INT386_SUCCESS(RegsOut))
{
return FALSE;
}
Cylinders = (RegsOut.b.cl & 0xC0) << 2;
Cylinders += RegsOut.b.ch;
Cylinders++;
Geometry->Cylinders = Cylinders;
Geometry->Heads = RegsOut.b.dh + 1;
Geometry->Sectors = RegsOut.b.cl & 0x3F;
Geometry->BytesPerSector = 512; // Just assume 512 bytes per sector
return TRUE;
}
BOOL DiskGetExtendedDriveParameters(U32 DriveNumber, PVOID Buffer, U16 BufferSize)
{
REGS RegsIn;
REGS RegsOut;
PU16 Ptr = (PU16)(BIOSCALLBUFFER);
DbgPrint((DPRINT_DISK, "DiskGetExtendedDriveParameters()\n"));
// Initialize transfer buffer
*Ptr = BufferSize;
// BIOS Int 13h, function 48h - Get drive parameters
// AH = 48h
// DL = drive (bit 7 set for hard disk)
// DS:SI = result buffer
// Return:
// CF set on error
// AH = status (07h)
// CF clear if successful
// AH = 00h
// DS:SI -> result buffer
RegsIn.b.ah = 0x48;
RegsIn.b.dl = DriveNumber;
RegsIn.x.ds = BIOSCALLBUFSEGMENT; // DS:SI -> result buffer
RegsIn.w.si = BIOSCALLBUFOFFSET;
// Get drive parameters
Int386(0x13, &RegsIn, &RegsOut);
if (!INT386_SUCCESS(RegsOut))
{
return FALSE;
}
memcpy(Buffer, Ptr, BufferSize);
return TRUE;
}
U32 DiskGetCacheableBlockCount(U32 DriveNumber)
{
GEOMETRY Geometry;
// Get the disk geometry
// If this fails then we will just return 1 sector to be safe
if (!DiskGetDriveParameters(DriveNumber, &Geometry))
{
return 1;
}
// If LBA is supported then the block size will be 64 sectors (32k)
// If not then the block size is the size of one track
if (DiskInt13ExtensionsSupported(DriveNumber))
{
return 64;
}
else
{
return Geometry.Sectors;
}
}
#endif // defined __i386__

View File

@@ -1,224 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2002 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
.text
.code16
#define ASM
#include <arch.h>
.p2align 2 /* force 4-byte alignment */
EXTERN(i386idt)
/* Exception 0 - Divide By Zero */
.word i386DivideByZero /* Offset 0 - 15 */
.word 0x0008 /* Selector */
.word 0x8e00 /* Flags, Zero Byte */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 1 - Debug Exception */
.word i386DebugException /* Offset 0 - 15 */
.word 0x0008 /* Selector */
.word 0x8e00 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 2 - NMI */
.word i386NMIException /* Offset 0 - 15 */
.word 0x0008 /* Selector */
.word 0x8e00 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 3 - Breakpoint (INT 3) */
.word i386Breakpoint /* Offset 0 - 15 */
.word 0x0008 /* Selector */
.word 0x8e00 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 4 - Overflow (INTO with EFLAGS[OF] set) */
.word i386Overflow /* Offset 0 - 15 */
.word 0x0008 /* Selector */
.word 0x8e00 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 5 - Bound Exception */
.word i386BoundException /* Offset 0 - 15 */
.word 0x0008 /* Selector */
.word 0x8e00 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 6 - Invalid Opcode */
.word i386InvalidOpcode /* Offset 0 - 15 */
.word 0x0008 /* Selector */
.word 0x8e00 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 7 - FPU Not Available */
.word i386FPUNotAvailable /* Offset 0 - 15 */
.word 0x0008 /* Selector */
.word 0x8e00 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 8 - Double Fault */
.word i386DoubleFault /* Offset 0 - 15 */
.word 0x0008 /* Selector */
.word 0x8e00 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 9 - Coprocessor Segment Overrun */
.word i386CoprocessorSegment /* Offset 0 - 15 */
.word 0x0008 /* Selector */
.word 0x8e00 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 10 (0x0A) - Invalid TSS */
.word i386InvalidTSS /* Offset 0 - 15 */
.word 0x0008 /* Selector */
.word 0x8e00 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 11 (0x0B) - Segment Not Present */
.word i386SegmentNotPresent /* Offset 0 - 15 */
.word 0x0008 /* Selector */
.word 0x8e00 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 12 (0x0C) - Stack Exception */
.word i386StackException /* Offset 0 - 15 */
.word 0x0008 /* Selector */
.word 0x8e00 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 13 (0x0D) - General Protection Fault */
.word i386GeneralProtectionFault /* Offset 0 - 15 */
.word 0x0008 /* Selector */
.word 0x8e00 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 14 (0x0E) - Page Fault */
.word i386PageFault /* Offset 0 - 15 */
.word 0x0008 /* Selector */
.word 0x8e00 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 15 (0x0F) - Reserved */
.word 0x0000 /* Offset 0 - 15 */
.word 0x0000 /* Selector */
.word 0x0000 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 16 (0x10) - Coprocessor Error */
.word i386CoprocessorError /* Offset 0 - 15 */
.word 0x0008 /* Selector */
.word 0x8e00 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 17 (0x11) - Alignment Check */
.word i386AlignmentCheck /* Offset 0 - 15 */
.word 0x0008 /* Selector */
.word 0x8e00 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 18 (0x12) - Machine Check */
.word i386MachineCheck /* Offset 0 - 15 */
.word 0x0008 /* Selector */
.word 0x8e00 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 19 (0x13) - Reserved */
.word 0x0000 /* Offset 0 - 15 */
.word 0x0000 /* Selector */
.word 0x0000 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 20 (0x14) - Reserved */
.word 0x0000 /* Offset 0 - 15 */
.word 0x0000 /* Selector */
.word 0x0000 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 21 (0x15) - Reserved */
.word 0x0000 /* Offset 0 - 15 */
.word 0x0000 /* Selector */
.word 0x0000 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 22 (0x16) - Reserved */
.word 0x0000 /* Offset 0 - 15 */
.word 0x0000 /* Selector */
.word 0x0000 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 23 (0x17) - Reserved */
.word 0x0000 /* Offset 0 - 15 */
.word 0x0000 /* Selector */
.word 0x0000 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 24 (0x18) - Reserved */
.word 0x0000 /* Offset 0 - 15 */
.word 0x0000 /* Selector */
.word 0x0000 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 25 (0x19) - Reserved */
.word 0x0000 /* Offset 0 - 15 */
.word 0x0000 /* Selector */
.word 0x0000 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 26 (0x1A) - Reserved */
.word 0x0000 /* Offset 0 - 15 */
.word 0x0000 /* Selector */
.word 0x0000 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 27 (0x1B) - Reserved */
.word 0x0000 /* Offset 0 - 15 */
.word 0x0000 /* Selector */
.word 0x0000 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 28 (0x1C) - Reserved */
.word 0x0000 /* Offset 0 - 15 */
.word 0x0000 /* Selector */
.word 0x0000 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 29 (0x1D) - Reserved */
.word 0x0000 /* Offset 0 - 15 */
.word 0x0000 /* Selector */
.word 0x0000 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 30 (0x1E) - Reserved */
.word 0x0000 /* Offset 0 - 15 */
.word 0x0000 /* Selector */
.word 0x0000 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* Exception 31 (0x1F) - Reserved */
.word 0x0000 /* Offset 0 - 15 */
.word 0x0000 /* Selector */
.word 0x0000 /* Zero byte, flags */
.word 0x0000 /* Offset 16 - 31 */
/* IDT table pointer */
EXTERN(i386idtptr)
.word (i386idtptr-i386idt) /* Limit */
.long i386idt /* Base Address */

View File

@@ -1,216 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <freeldr.h>
#include <arch.h>
#include <mm.h>
#include <debug.h>
#include <rtl.h>
#include <portio.h>
U32 GetExtendedMemorySize(VOID)
{
REGS RegsIn;
REGS RegsOut;
U32 MemorySize;
DbgPrint((DPRINT_MEMORY, "GetExtendedMemorySize()\n"));
// Int 15h AX=E801h
// Phoenix BIOS v4.0 - GET MEMORY SIZE FOR >64M CONFIGURATIONS
//
// AX = E801h
// Return:
// CF clear if successful
// AX = extended memory between 1M and 16M, in K (max 3C00h = 15MB)
// BX = extended memory above 16M, in 64K blocks
// CX = configured memory 1M to 16M, in K
// DX = configured memory above 16M, in 64K blocks
// CF set on error
RegsIn.w.ax = 0xE801;
Int386(0x15, &RegsIn, &RegsOut);
DbgPrint((DPRINT_MEMORY, "Int15h AX=E801h\n"));
DbgPrint((DPRINT_MEMORY, "AX = 0x%x\n", RegsOut.w.ax));
DbgPrint((DPRINT_MEMORY, "BX = 0x%x\n", RegsOut.w.bx));
DbgPrint((DPRINT_MEMORY, "CX = 0x%x\n", RegsOut.w.cx));
DbgPrint((DPRINT_MEMORY, "DX = 0x%x\n", RegsOut.w.dx));
DbgPrint((DPRINT_MEMORY, "CF set = %s\n\n", (RegsOut.x.eflags & I386FLAG_CF) ? "TRUE" : "FALSE"));
if (INT386_SUCCESS(RegsOut))
{
// If AX=BX=0000h the use CX and DX
if (RegsOut.w.ax == 0)
{
// Return extended memory size in K
MemorySize = RegsOut.w.dx * 64;
MemorySize += RegsOut.w.cx;
return MemorySize;
}
else
{
// Return extended memory size in K
MemorySize = RegsOut.w.bx * 64;
MemorySize += RegsOut.w.ax;
return MemorySize;
}
}
// If we get here then Int15 Func E801h didn't work
// So try Int15 Func 88h
// Int 15h AH=88h
// SYSTEM - GET EXTENDED MEMORY SIZE (286+)
//
// AH = 88h
// Return:
// CF clear if successful
// AX = number of contiguous KB starting at absolute address 100000h
// CF set on error
// AH = status
// 80h invalid command (PC,PCjr)
// 86h unsupported function (XT,PS30)
RegsIn.b.ah = 0x88;
Int386(0x15, &RegsIn, &RegsOut);
DbgPrint((DPRINT_MEMORY, "Int15h AH=88h\n"));
DbgPrint((DPRINT_MEMORY, "AX = 0x%x\n", RegsOut.w.ax));
DbgPrint((DPRINT_MEMORY, "CF set = %s\n\n", (RegsOut.x.eflags & I386FLAG_CF) ? "TRUE" : "FALSE"));
if (INT386_SUCCESS(RegsOut) && RegsOut.w.ax != 0)
{
MemorySize = RegsOut.w.ax;
return MemorySize;
}
// If we get here then Int15 Func 88h didn't work
// So try reading the CMOS
WRITE_PORT_UCHAR((PUCHAR)0x70, 0x31);
MemorySize = READ_PORT_UCHAR((PUCHAR)0x71);
MemorySize = (MemorySize & 0xFFFF);
MemorySize = (MemorySize << 8);
DbgPrint((DPRINT_MEMORY, "Int15h Failed\n"));
DbgPrint((DPRINT_MEMORY, "CMOS reports: 0x%x\n", MemorySize));
return MemorySize;
}
U32 GetConventionalMemorySize(VOID)
{
REGS Regs;
DbgPrint((DPRINT_MEMORY, "GetConventionalMemorySize()\n"));
// Int 12h
// BIOS - GET MEMORY SIZE
//
// Return:
// AX = kilobytes of contiguous memory starting at absolute address 00000h
//
// This call returns the contents of the word at 0040h:0013h;
// in PC and XT, this value is set from the switches on the motherboard
Regs.w.ax = 0;
Int386(0x12, &Regs, &Regs);
DbgPrint((DPRINT_MEMORY, "Int12h\n"));
DbgPrint((DPRINT_MEMORY, "AX = 0x%x\n\n", Regs.w.ax));
return (U32)Regs.w.ax;
}
U32 GetBiosMemoryMap(PBIOS_MEMORY_MAP BiosMemoryMap, U32 MaxMemoryMapSize)
{
REGS Regs;
U32 MapCount;
DbgPrint((DPRINT_MEMORY, "GetBiosMemoryMap()\n"));
// Int 15h AX=E820h
// Newer BIOSes - GET SYSTEM MEMORY MAP
//
// AX = E820h
// EAX = 0000E820h
// EDX = 534D4150h ('SMAP')
// EBX = continuation value or 00000000h to start at beginning of map
// ECX = size of buffer for result, in bytes (should be >= 20 bytes)
// ES:DI -> buffer for result
// Return:
// CF clear if successful
// EAX = 534D4150h ('SMAP')
// ES:DI buffer filled
// EBX = next offset from which to copy or 00000000h if all done
// ECX = actual length returned in bytes
// CF set on error
// AH = error code (86h)
Regs.x.eax = 0x0000E820;
Regs.x.edx = 0x534D4150; // ('SMAP')
Regs.x.ebx = 0x00000000;
Regs.x.ecx = sizeof(BIOS_MEMORY_MAP);
Regs.w.es = BIOSCALLBUFSEGMENT;
Regs.w.di = BIOSCALLBUFOFFSET;
for (MapCount=0; MapCount<MaxMemoryMapSize; MapCount++)
{
Int386(0x15, &Regs, &Regs);
DbgPrint((DPRINT_MEMORY, "Memory Map Entry %d\n", MapCount));
DbgPrint((DPRINT_MEMORY, "Int15h AX=E820h\n"));
DbgPrint((DPRINT_MEMORY, "EAX = 0x%x\n", Regs.x.eax));
DbgPrint((DPRINT_MEMORY, "EBX = 0x%x\n", Regs.x.ebx));
DbgPrint((DPRINT_MEMORY, "ECX = 0x%x\n", Regs.x.ecx));
DbgPrint((DPRINT_MEMORY, "CF set = %s\n", (Regs.x.eflags & I386FLAG_CF) ? "TRUE" : "FALSE"));
// If the BIOS didn't return 'SMAP' in EAX then
// it doesn't support this call
if (Regs.x.eax != 0x534D4150)
{
break;
}
// Copy data to caller's buffer
RtlCopyMemory(&BiosMemoryMap[MapCount], (PVOID)BIOSCALLBUFFER, Regs.x.ecx);
DbgPrint((DPRINT_MEMORY, "BaseAddress: 0x%x%x\n", BiosMemoryMap[MapCount].BaseAddress));
DbgPrint((DPRINT_MEMORY, "Length: 0x%x%x\n", BiosMemoryMap[MapCount].Length));
DbgPrint((DPRINT_MEMORY, "Type: 0x%x\n", BiosMemoryMap[MapCount].Type));
DbgPrint((DPRINT_MEMORY, "Reserved: 0x%x\n", BiosMemoryMap[MapCount].Reserved));
DbgPrint((DPRINT_MEMORY, "\n"));
// If the continuation value is zero or the
// carry flag is set then this was
// the last entry so we're done
if (Regs.x.ebx == 0x00000000 || !INT386_SUCCESS(Regs))
{
MapCount++;
DbgPrint((DPRINT_MEMORY, "End Of System Memory Map!\n\n"));
break;
}
// Setup the registers for the next call
Regs.x.eax = 0x0000E820;
Regs.x.edx = 0x534D4150; // ('SMAP')
//Regs.x.ebx = 0x00000001; // Continuation value already set by the BIOS
Regs.x.ecx = sizeof(BIOS_MEMORY_MAP);
Regs.w.es = BIOSCALLBUFSEGMENT;
Regs.w.di = BIOSCALLBUFOFFSET;
}
return MapCount;
}

View File

@@ -1,257 +0,0 @@
/*
* FreeLoader
* Copyright (C) 2003 Eric Kohl <ekohl@rz-online.de>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
.text
.code16
#define ASM
#include <arch.h>
/*
* U32 PnpBiosSupported(VOID);
*
* RETURNS:
*/
_pnp_bios_entry_point:
.long 0
_pnp_bios_data_segment:
.word 0
EXTERN(_PnpBiosSupported)
.code32
pushl %edi
pushl %esi
pushl %ecx
pushl %edx
xorl %edi,%edi
/* init esi */
movl $0xF0000,%esi
pnp_again:
movl (%esi),%eax
cmp $0x506E5024,%eax /* "$PnP" */
je pnp_found
cmp $0xFFFF0,%esi
je pnp_not_found
pnp_add:
addl $0x10,%esi
jmp pnp_again
pnp_found:
/* first calculate the checksum */
pushl %esi
pushl $0x21
popl %ecx
xorl %edx, %edx
pnp_loop:
lodsb
addb %al,%dl
loopl pnp_loop
testb %dl, %dl
popl %esi
jnz pnp_add
movl %esi,%edi
/* Calculate the bios entry point (far pointer) */
xorl %eax,%eax
movw 0x0F(%esi),%ax
shll $16,%eax
movw 0x0D(%esi),%ax
movl %eax,_pnp_bios_entry_point
/* Store bios data segment */
movw 0x1B(%esi),%ax
movw %ax,_pnp_bios_data_segment
pnp_not_found:
movl %edi,%eax
popl %edx
popl %ecx
popl %esi
popl %edi
ret
/*
* U32 PnpBiosGetDeviceNodeCount(U32 *NodeSize, U32 *NodeCount);
*
* RETURNS:
*/
_pnp_result:
.long 0
_pnp_node_size:
.word 0
_pnp_node_count:
.word 0
EXTERN(_PnpBiosGetDeviceNodeCount)
.code32
pushl %ebp
movl %esp,%ebp
pushal
push %es
call switch_to_real
.code16
movw _pnp_bios_data_segment,%ax
pushw %ax
pushw %cs
movw $(_pnp_node_size),%ax
pushw %ax
pushw %cs
movw $(_pnp_node_count),%ax
pushw %ax
pushw $0
lcall *_pnp_bios_entry_point
addw $12,%sp
movzwl %ax,%ecx
movl %ecx,_pnp_result
call switch_to_prot
.code32
movl 0x08(%ebp),%esi
movw _pnp_node_size,%ax
movzwl %ax,%ecx
movl %ecx, (%esi)
movl 0x0C(%ebp),%esi
movw _pnp_node_count,%ax
movzwl %ax,%ecx
movl %eax, (%esi)
pop %es
popal
movl %ebp,%esp
popl %ebp
movl _pnp_result,%eax
ret
/*
* U32 PnpBiosGetDeviceNode(U8 *NodeId, U8 *NodeBuffer);
*
* RETURNS:
*/
_pnp_buffer_segment:
.word 0
_pnp_buffer_offset:
.word 0
_pnp_node_number:
.byte 0
EXTERN(_PnpBiosGetDeviceNode)
.code32
pushl %ebp
movl %esp,%ebp
pushal
push %es
/* get current node number */
movl 0x08(%ebp),%esi
movb (%esi),%al
movb %al,_pnp_node_number
/* convert pointer to node buffer to segment/offset */
movl 0x0C(%ebp),%eax
shrl $4,%eax
andl $0xf000,%eax
movw %ax,_pnp_buffer_segment
movl 0x0C(%ebp),%eax
andl $0xffff,%eax
movw %ax,_pnp_buffer_offset
call switch_to_real
.code16
/* push bios segment */
movw _pnp_bios_data_segment,%ax
pushw %ax
/* push control flag */
pushw $0x0001
/* push pointer to node buffer (segment/offset) */
movw _pnp_buffer_segment,%ax
pushw %ax
movw _pnp_buffer_offset,%ax
pushw %ax
/* push pointer to node number (segment/offset) */
pushw %cs
movw $(_pnp_node_number),%ax
pushw %ax
/* push function number */
pushw $1
/* call entry point */
lcall *_pnp_bios_entry_point
addw $14,%sp
movzwl %ax,%ecx
movl %ecx,_pnp_result
call switch_to_prot
.code32
/* update node number */
movl 0x08(%ebp),%esi
movb _pnp_node_number,%al
movb %al,(%esi)
pop %es
popal
movl %ebp,%esp
popl %ebp
movl _pnp_result,%eax
ret
/* EOF */

View File

@@ -1,396 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <freeldr.h>
#include <arch.h>
#include <rtl.h>
#include <portio.h>
void putchar(int ch)
{
REGS Regs;
/* If we are displaying a CR '\n' then do a LF also */
if (ch == '\n')
{
/* Display the LF */
putchar('\r');
}
/* If we are displaying a TAB '\t' then display 8 spaces ' ' */
if (ch == '\t')
{
/* Display the 8 spaces ' ' */
putchar(' ');
putchar(' ');
putchar(' ');
putchar(' ');
putchar(' ');
putchar(' ');
putchar(' ');
putchar(' ');
return;
}
// Int 10h AH=0Eh
// VIDEO - TELETYPE OUTPUT
//
// AH = 0Eh
// AL = character to write
// BH = page number
// BL = foreground color (graphics modes only)
Regs.b.ah = 0x0E;
Regs.b.al = ch;
Regs.w.bx = 1;
Int386(0x10, &Regs, &Regs);
}
int kbhit(void)
{
REGS Regs;
// Int 16h AH=01h
// KEYBOARD - CHECK FOR KEYSTROKE
//
// AH = 01h
// Return:
// ZF set if no keystroke available
// ZF clear if keystroke available
// AH = BIOS scan code
// AL = ASCII character
Regs.b.ah = 0x01;
Int386(0x16, &Regs, &Regs);
if (Regs.x.eflags & I386FLAG_ZF)
{
return 0;
}
return 1;
}
int getch(void)
{
REGS Regs;
static BOOL ExtendedKey = FALSE;
static char ExtendedScanCode = 0;
// If the last time we were called an
// extended key was pressed then return
// that keys scan code.
if (ExtendedKey)
{
ExtendedKey = FALSE;
return ExtendedScanCode;
}
// Int 16h AH=00h
// KEYBOARD - GET KEYSTROKE
//
// AH = 00h
// Return:
// AH = BIOS scan code
// AL = ASCII character
Regs.b.ah = 0x00;
Int386(0x16, &Regs, &Regs);
// Check for an extended keystroke
if (Regs.b.al == 0)
{
ExtendedKey = TRUE;
ExtendedScanCode = Regs.b.ah;
}
// Return keystroke
return Regs.b.al;
}
int getyear(void)
{
REGS Regs;
U16 Digit1;
U16 Digit2;
U16 Cent1;
U16 Cent2;
U16 Year;
// Some BIOSes, such es the 1998/07/25 system ROM
// in the Compaq Deskpro EP/SB, leave CF unchanged
// if successful, so CF should be cleared before
// calling this function.
__asm__ ("clc");
// Int 1Ah AH=04h
// TIME - GET REAL-TIME CLOCK DATE (AT,XT286,PS)
//
// AH = 04h
// CF clear to avoid bug
// Return:
// CF clear if successful
// CH = century (BCD)
// CL = year (BCD)
// DH = month (BCD)
// DL = day (BCD)
// CF set on error
Regs.b.ah = 0x04;
Int386(0x1A, &Regs, &Regs);
/* Convert from BCD to normal */
Digit1 = Regs.b.cl & 0x0F;
Digit2 = ((Regs.b.cl >> 4) & 0x0F) * 10;
Cent1 = Regs.b.ch & 0x0F;
Cent2 = ((Regs.b.ch >> 4) & 0x0F) * 10;
Year = Cent1 + Cent2;
Year *= 100;
Year += Digit1 + Digit2;
return Year;
}
int getday(void)
{
REGS Regs;
U16 Digit1;
U16 Digit2;
// Some BIOSes, such es the 1998/07/25 system ROM
// in the Compaq Deskpro EP/SB, leave CF unchanged
// if successful, so CF should be cleared before
// calling this function.
__asm__ ("clc");
// Int 1Ah AH=04h
// TIME - GET REAL-TIME CLOCK DATE (AT,XT286,PS)
//
// AH = 04h
// CF clear to avoid bug
// Return:
// CF clear if successful
// CH = century (BCD)
// CL = year (BCD)
// DH = month (BCD)
// DL = day (BCD)
// CF set on error
Regs.b.ah = 0x04;
Int386(0x1A, &Regs, &Regs);
/* Convert from BCD to normal */
Digit1 = Regs.b.dl & 0x0F;
Digit2 = ((Regs.b.dl >> 4) & 0x0F) * 10;
return (Digit1 + Digit2);
}
int getmonth(void)
{
REGS Regs;
U16 Digit1;
U16 Digit2;
// Some BIOSes, such es the 1998/07/25 system ROM
// in the Compaq Deskpro EP/SB, leave CF unchanged
// if successful, so CF should be cleared before
// calling this function.
__asm__ ("clc");
// Int 1Ah AH=04h
// TIME - GET REAL-TIME CLOCK DATE (AT,XT286,PS)
//
// AH = 04h
// CF clear to avoid bug
// Return:
// CF clear if successful
// CH = century (BCD)
// CL = year (BCD)
// DH = month (BCD)
// DL = day (BCD)
// CF set on error
Regs.b.ah = 0x04;
Int386(0x1A, &Regs, &Regs);
/* Convert from BCD to normal */
Digit1 = Regs.b.dh & 0x0F;
Digit2 = ((Regs.b.dh >> 4) & 0x0F) * 10;
return (Digit1 + Digit2);
}
int gethour(void)
{
REGS Regs;
U16 Digit1;
U16 Digit2;
// Some BIOSes leave CF unchanged if successful,
// so CF should be cleared before calling this function.
__asm__ ("clc");
// Int 1Ah AH=02h
// TIME - GET REAL-TIME CLOCK TIME (AT,XT286,PS)
//
// AH = 02h
// CF clear to avoid bug
// Return:
// CF clear if successful
// CH = hour (BCD)
// CL = minutes (BCD)
// DH = seconds (BCD)
// DL = daylight savings flag (00h standard time, 01h daylight time)
// CF set on error (i.e. clock not running or in middle of update)
Regs.b.ah = 0x02;
Int386(0x1A, &Regs, &Regs);
/* Convert from BCD to normal */
Digit1 = Regs.b.ch & 0x0F;
Digit2 = ((Regs.b.ch >> 4) & 0x0F) * 10;
return (Digit1 + Digit2);
}
int getminute(void)
{
REGS Regs;
U16 Digit1;
U16 Digit2;
// Some BIOSes leave CF unchanged if successful,
// so CF should be cleared before calling this function.
__asm__ ("clc");
// Int 1Ah AH=02h
// TIME - GET REAL-TIME CLOCK TIME (AT,XT286,PS)
//
// AH = 02h
// CF clear to avoid bug
// Return:
// CF clear if successful
// CH = hour (BCD)
// CL = minutes (BCD)
// DH = seconds (BCD)
// DL = daylight savings flag (00h standard time, 01h daylight time)
// CF set on error (i.e. clock not running or in middle of update)
Regs.b.ah = 0x02;
Int386(0x1A, &Regs, &Regs);
/* Convert from BCD to normal */
Digit1 = Regs.b.cl & 0x0F;
Digit2 = ((Regs.b.cl >> 4) & 0x0F) * 10;
return (Digit1 + Digit2);
}
int getsecond(void)
{
REGS Regs;
U16 Digit1;
U16 Digit2;
// Some BIOSes leave CF unchanged if successful,
// so CF should be cleared before calling this function.
__asm__ ("clc");
// Int 1Ah AH=02h
// TIME - GET REAL-TIME CLOCK TIME (AT,XT286,PS)
//
// AH = 02h
// CF clear to avoid bug
// Return:
// CF clear if successful
// CH = hour (BCD)
// CL = minutes (BCD)
// DH = seconds (BCD)
// DL = daylight savings flag (00h standard time, 01h daylight time)
// CF set on error (i.e. clock not running or in middle of update)
Regs.b.ah = 0x02;
Int386(0x1A, &Regs, &Regs);
/* Convert from BCD to normal */
Digit1 = Regs.b.dh & 0x0F;
Digit2 = ((Regs.b.dh >> 4) & 0x0F) * 10;
return (Digit1 + Digit2);
}
void beep(void)
{
sound(700);
delay(200);
sound(0);
}
void delay(unsigned msec)
{
REGS Regs;
unsigned usec;
unsigned msec_this;
// Int 15h AH=86h
// BIOS - WAIT (AT,PS)
//
// AH = 86h
// CX:DX = interval in microseconds
// Return:
// CF clear if successful (wait interval elapsed)
// CF set on error or AH=83h wait already in progress
// AH = status (see #00496)
// Note: The resolution of the wait period is 977 microseconds on
// many systems because many BIOSes use the 1/1024 second fast
// interrupt from the AT real-time clock chip which is available on INT 70;
// because newer BIOSes may have much more precise timers available, it is
// not possible to use this function accurately for very short delays unless
// the precise behavior of the BIOS is known (or found through testing)
while (msec)
{
msec_this = msec;
if (msec_this > 4000)
{
msec_this = 4000;
}
usec = msec_this * 1000;
Regs.b.ah = 0x86;
Regs.w.cx = usec >> 16;
Regs.w.dx = usec & 0xffff;
Int386(0x15, &Regs, &Regs);
msec -= msec_this;
}
}
void sound(int freq)
{
int scale;
if (freq == 0)
{
WRITE_PORT_UCHAR((PUCHAR)0x61, READ_PORT_UCHAR((PUCHAR)0x61) & ~3);
return;
}
scale = 1193046 / freq;
WRITE_PORT_UCHAR((PUCHAR)0x43, 0xb6);
WRITE_PORT_UCHAR((PUCHAR)0x42, scale & 0xff);
WRITE_PORT_UCHAR((PUCHAR)0x42, scale >> 8);
WRITE_PORT_UCHAR((PUCHAR)0x61, READ_PORT_UCHAR((PUCHAR)0x61) | 3);
}

View File

@@ -1,931 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2002 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
.text
.code16
#define ASM
#include <arch.h>
#include <version.h>
.macro SAVE_CPU_REGS
movl %eax,i386_EAX
movl %ebx,i386_EBX
movl %ecx,i386_ECX
movl %edx,i386_EDX
movl %esp,i386_ESP
movl %ebp,i386_EBP
movl %esi,i386_ESI
movl %edi,i386_EDI
movw %ds,%ax
movw %ax,i386_DS
movw %es,%ax
movw %ax,i386_ES
movw %fs,%ax
movw %ax,i386_FS
movw %gs,%ax
movw %ax,i386_GS
movw %ss,%ax
movw %ax,i386_SS
popl %eax
movl %eax,i386_EIP
popl %eax
movw %ax,i386_CS
popl %eax
movl %eax,i386_EFLAGS
movl %cr0,%eax
movl %eax,i386_CR0
//movl %cr1,%eax
//movl %eax,i386_CR1
movl %cr2,%eax
movl %eax,i386_CR2
movl %cr3,%eax
movl %eax,i386_CR3
movl %dr0,%eax
movl %eax,i386_DR0
movl %dr1,%eax
movl %eax,i386_DR1
movl %dr2,%eax
movl %eax,i386_DR2
movl %dr3,%eax
movl %eax,i386_DR3
movl %dr6,%eax
movl %eax,i386_DR6
movl %dr7,%eax
movl %eax,i386_DR7
sgdt i386_GDTR
sidt i386_IDTR
sldt i386_LDTR
str i386_TR
.endm
i386ExceptionHandlerText:
.ascii "FreeLoader i386 Exception Handler\n"
.ascii VERSION
.ascii "\n"
// .asciz "Report bugs to Brian Palmer <brianp@reactos.org>\n\n"
.asciz "Report bugs to ReactOS Kernel mailing list <ros-kernel@reactos.com>\n\n"
i386DivideByZeroText:
.asciz "Exception 00: DIVIDE BY ZERO\n\n"
i386DebugExceptionText:
.asciz "Exception 01: DEBUG EXCEPTION\n\n"
i386NMIExceptionText:
.asciz "Exception 02: NON-MASKABLE INTERRUPT EXCEPTION\n\n"
i386BreakpointText:
.asciz "Exception 03: BREAKPOINT (INT 3)\n\n"
i386OverflowText:
.asciz "Exception 04: OVERFLOW\n\n"
i386BoundExceptionText:
.asciz "Exception 05: BOUND EXCEPTION\n\n"
i386InvalidOpcodeText:
.asciz "Exception 06: INVALID OPCODE\n\n"
i386FPUNotAvailableText:
.asciz "Exception 07: FPU NOT AVAILABLE\n\n"
i386DoubleFaultText:
.asciz "Exception 08: DOUBLE FAULT\n\n"
i386CoprocessorSegmentText:
.asciz "Exception 09: COPROCESSOR SEGMENT OVERRUN\n\n"
i386InvalidTSSText:
.asciz "Exception 0A: INVALID TSS\n\n"
i386SegmentNotPresentText:
.asciz "Exception 0B: SEGMENT NOT PRESENT\n\n"
i386StackExceptionText:
.asciz "Exception 0C: STACK EXCEPTION\n\n"
i386GeneralProtectionFaultText:
.asciz "Exception 0D: GENERAL PROTECTION FAULT\n\n"
i386PageFaultText:
.asciz "Exception 0E: PAGE FAULT\n\n"
i386CoprocessorErrorText:
.asciz "Exception 10: COPROCESSOR ERROR\n\n"
i386AlignmentCheckText:
.asciz "Exception 11: ALIGNMENT CHECK\n\n"
i386MachineCheckText:
.asciz "Exception 12: MACHINE CHECK\n\n"
i386_EAX_Text:
.asciz "EAX: "
i386_EBX_Text:
.asciz "EBX: "
i386_ECX_Text:
.asciz "ECX: "
i386_EDX_Text:
.asciz "EDX: "
i386_ESP_Text:
.asciz " ESP: "
i386_EBP_Text:
.asciz " EBP: "
i386_ESI_Text:
.asciz " ESI: "
i386_EDI_Text:
.asciz " EDI: "
i386_CS_Text:
.asciz "CS: "
i386_DS_Text:
.asciz "DS: "
i386_ES_Text:
.asciz "ES: "
i386_FS_Text:
.asciz "FS: "
i386_GS_Text:
.asciz "GS: "
i386_SS_Text:
.asciz "SS: "
i386_EFLAGS_Text:
.asciz " EFLAGS: "
i386_EIP_Text:
.asciz " EIP: "
i386_ERROR_CODE_Text:
.asciz " ERROR CODE: "
i386_CR0_Text:
.asciz " CR0: "
i386_CR1_Text:
.asciz " CR1: "
i386_CR2_Text:
.asciz " CR2: "
i386_CR3_Text:
.asciz " CR3: "
i386_DR0_Text:
.asciz " DR0: "
i386_DR1_Text:
.asciz " DR1: "
i386_DR2_Text:
.asciz " DR2: "
i386_DR3_Text:
.asciz " DR3: "
i386_DR6_Text:
.asciz " DR6: "
i386_DR7_Text:
.asciz " DR7: "
i386_GDTR_Text:
.asciz " GDTR Base: "
i386_IDTR_Text:
.asciz " IDTR Base: "
i386_Limit_Text:
.asciz " Limit: "
i386_LDTR_Text:
.asciz " LDTR: "
i386_TR_Text:
.asciz " TR: "
/* Set by each exception handler to the address of the description text */
i386ExceptionDescriptionText:
.long 0
/* Used to store the contents of all the registers when an exception occurs */
i386_EAX:
.long 0
i386_EBX:
.long 0
i386_ECX:
.long 0
i386_EDX:
.long 0
i386_ESP:
.long 0
i386_EBP:
.long 0
i386_ESI:
.long 0
i386_EDI:
.long 0
i386_CS:
.word 0
i386_DS:
.word 0
i386_ES:
.word 0
i386_FS:
.word 0
i386_GS:
.word 0
i386_SS:
.word 0
i386_EFLAGS:
.long 0
i386_EIP:
.long 0
i386_ERROR_CODE:
.long 0
i386_CR0:
.long 0
i386_CR1:
.long 0
i386_CR2:
.long 0
i386_CR3:
.long 0
i386_DR0:
.long 0
i386_DR1:
.long 0
i386_DR2:
.long 0
i386_DR3:
.long 0
i386_DR6:
.long 0
i386_DR7:
.long 0
i386_GDTR:
.word 0
.long 0
i386_IDTR:
.word 0
.long 0
i386_LDTR:
.word 0
i386_TR:
.word 0
/* Used to store the current X and Y position on the screen */
i386_ScreenPosX:
.long 0
i386_ScreenPosY:
.long 0
/************************************************************************/
i386CommonExceptionHandler:
.code32
SAVE_CPU_REGS
call i386ClearScreenToBlue
movl $i386ExceptionHandlerText,%esi
call i386PrintText
movl i386ExceptionDescriptionText,%esi
call i386PrintText
movl $i386_EAX_Text,%esi
call i386PrintText
movl i386_EAX,%eax
call i386PrintHexDword // Display EAX
movl $i386_ESP_Text,%esi
call i386PrintText
movl i386_ESP,%eax
call i386PrintHexDword // Display ESP
movl $i386_CR0_Text,%esi
call i386PrintText
movl i386_CR0,%eax
call i386PrintHexDword // Display CR0
movl $i386_DR0_Text,%esi
call i386PrintText
movl i386_DR0,%eax
call i386PrintHexDword // Display DR0
movl $0,i386_ScreenPosX
incl i386_ScreenPosY
movl $i386_EBX_Text,%esi
call i386PrintText
movl i386_EBX,%eax
call i386PrintHexDword // Display EBX
movl $i386_EBP_Text,%esi
call i386PrintText
movl i386_EBP,%eax
call i386PrintHexDword // Display EBP
movl $i386_CR1_Text,%esi
call i386PrintText
movl i386_CR1,%eax
call i386PrintHexDword // Display CR1
movl $i386_DR1_Text,%esi
call i386PrintText
movl i386_DR1,%eax
call i386PrintHexDword // Display DR1
movl $0,i386_ScreenPosX
incl i386_ScreenPosY
movl $i386_ECX_Text,%esi
call i386PrintText
movl i386_ECX,%eax
call i386PrintHexDword // Display ECX
movl $i386_ESI_Text,%esi
call i386PrintText
movl i386_ESI,%eax
call i386PrintHexDword // Display ESI
movl $i386_CR2_Text,%esi
call i386PrintText
movl i386_CR2,%eax
call i386PrintHexDword // Display CR2
movl $i386_DR2_Text,%esi
call i386PrintText
movl i386_DR2,%eax
call i386PrintHexDword // Display DR2
movl $0,i386_ScreenPosX
incl i386_ScreenPosY
movl $i386_EDX_Text,%esi
call i386PrintText
movl i386_EDX,%eax
call i386PrintHexDword // Display EDX
movl $i386_EDI_Text,%esi
call i386PrintText
movl i386_EDI,%eax
call i386PrintHexDword // Display EDI
movl $i386_CR3_Text,%esi
call i386PrintText
movl i386_CR3,%eax
call i386PrintHexDword // Display CR3
movl $i386_DR3_Text,%esi
call i386PrintText
movl i386_DR3,%eax
call i386PrintHexDword // Display DR3
incl i386_ScreenPosY
movl $55,i386_ScreenPosX
movl $i386_DR6_Text,%esi
call i386PrintText
movl i386_DR6,%eax
call i386PrintHexDword // Display DR6
incl i386_ScreenPosY
movl $55,i386_ScreenPosX
movl $i386_DR7_Text,%esi
call i386PrintText
movl i386_DR7,%eax
call i386PrintHexDword // Display DR7
movl $0,i386_ScreenPosX
incl i386_ScreenPosY
incl i386_ScreenPosY
movl $i386_CS_Text,%esi
call i386PrintText
movw i386_CS,%ax
call i386PrintHexWord // Display CS
movl $i386_EIP_Text,%esi
call i386PrintText
movl i386_EIP,%eax
call i386PrintHexDword // Display EIP
movl $0,i386_ScreenPosX
incl i386_ScreenPosY
movl $i386_DS_Text,%esi
call i386PrintText
movw i386_DS,%ax
call i386PrintHexWord // Display DS
movl $i386_ERROR_CODE_Text,%esi
call i386PrintText
movl i386_ERROR_CODE,%eax
call i386PrintHexDword // Display ERROR CODE
movl $0,i386_ScreenPosX
incl i386_ScreenPosY
movl $i386_ES_Text,%esi
call i386PrintText
movw i386_ES,%ax
call i386PrintHexWord // Display ES
movl $i386_EFLAGS_Text,%esi
call i386PrintText
movl i386_EFLAGS,%eax
call i386PrintHexDword // Display EFLAGS
movl $0,i386_ScreenPosX
incl i386_ScreenPosY
movl $i386_FS_Text,%esi
call i386PrintText
movw i386_FS,%ax
call i386PrintHexWord // Display FS
movl $i386_GDTR_Text,%esi
call i386PrintText
movl i386_GDTR+2,%eax
call i386PrintHexDword // Display GDTR Base
movl $i386_Limit_Text,%esi
call i386PrintText
movw i386_GDTR,%ax
call i386PrintHexWord // Display GDTR Limit
movl $0,i386_ScreenPosX
incl i386_ScreenPosY
movl $i386_GS_Text,%esi
call i386PrintText
movw i386_GS,%ax
call i386PrintHexWord // Display GS
movl $i386_IDTR_Text,%esi
call i386PrintText
movl i386_IDTR+2,%eax
call i386PrintHexDword // Display IDTR Base
movl $i386_Limit_Text,%esi
call i386PrintText
movw i386_IDTR,%ax
call i386PrintHexWord // Display IDTR Limit
movl $0,i386_ScreenPosX
incl i386_ScreenPosY
movl $i386_SS_Text,%esi
call i386PrintText
movw i386_SS,%ax
call i386PrintHexWord // Display SS
movl $i386_LDTR_Text,%esi
call i386PrintText
movw i386_LDTR,%ax
call i386PrintHexWord // Display LDTR
movl $i386_TR_Text,%esi
call i386PrintText
movw i386_TR,%ax
call i386PrintHexWord // Display TR
movl $0,i386_ScreenPosX
incl i386_ScreenPosY
incl i386_ScreenPosY
i386ExceptionHandlerHang:
jmp i386ExceptionHandlerHang
iret
/************************************************************************/
i386ClearScreenToBlue:
.code32
cld
movw $0x1F20,%ax
movl $0xB0000,%edi
movl $0x8000,%ecx
rep stosw
ret
/************************************************************************/
/* ESI = Address of text to display */
/************************************************************************/
i386PrintText:
.code32
i386PrintTextLoop:
lodsb
// Check for end of string char
cmp $0,%al
je i386PrintTextDone
// Check for newline char
cmp $0x0a,%al
jne i386PrintTextLoop2
incl i386_ScreenPosY
movl $0,i386_ScreenPosX
jmp i386PrintTextLoop
i386PrintTextLoop2:
call i386PrintTextCalcAddressOfNextChar
stosb
incl i386_ScreenPosX
jmp i386PrintTextLoop
i386PrintTextDone:
ret
/************************************************************************/
/* On return EDI = Address of next char in screen memory */
/************************************************************************/
i386PrintTextCalcAddressOfNextChar:
.code32
push %eax
movl $0xB8000,%edi
addl i386_ScreenPosX,%edi
addl i386_ScreenPosX,%edi
movl i386_ScreenPosY,%eax
movl $160,%ecx // 80 columns, 2 bytes per column
mull %ecx
addl %eax,%edi
pop %eax
ret
/************************************************************************/
/* Prints the value in EAX on the screen in hex */
/************************************************************************/
i386PrintHexDword:
.code32
call i386PrintHex1
i386PrintHex1:
call i386PrintHex2
i386PrintHex2:
call i386PrintHex3
i386PrintHex3:
movb $4,%cl
rol %cl,%eax
push %eax
andb $0x0f,%al
movl $i386PrintHexTable,%ebx
xlat /*$i386PrintHexTable*/
call i386PrintTextCalcAddressOfNextChar
stosb
incl i386_ScreenPosX
pop %eax
ret
i386PrintHexTable:
.ascii "0123456789ABCDEF"
/************************************************************************/
/* Prints the value in AX on the screen in hex */
/************************************************************************/
i386PrintHexWord:
.code32
call i386PrintHexWord1
i386PrintHexWord1:
call i386PrintHexWord2
i386PrintHexWord2:
movb $4,%cl
rol %cl,%ax
push %eax
andb $0x0f,%al
movl $i386PrintHexTable,%ebx
xlat /*$i386PrintHexTable*/
call i386PrintTextCalcAddressOfNextChar
stosb
incl i386_ScreenPosX
pop %eax
ret
/************************************************************************/
/* Prints the value in AL on the screen in hex */
/************************************************************************/
i386PrintHexByte:
.code32
call i386PrintHexByte1
i386PrintHexByte1:
movb $4,%cl
rol %cl,%al
push %eax
andb $0x0f,%al
movl $i386PrintHexTable,%ebx
xlat /*$i386PrintHexTable*/
call i386PrintTextCalcAddressOfNextChar
stosb
incl i386_ScreenPosX
pop %eax
ret
/************************************************************************/
EXTERN(i386DivideByZero)
.code32
movl $i386DivideByZeroText,i386ExceptionDescriptionText
jmp i386CommonExceptionHandler
/************************************************************************/
EXTERN(i386DebugException)
.code32
movl $i386DebugExceptionText,i386ExceptionDescriptionText
jmp i386CommonExceptionHandler
/************************************************************************/
EXTERN(i386NMIException)
.code32
movl $i386NMIExceptionText,i386ExceptionDescriptionText
jmp i386CommonExceptionHandler
/************************************************************************/
EXTERN(i386Breakpoint)
.code32
movl $i386BreakpointText,i386ExceptionDescriptionText
jmp i386CommonExceptionHandler
/************************************************************************/
EXTERN(i386Overflow)
.code32
movl $i386OverflowText,i386ExceptionDescriptionText
jmp i386CommonExceptionHandler
/************************************************************************/
EXTERN(i386BoundException)
.code32
movl $i386BoundExceptionText,i386ExceptionDescriptionText
jmp i386CommonExceptionHandler
/************************************************************************/
EXTERN(i386InvalidOpcode)
.code32
movl $i386InvalidOpcodeText,i386ExceptionDescriptionText
jmp i386CommonExceptionHandler
/************************************************************************/
EXTERN(i386FPUNotAvailable)
.code32
movl $i386FPUNotAvailableText,i386ExceptionDescriptionText
jmp i386CommonExceptionHandler
/************************************************************************/
EXTERN(i386DoubleFault)
.code32
popl %eax
movl %eax,i386_ERROR_CODE
movl $i386DoubleFaultText,i386ExceptionDescriptionText
jmp i386CommonExceptionHandler
/************************************************************************/
EXTERN(i386CoprocessorSegment)
.code32
movl $i386CoprocessorSegmentText,i386ExceptionDescriptionText
jmp i386CommonExceptionHandler
/************************************************************************/
EXTERN(i386InvalidTSS)
.code32
popl %eax
movl %eax,i386_ERROR_CODE
movl $i386InvalidTSSText,i386ExceptionDescriptionText
jmp i386CommonExceptionHandler
/************************************************************************/
EXTERN(i386SegmentNotPresent)
.code32
popl %eax
movl %eax,i386_ERROR_CODE
movl $i386SegmentNotPresentText,i386ExceptionDescriptionText
jmp i386CommonExceptionHandler
/************************************************************************/
EXTERN(i386StackException)
.code32
popl %eax
movl %eax,i386_ERROR_CODE
movl $i386StackExceptionText,i386ExceptionDescriptionText
jmp i386CommonExceptionHandler
/************************************************************************/
EXTERN(i386GeneralProtectionFault)
.code32
popl %eax
movl %eax,i386_ERROR_CODE
movl $i386GeneralProtectionFaultText,i386ExceptionDescriptionText
jmp i386CommonExceptionHandler
/************************************************************************/
EXTERN(i386PageFault)
.code32
popl %eax
movl %eax,i386_ERROR_CODE
movl $i386PageFaultText,i386ExceptionDescriptionText
jmp i386CommonExceptionHandler
/************************************************************************/
EXTERN(i386CoprocessorError)
.code32
movl $i386CoprocessorErrorText,i386ExceptionDescriptionText
jmp i386CommonExceptionHandler
/************************************************************************/
EXTERN(i386AlignmentCheck)
.code32
movl $i386AlignmentCheckText,i386ExceptionDescriptionText
jmp i386CommonExceptionHandler
/************************************************************************/
EXTERN(i386MachineCheck)
.code32
movl $i386MachineCheckText,i386ExceptionDescriptionText
jmp i386CommonExceptionHandler
/************************************************************************
* DEBUGGING SUPPORT FUNCTIONS
************************************************************************/
EXTERN(_INSTRUCTION_BREAKPOINT1)
.code32
pushl %eax
movl 8(%esp),%eax
movl %eax,%dr0
movl %dr7,%eax
andl $0xfff0ffff,%eax
orl $0x00000303,%eax
movl %eax,%dr7
popl %eax
ret
EXTERN(_MEMORY_READWRITE_BREAKPOINT1)
.code32
pushl %eax
movl 8(%esp),%eax
movl %eax,%dr0
movl %dr7,%eax
andl $0xfff0ffff,%eax
orl $0x00030303,%eax
movl %eax,%dr7
popl %eax
ret
EXTERN(_MEMORY_WRITE_BREAKPOINT1)
.code32
pushl %eax
movl 8(%esp),%eax
movl %eax,%dr0
movl %dr7,%eax
andl $0xfff0ffff,%eax
orl $0x00010303,%eax
movl %eax,%dr7
popl %eax
ret
EXTERN(_INSTRUCTION_BREAKPOINT2)
.code32
pushl %eax
movl 8(%esp),%eax
movl %eax,%dr1
movl %dr7,%eax
andl $0xff0fffff,%eax
orl $0x0000030c,%eax
movl %eax,%dr7
popl %eax
ret
EXTERN(_MEMORY_READWRITE_BREAKPOINT2)
.code32
pushl %eax
movl 8(%esp),%eax
movl %eax,%dr1
movl %dr7,%eax
andl $0xff0fffff,%eax
orl $0x0030030c,%eax
movl %eax,%dr7
popl %eax
ret
EXTERN(_MEMORY_WRITE_BREAKPOINT2)
.code32
pushl %eax
movl 8(%esp),%eax
movl %eax,%dr1
movl %dr7,%eax
andl $0xff0fffff,%eax
orl $0x0010030c,%eax
movl %eax,%dr7
popl %eax
ret
EXTERN(_INSTRUCTION_BREAKPOINT3)
.code32
pushl %eax
movl 8(%esp),%eax
movl %eax,%dr2
movl %dr7,%eax
andl $0xf0ffffff,%eax
orl $0x00000330,%eax
movl %eax,%dr7
popl %eax
ret
EXTERN(_MEMORY_READWRITE_BREAKPOINT3)
.code32
pushl %eax
movl 8(%esp),%eax
movl %eax,%dr2
movl %dr7,%eax
andl $0xf0ffffff,%eax
orl $0x03000330,%eax
movl %eax,%dr7
popl %eax
ret
EXTERN(_MEMORY_WRITE_BREAKPOINT3)
.code32
pushl %eax
movl 8(%esp),%eax
movl %eax,%dr2
movl %dr7,%eax
andl $0xf0ffffff,%eax
orl $0x01000330,%eax
movl %eax,%dr7
popl %eax
ret
EXTERN(_INSTRUCTION_BREAKPOINT4)
.code32
pushl %eax
movl 8(%esp),%eax
movl %eax,%dr3
movl %dr7,%eax
andl $0x0fffffff,%eax
orl $0x000003c0,%eax
movl %eax,%dr7
popl %eax
ret
EXTERN(_MEMORY_READWRITE_BREAKPOINT4)
.code32
pushl %eax
movl 8(%esp),%eax
movl %eax,%dr3
movl %dr7,%eax
andl $0x0fffffff,%eax
orl $0x300003c0,%eax
movl %eax,%dr7
popl %eax
ret
EXTERN(_MEMORY_WRITE_BREAKPOINT4)
.code32
pushl %eax
movl 8(%esp),%eax
movl %eax,%dr3
movl %dr7,%eax
andl $0x0fffffff,%eax
orl $0x100003c0,%eax
movl %eax,%dr7
popl %eax
ret

View File

@@ -1,807 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
* Portions from Linux video.S - Display adapter & video mode setup, version 2.13 (14-May-99)
* Copyright (C) 1995 -- 1999 Martin Mares <mj@ucw.cz>
* Based on the original setup.S code (C) Linus Torvalds and Mats Anderson
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <freeldr.h>
#include <arch.h>
#include <video.h>
#include <portio.h>
#include <rtl.h>
#include <debug.h>
typedef struct
{
U8 Signature[4]; // (ret) signature ("VESA")
// (call) VESA 2.0 request signature ("VBE2"), required to receive
// version 2.0 info
U16 VesaVersion; // VESA version number (one-digit minor version -- 0102h = v1.2)
U32 OemNamePtr; // pointer to OEM name
// "761295520" for ATI
U32 Capabilities; // capabilities flags (see #00078)
U32 SupportedModeListPtr; // pointer to list of supported VESA and OEM video modes
// (list of words terminated with FFFFh)
U16 TotalVideoMemory; // total amount of video memory in 64K blocks
// ---VBE v1.x ---
//U8 Reserved[236];
// ---VBE v2.0 ---
U16 OemSoftwareVersion; // OEM software version (BCD, high byte = major, low byte = minor)
U32 VendorNamePtr; // pointer to vendor name
U32 ProductNamePtr; // pointer to product name
U32 ProductRevisionStringPtr; // pointer to product revision string
U16 VBE_AF_Version; // (if capabilities bit 3 set) VBE/AF version (BCD)
// 0100h for v1.0P
U32 AcceleratedModeListPtr; // (if capabilities bit 3 set) pointer to list of supported
// accelerated video modes (list of words terminated with FFFFh)
U8 Reserved[216]; // reserved for VBE implementation
U8 ScratchPad[256]; // OEM scratchpad (for OEM strings, etc.)
} PACKED VESA_SVGA_INFO, *PVESA_SVGA_INFO;
// Bitfields for VESA capabilities:
//
// Bit(s) Description (Table 00078)
// 0 DAC can be switched into 8-bit mode
// 1 non-VGA controller
// 2 programmed DAC with blank bit (i.e. only during blanking interval)
// 3 (VBE v3.0) controller supports hardware stereoscopic signalling
// 3 controller supports VBE/AF v1.0P extensions
// 4 (VBE v3.0) if bit 3 set:
// =0 stereo signalling via external VESA stereo connector
// =1 stereo signalling via VESA EVC connector
// 4 (VBE/AF v1.0P) must call EnableDirectAccess to access framebuffer
// 5 (VBE/AF v1.0P) controller supports hardware mouse cursor
// 6 (VBE/AF v1.0P) controller supports hardware clipping
// 7 (VBE/AF v1.0P) controller supports transparent BitBLT
// 8-31 reserved (0)
// Notes: The list of supported video modes is stored in the reserved
// portion of the SuperVGA information record by some implementations,
// and it may thus be necessary to either copy the mode list or use a
// different buffer for all subsequent VESA calls. Not all of the video
// modes in the list of mode numbers may be supported, e.g. if they require
// more memory than currently installed or are not supported by the
// attached monitor. Check any mode you intend to use through AX=4F01h first..
// The 1.1 VESA document specifies 242 reserved bytes at the end, so the
// buffer should be 262 bytes to ensure that it is not overrun; for v2.0,
// the buffer should be 512 bytes. The S3 specific video modes will most
// likely follow the FFFFh terminator at the end of the standard modes.
// A search must then be made to find them, FFFFh will also terminate this
// second list. In some cases, only a "stub" VBE may be present, supporting
// only AX=4F00h; this case may be assumed if the list of supported video modes
// is empty (consisting of a single word of FFFFh)
VOID BiosSetVideoMode(U32 VideoMode)
{
REGS Regs;
// Int 10h AH=00h
// VIDEO - SET VIDEO MODE
//
// AH = 00h
// AL = desired video mode
// Return:
// AL = video mode flag (Phoenix, AMI BIOS)
// 20h mode > 7
// 30h modes 0-5 and 7
// 3Fh mode 6
// AL = CRT controller mode byte (Phoenix 386 BIOS v1.10)
Regs.b.ah = 0x00;
Regs.b.al = VideoMode;
Int386(0x10, &Regs, &Regs);
}
VOID BiosSetVideoFont8x8(VOID)
{
REGS Regs;
// Int 10h AX=1112h
// VIDEO - TEXT-MODE CHARGEN - LOAD ROM 8x8 DBL-DOT PATTERNS (PS,EGA,VGA)
//
// AX = 1112h
// BL = block to load
// Return:
// Nothing
Regs.w.ax = 0x1112;
Regs.b.bl = 0x00;
Int386(0x10, &Regs, &Regs);
}
VOID BiosSetVideoFont8x14(VOID)
{
REGS Regs;
// Int 10h AX=1111h
// VIDEO - TEXT-MODE CHARGEN - LOAD ROM MONOCHROME PATTERNS (PS,EGA,VGA)
//
// AX = 1111h
// BL = block to load
// Return:
// Nothing
Regs.w.ax = 0x1111;
Regs.b.bl = 0;
Int386(0x10, &Regs, &Regs);
}
VOID BiosSetVideoFont8x16(VOID)
{
REGS Regs;
// Int 10h AX=1114h
// VIDEO - TEXT-MODE CHARGEN - LOAD ROM 8x16 CHARACTER SET (VGA)
//
// AX = 1114h
// BL = block to load
// Return:
// Nothing
Regs.w.ax = 0x1114;
Regs.b.bl = 0;
Int386(0x10, &Regs, &Regs);
}
VOID BiosSelectAlternatePrintScreen(VOID)
{
REGS Regs;
// Int 10h AH=12h BL=20h
// VIDEO - ALTERNATE FUNCTION SELECT (PS,EGA,VGA,MCGA) - ALTERNATE PRTSC
//
// AH = 12h
// BL = 20h select alternate print screen routine
// Return:
// Nothing
//
// Installs a PrtSc routine from the video card's BIOS to replace the
// default PrtSc handler from the ROM BIOS, which usually does not
// understand screen heights other than 25 lines.
//
// Some adapters disable print-screen instead of enhancing it.
Regs.b.ah = 0x12;
Regs.b.bl = 0x20;
Int386(0x10, &Regs, &Regs);
}
VOID BiosDisableCursorEmulation(VOID)
{
REGS Regs;
// Int 10h AH=12h BL=34h
// VIDEO - ALTERNATE FUNCTION SELECT (VGA) - CURSOR EMULATION
//
// AH = 12h
// BL = 34h
// AL = new state
// 00h enable alphanumeric cursor emulation
// 01h disable alphanumeric cursor emulation
// Return:
// AL = 12h if function supported
//
// Specify whether the BIOS should automatically remap cursor start/end
// according to the current character height in text modes.
Regs.b.ah = 0x12;
Regs.b.bl = 0x34;
Regs.b.al = 0x01;
Int386(0x10, &Regs, &Regs);
}
VOID BiosDefineCursor(U32 StartScanLine, U32 EndScanLine)
{
REGS Regs;
// Int 10h AH=01h
// VIDEO - SET TEXT-MODE CURSOR SHAPE
//
// AH = 01h
// CH = cursor start and options
// CL = bottom scan line containing cursor (bits 0-4)
// Return:
// Nothing
//
// Specify the starting and ending scan lines to be occupied
// by the hardware cursor in text modes.
//
// AMI 386 BIOS and AST Premier 386 BIOS will lock up the
// system if AL is not equal to the current video mode.
//
// Bitfields for cursor start and options:
//
// Bit(s) Description
// 7 should be zero
// 6,5 cursor blink
// (00=normal, 01=invisible, 10=erratic, 11=slow).
// (00=normal, other=invisible on EGA/VGA)
// 4-0 topmost scan line containing cursor
Regs.b.ah = 0x01;
Regs.b.al = 0x03;
Regs.b.ch = StartScanLine;
Regs.b.cl = EndScanLine;
Int386(0x10, &Regs, &Regs);
}
U32 BiosDetectVideoCard(VOID)
{
REGS Regs;
// Int 10h AH=12h BL=10h
// VIDEO - ALTERNATE FUNCTION SELECT (PS,EGA,VGA,MCGA) - GET EGA INFO
//
// AH = 12h
// BL = 10h
// Return:
// BH = video state
// 00h color mode in effect (I/O port 3Dxh)
// 01h mono mode in effect (I/O port 3Bxh)
// BL = installed memory (00h = 64K, 01h = 128K, 02h = 192K, 03h = 256K)
// CH = feature connector bits
// CL = switch settings
// AH destroyed (at least by Tseng ET4000 BIOS v8.00n)
//
// Installation check;EGA
Regs.b.ah = 0x12;
Regs.b.bl = 0x10;
Int386(0x10, &Regs, &Regs);
// If BL is still equal to 0x10 then there is no EGA/VGA present
if (Regs.b.bl == 0x10)
{
return VIDEOCARD_CGA_OR_OTHER;
}
// Int 10h AX=1A00h
// VIDEO - GET DISPLAY COMBINATION CODE (PS,VGA/MCGA)
//
// AX = 1A00h
// Return:
// AL = 1Ah if function was supported
// BL = active display code
// BH = alternate display code
//
// This function is commonly used to check for the presence of a VGA.
//
// Installation check;VGA
//
// Values for display combination code:
// 00h no display
// 01h monochrome adapter w/ monochrome display
// 02h CGA w/ color display
// 03h reserved
// 04h EGA w/ color display
// 05h EGA w/ monochrome display
// 06h PGA w/ color display
// 07h VGA w/ monochrome analog display
// 08h VGA w/ color analog display
// 09h reserved
// 0Ah MCGA w/ digital color display
// 0Bh MCGA w/ monochrome analog display
// 0Ch MCGA w/ color analog display
// FFh unknown display type
Regs.b.ah = 0x12;
Regs.b.bl = 0x10;
Int386(0x10, &Regs, &Regs);
if (Regs.b.al == 0x1A)
{
return VIDEOCARD_VGA;
}
else
{
return VIDEOCARD_EGA;
}
}
VOID BiosSetVerticalResolution(U32 ScanLines)
{
REGS Regs;
// Int 10h AH=12h BL=30h
// VIDEO - ALTERNATE FUNCTION SELECT (VGA) - SELECT VERTICAL RESOLUTION
//
// AH = 12h
// BL = 30h
// AL = vertical resolution
// 00h 200 scan lines
// 01h 350 scan lines
// 02h 400 scan lines
// Return:
// AL = 12h if function supported
//
// Specifiy the number of scan lines used to display text modes.
//
// The specified resolution will take effect on the next mode set.
Regs.b.ah = 0x12;
Regs.b.bl = 0x30;
Regs.b.al = ScanLines;
Int386(0x10, &Regs, &Regs);
}
VOID BiosSet480ScanLines(VOID)
{
int CRTC;
// Read CRTC port
CRTC = READ_PORT_UCHAR((PUCHAR)0x03CC);
if (CRTC & 1)
{
CRTC = 0x3D4;
}
else
{
CRTC = 0x3B4;
}
// Vertical sync end (also unlocks CR0-7)
WRITE_PORT_UCHAR((PUCHAR)CRTC, 0x11);
WRITE_PORT_UCHAR((PUCHAR)CRTC+1, 0x0C);
// Vertical total
WRITE_PORT_UCHAR((PUCHAR)CRTC, 0x06);
WRITE_PORT_UCHAR((PUCHAR)CRTC+1, 0x0B);
// (vertical) overflow
WRITE_PORT_UCHAR((PUCHAR)CRTC, 0x07);
WRITE_PORT_UCHAR((PUCHAR)CRTC+1, 0x3E);
// Vertical sync start
WRITE_PORT_UCHAR((PUCHAR)CRTC, 0x10);
WRITE_PORT_UCHAR((PUCHAR)CRTC+1, 0xEA);
// Vertical display end
WRITE_PORT_UCHAR((PUCHAR)CRTC, 0x12);
WRITE_PORT_UCHAR((PUCHAR)CRTC+1, 0xDF);
// Vertical blank start
WRITE_PORT_UCHAR((PUCHAR)CRTC, 0x15);
WRITE_PORT_UCHAR((PUCHAR)CRTC+1, 0xE7);
// Vertical blank end
WRITE_PORT_UCHAR((PUCHAR)CRTC, 0x16);
WRITE_PORT_UCHAR((PUCHAR)CRTC+1, 0x04);
// Misc output register (read)
CRTC = READ_PORT_UCHAR((PUCHAR)0x03CC);
// Preserve clock select bits and color bit
CRTC = (CRTC & 0x0D);
// Set correct sync polarity
CRTC = (CRTC | 0xE2);
// (write)
WRITE_PORT_UCHAR((PUCHAR)0x03C2, CRTC);
}
VOID BiosSetVideoDisplayEnd(VOID)
{
int CRTC;
// Read CRTC port
CRTC = READ_PORT_UCHAR((PUCHAR)0x03CC);
if (CRTC & 1)
{
CRTC = 0x3D4;
}
else
{
CRTC = 0x3B4;
}
// Vertical display end
WRITE_PORT_UCHAR((PUCHAR)CRTC, 0x12);
WRITE_PORT_UCHAR((PUCHAR)CRTC+1, 0xDF);
}
VOID VideoSetTextCursorPosition(U32 X, U32 Y)
{
REGS Regs;
// Int 10h AH=02h
// VIDEO - SET CURSOR POSITION
//
// AH = 02h
// BH = page number
// 0-3 in modes 2&3
// 0-7 in modes 0&1
// 0 in graphics modes
// DH = row (00h is top)
// DL = column (00h is left)
// Return:
// Nothing
Regs.b.ah = 0x02;
Regs.b.bh = 0x00;
Regs.b.dh = Y;
Regs.b.dl = X;
Int386(0x10, &Regs, &Regs);
}
VOID VideoHideTextCursor(VOID)
{
BiosDefineCursor(0x20, 0x00);
}
VOID VideoShowTextCursor(VOID)
{
BiosDefineCursor(0x0D, 0x0E);
}
U32 VideoGetTextCursorPositionX(VOID)
{
REGS Regs;
// Int 10h AH=03h
// VIDEO - GET CURSOR POSITION AND SIZE
//
// AH = 03h
// BH = page number
// 0-3 in modes 2&3
// 0-7 in modes 0&1
// 0 in graphics modes
// Return:
// AX = 0000h (Phoenix BIOS)
// CH = start scan line
// CL = end scan line
// DH = row (00h is top)
// DL = column (00h is left)
Regs.b.ah = 0x03;
Regs.b.bh = 0x00;
Int386(0x10, &Regs, &Regs);
return Regs.b.dl;
}
U32 VideoGetTextCursorPositionY(VOID)
{
REGS Regs;
// Int 10h AH=03h
// VIDEO - GET CURSOR POSITION AND SIZE
//
// AH = 03h
// BH = page number
// 0-3 in modes 2&3
// 0-7 in modes 0&1
// 0 in graphics modes
// Return:
// AX = 0000h (Phoenix BIOS)
// CH = start scan line
// CL = end scan line
// DH = row (00h is top)
// DL = column (00h is left)
Regs.b.ah = 0x03;
Regs.b.bh = 0x00;
Int386(0x10, &Regs, &Regs);
return Regs.b.dh;
}
VOID BiosVideoDisableBlinkBit(VOID)
{
REGS Regs;
// Int 10h AX=1003h
// VIDEO - TOGGLE INTENSITY/BLINKING BIT (Jr, PS, TANDY 1000, EGA, VGA)
//
// AX = 1003h
// BL = new state
// 00h background intensity enabled
// 01h blink enabled
// BH = 00h to avoid problems on some adapters
// Return:
// Nothing
//
// Note: although there is no function to get
// the current status, bit 5 of 0040h:0065h
// indicates the state.
Regs.w.ax = 0x1003;
Regs.w.bx = 0x0000;
Int386(0x10, &Regs, &Regs);
}
VOID BiosVideoEnableBlinkBit(VOID)
{
REGS Regs;
// Int 10h AX=1003h
// VIDEO - TOGGLE INTENSITY/BLINKING BIT (Jr, PS, TANDY 1000, EGA, VGA)
//
// AX = 1003h
// BL = new state
// 00h background intensity enabled
// 01h blink enabled
// BH = 00h to avoid problems on some adapters
// Return:
// Nothing
//
// Note: although there is no function to get
// the current status, bit 5 of 0040h:0065h
// indicates the state.
Regs.w.ax = 0x1003;
Regs.w.bx = 0x0001;
Int386(0x10, &Regs, &Regs);
}
U16 BiosIsVesaSupported(VOID)
{
REGS Regs;
PVESA_SVGA_INFO SvgaInfo = (PVESA_SVGA_INFO)BIOSCALLBUFFER;
#ifdef DEBUG
//U16* VideoModes;
//U16 Index;
#endif // defined DEBUG
DbgPrint((DPRINT_UI, "BiosIsVesaSupported()\n"));
RtlZeroMemory(SvgaInfo, sizeof(VESA_SVGA_INFO));
// Make sure we receive version 2.0 info
SvgaInfo->Signature[0] = 'V';
SvgaInfo->Signature[1] = 'B';
SvgaInfo->Signature[2] = 'E';
SvgaInfo->Signature[3] = '2';
// Int 10h AX=4F00h
// VESA SuperVGA BIOS (VBE) - GET SuperVGA INFORMATION
//
// AX = 4F00h
// ES:DI -> buffer for SuperVGA information (see #00077)
// Return:
// AL = 4Fh if function supported
// AH = status
// 00h successful
// ES:DI buffer filled
// 01h failed
// ---VBE v2.0---
// 02h function not supported by current hardware configuration
// 03h function invalid in current video mode
//
// Determine whether VESA BIOS extensions are present and the
// capabilities supported by the display adapter
//
// Installation check;VESA SuperVGA
Regs.w.ax = 0x4F00;
Regs.w.es = BIOSCALLBUFSEGMENT;
Regs.w.di = BIOSCALLBUFOFFSET;
Int386(0x10, &Regs, &Regs);
DbgPrint((DPRINT_UI, "AL = 0x%x\n", Regs.b.al));
DbgPrint((DPRINT_UI, "AH = 0x%x\n", Regs.b.ah));
if (Regs.w.ax != 0x004F)
{
DbgPrint((DPRINT_UI, "Failed.\n"));
return 0x0000;
}
#ifdef DEBUG
DbgPrint((DPRINT_UI, "Supported.\n"));
DbgPrint((DPRINT_UI, "SvgaInfo->Signature[4] = %c%c%c%c\n", SvgaInfo->Signature[0], SvgaInfo->Signature[1], SvgaInfo->Signature[2], SvgaInfo->Signature[3]));
DbgPrint((DPRINT_UI, "SvgaInfo->VesaVersion = v%d.%d\n", ((SvgaInfo->VesaVersion >> 8) & 0xFF), (SvgaInfo->VesaVersion & 0xFF)));
DbgPrint((DPRINT_UI, "SvgaInfo->OemNamePtr = 0x%x\n", SvgaInfo->OemNamePtr));
DbgPrint((DPRINT_UI, "SvgaInfo->Capabilities = 0x%x\n", SvgaInfo->Capabilities));
DbgPrint((DPRINT_UI, "SvgaInfo->VideoMemory = %dK\n", SvgaInfo->TotalVideoMemory * 64));
DbgPrint((DPRINT_UI, "---VBE v2.0 ---\n"));
DbgPrint((DPRINT_UI, "SvgaInfo->OemSoftwareVersion = v%d.%d\n", ((SvgaInfo->OemSoftwareVersion >> 8) & 0x0F) + (((SvgaInfo->OemSoftwareVersion >> 12) & 0x0F) * 10), (SvgaInfo->OemSoftwareVersion & 0x0F) + (((SvgaInfo->OemSoftwareVersion >> 4) & 0x0F) * 10)));
DbgPrint((DPRINT_UI, "SvgaInfo->VendorNamePtr = 0x%x\n", SvgaInfo->VendorNamePtr));
DbgPrint((DPRINT_UI, "SvgaInfo->ProductNamePtr = 0x%x\n", SvgaInfo->ProductNamePtr));
DbgPrint((DPRINT_UI, "SvgaInfo->ProductRevisionStringPtr = 0x%x\n", SvgaInfo->ProductRevisionStringPtr));
DbgPrint((DPRINT_UI, "SvgaInfo->VBE/AF Version = 0x%x (BCD WORD)\n", SvgaInfo->VBE_AF_Version));
//DbgPrint((DPRINT_UI, "\nSupported VESA and OEM video modes:\n"));
//VideoModes = (U16*)SvgaInfo->SupportedModeListPtr;
//for (Index=0; VideoModes[Index]!=0xFFFF; Index++)
//{
// DbgPrint((DPRINT_UI, "Mode %d: 0x%x\n", Index, VideoModes[Index]));
//}
//if (SvgaInfo->VesaVersion >= 0x0200)
//{
// DbgPrint((DPRINT_UI, "\nSupported accelerated video modes (VESA v2.0):\n"));
// VideoModes = (U16*)SvgaInfo->AcceleratedModeListPtr;
// for (Index=0; VideoModes[Index]!=0xFFFF; Index++)
// {
// DbgPrint((DPRINT_UI, "Mode %d: 0x%x\n", Index, VideoModes[Index]));
// }
//}
DbgPrint((DPRINT_UI, "\n"));
//getch();
#endif // defined DEBUG
return SvgaInfo->VesaVersion;
}
BOOL BiosVesaSetBank(U16 Bank)
{
REGS Regs;
// Int 10h AX=4F05h
// VESA SuperVGA BIOS - CPU VIDEO MEMORY CONTROL
//
// AX = 4F05h
// BH = subfunction
// 00h select video memory window
// 01h get video memory window
// DX = window address in video memory (in granularity units)
// Return:
// DX = window address in video memory (in gran. units)
// BL = window number
// 00h window A
// 01h window B.
// Return:
// AL = 4Fh if function supported
// AH = status
// 00h successful
// 01h failed
Regs.w.ax = 0x4F05;
Regs.w.bx = 0x0000;
Regs.w.dx = Bank;
Int386(0x10, &Regs, &Regs);
if (Regs.w.ax != 0x004F)
{
return FALSE;
}
return TRUE;
}
BOOL BiosVesaSetVideoMode(U16 Mode)
{
REGS Regs;
// Int 10h AX=4F02h
// VESA SuperVGA BIOS - SET SuperVGA VIDEO MODE
//
// AX = 4F02h
// BX = new video mode
// ES:DI -> (VBE 3.0+) CRTC information block, bit mode bit 11 set
// Return:
// AL = 4Fh if function supported
// AH = status
// 00h successful
// 01h failed
//
// Values for VESA video mode:
// 00h-FFh OEM video modes (see #00010 at AH=00h)
// 100h 640x400x256
// 101h 640x480x256
// 102h 800x600x16
// 103h 800x600x256
// 104h 1024x768x16
// 105h 1024x768x256
// 106h 1280x1024x16
// 107h 1280x1024x256
// 108h 80x60 text
// 109h 132x25 text
// 10Ah 132x43 text
// 10Bh 132x50 text
// 10Ch 132x60 text
// ---VBE v1.2+ ---
// 10Dh 320x200x32K
// 10Eh 320x200x64K
// 10Fh 320x200x16M
// 110h 640x480x32K
// 111h 640x480x64K
// 112h 640x480x16M
// 113h 800x600x32K
// 114h 800x600x64K
// 115h 800x600x16M
// 116h 1024x768x32K
// 117h 1024x768x64K
// 118h 1024x768x16M
// 119h 1280x1024x32K (1:5:5:5)
// 11Ah 1280x1024x64K (5:6:5)
// 11Bh 1280x1024x16M
// ---VBE 2.0+ ---
// 120h 1600x1200x256
// 121h 1600x1200x32K
// 122h 1600x1200x64K
// 81FFh special full-memory access mode
// Notes: The special mode 81FFh preserves the contents of the video memory and gives
// access to all of the memory; VESA recommends that the special mode be a packed-pixel
// mode. For VBE 2.0+, it is required that the VBE implement the mode, but not place it
// in the list of available modes (mode information for this mode can be queried
// directly, however).. As of VBE 2.0, VESA will no longer define video mode numbers
Regs.w.ax = 0x4F02;
Regs.w.bx = Mode;
Int386(0x10, &Regs, &Regs);
if (Regs.w.ax != 0x004F)
{
return FALSE;
}
return TRUE;
}
BOOL BiosVesaGetSVGAModeInformation(U16 Mode, PSVGA_MODE_INFORMATION ModeInformation)
{
REGS Regs;
RtlZeroMemory((PVOID)BIOSCALLBUFFER, 256);
// VESA SuperVGA BIOS - GET SuperVGA MODE INFORMATION
// AX = 4F01h
// CX = SuperVGA video mode (see #04082 for bitfields)
// ES:DI -> 256-byte buffer for mode information (see #00079)
// Return:
// AL = 4Fh if function supported
// AH = status
// 00h successful
// ES:DI buffer filled
// 01h failed
//
// Desc: Determine the attributes of the specified video mode
//
// Note: While VBE 1.1 and higher will zero out all unused bytes
// of the buffer, v1.0 did not, so applications that want to be
// backward compatible should clear the buffer before calling
Regs.w.ax = 0x4F01;
Regs.w.cx = Mode;
Regs.w.es = BIOSCALLBUFSEGMENT;
Regs.w.di = BIOSCALLBUFOFFSET;
Int386(0x10, &Regs, &Regs);
if (Regs.w.ax != 0x004F)
{
return FALSE;
}
RtlCopyMemory(ModeInformation, (PVOID)BIOSCALLBUFFER, sizeof(SVGA_MODE_INFORMATION));
DbgPrint((DPRINT_UI, "\n"));
DbgPrint((DPRINT_UI, "BiosVesaGetSVGAModeInformation() mode 0x%x\n", Mode));
DbgPrint((DPRINT_UI, "ModeAttributes = 0x%x\n", ModeInformation->ModeAttributes));
DbgPrint((DPRINT_UI, "WindowAttributesA = 0x%x\n", ModeInformation->WindowAttributesA));
DbgPrint((DPRINT_UI, "WindowAttributesB = 0x%x\n", ModeInformation->WindowsAttributesB));
DbgPrint((DPRINT_UI, "WindowGranularity = %dKB\n", ModeInformation->WindowGranularity));
DbgPrint((DPRINT_UI, "WindowSize = %dKB\n", ModeInformation->WindowSize));
DbgPrint((DPRINT_UI, "WindowAStartSegment = 0x%x\n", ModeInformation->WindowAStartSegment));
DbgPrint((DPRINT_UI, "WindowBStartSegment = 0x%x\n", ModeInformation->WindowBStartSegment));
DbgPrint((DPRINT_UI, "WindowPositioningFunction = 0x%x\n", ModeInformation->WindowPositioningFunction));
DbgPrint((DPRINT_UI, "BytesPerScanLine = %d\n", ModeInformation->BytesPerScanLine));
DbgPrint((DPRINT_UI, "WidthInPixels = %d\n", ModeInformation->WidthInPixels));
DbgPrint((DPRINT_UI, "HeightInPixels = %d\n", ModeInformation->HeightInPixels));
DbgPrint((DPRINT_UI, "CharacterWidthInPixels = %d\n", ModeInformation->CharacterWidthInPixels));
DbgPrint((DPRINT_UI, "CharacterHeightInPixels = %d\n", ModeInformation->CharacterHeightInPixels));
DbgPrint((DPRINT_UI, "NumberOfMemoryPlanes = %d\n", ModeInformation->NumberOfMemoryPlanes));
DbgPrint((DPRINT_UI, "BitsPerPixel = %d\n", ModeInformation->BitsPerPixel));
DbgPrint((DPRINT_UI, "NumberOfBanks = %d\n", ModeInformation->NumberOfBanks));
DbgPrint((DPRINT_UI, "MemoryModel = %d\n", ModeInformation->MemoryModel));
DbgPrint((DPRINT_UI, "BankSize = %d\n", ModeInformation->BankSize));
DbgPrint((DPRINT_UI, "NumberOfImagePlanes = %d\n", ModeInformation->NumberOfImagePanes));
DbgPrint((DPRINT_UI, "---VBE v1.2+ ---\n"));
DbgPrint((DPRINT_UI, "RedMaskSize = %d\n", ModeInformation->RedMaskSize));
DbgPrint((DPRINT_UI, "RedMaskPosition = %d\n", ModeInformation->RedMaskPosition));
DbgPrint((DPRINT_UI, "GreenMaskSize = %d\n", ModeInformation->GreenMaskSize));
DbgPrint((DPRINT_UI, "GreenMaskPosition = %d\n", ModeInformation->GreenMaskPosition));
DbgPrint((DPRINT_UI, "BlueMaskSize = %d\n", ModeInformation->BlueMaskSize));
DbgPrint((DPRINT_UI, "BlueMaskPosition = %d\n", ModeInformation->BlueMaskPosition));
DbgPrint((DPRINT_UI, "ReservedMaskSize = %d\n", ModeInformation->ReservedMaskSize));
DbgPrint((DPRINT_UI, "ReservedMaskPosition = %d\n", ModeInformation->ReservedMaskPosition));
DbgPrint((DPRINT_UI, "\n"));
return TRUE;
}

View File

@@ -1,155 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2002 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
.text
.code16
#define ASM
#include <arch.h>
Int386_REGS:
Int386_eax:
.long 0
Int386_ebx:
.long 0
Int386_ecx:
.long 0
Int386_edx:
.long 0
Int386_esi:
.long 0
Int386_edi:
.long 0
Int386_ds:
.word 0
Int386_es:
.word 0
Int386_fs:
.word 0
Int386_gs:
.word 0
Int386_eflags:
.long 0
Int386_vector:
.long 0
Int386_regsin:
.long 0
Int386_regsout:
.long 0
/*
* int Int386(int ivec, REGS* in, REGS* out);
*/
EXTERN(_Int386)
.code32
/* Get the function parameters */
movl 0x04(%esp),%eax
movl %eax,Int386_vector
movb %al,Int386_vector_opcode
movl 0x08(%esp),%eax
movl %eax,Int386_regsin
movl 0x0c(%esp),%eax
movl %eax,Int386_regsout
pushal
/* Copy the input regs to our variables */
movl $Int386_REGS,%edi
movl Int386_regsin,%esi
movl $0x24,%ecx
rep
movsb
call switch_to_real
.code16
/* Setup the registers */
movw %cs:Int386_ds,%ax
movw %ax,%ds /* DS register */
movw %cs:Int386_es,%ax
movw %ax,%es /* ES register */
movw %cs:Int386_fs,%ax
movw %ax,%fs /* FS register */
movw %cs:Int386_gs,%ax
movw %ax,%gs /* GS register */
movl %cs:Int386_eax,%eax /* EAX register */
movl %cs:Int386_ebx,%ebx /* EBX register */
movl %cs:Int386_ecx,%ecx /* ECX register */
movl %cs:Int386_edx,%edx /* EDX register */
movl %cs:Int386_esi,%esi /* ESI register */
movl %cs:Int386_edi,%edi /* EDI register */
/* Do not set the flags register */
/* only return its value in regsout */
//pushl Int386_eflags
//popfl /* EFLAGS register */
/* Call the interrupt vector */
/*int Int386_vector*/
Int386_int_opcode:
.byte 0xcd
Int386_vector_opcode:
.byte 0x00
/* Save the registers */
movl %eax,%cs:Int386_eax /* EAX register */
movl %ebx,%cs:Int386_ebx /* EBX register */
movl %ecx,%cs:Int386_ecx /* ECX register */
movl %edx,%cs:Int386_edx /* EDX register */
movl %esi,%cs:Int386_esi /* ESI register */
movl %edi,%cs:Int386_edi /* EDI register */
movw %ds,%ax /* DS register */
movw %ax,%cs:Int386_ds
movw %es,%ax /* ES register */
movw %ax,%cs:Int386_es
movw %fs,%ax /* FS register */
movw %ax,%cs:Int386_fs
movw %gs,%ax /* GS register */
movw %ax,%cs:Int386_gs
pushf
popw %cs:Int386_eflags /* EFLAGS register */
call switch_to_prot
.code32
/* Copy the variables to the output regs */
movl $Int386_REGS,%esi
movl Int386_regsout,%edi
movl $0x24,%ecx
rep
movsb
popal
/* Get return value */
movl Int386_eax,%eax
ret

View File

@@ -1,81 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2002 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
.text
.code16
#define ASM
#include <arch.h>
.code32
EXTERN(_BootNewLinuxKernel)
call switch_to_real
.code16
/* Set the boot drive */
movb (_BootDrive),%dl
/* Load segment registers */
cli
movw $0x9000,%bx
movw %bx,%ds
movw %bx,%es
movw %bx,%fs
movw %bx,%gs
movw %bx,%ss
movw $0x9000,%sp
ljmpl $0x9020,$0x0000
.code32
/*
* VOID BootOldLinuxKernel(ULONG KernelSize);
*/
EXTERN(_BootOldLinuxKernel)
/* First we have to copy the kernel down from 0x100000 to 0x10000 */
/* The reason we can overwrite low memory is because this code */
/* executes between 0000:8000 and 0000:FFFF. That leaves space for */
/* 32k of code before we start interfering with Linux kernel address space. */
/* Get KernelSize in ECX and move the kernel down */
movl 0x04(%esp),%ecx
movl $0x100000,%esi
movl $0x10000,%edi
rep movsb
call switch_to_real
.code16
/* Set the boot drive */
movb (_BootDrive),%dl
/* Load segment registers */
cli
movw $0x9000,%bx
movw %bx,%ds
movw %bx,%es
movw %bx,%fs
movw %bx,%gs
movw %bx,%ss
movw $0x9000,%sp
ljmpl $0x9020,$0x0000

View File

@@ -1,262 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2002 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
.text
.code16
#define ASM
#include <arch.h>
#include <multiboot.h>
/*
* Here we assume the kernel is loaded at 1mb
* This boots the kernel
*/
.code32
EXTERN(_boot_reactos)
call switch_to_real
.code16
/* Save cursor position */
movw $3,%ax //! Reset video mode
int $0x10
movb $10,%bl
movb $12,%ah
int $0x10
movw $0x1112,%ax // Use 8x8 font
xorb %bl,%bl
int $0x10
movw $0x1200,%ax // Use alternate print screen
movb $0x20,%bl
int $0x10
movb $1,%ah // Define cursor (scan lines 6 to 7)
movw $0x0607,%cx
int $0x10
movb $1,%ah
movw $0x600,%cx
int $0x10
movb $6,%ah // Scroll active page up
movb $0x32,%al // Clear 25 lines
movw $0,%cx // Upper left of scroll
movw $0x314F,%dx // Lower right of scroll
movb $(1*0x00+0),%bh // Use normal attribute on blanked line
int $0x10 // Video-IO
movw $0,%dx
movb $0,%dh
movb $2,%ah
movb $0,%bh
int $0x10
movw $0,%dx
movb $0,%dh
movb $2,%ah
movb $0,%bh
int $0x10
call _multi_boot
// Should never get here
cli
hlt
/*
* After you have setup the _mb_header and _mb_info structures
* then call this routine to transfer control to the kernel.
* This routine must be entered in 16-bit mode.
*/
.code16
EXTERN(_multi_boot)
cli
/*
* Setup various variables
*/
movw %ds,%bx
movzwl %bx,%eax
shll $4,%eax
addl %eax,kernel_gdtbase
/*
* Load the absolute address of the multiboot information structure
*/
movl $_mb_info,%ebx
/*
* load gdt
*/
lgdt kernel_gdtptr
/*
* Enter pmode and clear prefetch queue
*/
movl %cr0,%eax
orl $0x10001,%eax
movl %eax,%cr0
jmp next
next:
/*
* NOTE: This must be position independant (no references to
* non absolute variables)
*/
/*
* Initalize segment registers
*/
movw $KERNEL_DS,%ax
movw %ax,%ds
movw %ax,%ss
movw %ax,%es
movw %ax,%fs
movw %ax,%gs
/*
* Initalize eflags
*/
pushl $0
popfl
/*
* Load the multiboot magic value into eax
*/
movl $0x2badb002,%eax
/*
* Jump to start of 32 bit code at 0xc0000000 + 0x1000
*/
pushl $KERNEL_CS
pushl _mb_entry_addr
lretl
//ljmpl $KERNEL_CS,$(0x0200000+0x1000)
//ljmpl $KERNEL_CS,(_mb_entry_addr)
//ljmpl $KERNEL_CS,$(KERNEL_BASE+0x1000)
.p2align 2 /* force 4-byte alignment */
kernel_gdt:
.word 0 // Zero descriptor
.word 0
.word 0
.word 0
.word 0xffff // Kernel code descriptor
.word 0x0000 //
.word 0x9a00 // base 0h limit 4gb
.word 0x00cf
.word 0xffff // Kernel data descriptor
.word 0x0000 //
.word 0x9200 // base 0h limit 4gb
.word 0x00cf
kernel_gdtptr:
.word (3*8)-1 /* Limit */
kernel_gdtbase:
.long kernel_gdt /* Base Address */
EXTERN(_mb_header)
_mb_magic:
.long 0 // unsigned long magic;
_mb_flags:
.long 0 // unsigned long flags;
_mb_checksum:
.long 0 // unsigned long checksum;
_mb_header_addr:
.long 0 // unsigned long header_addr;
_mb_load_addr:
.long 0 // unsigned long load_addr;
_mb_load_end_addr:
.long 0 // unsigned long load_end_addr;
_mb_bss_end_addr:
.long 0 // unsigned long bss_end_addr;
_mb_entry_addr:
.long 0 // unsigned long entry_addr;
//
// Boot information structure
//
EXTERN(_mb_info)
_multiboot_flags:
.long 0
_multiboot_mem_lower:
.long 0
_multiboot_mem_upper:
.long 0
_multiboot_boot_device:
.long 0
_multiboot_cmdline:
.long 0
_multiboot_mods_count:
.long 0
_multiboot_mods_addr:
.long 0
_multiboot_syms:
.rept 12
.byte 0
.endr
_multiboot_mmap_length:
.long 0
_multiboot_mmap_addr:
.long 0
_multiboot_drives_count:
.long 0
_multiboot_drives_addr:
.long 0
_multiboot_config_table:
.long 0
_multiboot_boot_loader_name:
.long 0
_multiboot_apm_table:
.long 0
EXTERN(_multiboot_modules)
.rept (64 * /*multiboot_module_size*/ 16)
.byte 0
.endr
EXTERN(_multiboot_module_strings)
.rept (64*256)
.byte 0
.endr
EXTERN(_multiboot_memory_map_descriptor_size)
.long 0
EXTERN(_multiboot_memory_map)
.rept (32 * /*sizeof(memory_map_t)*/24)
.byte 0
.endr
EXTERN(_multiboot_kernel_cmdline)
.rept 255
.byte 0
.endr

View File

@@ -1,183 +0,0 @@
/* $Id: portio.c,v 1.1 2003/01/19 01:03:58 bpalmer Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* FILE: ntoskrnl/hal/x86/portio.c
* PURPOSE: Port I/O functions
* PROGRAMMER: Eric Kohl (ekohl@abo.rhein-zeitung.de)
* UPDATE HISTORY:
* Created 18/10/99
*/
//#include <ddk/ntddk.h>
#include <freeldr.h>
/* FUNCTIONS ****************************************************************/
/*
* This file contains the definitions for the x86 IO instructions
* inb/inw/inl/outb/outw/outl and the "string versions" of the same
* (insb/insw/insl/outsb/outsw/outsl). You can also use "pausing"
* versions of the single-IO instructions (inb_p/inw_p/..).
*
* This file is not meant to be obfuscating: it's just complicated
* to (a) handle it all in a way that makes gcc able to optimize it
* as well as possible and (b) trying to avoid writing the same thing
* over and over again with slight variations and possibly making a
* mistake somewhere.
*/
/*
* Thanks to James van Artsdalen for a better timing-fix than
* the two short jumps: using outb's to a nonexistent port seems
* to guarantee better timings even on fast machines.
*
* On the other hand, I'd like to be sure of a non-existent port:
* I feel a bit unsafe about using 0x80 (should be safe, though)
*
* Linus
*/
#ifdef SLOW_IO_BY_JUMPING
#define __SLOW_DOWN_IO __asm__ __volatile__("jmp 1f\n1:\tjmp 1f\n1:")
#else
#define __SLOW_DOWN_IO __asm__ __volatile__("outb %al,$0x80")
#endif
#ifdef REALLY_SLOW_IO
#define SLOW_DOWN_IO { __SLOW_DOWN_IO; __SLOW_DOWN_IO; __SLOW_DOWN_IO; __SLOW_DOWN_IO; }
#else
#define SLOW_DOWN_IO __SLOW_DOWN_IO
#endif
VOID /*STDCALL*/
READ_PORT_BUFFER_UCHAR (PUCHAR Port,
PUCHAR Buffer,
U32 Count)
{
__asm__ __volatile__ ("cld ; rep ; insb\n\t"
: "=D" (Buffer), "=c" (Count)
: "d" (Port),"0" (Buffer),"1" (Count));
}
VOID /*STDCALL*/
READ_PORT_BUFFER_USHORT (U16* Port,
U16* Buffer,
U32 Count)
{
__asm__ __volatile__ ("cld ; rep ; insw"
: "=D" (Buffer), "=c" (Count)
: "d" (Port),"0" (Buffer),"1" (Count));
}
VOID /*STDCALL*/
READ_PORT_BUFFER_ULONG (U32* Port,
U32* Buffer,
U32 Count)
{
__asm__ __volatile__ ("cld ; rep ; insl"
: "=D" (Buffer), "=c" (Count)
: "d" (Port),"0" (Buffer),"1" (Count));
}
UCHAR /*STDCALL*/
READ_PORT_UCHAR (PUCHAR Port)
{
UCHAR Value;
__asm__("inb %w1, %0\n\t"
: "=a" (Value)
: "d" (Port));
SLOW_DOWN_IO;
return(Value);
}
U16 /*STDCALL*/
READ_PORT_USHORT (U16* Port)
{
U16 Value;
__asm__("inw %w1, %0\n\t"
: "=a" (Value)
: "d" (Port));
SLOW_DOWN_IO;
return(Value);
}
U32 /*STDCALL*/
READ_PORT_ULONG (U32* Port)
{
U32 Value;
__asm__("inl %w1, %0\n\t"
: "=a" (Value)
: "d" (Port));
SLOW_DOWN_IO;
return(Value);
}
VOID /*STDCALL*/
WRITE_PORT_BUFFER_UCHAR (PUCHAR Port,
PUCHAR Buffer,
U32 Count)
{
__asm__ __volatile__ ("cld ; rep ; outsb"
: "=S" (Buffer), "=c" (Count)
: "d" (Port),"0" (Buffer),"1" (Count));
}
VOID /*STDCALL*/
WRITE_PORT_BUFFER_USHORT (U16* Port,
U16* Buffer,
U32 Count)
{
__asm__ __volatile__ ("cld ; rep ; outsw"
: "=S" (Buffer), "=c" (Count)
: "d" (Port),"0" (Buffer),"1" (Count));
}
VOID /*STDCALL*/
WRITE_PORT_BUFFER_ULONG (U32* Port,
U32* Buffer,
U32 Count)
{
__asm__ __volatile__ ("cld ; rep ; outsl"
: "=S" (Buffer), "=c" (Count)
: "d" (Port),"0" (Buffer),"1" (Count));
}
VOID /*STDCALL*/
WRITE_PORT_UCHAR (PUCHAR Port,
UCHAR Value)
{
__asm__("outb %0, %w1\n\t"
:
: "a" (Value),
"d" (Port));
SLOW_DOWN_IO;
}
VOID /*STDCALL*/
WRITE_PORT_USHORT (U16* Port,
U16 Value)
{
__asm__("outw %0, %w1\n\t"
:
: "a" (Value),
"d" (Port));
SLOW_DOWN_IO;
}
VOID /*STDCALL*/
WRITE_PORT_ULONG (U32* Port,
U32 Value)
{
__asm__("outl %0, %w1\n\t"
:
: "a" (Value),
"d" (Port));
SLOW_DOWN_IO;
}
/* EOF */

View File

@@ -1,214 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <freeldr.h>
#include <rtl.h>
#include <fs.h>
#include <reactos.h>
#include <ui.h>
#include <arch.h>
#include <miscboot.h>
#include <linux.h>
#include <mm.h>
#include <inifile.h>
#include <debug.h>
#include <options.h>
#include <oslist.h>
#include <video.h>
#include <bootmgr.h>
#include <drivemap.h>
#include <keycodes.h>
VOID RunLoader(VOID)
{
UCHAR SettingName[80];
UCHAR SettingValue[80];
U32 SectionId;
U32 OperatingSystemCount;
PUCHAR *OperatingSystemSectionNames;
PUCHAR *OperatingSystemDisplayNames;
U32 DefaultOperatingSystem;
S32 TimeOut;
U32 SelectedOperatingSystem;
if (!IniFileInitialize())
{
printf("Press any key to reboot.\n");
getch();
return;
}
if (!IniOpenSection("FreeLoader", &SectionId))
{
printf("Section [FreeLoader] not found in freeldr.ini.\n");
getch();
return;
}
if (!UiInitialize())
{
printf("Press any key to reboot.\n");
getch();
return;
}
if (!InitOperatingSystemList(&OperatingSystemSectionNames, &OperatingSystemDisplayNames, &OperatingSystemCount))
{
UiMessageBox("Press ENTER to reboot.\n");
goto reboot;
}
if (OperatingSystemCount == 0)
{
UiMessageBox("There were no operating systems listed in freeldr.ini.\nPress ENTER to reboot.");
goto reboot;
}
DefaultOperatingSystem = GetDefaultOperatingSystem(OperatingSystemSectionNames, OperatingSystemCount);
TimeOut = GetTimeOut();
//
// Find all the message box settings and run them
//
UiShowMessageBoxesInSection("FreeLoader");
for (;;)
{
// Redraw the backdrop
UiDrawBackdrop();
// Show the operating system list menu
if (!UiDisplayMenu(OperatingSystemDisplayNames, OperatingSystemCount, DefaultOperatingSystem, TimeOut, &SelectedOperatingSystem, FALSE, MainBootMenuKeyPressFilter))
{
UiMessageBox("Press ENTER to reboot.\n");
goto reboot;
}
TimeOut = -1;
DefaultOperatingSystem = SelectedOperatingSystem;
// Try to open the operating system section in the .ini file
if (!IniOpenSection(OperatingSystemSectionNames[SelectedOperatingSystem], &SectionId))
{
sprintf(SettingName, "Section [%s] not found in freeldr.ini.\n", OperatingSystemSectionNames[SelectedOperatingSystem]);
UiMessageBox(SettingName);
continue;
}
// Try to read the boot type
if (!IniReadSettingByName(SectionId, "BootType", SettingValue, 80))
{
sprintf(SettingName, "BootType= line not found in section [%s] in freeldr.ini.\n", OperatingSystemSectionNames[SelectedOperatingSystem]);
UiMessageBox(SettingName);
continue;
}
// Install the drive mapper according to this sections drive mappings
DriveMapMapDrivesInSection(OperatingSystemSectionNames[SelectedOperatingSystem]);
if (stricmp(SettingValue, "ReactOS") == 0)
{
LoadAndBootReactOS(OperatingSystemSectionNames[SelectedOperatingSystem]);
}
else if (stricmp(SettingValue, "Linux") == 0)
{
LoadAndBootLinux(OperatingSystemSectionNames[SelectedOperatingSystem], OperatingSystemDisplayNames[SelectedOperatingSystem]);
}
else if (stricmp(SettingValue, "BootSector") == 0)
{
LoadAndBootBootSector(OperatingSystemSectionNames[SelectedOperatingSystem]);
}
else if (stricmp(SettingValue, "Partition") == 0)
{
LoadAndBootPartition(OperatingSystemSectionNames[SelectedOperatingSystem]);
}
else if (stricmp(SettingValue, "Drive") == 0)
{
LoadAndBootDrive(OperatingSystemSectionNames[SelectedOperatingSystem]);
}
}
reboot:
UiUnInitialize("Rebooting...");
return;
}
U32 GetDefaultOperatingSystem(PUCHAR OperatingSystemList[], U32 OperatingSystemCount)
{
UCHAR DefaultOSText[80];
U32 SectionId;
U32 DefaultOS = 0;
U32 Idx;
if (!IniOpenSection("FreeLoader", &SectionId))
{
return 0;
}
if (IniReadSettingByName(SectionId, "DefaultOS", DefaultOSText, 80))
{
for (Idx=0; Idx<OperatingSystemCount; Idx++)
{
if (stricmp(DefaultOSText, OperatingSystemList[Idx]) == 0)
{
DefaultOS = Idx;
break;
}
}
}
return DefaultOS;
}
S32 GetTimeOut(VOID)
{
UCHAR TimeOutText[20];
U32 TimeOut;
U32 SectionId;
if (!IniOpenSection("FreeLoader", &SectionId))
{
return -1;
}
if (IniReadSettingByName(SectionId, "TimeOut", TimeOutText, 20))
{
TimeOut = atoi(TimeOutText);
}
else
{
TimeOut = -1;
}
return TimeOut;
}
BOOL MainBootMenuKeyPressFilter(U32 KeyPress)
{
if (KeyPress == KEY_F8)
{
DoOptionsMenu();
return TRUE;
}
// We didn't handle the key
return FALSE;
}

View File

@@ -1,262 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <freeldr.h>
#include "cm.h"
#include <mm.h>
#include <disk.h>
#include <rtl.h>
#include <debug.h>
#include <arch.h>
// Returns a pointer to a CACHE_BLOCK structure
// Adds the block to the cache manager block list
// in cache memory if it isn't already there
PCACHE_BLOCK CacheInternalGetBlockPointer(PCACHE_DRIVE CacheDrive, U32 BlockNumber)
{
PCACHE_BLOCK CacheBlock = NULL;
DbgPrint((DPRINT_CACHE, "CacheInternalGetBlockPointer() BlockNumber = %d\n", BlockNumber));
CacheBlock = CacheInternalFindBlock(CacheDrive, BlockNumber);
if (CacheBlock != NULL)
{
DbgPrint((DPRINT_CACHE, "Cache hit! BlockNumber: %d CacheBlock->BlockNumber: %d\n", BlockNumber, CacheBlock->BlockNumber));
return CacheBlock;
}
DbgPrint((DPRINT_CACHE, "Cache miss! BlockNumber: %d\n", BlockNumber));
CacheBlock = CacheInternalAddBlockToCache(CacheDrive, BlockNumber);
// Optimize the block list so it has a LRU structure
CacheInternalOptimizeBlockList(CacheDrive, CacheBlock);
return CacheBlock;
}
PCACHE_BLOCK CacheInternalFindBlock(PCACHE_DRIVE CacheDrive, U32 BlockNumber)
{
PCACHE_BLOCK CacheBlock = NULL;
DbgPrint((DPRINT_CACHE, "CacheInternalFindBlock() BlockNumber = %d\n", BlockNumber));
//
// Make sure the block list has entries before I start searching it.
//
if (!RtlListIsEmpty((PLIST_ITEM)CacheDrive->CacheBlockHead))
{
//
// Search the list and find the BIOS drive number
//
CacheBlock = CacheDrive->CacheBlockHead;
while (CacheBlock != NULL)
{
//
// We found the block, so return it
//
if (CacheBlock->BlockNumber == BlockNumber)
{
//
// Increment the blocks access count
//
CacheBlock->AccessCount++;
return CacheBlock;
}
CacheBlock = (PCACHE_BLOCK)RtlListGetNext((PLIST_ITEM)CacheBlock);
}
}
return NULL;
}
PCACHE_BLOCK CacheInternalAddBlockToCache(PCACHE_DRIVE CacheDrive, U32 BlockNumber)
{
PCACHE_BLOCK CacheBlock = NULL;
DbgPrint((DPRINT_CACHE, "CacheInternalAddBlockToCache() BlockNumber = %d\n", BlockNumber));
// Check the size of the cache so we don't exceed our limits
CacheInternalCheckCacheSizeLimits(CacheDrive);
// We will need to add the block to the
// drive's list of cached blocks. So allocate
// the block memory.
CacheBlock = MmAllocateMemory(sizeof(CACHE_BLOCK));
if (CacheBlock == NULL)
{
return NULL;
}
// Now initialize the structure and
// allocate room for the block data
RtlZeroMemory(CacheBlock, sizeof(CACHE_BLOCK));
CacheBlock->BlockNumber = BlockNumber;
CacheBlock->BlockData = MmAllocateMemory(CacheDrive->BlockSize * CacheDrive->DriveGeometry.BytesPerSector);
if (CacheBlock->BlockData ==NULL)
{
MmFreeMemory(CacheBlock);
return NULL;
}
// Now try to read in the block
if (!DiskReadLogicalSectors(CacheDrive->DriveNumber, (BlockNumber * CacheDrive->BlockSize), CacheDrive->BlockSize, (PVOID)DISKREADBUFFER))
{
MmFreeMemory(CacheBlock->BlockData);
MmFreeMemory(CacheBlock);
return NULL;
}
RtlCopyMemory(CacheBlock->BlockData, (PVOID)DISKREADBUFFER, CacheDrive->BlockSize * CacheDrive->DriveGeometry.BytesPerSector);
// Add it to our list of blocks managed by the cache
if (CacheDrive->CacheBlockHead == NULL)
{
CacheDrive->CacheBlockHead = CacheBlock;
}
else
{
RtlListInsertTail((PLIST_ITEM)CacheDrive->CacheBlockHead, (PLIST_ITEM)CacheBlock);
}
// Update the cache data
CacheBlockCount++;
CacheSizeCurrent = CacheBlockCount * (CacheDrive->BlockSize * CacheDrive->DriveGeometry.BytesPerSector);
CacheInternalDumpBlockList(CacheDrive);
return CacheBlock;
}
BOOL CacheInternalFreeBlock(PCACHE_DRIVE CacheDrive)
{
PCACHE_BLOCK CacheBlockToFree;
DbgPrint((DPRINT_CACHE, "CacheInternalFreeBlock()\n"));
// Get a pointer to the last item in the block list
// that isn't forced to be in the cache and remove
// it from the list
CacheBlockToFree = (PCACHE_BLOCK)RtlListGetTail((PLIST_ITEM)CacheDrive->CacheBlockHead);
while (CacheBlockToFree != NULL && CacheBlockToFree->LockedInCache == TRUE)
{
CacheBlockToFree = (PCACHE_BLOCK)RtlListGetPrevious((PLIST_ITEM)CacheBlockToFree);
}
// No blocks left in cache that can be freed
// so just return
if (CacheBlockToFree == NULL)
{
return FALSE;
}
//
// If we are freeing the head of the list then update it's pointer
//
if (CacheBlockToFree == CacheDrive->CacheBlockHead)
{
CacheDrive->CacheBlockHead = (PCACHE_BLOCK)RtlListGetNext((PLIST_ITEM)CacheBlockToFree);
}
RtlListRemoveEntry((PLIST_ITEM)CacheBlockToFree);
// Free the block memory and the block structure
MmFreeMemory(CacheBlockToFree->BlockData);
MmFreeMemory(CacheBlockToFree);
// Update the cache data
CacheBlockCount--;
CacheSizeCurrent = CacheBlockCount * (CacheDrive->BlockSize * CacheDrive->DriveGeometry.BytesPerSector);
return TRUE;
}
VOID CacheInternalCheckCacheSizeLimits(PCACHE_DRIVE CacheDrive)
{
U32 NewCacheSize;
DbgPrint((DPRINT_CACHE, "CacheInternalCheckCacheSizeLimits()\n"));
// Calculate the size of the cache if we added a block
NewCacheSize = (CacheBlockCount + 1) * (CacheDrive->BlockSize * CacheDrive->DriveGeometry.BytesPerSector);
// Check the new size against the cache size limit
if (NewCacheSize > CacheSizeLimit)
{
CacheInternalFreeBlock(CacheDrive);
CacheInternalDumpBlockList(CacheDrive);
}
}
VOID CacheInternalDumpBlockList(PCACHE_DRIVE CacheDrive)
{
PCACHE_BLOCK CacheBlock;
DbgPrint((DPRINT_CACHE, "Dumping block list for BIOS drive 0x%x.\n", CacheDrive->DriveNumber));
DbgPrint((DPRINT_CACHE, "Cylinders: %d.\n", CacheDrive->DriveGeometry.Cylinders));
DbgPrint((DPRINT_CACHE, "Heads: %d.\n", CacheDrive->DriveGeometry.Heads));
DbgPrint((DPRINT_CACHE, "Sectors: %d.\n", CacheDrive->DriveGeometry.Sectors));
DbgPrint((DPRINT_CACHE, "BytesPerSector: %d.\n", CacheDrive->DriveGeometry.BytesPerSector));
DbgPrint((DPRINT_CACHE, "BlockSize: %d.\n", CacheDrive->BlockSize));
DbgPrint((DPRINT_CACHE, "CacheSizeLimit: %d.\n", CacheSizeLimit));
DbgPrint((DPRINT_CACHE, "CacheSizeCurrent: %d.\n", CacheSizeCurrent));
DbgPrint((DPRINT_CACHE, "CacheBlockCount: %d.\n", CacheBlockCount));
DbgPrint((DPRINT_CACHE, "Dumping %d cache blocks.\n", RtlListCountEntries((PLIST_ITEM)CacheDrive->CacheBlockHead)));
CacheBlock = CacheDrive->CacheBlockHead;
while (CacheBlock != NULL)
{
DbgPrint((DPRINT_CACHE, "Cache Block: CacheBlock: 0x%x\n", CacheBlock));
DbgPrint((DPRINT_CACHE, "Cache Block: Block Number: %d\n", CacheBlock->BlockNumber));
DbgPrint((DPRINT_CACHE, "Cache Block: Access Count: %d\n", CacheBlock->AccessCount));
DbgPrint((DPRINT_CACHE, "Cache Block: Block Data: 0x%x\n", CacheBlock->BlockData));
DbgPrint((DPRINT_CACHE, "Cache Block: Locked In Cache: %d\n", CacheBlock->LockedInCache));
if (CacheBlock->BlockData == NULL)
{
BugCheck((DPRINT_CACHE, "What the heck?!?\n"));
}
CacheBlock = (PCACHE_BLOCK)RtlListGetNext((PLIST_ITEM)CacheBlock);
}
}
VOID CacheInternalOptimizeBlockList(PCACHE_DRIVE CacheDrive, PCACHE_BLOCK CacheBlock)
{
DbgPrint((DPRINT_CACHE, "CacheInternalOptimizeBlockList()\n"));
// Don't do this if this block is already at the head of the list
if (CacheBlock != CacheDrive->CacheBlockHead)
{
// Remove this item from the block list
RtlListRemoveEntry((PLIST_ITEM)CacheBlock);
// Re-insert it at the head of the list
RtlListInsertHead((PLIST_ITEM)CacheDrive->CacheBlockHead, (PLIST_ITEM)CacheBlock);
// Update the head pointer
CacheDrive->CacheBlockHead = CacheBlock;
}
}

View File

@@ -1,325 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <freeldr.h>
#include "cm.h"
#include <mm.h>
#include <disk.h>
#include <rtl.h>
#include <debug.h>
///////////////////////////////////////////////////////////////////////////////////////
//
// Internal data
//
///////////////////////////////////////////////////////////////////////////////////////
CACHE_DRIVE CacheManagerDrive;
BOOL CacheManagerInitialized = FALSE;
BOOL CacheManagerDataInvalid = FALSE;
U32 CacheBlockCount = 0;
U32 CacheSizeLimit = 0;
U32 CacheSizeCurrent = 0;
BOOL CacheInitializeDrive(U32 DriveNumber)
{
PCACHE_BLOCK NextCacheBlock;
// If we already have a cache for this drive then
// by all means lets keep it, unless it is a removable
// drive, in which case we'll invalidate the cache
if ((CacheManagerInitialized == TRUE) &&
(DriveNumber == CacheManagerDrive.DriveNumber) &&
(DriveNumber >= 0x80) &&
(CacheManagerDataInvalid != TRUE))
{
return TRUE;
}
CacheManagerDataInvalid = FALSE;
//
// If we have already been initialized then free
// the old data
//
if (CacheManagerInitialized)
{
CacheManagerInitialized = FALSE;
DbgPrint((DPRINT_CACHE, "CacheBlockCount: %d\n", CacheBlockCount));
DbgPrint((DPRINT_CACHE, "CacheSizeLimit: %d\n", CacheSizeLimit));
DbgPrint((DPRINT_CACHE, "CacheSizeCurrent: %d\n", CacheSizeCurrent));
//
// Loop through and free the cache blocks
//
while (CacheManagerDrive.CacheBlockHead != NULL)
{
NextCacheBlock = (PCACHE_BLOCK)RtlListGetNext((PLIST_ITEM)CacheManagerDrive.CacheBlockHead);
MmFreeMemory(CacheManagerDrive.CacheBlockHead->BlockData);
MmFreeMemory(CacheManagerDrive.CacheBlockHead);
CacheManagerDrive.CacheBlockHead = NextCacheBlock;
}
}
// Initialize the structure
RtlZeroMemory(&CacheManagerDrive, sizeof(CACHE_DRIVE));
CacheManagerDrive.DriveNumber = DriveNumber;
if (!DiskGetDriveGeometry(DriveNumber, &CacheManagerDrive.DriveGeometry))
{
return FALSE;
}
// Get the number of sectors in each cache block
CacheManagerDrive.BlockSize = DiskGetCacheableBlockCount(DriveNumber);
CacheBlockCount = 0;
CacheSizeLimit = GetSystemMemorySize() / 8;
CacheSizeCurrent = 0;
if (CacheSizeLimit < (64 * 1024))
{
CacheSizeLimit = (64 * 1024);
}
CacheManagerInitialized = TRUE;
DbgPrint((DPRINT_CACHE, "Initializing BIOS drive 0x%x.\n", DriveNumber));
DbgPrint((DPRINT_CACHE, "Cylinders: %d.\n", CacheManagerDrive.DriveGeometry.Cylinders));
DbgPrint((DPRINT_CACHE, "Heads: %d.\n", CacheManagerDrive.DriveGeometry.Heads));
DbgPrint((DPRINT_CACHE, "Sectors: %d.\n", CacheManagerDrive.DriveGeometry.Sectors));
DbgPrint((DPRINT_CACHE, "BytesPerSector: %d.\n", CacheManagerDrive.DriveGeometry.BytesPerSector));
DbgPrint((DPRINT_CACHE, "BlockSize: %d.\n", CacheManagerDrive.BlockSize));
DbgPrint((DPRINT_CACHE, "CacheSizeLimit: %d.\n", CacheSizeLimit));
return TRUE;
}
VOID CacheInvalidateCacheData(VOID)
{
CacheManagerDataInvalid = TRUE;
}
BOOL CacheReadDiskSectors(U32 DiskNumber, U32 StartSector, U32 SectorCount, PVOID Buffer)
{
PCACHE_BLOCK CacheBlock;
U32 StartBlock;
U32 SectorOffsetInStartBlock;
U32 CopyLengthInStartBlock;
U32 EndBlock;
U32 SectorOffsetInEndBlock;
U32 BlockCount;
U32 Idx;
DbgPrint((DPRINT_CACHE, "CacheReadDiskSectors() DiskNumber: 0x%x StartSector: %d SectorCount: %d Buffer: 0x%x\n", DiskNumber, StartSector, SectorCount, Buffer));
// If we aren't initialized yet then they can't do this
if (CacheManagerInitialized == FALSE)
{
return FALSE;
}
//
// Caculate which blocks we must cache
//
StartBlock = StartSector / CacheManagerDrive.BlockSize;
SectorOffsetInStartBlock = StartSector % CacheManagerDrive.BlockSize;
CopyLengthInStartBlock = (SectorCount > (CacheManagerDrive.BlockSize - SectorOffsetInStartBlock)) ? (CacheManagerDrive.BlockSize - SectorOffsetInStartBlock) : SectorCount;
EndBlock = (StartSector + (SectorCount - 1)) / CacheManagerDrive.BlockSize;
SectorOffsetInEndBlock = (StartSector + SectorCount) % CacheManagerDrive.BlockSize;
BlockCount = (EndBlock - StartBlock) + 1;
DbgPrint((DPRINT_CACHE, "StartBlock: %d SectorOffsetInStartBlock: %d CopyLengthInStartBlock: %d EndBlock: %d SectorOffsetInEndBlock: %d BlockCount: %d\n", StartBlock, SectorOffsetInStartBlock, CopyLengthInStartBlock, EndBlock, SectorOffsetInEndBlock, BlockCount));
//
// Read the first block into the buffer
//
if (BlockCount > 0)
{
//
// Get cache block pointer (this forces the disk sectors into the cache memory)
//
CacheBlock = CacheInternalGetBlockPointer(&CacheManagerDrive, StartBlock);
if (CacheBlock == NULL)
{
return FALSE;
}
//
// Copy the portion requested into the buffer
//
RtlCopyMemory(Buffer,
(CacheBlock->BlockData + (SectorOffsetInStartBlock * CacheManagerDrive.DriveGeometry.BytesPerSector)),
(CopyLengthInStartBlock * CacheManagerDrive.DriveGeometry.BytesPerSector));
DbgPrint((DPRINT_CACHE, "1 - RtlCopyMemory(0x%x, 0x%x, %d)\n", Buffer, (CacheBlock->BlockData + (SectorOffsetInStartBlock * CacheManagerDrive.DriveGeometry.BytesPerSector)), (CopyLengthInStartBlock * CacheManagerDrive.DriveGeometry.BytesPerSector)));
//
// Update the buffer address
//
Buffer += (CopyLengthInStartBlock * CacheManagerDrive.DriveGeometry.BytesPerSector);
//
// Update the block count
//
BlockCount--;
}
//
// Loop through the middle blocks and read them into the buffer
//
for (Idx=StartBlock+1; BlockCount>1; Idx++)
{
//
// Get cache block pointer (this forces the disk sectors into the cache memory)
//
CacheBlock = CacheInternalGetBlockPointer(&CacheManagerDrive, Idx);
if (CacheBlock == NULL)
{
return FALSE;
}
//
// Copy the portion requested into the buffer
//
RtlCopyMemory(Buffer,
CacheBlock->BlockData,
CacheManagerDrive.BlockSize * CacheManagerDrive.DriveGeometry.BytesPerSector);
DbgPrint((DPRINT_CACHE, "2 - RtlCopyMemory(0x%x, 0x%x, %d)\n", Buffer, CacheBlock->BlockData, CacheManagerDrive.BlockSize * CacheManagerDrive.DriveGeometry.BytesPerSector));
//
// Update the buffer address
//
Buffer += CacheManagerDrive.BlockSize * CacheManagerDrive.DriveGeometry.BytesPerSector;
//
// Update the block count
//
BlockCount--;
}
//
// Read the last block into the buffer
//
if (BlockCount > 0)
{
//
// Get cache block pointer (this forces the disk sectors into the cache memory)
//
CacheBlock = CacheInternalGetBlockPointer(&CacheManagerDrive, EndBlock);
if (CacheBlock == NULL)
{
return FALSE;
}
//
// Copy the portion requested into the buffer
//
RtlCopyMemory(Buffer,
CacheBlock->BlockData,
SectorOffsetInEndBlock * CacheManagerDrive.DriveGeometry.BytesPerSector);
DbgPrint((DPRINT_CACHE, "3 - RtlCopyMemory(0x%x, 0x%x, %d)\n", Buffer, CacheBlock->BlockData, SectorOffsetInEndBlock * CacheManagerDrive.DriveGeometry.BytesPerSector));
//
// Update the buffer address
//
Buffer += SectorOffsetInEndBlock * CacheManagerDrive.DriveGeometry.BytesPerSector;
//
// Update the block count
//
BlockCount--;
}
return TRUE;
}
BOOL CacheForceDiskSectorsIntoCache(U32 DiskNumber, U32 StartSector, U32 SectorCount)
{
PCACHE_BLOCK CacheBlock;
U32 StartBlock;
U32 EndBlock;
U32 BlockCount;
U32 Idx;
DbgPrint((DPRINT_CACHE, "CacheForceDiskSectorsIntoCache() DiskNumber: 0x%x StartSector: %d SectorCount: %d\n", DiskNumber, StartSector, SectorCount));
// If we aren't initialized yet then they can't do this
if (CacheManagerInitialized == FALSE)
{
return FALSE;
}
//
// Caculate which blocks we must cache
//
StartBlock = StartSector / CacheManagerDrive.BlockSize;
EndBlock = (StartSector + SectorCount) / CacheManagerDrive.BlockSize;
BlockCount = (EndBlock - StartBlock) + 1;
//
// Loop through and cache them
//
for (Idx=StartBlock; Idx<(StartBlock+BlockCount); Idx++)
{
//
// Get cache block pointer (this forces the disk sectors into the cache memory)
//
CacheBlock = CacheInternalGetBlockPointer(&CacheManagerDrive, Idx);
if (CacheBlock == NULL)
{
return FALSE;
}
//
// Lock the sectors into the cache
//
CacheBlock->LockedInCache = TRUE;
}
return TRUE;
}
BOOL CacheReleaseMemory(U32 MinimumAmountToRelease)
{
U32 AmountReleased;
DbgPrint((DPRINT_CACHE, "CacheReleaseMemory() MinimumAmountToRelease = %d\n", MinimumAmountToRelease));
// If we aren't initialized yet then they can't do this
if (CacheManagerInitialized == FALSE)
{
return FALSE;
}
// Loop through and try to free the requested amount of memory
for (AmountReleased=0; AmountReleased<MinimumAmountToRelease; )
{
// Try to free a block
// If this fails then break out of the loop
if (!CacheInternalFreeBlock(&CacheManagerDrive))
{
break;
}
// It succeeded so increment the amount of memory we have freed
AmountReleased += CacheManagerDrive.BlockSize * CacheManagerDrive.DriveGeometry.BytesPerSector;
}
// Return status
return (AmountReleased >= MinimumAmountToRelease);
}

View File

@@ -1,92 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <freeldr.h>
#include <rtl.h>
#include <disk.h>
#ifndef __CM_H
#define __CM_H
///////////////////////////////////////////////////////////////////////////////////////
//
// This structure describes a cached block element. The disk is divided up into
// cache blocks. For disks which LBA is not supported each block is the size of
// one track. This will force the cache manager to make track sized reads, and
// therefore maximizes throughput. For disks which support LBA the block size
// is 64k because they have no cylinder, head, or sector boundaries.
//
///////////////////////////////////////////////////////////////////////////////////////
typedef struct
{
LIST_ITEM ListEntry; // Doubly linked list synchronization member
U32 BlockNumber; // Track index for CHS, 64k block index for LBA
BOOL LockedInCache; // Indicates that this block is locked in cache memory
U32 AccessCount; // Access count for this block
PVOID BlockData; // Pointer to block data
} CACHE_BLOCK, *PCACHE_BLOCK;
///////////////////////////////////////////////////////////////////////////////////////
//
// This structure describes a cached drive. It contains the BIOS drive number
// and indicates whether or not LBA is supported. If LBA is not supported then
// the drive's geometry is described here.
//
///////////////////////////////////////////////////////////////////////////////////////
typedef struct
{
U32 DriveNumber;
GEOMETRY DriveGeometry;
U32 BlockSize; // Block size (in sectors)
PCACHE_BLOCK CacheBlockHead;
} CACHE_DRIVE, *PCACHE_DRIVE;
///////////////////////////////////////////////////////////////////////////////////////
//
// Internal data
//
///////////////////////////////////////////////////////////////////////////////////////
extern CACHE_DRIVE CacheManagerDrive;
extern BOOL CacheManagerInitialized;
extern U32 CacheBlockCount;
extern U32 CacheSizeLimit;
extern U32 CacheSizeCurrent;
///////////////////////////////////////////////////////////////////////////////////////
//
// Internal functions
//
///////////////////////////////////////////////////////////////////////////////////////
PCACHE_BLOCK CacheInternalGetBlockPointer(PCACHE_DRIVE CacheDrive, U32 BlockNumber); // Returns a pointer to a CACHE_BLOCK structure given a block number
PCACHE_BLOCK CacheInternalFindBlock(PCACHE_DRIVE CacheDrive, U32 BlockNumber); // Searches the block list for a particular block
PCACHE_BLOCK CacheInternalAddBlockToCache(PCACHE_DRIVE CacheDrive, U32 BlockNumber); // Adds a block to the cache's block list
BOOL CacheInternalFreeBlock(PCACHE_DRIVE CacheDrive); // Removes a block from the cache's block list & frees the memory
VOID CacheInternalCheckCacheSizeLimits(PCACHE_DRIVE CacheDrive); // Checks the cache size limits to see if we can add a new block, if not calls CacheInternalFreeBlock()
VOID CacheInternalDumpBlockList(PCACHE_DRIVE CacheDrive); // Dumps the list of cached blocks to the debug output port
VOID CacheInternalOptimizeBlockList(PCACHE_DRIVE CacheDrive, PCACHE_BLOCK CacheBlock); // Moves the specified block to the head of the list
#endif // defined __CM_H

View File

@@ -1,277 +0,0 @@
/*
* FreeLoader
* Copyright (C) 2001 Brian Palmer <brianp@sginet.com>
* Copyright (C) 2001 Eric Kohl
* Copyright (C) 2001 Emanuele Aliberti
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <freeldr.h>
#include <comm.h>
#include <portio.h>
/* MACROS *******************************************************************/
#define DEFAULT_BAUD_RATE 19200
#define SER_RBR(x) ((x)+0)
#define SER_THR(x) ((x)+0)
#define SER_DLL(x) ((x)+0)
#define SER_IER(x) ((x)+1)
#define SER_DLM(x) ((x)+1)
#define SER_IIR(x) ((x)+2)
#define SER_LCR(x) ((x)+3)
#define SR_LCR_CS5 0x00
#define SR_LCR_CS6 0x01
#define SR_LCR_CS7 0x02
#define SR_LCR_CS8 0x03
#define SR_LCR_ST1 0x00
#define SR_LCR_ST2 0x04
#define SR_LCR_PNO 0x00
#define SR_LCR_POD 0x08
#define SR_LCR_PEV 0x18
#define SR_LCR_PMK 0x28
#define SR_LCR_PSP 0x38
#define SR_LCR_BRK 0x40
#define SR_LCR_DLAB 0x80
#define SER_MCR(x) ((x)+4)
#define SR_MCR_DTR 0x01
#define SR_MCR_RTS 0x02
#define SER_LSR(x) ((x)+5)
#define SR_LSR_DR 0x01
#define SR_LSR_TBE 0x20
#define SER_MSR(x) ((x)+6)
#define SR_MSR_CTS 0x10
#define SR_MSR_DSR 0x20
#define SER_SCR(x) ((x)+7)
/* STATIC VARIABLES *********************************************************/
static U32 Rs232ComPort = 0;
static U32 Rs232BaudRate = 0;
static PUCHAR Rs232PortBase = (PUCHAR)0;
/* The com port must only be initialized once! */
static BOOLEAN PortInitialized = FALSE;
/* STATIC FUNCTIONS *********************************************************/
static BOOL Rs232DoesComPortExist(PUCHAR BaseAddress)
{
BOOLEAN found;
U8 mcr;
U8 msr;
found = FALSE;
/* save Modem Control Register (MCR) */
mcr = READ_PORT_UCHAR (SER_MCR(BaseAddress));
/* enable loop mode (set Bit 4 of the MCR) */
WRITE_PORT_UCHAR (SER_MCR(BaseAddress), 0x10);
/* clear all modem output bits */
WRITE_PORT_UCHAR (SER_MCR(BaseAddress), 0x10);
/* read the Modem Status Register */
msr = READ_PORT_UCHAR (SER_MSR(BaseAddress));
/*
* the upper nibble of the MSR (modem output bits) must be
* equal to the lower nibble of the MCR (modem input bits)
*/
if ((msr & 0xF0) == 0x00)
{
/* set all modem output bits */
WRITE_PORT_UCHAR (SER_MCR(BaseAddress), 0x1F);
/* read the Modem Status Register */
msr = READ_PORT_UCHAR (SER_MSR(BaseAddress));
/*
* the upper nibble of the MSR (modem output bits) must be
* equal to the lower nibble of the MCR (modem input bits)
*/
if ((msr & 0xF0) == 0xF0)
found = TRUE;
}
/* restore MCR */
WRITE_PORT_UCHAR (SER_MCR(BaseAddress), mcr);
return (found);
}
/* FUNCTIONS *********************************************************/
BOOL Rs232PortInitialize(U32 ComPort, U32 BaudRate)
{
U32 BaseArray[5] = {0, 0x3F8, 0x2F8, 0x3E8, 0x2E8};
//char buffer[80];
U32 divisor;
U8 lcr;
if (PortInitialized == FALSE)
{
if (BaudRate != 0)
{
Rs232BaudRate = BaudRate;
}
else
{
Rs232BaudRate = DEFAULT_BAUD_RATE;
}
if (ComPort == 0)
{
if (Rs232DoesComPortExist ((PUCHAR)BaseArray[2]))
{
Rs232PortBase = (PUCHAR)BaseArray[2];
Rs232ComPort = 2;
/*#ifndef NDEBUG
sprintf (buffer,
"\nSerial port COM%ld found at 0x%lx\n",
ComPort,
(U32)PortBase);
HalDisplayString (buffer);
#endif*/ /* NDEBUG */
}
else if (Rs232DoesComPortExist ((PUCHAR)BaseArray[1]))
{
Rs232PortBase = (PUCHAR)BaseArray[1];
Rs232ComPort = 1;
/*#ifndef NDEBUG
sprintf (buffer,
"\nSerial port COM%ld found at 0x%lx\n",
ComPort,
(U32)PortBase);
HalDisplayString (buffer);
#endif*/ /* NDEBUG */
}
else
{
/*sprintf (buffer,
"\nKernel Debugger: No COM port found!!!\n\n");
HalDisplayString (buffer);*/
return FALSE;
}
}
else
{
if (Rs232DoesComPortExist ((PUCHAR)BaseArray[ComPort]))
{
Rs232PortBase = (PUCHAR)BaseArray[ComPort];
Rs232ComPort = ComPort;
/*#ifndef NDEBUG
sprintf (buffer,
"\nSerial port COM%ld found at 0x%lx\n",
ComPort,
(U32)PortBase);
HalDisplayString (buffer);
#endif*/ /* NDEBUG */
}
else
{
/*sprintf (buffer,
"\nKernel Debugger: No serial port found!!!\n\n");
HalDisplayString (buffer);*/
return FALSE;
}
}
PortInitialized = TRUE;
}
/*
* set baud rate and data format (8N1)
*/
/* turn on DTR and RTS */
WRITE_PORT_UCHAR (SER_MCR(Rs232PortBase), SR_MCR_DTR | SR_MCR_RTS);
/* set DLAB */
lcr = READ_PORT_UCHAR (SER_LCR(Rs232PortBase)) | SR_LCR_DLAB;
WRITE_PORT_UCHAR (SER_LCR(Rs232PortBase), lcr);
/* set baud rate */
divisor = 115200 / BaudRate;
WRITE_PORT_UCHAR (SER_DLL(Rs232PortBase), divisor & 0xff);
WRITE_PORT_UCHAR (SER_DLM(Rs232PortBase), (divisor >> 8) & 0xff);
/* reset DLAB and set 8N1 format */
WRITE_PORT_UCHAR (SER_LCR(Rs232PortBase),
SR_LCR_CS8 | SR_LCR_ST1 | SR_LCR_PNO);
/* read junk out of the RBR */
lcr = READ_PORT_UCHAR (SER_RBR(Rs232PortBase));
/*
* set global info
*/
//KdComPortInUse = (U32)PortBase;
/*
* print message to blue screen
*/
/*sprintf (buffer,
"\nKernel Debugger: COM%ld (Port 0x%lx) BaudRate %ld\n\n",
ComPort,
(U32)PortBase,
BaudRate);
HalDisplayString (buffer);*/
return TRUE;
}
BOOL Rs232PortGetByte(PUCHAR ByteRecieved)
{
if (PortInitialized == FALSE)
return FALSE;
if ((READ_PORT_UCHAR (SER_LSR(Rs232PortBase)) & SR_LSR_DR))
{
*ByteRecieved = READ_PORT_UCHAR (SER_RBR(Rs232PortBase));
return TRUE;
}
return FALSE;
}
BOOL Rs232PortPollByte(PUCHAR ByteRecieved)
{
if (PortInitialized == FALSE)
return FALSE;
while ((READ_PORT_UCHAR (SER_LSR(Rs232PortBase)) & SR_LSR_DR) == 0)
;
*ByteRecieved = READ_PORT_UCHAR (SER_RBR(Rs232PortBase));
return TRUE;
}
VOID Rs232PortPutByte(UCHAR ByteToSend)
{
if (PortInitialized == FALSE)
return;
while ((READ_PORT_UCHAR (SER_LSR(Rs232PortBase)) & SR_LSR_TBE) == 0)
;
WRITE_PORT_UCHAR (SER_THR(Rs232PortBase), ByteToSend);
}

View File

@@ -1,400 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <freeldr.h>
#include <rtl.h>
#include <ui.h>
#include <options.h>
#include <miscboot.h>
#include <debug.h>
#include <disk.h>
#include <arch.h>
#include <inifile.h>
#include <linux.h>
#include <reactos.h>
#include <drivemap.h>
UCHAR BootDrivePrompt[] = "Enter the boot drive.\n\nExamples:\nfd0 - first floppy drive\nhd0 - first hard drive\nhd1 - second hard drive\ncd0 - first CD-ROM drive.\n\nBIOS drive numbers may also be used:\n0 - first floppy drive\n0x80 - first hard drive\n0x81 - second hard drive";
UCHAR BootPartitionPrompt[] = "Enter the boot partition.\n\nEnter 0 for the active (bootable) partition.";
UCHAR BootSectorFilePrompt[] = "Enter the boot sector file path.\n\nExamples:\n\\BOOTSECT.DOS\n/boot/bootsect.dos";
UCHAR LinuxKernelPrompt[] = "Enter the Linux kernel image path.\n\nExamples:\n/vmlinuz\n/boot/vmlinuz-2.4.18";
UCHAR LinuxInitrdPrompt[] = "Enter the initrd image path.\n\nExamples:\n/initrd.gz\n/boot/root.img.gz\n\nLeave blank for no initial ram disk.";
UCHAR LinuxCommandLinePrompt[] = "Enter the Linux kernel command line.\n\nExamples:\nroot=/dev/hda1\nroot=/dev/fd0 read-only\nroot=/dev/sdb1 init=/sbin/init";
UCHAR ReactOSSystemPathPrompt[] = "Enter the path to your ReactOS system directory.\n\nExamples:\n\\REACTOS\n\\ROS";
UCHAR ReactOSOptionsPrompt[] = "Enter the options you want passed to the kernel.\n\nExamples:\n/DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200\n/FASTDETECT /SOS /NOGUIBOOT\n/BASEVIDEO /MAXMEM=64\n/KERNEL=NTKRNLMP.EXE /HAL=HALMPS.DLL";
UCHAR CustomBootPrompt[] = "Press ENTER to boot your custom boot setup.";
VOID OptionMenuCustomBoot(VOID)
{
PUCHAR CustomBootMenuList[] = { "Disk", "Partition", "Boot Sector File", "ReactOS", "Linux" };
U32 CustomBootMenuCount = sizeof(CustomBootMenuList) / sizeof(CustomBootMenuList[0]);
U32 SelectedMenuItem;
if (!UiDisplayMenu(CustomBootMenuList, CustomBootMenuCount, 0, -1, &SelectedMenuItem, TRUE, NULL))
{
// The user pressed ESC
return;
}
switch (SelectedMenuItem)
{
case 0: // Disk
OptionMenuCustomBootDisk();
break;
case 1: // Partition
OptionMenuCustomBootPartition();
break;
case 2: // Boot Sector File
OptionMenuCustomBootBootSectorFile();
break;
case 3: // ReactOS
OptionMenuCustomBootReactOS();
break;
case 4: // Linux
OptionMenuCustomBootLinux();
break;
}
}
VOID OptionMenuCustomBootDisk(VOID)
{
UCHAR SectionName[100];
UCHAR BootDriveString[20];
U32 SectionId;
RtlZeroMemory(SectionName, sizeof(SectionName));
RtlZeroMemory(BootDriveString, sizeof(BootDriveString));
if (!UiEditBox(BootDrivePrompt, BootDriveString, 20))
{
return;
}
// Generate a unique section name
sprintf(SectionName, "CustomBootDisk%d%d%d%d%d%d", getyear(), getday(), getmonth(), gethour(), getminute(), getsecond());
// Add the section
if (!IniAddSection(SectionName, &SectionId))
{
return;
}
// Add the BootType
if (!IniAddSettingValueToSection(SectionId, "BootType", "Drive"))
{
return;
}
// Add the BootDrive
if (!IniAddSettingValueToSection(SectionId, "BootDrive", BootDriveString))
{
return;
}
UiMessageBox(CustomBootPrompt);
LoadAndBootDrive(SectionName);
}
VOID OptionMenuCustomBootPartition(VOID)
{
UCHAR SectionName[100];
UCHAR BootDriveString[20];
UCHAR BootPartitionString[20];
U32 SectionId;
RtlZeroMemory(SectionName, sizeof(SectionName));
RtlZeroMemory(BootDriveString, sizeof(BootDriveString));
RtlZeroMemory(BootPartitionString, sizeof(BootPartitionString));
if (!UiEditBox(BootDrivePrompt, BootDriveString, 20))
{
return;
}
if (!UiEditBox(BootPartitionPrompt, BootPartitionString, 20))
{
return;
}
// Generate a unique section name
sprintf(SectionName, "CustomBootPartition%d%d%d%d%d%d", getyear(), getday(), getmonth(), gethour(), getminute(), getsecond());
// Add the section
if (!IniAddSection(SectionName, &SectionId))
{
return;
}
// Add the BootType
if (!IniAddSettingValueToSection(SectionId, "BootType", "Partition"))
{
return;
}
// Add the BootDrive
if (!IniAddSettingValueToSection(SectionId, "BootDrive", BootDriveString))
{
return;
}
// Add the BootPartition
if (!IniAddSettingValueToSection(SectionId, "BootPartition", BootPartitionString))
{
return;
}
UiMessageBox(CustomBootPrompt);
LoadAndBootPartition(SectionName);
}
VOID OptionMenuCustomBootBootSectorFile(VOID)
{
UCHAR SectionName[100];
UCHAR BootDriveString[20];
UCHAR BootPartitionString[20];
UCHAR BootSectorFileString[200];
U32 SectionId;
RtlZeroMemory(SectionName, sizeof(SectionName));
RtlZeroMemory(BootDriveString, sizeof(BootDriveString));
RtlZeroMemory(BootPartitionString, sizeof(BootPartitionString));
RtlZeroMemory(BootSectorFileString, sizeof(BootSectorFileString));
if (!UiEditBox(BootDrivePrompt, BootDriveString, 20))
{
return;
}
if (!UiEditBox(BootPartitionPrompt, BootPartitionString, 20))
{
return;
}
if (!UiEditBox(BootSectorFilePrompt, BootSectorFileString, 200))
{
return;
}
// Generate a unique section name
sprintf(SectionName, "CustomBootSectorFile%d%d%d%d%d%d", getyear(), getday(), getmonth(), gethour(), getminute(), getsecond());
// Add the section
if (!IniAddSection(SectionName, &SectionId))
{
return;
}
// Add the BootType
if (!IniAddSettingValueToSection(SectionId, "BootType", "BootSector"))
{
return;
}
// Add the BootDrive
if (!IniAddSettingValueToSection(SectionId, "BootDrive", BootDriveString))
{
return;
}
// Add the BootPartition
if (!IniAddSettingValueToSection(SectionId, "BootPartition", BootPartitionString))
{
return;
}
// Add the BootSectorFile
if (!IniAddSettingValueToSection(SectionId, "BootSectorFile", BootSectorFileString))
{
return;
}
UiMessageBox(CustomBootPrompt);
LoadAndBootBootSector(SectionName);
}
VOID OptionMenuCustomBootReactOS(VOID)
{
UCHAR SectionName[100];
UCHAR BootDriveString[20];
UCHAR BootPartitionString[20];
UCHAR ReactOSSystemPath[200];
UCHAR ReactOSARCPath[200];
UCHAR ReactOSOptions[200];
U32 SectionId;
RtlZeroMemory(SectionName, sizeof(SectionName));
RtlZeroMemory(BootDriveString, sizeof(BootDriveString));
RtlZeroMemory(BootPartitionString, sizeof(BootPartitionString));
RtlZeroMemory(ReactOSSystemPath, sizeof(ReactOSSystemPath));
RtlZeroMemory(ReactOSOptions, sizeof(ReactOSOptions));
if (!UiEditBox(BootDrivePrompt, BootDriveString, 20))
{
return;
}
if (!UiEditBox(BootPartitionPrompt, BootPartitionString, 20))
{
return;
}
if (!UiEditBox(ReactOSSystemPathPrompt, ReactOSSystemPath, 200))
{
return;
}
if (!UiEditBox(ReactOSOptionsPrompt, ReactOSOptions, 200))
{
return;
}
// Generate a unique section name
sprintf(SectionName, "CustomReactOS%d%d%d%d%d%d", getyear(), getday(), getmonth(), gethour(), getminute(), getsecond());
// Add the section
if (!IniAddSection(SectionName, &SectionId))
{
return;
}
// Add the BootType
if (!IniAddSettingValueToSection(SectionId, "BootType", "ReactOS"))
{
return;
}
// Construct the ReactOS ARC system path
ConstructArcPath(ReactOSARCPath, ReactOSSystemPath, DriveMapGetBiosDriveNumber(BootDriveString), atoi(BootPartitionString));
// Add the system path
if (!IniAddSettingValueToSection(SectionId, "SystemPath", ReactOSARCPath))
{
return;
}
// Add the CommandLine
if (!IniAddSettingValueToSection(SectionId, "Options", ReactOSOptions))
{
return;
}
UiMessageBox(CustomBootPrompt);
LoadAndBootReactOS(SectionName);
}
VOID OptionMenuCustomBootLinux(VOID)
{
UCHAR SectionName[100];
UCHAR BootDriveString[20];
UCHAR BootPartitionString[20];
UCHAR LinuxKernelString[200];
UCHAR LinuxInitrdString[200];
UCHAR LinuxCommandLineString[200];
U32 SectionId;
RtlZeroMemory(SectionName, sizeof(SectionName));
RtlZeroMemory(BootDriveString, sizeof(BootDriveString));
RtlZeroMemory(BootPartitionString, sizeof(BootPartitionString));
RtlZeroMemory(LinuxKernelString, sizeof(LinuxKernelString));
RtlZeroMemory(LinuxInitrdString, sizeof(LinuxInitrdString));
RtlZeroMemory(LinuxCommandLineString, sizeof(LinuxCommandLineString));
if (!UiEditBox(BootDrivePrompt, BootDriveString, 20))
{
return;
}
if (!UiEditBox(BootPartitionPrompt, BootPartitionString, 20))
{
return;
}
if (!UiEditBox(LinuxKernelPrompt, LinuxKernelString, 200))
{
return;
}
if (!UiEditBox(LinuxInitrdPrompt, LinuxInitrdString, 200))
{
return;
}
if (!UiEditBox(LinuxCommandLinePrompt, LinuxCommandLineString, 200))
{
return;
}
// Generate a unique section name
sprintf(SectionName, "CustomLinux%d%d%d%d%d%d", getyear(), getday(), getmonth(), gethour(), getminute(), getsecond());
// Add the section
if (!IniAddSection(SectionName, &SectionId))
{
return;
}
// Add the BootType
if (!IniAddSettingValueToSection(SectionId, "BootType", "Linux"))
{
return;
}
// Add the BootDrive
if (!IniAddSettingValueToSection(SectionId, "BootDrive", BootDriveString))
{
return;
}
// Add the BootPartition
if (!IniAddSettingValueToSection(SectionId, "BootPartition", BootPartitionString))
{
return;
}
// Add the Kernel
if (!IniAddSettingValueToSection(SectionId, "Kernel", LinuxKernelString))
{
return;
}
// Add the Initrd
if (strlen(LinuxInitrdString) > 0)
{
if (!IniAddSettingValueToSection(SectionId, "Initrd", LinuxInitrdString))
{
return;
}
}
// Add the CommandLine
if (!IniAddSettingValueToSection(SectionId, "CommandLine", LinuxCommandLineString))
{
return;
}
UiMessageBox(CustomBootPrompt);
LoadAndBootLinux(SectionName, "Custom Linux Setup");
}

View File

@@ -1,398 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <freeldr.h>
#include <debug.h>
#include <rtl.h>
#include <comm.h>
#include <portio.h>
#ifdef DEBUG
//#define DEBUG_ALL
//#define DEBUG_INIFILE
//#define DEBUG_REACTOS
//#define DEBUG_CUSTOM
#define DEBUG_NONE
#if defined (DEBUG_ALL)
U32 DebugPrintMask = DPRINT_WARNING | DPRINT_MEMORY | DPRINT_FILESYSTEM |
DPRINT_UI | DPRINT_DISK | DPRINT_CACHE | DPRINT_REACTOS |
DPRINT_LINUX;
#elif defined (DEBUG_INIFILE)
U32 DebugPrintMask = DPRINT_INIFILE;
#elif defined (DEBUG_REACTOS)
U32 DebugPrintMask = DPRINT_REACTOS | DPRINT_REGISTRY;
#elif defined (DEBUG_CUSTOM)
U32 DebugPrintMask = DPRINT_WARNING|DPRINT_FILESYSTEM|DPRINT_MEMORY|DPRINT_LINUX;
#else //#elif defined (DEBUG_NONE)
U32 DebugPrintMask = 0;
#endif
#define SCREEN 0
#define RS232 1
#define BOCHS 2
#define COM1 1
#define COM2 2
#define COM3 3
#define COM4 4
#define BOCHS_OUTPUT_PORT 0xe9
U32 DebugPort = RS232;
//U32 DebugPort = SCREEN;
//U32 DebugPort = BOCHS;
U32 ComPort = COM1;
//U32 BaudRate = 19200;
U32 BaudRate = 115200;
BOOL DebugStartOfLine = TRUE;
VOID DebugInit(VOID)
{
if (DebugPort == RS232)
{
Rs232PortInitialize(ComPort, BaudRate);
}
}
VOID DebugPrintChar(UCHAR Character)
{
if (Character == '\n')
{
DebugStartOfLine = TRUE;
}
if (DebugPort == RS232)
{
if (Character == '\n')
{
Rs232PortPutByte('\r');
}
Rs232PortPutByte(Character);
}
else if (DebugPort == BOCHS)
{
WRITE_PORT_UCHAR((PUCHAR)BOCHS_OUTPUT_PORT, Character);
}
else
{
putchar(Character);
}
}
VOID DebugPrintHeader(U32 Mask)
{
/* No header */
if (Mask == 0)
return;
switch (Mask)
{
case DPRINT_WARNING:
DebugPrintChar('W');
DebugPrintChar('A');
DebugPrintChar('R');
DebugPrintChar('N');
DebugPrintChar('I');
DebugPrintChar('N');
DebugPrintChar('G');
DebugPrintChar(':');
DebugPrintChar(' ');
break;
case DPRINT_MEMORY:
DebugPrintChar('M');
DebugPrintChar('E');
DebugPrintChar('M');
DebugPrintChar('O');
DebugPrintChar('R');
DebugPrintChar('Y');
DebugPrintChar(':');
DebugPrintChar(' ');
break;
case DPRINT_FILESYSTEM:
DebugPrintChar('F');
DebugPrintChar('I');
DebugPrintChar('L');
DebugPrintChar('E');
DebugPrintChar('S');
DebugPrintChar('Y');
DebugPrintChar('S');
DebugPrintChar(':');
DebugPrintChar(' ');
break;
case DPRINT_INIFILE:
DebugPrintChar('I');
DebugPrintChar('N');
DebugPrintChar('I');
DebugPrintChar('F');
DebugPrintChar('I');
DebugPrintChar('L');
DebugPrintChar('E');
DebugPrintChar(':');
DebugPrintChar(' ');
break;
case DPRINT_UI:
DebugPrintChar('U');
DebugPrintChar('I');
DebugPrintChar(':');
DebugPrintChar(' ');
break;
case DPRINT_DISK:
DebugPrintChar('D');
DebugPrintChar('I');
DebugPrintChar('S');
DebugPrintChar('K');
DebugPrintChar(':');
DebugPrintChar(' ');
break;
case DPRINT_CACHE:
DebugPrintChar('C');
DebugPrintChar('A');
DebugPrintChar('C');
DebugPrintChar('H');
DebugPrintChar('E');
DebugPrintChar(':');
DebugPrintChar(' ');
break;
case DPRINT_REGISTRY:
DebugPrintChar('R');
DebugPrintChar('E');
DebugPrintChar('G');
DebugPrintChar('I');
DebugPrintChar('S');
DebugPrintChar('T');
DebugPrintChar('R');
DebugPrintChar('Y');
DebugPrintChar(':');
DebugPrintChar(' ');
break;
case DPRINT_REACTOS:
DebugPrintChar('R');
DebugPrintChar('E');
DebugPrintChar('A');
DebugPrintChar('C');
DebugPrintChar('T');
DebugPrintChar('O');
DebugPrintChar('S');
DebugPrintChar(':');
DebugPrintChar(' ');
break;
case DPRINT_LINUX:
DebugPrintChar('L');
DebugPrintChar('I');
DebugPrintChar('N');
DebugPrintChar('U');
DebugPrintChar('X');
DebugPrintChar(':');
DebugPrintChar(' ');
break;
case DPRINT_HWDETECT:
DebugPrintChar('H');
DebugPrintChar('W');
DebugPrintChar('D');
DebugPrintChar('E');
DebugPrintChar('T');
DebugPrintChar('E');
DebugPrintChar('C');
DebugPrintChar('T');
DebugPrintChar(':');
DebugPrintChar(' ');
break;
default:
DebugPrintChar('U');
DebugPrintChar('N');
DebugPrintChar('K');
DebugPrintChar('N');
DebugPrintChar('O');
DebugPrintChar('W');
DebugPrintChar('N');
DebugPrintChar(':');
DebugPrintChar(' ');
break;
}
}
VOID DebugPrint(U32 Mask, char *format, ...)
{
int *dataptr = (int *) &format;
char c, *ptr, str[16];
int ll;
// Mask out unwanted debug messages
if (!(Mask & DebugPrintMask))
{
return;
}
// Print the header if we have started a new line
if (DebugStartOfLine)
{
DebugPrintHeader(Mask);
DebugStartOfLine = FALSE;
}
dataptr++;
ll = 0;
while ((c = *(format++)))
{
if (c != '%')
{
DebugPrintChar(c);
}
else
{
if (*format == 'I' && *(format+1) == '6' && *(format+2) == '4')
{
ll = 1;
format += 3;
}
else
{
ll = 0;
}
switch (c = *(format++))
{
case 'd': case 'u': case 'x':
if (ll)
{
*convert_i64_to_ascii(str, c, *((unsigned long long*) dataptr)) = 0;
dataptr += 2;
}
else
{
*convert_to_ascii(str, c, *((unsigned long *) dataptr++)) = 0;
}
ptr = str;
while (*ptr)
{
DebugPrintChar(*(ptr++));
}
break;
case 'c':
DebugPrintChar((*(dataptr++))&0xff);
break;
case 's':
ptr = (char *)(*(dataptr++));
while ((c = *(ptr++)))
{
DebugPrintChar(c);
}
break;
case '%':
DebugPrintChar(c);
break;
default:
DebugPrint(Mask, "\nDebugPrint() invalid format specifier - %%%c\n", c);
break;
}
}
}
if (DebugPort == SCREEN)
{
//getch();
}
}
VOID DebugDumpBuffer(U32 Mask, PVOID Buffer, U32 Length)
{
PUCHAR BufPtr = (PUCHAR)Buffer;
U32 Idx;
U32 Idx2;
// Mask out unwanted debug messages
if (!(Mask & DebugPrintMask))
{
return;
}
DebugStartOfLine = FALSE; // We don't want line headers
DebugPrint(Mask, "Dumping buffer at 0x%x with length of %d bytes:\n", Buffer, Length);
for (Idx=0; Idx<Length; )
{
DebugStartOfLine = FALSE; // We don't want line headers
if (Idx < 0x0010)
{
DebugPrint(Mask, "000%x:\t", Idx);
}
else if (Idx < 0x0100)
{
DebugPrint(Mask, "00%x:\t", Idx);
}
else if (Idx < 0x1000)
{
DebugPrint(Mask, "0%x:\t", Idx);
}
else
{
DebugPrint(Mask, "%x:\t", Idx);
}
for (Idx2=0; Idx2<16; Idx2++,Idx++)
{
if (BufPtr[Idx] < 0x10)
{
DebugPrint(Mask, "0");
}
DebugPrint(Mask, "%x", BufPtr[Idx]);
if (Idx2 == 7)
{
DebugPrint(Mask, "-");
}
else
{
DebugPrint(Mask, " ");
}
}
Idx -= 16;
DebugPrint(Mask, " ");
for (Idx2=0; Idx2<16; Idx2++,Idx++)
{
if ((BufPtr[Idx] > 20) && (BufPtr[Idx] < 0x80))
{
DebugPrint(Mask, "%c", BufPtr[Idx]);
}
else
{
DebugPrint(Mask, ".");
}
}
DebugPrint(Mask, "\n");
}
}
#endif // defined DEBUG

View File

@@ -1,112 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <freeldr.h>
#include <disk.h>
#include <arch.h>
#include <rtl.h>
#include <ui.h>
#include <debug.h>
#undef UNIMPLEMENTED
#define UNIMPLEMENTED BugCheck((DPRINT_WARNING, "Unimplemented\n"));
static BOOL bReportError = TRUE;
/////////////////////////////////////////////////////////////////////////////////////////////
// FUNCTIONS
/////////////////////////////////////////////////////////////////////////////////////////////
VOID DiskReportError (BOOL bError)
{
bReportError = bError;
}
VOID DiskError(PUCHAR ErrorString, U32 ErrorCode)
{
UCHAR ErrorCodeString[200];
if (bReportError == FALSE)
return;
sprintf(ErrorCodeString, "%s\n\nError Code: 0x%x\nError: %s", ErrorString, ErrorCode, DiskGetErrorCodeString(ErrorCode));
DbgPrint((DPRINT_DISK, "%s\n", ErrorCodeString));
UiMessageBox(ErrorCodeString);
}
PUCHAR DiskGetErrorCodeString(U32 ErrorCode)
{
switch (ErrorCode)
{
case 0x00: return "no error";
case 0x01: return "bad command passed to driver";
case 0x02: return "address mark not found or bad sector";
case 0x03: return "diskette write protect error";
case 0x04: return "sector not found";
case 0x05: return "fixed disk reset failed";
case 0x06: return "diskette changed or removed";
case 0x07: return "bad fixed disk parameter table";
case 0x08: return "DMA overrun";
case 0x09: return "DMA access across 64k boundary";
case 0x0A: return "bad fixed disk sector flag";
case 0x0B: return "bad fixed disk cylinder";
case 0x0C: return "unsupported track/invalid media";
case 0x0D: return "invalid number of sectors on fixed disk format";
case 0x0E: return "fixed disk controlled data address mark detected";
case 0x0F: return "fixed disk DMA arbitration level out of range";
case 0x10: return "ECC/CRC error on disk read";
case 0x11: return "recoverable fixed disk data error, data fixed by ECC";
case 0x20: return "controller error (NEC for floppies)";
case 0x40: return "seek failure";
case 0x80: return "time out, drive not ready";
case 0xAA: return "fixed disk drive not ready";
case 0xBB: return "fixed disk undefined error";
case 0xCC: return "fixed disk write fault on selected drive";
case 0xE0: return "fixed disk status error/Error reg = 0";
case 0xFF: return "sense operation failed";
default: return "unknown error code";
}
}
// This function is in arch/i386/i386disk.c
//BOOL DiskReadLogicalSectors(U32 DriveNumber, U64 SectorNumber, U32 SectorCount, PVOID Buffer)
BOOL DiskIsDriveRemovable(U32 DriveNumber)
{
// Hard disks use drive numbers >= 0x80
// So if the drive number indicates a hard disk
// then return FALSE
if (DriveNumber >= 0x80)
{
return FALSE;
}
// Drive is a floppy diskette so return TRUE
return TRUE;
}
// This function is in arch/i386/i386disk.c
//VOID DiskStopFloppyMotor(VOID)
// This function is in arch/i386/i386disk.c
//U32 DiskGetCacheableBlockCount(U32 DriveNumber)

View File

@@ -1,44 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <freeldr.h>
#include <disk.h>
#include <rtl.h>
#include <mm.h>
#ifdef __i386__
BOOL DiskGetDriveGeometry(U32 DriveNumber, PGEOMETRY DriveGeometry)
{
// For now just return the geometry as the BIOS reports it
// BytesPerSector is always set to 512 by i386DiskGetDriveParameters()
if (!DiskGetDriveParameters(DriveNumber, DriveGeometry))
{
DiskError("Drive geometry unknown.", 0);
return FALSE;
}
return TRUE;
}
#else
BOOL DiskGetDriveGeometry(U32 DriveNumber, PGEOMETRY DriveGeometry)
{
UNIMPLEMENTED();
}
#endif

View File

@@ -1,243 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <freeldr.h>
#include <disk.h>
#include <rtl.h>
#include <mm.h>
#include <debug.h>
#include <arch.h>
BOOL DiskGetActivePartitionEntry(U32 DriveNumber, PPARTITION_TABLE_ENTRY PartitionTableEntry)
{
U32 BootablePartitionCount = 0;
MASTER_BOOT_RECORD MasterBootRecord;
// Read master boot record
if (!DiskReadBootRecord(DriveNumber, 0, &MasterBootRecord))
{
return FALSE;
}
// Count the bootable partitions
if (MasterBootRecord.PartitionTable[0].BootIndicator == 0x80)
{
BootablePartitionCount++;
BootPartition = 0;
}
if (MasterBootRecord.PartitionTable[1].BootIndicator == 0x80)
{
BootablePartitionCount++;
BootPartition = 1;
}
if (MasterBootRecord.PartitionTable[2].BootIndicator == 0x80)
{
BootablePartitionCount++;
BootPartition = 2;
}
if (MasterBootRecord.PartitionTable[3].BootIndicator == 0x80)
{
BootablePartitionCount++;
BootPartition = 3;
}
// Make sure there was only one bootable partition
if (BootablePartitionCount == 0)
{
DiskError("No bootable (active) partitions found.", 0);
return FALSE;
}
else if (BootablePartitionCount != 1)
{
DiskError("Too many bootable (active) partitions found.", 0);
return FALSE;
}
// Copy the partition table entry
RtlCopyMemory(PartitionTableEntry, &MasterBootRecord.PartitionTable[BootPartition], sizeof(PARTITION_TABLE_ENTRY));
return TRUE;
}
BOOL DiskGetPartitionEntry(U32 DriveNumber, U32 PartitionNumber, PPARTITION_TABLE_ENTRY PartitionTableEntry)
{
MASTER_BOOT_RECORD MasterBootRecord;
PARTITION_TABLE_ENTRY ExtendedPartitionTableEntry;
U32 ExtendedPartitionNumber;
U32 ExtendedPartitionOffset;
U32 Index;
// Read master boot record
if (!DiskReadBootRecord(DriveNumber, 0, &MasterBootRecord))
{
return FALSE;
}
// If they are asking for a primary
// partition then things are easy
if (PartitionNumber < 5)
{
// PartitionNumber is one-based and we need it zero-based
PartitionNumber--;
// Copy the partition table entry
RtlCopyMemory(PartitionTableEntry, &MasterBootRecord.PartitionTable[PartitionNumber], sizeof(PARTITION_TABLE_ENTRY));
return TRUE;
}
else
{
// They want an extended partition entry so we will need
// to loop through all the extended partitions on the disk
// and return the one they want.
ExtendedPartitionNumber = PartitionNumber - 5;
// Set the initial relative starting sector to 0
// This is because extended partition starting
// sectors a numbered relative to their parent
ExtendedPartitionOffset = 0;
for (Index=0; Index<=ExtendedPartitionNumber; Index++)
{
// Get the extended partition table entry
if (!DiskGetFirstExtendedPartitionEntry(&MasterBootRecord, &ExtendedPartitionTableEntry))
{
return FALSE;
}
// Adjust the relative starting sector of the partition
ExtendedPartitionTableEntry.SectorCountBeforePartition += ExtendedPartitionOffset;
if (ExtendedPartitionOffset == 0)
{
// Set the start of the parrent extended partition
ExtendedPartitionOffset = ExtendedPartitionTableEntry.SectorCountBeforePartition;
}
// Read the partition boot record
if (!DiskReadBootRecord(DriveNumber, ExtendedPartitionTableEntry.SectorCountBeforePartition, &MasterBootRecord))
{
return FALSE;
}
// Get the first real partition table entry
if (!DiskGetFirstPartitionEntry(&MasterBootRecord, PartitionTableEntry))
{
return FALSE;
}
// Now correct the start sector of the partition
PartitionTableEntry->SectorCountBeforePartition += ExtendedPartitionTableEntry.SectorCountBeforePartition;
}
// When we get here we should have the correct entry
// already stored in PartitionTableEntry
// so just return TRUE
return TRUE;
}
}
BOOL DiskGetFirstPartitionEntry(PMASTER_BOOT_RECORD MasterBootRecord, PPARTITION_TABLE_ENTRY PartitionTableEntry)
{
U32 Index;
for (Index=0; Index<4; Index++)
{
// Check the system indicator
// If it's not an extended or unused partition
// then we're done
if ((MasterBootRecord->PartitionTable[Index].SystemIndicator != PARTITION_ENTRY_UNUSED) &&
(MasterBootRecord->PartitionTable[Index].SystemIndicator != PARTITION_EXTENDED) &&
(MasterBootRecord->PartitionTable[Index].SystemIndicator != PARTITION_XINT13_EXTENDED))
{
RtlCopyMemory(PartitionTableEntry, &MasterBootRecord->PartitionTable[Index], sizeof(PARTITION_TABLE_ENTRY));
return TRUE;
}
}
return FALSE;
}
BOOL DiskGetFirstExtendedPartitionEntry(PMASTER_BOOT_RECORD MasterBootRecord, PPARTITION_TABLE_ENTRY PartitionTableEntry)
{
U32 Index;
for (Index=0; Index<4; Index++)
{
// Check the system indicator
// If it an extended partition then we're done
if ((MasterBootRecord->PartitionTable[Index].SystemIndicator == PARTITION_EXTENDED) ||
(MasterBootRecord->PartitionTable[Index].SystemIndicator == PARTITION_XINT13_EXTENDED))
{
RtlCopyMemory(PartitionTableEntry, &MasterBootRecord->PartitionTable[Index], sizeof(PARTITION_TABLE_ENTRY));
return TRUE;
}
}
return FALSE;
}
BOOL DiskReadBootRecord(U32 DriveNumber, U64 LogicalSectorNumber, PMASTER_BOOT_RECORD BootRecord)
{
#ifdef DEBUG
U32 Index;
#endif
// Read master boot record
if (!DiskReadLogicalSectors(DriveNumber, LogicalSectorNumber, 1, (PVOID)DISKREADBUFFER))
{
return FALSE;
}
RtlCopyMemory(BootRecord, (PVOID)DISKREADBUFFER, sizeof(MASTER_BOOT_RECORD));
#ifdef DEBUG
DbgPrint((DPRINT_DISK, "Dumping partition table for drive 0x%x:\n", DriveNumber));
DbgPrint((DPRINT_DISK, "Boot record logical start sector = %d\n", LogicalSectorNumber));
DbgPrint((DPRINT_DISK, "sizeof(MASTER_BOOT_RECORD) = 0x%x.\n", sizeof(MASTER_BOOT_RECORD)));
for (Index=0; Index<4; Index++)
{
DbgPrint((DPRINT_DISK, "-------------------------------------------\n"));
DbgPrint((DPRINT_DISK, "Partition %d\n", (Index + 1)));
DbgPrint((DPRINT_DISK, "BootIndicator: 0x%x\n", BootRecord->PartitionTable[Index].BootIndicator));
DbgPrint((DPRINT_DISK, "StartHead: 0x%x\n", BootRecord->PartitionTable[Index].StartHead));
DbgPrint((DPRINT_DISK, "StartSector (Plus 2 cylinder bits): 0x%x\n", BootRecord->PartitionTable[Index].StartSector));
DbgPrint((DPRINT_DISK, "StartCylinder: 0x%x\n", BootRecord->PartitionTable[Index].StartCylinder));
DbgPrint((DPRINT_DISK, "SystemIndicator: 0x%x\n", BootRecord->PartitionTable[Index].SystemIndicator));
DbgPrint((DPRINT_DISK, "EndHead: 0x%x\n", BootRecord->PartitionTable[Index].EndHead));
DbgPrint((DPRINT_DISK, "EndSector (Plus 2 cylinder bits): 0x%x\n", BootRecord->PartitionTable[Index].EndSector));
DbgPrint((DPRINT_DISK, "EndCylinder: 0x%x\n", BootRecord->PartitionTable[Index].EndCylinder));
DbgPrint((DPRINT_DISK, "SectorCountBeforePartition: 0x%x\n", BootRecord->PartitionTable[Index].SectorCountBeforePartition));
DbgPrint((DPRINT_DISK, "PartitionSectorCount: 0x%x\n", BootRecord->PartitionTable[Index].PartitionSectorCount));
}
#endif // defined DEBUG
// Check the partition table magic value
if (BootRecord->MasterBootRecordMagic != 0xaa55)
{
DiskError("Invalid partition table magic (0xaa55)", 0);
return FALSE;
}
return TRUE;
}

View File

@@ -1,227 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <freeldr.h>
#include <drivemap.h>
#include <rtl.h>
#include <inifile.h>
#include <cache.h>
#include <ui.h>
#include <debug.h>
BOOL DriveMapInstalled = FALSE; // Tells us if we have already installed our drive map int 13h handler code
U32 OldInt13HandlerAddress = 0; // Address of BIOS int 13h handler
U32 DriveMapHandlerAddress = 0; // Linear address of our drive map handler
U32 DriveMapHandlerSegOff = 0; // Segment:offset style address of our drive map handler
VOID DriveMapMapDrivesInSection(PUCHAR SectionName)
{
UCHAR SettingName[80];
UCHAR SettingValue[80];
UCHAR ErrorText[260];
UCHAR Drive1[80];
UCHAR Drive2[80];
U32 SectionId;
U32 SectionItemCount;
U32 Index;
U32 Index2;
DRIVE_MAP_LIST DriveMapList;
RtlZeroMemory(&DriveMapList, sizeof(DRIVE_MAP_LIST));
if (!IniOpenSection(SectionName, &SectionId))
{
return;
}
// Get the number of items in this section
SectionItemCount = IniGetNumSectionItems(SectionId);
// Loop through each one and check if its a DriveMap= setting
for (Index=0; Index<SectionItemCount; Index++)
{
// Get the next setting from the .ini file section
if (IniReadSettingByNumber(SectionId, Index, SettingName, 80, SettingValue, 80))
{
if (stricmp(SettingName, "DriveMap") == 0)
{
// Make sure we haven't exceeded the drive map max count
if (DriveMapList.DriveMapCount >= 4)
{
sprintf(ErrorText, "Max DriveMap count exceeded in section [%s]:\n\n%s=%s", SectionName, SettingName, SettingValue);
UiMessageBox(ErrorText);
continue;
}
RtlZeroMemory(Drive1, 80);
RtlZeroMemory(Drive2, 80);
strcpy(Drive1, SettingValue);
// Parse the setting value and separate a string "hd0,hd1"
// into two strings "hd0" and "hd1"
for (Index2=0; Index2<strlen(Drive1); Index2++)
{
// Check if this character is the separater character (comma - ',')
if (Drive1[Index2] == ',')
{
Drive1[Index2] = '\0';
strcpy(Drive2, &Drive1[Index2+1]);
break;
}
}
// Make sure we got good values before we add them to the map
if (!DriveMapIsValidDriveString(Drive1) || !DriveMapIsValidDriveString(Drive2))
{
sprintf(ErrorText, "Error in DriveMap setting in section [%s]:\n\n%s=%s", SectionName, SettingName, SettingValue);
UiMessageBox(ErrorText);
continue;
}
// Add them to the map
DriveMapList.DriveMap[(DriveMapList.DriveMapCount * 2)] = DriveMapGetBiosDriveNumber(Drive1);
DriveMapList.DriveMap[(DriveMapList.DriveMapCount * 2)+1] = DriveMapGetBiosDriveNumber(Drive2);
DriveMapList.DriveMapCount++;
DbgPrint((DPRINT_WARNING, "Mapping BIOS drive 0x%x to drive 0x%x\n", DriveMapGetBiosDriveNumber(Drive1), DriveMapGetBiosDriveNumber(Drive2)));
}
}
}
if (DriveMapList.DriveMapCount)
{
DbgPrint((DPRINT_WARNING, "Installing Int13 drive map for %d drives.\n", DriveMapList.DriveMapCount));
DriveMapInstallInt13Handler(&DriveMapList);
}
else
{
DbgPrint((DPRINT_WARNING, "Removing any previously installed Int13 drive map.\n"));
DriveMapRemoveInt13Handler();
}
}
BOOL DriveMapIsValidDriveString(PUCHAR DriveString)
{
U32 Index;
// Now verify that the user has given us appropriate strings
if ((strlen(DriveString) < 3) ||
((DriveString[0] != 'f') && (DriveString[0] != 'F') && (DriveString[0] != 'h') && (DriveString[0] != 'H')) ||
((DriveString[1] != 'd') && (DriveString[1] != 'D')))
{
return FALSE;
}
// Now verify that the user has given us appropriate numbers
// Make sure that only numeric characters were given
for (Index=2; Index<strlen(DriveString); Index++)
{
if (DriveString[Index] < '0' || DriveString[Index] > '9')
{
return FALSE;
}
}
// Now make sure that they are not outrageous values (i.e. hd90874)
if ((atoi(&DriveString[2]) < 0) || (atoi(&DriveString[2]) > 0xff))
{
return FALSE;
}
return TRUE;
}
U32 DriveMapGetBiosDriveNumber(PUCHAR DeviceName)
{
U32 BiosDriveNumber = 0;
// If they passed in a number string then just
// convert it to decimal and return it
if (DeviceName[0] >= '0' && DeviceName[0] <= '9')
{
return atoi(DeviceName);
}
// Convert the drive number string into a number
// 'hd1' = 1
BiosDriveNumber = atoi(&DeviceName[2]);
// If it's a hard disk then set the high bit
if ((DeviceName[0] == 'h' || DeviceName[0] == 'H') &&
(DeviceName[1] == 'd' || DeviceName[1] == 'D'))
{
BiosDriveNumber |= 0x80;
}
return BiosDriveNumber;
}
VOID DriveMapInstallInt13Handler(PDRIVE_MAP_LIST DriveMap)
{
U32* RealModeIVT = (U32*)0x00000000;
U16* BiosLowMemorySize = (U16*)0x00000413;
if (!DriveMapInstalled)
{
// Get the old INT 13h handler address from the vector table
OldInt13HandlerAddress = RealModeIVT[0x13];
// Decrease the size of low memory
(*BiosLowMemorySize)--;
// Get linear address for drive map handler
DriveMapHandlerAddress = (U32)(*BiosLowMemorySize) << 10;
// Convert to segment:offset style address
DriveMapHandlerSegOff = (DriveMapHandlerAddress << 12) & 0xffff0000;
}
// Copy the drive map structure to the proper place
RtlCopyMemory(&DriveMapInt13HandlerMapList, DriveMap, sizeof(DRIVE_MAP_LIST));
// Set the address of the BIOS INT 13h handler
DriveMapOldInt13HandlerAddress = OldInt13HandlerAddress;
// Copy the code to our reserved area
RtlCopyMemory((PVOID)DriveMapHandlerAddress, &DriveMapInt13HandlerStart, ((U32)&DriveMapInt13HandlerEnd - (U32)&DriveMapInt13HandlerStart));
// Update the IVT
RealModeIVT[0x13] = DriveMapHandlerSegOff;
CacheInvalidateCacheData();
DriveMapInstalled = TRUE;
}
VOID DriveMapRemoveInt13Handler(VOID)
{
U32* RealModeIVT = (U32*)0x00000000;
U16* BiosLowMemorySize = (U16*)0x00000413;
if (DriveMapInstalled)
{
// Get the old INT 13h handler address from the vector table
RealModeIVT[0x13] = OldInt13HandlerAddress;
// Increase the size of low memory
(*BiosLowMemorySize)++;
CacheInvalidateCacheData();
DriveMapInstalled = FALSE;
}
}

View File

@@ -1,51 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <freeldr.h>
#include <rtl.h>
#include <arch.h>
#include <mm.h>
#include <debug.h>
#include <bootmgr.h>
#include <fs.h>
// Variables BootDrive & BootPartition moved to asmcode.S
//U32 BootDrive = 0; // BIOS boot drive, 0-A:, 1-B:, 0x80-C:, 0x81-D:, etc.
//U32 BootPartition = 0; // Boot Partition, 1-4
VOID BootMain(VOID)
{
EnableA20();
#ifdef DEBUG
DebugInit();
#endif
DbgPrint((DPRINT_WARNING, "BootMain() called. BootDrive = 0x%x BootPartition = %d\n", BootDrive, BootPartition));
if (!MmInitializeMemoryManager())
{
printf("Press any key to reboot.\n");
getch();
return;
}
RunLoader();
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,697 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __EXT2_H
#define __EXT2_H
/*
* linux/include/linux/ext3_fs.h
*
* Copyright (C) 1992, 1993, 1994, 1995
* Remy Card (card@masi.ibp.fr)
* Laboratoire MASI - Institut Blaise Pascal
* Universite Pierre et Marie Curie (Paris VI)
*
* from
*
* linux/include/linux/minix_fs.h
*
* Copyright (C) 1991, 1992 Linus Torvalds
*/
#ifndef _LINUX_EXT3_FS_H
#define _LINUX_EXT3_FS_H
//#include <linux/types.h>
/*
* The second extended filesystem constants/structures
*/
/*
* Define EXT3FS_DEBUG to produce debug messages
*/
#undef EXT3FS_DEBUG
/*
* Define EXT3_PREALLOCATE to preallocate data blocks for expanding files
*/
#undef EXT3_PREALLOCATE /* @@@ Fix this! */
#define EXT3_DEFAULT_PREALLOC_BLOCKS 8
/*
* The second extended file system version
*/
#define EXT3FS_DATE "10 Jan 2002"
#define EXT3FS_VERSION "2.4-0.9.17"
/*
* Debug code
*/
#ifdef EXT3FS_DEBUG
#define ext3_debug(f, a...) \
do { \
printk (KERN_DEBUG "EXT3-fs DEBUG (%s, %d): %s:", \
__FILE__, __LINE__, __FUNCTION__); \
printk (KERN_DEBUG f, ## a); \
} while (0)
#else
#define ext3_debug(f, a...) do {} while (0)
#endif
/*
* Special inodes numbers
*/
#define EXT3_BAD_INO 1 /* Bad blocks inode */
#define EXT3_ROOT_INO 2 /* Root inode */
#define EXT3_ACL_IDX_INO 3 /* ACL inode */
#define EXT3_ACL_DATA_INO 4 /* ACL inode */
#define EXT3_BOOT_LOADER_INO 5 /* Boot loader inode */
#define EXT3_UNDEL_DIR_INO 6 /* Undelete directory inode */
#define EXT3_RESIZE_INO 7 /* Reserved group descriptors inode */
#define EXT3_JOURNAL_INO 8 /* Journal inode */
/* First non-reserved inode for old ext3 filesystems */
#define EXT3_GOOD_OLD_FIRST_INO 11
/*
* The second extended file system magic number
*/
#define EXT3_SUPER_MAGIC 0xEF53
/*
* Maximal count of links to a file
*/
#define EXT3_LINK_MAX 32000
/*
* Macro-instructions used to manage several block sizes
*/
#define EXT3_MIN_BLOCK_SIZE 1024
#define EXT3_MAX_BLOCK_SIZE 4096
#define EXT3_MIN_BLOCK_LOG_SIZE 10
#ifdef __KERNEL__
# define EXT3_BLOCK_SIZE(s) ((s)->s_blocksize)
#else
# define EXT3_BLOCK_SIZE(s) (EXT3_MIN_BLOCK_SIZE << (s)->s_log_block_size)
#endif
#define EXT3_ACLE_PER_BLOCK(s) (EXT3_BLOCK_SIZE(s) / sizeof (struct ext3_acl_entry))
#define EXT3_ADDR_PER_BLOCK(s) (EXT3_BLOCK_SIZE(s) / sizeof (__u32))
#ifdef __KERNEL__
# define EXT3_BLOCK_SIZE_BITS(s) ((s)->s_blocksize_bits)
#else
# define EXT3_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10)
#endif
#ifdef __KERNEL__
#define EXT3_ADDR_PER_BLOCK_BITS(s) ((s)->u.ext3_sb.s_addr_per_block_bits)
#define EXT3_INODE_SIZE(s) ((s)->u.ext3_sb.s_inode_size)
#define EXT3_FIRST_INO(s) ((s)->u.ext3_sb.s_first_ino)
#else
#define EXT3_INODE_SIZE(s) (((s)->s_rev_level == EXT3_GOOD_OLD_REV) ? \
EXT3_GOOD_OLD_INODE_SIZE : \
(s)->s_inode_size)
#define EXT3_FIRST_INO(s) (((s)->s_rev_level == EXT3_GOOD_OLD_REV) ? \
EXT3_GOOD_OLD_FIRST_INO : \
(s)->s_first_ino)
#endif
/*
* Macro-instructions used to manage fragments
*/
#define EXT3_MIN_FRAG_SIZE 1024
#define EXT3_MAX_FRAG_SIZE 4096
#define EXT3_MIN_FRAG_LOG_SIZE 10
#ifdef __KERNEL__
# define EXT3_FRAG_SIZE(s) ((s)->u.ext3_sb.s_frag_size)
# define EXT3_FRAGS_PER_BLOCK(s) ((s)->u.ext3_sb.s_frags_per_block)
#else
# define EXT3_FRAG_SIZE(s) (EXT3_MIN_FRAG_SIZE << (s)->s_log_frag_size)
# define EXT3_FRAGS_PER_BLOCK(s) (EXT3_BLOCK_SIZE(s) / EXT3_FRAG_SIZE(s))
#endif
/*
* ACL structures
*/
struct ext3_acl_header /* Header of Access Control Lists */
{
__u32 aclh_size;
__u32 aclh_file_count;
__u32 aclh_acle_count;
__u32 aclh_first_acle;
};
struct ext3_acl_entry /* Access Control List Entry */
{
__u32 acle_size;
__u16 acle_perms; /* Access permissions */
__u16 acle_type; /* Type of entry */
__u16 acle_tag; /* User or group identity */
__u16 acle_pad1;
__u32 acle_next; /* Pointer on next entry for the */
/* same inode or on next free entry */
};
/*
* Structure of a blocks group descriptor
*/
struct ext3_group_desc
{
__u32 bg_block_bitmap; /* Blocks bitmap block */
__u32 bg_inode_bitmap; /* Inodes bitmap block */
__u32 bg_inode_table; /* Inodes table block */
__u16 bg_free_blocks_count; /* Free blocks count */
__u16 bg_free_inodes_count; /* Free inodes count */
__u16 bg_used_dirs_count; /* Directories count */
__u16 bg_pad;
__u32 bg_reserved[3];
};
/*
* Macro-instructions used to manage group descriptors
*/
#ifdef __KERNEL__
# define EXT3_BLOCKS_PER_GROUP(s) ((s)->u.ext3_sb.s_blocks_per_group)
# define EXT3_DESC_PER_BLOCK(s) ((s)->u.ext3_sb.s_desc_per_block)
# define EXT3_INODES_PER_GROUP(s) ((s)->u.ext3_sb.s_inodes_per_group)
# define EXT3_DESC_PER_BLOCK_BITS(s) ((s)->u.ext3_sb.s_desc_per_block_bits)
#else
# define EXT3_BLOCKS_PER_GROUP(s) ((s)->s_blocks_per_group)
# define EXT3_DESC_PER_BLOCK(s) (EXT3_BLOCK_SIZE(s) / sizeof (struct ext3_group_desc))
# define EXT3_INODES_PER_GROUP(s) ((s)->s_inodes_per_group)
#endif
/*
* Constants relative to the data blocks
*/
#define EXT3_NDIR_BLOCKS 12
#define EXT3_IND_BLOCK EXT3_NDIR_BLOCKS
#define EXT3_DIND_BLOCK (EXT3_IND_BLOCK + 1)
#define EXT3_TIND_BLOCK (EXT3_DIND_BLOCK + 1)
#define EXT3_N_BLOCKS (EXT3_TIND_BLOCK + 1)
/*
* Inode flags
*/
#define EXT3_SECRM_FL 0x00000001 /* Secure deletion */
#define EXT3_UNRM_FL 0x00000002 /* Undelete */
#define EXT3_COMPR_FL 0x00000004 /* Compress file */
#define EXT3_SYNC_FL 0x00000008 /* Synchronous updates */
#define EXT3_IMMUTABLE_FL 0x00000010 /* Immutable file */
#define EXT3_APPEND_FL 0x00000020 /* writes to file may only append */
#define EXT3_NODUMP_FL 0x00000040 /* do not dump file */
#define EXT3_NOATIME_FL 0x00000080 /* do not update atime */
/* Reserved for compression usage... */
#define EXT3_DIRTY_FL 0x00000100
#define EXT3_COMPRBLK_FL 0x00000200 /* One or more compressed clusters */
#define EXT3_NOCOMPR_FL 0x00000400 /* Don't compress */
#define EXT3_ECOMPR_FL 0x00000800 /* Compression error */
/* End compression flags --- maybe not all used */
#define EXT3_INDEX_FL 0x00001000 /* hash-indexed directory */
#define EXT3_IMAGIC_FL 0x00002000 /* AFS directory */
#define EXT3_JOURNAL_DATA_FL 0x00004000 /* file data should be journaled */
#define EXT3_RESERVED_FL 0x80000000 /* reserved for ext3 lib */
#define EXT3_FL_USER_VISIBLE 0x00005FFF /* User visible flags */
#define EXT3_FL_USER_MODIFIABLE 0x000000FF /* User modifiable flags */
/*
* Inode dynamic state flags
*/
#define EXT3_STATE_JDATA 0x00000001 /* journaled data exists */
#define EXT3_STATE_NEW 0x00000002 /* inode is newly created */
/*
* ioctl commands
*/
#define EXT3_IOC_GETFLAGS _IOR('f', 1, long)
#define EXT3_IOC_SETFLAGS _IOW('f', 2, long)
#define EXT3_IOC_GETVERSION _IOR('f', 3, long)
#define EXT3_IOC_SETVERSION _IOW('f', 4, long)
#define EXT3_IOC_GETVERSION_OLD _IOR('v', 1, long)
#define EXT3_IOC_SETVERSION_OLD _IOW('v', 2, long)
#ifdef CONFIG_JBD_DEBUG
#define EXT3_IOC_WAIT_FOR_READONLY _IOR('f', 99, long)
#endif
/*
* Structure of an inode on the disk
*/
struct ext3_inode {
__u16 i_mode; /* File mode */
__u16 i_uid; /* Low 16 bits of Owner Uid */
__u32 i_size; /* Size in bytes */
__u32 i_atime; /* Access time */
__u32 i_ctime; /* Creation time */
__u32 i_mtime; /* Modification time */
__u32 i_dtime; /* Deletion Time */
__u16 i_gid; /* Low 16 bits of Group Id */
__u16 i_links_count; /* Links count */
__u32 i_blocks; /* Blocks count */
__u32 i_flags; /* File flags */
union {
struct {
__u32 l_i_reserved1;
} linux1;
struct {
__u32 h_i_translator;
} hurd1;
struct {
__u32 m_i_reserved1;
} masix1;
} osd1; /* OS dependent 1 */
__u32 i_block[EXT3_N_BLOCKS];/* Pointers to blocks */
__u32 i_generation; /* File version (for NFS) */
__u32 i_file_acl; /* File ACL */
__u32 i_dir_acl; /* Directory ACL */
__u32 i_faddr; /* Fragment address */
union {
struct {
__u8 l_i_frag; /* Fragment number */
__u8 l_i_fsize; /* Fragment size */
__u16 i_pad1;
__u16 l_i_uid_high; /* these 2 fields */
__u16 l_i_gid_high; /* were reserved2[0] */
__u32 l_i_reserved2;
} linux2;
struct {
__u8 h_i_frag; /* Fragment number */
__u8 h_i_fsize; /* Fragment size */
__u16 h_i_mode_high;
__u16 h_i_uid_high;
__u16 h_i_gid_high;
__u32 h_i_author;
} hurd2;
struct {
__u8 m_i_frag; /* Fragment number */
__u8 m_i_fsize; /* Fragment size */
__u16 m_pad1;
__u32 m_i_reserved2[2];
} masix2;
} osd2; /* OS dependent 2 */
};
#define i_size_high i_dir_acl
#if defined(__KERNEL__) || defined(__linux__)
#define i_reserved1 osd1.linux1.l_i_reserved1
#define i_frag osd2.linux2.l_i_frag
#define i_fsize osd2.linux2.l_i_fsize
#define i_uid_low i_uid
#define i_gid_low i_gid
#define i_uid_high osd2.linux2.l_i_uid_high
#define i_gid_high osd2.linux2.l_i_gid_high
#define i_reserved2 osd2.linux2.l_i_reserved2
#elif defined(__GNU__)
#define i_translator osd1.hurd1.h_i_translator
#define i_frag osd2.hurd2.h_i_frag;
#define i_fsize osd2.hurd2.h_i_fsize;
#define i_uid_high osd2.hurd2.h_i_uid_high
#define i_gid_high osd2.hurd2.h_i_gid_high
#define i_author osd2.hurd2.h_i_author
#elif defined(__masix__)
#define i_reserved1 osd1.masix1.m_i_reserved1
#define i_frag osd2.masix2.m_i_frag
#define i_fsize osd2.masix2.m_i_fsize
#define i_reserved2 osd2.masix2.m_i_reserved2
#endif /* defined(__KERNEL__) || defined(__linux__) */
/*
* File system states
*/
#define EXT3_VALID_FS 0x0001 /* Unmounted cleanly */
#define EXT3_ERROR_FS 0x0002 /* Errors detected */
#define EXT3_ORPHAN_FS 0x0004 /* Orphans being recovered */
/*
* Mount flags
*/
#define EXT3_MOUNT_CHECK 0x0001 /* Do mount-time checks */
#define EXT3_MOUNT_GRPID 0x0004 /* Create files with directory's group */
#define EXT3_MOUNT_DEBUG 0x0008 /* Some debugging messages */
#define EXT3_MOUNT_ERRORS_CONT 0x0010 /* Continue on errors */
#define EXT3_MOUNT_ERRORS_RO 0x0020 /* Remount fs ro on errors */
#define EXT3_MOUNT_ERRORS_PANIC 0x0040 /* Panic on errors */
#define EXT3_MOUNT_MINIX_DF 0x0080 /* Mimics the Minix statfs */
#define EXT3_MOUNT_NOLOAD 0x0100 /* Don't use existing journal*/
#define EXT3_MOUNT_ABORT 0x0200 /* Fatal error detected */
#define EXT3_MOUNT_DATA_FLAGS 0x0C00 /* Mode for data writes: */
#define EXT3_MOUNT_JOURNAL_DATA 0x0400 /* Write data to journal */
#define EXT3_MOUNT_ORDERED_DATA 0x0800 /* Flush data before commit */
#define EXT3_MOUNT_WRITEBACK_DATA 0x0C00 /* No data ordering */
#define EXT3_MOUNT_UPDATE_JOURNAL 0x1000 /* Update the journal format */
#define EXT3_MOUNT_NO_UID32 0x2000 /* Disable 32-bit UIDs */
/* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
#ifndef _LINUX_EXT2_FS_H
#define clear_opt(o, opt) o &= ~EXT3_MOUNT_##opt
#define set_opt(o, opt) o |= EXT3_MOUNT_##opt
#define test_opt(sb, opt) ((sb)->u.ext3_sb.s_mount_opt & \
EXT3_MOUNT_##opt)
#else
#define EXT2_MOUNT_NOLOAD EXT3_MOUNT_NOLOAD
#define EXT2_MOUNT_ABORT EXT3_MOUNT_ABORT
#endif
#define ext3_set_bit ext2_set_bit
#define ext3_clear_bit ext2_clear_bit
#define ext3_test_bit ext2_test_bit
#define ext3_find_first_zero_bit ext2_find_first_zero_bit
#define ext3_find_next_zero_bit ext2_find_next_zero_bit
/*
* Maximal mount counts between two filesystem checks
*/
#define EXT3_DFL_MAX_MNT_COUNT 20 /* Allow 20 mounts */
#define EXT3_DFL_CHECKINTERVAL 0 /* Don't use interval check */
/*
* Behaviour when detecting errors
*/
#define EXT3_ERRORS_CONTINUE 1 /* Continue execution */
#define EXT3_ERRORS_RO 2 /* Remount fs read-only */
#define EXT3_ERRORS_PANIC 3 /* Panic */
#define EXT3_ERRORS_DEFAULT EXT3_ERRORS_CONTINUE
/*
* Structure of the super block
*/
struct ext3_super_block {
/*00*/ __u32 s_inodes_count; /* Inodes count */
__u32 s_blocks_count; /* Blocks count */
__u32 s_r_blocks_count; /* Reserved blocks count */
__u32 s_free_blocks_count; /* Free blocks count */
/*10*/ __u32 s_free_inodes_count; /* Free inodes count */
__u32 s_first_data_block; /* First Data Block */
__u32 s_log_block_size; /* Block size */
__s32 s_log_frag_size; /* Fragment size */
/*20*/ __u32 s_blocks_per_group; /* # Blocks per group */
__u32 s_frags_per_group; /* # Fragments per group */
__u32 s_inodes_per_group; /* # Inodes per group */
__u32 s_mtime; /* Mount time */
/*30*/ __u32 s_wtime; /* Write time */
__u16 s_mnt_count; /* Mount count */
__s16 s_max_mnt_count; /* Maximal mount count */
__u16 s_magic; /* Magic signature */
__u16 s_state; /* File system state */
__u16 s_errors; /* Behaviour when detecting errors */
__u16 s_minor_rev_level; /* minor revision level */
/*40*/ __u32 s_lastcheck; /* time of last check */
__u32 s_checkinterval; /* max. time between checks */
__u32 s_creator_os; /* OS */
__u32 s_rev_level; /* Revision level */
/*50*/ __u16 s_def_resuid; /* Default uid for reserved blocks */
__u16 s_def_resgid; /* Default gid for reserved blocks */
/*
* These fields are for EXT3_DYNAMIC_REV superblocks only.
*
* Note: the difference between the compatible feature set and
* the incompatible feature set is that if there is a bit set
* in the incompatible feature set that the kernel doesn't
* know about, it should refuse to mount the filesystem.
*
* e2fsck's requirements are more strict; if it doesn't know
* about a feature in either the compatible or incompatible
* feature set, it must abort and not try to meddle with
* things it doesn't understand...
*/
__u32 s_first_ino; /* First non-reserved inode */
__u16 s_inode_size; /* size of inode structure */
__u16 s_block_group_nr; /* block group # of this superblock */
__u32 s_feature_compat; /* compatible feature set */
/*60*/ __u32 s_feature_incompat; /* incompatible feature set */
__u32 s_feature_ro_compat; /* readonly-compatible feature set */
/*68*/ __u8 s_uuid[16]; /* 128-bit uuid for volume */
/*78*/ char s_volume_name[16]; /* volume name */
/*88*/ char s_last_mounted[64]; /* directory where last mounted */
/*C8*/ __u32 s_algorithm_usage_bitmap; /* For compression */
/*
* Performance hints. Directory preallocation should only
* happen if the EXT3_FEATURE_COMPAT_DIR_PREALLOC flag is on.
*/
__u8 s_prealloc_blocks; /* Nr of blocks to try to preallocate*/
__u8 s_prealloc_dir_blocks; /* Nr to preallocate for dirs */
__u16 s_padding1;
/*
* Journaling support valid if EXT3_FEATURE_COMPAT_HAS_JOURNAL set.
*/
/*D0*/ __u8 s_journal_uuid[16]; /* uuid of journal superblock */
/*E0*/ __u32 s_journal_inum; /* inode number of journal file */
__u32 s_journal_dev; /* device number of journal file */
__u32 s_last_orphan; /* start of list of inodes to delete */
/*EC*/ __u32 s_reserved[197]; /* Padding to the end of the block */
};
#ifdef __KERNEL__
#define EXT3_SB(sb) (&((sb)->u.ext3_sb))
#define EXT3_I(inode) (&((inode)->u.ext3_i))
#else
/* Assume that user mode programs are passing in an ext3fs superblock, not
* a kernel struct super_block. This will allow us to call the feature-test
* macros from user land. */
#define EXT3_SB(sb) (sb)
#endif
#define NEXT_ORPHAN(inode) (inode)->u.ext3_i.i_dtime
/*
* Codes for operating systems
*/
#define EXT3_OS_LINUX 0
#define EXT3_OS_HURD 1
#define EXT3_OS_MASIX 2
#define EXT3_OS_FREEBSD 3
#define EXT3_OS_LITES 4
/*
* Revision levels
*/
#define EXT3_GOOD_OLD_REV 0 /* The good old (original) format */
#define EXT3_DYNAMIC_REV 1 /* V2 format w/ dynamic inode sizes */
#define EXT3_CURRENT_REV EXT3_GOOD_OLD_REV
#define EXT3_MAX_SUPP_REV EXT3_DYNAMIC_REV
#define EXT3_GOOD_OLD_INODE_SIZE 128
/*
* Feature set definitions
*/
#define EXT3_HAS_COMPAT_FEATURE(sb,mask) \
( EXT3_SB(sb)->s_es->s_feature_compat & cpu_to_le32(mask) )
#define EXT3_HAS_RO_COMPAT_FEATURE(sb,mask) \
( EXT3_SB(sb)->s_es->s_feature_ro_compat & cpu_to_le32(mask) )
#define EXT3_HAS_INCOMPAT_FEATURE(sb,mask) \
( EXT3_SB(sb)->s_es->s_feature_incompat & cpu_to_le32(mask) )
#define EXT3_SET_COMPAT_FEATURE(sb,mask) \
EXT3_SB(sb)->s_es->s_feature_compat |= cpu_to_le32(mask)
#define EXT3_SET_RO_COMPAT_FEATURE(sb,mask) \
EXT3_SB(sb)->s_es->s_feature_ro_compat |= cpu_to_le32(mask)
#define EXT3_SET_INCOMPAT_FEATURE(sb,mask) \
EXT3_SB(sb)->s_es->s_feature_incompat |= cpu_to_le32(mask)
#define EXT3_CLEAR_COMPAT_FEATURE(sb,mask) \
EXT3_SB(sb)->s_es->s_feature_compat &= ~cpu_to_le32(mask)
#define EXT3_CLEAR_RO_COMPAT_FEATURE(sb,mask) \
EXT3_SB(sb)->s_es->s_feature_ro_compat &= ~cpu_to_le32(mask)
#define EXT3_CLEAR_INCOMPAT_FEATURE(sb,mask) \
EXT3_SB(sb)->s_es->s_feature_incompat &= ~cpu_to_le32(mask)
#define EXT3_FEATURE_COMPAT_DIR_PREALLOC 0x0001
#define EXT3_FEATURE_COMPAT_IMAGIC_INODES 0x0002
#define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004
#define EXT3_FEATURE_COMPAT_EXT_ATTR 0x0008
#define EXT3_FEATURE_COMPAT_RESIZE_INODE 0x0010
#define EXT3_FEATURE_COMPAT_DIR_INDEX 0x0020
#define EXT3_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001
#define EXT3_FEATURE_RO_COMPAT_LARGE_FILE 0x0002
#define EXT3_FEATURE_RO_COMPAT_BTREE_DIR 0x0004
#define EXT3_FEATURE_INCOMPAT_COMPRESSION 0x0001
#define EXT3_FEATURE_INCOMPAT_FILETYPE 0x0002
#define EXT3_FEATURE_INCOMPAT_RECOVER 0x0004 /* Needs recovery */
#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV 0x0008 /* Journal device */
#define EXT3_FEATURE_COMPAT_SUPP 0
/*#define EXT3_FEATURE_INCOMPAT_SUPP (EXT3_FEATURE_INCOMPAT_FILETYPE| \
EXT3_FEATURE_INCOMPAT_RECOVER)*/
#define EXT3_FEATURE_INCOMPAT_SUPP (EXT3_FEATURE_INCOMPAT_FILETYPE)
#define EXT3_FEATURE_RO_COMPAT_SUPP (EXT3_FEATURE_RO_COMPAT_SPARSE_SUPER| \
EXT3_FEATURE_RO_COMPAT_LARGE_FILE| \
EXT3_FEATURE_RO_COMPAT_BTREE_DIR)
/*
* Default values for user and/or group using reserved blocks
*/
#define EXT3_DEF_RESUID 0
#define EXT3_DEF_RESGID 0
/*
* Structure of a directory entry
*/
#define EXT3_NAME_LEN 255
struct ext3_dir_entry {
__u32 inode; /* Inode number */
__u16 rec_len; /* Directory entry length */
__u16 name_len; /* Name length */
char name[EXT3_NAME_LEN]; /* File name */
};
/*
* The new version of the directory entry. Since EXT3 structures are
* stored in intel byte order, and the name_len field could never be
* bigger than 255 chars, it's safe to reclaim the extra byte for the
* file_type field.
*/
struct ext3_dir_entry_2 {
__u32 inode; /* Inode number */
__u16 rec_len; /* Directory entry length */
__u8 name_len; /* Name length */
__u8 file_type;
char name[EXT3_NAME_LEN]; /* File name */
};
/*
* Ext3 directory file types. Only the low 3 bits are used. The
* other bits are reserved for now.
*/
#define EXT3_FT_UNKNOWN 0
#define EXT3_FT_REG_FILE 1
#define EXT3_FT_DIR 2
#define EXT3_FT_CHRDEV 3
#define EXT3_FT_BLKDEV 4
#define EXT3_FT_FIFO 5
#define EXT3_FT_SOCK 6
#define EXT3_FT_SYMLINK 7
#define EXT3_FT_MAX 8
/*
* EXT3_DIR_PAD defines the directory entries boundaries
*
* NOTE: It must be a multiple of 4
*/
#define EXT3_DIR_PAD 4
#define EXT3_DIR_ROUND (EXT3_DIR_PAD - 1)
#define EXT3_DIR_REC_LEN(name_len) (((name_len) + 8 + EXT3_DIR_ROUND) & \
~EXT3_DIR_ROUND)
#ifdef __KERNEL__
/*
* Describe an inode's exact location on disk and in memory
*/
struct ext3_iloc
{
struct buffer_head *bh;
struct ext3_inode *raw_inode;
unsigned long block_group;
};
#endif /* __KERNEL__ */
#endif /* _LINUX_EXT3_FS_H */
typedef struct ext3_super_block EXT2_SUPER_BLOCK, *PEXT2_SUPER_BLOCK;
typedef struct ext3_inode EXT2_INODE, *PEXT2_INODE;
typedef struct ext3_group_desc EXT2_GROUP_DESC, *PEXT2_GROUP_DESC;
typedef struct ext3_dir_entry_2 EXT2_DIR_ENTRY, *PEXT2_DIR_ENTRY;
// EXT2_INODE::i_mode values
#define EXT2_S_IRWXO 0x0007 // Other mask
#define EXT2_S_IXOTH 0x0001 // ---------x execute
#define EXT2_S_IWOTH 0x0002 // --------w- write
#define EXT2_S_IROTH 0x0004 // -------r-- read
#define EXT2_S_IRWXG 0x0038 // Group mask
#define EXT2_S_IXGRP 0x0008 // ------x--- execute
#define EXT2_S_IWGRP 0x0010 // -----w---- write
#define EXT2_S_IRGRP 0x0020 // ----r----- read
#define EXT2_S_IRWXU 0x01C0 // User mask
#define EXT2_S_IXUSR 0x0040 // ---x------ execute
#define EXT2_S_IWUSR 0x0080 // --w------- write
#define EXT2_S_IRUSR 0x0100 // -r-------- read
#define EXT2_S_ISVTX 0x0200 // Sticky bit
#define EXT2_S_ISGID 0x0400 // SGID
#define EXT2_S_ISUID 0x0800 // SUID
#define EXT2_S_IFMT 0xF000 // Format mask
#define EXT2_S_IFIFO 0x1000 // FIFO buffer
#define EXT2_S_IFCHR 0x2000 // Character device
#define EXT2_S_IFDIR 0x4000 // Directory
#define EXT2_S_IFBLK 0x6000 // Block device
#define EXT2_S_IFREG 0x8000 // Regular file
#define EXT2_S_IFLNK 0xA000 // Symbolic link
#define EXT2_S_IFSOCK 0xC000 // Socket
#define FAST_SYMLINK_MAX_NAME_SIZE (EXT3_N_BLOCKS * sizeof(U32)) /* 60 bytes */
typedef struct
{
U64 FileSize; // File size
U64 FilePointer; // File pointer
U32* FileBlockList; // File block list
U8 DriveNumber; // Drive number of open file
EXT2_INODE Inode; // File's inode
} EXT2_FILE_INFO, * PEXT2_FILE_INFO;
BOOL Ext2OpenVolume(U8 DriveNumber, U64 VolumeStartSector);
FILE* Ext2OpenFile(PUCHAR FileName);
BOOL Ext2LookupFile(PUCHAR FileName, PEXT2_FILE_INFO Ext2FileInfoPointer);
BOOL Ext2SearchDirectoryBufferForFile(PVOID DirectoryBuffer, U32 DirectorySize, PUCHAR FileName, PEXT2_DIR_ENTRY DirectoryEntry);
BOOL Ext2ReadFile(FILE *FileHandle, U64 BytesToRead, U64* BytesRead, PVOID Buffer);
U64 Ext2GetFileSize(FILE *FileHandle);
VOID Ext2SetFilePointer(FILE *FileHandle, U64 NewFilePointer);
U64 Ext2GetFilePointer(FILE *FileHandle);
BOOL Ext2ReadVolumeSectors(U8 DriveNumber, U64 SectorNumber, U64 SectorCount, PVOID Buffer);
BOOL Ext2ReadSuperBlock(VOID);
BOOL Ext2ReadGroupDescriptors(VOID);
BOOL Ext2ReadDirectory(U32 Inode, PVOID* DirectoryBuffer, PEXT2_INODE InodePointer);
BOOL Ext2ReadBlock(U32 BlockNumber, PVOID Buffer);
BOOL Ext2ReadPartialBlock(U32 BlockNumber, U32 StartingOffset, U32 Length, PVOID Buffer);
U32 Ext2GetGroupDescBlockNumber(U32 Group);
U32 Ext2GetGroupDescOffsetInBlock(U32 Group);
U32 Ext2GetInodeGroupNumber(U32 Inode);
U32 Ext2GetInodeBlockNumber(U32 Inode);
U32 Ext2GetInodeOffsetInBlock(U32 Inode);
BOOL Ext2ReadInode(U32 Inode, PEXT2_INODE InodeBuffer);
BOOL Ext2ReadGroupDescriptor(U32 Group, PEXT2_GROUP_DESC GroupBuffer);
U32* Ext2ReadBlockPointerList(PEXT2_INODE Inode);
U64 Ext2GetInodeFileSize(PEXT2_INODE Inode);
BOOL Ext2CopyIndirectBlockPointers(U32* BlockList, U32* CurrentBlockInList, U32 BlockCount, U32 IndirectBlock);
BOOL Ext2CopyDoubleIndirectBlockPointers(U32* BlockList, U32* CurrentBlockInList, U32 BlockCount, U32 DoubleIndirectBlock);
BOOL Ext2CopyTripleIndirectBlockPointers(U32* BlockList, U32* CurrentBlockInList, U32 BlockCount, U32 TripleIndirectBlock);
#endif // #defined __EXT2_H

File diff suppressed because it is too large Load Diff

View File

@@ -1,162 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __FAT_H
#define __FAT_H
typedef struct _FAT_BOOTSECTOR
{
U8 JumpBoot[3]; // Jump instruction to boot code
U8 OemName[8]; // "MSWIN4.1" for MS formatted volumes
U16 BytesPerSector; // Bytes per sector
U8 SectorsPerCluster; // Number of sectors in a cluster
U16 ReservedSectors; // Reserved sectors, usually 1 (the bootsector)
U8 NumberOfFats; // Number of FAT tables
U16 RootDirEntries; // Number of root directory entries (fat12/16)
U16 TotalSectors; // Number of total sectors on the drive, 16-bit
U8 MediaDescriptor; // Media descriptor byte
U16 SectorsPerFat; // Sectors per FAT table (fat12/16)
U16 SectorsPerTrack; // Number of sectors in a track
U16 NumberOfHeads; // Number of heads on the disk
U32 HiddenSectors; // Hidden sectors (sectors before the partition start like the partition table)
U32 TotalSectorsBig; // This field is the new 32-bit total count of sectors on the volume
U8 DriveNumber; // Int 0x13 drive number (e.g. 0x80)
U8 Reserved1; // Reserved (used by Windows NT). Code that formats FAT volumes should always set this byte to 0.
U8 BootSignature; // Extended boot signature (0x29). This is a signature byte that indicates that the following three fields in the boot sector are present.
U32 VolumeSerialNumber; // Volume serial number
U8 VolumeLabel[11]; // Volume label. This field matches the 11-byte volume label recorded in the root directory
U8 FileSystemType[8]; // One of the strings "FAT12 ", "FAT16 ", or "FAT "
U8 BootCodeAndData[448]; // The remainder of the boot sector
U16 BootSectorMagic; // 0xAA55
} PACKED FAT_BOOTSECTOR, *PFAT_BOOTSECTOR;
typedef struct _FAT32_BOOTSECTOR
{
U8 JumpBoot[3]; // Jump instruction to boot code
U8 OemName[8]; // "MSWIN4.1" for MS formatted volumes
U16 BytesPerSector; // Bytes per sector
U8 SectorsPerCluster; // Number of sectors in a cluster
U16 ReservedSectors; // Reserved sectors, usually 1 (the bootsector)
U8 NumberOfFats; // Number of FAT tables
U16 RootDirEntries; // Number of root directory entries (fat12/16)
U16 TotalSectors; // Number of total sectors on the drive, 16-bit
U8 MediaDescriptor; // Media descriptor byte
U16 SectorsPerFat; // Sectors per FAT table (fat12/16)
U16 SectorsPerTrack; // Number of sectors in a track
U16 NumberOfHeads; // Number of heads on the disk
U32 HiddenSectors; // Hidden sectors (sectors before the partition start like the partition table)
U32 TotalSectorsBig; // This field is the new 32-bit total count of sectors on the volume
U32 SectorsPerFatBig; // This field is the FAT32 32-bit count of sectors occupied by ONE FAT. BPB_FATSz16 must be 0
U16 ExtendedFlags; // Extended flags (fat32)
U16 FileSystemVersion; // File system version (fat32)
U32 RootDirStartCluster; // Starting cluster of the root directory (fat32)
U16 FsInfo; // Sector number of FSINFO structure in the reserved area of the FAT32 volume. Usually 1.
U16 BackupBootSector; // If non-zero, indicates the sector number in the reserved area of the volume of a copy of the boot record. Usually 6.
U8 Reserved[12]; // Reserved for future expansion
U8 DriveNumber; // Int 0x13 drive number (e.g. 0x80)
U8 Reserved1; // Reserved (used by Windows NT). Code that formats FAT volumes should always set this byte to 0.
U8 BootSignature; // Extended boot signature (0x29). This is a signature byte that indicates that the following three fields in the boot sector are present.
U32 VolumeSerialNumber; // Volume serial number
U8 VolumeLabel[11]; // Volume label. This field matches the 11-byte volume label recorded in the root directory
U8 FileSystemType[8]; // Always set to the string "FAT32 "
U8 BootCodeAndData[420]; // The remainder of the boot sector
U16 BootSectorMagic; // 0xAA55
} PACKED FAT32_BOOTSECTOR, *PFAT32_BOOTSECTOR;
/*
* Structure of MSDOS directory entry
*/
typedef struct //_DIRENTRY
{
UCHAR FileName[11]; /* Filename + extension */
U8 Attr; /* File attributes */
U8 ReservedNT; /* Reserved for use by Windows NT */
U8 TimeInTenths; /* Millisecond stamp at file creation */
U16 CreateTime; /* Time file was created */
U16 CreateDate; /* Date file was created */
U16 LastAccessDate; /* Date file was last accessed */
U16 ClusterHigh; /* High word of this entry's start cluster */
U16 Time; /* Time last modified */
U16 Date; /* Date last modified */
U16 ClusterLow; /* First cluster number low word */
U32 Size; /* File size */
} PACKED DIRENTRY, * PDIRENTRY;
typedef struct
{
U8 SequenceNumber; /* Sequence number for slot */
WCHAR Name0_4[5]; /* First 5 characters in name */
U8 EntryAttributes; /* Attribute byte */
U8 Reserved; /* Always 0 */
U8 AliasChecksum; /* Checksum for 8.3 alias */
WCHAR Name5_10[6]; /* 6 more characters in name */
U16 StartCluster; /* Starting cluster number */
WCHAR Name11_12[2]; /* Last 2 characters in name */
} PACKED LFN_DIRENTRY, * PLFN_DIRENTRY;
typedef struct
{
U32 FileSize; // File size
U32 FilePointer; // File pointer
U32* FileFatChain; // File fat chain array
U32 DriveNumber;
} FAT_FILE_INFO, * PFAT_FILE_INFO;
BOOL FatOpenVolume(U32 DriveNumber, U32 VolumeStartSector);
U32 FatDetermineFatType(PFAT_BOOTSECTOR FatBootSector);
PVOID FatBufferDirectory(U32 DirectoryStartCluster, U32* EntryCountPointer, BOOL RootDirectory);
BOOL FatSearchDirectoryBufferForFile(PVOID DirectoryBuffer, U32 EntryCount, PUCHAR FileName, PFAT_FILE_INFO FatFileInfoPointer);
BOOL FatLookupFile(PUCHAR FileName, PFAT_FILE_INFO FatFileInfoPointer);
void FatParseShortFileName(PUCHAR Buffer, PDIRENTRY DirEntry);
BOOL FatGetFatEntry(U32 Cluster, U32* ClusterPointer);
FILE* FatOpenFile(PUCHAR FileName);
U32 FatCountClustersInChain(U32 StartCluster);
U32* FatGetClusterChainArray(U32 StartCluster);
BOOL FatReadCluster(U32 ClusterNumber, PVOID Buffer);
BOOL FatReadClusterChain(U32 StartClusterNumber, U32 NumberOfClusters, PVOID Buffer);
BOOL FatReadPartialCluster(U32 ClusterNumber, U32 StartingOffset, U32 Length, PVOID Buffer);
BOOL FatReadFile(FILE *FileHandle, U32 BytesToRead, U32* BytesRead, PVOID Buffer);
U32 FatGetFileSize(FILE *FileHandle);
VOID FatSetFilePointer(FILE *FileHandle, U32 NewFilePointer);
U32 FatGetFilePointer(FILE *FileHandle);
BOOL FatReadVolumeSectors(U32 DriveNumber, U32 SectorNumber, U32 SectorCount, PVOID Buffer);
#define ATTR_NORMAL 0x00
#define ATTR_READONLY 0x01
#define ATTR_HIDDEN 0x02
#define ATTR_SYSTEM 0x04
#define ATTR_VOLUMENAME 0x08
#define ATTR_DIRECTORY 0x10
#define ATTR_ARCHIVE 0x20
#define ATTR_LONG_NAME (ATTR_READONLY | ATTR_HIDDEN | ATTR_SYSTEM | ATTR_VOLUMENAME)
#define FAT12 1
#define FAT16 2
#define FAT32 3
#endif // #defined __FAT_H

View File

@@ -1,418 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <freeldr.h>
#include <fs.h>
#include "fat.h"
#include "iso.h"
#include "ext2.h"
#include "ntfs.h"
#include "fsrec.h"
#include <disk.h>
#include <rtl.h>
#include <ui.h>
#include <arch.h>
#include <debug.h>
/////////////////////////////////////////////////////////////////////////////////////////////
// DATA
/////////////////////////////////////////////////////////////////////////////////////////////
U32 FileSystemType = 0; // Type of filesystem on boot device, set by FsOpenVolume()
/////////////////////////////////////////////////////////////////////////////////////////////
// FUNCTIONS
/////////////////////////////////////////////////////////////////////////////////////////////
VOID FileSystemError(PUCHAR ErrorString)
{
DbgPrint((DPRINT_FILESYSTEM, "%s\n", ErrorString));
UiMessageBox(ErrorString);
}
/*
*
* BOOL FsOpenVolume(U32 DriveNumber, U32 PartitionNumber);
*
* This function is called to open a disk volume for file access.
* It must be called before any of the file functions will work.
* It takes two parameters:
*
* Drive: The BIOS drive number of the disk to open
* Partition: This is zero for floppy drives.
* If the disk is a hard disk then this specifies
* The partition number to open (1 - 4)
* If it is zero then it opens the active (bootable) partition
*
*/
BOOL FsOpenVolume(U32 DriveNumber, U32 PartitionNumber)
{
PARTITION_TABLE_ENTRY PartitionTableEntry;
UCHAR ErrorText[80];
U8 VolumeType;
DbgPrint((DPRINT_FILESYSTEM, "FsOpenVolume() DriveNumber: 0x%x PartitionNumber: 0x%x\n", DriveNumber, PartitionNumber));
// Check and see if it is a floppy drive
// If so then just assume FAT12 file system type
if (DiskIsDriveRemovable(DriveNumber))
{
DbgPrint((DPRINT_FILESYSTEM, "Drive is a floppy diskette drive. Assuming FAT12 file system.\n"));
FileSystemType = FS_FAT;
return FatOpenVolume(DriveNumber, 0);
}
// Check for ISO9660 file system type
if (DriveNumber > 0x80 && FsRecIsIso9660(DriveNumber))
{
DbgPrint((DPRINT_FILESYSTEM, "Drive is a cdrom drive. Assuming ISO-9660 file system.\n"));
FileSystemType = FS_ISO9660;
return IsoOpenVolume(DriveNumber);
}
// Set the boot partition
BootPartition = PartitionNumber;
// Get the requested partition entry
if (PartitionNumber == 0)
{
// Partition requested was zero which means the boot partition
if (DiskGetActivePartitionEntry(DriveNumber, &PartitionTableEntry) == FALSE)
{
FileSystemError("No active partition.");
return FALSE;
}
}
else
{
// Get requested partition
if (DiskGetPartitionEntry(DriveNumber, PartitionNumber, &PartitionTableEntry) == FALSE)
{
FileSystemError("Partition not found.");
return FALSE;
}
}
// Check for valid partition
if (PartitionTableEntry.SystemIndicator == PARTITION_ENTRY_UNUSED)
{
FileSystemError("Invalid partition.");
return FALSE;
}
// Try to recognize the file system
if (!FsRecognizeVolume(DriveNumber, PartitionTableEntry.SectorCountBeforePartition, &VolumeType))
{
FileSystemError("Unrecognized file system.");
return FALSE;
}
//switch (PartitionTableEntry.SystemIndicator)
switch (VolumeType)
{
case PARTITION_FAT_12:
case PARTITION_FAT_16:
case PARTITION_HUGE:
case PARTITION_XINT13:
case PARTITION_FAT32:
case PARTITION_FAT32_XINT13:
FileSystemType = FS_FAT;
return FatOpenVolume(DriveNumber, PartitionTableEntry.SectorCountBeforePartition);
case PARTITION_EXT2:
FileSystemType = FS_EXT2;
return Ext2OpenVolume(DriveNumber, PartitionTableEntry.SectorCountBeforePartition);
case PARTITION_NTFS:
FileSystemType = FS_NTFS;
return NtfsOpenVolume(DriveNumber, PartitionTableEntry.SectorCountBeforePartition);
default:
FileSystemType = 0;
sprintf(ErrorText, "Unsupported file system. Type: 0x%x", VolumeType);
FileSystemError(ErrorText);
return FALSE;
}
return TRUE;
}
PFILE FsOpenFile(PUCHAR FileName)
{
PFILE FileHandle = NULL;
//
// Print status message
//
DbgPrint((DPRINT_FILESYSTEM, "Opening file '%s'...\n", FileName));
//
// Check and see if the first character is '\' or '/' and remove it if so
//
while ((*FileName == '\\') || (*FileName == '/'))
{
FileName++;
}
//
// Check file system type and pass off to appropriate handler
//
switch (FileSystemType)
{
case FS_FAT:
FileHandle = FatOpenFile(FileName);
break;
case FS_ISO9660:
FileHandle = IsoOpenFile(FileName);
break;
case FS_EXT2:
FileHandle = Ext2OpenFile(FileName);
break;
case FS_NTFS:
FileHandle = NtfsOpenFile(FileName);
break;
default:
FileSystemError("Error: Unknown filesystem.");
break;
}
#ifdef DEBUG
//
// Check return value
//
if (FileHandle != NULL)
{
DbgPrint((DPRINT_FILESYSTEM, "FsOpenFile() succeeded. FileHandle: 0x%x\n", FileHandle));
}
else
{
DbgPrint((DPRINT_FILESYSTEM, "FsOpenFile() failed.\n"));
}
#endif // defined DEBUG
return FileHandle;
}
VOID FsCloseFile(PFILE FileHandle)
{
}
/*
* ReadFile()
* returns number of bytes read or EOF
*/
BOOL FsReadFile(PFILE FileHandle, U32 BytesToRead, U32* BytesRead, PVOID Buffer)
{
U64 BytesReadBig;
BOOL Success;
//
// Set the number of bytes read equal to zero
//
if (BytesRead != NULL)
{
*BytesRead = 0;
}
switch (FileSystemType)
{
case FS_FAT:
return FatReadFile(FileHandle, BytesToRead, BytesRead, Buffer);
case FS_ISO9660:
return IsoReadFile(FileHandle, BytesToRead, BytesRead, Buffer);
case FS_EXT2:
//return Ext2ReadFile(FileHandle, BytesToRead, BytesRead, Buffer);
Success = Ext2ReadFile(FileHandle, BytesToRead, &BytesReadBig, Buffer);
*BytesRead = (U32)BytesReadBig;
return Success;
case FS_NTFS:
return NtfsReadFile(FileHandle, BytesToRead, BytesRead, Buffer);
default:
FileSystemError("Unknown file system.");
return FALSE;
}
return FALSE;
}
U32 FsGetFileSize(PFILE FileHandle)
{
switch (FileSystemType)
{
case FS_FAT:
return FatGetFileSize(FileHandle);
case FS_ISO9660:
return IsoGetFileSize(FileHandle);
case FS_EXT2:
return Ext2GetFileSize(FileHandle);
case FS_NTFS:
return NtfsGetFileSize(FileHandle);
default:
FileSystemError("Unknown file system.");
break;
}
return 0;
}
VOID FsSetFilePointer(PFILE FileHandle, U32 NewFilePointer)
{
switch (FileSystemType)
{
case FS_FAT:
FatSetFilePointer(FileHandle, NewFilePointer);
break;
case FS_ISO9660:
IsoSetFilePointer(FileHandle, NewFilePointer);
break;
case FS_EXT2:
Ext2SetFilePointer(FileHandle, NewFilePointer);
break;
case FS_NTFS:
NtfsSetFilePointer(FileHandle, NewFilePointer);
break;
default:
FileSystemError("Unknown file system.");
break;
}
}
U32 FsGetFilePointer(PFILE FileHandle)
{
switch (FileSystemType)
{
case FS_FAT:
return FatGetFilePointer(FileHandle);
break;
case FS_ISO9660:
return IsoGetFilePointer(FileHandle);
break;
case FS_EXT2:
return Ext2GetFilePointer(FileHandle);
break;
case FS_NTFS:
return NtfsGetFilePointer(FileHandle);
break;
default:
FileSystemError("Unknown file system.");
break;
}
return 0;
}
BOOL FsIsEndOfFile(PFILE FileHandle)
{
if (FsGetFilePointer(FileHandle) >= FsGetFileSize(FileHandle))
{
return TRUE;
}
else
{
return FALSE;
}
}
/*
* FsGetNumPathParts()
* This function parses a path in the form of dir1\dir2\file1.ext
* and returns the number of parts it has (i.e. 3 - dir1,dir2,file1.ext)
*/
U32 FsGetNumPathParts(PUCHAR Path)
{
U32 i;
U32 num;
for (i=0,num=0; i<(int)strlen(Path); i++)
{
if ((Path[i] == '\\') || (Path[i] == '/'))
{
num++;
}
}
num++;
DbgPrint((DPRINT_FILESYSTEM, "FatGetNumPathParts() Path = %s NumPathParts = %d\n", Path, num));
return num;
}
/*
* FsGetFirstNameFromPath()
* This function parses a path in the form of dir1\dir2\file1.ext
* and puts the first name of the path (e.g. "dir1") in buffer
* compatible with the MSDOS directory structure
*/
VOID FsGetFirstNameFromPath(PUCHAR Buffer, PUCHAR Path)
{
U32 i;
// Copy all the characters up to the end of the
// string or until we hit a '\' character
// and put them in Buffer
for (i=0; i<(int)strlen(Path); i++)
{
if ((Path[i] == '\\') || (Path[i] == '/'))
{
break;
}
else
{
Buffer[i] = Path[i];
}
}
Buffer[i] = 0;
DbgPrint((DPRINT_FILESYSTEM, "FatGetFirstNameFromPath() Path = %s FirstName = %s\n", Path, Buffer));
}

View File

@@ -1,139 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <freeldr.h>
#include <fs.h>
#include "fsrec.h"
#include "fat.h"
#include "iso.h"
#include "ext2.h"
#include "ntfs.h"
#include <disk.h>
#include <rtl.h>
#include <arch.h>
#include <debug.h>
/////////////////////////////////////////////////////////////////////////////////////////////
// FUNCTIONS
/////////////////////////////////////////////////////////////////////////////////////////////
/*
*
* BOOL FsRecognizeVolume(U32 DriveNumber, U32 VolumeStartSector, U8* VolumeType);
*
*/
BOOL FsRecognizeVolume(U32 DriveNumber, U32 VolumeStartSector, U8* VolumeType)
{
DbgPrint((DPRINT_FILESYSTEM, "FsRecognizeVolume() DriveNumber: 0x%x VolumeStartSector: %d\n", DriveNumber, VolumeStartSector));
if (FsRecIsExt2(DriveNumber, VolumeStartSector))
{
*VolumeType = PARTITION_EXT2;
return TRUE;
}
else if (FsRecIsFat(DriveNumber, VolumeStartSector))
{
*VolumeType = PARTITION_FAT32;
return TRUE;
}
else if (FsRecIsNtfs(DriveNumber, VolumeStartSector))
{
*VolumeType = PARTITION_NTFS;
return TRUE;
}
return FALSE;
}
BOOL FsRecIsIso9660(U32 DriveNumber)
{
PUCHAR Sector = (PUCHAR)DISKREADBUFFER;
if (!DiskReadLogicalSectors(DriveNumber, 16, 1, Sector))
{
FileSystemError("Failed to read the PVD.");
return FALSE;
}
return (Sector[0] == 1 &&
Sector[1] == 'C' &&
Sector[2] == 'D' &&
Sector[3] == '0' &&
Sector[4] == '0' &&
Sector[5] == '1');
}
BOOL FsRecIsExt2(U32 DriveNumber, U32 VolumeStartSector)
{
PEXT2_SUPER_BLOCK SuperBlock = (PEXT2_SUPER_BLOCK)DISKREADBUFFER;
if (!DiskReadLogicalSectors(DriveNumber, VolumeStartSector + 2, 2, SuperBlock))
{
FileSystemError("Failed to read the super block.");
return FALSE;
}
if (SuperBlock->s_magic == EXT3_SUPER_MAGIC)
{
return TRUE;
}
return FALSE;
}
BOOL FsRecIsFat(U32 DriveNumber, U32 VolumeStartSector)
{
PFAT_BOOTSECTOR BootSector = (PFAT_BOOTSECTOR)DISKREADBUFFER;
PFAT32_BOOTSECTOR BootSector32 = (PFAT32_BOOTSECTOR)DISKREADBUFFER;
if (!DiskReadLogicalSectors(DriveNumber, VolumeStartSector, 1, BootSector))
{
FileSystemError("Failed to read the boot sector.");
return FALSE;
}
if (strncmp(BootSector->FileSystemType, "FAT12 ", 8) == 0 ||
strncmp(BootSector->FileSystemType, "FAT16 ", 8) == 0 ||
strncmp(BootSector32->FileSystemType, "FAT32 ", 8) == 0)
{
return TRUE;
}
return FALSE;
}
BOOL FsRecIsNtfs(U32 DriveNumber, U32 VolumeStartSector)
{
PNTFS_BOOTSECTOR BootSector = (PNTFS_BOOTSECTOR)DISKREADBUFFER;
if (!DiskReadLogicalSectors(DriveNumber, VolumeStartSector, 1, BootSector))
{
FileSystemError("Failed to read the boot sector.");
return FALSE;
}
if (!RtlCompareMemory(BootSector->SystemId, "NTFS", 4))
{
return TRUE;
}
return FALSE;
}

View File

@@ -1,29 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __FSREC_H
#define __FSREC_H
BOOL FsRecognizeVolume(U32 DriveNumber, U32 VolumeStartSector, U8* VolumeType);
BOOL FsRecIsIso9660(U32 DriveNumber);
BOOL FsRecIsExt2(U32 DriveNumber, U32 VolumeStartSector);
BOOL FsRecIsFat(U32 DriveNumber, U32 VolumeStartSector);
BOOL FsRecIsNtfs(U32 DriveNumber, U32 VolumeStartSector);
#endif // #defined __FSREC_H

View File

@@ -1,478 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <freeldr.h>
#include <fs.h>
#include <disk.h>
#include <rtl.h>
#include <arch.h>
#include <mm.h>
#include <debug.h>
#include <cache.h>
#include "iso.h"
#define SECTORSIZE 2048
static U32 IsoRootSector; // Starting sector of the root directory
static U32 IsoRootLength; // Length of the root directory
U32 IsoDriveNumber = 0;
BOOL IsoOpenVolume(U32 DriveNumber)
{
PPVD Pvd = (PPVD)DISKREADBUFFER;
DbgPrint((DPRINT_FILESYSTEM, "IsoOpenVolume() DriveNumber = 0x%x VolumeStartSector = 16\n", DriveNumber));
// Store the drive number
IsoDriveNumber = DriveNumber;
IsoRootSector = 0;
IsoRootLength = 0;
if (!DiskReadLogicalSectors(DriveNumber, 16, 1, Pvd))
{
FileSystemError("Failed to read the PVD.");
return FALSE;
}
IsoRootSector = Pvd->RootDirRecord.ExtentLocationL;
IsoRootLength = Pvd->RootDirRecord.DataLengthL;
DbgPrint((DPRINT_FILESYSTEM, "IsoRootSector = %u IsoRootLegth = %u\n", IsoRootSector, IsoRootLength));
return TRUE;
}
static BOOL IsoSearchDirectoryBufferForFile(PVOID DirectoryBuffer, U32 DirectoryLength, PUCHAR FileName, PISO_FILE_INFO IsoFileInfoPointer)
{
PDIR_RECORD Record;
U32 Offset;
U32 i;
UCHAR Name[32];
DbgPrint((DPRINT_FILESYSTEM, "IsoSearchDirectoryBufferForFile() DirectoryBuffer = 0x%x DirectoryLength = %d FileName = %s\n", DirectoryBuffer, DirectoryLength, FileName));
RtlZeroMemory(Name, 32 * sizeof(UCHAR));
Offset = 0;
Record = (PDIR_RECORD)DirectoryBuffer;
while (TRUE)
{
Offset = Offset + Record->RecordLength;
Record = (PDIR_RECORD)(DirectoryBuffer + Offset);
if (Record->RecordLength == 0)
{
Offset = ROUND_UP(Offset, SECTORSIZE);
Record = (PDIR_RECORD)(DirectoryBuffer + Offset);
}
if (Offset >= DirectoryLength)
return FALSE;
if (Record->FileIdLength == 1 && Record->FileId[0] == 0)
{
DbgPrint((DPRINT_FILESYSTEM, "Name '.'\n"));
}
else if (Record->FileIdLength == 1 && Record->FileId[0] == 1)
{
DbgPrint((DPRINT_FILESYSTEM, "Name '..'\n"));
}
else
{
for (i = 0; i < Record->FileIdLength && Record->FileId[i] != ';'; i++)
Name[i] = Record->FileId[i];
Name[i] = 0;
DbgPrint((DPRINT_FILESYSTEM, "Name '%s'\n", Name));
if (strlen(FileName) == strlen(Name) && stricmp(FileName, Name) == 0)
{
IsoFileInfoPointer->FileStart = Record->ExtentLocationL;
IsoFileInfoPointer->FileSize = Record->DataLengthL;
IsoFileInfoPointer->FilePointer = 0;
IsoFileInfoPointer->Directory = (Record->FileFlags & 0x02)?TRUE:FALSE;
return TRUE;
}
}
RtlZeroMemory(Name, 32 * sizeof(UCHAR));
}
return FALSE;
}
/*
* IsoBufferDirectory()
* This function allocates a buffer, reads the specified directory
* and returns a pointer to that buffer. The function returns NULL
* if allocation or read fails. The directory is specified by its
* starting sector and length.
*/
static PVOID IsoBufferDirectory(U32 DirectoryStartSector, U32 DirectoryLength)
{
PVOID DirectoryBuffer;
PVOID Ptr;
U32 SectorCount;
U32 i;
DbgPrint((DPRINT_FILESYSTEM, "IsoBufferDirectory() DirectoryStartSector = %d DirectoryLength = %d\n", DirectoryStartSector, DirectoryLength));
SectorCount = ROUND_UP(DirectoryLength, SECTORSIZE) / SECTORSIZE;
DbgPrint((DPRINT_FILESYSTEM, "Trying to read (DirectoryCount) %d sectors.\n", SectorCount));
//
// Attempt to allocate memory for directory buffer
//
DbgPrint((DPRINT_FILESYSTEM, "Trying to allocate (DirectoryLength) %d bytes.\n", DirectoryLength));
DirectoryBuffer = MmAllocateMemory(DirectoryLength);
if (DirectoryBuffer == NULL)
{
return NULL;
}
//
// Now read directory contents into DirectoryBuffer
//
for (i = 0, Ptr = DirectoryBuffer; i < SectorCount; i++, Ptr += SECTORSIZE)
{
if (!DiskReadLogicalSectors(IsoDriveNumber, DirectoryStartSector + i, 1, (PVOID)DISKREADBUFFER))
{
MmFreeMemory(DirectoryBuffer);
return NULL;
}
RtlCopyMemory(Ptr, (PVOID)DISKREADBUFFER, SECTORSIZE);
}
return DirectoryBuffer;
}
/*
* IsoLookupFile()
* This function searches the file system for the
* specified filename and fills in an ISO_FILE_INFO structure
* with info describing the file, etc. returns true
* if the file exists or false otherwise
*/
static BOOL IsoLookupFile(PUCHAR FileName, PISO_FILE_INFO IsoFileInfoPointer)
{
int i;
U32 NumberOfPathParts;
UCHAR PathPart[261];
PVOID DirectoryBuffer;
U32 DirectorySector;
U32 DirectoryLength;
ISO_FILE_INFO IsoFileInfo;
DbgPrint((DPRINT_FILESYSTEM, "IsoLookupFile() FileName = %s\n", FileName));
RtlZeroMemory(IsoFileInfoPointer, sizeof(ISO_FILE_INFO));
//
// Figure out how many sub-directories we are nested in
//
NumberOfPathParts = FsGetNumPathParts(FileName);
DirectorySector = IsoRootSector;
DirectoryLength = IsoRootLength;
//
// Loop once for each part
//
for (i=0; i<NumberOfPathParts; i++)
{
//
// Get first path part
//
FsGetFirstNameFromPath(PathPart, FileName);
//
// Advance to the next part of the path
//
for (; (*FileName != '\\') && (*FileName != '/') && (*FileName != '\0'); FileName++)
{
}
FileName++;
//
// Buffer the directory contents
//
DirectoryBuffer = IsoBufferDirectory(DirectorySector, DirectoryLength);
if (DirectoryBuffer == NULL)
{
return FALSE;
}
//
// Search for file name in directory
//
if (!IsoSearchDirectoryBufferForFile(DirectoryBuffer, DirectoryLength, PathPart, &IsoFileInfo))
{
MmFreeMemory(DirectoryBuffer);
return FALSE;
}
MmFreeMemory(DirectoryBuffer);
//
// If we have another sub-directory to go then
// grab the start sector and file size
//
if ((i+1) < NumberOfPathParts)
{
DirectorySector = IsoFileInfo.FileStart;
DirectoryLength = IsoFileInfo.FileSize;
}
}
RtlCopyMemory(IsoFileInfoPointer, &IsoFileInfo, sizeof(ISO_FILE_INFO));
return TRUE;
}
/*
* IsoOpenFile()
* Tries to open the file 'name' and returns true or false
* for success and failure respectively
*/
FILE* IsoOpenFile(PUCHAR FileName)
{
ISO_FILE_INFO TempFileInfo;
PISO_FILE_INFO FileHandle;
DbgPrint((DPRINT_FILESYSTEM, "IsoOpenFile() FileName = %s\n", FileName));
if (!IsoLookupFile(FileName, &TempFileInfo))
{
return NULL;
}
FileHandle = MmAllocateMemory(sizeof(ISO_FILE_INFO));
if (FileHandle == NULL)
{
return NULL;
}
RtlCopyMemory(FileHandle, &TempFileInfo, sizeof(ISO_FILE_INFO));
return (FILE*)FileHandle;
}
/*
* IsoReadFile()
* Reads BytesToRead from open file and
* returns the number of bytes read in BytesRead
*/
BOOL IsoReadFile(FILE *FileHandle, U32 BytesToRead, U32* BytesRead, PVOID Buffer)
{
PISO_FILE_INFO IsoFileInfo = (PISO_FILE_INFO)FileHandle;
U32 SectorNumber;
U32 OffsetInSector;
U32 LengthInSector;
U32 NumberOfSectors;
U32 i;
DbgPrint((DPRINT_FILESYSTEM, "IsoReadFile() BytesToRead = %d Buffer = 0x%x\n", BytesToRead, Buffer));
if (BytesRead != NULL)
{
*BytesRead = 0;
}
//
// If they are trying to read past the
// end of the file then return success
// with BytesRead == 0
//
if (IsoFileInfo->FilePointer >= IsoFileInfo->FileSize)
{
return TRUE;
}
//
// If they are trying to read more than there is to read
// then adjust the amount to read
//
if ((IsoFileInfo->FilePointer + BytesToRead) > IsoFileInfo->FileSize)
{
BytesToRead = (IsoFileInfo->FileSize - IsoFileInfo->FilePointer);
}
//
// Ok, now we have to perform at most 3 calculations
// I'll draw you a picture (using nifty ASCII art):
//
// CurrentFilePointer -+
// |
// +----------------+
// |
// +-----------+-----------+-----------+-----------+
// | Sector 1 | Sector 2 | Sector 3 | Sector 4 |
// +-----------+-----------+-----------+-----------+
// | |
// +---------------+--------------------+
// |
// BytesToRead -------+
//
// 1 - The first calculation (and read) will align
// the file pointer with the next sector
// boundary (if we are supposed to read that much)
// 2 - The next calculation (and read) will read
// in all the full sectors that the requested
// amount of data would cover (in this case
// sectors 2 & 3).
// 3 - The last calculation (and read) would read
// in the remainder of the data requested out of
// the last sector.
//
//
// Only do the first read if we
// aren't aligned on a cluster boundary
//
if (IsoFileInfo->FilePointer % SECTORSIZE)
{
//
// Do the math for our first read
//
SectorNumber = IsoFileInfo->FileStart + (IsoFileInfo->FilePointer / SECTORSIZE);
OffsetInSector = IsoFileInfo->FilePointer % SECTORSIZE;
LengthInSector = (BytesToRead > (SECTORSIZE - OffsetInSector)) ? (SECTORSIZE - OffsetInSector) : BytesToRead;
//
// Now do the read and update BytesRead, BytesToRead, FilePointer, & Buffer
//
if (!DiskReadLogicalSectors(IsoDriveNumber, SectorNumber, 1, (PVOID)DISKREADBUFFER))
{
return FALSE;
}
RtlCopyMemory(Buffer, ((PVOID)DISKREADBUFFER + OffsetInSector), LengthInSector);
if (BytesRead != NULL)
{
*BytesRead += LengthInSector;
}
BytesToRead -= LengthInSector;
IsoFileInfo->FilePointer += LengthInSector;
Buffer += LengthInSector;
}
//
// Do the math for our second read (if any data left)
//
if (BytesToRead > 0)
{
//
// Determine how many full clusters we need to read
//
NumberOfSectors = (BytesToRead / SECTORSIZE);
for (i = 0; i < NumberOfSectors; i++)
{
SectorNumber = IsoFileInfo->FileStart + (IsoFileInfo->FilePointer / SECTORSIZE);
//
// Now do the read and update BytesRead, BytesToRead, FilePointer, & Buffer
//
if (!DiskReadLogicalSectorsLBA(IsoDriveNumber, SectorNumber, 1, (PVOID)DISKREADBUFFER))
{
return FALSE;
}
RtlCopyMemory(Buffer, (PVOID)DISKREADBUFFER, SECTORSIZE);
if (BytesRead != NULL)
{
*BytesRead += SECTORSIZE;
}
BytesToRead -= SECTORSIZE;
IsoFileInfo->FilePointer += SECTORSIZE;
Buffer += SECTORSIZE;
}
}
//
// Do the math for our third read (if any data left)
//
if (BytesToRead > 0)
{
SectorNumber = IsoFileInfo->FileStart + (IsoFileInfo->FilePointer / SECTORSIZE);
//
// Now do the read and update BytesRead, BytesToRead, FilePointer, & Buffer
//
if (!DiskReadLogicalSectorsLBA(IsoDriveNumber, SectorNumber, 1, (PVOID)DISKREADBUFFER))
{
return FALSE;
}
RtlCopyMemory(Buffer, (PVOID)DISKREADBUFFER, BytesToRead);
if (BytesRead != NULL)
{
*BytesRead += BytesToRead;
}
IsoFileInfo->FilePointer += BytesToRead;
BytesToRead -= BytesToRead;
Buffer += BytesToRead;
}
DbgPrint((DPRINT_FILESYSTEM, "IsoReadFile() done\n"));
return TRUE;
}
U32 IsoGetFileSize(FILE *FileHandle)
{
PISO_FILE_INFO IsoFileHandle = (PISO_FILE_INFO)FileHandle;
DbgPrint((DPRINT_FILESYSTEM, "IsoGetFileSize() FileSize = %d\n", IsoFileHandle->FileSize));
return IsoFileHandle->FileSize;
}
VOID IsoSetFilePointer(FILE *FileHandle, U32 NewFilePointer)
{
PISO_FILE_INFO IsoFileHandle = (PISO_FILE_INFO)FileHandle;
DbgPrint((DPRINT_FILESYSTEM, "IsoSetFilePointer() NewFilePointer = %d\n", NewFilePointer));
IsoFileHandle->FilePointer = NewFilePointer;
}
U32 IsoGetFilePointer(FILE *FileHandle)
{
PISO_FILE_INFO IsoFileHandle = (PISO_FILE_INFO)FileHandle;
DbgPrint((DPRINT_FILESYSTEM, "IsoGetFilePointer() FilePointer = %d\n", IsoFileHandle->FilePointer));
return IsoFileHandle->FilePointer;
}

View File

@@ -1,115 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __ISO_H
#define __ISO_H
struct _DIR_RECORD
{
UCHAR RecordLength; // 1
UCHAR ExtAttrRecordLength; // 2
U32 ExtentLocationL; // 3-6
U32 ExtentLocationM; // 7-10
U32 DataLengthL; // 11-14
U32 DataLengthM; // 15-18
UCHAR Year; // 19
UCHAR Month; // 20
UCHAR Day; // 21
UCHAR Hour; // 22
UCHAR Minute; // 23
UCHAR Second; // 24
UCHAR TimeZone; // 25
UCHAR FileFlags; // 26
UCHAR FileUnitSize; // 27
UCHAR InterleaveGapSize; // 28
U32 VolumeSequenceNumber; // 29-32
UCHAR FileIdLength; // 33
UCHAR FileId[1]; // 34
} __attribute__((packed));
typedef struct _DIR_RECORD DIR_RECORD, *PDIR_RECORD;
/* Volume Descriptor header*/
struct _VD_HEADER
{
UCHAR VdType; // 1
UCHAR StandardId[5]; // 2-6
UCHAR VdVersion; // 7
} __attribute__((packed));
typedef struct _VD_HEADER VD_HEADER, *PVD_HEADER;
/* Primary Volume Descriptor */
struct _PVD
{
UCHAR VdType; // 1
UCHAR StandardId[5]; // 2-6
UCHAR VdVersion; // 7
UCHAR unused0; // 8
UCHAR SystemId[32]; // 9-40
UCHAR VolumeId[32]; // 41-72
UCHAR unused1[8]; // 73-80
U32 VolumeSpaceSizeL; // 81-84
U32 VolumeSpaceSizeM; // 85-88
UCHAR unused2[32]; // 89-120
U32 VolumeSetSize; // 121-124
U32 VolumeSequenceNumber; // 125-128
U32 LogicalBlockSize; // 129-132
U32 PathTableSizeL; // 133-136
U32 PathTableSizeM; // 137-140
U32 LPathTablePos; // 141-144
U32 LOptPathTablePos; // 145-148
U32 MPathTablePos; // 149-152
U32 MOptPathTablePos; // 153-156
DIR_RECORD RootDirRecord; // 157-190
UCHAR VolumeSetIdentifier[128]; // 191-318
UCHAR PublisherIdentifier[128]; // 319-446
/* more data ... */
} __attribute__((packed));
typedef struct _PVD PVD, *PPVD;
typedef struct
{
U32 FileStart; // File start sector
U32 FileSize; // File size
U32 FilePointer; // File pointer
BOOL Directory;
U32 DriveNumber;
} ISO_FILE_INFO, * PISO_FILE_INFO;
BOOL IsoOpenVolume(U32 DriveNumber);
FILE* IsoOpenFile(PUCHAR FileName);
BOOL IsoReadFile(FILE *FileHandle, U32 BytesToRead, U32* BytesRead, PVOID Buffer);
U32 IsoGetFileSize(FILE *FileHandle);
VOID IsoSetFilePointer(FILE *FileHandle, U32 NewFilePointer);
U32 IsoGetFilePointer(FILE *FileHandle);
#endif // #defined __FAT_H

View File

@@ -1,690 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* FreeLoader NTFS support
* Copyright (C) 2004 Filip Navara <xnavara@volny.cz>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/*
* Limitations:
* - No support for compressed files.
* - No attribute list support.
* - May crash on currupted filesystem.
*
* Bugs:
* - I encountered file names like 'KERNEL~1.EE' stored on
* the disk. These aren't handled correctly yet.
*/
#include <freeldr.h>
#include <fs.h>
#include <disk.h>
#include <rtl.h>
#include <arch.h>
#include <mm.h>
#include <debug.h>
#include <cache.h>
#define NTFS_DEFS
#include "ntfs.h"
PNTFS_BOOTSECTOR NtfsBootSector;
U32 NtfsClusterSize;
U32 NtfsMftRecordSize;
U32 NtfsIndexRecordSize;
U32 NtfsDriveNumber;
U32 NtfsSectorOfClusterZero;
PNTFS_MFT_RECORD NtfsMasterFileTable;
NTFS_ATTR_CONTEXT NtfsMFTContext;
PUCHAR NtfsDecodeRun(PUCHAR DataRun, S64 *DataRunOffset, U64 *DataRunLength)
{
U8 DataRunOffsetSize;
U8 DataRunLengthSize;
U8 i;
DataRunOffsetSize = (*DataRun >> 4) & 0xF;
DataRunLengthSize = *DataRun & 0xF;
*DataRunOffset = 0;
*DataRunLength = 0;
DataRun++;
for (i = 0; i < DataRunLengthSize; i++)
{
*DataRunLength += *DataRun << (i << 3);
DataRun++;
}
for (i = 0; i < DataRunOffsetSize; i++)
{
*DataRunOffset += *DataRun << (i << 3);
DataRun++;
}
DbgPrint((DPRINT_FILESYSTEM, "DataRunOffsetSize: %x\n", DataRunOffsetSize));
DbgPrint((DPRINT_FILESYSTEM, "DataRunLengthSize: %x\n", DataRunLengthSize));
DbgPrint((DPRINT_FILESYSTEM, "DataRunOffset: %x\n", DataRunOffset));
DbgPrint((DPRINT_FILESYSTEM, "DataRunLength: %x\n", DataRunLength));
return DataRun;
}
/* FIXME: Add support for attribute lists! */
BOOL NtfsFindAttribute(PNTFS_ATTR_CONTEXT Context, PNTFS_MFT_RECORD MftRecord, U32 Type, PWCHAR Name)
{
PNTFS_ATTR_RECORD AttrRecord;
PNTFS_ATTR_RECORD AttrRecordEnd;
U32 NameLength;
PWCHAR AttrName;
AttrRecord = (PNTFS_ATTR_RECORD)((PCHAR)MftRecord + MftRecord->AttributesOffset);
AttrRecordEnd = (PNTFS_ATTR_RECORD)((PCHAR)MftRecord + NtfsMftRecordSize);
for (NameLength = 0; Name[NameLength] != 0; NameLength++)
;
while (AttrRecord < AttrRecordEnd)
{
if (AttrRecord->Type == ATTR_TYPE_END)
break;
if (AttrRecord->Type == Type)
{
if (AttrRecord->NameLength == NameLength)
{
AttrName = (PWCHAR)((PCHAR)AttrRecord + AttrRecord->NameOffset);
if (!RtlCompareMemory(AttrName, Name, NameLength << 1))
{
/* Found it, fill up the context and return. */
Context->Record = AttrRecord;
if (AttrRecord->IsNonResident)
{
S64 DataRunOffset;
U64 DataRunLength;
Context->CacheRun = (PUCHAR)Context->Record + Context->Record->NonResident.MappingPairsOffset;
Context->CacheRunOffset = 0;
Context->CacheRun = NtfsDecodeRun(Context->CacheRun, &DataRunOffset, &DataRunLength);
if (DataRunOffset != -1)
{
/* Normal run. */
Context->CacheRunStartLCN =
Context->CacheRunLastLCN = DataRunOffset;
}
else
{
/* Sparse run. */
Context->CacheRunStartLCN = -1;
Context->CacheRunLastLCN = 0;
}
Context->CacheRunCurrentOffset = 0;
}
return TRUE;
}
}
}
AttrRecord = (PNTFS_ATTR_RECORD)((PCHAR)AttrRecord + AttrRecord->Length);
}
return FALSE;
}
/* FIXME: Optimize for multisector reads. */
BOOL NtfsDiskRead(U64 Offset, U64 Length, PCHAR Buffer)
{
U16 ReadLength;
/* I. Read partial first sector if needed */
if (Offset % NtfsBootSector->BytesPerSector)
{
if (!DiskReadLogicalSectors(NtfsDriveNumber, NtfsSectorOfClusterZero + (Offset / NtfsBootSector->BytesPerSector), 1, (PCHAR)DISKREADBUFFER))
return FALSE;
ReadLength = min(Length, NtfsBootSector->BytesPerSector - (Offset % NtfsBootSector->BytesPerSector));
RtlCopyMemory(Buffer, (PCHAR)DISKREADBUFFER + (Offset % NtfsBootSector->BytesPerSector), ReadLength);
Buffer += ReadLength;
Length -= ReadLength;
Offset += ReadLength;
}
/* II. Read all complete 64-sector blocks. */
while (Length >= 64 * NtfsBootSector->BytesPerSector)
{
if (!DiskReadLogicalSectors(NtfsDriveNumber, NtfsSectorOfClusterZero + (Offset / NtfsBootSector->BytesPerSector), 64, (PCHAR)DISKREADBUFFER))
return FALSE;
RtlCopyMemory(Buffer, (PCHAR)DISKREADBUFFER, 64 * NtfsBootSector->BytesPerSector);
Buffer += 64 * NtfsBootSector->BytesPerSector;
Length -= 64 * NtfsBootSector->BytesPerSector;
Offset += 64 * NtfsBootSector->BytesPerSector;
}
/* III. Read the rest of data */
if (Length)
{
ReadLength = ((Length + NtfsBootSector->BytesPerSector - 1) / NtfsBootSector->BytesPerSector);
if (!DiskReadLogicalSectors(NtfsDriveNumber, NtfsSectorOfClusterZero + (Offset / NtfsBootSector->BytesPerSector), ReadLength, (PCHAR)DISKREADBUFFER))
return FALSE;
RtlCopyMemory(Buffer, (PCHAR)DISKREADBUFFER, Length);
}
return TRUE;
}
U64 NtfsReadAttribute(PNTFS_ATTR_CONTEXT Context, U64 Offset, PCHAR Buffer, U64 Length)
{
U64 LastLCN;
PUCHAR DataRun;
S64 DataRunOffset;
U64 DataRunLength;
S64 DataRunStartLCN;
U64 CurrentOffset;
U64 ReadLength;
U64 AlreadyRead;
if (!Context->Record->IsNonResident)
{
if (Offset > Context->Record->Resident.ValueLength)
return 0;
if (Offset + Length > Context->Record->Resident.ValueLength)
Length = Context->Record->Resident.ValueLength - Offset;
RtlCopyMemory(Buffer, (PCHAR)Context->Record + Context->Record->Resident.ValueOffset + Offset, Length);
return Length;
}
/*
* Non-resident attribute
*/
/*
* I. Find the corresponding start data run.
*/
if (Context->CacheRunOffset == Offset)
{
DataRun = Context->CacheRun;
LastLCN = Context->CacheRunLastLCN;
DataRunStartLCN = Context->CacheRunStartLCN;
CurrentOffset = Context->CacheRunCurrentOffset;
}
else
{
LastLCN = 0;
DataRun = (PUCHAR)Context->Record + Context->Record->NonResident.MappingPairsOffset;
CurrentOffset = 0;
while (1)
{
DataRun = NtfsDecodeRun(DataRun, &DataRunOffset, &DataRunLength);
if (DataRunOffset != -1)
{
/* Normal data run. */
DataRunStartLCN = LastLCN + DataRunOffset;
LastLCN = DataRunStartLCN;
}
else
{
/* Sparse data run. */
DataRunStartLCN = -1;
}
if (Offset >= CurrentOffset &&
Offset < CurrentOffset + (DataRunLength * NtfsClusterSize))
{
break;
}
if (*DataRun == 0)
{
return 0;
}
CurrentOffset += DataRunLength * NtfsClusterSize;
}
}
/*
* II. Go through the run list and read the data
*/
AlreadyRead = 0;
while (Length > 0)
{
ReadLength = min(DataRunLength * NtfsClusterSize, Length);
if (DataRunStartLCN == -1)
RtlZeroMemory(Buffer, ReadLength);
else if (!NtfsDiskRead(DataRunStartLCN * NtfsClusterSize + Offset - CurrentOffset, ReadLength, Buffer))
break;
Length -= ReadLength;
Buffer += ReadLength;
AlreadyRead += ReadLength;
/*
* Go to next run in the list. Note that we don't do it only for
* Length > 0 because of run pointer caching.
*/
{
if (*DataRun == 0)
break;
DataRun = NtfsDecodeRun(DataRun, &DataRunOffset, &DataRunLength);
if (DataRunOffset != -1)
{
/* Normal data run. */
DataRunStartLCN = LastLCN + DataRunOffset;
LastLCN = DataRunStartLCN;
}
else
{
/* Sparse data run. */
DataRunStartLCN = -1;
}
CurrentOffset += DataRunLength * NtfsClusterSize;
}
}
Context->CacheRun = DataRun;
Context->CacheRunOffset = Offset + AlreadyRead;
Context->CacheRunStartLCN = DataRunStartLCN;
Context->CacheRunLastLCN = LastLCN;
Context->CacheRunCurrentOffset = CurrentOffset;
return AlreadyRead;
}
BOOL NtfsReadMftRecord(U32 MFTIndex, PNTFS_MFT_RECORD Buffer)
{
return NtfsReadAttribute(&NtfsMFTContext, MFTIndex * NtfsMftRecordSize, (PCHAR)Buffer, NtfsMftRecordSize) == NtfsMftRecordSize;
}
#ifdef DEBUG
VOID NtfsPrintFile(PNTFS_INDEX_ENTRY IndexEntry)
{
PWCHAR FileName;
U8 FileNameLength;
CHAR AnsiFileName[256];
U8 i;
FileName = IndexEntry->FileName.FileName;
FileNameLength = IndexEntry->FileName.FileNameLength;
for (i = 0; i < FileNameLength; i++)
AnsiFileName[i] = FileName[i];
AnsiFileName[i] = 0;
DbgPrint((DPRINT_FILESYSTEM, "- %s (%x)\n", AnsiFileName, IndexEntry->Data.Directory.IndexedFile));
}
#endif
BOOL NtfsCompareFileName(PCHAR FileName, PNTFS_INDEX_ENTRY IndexEntry)
{
PWCHAR EntryFileName;
U8 EntryFileNameLength;
U8 i;
EntryFileName = IndexEntry->FileName.FileName;
EntryFileNameLength = IndexEntry->FileName.FileNameLength;
#ifdef DEBUG
NtfsPrintFile(IndexEntry);
#endif
if (strlen(FileName) != EntryFileNameLength)
return FALSE;
/* Do case-sensitive compares for Posix file names. */
if (IndexEntry->FileName.FileNameType == FILE_NAME_POSIX)
{
for (i = 0; i < EntryFileNameLength; i++)
if (EntryFileName[i] != FileName[i])
return FALSE;
}
else
{
for (i = 0; i < EntryFileNameLength; i++)
if (tolower(EntryFileName[i]) != tolower(FileName[i]))
return FALSE;
}
return TRUE;
}
BOOL NtfsFindMftRecord(U32 MFTIndex, PCHAR FileName, U32 *OutMFTIndex)
{
PNTFS_MFT_RECORD MftRecord;
U32 Magic;
NTFS_ATTR_CONTEXT IndexRootCtx;
NTFS_ATTR_CONTEXT IndexBitmapCtx;
NTFS_ATTR_CONTEXT IndexAllocationCtx;
PNTFS_INDEX_ROOT IndexRoot;
U64 BitmapDataSize;
U64 IndexAllocationSize;
PCHAR BitmapData;
PCHAR IndexRecord;
PNTFS_INDEX_ENTRY IndexEntry, IndexEntryEnd;
U32 RecordOffset;
U32 IndexBlockSize;
MftRecord = MmAllocateMemory(NtfsMftRecordSize);
if (MftRecord == NULL)
{
return FALSE;
}
if (NtfsReadMftRecord(MFTIndex, MftRecord))
{
Magic = MftRecord->Magic;
if (!NtfsFindAttribute(&IndexRootCtx, MftRecord, ATTR_TYPE_INDEX_ROOT, L"$I30"))
{
MmFreeMemory(MftRecord);
return FALSE;
}
IndexRecord = MmAllocateMemory(NtfsIndexRecordSize);
if (IndexRecord == NULL)
{
MmFreeMemory(MftRecord);
return FALSE;
}
NtfsReadAttribute(&IndexRootCtx, 0, IndexRecord, NtfsIndexRecordSize);
IndexRoot = (PNTFS_INDEX_ROOT)IndexRecord;
IndexEntry = (PNTFS_INDEX_ENTRY)((PCHAR)&IndexRoot->IndexHeader + IndexRoot->IndexHeader.EntriesOffset);
/* Index root is always resident. */
IndexEntryEnd = (PNTFS_INDEX_ENTRY)(IndexRecord + IndexRootCtx.Record->Resident.ValueLength);
DbgPrint((DPRINT_FILESYSTEM, "NtfsIndexRecordSize: %x IndexBlockSize: %x\n", NtfsIndexRecordSize, IndexRoot->IndexBlockSize));
while (IndexEntry < IndexEntryEnd &&
!(IndexEntry->Flags & INDEX_ENTRY_END))
{
if (NtfsCompareFileName(FileName, IndexEntry))
{
*OutMFTIndex = IndexEntry->Data.Directory.IndexedFile;
MmFreeMemory(IndexRecord);
MmFreeMemory(MftRecord);
return TRUE;
}
IndexEntry = (PNTFS_INDEX_ENTRY)((PCHAR)IndexEntry + IndexEntry->Length);
}
if (IndexRoot->IndexHeader.Flags & LARGE_INDEX)
{
DbgPrint((DPRINT_FILESYSTEM, "Large Index!\n"));
IndexBlockSize = IndexRoot->IndexBlockSize;
if (!NtfsFindAttribute(&IndexBitmapCtx, MftRecord, ATTR_TYPE_BITMAP, L"$I30"))
{
DbgPrint((DPRINT_FILESYSTEM, "Corrupted filesystem!\n"));
MmFreeMemory(MftRecord);
return FALSE;
}
if (IndexBitmapCtx.Record->IsNonResident)
BitmapDataSize = IndexBitmapCtx.Record->NonResident.DataSize;
else
BitmapDataSize = IndexBitmapCtx.Record->Resident.ValueLength;
DbgPrint((DPRINT_FILESYSTEM, "BitmapDataSize: %x\n", BitmapDataSize));
BitmapData = MmAllocateMemory(BitmapDataSize);
if (BitmapData == NULL)
{
MmFreeMemory(IndexRecord);
MmFreeMemory(MftRecord);
return FALSE;
}
NtfsReadAttribute(&IndexBitmapCtx, 0, BitmapData, BitmapDataSize);
if (!NtfsFindAttribute(&IndexAllocationCtx, MftRecord, ATTR_TYPE_INDEX_ALLOCATION, L"$I30"))
{
DbgPrint((DPRINT_FILESYSTEM, "Corrupted filesystem!\n"));
MmFreeMemory(BitmapData);
MmFreeMemory(IndexRecord);
MmFreeMemory(MftRecord);
return FALSE;
}
if (IndexAllocationCtx.Record->IsNonResident)
IndexAllocationSize = IndexAllocationCtx.Record->NonResident.DataSize;
else
IndexAllocationSize = IndexAllocationCtx.Record->Resident.ValueLength;
RecordOffset = 0;
for (;;)
{
DbgPrint((DPRINT_FILESYSTEM, "RecordOffset: %x IndexAllocationSize: %x\n", RecordOffset, IndexAllocationSize));
for (; RecordOffset < IndexAllocationSize;)
{
U8 Bit = 1 << ((RecordOffset / IndexBlockSize) & 3);
U32 Byte = (RecordOffset / IndexBlockSize) >> 3;
if ((BitmapData[Byte] & Bit))
break;
RecordOffset += IndexBlockSize;
}
if (RecordOffset >= IndexAllocationSize)
break;
NtfsReadAttribute(&IndexAllocationCtx, RecordOffset, IndexRecord, IndexBlockSize);
/* FIXME */
IndexEntry = (PNTFS_INDEX_ENTRY)(IndexRecord + 0x18 + *(U16 *)(IndexRecord + 0x18));
IndexEntryEnd = (PNTFS_INDEX_ENTRY)(IndexRecord + IndexBlockSize);
while (IndexEntry < IndexEntryEnd &&
!(IndexEntry->Flags & INDEX_ENTRY_END))
{
if (NtfsCompareFileName(FileName, IndexEntry))
{
DbgPrint((DPRINT_FILESYSTEM, "File found\n"));
*OutMFTIndex = IndexEntry->Data.Directory.IndexedFile;
MmFreeMemory(BitmapData);
MmFreeMemory(IndexRecord);
MmFreeMemory(MftRecord);
return TRUE;
}
IndexEntry = (PNTFS_INDEX_ENTRY)((PCHAR)IndexEntry + IndexEntry->Length);
}
RecordOffset += IndexBlockSize;
}
MmFreeMemory(BitmapData);
}
MmFreeMemory(IndexRecord);
}
else
{
DbgPrint((DPRINT_FILESYSTEM, "Can't read MFT record\n"));
}
MmFreeMemory(MftRecord);
return FALSE;
}
BOOL NtfsLookupFile(PUCHAR FileName, PNTFS_MFT_RECORD MftRecord, PNTFS_ATTR_CONTEXT DataContext)
{
U32 NumberOfPathParts;
UCHAR PathPart[261];
U32 CurrentMFTIndex;
U8 i;
DbgPrint((DPRINT_FILESYSTEM, "NtfsLookupFile() FileName = %s\n", FileName));
CurrentMFTIndex = FILE_ROOT;
NumberOfPathParts = FsGetNumPathParts(FileName);
for (i = 0; i < NumberOfPathParts; i++)
{
FsGetFirstNameFromPath(PathPart, FileName);
for (; (*FileName != '\\') && (*FileName != '/') && (*FileName != '\0'); FileName++)
;
FileName++;
DbgPrint((DPRINT_FILESYSTEM, "- Lookup: %s\n", PathPart));
if (!NtfsFindMftRecord(CurrentMFTIndex, PathPart, &CurrentMFTIndex))
{
DbgPrint((DPRINT_FILESYSTEM, "- Failed\n"));
return FALSE;
}
DbgPrint((DPRINT_FILESYSTEM, "- Lookup: %x\n", CurrentMFTIndex));
}
if (!NtfsReadMftRecord(CurrentMFTIndex, MftRecord))
{
DbgPrint((DPRINT_FILESYSTEM, "NtfsLookupFile: Can't read MFT record\n"));
return FALSE;
}
if (!NtfsFindAttribute(DataContext, MftRecord, ATTR_TYPE_DATA, L""))
{
DbgPrint((DPRINT_FILESYSTEM, "NtfsLookupFile: Can't find data attribute\n"));
return FALSE;
}
return TRUE;
}
BOOL NtfsOpenVolume(U32 DriveNumber, U32 VolumeStartSector)
{
NtfsBootSector = (PNTFS_BOOTSECTOR)DISKREADBUFFER;
DbgPrint((DPRINT_FILESYSTEM, "NtfsOpenVolume() DriveNumber = 0x%x VolumeStartSector = 0x%x\n", DriveNumber, VolumeStartSector));
if (!DiskReadLogicalSectors(DriveNumber, VolumeStartSector, 1, (PCHAR)DISKREADBUFFER))
{
FileSystemError("Failed to read the boot sector.");
return FALSE;
}
if (RtlCompareMemory(NtfsBootSector->SystemId, "NTFS", 4))
{
FileSystemError("Invalid NTFS signature.");
return FALSE;
}
NtfsBootSector = MmAllocateMemory(NtfsBootSector->BytesPerSector);
if (NtfsBootSector == NULL)
{
return FALSE;
}
RtlCopyMemory(NtfsBootSector, (PCHAR)DISKREADBUFFER, ((PNTFS_BOOTSECTOR)DISKREADBUFFER)->BytesPerSector);
NtfsClusterSize = NtfsBootSector->SectorsPerCluster * NtfsBootSector->BytesPerSector;
if (NtfsBootSector->ClustersPerMftRecord > 0)
NtfsMftRecordSize = NtfsBootSector->ClustersPerMftRecord * NtfsClusterSize;
else
NtfsMftRecordSize = 1 << (-NtfsBootSector->ClustersPerMftRecord);
if (NtfsBootSector->ClustersPerIndexRecord > 0)
NtfsIndexRecordSize = NtfsBootSector->ClustersPerIndexRecord * NtfsClusterSize;
else
NtfsIndexRecordSize = 1 << (-NtfsBootSector->ClustersPerIndexRecord);
DbgPrint((DPRINT_FILESYSTEM, "NtfsClusterSize: 0x%x\n", NtfsClusterSize));
DbgPrint((DPRINT_FILESYSTEM, "ClustersPerMftRecord: %d\n", NtfsBootSector->ClustersPerMftRecord));
DbgPrint((DPRINT_FILESYSTEM, "ClustersPerIndexRecord: %d\n", NtfsBootSector->ClustersPerIndexRecord));
DbgPrint((DPRINT_FILESYSTEM, "NtfsMftRecordSize: 0x%x\n", NtfsMftRecordSize));
DbgPrint((DPRINT_FILESYSTEM, "NtfsIndexRecordSize: 0x%x\n", NtfsIndexRecordSize));
NtfsDriveNumber = DriveNumber;
NtfsSectorOfClusterZero = VolumeStartSector;
DbgPrint((DPRINT_FILESYSTEM, "Reading MFT index...\n"));
if (!DiskReadLogicalSectors(DriveNumber,
NtfsSectorOfClusterZero +
(NtfsBootSector->MftLocation * NtfsBootSector->SectorsPerCluster),
NtfsMftRecordSize / NtfsBootSector->BytesPerSector, (PCHAR)DISKREADBUFFER))
{
FileSystemError("Failed to read the Master File Table record.");
return FALSE;
}
NtfsMasterFileTable = MmAllocateMemory(NtfsMftRecordSize);
if (NtfsMasterFileTable == NULL)
{
MmFreeMemory(NtfsBootSector);
return FALSE;
}
RtlCopyMemory(NtfsMasterFileTable, (PCHAR)DISKREADBUFFER, NtfsMftRecordSize);
DbgPrint((DPRINT_FILESYSTEM, "Searching for DATA attribute...\n"));
if (!NtfsFindAttribute(&NtfsMFTContext, NtfsMasterFileTable, ATTR_TYPE_DATA, L""))
{
FileSystemError("Can't find data attribute for Master File Table.");
return FALSE;
}
return TRUE;
}
FILE* NtfsOpenFile(PUCHAR FileName)
{
PNTFS_FILE_HANDLE FileHandle;
PNTFS_MFT_RECORD MftRecord;
FileHandle = MmAllocateMemory(sizeof(NTFS_FILE_HANDLE) + NtfsMftRecordSize);
if (FileHandle == NULL)
{
return NULL;
}
MftRecord = (PNTFS_MFT_RECORD)(FileHandle + 1);
if (!NtfsLookupFile(FileName, MftRecord, &FileHandle->DataContext))
{
MmFreeMemory(FileHandle);
return NULL;
}
FileHandle->Offset = 0;
return (FILE*)FileHandle;
}
BOOL NtfsReadFile(FILE *File, U32 BytesToRead, U32* BytesRead, PVOID Buffer)
{
PNTFS_FILE_HANDLE FileHandle = (PNTFS_FILE_HANDLE)File;
U64 BytesRead64;
BytesRead64 = NtfsReadAttribute(&FileHandle->DataContext, FileHandle->Offset, Buffer, BytesToRead);
if (BytesRead64)
{
*BytesRead = (U32)BytesRead64;
FileHandle->Offset += BytesRead64;
return TRUE;
}
return FALSE;
}
U32 NtfsGetFileSize(FILE *File)
{
PNTFS_FILE_HANDLE FileHandle = (PNTFS_FILE_HANDLE)File;
if (FileHandle->DataContext.Record->IsNonResident)
return (U32)FileHandle->DataContext.Record->NonResident.DataSize;
else
return (U32)FileHandle->DataContext.Record->Resident.ValueLength;
}
VOID NtfsSetFilePointer(FILE *File, U32 NewFilePointer)
{
PNTFS_FILE_HANDLE FileHandle = (PNTFS_FILE_HANDLE)File;
FileHandle->Offset = NewFilePointer;
}
U32 NtfsGetFilePointer(FILE *File)
{
PNTFS_FILE_HANDLE FileHandle = (PNTFS_FILE_HANDLE)File;
return FileHandle->Offset;
}

View File

@@ -1,226 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* FreeLoader NTFS support
* Copyright (C) 2004 Filip Navara <xnavara@volny.cz>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __NTFS_H
#define __NTFS_H
#ifdef NTFS_DEFS
#define FILE_MFT 0
#define FILE_MFTMIRR 1
#define FILE_LOGFILE 2
#define FILE_VOLUME 3
#define FILE_ATTRDEF 4
#define FILE_ROOT 5
#define FILE_BITMAP 6
#define FILE_BOOT 7
#define FILE_BADCLUS 8
#define FILE_QUOTA 9
#define FILE_UPCASE 10
#define ATTR_TYPE_STANDARD_INFORMATION 0x10
#define ATTR_TYPE_ATTRIBUTE_LIST 0x20
#define ATTR_TYPE_FILENAME 0x30
#define ATTR_TYPE_SECURITY_DESCRIPTOR 0x50
#define ATTR_TYPE_DATA 0x80
#define ATTR_TYPE_INDEX_ROOT 0x90
#define ATTR_TYPE_INDEX_ALLOCATION 0xa0
#define ATTR_TYPE_BITMAP 0xb0
#define ATTR_TYPE_SYMLINK 0xc0
#define ATTR_TYPE_END 0xffffffff
#define ATTR_NORMAL 0
#define ATTR_COMPRESSED 1
#define ATTR_RESIDENT 2
#define ATTR_ENCRYPTED 0x4000
#define SMALL_INDEX 0
#define LARGE_INDEX 1
#define INDEX_ENTRY_NODE 1
#define INDEX_ENTRY_END 2
#define FILE_NAME_POSIX 0
#define FILE_NAME_WIN32 1
#define FILE_NAME_DOS 2
#define FILE_NAME_WIN32_AND_DOS 3
#endif
typedef struct
{
U8 JumpBoot[3]; // Jump to the boot loader routine
U8 SystemId[8]; // System Id ("NTFS ")
U16 BytesPerSector; // Bytes per sector
U8 SectorsPerCluster; // Number of sectors in a cluster
U8 Unused1[7];
U8 MediaDescriptor; // Media descriptor byte
U8 Unused2[2];
U16 SectorsPerTrack; // Number of sectors in a track
U16 NumberOfHeads; // Number of heads on the disk
U8 Unused3[8];
U8 DriveNumber; // Int 0x13 drive number (e.g. 0x80)
U8 CurrentHead;
U8 BootSignature; // Extended boot signature (0x80)
U8 Unused4;
U64 VolumeSectorCount; // Number of sectors in the volume
U64 MftLocation;
U64 MftMirrorLocation;
S8 ClustersPerMftRecord; // Clusters per MFT Record
U8 Unused5[3];
S8 ClustersPerIndexRecord; // Clusters per Index Record
U8 Unused6[3];
U64 VolumeSerialNumber; // Volume serial number
U8 BootCodeAndData[430]; // The remainder of the boot sector
U16 BootSectorMagic; // 0xAA55
} PACKED NTFS_BOOTSECTOR, *PNTFS_BOOTSECTOR;
typedef struct
{
U32 Magic;
U16 USAOffset; // Offset to the Update Sequence Array from the start of the ntfs record
U16 USACount;
U64 LogSequenceNumber;
U16 SequenceNumber;
U16 LinkCount;
U16 AttributesOffset;
U16 Flags;
U32 BytesInUse; // Number of bytes used in this mft record.
U32 BytesAllocated;
U64 BaseMFTRecord;
U16 NextAttributeInstance;
} PACKED NTFS_MFT_RECORD, *PNTFS_MFT_RECORD;
typedef struct
{
U32 Type;
U32 Length;
U8 IsNonResident;
U8 NameLength;
U16 NameOffset;
U16 Flags;
U16 Instance;
union
{
// Resident attributes
struct
{
U32 ValueLength;
U16 ValueOffset;
U16 Flags;
} PACKED Resident;
// Non-resident attributes
struct
{
U64 LowestVCN;
U64 HighestVCN;
U16 MappingPairsOffset;
U8 CompressionUnit;
U8 Reserved[5];
S64 AllocatedSize;
S64 DataSize;
S64 InitializedSize;
S64 CompressedSize;
} PACKED NonResident;
} PACKED;
} PACKED NTFS_ATTR_RECORD, *PNTFS_ATTR_RECORD;
typedef struct
{
U32 EntriesOffset;
U32 IndexLength;
U32 AllocatedSize;
U8 Flags;
U8 Reserved[3];
} PACKED NTFS_INDEX_HEADER, *PNTFS_INDEX_HEADER;
typedef struct
{
U32 Type;
U32 CollationRule;
U32 IndexBlockSize;
U8 ClustersPerIndexBlock;
U8 Reserved[3];
NTFS_INDEX_HEADER IndexHeader;
} PACKED NTFS_INDEX_ROOT, *PNTFS_INDEX_ROOT;
typedef struct
{
U64 ParentDirectory;
S64 CreationTime;
S64 LastDataChangeTime;
S64 LastMftChangeTime;
S64 LastAccessTime;
S64 AllocatedSize;
S64 DataSize;
U32 FileAttributes;
U16 PackedExtendedAttributeSize;
U16 Reserved;
U8 FileNameLength;
U8 FileNameType;
WCHAR FileName[0];
} PACKED NTFS_FILE_NAME_ATTR, *PNTFS_FILE_NAME_ATTR;
typedef struct {
union
{
struct
{
U64 IndexedFile;
} PACKED Directory;
struct
{
U16 DataOffset;
U16 DataLength;
U32 Reserved;
} PACKED ViewIndex;
} PACKED Data;
U16 Length;
U16 KeyLength;
U16 Flags;
U16 Reserved;
NTFS_FILE_NAME_ATTR FileName;
} PACKED NTFS_INDEX_ENTRY, *PNTFS_INDEX_ENTRY;
typedef struct
{
PNTFS_ATTR_RECORD Record;
PUCHAR CacheRun;
U64 CacheRunOffset;
S64 CacheRunStartLCN;
S64 CacheRunLastLCN;
U64 CacheRunCurrentOffset;
} NTFS_ATTR_CONTEXT, *PNTFS_ATTR_CONTEXT;
typedef struct
{
NTFS_ATTR_CONTEXT DataContext;
U64 Offset;
} PACKED NTFS_FILE_HANDLE, *PNTFS_FILE_HANDLE;
BOOL NtfsOpenVolume(U32 DriveNumber, U32 VolumeStartSector);
FILE* NtfsOpenFile(PUCHAR FileName);
BOOL NtfsReadFile(FILE *FileHandle, U32 BytesToRead, U32* BytesRead, PVOID Buffer);
U32 NtfsGetFileSize(FILE *FileHandle);
VOID NtfsSetFilePointer(FILE *FileHandle, U32 NewFilePointer);
U32 NtfsGetFilePointer(FILE *FileHandle);
#endif // #defined __NTFS_H

View File

@@ -1,171 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __ARCH_H
#define __ARCH_H
/* Defines needed for switching between real and protected mode */
#define NULL_DESC 0x00 /* NULL descriptor */
#define PMODE_CS 0x08 /* PMode code selector, base 0 limit 4g */
#define PMODE_DS 0x10 /* PMode data selector, base 0 limit 4g */
#define RMODE_CS 0x18 /* RMode code selector, base 0 limit 64k */
#define RMODE_DS 0x20 /* RMode data selector, base 0 limit 64k */
#define KERNEL_BASE 0xC0000000
//#define USER_CS 0x08
//#define USER_DS 0x10
//#define KERNEL_CS 0x20
//#define KERNEL_DS 0x28
#define KERNEL_CS 0x08
#define KERNEL_DS 0x10
#define CR0_PE_SET 0x00000001 /* OR this value with CR0 to enable pmode */
#define CR0_PE_CLR 0xFFFFFFFE /* AND this value with CR0 to disable pmode */
#define STACK16ADDR 0x7000 /* The 16-bit stack top will be at 0000:7000 */
#define STACK32ADDR 0x78000 /* The 32-bit stack top will be at 7000:8000, or 0x78000 */
#define BIOSCALLBUFFER 0x78000 /* Buffer to store temporary data for any Int386() call */
#define BIOSCALLBUFSEGMENT 0x7800 /* Buffer to store temporary data for any Int386() call */
#define BIOSCALLBUFOFFSET 0x0000 /* Buffer to store temporary data for any Int386() call */
#define FILESYSBUFFER 0x80000 /* Buffer to store file system data (e.g. cluster buffer for FAT) */
#define DISKREADBUFFER 0x90000 /* Buffer to store data read in from the disk via the BIOS */
/* Makes "x" a global variable or label */
#define EXTERN(x) .global x; x:
#ifndef ASM
typedef struct
{
unsigned long eax;
unsigned long ebx;
unsigned long ecx;
unsigned long edx;
unsigned long esi;
unsigned long edi;
unsigned short ds;
unsigned short es;
unsigned short fs;
unsigned short gs;
unsigned long eflags;
} PACKED DWORDREGS;
typedef struct
{
unsigned short ax, _upper_ax;
unsigned short bx, _upper_bx;
unsigned short cx, _upper_cx;
unsigned short dx, _upper_dx;
unsigned short si, _upper_si;
unsigned short di, _upper_di;
unsigned short ds;
unsigned short es;
unsigned short fs;
unsigned short gs;
unsigned short flags, _upper_flags;
} PACKED WORDREGS;
typedef struct
{
unsigned char al;
unsigned char ah;
unsigned short _upper_ax;
unsigned char bl;
unsigned char bh;
unsigned short _upper_bx;
unsigned char cl;
unsigned char ch;
unsigned short _upper_cx;
unsigned char dl;
unsigned char dh;
unsigned short _upper_dx;
unsigned short si, _upper_si;
unsigned short di, _upper_di;
unsigned short ds;
unsigned short es;
unsigned short fs;
unsigned short gs;
unsigned short flags, _upper_flags;
} PACKED BYTEREGS;
typedef union
{
DWORDREGS x;
DWORDREGS d;
WORDREGS w;
BYTEREGS b;
} REGS;
// Int386()
//
// Real mode interrupt vector interface
//
// (E)FLAGS can *only* be returned by this function, not set.
// Make sure all memory pointers are in SEG:OFFS format and
// not linear addresses, unless the interrupt handler
// specifically handles linear addresses.
int Int386(int ivec, REGS* in, REGS* out);
// Flag Masks
#define I386FLAG_CF 0x0001 // Carry Flag
#define I386FLAG_RESV1 0x0002 // Reserved - Must be 1
#define I386FLAG_PF 0x0004 // Parity Flag
#define I386FLAG_RESV2 0x0008 // Reserved - Must be 0
#define I386FLAG_AF 0x0010 // Auxiliary Flag
#define I386FLAG_RESV3 0x0020 // Reserved - Must be 0
#define I386FLAG_ZF 0x0040 // Zero Flag
#define I386FLAG_SF 0x0080 // Sign Flag
#define I386FLAG_TF 0x0100 // Trap Flag (Single Step)
#define I386FLAG_IF 0x0200 // Interrupt Flag
#define I386FLAG_DF 0x0400 // Direction Flag
#define I386FLAG_OF 0x0800 // Overflow Flag
// This macro tests the Carry Flag
// If CF is set then the call failed (usually)
#define INT386_SUCCESS(regs) ((regs.x.eflags & I386FLAG_CF) == 0)
void EnableA20(void);
VOID ChainLoadBiosBootSectorCode(VOID); // Implemented in boot.S
VOID SoftReboot(VOID); // Implemented in boot.S
VOID DetectHardware(VOID); // Implemented in hardware.c
#endif /* ! ASM */
#endif // #defined __ARCH_H

View File

@@ -1,29 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __BOOTMGR_H
#define __BOOTMGR_H
U32 GetDefaultOperatingSystem(PUCHAR OperatingSystemList[], U32 OperatingSystemCount);
S32 GetTimeOut(VOID);
BOOL MainBootMenuKeyPressFilter(U32 KeyPress);
#endif // #defined __BOOTMGR_H

View File

@@ -1,30 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __CACHE_H
#define __CACHE_H
BOOL CacheInitializeDrive(U32 DriveNumber);
VOID CacheInvalidateCacheData(VOID);
BOOL CacheReadDiskSectors(U32 DiskNumber, U32 StartSector, U32 SectorCount, PVOID Buffer);
BOOL CacheForceDiskSectorsIntoCache(U32 DiskNumber, U32 StartSector, U32 SectorCount);
BOOL CacheReleaseMemory(U32 MinimumAmountToRelease);
#endif // defined __CACHE_H

View File

@@ -1,32 +0,0 @@
/*
* FreeLoader
* Copyright (C) 2001 Brian Palmer <brianp@sginet.com>
* Copyright (C) 2001 Eric Kohl
* Copyright (C) 2001 Emanuele Aliberti
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __RS232_H
#define __RS232_H
BOOL Rs232PortInitialize(U32 ComPort, U32 BaudRate);
BOOL Rs232PortGetByte(PUCHAR ByteRecieved);
BOOL Rs232PortPollByte(PUCHAR ByteRecieved);
VOID Rs232PortPutByte(UCHAR ByteToSend);
#endif // defined __RS232_H

View File

@@ -1,84 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __DEBUG_H
#define __DEBUG_H
#ifdef DEBUG
#define DPRINT_NONE 0x00000000 // No debug print
#define DPRINT_WARNING 0x00000001 // OR this with DebugPrintMask to enable debugger messages and other misc stuff
#define DPRINT_MEMORY 0x00000002 // OR this with DebugPrintMask to enable memory management messages
#define DPRINT_FILESYSTEM 0x00000004 // OR this with DebugPrintMask to enable file system messages
#define DPRINT_INIFILE 0x00000008 // OR this with DebugPrintMask to enable .ini file messages
#define DPRINT_UI 0x00000010 // OR this with DebugPrintMask to enable user interface messages
#define DPRINT_DISK 0x00000020 // OR this with DebugPrintMask to enable disk messages
#define DPRINT_CACHE 0x00000040 // OR this with DebugPrintMask to enable cache messages
#define DPRINT_REGISTRY 0x00000080 // OR this with DebugPrintMask to enable registry messages
#define DPRINT_REACTOS 0x00000100 // OR this with DebugPrintMask to enable ReactOS messages
#define DPRINT_LINUX 0x00000200 // OR this with DebugPrintMask to enable Linux messages
#define DPRINT_HWDETECT 0x00000400 // OR this with DebugPrintMask to enable hardware detection messages
VOID DebugInit(VOID);
VOID DebugPrint(U32 Mask, char *format, ...);
VOID DebugDumpBuffer(U32 Mask, PVOID Buffer, U32 Length);
#define DbgPrint(_x_) DebugPrint _x_ ;
#define BugCheck(_x_) { DebugPrint(DPRINT_WARNING, "Fatal Error: %s:%d(%s)\n", __FILE__, __LINE__, __FUNCTION__); DebugPrint _x_ ; for (;;); }
#define DbgDumpBuffer(_x_, _y_, _z_) DebugDumpBuffer(_x_, _y_, _z_)
#ifdef __i386__
// Debugging support functions:
//
// BREAKPOINT() - Inserts an "int 3" instruction
// INSTRUCTION_BREAKPOINTX(x) - Enters exception handler right before instruction at address "x" is executed
// MEMORY_READWRITE_BREAKPOINTX(x) - Enters exception handler when a read or write occurs at address "x"
// MEMORY_WRITE_BREAKPOINTX(x) - Enters exception handler when a write occurs at address "x"
//
// You may have as many BREAKPOINT()'s as you like but you may only
// have up to four of any of the others.
#define BREAKPOINT() __asm__ ("int $3");
void INSTRUCTION_BREAKPOINT1(unsigned long addr);
void MEMORY_READWRITE_BREAKPOINT1(unsigned long addr);
void MEMORY_WRITE_BREAKPOINT1(unsigned long addr);
void INSTRUCTION_BREAKPOINT2(unsigned long addr);
void MEMORY_READWRITE_BREAKPOINT2(unsigned long addr);
void MEMORY_WRITE_BREAKPOINT2(unsigned long addr);
void INSTRUCTION_BREAKPOINT3(unsigned long addr);
void MEMORY_READWRITE_BREAKPOINT3(unsigned long addr);
void MEMORY_WRITE_BREAKPOINT3(unsigned long addr);
void INSTRUCTION_BREAKPOINT4(unsigned long addr);
void MEMORY_READWRITE_BREAKPOINT4(unsigned long addr);
void MEMORY_WRITE_BREAKPOINT4(unsigned long addr);
#endif // defined __i386__
#else
#define DbgPrint(_x_)
#define BugCheck(_x_)
#define DbgDumpBuffer(_x_, _y_, _z_)
#endif // defined DEBUG
#define UNIMPLEMENTED() BugCheck((DPRINT_WARNING, "This function is unimplemented!\n"))
#endif // defined __DEBUG_H

View File

@@ -1,147 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __DISK_H
#define __DISK_H
typedef struct _GEOMETRY
{
U32 Cylinders; // Number of cylinders on the disk
U32 Heads; // Number of heads on the disk
U32 Sectors; // Number of sectors per track
U32 BytesPerSector; // Number of bytes per sector
} GEOMETRY, *PGEOMETRY;
//
// Extended disk geometry (Int13 / ah=48h)
//
typedef struct _EXTENDED_GEOMETRY
{
U16 Size;
U16 Flags;
U32 Cylinders;
U32 Heads;
U32 SectorsPerTrack;
U64 Sectors;
U16 BytesPerSector;
U32 PDPTE;
} __attribute__((packed)) EXTENDED_GEOMETRY, *PEXTENDED_GEOMETRY;
//
// Define the structure of a partition table entry
//
typedef struct _PARTITION_TABLE_ENTRY
{
U8 BootIndicator; // 0x00 - non-bootable partition, 0x80 - bootable partition (one partition only)
U8 StartHead; // Beginning head number
U8 StartSector; // Beginning sector (2 high bits of cylinder #)
U8 StartCylinder; // Beginning cylinder# (low order bits of cylinder #)
U8 SystemIndicator; // System indicator
U8 EndHead; // Ending head number
U8 EndSector; // Ending sector (2 high bits of cylinder #)
U8 EndCylinder; // Ending cylinder# (low order bits of cylinder #)
U32 SectorCountBeforePartition; // Number of sectors preceding the partition
U32 PartitionSectorCount; // Number of sectors in the partition
} PACKED PARTITION_TABLE_ENTRY, *PPARTITION_TABLE_ENTRY;
//
// Define the structure of the master boot record
//
typedef struct _MASTER_BOOT_RECORD
{
U8 MasterBootRecordCodeAndData[0x1b8]; /* 0x000 */
U32 Signature; /* 0x1B8 */
U16 Reserved; /* 0x1BC */
PARTITION_TABLE_ENTRY PartitionTable[4]; /* 0x1BE */
U16 MasterBootRecordMagic; /* 0x1FE */
} PACKED MASTER_BOOT_RECORD, *PMASTER_BOOT_RECORD;
//
// Partition type defines
//
#define PARTITION_ENTRY_UNUSED 0x00 // Entry unused
#define PARTITION_FAT_12 0x01 // 12-bit FAT entries
#define PARTITION_XENIX_1 0x02 // Xenix
#define PARTITION_XENIX_2 0x03 // Xenix
#define PARTITION_FAT_16 0x04 // 16-bit FAT entries
#define PARTITION_EXTENDED 0x05 // Extended partition entry
#define PARTITION_HUGE 0x06 // Huge partition MS-DOS V4
#define PARTITION_IFS 0x07 // IFS Partition
#define PARTITION_OS2BOOTMGR 0x0A // OS/2 Boot Manager/OPUS/Coherent swap
#define PARTITION_FAT32 0x0B // FAT32
#define PARTITION_FAT32_XINT13 0x0C // FAT32 using extended int13 services
#define PARTITION_XINT13 0x0E // Win95 partition using extended int13 services
#define PARTITION_XINT13_EXTENDED 0x0F // Same as type 5 but uses extended int13 services
#define PARTITION_NTFS 0x17 // NTFS
#define PARTITION_PREP 0x41 // PowerPC Reference Platform (PReP) Boot Partition
#define PARTITION_LDM 0x42 // Logical Disk Manager partition
#define PARTITION_UNIX 0x63 // Unix
#define PARTITION_LINUX_SWAP 0x82 // Linux Swap Partition
#define PARTITION_EXT2 0x83 // Linux Ext2/Ext3
///////////////////////////////////////////////////////////////////////////////////////
//
// i386 BIOS Disk Functions (i386disk.c)
//
///////////////////////////////////////////////////////////////////////////////////////
#ifdef __i386__
//BOOL DiskReadLogicalSectors(U32 DriveNumber, U64 SectorNumber, U32 SectorCount, PVOID Buffer);
BOOL DiskReadLogicalSectorsLBA(U32 DriveNumber, U64 SectorNumber, U32 SectorCount, PVOID Buffer);
BOOL DiskReadLogicalSectorsCHS(U32 DriveNumber, U64 SectorNumber, U32 SectorCount, PVOID Buffer);
BOOL DiskResetController(U32 DriveNumber);
BOOL DiskInt13ExtensionsSupported(U32 DriveNumber);
//VOID DiskStopFloppyMotor(VOID);
BOOL DiskGetDriveParameters(U32 DriveNumber, PGEOMETRY Geometry);
BOOL DiskGetExtendedDriveParameters(U32 DriveNumber, PVOID Buffer, U16 BufferSize);
//U32 DiskGetCacheableBlockCount(U32 DriveNumber);
#endif // defined __i386__
///////////////////////////////////////////////////////////////////////////////////////
//
// FreeLoader Disk Functions
//
///////////////////////////////////////////////////////////////////////////////////////
VOID DiskReportError (BOOL bError);
VOID DiskError(PUCHAR ErrorString, U32 ErrorCode);
PUCHAR DiskGetErrorCodeString(U32 ErrorCode);
BOOL DiskGetDriveGeometry(U32 DriveNumber, PGEOMETRY DriveGeometry);
BOOL DiskReadLogicalSectors(U32 DriveNumber, U64 SectorNumber, U32 SectorCount, PVOID Buffer); // Implemented in i386disk.c
BOOL DiskIsDriveRemovable(U32 DriveNumber);
VOID DiskStopFloppyMotor(VOID); // Implemented in i386disk.c
U32 DiskGetCacheableBlockCount(U32 DriveNumber); // Implemented in i386disk.c
///////////////////////////////////////////////////////////////////////////////////////
//
// Fixed Disk Partition Management Functions
//
///////////////////////////////////////////////////////////////////////////////////////
BOOL DiskGetActivePartitionEntry(U32 DriveNumber, PPARTITION_TABLE_ENTRY PartitionTableEntry);
BOOL DiskGetPartitionEntry(U32 DriveNumber, U32 PartitionNumber, PPARTITION_TABLE_ENTRY PartitionTableEntry);
BOOL DiskGetFirstPartitionEntry(PMASTER_BOOT_RECORD MasterBootRecord, PPARTITION_TABLE_ENTRY PartitionTableEntry);
BOOL DiskGetFirstExtendedPartitionEntry(PMASTER_BOOT_RECORD MasterBootRecord, PPARTITION_TABLE_ENTRY PartitionTableEntry);
BOOL DiskReadBootRecord(U32 DriveNumber, U64 LogicalSectorNumber, PMASTER_BOOT_RECORD BootRecord);
#endif // defined __DISK_H

View File

@@ -1,43 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __DRIVEMAP_H
#define __DRIVEMAP_H
typedef struct
{
U8 DriveMapCount; // Count of drives currently mapped
U8 DriveMap[8]; // Map of BIOS drives
} PACKED DRIVE_MAP_LIST, *PDRIVE_MAP_LIST;
VOID DriveMapMapDrivesInSection(PUCHAR SectionName);
BOOL DriveMapIsValidDriveString(PUCHAR DriveString); // Checks the drive string ("hd0") for validity
U32 DriveMapGetBiosDriveNumber(PUCHAR DeviceName); // Returns a BIOS drive number for any given device name (e.g. 0x80 for 'hd0')
VOID DriveMapInstallInt13Handler(PDRIVE_MAP_LIST DriveMap); // Installs the int 13h handler for the drive mapper
VOID DriveMapRemoveInt13Handler(VOID); // Removes a previously installed int 13h drive map handler
extern PVOID DriveMapInt13HandlerStart;
extern PVOID DriveMapInt13HandlerEnd;
extern U32 DriveMapOldInt13HandlerAddress;
extern DRIVE_MAP_LIST DriveMapInt13HandlerMapList;
#endif // #defined __DRIVEMAP_H

View File

@@ -1,81 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __FREELDR_H
#define __FREELDR_H
#define NULL 0
#define TRUE 1
#define FALSE 0
#define BOOL int
#define BOOLEAN int
typedef BOOLEAN *PBOOLEAN;
#define CHAR char
#define PCHAR char *
#define UCHAR unsigned char
#define PUCHAR unsigned char *
#define WCHAR unsigned short
#define PWCHAR unsigned short *
#define VOID void
#define PVOID VOID*
#ifdef __i386__
#define size_t unsigned int
typedef unsigned char U8;
typedef char S8;
typedef unsigned short U16;
typedef short S16;
typedef unsigned long U32;
typedef long S32;
typedef unsigned long long U64;
typedef long long S64;
typedef U8 __u8;
typedef S8 __s8;
typedef U16 __u16;
typedef S16 __s16;
typedef U32 __u32;
typedef S32 __s32;
typedef U64 __u64;
typedef S64 __s64;
#endif // __i386__
typedef U8 *PU8;
typedef U16 *PU16;
typedef U32 *PU32;
#define ROUND_UP(N, S) ((N) + (S) - ((N) % (S)))
#define ROUND_DOWN(N, S) ((N) - ((N) % (S)))
#define PACKED __attribute__((packed))
extern U32 BootDrive; // BIOS boot drive, 0-A:, 1-B:, 0x80-C:, 0x81-D:, etc.
extern U32 BootPartition; // Boot Partition, 1-4
extern BOOL UserInterfaceUp; // Tells us if the user interface is displayed
void BootMain(void);
VOID RunLoader(VOID);
#endif // defined __FREELDR_H

View File

@@ -1,47 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __FS_H
#define __FS_H
#define EOF -1
#define FS_FAT 1
#define FS_NTFS 2
#define FS_EXT2 3
#define FS_REISER 4
#define FS_ISO9660 5
#define FILE VOID
#define PFILE FILE *
VOID FileSystemError(PUCHAR ErrorString);
BOOL FsOpenVolume(U32 DriveNumber, U32 PartitionNumber);
PFILE FsOpenFile(PUCHAR FileName);
VOID FsCloseFile(PFILE FileHandle);
BOOL FsReadFile(PFILE FileHandle, U32 BytesToRead, U32* BytesRead, PVOID Buffer);
U32 FsGetFileSize(PFILE FileHandle);
VOID FsSetFilePointer(PFILE FileHandle, U32 NewFilePointer);
U32 FsGetFilePointer(PFILE FileHandle);
BOOL FsIsEndOfFile(PFILE FileHandle);
U32 FsGetNumPathParts(PUCHAR Path);
VOID FsGetFirstNameFromPath(PUCHAR Buffer, PUCHAR Path);
#endif // #defined __FS_H

View File

@@ -1,130 +0,0 @@
/*
* ReactOS kernel
* Copyright (C) 2002, 2003 ReactOS Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* $Id: inffile.h,v 1.1 2003/05/25 21:17:30 ekohl Exp $
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS text-mode setup
* FILE: subsys/system/usetup/infcache.h
* PURPOSE: INF file parser that caches contents of INF file in memory
* PROGRAMMER: Royce Mitchell III
* Eric Kohl
*/
#ifndef __INFCACHE_H__
#define __INFCACHE_H__
#define STATUS_BAD_SECTION_NAME_LINE (0xC0700001)
#define STATUS_SECTION_NAME_TOO_LONG (0xC0700002)
#define STATUS_WRONG_INF_STYLE (0xC0700003)
#define STATUS_NOT_ENOUGH_MEMORY (0xC0700004)
#define MAX_INF_STRING_LENGTH 512
typedef PU32 HINF, *PHINF;
typedef struct _INFCONTEXT
{
PVOID Inf;
// PVOID CurrentInf;
PVOID Section;
PVOID Line;
} INFCONTEXT, *PINFCONTEXT;
/* FUNCTIONS ****************************************************************/
BOOLEAN
InfOpenFile (PHINF InfHandle,
PCHAR FileName,
PU32 ErrorLine);
VOID
InfCloseFile (HINF InfHandle);
BOOLEAN
InfFindFirstLine (HINF InfHandle,
PCHAR Section,
PCHAR Key,
PINFCONTEXT Context);
BOOLEAN
InfFindNextLine (PINFCONTEXT ContextIn,
PINFCONTEXT ContextOut);
BOOLEAN
InfFindFirstMatchLine (PINFCONTEXT ContextIn,
PCHAR Key,
PINFCONTEXT ContextOut);
BOOLEAN
InfFindNextMatchLine (PINFCONTEXT ContextIn,
PCHAR Key,
PINFCONTEXT ContextOut);
S32
InfGetLineCount (HINF InfHandle,
PCHAR Section);
S32
InfGetFieldCount (PINFCONTEXT Context);
BOOLEAN
InfGetBinaryField (PINFCONTEXT Context,
U32 FieldIndex,
PU8 ReturnBuffer,
U32 ReturnBufferSize,
PU32 RequiredSize);
BOOLEAN
InfGetIntField (PINFCONTEXT Context,
U32 FieldIndex,
S32 *IntegerValue);
BOOLEAN
InfGetMultiSzField (PINFCONTEXT Context,
U32 FieldIndex,
PCHAR ReturnBuffer,
U32 ReturnBufferSize,
PU32 RequiredSize);
BOOLEAN
InfGetStringField (PINFCONTEXT Context,
U32 FieldIndex,
PCHAR ReturnBuffer,
U32 ReturnBufferSize,
PU32 RequiredSize);
BOOLEAN
InfGetData (PINFCONTEXT Context,
PCHAR *Key,
PCHAR *Data);
BOOLEAN
InfGetDataField (PINFCONTEXT Context,
U32 FieldIndex,
PCHAR *Data);
#endif /* __INFCACHE_H__ */
/* EOF */

View File

@@ -1,35 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __PARSEINI_H
#define __PARSEINI_H
BOOL IniFileInitialize(VOID);
BOOL IniOpenSection(PUCHAR SectionName, U32* SectionId);
U32 IniGetNumSectionItems(U32 SectionId);
U32 IniGetSectionSettingNameSize(U32 SectionId, U32 SettingIndex);
U32 IniGetSectionSettingValueSize(U32 SectionId, U32 SettingIndex);
BOOL IniReadSettingByNumber(U32 SectionId, U32 SettingNumber, PUCHAR SettingName, U32 NameSize, PUCHAR SettingValue, U32 ValueSize);
BOOL IniReadSettingByName(U32 SectionId, PUCHAR SettingName, PUCHAR Buffer, U32 BufferSize);
BOOL IniAddSection(PUCHAR SectionName, U32* SectionId);
BOOL IniAddSettingValueToSection(U32 SectionId, PUCHAR SettingName, PUCHAR SettingValue);
#endif // defined __PARSEINI_H

View File

@@ -1,46 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __KEYCODES_H
#define __KEYCODES_H
// Key codes
#define KEY_EXTENDED 0x00
#define KEY_ENTER 0x0D
#define KEY_BACKSPACE 0x08
#define KEY_SPACE 0x20
#define KEY_UP 0x48
#define KEY_DOWN 0x50
#define KEY_LEFT 0x4B
#define KEY_RIGHT 0x4D
#define KEY_ESC 0x1B
#define KEY_F1 0x3B
#define KEY_F2 0x3C
#define KEY_F3 0x3D
#define KEY_F4 0x3E
#define KEY_F5 0x3F
#define KEY_F6 0x40
#define KEY_F7 0x41
#define KEY_F8 0x42
#define KEY_F9 0x43
#define KEY_F10 0x44
#endif // #defined __KEYCODES_H

View File

@@ -1,139 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <fs.h>
#ifndef __LINUX_H
#define __LINUX_H
#define LINUX_LOADER_TYPE_LILO 0x01
#define LINUX_LOADER_TYPE_LOADLIN 0x11
#define LINUX_LOADER_TYPE_BOOTSECT 0x21
#define LINUX_LOADER_TYPE_SYSLINUX 0x31
#define LINUX_LOADER_TYPE_ETHERBOOT 0x41
#define LINUX_LOADER_TYPE_FREELOADER 0x81
#define LINUX_COMMAND_LINE_MAGIC 0xA33F
#define LINUX_SETUP_HEADER_ID 0x53726448 // 'HdrS'
#define LINUX_BOOT_SECTOR_MAGIC 0xAA55
#define LINUX_KERNEL_LOAD_ADDRESS 0x100000
#define LINUX_FLAG_LOAD_HIGH 0x01
#define LINUX_FLAG_CAN_USE_HEAP 0x80
#define LINUX_MAX_INITRD_ADDRESS 0x38000000
typedef struct
{
U8 BootCode1[0x20];
U16 CommandLineMagic;
U16 CommandLineOffset;
U8 BootCode2[0x1CD];
U8 SetupSectors;
U16 RootFlags;
U16 SystemSize;
U16 SwapDevice;
U16 RamSize;
U16 VideoMode;
U16 RootDevice;
U16 BootFlag; // 0xAA55
} PACKED LINUX_BOOTSECTOR, *PLINUX_BOOTSECTOR;
typedef struct
{
U8 JumpInstruction[2];
U32 SetupHeaderSignature; // Signature for SETUP-header
U16 Version; // Version number of header format
U16 RealModeSwitch; // Default switch
U16 SetupSeg; // SETUPSEG
U16 StartSystemSeg;
U16 KernelVersion; // Offset to kernel version string
U8 TypeOfLoader; // Loader ID
// =0, old one (LILO, Loadlin,
// Bootlin, SYSLX, bootsect...)
// else it is set by the loader:
// 0xTV: T=0 for LILO
// T=1 for Loadlin
// T=2 for bootsect-loader
// T=3 for SYSLX
// T=4 for ETHERBOOT
// V = version
U8 LoadFlags; // flags, unused bits must be zero (RFU)
// LOADED_HIGH = 1
// bit within loadflags,
// if set, then the kernel is loaded high
// CAN_USE_HEAP = 0x80
// if set, the loader also has set heap_end_ptr
// to tell how much space behind setup.S
// can be used for heap purposes.
// Only the loader knows what is free!
U16 SetupMoveSize; // size to move, when we (setup) are not
// loaded at 0x90000. We will move ourselves
// to 0x90000 then just before jumping into
// the kernel. However, only the loader
// know how much of data behind us also needs
// to be loaded.
U32 Code32Start; // here loaders can put a different
// start address for 32-bit code.
//
// 0x1000 = default for zImage
//
// 0x100000 = default for big kernel
U32 RamdiskAddress; // address of loaded ramdisk image
// Here the loader (or kernel generator) puts
// the 32-bit address were it loaded the image.
U32 RamdiskSize; // its size in bytes
U16 BootSectKludgeOffset;
U16 BootSectKludgeSegment;
U16 HeapEnd; // space from here (exclusive) down to
// end of setup code can be used by setup
// for local heap purposes.
U16 Pad1;
U32 CommandLinePointer; // 32-bit pointer to the kernel command line
U32 InitrdAddressMax; // Highest legal initrd address
} PACKED LINUX_SETUPSECTOR, *PLINUX_SETUPSECTOR;
VOID BootNewLinuxKernel(VOID); // Implemented in linux.S
VOID BootOldLinuxKernel(U32 KernelSize); // Implemented in linux.S
VOID LoadAndBootLinux(PUCHAR OperatingSystemName, PUCHAR Description);
BOOL LinuxParseIniSection(PUCHAR OperatingSystemName);
BOOL LinuxReadBootSector(PFILE LinuxKernelFile);
BOOL LinuxReadSetupSector(PFILE LinuxKernelFile);
BOOL LinuxReadKernel(PFILE LinuxKernelFile);
BOOL LinuxCheckKernelVersion(VOID);
BOOL LinuxReadInitrd(PFILE LinuxInitrdFile);
#endif // defined __LINUX_H

View File

@@ -1,27 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __BOOT_H
#define __BOOT_H
VOID LoadAndBootBootSector(PUCHAR OperatingSystemName);
VOID LoadAndBootPartition(PUCHAR OperatingSystemName);
VOID LoadAndBootDrive(PUCHAR OperatingSystemName);
#endif // defined __BOOT_H

View File

@@ -1,58 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __MEMORY_H
#define __MEMORY_H
#define MEMTYPE_USABLE 0x01
#define MEMTYPE_RESERVED 0x02
#define MEMTYPE_ACPI_RECLAIM 0x03
#define MEMTYPE_ACPI_NVS 0x04
typedef struct
{
U64 BaseAddress;
U64 Length;
U32 Type;
U32 Reserved;
} PACKED BIOS_MEMORY_MAP, *PBIOS_MEMORY_MAP;
U32 GetSystemMemorySize(VOID); // Returns the amount of total memory in the system
// These functions are implemented in mem.S
U32 GetExtendedMemorySize(VOID); // Returns extended memory size in KB
U32 GetConventionalMemorySize(VOID); // Returns conventional memory size in KB
U32 GetBiosMemoryMap(PBIOS_MEMORY_MAP BiosMemoryMap, U32 MaxMemoryMapSize); // Fills structure with BIOS memory map and returns memory map item count
//BOOL MmInitializeMemoryManager(U32 LowMemoryStart, U32 LowMemoryLength);
BOOL MmInitializeMemoryManager(VOID);
PVOID MmAllocateMemory(U32 MemorySize);
VOID MmFreeMemory(PVOID MemoryPointer);
//PVOID MmAllocateLowMemory(U32 MemorySize);
//VOID MmFreeLowMemory(PVOID MemoryPointer);
PVOID MmAllocateMemoryAtAddress(U32 MemorySize, PVOID DesiredAddress);
PVOID MmAllocateHighestMemoryBelowAddress(U32 MemorySize, PVOID DesiredAddress);
#endif // defined __MEMORY_H

View File

@@ -1,164 +0,0 @@
/* multiboot.h - the header for Multiboot */
/* Copyright (C) 1999 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#ifndef __MULTIBOOT_H
#define __MULTIBOOT_H
/* Macros. */
/* The magic number for the Multiboot header. */
#define MULTIBOOT_HEADER_MAGIC 0x1BADB002
/* The flags for the Multiboot header. */
#define MULTIBOOT_HEADER_FLAGS 0x00010003
/* The magic number passed by a Multiboot-compliant boot loader. */
#define MULTIBOOT_BOOTLOADER_MAGIC 0x2BADB002
/* The size of our stack (16KB). */
#define STACK_SIZE 0x4000
/* C symbol format. HAVE_ASM_USCORE is defined by configure. */
#ifdef HAVE_ASM_USCORE
# define EXT_C(sym) _ ## sym
#else
# define EXT_C(sym) sym
#endif
#define MB_INFO_FLAG_MEM_SIZE 0x00000001
#define MB_INFO_FLAG_BOOT_DEVICE 0x00000002
#define MB_INFO_FLAG_COMMAND_LINE 0x00000004
#define MB_INFO_FLAG_MODULES 0x00000008
#define MB_INFO_FLAG_AOUT_SYMS 0x00000010
#define MB_INFO_FLAG_ELF_SYMS 0x00000020
#define MB_INFO_FLAG_MEMORY_MAP 0x00000040
#define MB_INFO_FLAG_DRIVES 0x00000080
#define MB_INFO_FLAG_CONFIG_TABLE 0x00000100
#define MB_INFO_FLAG_BOOT_LOADER_NAME 0x00000200
#define MB_INFO_FLAG_APM_TABLE 0x00000400
#define MB_INFO_FLAG_GRAPHICS_TABLE 0x00000800
#ifndef ASM
/* Do not include here in boot.S. */
/* Types. */
/* The Multiboot header. */
typedef struct multiboot_header
{
unsigned long magic;
unsigned long flags;
unsigned long checksum;
unsigned long header_addr;
unsigned long load_addr;
unsigned long load_end_addr;
unsigned long bss_end_addr;
unsigned long entry_addr;
} multiboot_header_t;
/* The symbol table for a.out. */
typedef struct aout_symbol_table
{
unsigned long tabsize;
unsigned long strsize;
unsigned long addr;
unsigned long reserved;
} aout_symbol_table_t;
/* The section header table for ELF. */
typedef struct elf_section_header_table
{
unsigned long num;
unsigned long size;
unsigned long addr;
unsigned long shndx;
} elf_section_header_table_t;
/* The Multiboot information. */
typedef struct multiboot_info
{
unsigned long flags;
unsigned long mem_lower;
unsigned long mem_upper;
unsigned long boot_device;
unsigned long cmdline;
unsigned long mods_count;
unsigned long mods_addr;
#if 0
/* reactos and loadros define this entry with a size of 12 byte but the union is 16 byte */
union
{
aout_symbol_table_t aout_sym;
elf_section_header_table_t elf_sec;
} u;
#else
char syms[12];
#endif
unsigned long mmap_length;
unsigned long mmap_addr;
} multiboot_info_t;
/* The module structure. */
typedef struct module
{
unsigned long mod_start;
unsigned long mod_end;
unsigned long string;
unsigned long reserved;
} module_t;
/* The memory map. Be careful that the offset 0 is base_addr_low
but no size. */
typedef struct memory_map
{
//unsigned long size;
unsigned long base_addr_low;
unsigned long base_addr_high;
unsigned long length_low;
unsigned long length_high;
unsigned long type;
unsigned long reserved;
} memory_map_t;
multiboot_header_t mb_header; // Multiboot header structure defined in kernel image file
multiboot_info_t mb_info; // Multiboot info structure passed to kernel
char multiboot_kernel_cmdline[255]; // Command line passed to kernel
module_t multiboot_modules[64]; // Array to hold boot module info loaded for the kernel
char multiboot_module_strings[64][256]; // Array to hold module names
unsigned long multiboot_memory_map_descriptor_size;
memory_map_t multiboot_memory_map[32]; // Memory map
void boot_reactos(void);
#include "fs.h" // Included FILE structure definition
BOOL MultiBootLoadKernel(FILE *KernelImage);
//BOOL MultiBootLoadModule(FILE *ModuleImage, char *ModuleName);
PVOID MultiBootLoadModule(FILE *ModuleImage, char *ModuleName, U32* ModuleSize);
int GetBootPartition(char *OperatingSystemName);
PVOID MultiBootCreateModule(char *ModuleName);
BOOL MultiBootCloseModule(PVOID ModuleBase, U32 dwModuleSize);
#endif /* ! ASM */
#endif // defined __MULTIBOOT_H

View File

@@ -1,34 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __OPTIONS_H
#define __OPTIONS_H
VOID DoOptionsMenu(VOID);
VOID OptionMenuReboot(VOID);
VOID OptionMenuCustomBoot(VOID);
VOID OptionMenuCustomBootDisk(VOID);
VOID OptionMenuCustomBootPartition(VOID);
VOID OptionMenuCustomBootBootSectorFile(VOID);
VOID OptionMenuCustomBootReactOS(VOID);
VOID OptionMenuCustomBootLinux(VOID);
#endif // #defined __OPTIONS_H

View File

@@ -1,28 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __OSLIST_H
#define __OSLIST_H
BOOL InitOperatingSystemList(PUCHAR **SectionNamesPointer, PUCHAR **DisplayNamesPointer, U32* OperatingSystemCountPointer);
U32 CountOperatingSystems(U32 SectionId);
BOOL AllocateListMemory(PUCHAR **SectionNamesPointer, PUCHAR **DisplayNamesPointer, U32 OperatingSystemCount);
BOOL RemoveQuotes(PUCHAR QuotedString);
#endif // #defined __OSLIST_H

View File

@@ -1,78 +0,0 @@
/*
* FreeLoader
* Copyright (C) 2001 Brian Palmer <brianp@sginet.com>
* Copyright (C) 2001 Eric Kohl
* Copyright (C) 2001 Emanuele Aliberti
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __PORTIO_H
#define __PORTIO_H
/*
* Port I/O functions
*/
VOID
/*STDCALL*/
READ_PORT_BUFFER_UCHAR (PUCHAR Port, PUCHAR Value, U32 Count);
VOID
/*STDCALL*/
READ_PORT_BUFFER_ULONG (U32* Port, U32* Value, U32 Count);
VOID
/*STDCALL*/
READ_PORT_BUFFER_USHORT (U16* Port, U16* Value, U32 Count);
UCHAR
/*STDCALL*/
READ_PORT_UCHAR (PUCHAR Port);
U32
/*STDCALL*/
READ_PORT_ULONG (U32* Port);
U16
/*STDCALL*/
READ_PORT_USHORT (U16* Port);
VOID
/*STDCALL*/
WRITE_PORT_BUFFER_UCHAR (PUCHAR Port, PUCHAR Value, U32 Count);
VOID
/*STDCALL*/
WRITE_PORT_BUFFER_ULONG (U32* Port, U32* Value, U32 Count);
VOID
/*STDCALL*/
WRITE_PORT_BUFFER_USHORT (U16* Port, U16* Value, U32 Count);
VOID
/*STDCALL*/
WRITE_PORT_UCHAR (PUCHAR Port, UCHAR Value);
VOID
/*STDCALL*/
WRITE_PORT_ULONG (U32* Port, U32 Value);
VOID
/*STDCALL*/
WRITE_PORT_USHORT (U16* Port, U16 Value);
#endif // defined __PORTIO_H

View File

@@ -1,48 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __REACTOS_H
#define __REACTOS_H
///////////////////////////////////////////////////////////////////////////////////////
//
// ReactOS Loading Functions
//
///////////////////////////////////////////////////////////////////////////////////////
void LoadAndBootReactOS(PUCHAR OperatingSystemName);
///////////////////////////////////////////////////////////////////////////////////////
//
// ReactOS Setup Loader Functions
//
///////////////////////////////////////////////////////////////////////////////////////
VOID ReactOSRunSetupLoader(VOID);
///////////////////////////////////////////////////////////////////////////////////////
//
// ARC Path Functions
//
///////////////////////////////////////////////////////////////////////////////////////
BOOL DissectArcPath(char *ArcPath, char *BootPath, U32* BootDrive, U32* BootPartition);
void ConstructArcPath(PUCHAR ArcPath, PUCHAR SystemFolder, U32 Disk, U32 Partition);
U32 ConvertArcNameToBiosDriveNumber(PUCHAR ArcPath);
#endif // defined __REACTOS_H

View File

@@ -1,136 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __STDLIB_H
#define __STDLIB_H
#include <freeldr.h>
///////////////////////////////////////////////////////////////////////////////////////
//
// String Functions
//
///////////////////////////////////////////////////////////////////////////////////////
int strlen(char *str);
char * strcpy(char *dest, char *src);
char * strncpy(char *dest, char *src, size_t count);
char * strcat(char *dest, char *src);
char * strncat(char *dst, const char *src, size_t n);
char * strchr(const char *s, int c);
char * strrchr(const char *s, int c);
int strcmp(const char *string1, const char *string2);
int stricmp(const char *string1, const char *string2);
int strncmp(const char *string1, const char *string2, size_t length);
int strnicmp(const char *string1, const char *string2, size_t length);
///////////////////////////////////////////////////////////////////////////////////////
//
// Memory Functions
//
///////////////////////////////////////////////////////////////////////////////////////
int memcmp(const void *buf1, const void *buf2, size_t count);
void * memcpy(void *to, const void *from, size_t count);
void * memmove(void *dest, const void *src, size_t count);
void * memset(void *src, int val, size_t count);
#define RtlCompareMemory(Source1, Source2, Length) memcmp(Source1, Source2, Length)
#define RtlCopyMemory(Destination, Source, Length) memcpy(Destination, Source, Length)
#define RtlFillMemory(Destination, Length, Fill) memset(Destination, Fill, Length)
#define RtlMoveMemory(Destination, Source, Length) memmove(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length) memset(Destination, 0, Length)
///////////////////////////////////////////////////////////////////////////////////////
//
// Standard Library Functions
//
///////////////////////////////////////////////////////////////////////////////////////
int atoi(char *string);
char * itoa(int value, char *string, int radix);
int toupper(int c);
int tolower(int c);
int isspace(int c);
int isdigit(int c);
int isxdigit(int c);
char * convert_to_ascii(char *buf, int c, ...);
char * convert_i64_to_ascii(char *buf, int c, ...);
void putchar(int ch); // Implemented in asmcode.S
int kbhit(void); // Implemented in asmcode.S
int getch(void); // Implemented in asmcode.S
int getyear(void); // Implemented in asmcode.S
int getday(void); // Implemented in asmcode.S
int getmonth(void); // Implemented in asmcode.S
int gethour(void); // Implemented in asmcode.S
int getminute(void); // Implemented in asmcode.S
int getsecond(void); // Implemented in asmcode.S
void beep(void);
void delay(unsigned msec);
void sound(int freq);
#ifndef max
#define max(a, b) (((a) > (b)) ? (a) : (b))
#endif
#ifndef min
#define min(a, b) (((a) < (b)) ? (a) : (b))
#endif
///////////////////////////////////////////////////////////////////////////////////////
//
// Screen Output Functions
//
///////////////////////////////////////////////////////////////////////////////////////
void print(char *str);
void printf(char *fmt, ...);
void sprintf(char *buffer, char *format, ...);
///////////////////////////////////////////////////////////////////////////////////////
//
// List Functions
//
///////////////////////////////////////////////////////////////////////////////////////
typedef struct _LIST_ITEM
{
struct _LIST_ITEM* ListPrev;
struct _LIST_ITEM* ListNext;
} LIST_ITEM, *PLIST_ITEM;
VOID RtlListInitializeHead(PLIST_ITEM ListHead); // Initializes a doubly linked list
VOID RtlListInsertHead(PLIST_ITEM ListHead, PLIST_ITEM Entry); // Inserts an entry at the head of the list
VOID RtlListInsertTail(PLIST_ITEM ListHead, PLIST_ITEM Entry); // Inserts an entry at the tail of the list
PLIST_ITEM RtlListRemoveHead(PLIST_ITEM ListHead); // Removes the entry at the head of the list
PLIST_ITEM RtlListRemoveTail(PLIST_ITEM ListHead); // Removes the entry at the tail of the list
PLIST_ITEM RtlListGetHead(PLIST_ITEM ListHead); // Returns the entry at the head of the list
PLIST_ITEM RtlListGetTail(PLIST_ITEM ListHead); // Returns the entry at the tail of the list
BOOL RtlListIsEmpty(PLIST_ITEM ListHead); // Indicates whether a doubly linked list is empty
U32 RtlListCountEntries(PLIST_ITEM ListHead); // Counts the entries in a doubly linked list
PLIST_ITEM RtlListGetPrevious(PLIST_ITEM ListEntry); // Returns the previous item in the list
PLIST_ITEM RtlListGetNext(PLIST_ITEM ListEntry); // Returns the next item in the list
PLIST_ITEM RtlListRemoveEntry(PLIST_ITEM ListEntry); // Removes the entry from the list
VOID RtlListInsertEntry(PLIST_ITEM InsertAfter, PLIST_ITEM ListEntry); // Inserts a new list entry right after the specified one
VOID RtlListMoveEntryPrevious(PLIST_ITEM ListEntry); // Moves the list entry to before the previous entry
VOID RtlListMoveEntryNext(PLIST_ITEM ListEntry); // Moves the list entry to after the next entry
#endif // defined __STDLIB_H

View File

@@ -1,95 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __UI_H
#define __UI_H
extern U32 UiScreenWidth; // Screen Width
extern U32 UiScreenHeight; // Screen Height
extern UCHAR UiStatusBarFgColor; // Status bar foreground color
extern UCHAR UiStatusBarBgColor; // Status bar background color
extern UCHAR UiBackdropFgColor; // Backdrop foreground color
extern UCHAR UiBackdropBgColor; // Backdrop background color
extern UCHAR UiBackdropFillStyle; // Backdrop fill style
extern UCHAR UiTitleBoxFgColor; // Title box foreground color
extern UCHAR UiTitleBoxBgColor; // Title box background color
extern UCHAR UiMessageBoxFgColor; // Message box foreground color
extern UCHAR UiMessageBoxBgColor; // Message box background color
extern UCHAR UiMenuFgColor; // Menu foreground color
extern UCHAR UiMenuBgColor; // Menu background color
extern UCHAR UiTextColor; // Normal text color
extern UCHAR UiSelectedTextColor; // Selected text color
extern UCHAR UiSelectedTextBgColor; // Selected text background color
extern UCHAR UiEditBoxTextColor; // Edit box text color
extern UCHAR UiEditBoxBgColor; // Edit box text background color
extern UCHAR UiTitleBoxTitleText[260]; // Title box's title text
extern BOOL UserInterfaceUp; // Tells us if the user interface is displayed
extern BOOL UiUseSpecialEffects; // Tells us if we should use fade effects
extern UCHAR UiMonthNames[12][15];
///////////////////////////////////////////////////////////////////////////////////////
//
// User Interface Functions
//
///////////////////////////////////////////////////////////////////////////////////////
BOOL UiInitialize(VOID); // Initialize User-Interface
VOID UiUnInitialize(PUCHAR BootText); // Un-initialize User-Interface
VOID UiDrawBackdrop(VOID); // Fills the entire screen with a backdrop
VOID UiFillArea(U32 Left, U32 Top, U32 Right, U32 Bottom, UCHAR FillChar, UCHAR Attr /* Color Attributes */); // Fills the area specified with FillChar and Attr
VOID UiDrawShadow(U32 Left, U32 Top, U32 Right, U32 Bottom); // Draws a shadow on the bottom and right sides of the area specified
VOID UiDrawBox(U32 Left, U32 Top, U32 Right, U32 Bottom, UCHAR VertStyle, UCHAR HorzStyle, BOOL Fill, BOOL Shadow, UCHAR Attr); // Draws a box around the area specified
VOID UiDrawText(U32 X, U32 Y, PUCHAR Text, UCHAR Attr); // Draws text at coordinates specified
VOID UiDrawCenteredText(U32 Left, U32 Top, U32 Right, U32 Bottom, PUCHAR TextString, UCHAR Attr); // Draws centered text at the coordinates specified and clips the edges
VOID UiDrawStatusText(PUCHAR StatusText); // Draws text at the very bottom line on the screen
VOID UiUpdateDateTime(VOID); // Updates the date and time
VOID UiInfoBox(PUCHAR MessageText); // Displays a info box on the screen
VOID UiMessageBox(PUCHAR MessageText); // Displays a message box on the screen with an ok button
VOID UiMessageBoxCritical(PUCHAR MessageText); // Displays a message box on the screen with an ok button using no system resources
VOID UiDrawProgressBarCenter(U32 Position, U32 Range, PUCHAR ProgressText); // Draws the progress bar showing nPos percent filled
VOID UiDrawProgressBar(U32 Left, U32 Top, U32 Right, U32 Bottom, U32 Position, U32 Range, PUCHAR ProgressText); // Draws the progress bar showing nPos percent filled
VOID UiShowMessageBoxesInSection(PUCHAR SectionName); // Displays all the message boxes in a given section
VOID UiEscapeString(PUCHAR String); // Processes a string and changes all occurances of "\n" to '\n'
BOOL UiEditBox(PUCHAR MessageText, PUCHAR EditTextBuffer, U32 Length);
UCHAR UiTextToColor(PUCHAR ColorText); // Converts the text color into it's equivalent color value
UCHAR UiTextToFillStyle(PUCHAR FillStyleText); // Converts the text fill into it's equivalent fill value
VOID UiTruncateStringEllipsis(PUCHAR StringText, U32 MaxChars); // Truncates a string to MaxChars by adding an ellipsis on the end '...'
VOID UiFadeInBackdrop(VOID); // Draws the backdrop and fades the screen in
VOID UiFadeOut(VOID); // Fades the screen out
///////////////////////////////////////////////////////////////////////////////////////
//
// Menu Functions
//
///////////////////////////////////////////////////////////////////////////////////////
typedef BOOL (*UiMenuKeyPressFilterCallback)(U32 KeyPress);
BOOL UiDisplayMenu(PUCHAR MenuItemList[], U32 MenuItemCount, U32 DefaultMenuItem, S32 MenuTimeOut, U32* SelectedMenuItem, BOOL CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter);
#endif // #defined __UI_H

View File

@@ -1,49 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __VERSION_H
#define __VERSION_H
/* just some stuff */
#define VERSION "FreeLoader v1.8.21"
#define COPYRIGHT "Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>"
#define AUTHOR_EMAIL "<brianp@sginet.com>"
#define BY_AUTHOR "by Brian Palmer"
// FreeLoader version defines
//
// NOTE:
// If you fix bugs then you increment the patch version
// If you add features then you increment the minor version and zero the patch version
// If you add major functionality then you increment the major version and zero the minor & patch versions
//
#define FREELOADER_MAJOR_VERSION 1
#define FREELOADER_MINOR_VERSION 8
#define FREELOADER_PATCH_VERSION 21
#ifndef ASM
PUCHAR GetFreeLoaderVersionString(VOID);
#endif // ASM
#endif // defined __VERSION_H

View File

@@ -1,197 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __VIDEO_H
#define __VIDEO_H
#define VIDEOCARD_CGA_OR_OTHER 0
#define VIDEOCARD_EGA 1
#define VIDEOCARD_VGA 2
#define VERTRES_200_SCANLINES 0x00
#define VERTRES_350_SCANLINES 0x01
#define VERTRES_400_SCANLINES 0x02
#define MODETYPE_TEXT 0
#define MODETYPE_GRAPHICS 1
#define VIDEOMODE_NORMAL_TEXT 0
#define VIDEOMODE_EXTENDED_TEXT 1
#define VIDEOMODE_80X28 0x501C
#define VIDEOMODE_80X30 0x501E
#define VIDEOMODE_80X34 0x5022
#define VIDEOMODE_80X43 0x502B
#define VIDEOMODE_80X60 0x503C
#define VIDEOMODE_132X25 0x8419
#define VIDEOMODE_132X43 0x842B
#define VIDEOMODE_132X50 0x8432
#define VIDEOMODE_132X60 0x843C
#define VIDEOPORT_PALETTE_READ 0x03C7
#define VIDEOPORT_PALETTE_WRITE 0x03C8
#define VIDEOPORT_PALETTE_DATA 0x03C9
#define VIDEOPORT_VERTICAL_RETRACE 0x03DA
#define VIDEOVGA_MEM_ADDRESS 0xA0000
#define VIDEOTEXT_MEM_ADDRESS 0xB8000
typedef struct
{
U8 Red;
U8 Green;
U8 Blue;
} PACKED PALETTE_ENTRY, *PPALETTE_ENTRY;
typedef struct
{
U16 ModeAttributes; // mode attributes (see #00080)
U8 WindowAttributesA; // window attributes, window A (see #00081)
U8 WindowsAttributesB; // window attributes, window B (see #00081)
U16 WindowGranularity; // window granularity in KB
U16 WindowSize; // window size in KB
U16 WindowAStartSegment; // start segment of window A (0000h if not supported)
U16 WindowBStartSegment; // start segment of window B (0000h if not supported)
U32 WindowPositioningFunction; // -> FAR window positioning function (equivalent to AX=4F05h)
U16 BytesPerScanLine; // bytes per scan line
//---remainder is optional for VESA modes in v1.0/1.1, needed for OEM modes---
U16 WidthInPixels; // width in pixels (graphics) or characters (text)
U16 HeightInPixels; // height in pixels (graphics) or characters (text)
U8 CharacterWidthInPixels; // width of character cell in pixels
U8 CharacterHeightInPixels; // height of character cell in pixels
U8 NumberOfMemoryPlanes; // number of memory planes
U8 BitsPerPixel; // number of bits per pixel
U8 NumberOfBanks; // number of banks
U8 MemoryModel; // memory model type (see #00082)
U8 BankSize; // size of bank in KB
U8 NumberOfImagePanes; // number of image pages (less one) that will fit in video RAM
U8 Reserved1; // reserved (00h for VBE 1.0-2.0, 01h for VBE 3.0)
//---VBE v1.2+ ---
U8 RedMaskSize; // red mask size
U8 RedMaskPosition; // red field position
U8 GreenMaskSize; // green mask size
U8 GreenMaskPosition; // green field size
U8 BlueMaskSize; // blue mask size
U8 BlueMaskPosition; // blue field size
U8 ReservedMaskSize; // reserved mask size
U8 ReservedMaskPosition; // reserved mask position
U8 DirectColorModeInfo; // direct color mode info
// bit 0:Color ramp is programmable
// bit 1:Bytes in reserved field may be used by application
//---VBE v2.0+ ---
U32 LinearVideoBufferAddress; // physical address of linear video buffer
U32 OffscreenMemoryPointer; // pointer to start of offscreen memory
U16 OffscreenMemorySize; // KB of offscreen memory
//---VBE v3.0 ---
U16 LinearBytesPerScanLine; // bytes per scan line in linear modes
U8 BankedNumberOfImages; // number of images (less one) for banked video modes
U8 LinearNumberOfImages; // number of images (less one) for linear video modes
U8 LinearRedMaskSize; // linear modes:Size of direct color red mask (in bits)
U8 LinearRedMaskPosition; // linear modes:Bit position of red mask LSB (e.g. shift count)
U8 LinearGreenMaskSize; // linear modes:Size of direct color green mask (in bits)
U8 LinearGreenMaskPosition; // linear modes:Bit position of green mask LSB (e.g. shift count)
U8 LinearBlueMaskSize; // linear modes:Size of direct color blue mask (in bits)
U8 LinearBlueMaskPosition; // linear modes:Bit position of blue mask LSB (e.g. shift count)
U8 LinearReservedMaskSize; // linear modes:Size of direct color reserved mask (in bits)
U8 LinearReservedMaskPosition; // linear modes:Bit position of reserved mask LSB
U32 MaximumPixelClock; // maximum pixel clock for graphics video mode, in Hz
U8 Reserved2[190]; // 190 BYTEs reserved (0)
} PACKED SVGA_MODE_INFORMATION, *PSVGA_MODE_INFORMATION;
extern U32 CurrentMemoryBank;
extern SVGA_MODE_INFORMATION VesaVideoModeInformation;
extern PVOID VideoOffScreenBuffer;
VOID BiosSetVideoMode(U32 VideoMode); // Implemented in i386vid.S
VOID BiosSetVideoFont8x8(VOID); // Implemented in i386vid.S
VOID BiosSetVideoFont8x14(VOID); // Implemented in i386vid.S
VOID BiosSetVideoFont8x16(VOID); // Implemented in i386vid.S
VOID BiosSelectAlternatePrintScreen(VOID); // Implemented in i386vid.S
VOID BiosDisableCursorEmulation(VOID); // Implemented in i386vid.S
VOID BiosDefineCursor(U32 StartScanLine, U32 EndScanLine); // Implemented in i386vid.S
U32 BiosDetectVideoCard(VOID); // Implemented in i386vid.S
VOID BiosSetVerticalResolution(U32 ScanLines); // Implemented in i386vid.S, must be called right before BiosSetVideoMode()
VOID BiosSet480ScanLines(VOID); // Implemented in i386vid.S, must be called right after BiosSetVideoMode()
VOID BiosSetVideoDisplayEnd(VOID); // Implemented in i386vid.S
VOID BiosVideoDisableBlinkBit(VOID); // Implemented in i386vid.S
VOID BiosVideoEnableBlinkBit(VOID); // Implemented in i386vid.S
U16 BiosIsVesaSupported(VOID); // Implemented in i386vid.S, returns the VESA version
BOOL BiosVesaSetBank(U16 Bank); // Implemented in i386vid.S
BOOL BiosVesaSetVideoMode(U16 Mode); // Implemented in i386vid.S
BOOL BiosVesaGetSVGAModeInformation(U16 Mode, PSVGA_MODE_INFORMATION ModeInformation); // Implemented in i386vid.S
VOID VideoSetTextCursorPosition(U32 X, U32 Y); // Implemented in i386vid.S
VOID VideoHideTextCursor(VOID); // Implemented in i386vid.S
VOID VideoShowTextCursor(VOID); // Implemented in i386vid.S
U32 VideoGetTextCursorPositionX(VOID); // Implemented in i386vid.S
U32 VideoGetTextCursorPositionY(VOID); // Implemented in i386vid.S
BOOL VideoSetMode(U32 VideoMode);
BOOL VideoSetMode80x25(VOID); // Sets 80x25
BOOL VideoSetMode80x50_80x43(VOID); // Sets 80x50 (VGA) or 80x43 (EGA) 8-pixel mode
BOOL VideoSetMode80x28(VOID); // Sets 80x28. Works on all VGA's. Standard 80x25 with 14-point font
BOOL VideoSetMode80x43(VOID); // Sets 80x43. Works on all VGA's. It's a 350-scanline mode with 8-pixel font.
BOOL VideoSetMode80x30(VOID); // Sets 80x30. Works on all VGA's. 480 scanlines, 16-pixel font.
BOOL VideoSetMode80x34(VOID); // Sets 80x34. Works on all VGA's. 480 scanlines, 14-pixel font.
BOOL VideoSetMode80x60(VOID); // Sets 80x60. Works on all VGA's. 480 scanlines, 8-pixel font.
U32 VideoGetCurrentModeResolutionX(VOID);
U32 VideoGetCurrentModeResolutionY(VOID);
U32 VideoGetBytesPerScanLine(VOID);
U32 VideoGetCurrentMode(VOID);
U32 VideoGetCurrentModeType(VOID); // MODETYPE_TEXT or MODETYPE_GRAPHICS
BOOL VideoIsCurrentModeVesa(VOID);
U32 VideoGetCurrentModeColorDepth(VOID); // Returns 0 for text mode, 16 for 4-bit, 256 for 8-bit, 32768 for 15-bit, 65536 for 16-bit, etc.
VOID VideoClearScreen(VOID);
VOID VideoWaitForVerticalRetrace(VOID);
PVOID VideoAllocateOffScreenBuffer(VOID); // Returns a pointer to an off-screen buffer sufficient for the current video mode
U32 VideoGetMemoryBankForPixel(U32 X, U32 Y);
U32 VideoGetMemoryBankForPixel16(U32 X, U32 Y);
U32 VideoGetBankOffsetForPixel(U32 X, U32 Y);
U32 VideoGetBankOffsetForPixel16(U32 X, U32 Y);
VOID VideoSetMemoryBank(U16 BankNumber);
U32 VideoGetOffScreenMemoryOffsetForPixel(U32 X, U32 Y);
VOID VideoCopyOffScreenBufferToVRAM(VOID);
VOID VideoSetPaletteColor(U8 Color, U8 Red, U8 Green, U8 Blue);
VOID VideoGetPaletteColor(U8 Color, U8* Red, U8* Green, U8* Blue);
VOID VideoSavePaletteState(PPALETTE_ENTRY Palette, U32 ColorCount);
VOID VideoRestorePaletteState(PPALETTE_ENTRY Palette, U32 ColorCount);
VOID VideoSetPixel16(U32 X, U32 Y, U8 Color);
VOID VideoSetPixel256(U32 X, U32 Y, U8 Color);
VOID VideoSetPixelRGB(U32 X, U32 Y, U8 Red, U8 Green, U8 Blue);
VOID VideoSetPixel16_OffScreen(U32 X, U32 Y, U8 Color);
VOID VideoSetPixel256_OffScreen(U32 X, U32 Y, U8 Color);
VOID VideoSetPixelRGB_OffScreen(U32 X, U32 Y, U8 Red, U8 Green, U8 Blue);
VOID VideoSetAllColorsToBlack(U32 ColorCount);
VOID VideoFadeIn(PPALETTE_ENTRY Palette, U32 ColorCount);
VOID VideoFadeOut(U32 ColorCount);
#endif // defined __VIDEO_H

File diff suppressed because it is too large Load Diff

View File

@@ -1,76 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __INI_H
#define __INI_H
#include <rtl.h>
#include <fs.h>
#define INI_FILE_COMMENT_CHAR ';'
// This structure describes a single .ini file item
// The item format in the .ini file is:
// Name=Value
typedef struct
{
LIST_ITEM ListEntry;
PUCHAR ItemName;
PUCHAR ItemValue;
} INI_SECTION_ITEM, *PINI_SECTION_ITEM;
// This structure describes a .ini file section
// The section format in the .ini file is:
// [Section Name]
// This structure has a list of section items with
// one INI_SECTION_ITEM for each line in the section
typedef struct
{
LIST_ITEM ListEntry;
PUCHAR SectionName;
U32 SectionItemCount;
PINI_SECTION_ITEM SectionItemList;
} INI_SECTION, *PINI_SECTION;
extern PINI_SECTION IniFileSectionListHead;
extern U32 IniFileSectionCount;
extern U32 IniFileSettingCount;
PFILE IniOpenIniFile(U8 BootDriveNumber, U8 BootPartitionNumber);
BOOL IniParseFile(PUCHAR IniFileData, U32 IniFileSize);
U32 IniGetNextLineSize(PUCHAR IniFileData, U32 IniFileSize, U32 CurrentOffset);
U32 IniGetNextLine(PUCHAR IniFileData, U32 IniFileSize, PUCHAR Buffer, U32 BufferSize, U32 CurrentOffset);
BOOL IniIsLineEmpty(PUCHAR LineOfText, U32 TextLength);
BOOL IniIsCommentLine(PUCHAR LineOfText, U32 TextLength);
BOOL IniIsSectionName(PUCHAR LineOfText, U32 TextLength);
U32 IniGetSectionNameSize(PUCHAR SectionNameLine, U32 LineLength);
VOID IniExtractSectionName(PUCHAR SectionName, PUCHAR SectionNameLine, U32 LineLength);
BOOL IniIsSetting(PUCHAR LineOfText, U32 TextLength);
U32 IniGetSettingNameSize(PUCHAR SettingNameLine, U32 LineLength);
U32 IniGetSettingValueSize(PUCHAR SettingValueLine, U32 LineLength);
VOID IniExtractSettingName(PUCHAR SettingName, PUCHAR SettingNameLine, U32 LineLength);
VOID IniExtractSettingValue(PUCHAR SettingValue, PUCHAR SettingValueLine, U32 LineLength);
#endif // defined __INI_H

View File

@@ -1,112 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <freeldr.h>
#include "ini.h"
#include <fs.h>
#include <rtl.h>
#include <mm.h>
#include <debug.h>
BOOL IniFileInitialize(VOID)
{
PFILE Freeldr_Ini; // File handle for freeldr.ini
PUCHAR FreeLoaderIniFileData;
U32 FreeLoaderIniFileSize;
BOOL Success;
// Open freeldr.ini
// BootDrive & BootPartition are passed
// in from the boot sector code in the
// DL & DH registers.
Freeldr_Ini = IniOpenIniFile(BootDrive, BootPartition);
// If we couldn't open freeldr.ini on the partition
// they specified in the boot sector then try
// opening the active (boot) partition.
if ((Freeldr_Ini == NULL) && (BootPartition != 0))
{
BootPartition = 0;
Freeldr_Ini = IniOpenIniFile(BootDrive, BootPartition);
return FALSE;
}
if (Freeldr_Ini == NULL)
{
printf("Error opening freeldr.ini or file not found.\n");
printf("You need to re-install FreeLoader.\n");
return FALSE;
}
// Get the file size & allocate enough memory for it
FreeLoaderIniFileSize = FsGetFileSize(Freeldr_Ini);
FreeLoaderIniFileData = MmAllocateMemory(FreeLoaderIniFileSize);
// If we are out of memory then return FALSE
if (FreeLoaderIniFileData == NULL)
{
printf("Out of memory while loading freeldr.ini.\n");
FsCloseFile(Freeldr_Ini);
return FALSE;
}
// Read freeldr.ini off the disk
if (!FsReadFile(Freeldr_Ini, FreeLoaderIniFileSize, NULL, FreeLoaderIniFileData))
{
FsCloseFile(Freeldr_Ini);
MmFreeMemory(FreeLoaderIniFileData);
return FALSE;
}
FsCloseFile(Freeldr_Ini);
// Parse the .ini file data
Success = IniParseFile(FreeLoaderIniFileData, FreeLoaderIniFileSize);
MmFreeMemory(FreeLoaderIniFileData);
return Success;
}
PFILE IniOpenIniFile(U8 BootDriveNumber, U8 BootPartitionNumber)
{
PFILE IniFileHandle; // File handle for freeldr.ini
if (!FsOpenVolume(BootDriveNumber, BootPartitionNumber))
{
if (BootPartitionNumber == 0)
{
printf("Error opening active (bootable) partition on boot drive 0x%x for file access.\n", BootDriveNumber);
}
else
{
printf("Error opening partition %d on boot drive 0x%x for file access.\n", BootPartitionNumber, BootDriveNumber);
}
return NULL;
}
// Try to open freeldr.ini
IniFileHandle = FsOpenFile("freeldr.ini");
return IniFileHandle;
}

View File

@@ -1,252 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <freeldr.h>
#include "ini.h"
#include <ui.h>
#include <rtl.h>
#include <debug.h>
#include <mm.h>
BOOL IniOpenSection(PUCHAR SectionName, U32* SectionId)
{
PINI_SECTION Section;
DbgPrint((DPRINT_INIFILE, "IniOpenSection() SectionName = %s\n", SectionName));
if (!IniFileSectionListHead)
return FALSE;
// Loop through each section and find the one they want
Section = (PINI_SECTION)RtlListGetHead((PLIST_ITEM)IniFileSectionListHead);
while (Section != NULL)
{
// Compare against the section name
if (stricmp(SectionName, Section->SectionName) == 0)
{
// We found it
*SectionId = (U32)Section;
DbgPrint((DPRINT_INIFILE, "IniOpenSection() Found it! SectionId = 0x%x\n", SectionId));
return TRUE;
}
// Get the next section in the list
Section = (PINI_SECTION)RtlListGetNext((PLIST_ITEM)Section);
}
DbgPrint((DPRINT_INIFILE, "IniOpenSection() Section not found.\n"));
return FALSE;
}
U32 IniGetNumSectionItems(U32 SectionId)
{
PINI_SECTION Section = (PINI_SECTION)SectionId;
DbgPrint((DPRINT_INIFILE, "IniGetNumSectionItems() SectionId = 0x%x\n", SectionId));
DbgPrint((DPRINT_INIFILE, "IniGetNumSectionItems() Item count = %d\n", Section->SectionItemCount));
return Section->SectionItemCount;
}
U32 IniGetSectionSettingNameSize(U32 SectionId, U32 SettingIndex)
{
PINI_SECTION Section = (PINI_SECTION)SectionId;
// Return the size of the string plus 1 for the null-terminator
return (strlen(Section->SectionItemList[SettingIndex].ItemName) + 1);
}
U32 IniGetSectionSettingValueSize(U32 SectionId, U32 SettingIndex)
{
PINI_SECTION Section = (PINI_SECTION)SectionId;
// Return the size of the string plus 1 for the null-terminator
return (strlen(Section->SectionItemList[SettingIndex].ItemValue) + 1);
}
BOOL IniReadSettingByNumber(U32 SectionId, U32 SettingNumber, PUCHAR SettingName, U32 NameSize, PUCHAR SettingValue, U32 ValueSize)
{
PINI_SECTION Section = (PINI_SECTION)SectionId;
PINI_SECTION_ITEM SectionItem;
#ifdef DEBUG
U32 RealSettingNumber = SettingNumber;
#endif
DbgPrint((DPRINT_INIFILE, ".001 NameSize = %d ValueSize = %d\n", NameSize, ValueSize));
DbgPrint((DPRINT_INIFILE, "IniReadSettingByNumber() SectionId = 0x%x\n", SectionId));
// Loop through each section item and find the one they want
DbgPrint((DPRINT_INIFILE, ".01 NameSize = %d ValueSize = %d\n", NameSize, ValueSize));
SectionItem = (PINI_SECTION_ITEM)RtlListGetHead((PLIST_ITEM)Section->SectionItemList);
while (SectionItem != NULL)
{
DbgPrint((DPRINT_INIFILE, ".1 NameSize = %d ValueSize = %d\n", NameSize, ValueSize));
// Check to see if this is the setting they want
if (SettingNumber == 0)
{
DbgPrint((DPRINT_INIFILE, "IniReadSettingByNumber() Setting number %d found.\n", RealSettingNumber));
DbgPrint((DPRINT_INIFILE, "IniReadSettingByNumber() Setting name = %s\n", SectionItem->ItemName));
DbgPrint((DPRINT_INIFILE, "IniReadSettingByNumber() Setting value = %s\n", SectionItem->ItemValue));
DbgPrint((DPRINT_INIFILE, "1 NameSize = %d ValueSize = %d\n", NameSize, ValueSize));
RtlZeroMemory(SettingName, NameSize);
RtlZeroMemory(SettingValue, ValueSize);
DbgPrint((DPRINT_INIFILE, "2 NameSize = %d ValueSize = %d\n", NameSize, ValueSize));
strncpy(SettingName, SectionItem->ItemName, NameSize);
DbgPrint((DPRINT_INIFILE, "3 NameSize = %d ValueSize = %d\n", NameSize, ValueSize));
strncpy(SettingValue, SectionItem->ItemValue, ValueSize);
DbgPrint((DPRINT_INIFILE, "4 NameSize = %d ValueSize = %d\n", NameSize, ValueSize));
DbgDumpBuffer(DPRINT_INIFILE, SettingName, NameSize);
DbgDumpBuffer(DPRINT_INIFILE, SettingValue, ValueSize);
return TRUE;
}
// Nope, keep going
SettingNumber--;
// Get the next section item in the list
SectionItem = (PINI_SECTION_ITEM)RtlListGetNext((PLIST_ITEM)SectionItem);
}
DbgPrint((DPRINT_INIFILE, "IniReadSettingByNumber() Setting number %d not found.\n", RealSettingNumber));
return FALSE;
}
BOOL IniReadSettingByName(U32 SectionId, PUCHAR SettingName, PUCHAR Buffer, U32 BufferSize)
{
PINI_SECTION Section = (PINI_SECTION)SectionId;
PINI_SECTION_ITEM SectionItem;
DbgPrint((DPRINT_INIFILE, "IniReadSettingByName() SectionId = 0x%x\n", SectionId));
// Loop through each section item and find the one they want
SectionItem = (PINI_SECTION_ITEM)RtlListGetHead((PLIST_ITEM)Section->SectionItemList);
while (SectionItem != NULL)
{
// Check to see if this is the setting they want
if (stricmp(SettingName, SectionItem->ItemName) == 0)
{
DbgPrint((DPRINT_INIFILE, "IniReadSettingByName() Setting \'%s\' found.\n", SettingName));
DbgPrint((DPRINT_INIFILE, "IniReadSettingByName() Setting value = %s\n", SectionItem->ItemValue));
RtlZeroMemory(Buffer, BufferSize);
strncpy(Buffer, SectionItem->ItemValue, BufferSize);
return TRUE;
}
// Get the next section item in the list
SectionItem = (PINI_SECTION_ITEM)RtlListGetNext((PLIST_ITEM)SectionItem);
}
DbgPrint((DPRINT_INIFILE, "IniReadSettingByName() Setting \'%s\' not found.\n", SettingName));
return FALSE;
}
BOOL IniAddSection(PUCHAR SectionName, U32* SectionId)
{
PINI_SECTION Section;
// Allocate a new section structure
Section = MmAllocateMemory(sizeof(INI_SECTION));
if (!Section)
{
return FALSE;
}
RtlZeroMemory(Section, sizeof(INI_SECTION));
// Allocate the section name buffer
Section->SectionName = MmAllocateMemory(strlen(SectionName));
if (!Section->SectionName)
{
MmFreeMemory(Section);
return FALSE;
}
// Get the section name
strcpy(Section->SectionName, SectionName);
// Add it to the section list head
IniFileSectionCount++;
if (IniFileSectionListHead == NULL)
{
IniFileSectionListHead = Section;
}
else
{
RtlListInsertTail((PLIST_ITEM)IniFileSectionListHead, (PLIST_ITEM)Section);
}
*SectionId = (U32)Section;
return TRUE;
}
BOOL IniAddSettingValueToSection(U32 SectionId, PUCHAR SettingName, PUCHAR SettingValue)
{
PINI_SECTION Section = (PINI_SECTION)SectionId;
PINI_SECTION_ITEM SectionItem;
// Allocate a new item structure
SectionItem = MmAllocateMemory(sizeof(INI_SECTION_ITEM));
if (!SectionItem)
{
return FALSE;
}
RtlZeroMemory(SectionItem, sizeof(INI_SECTION_ITEM));
// Allocate the setting name buffer
SectionItem->ItemName = MmAllocateMemory(strlen(SettingName));
if (!SectionItem->ItemName)
{
MmFreeMemory(SectionItem);
return FALSE;
}
// Allocate the setting value buffer
SectionItem->ItemValue = MmAllocateMemory(strlen(SettingValue));
if (!SectionItem->ItemValue)
{
MmFreeMemory(SectionItem->ItemName);
MmFreeMemory(SectionItem);
return FALSE;
}
strcpy(SectionItem->ItemName, SettingName);
strcpy(SectionItem->ItemValue, SettingValue);
// Add it to the current section
Section->SectionItemCount++;
if (Section->SectionItemList == NULL)
{
Section->SectionItemList = SectionItem;
}
else
{
RtlListInsertTail((PLIST_ITEM)Section->SectionItemList, (PLIST_ITEM)SectionItem);
}
return TRUE;
}

View File

@@ -1,605 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <freeldr.h>
#include "ini.h"
#include <rtl.h>
#include <mm.h>
#include <debug.h>
PINI_SECTION IniFileSectionListHead = NULL;
U32 IniFileSectionCount = 0;
U32 IniFileSettingCount = 0;
BOOL IniParseFile(PUCHAR IniFileData, U32 IniFileSize)
{
U32 CurrentOffset;
U32 CurrentLineNumber;
PUCHAR IniFileLine;
U32 IniFileLineSize;
U32 LineLength;
PINI_SECTION CurrentSection = NULL;
PINI_SECTION_ITEM CurrentItem = NULL;
DbgPrint((DPRINT_INIFILE, "IniParseFile() IniFileSize: %d\n", IniFileSize));
// Start with an 80-byte buffer
IniFileLineSize = 80;
IniFileLine = MmAllocateMemory(IniFileLineSize);
if (!IniFileLine)
{
return FALSE;
}
// Loop through each line and parse it
CurrentLineNumber = 0;
CurrentOffset = 0;
while (CurrentOffset < IniFileSize)
{
// First check the line size and increase our buffer if necessary
if (IniFileLineSize < IniGetNextLineSize(IniFileData, IniFileSize, CurrentOffset))
{
IniFileLineSize = IniGetNextLineSize(IniFileData, IniFileSize, CurrentOffset);
MmFreeMemory(IniFileLine);
IniFileLine = MmAllocateMemory(IniFileLineSize);
if (!IniFileLine)
{
return FALSE;
}
}
// Get the line of data
CurrentOffset = IniGetNextLine(IniFileData, IniFileSize, IniFileLine, IniFileLineSize, CurrentOffset);
LineLength = strlen(IniFileLine);
// If it is a blank line or a comment then skip it
if (IniIsLineEmpty(IniFileLine, LineLength) || IniIsCommentLine(IniFileLine, LineLength))
{
CurrentLineNumber++;
continue;
}
// Check if it is a new section
if (IniIsSectionName(IniFileLine, LineLength))
{
// Allocate a new section structure
CurrentSection = MmAllocateMemory(sizeof(INI_SECTION));
if (!CurrentSection)
{
MmFreeMemory(IniFileLine);
return FALSE;
}
RtlZeroMemory(CurrentSection, sizeof(INI_SECTION));
// Allocate the section name buffer
CurrentSection->SectionName = MmAllocateMemory(IniGetSectionNameSize(IniFileLine, LineLength));
if (!CurrentSection->SectionName)
{
MmFreeMemory(CurrentSection);
MmFreeMemory(IniFileLine);
return FALSE;
}
// Get the section name
IniExtractSectionName(CurrentSection->SectionName, IniFileLine, LineLength);
// Add it to the section list head
IniFileSectionCount++;
if (IniFileSectionListHead == NULL)
{
IniFileSectionListHead = CurrentSection;
}
else
{
RtlListInsertTail((PLIST_ITEM)IniFileSectionListHead, (PLIST_ITEM)CurrentSection);
}
CurrentLineNumber++;
continue;
}
// Check if it is a setting
if (IniIsSetting(IniFileLine, LineLength))
{
// First check to make sure we're inside a [section]
if (CurrentSection == NULL)
{
printf("Error: freeldr.ini:%ld: Setting '%s' found outside of a [section].\n", CurrentLineNumber, IniFileLine);
printf("Press any key to continue...\n");
getch();
CurrentLineNumber++;
continue;
}
// Allocate a new item structure
CurrentItem = MmAllocateMemory(sizeof(INI_SECTION_ITEM));
if (!CurrentItem)
{
MmFreeMemory(IniFileLine);
return FALSE;
}
RtlZeroMemory(CurrentItem, sizeof(INI_SECTION_ITEM));
// Allocate the setting name buffer
CurrentItem->ItemName = MmAllocateMemory(IniGetSettingNameSize(IniFileLine, LineLength));
if (!CurrentItem->ItemName)
{
MmFreeMemory(CurrentItem);
MmFreeMemory(IniFileLine);
return FALSE;
}
// Allocate the setting value buffer
CurrentItem->ItemValue = MmAllocateMemory(IniGetSettingValueSize(IniFileLine, LineLength));
if (!CurrentItem->ItemValue)
{
MmFreeMemory(CurrentItem->ItemName);
MmFreeMemory(CurrentItem);
MmFreeMemory(IniFileLine);
return FALSE;
}
// Get the section name
IniExtractSettingName(CurrentItem->ItemName, IniFileLine, LineLength);
IniExtractSettingValue(CurrentItem->ItemValue, IniFileLine, LineLength);
// Add it to the current section
IniFileSettingCount++;
CurrentSection->SectionItemCount++;
if (CurrentSection->SectionItemList == NULL)
{
CurrentSection->SectionItemList = CurrentItem;
}
else
{
RtlListInsertTail((PLIST_ITEM)CurrentSection->SectionItemList, (PLIST_ITEM)CurrentItem);
}
CurrentLineNumber++;
continue;
}
CurrentLineNumber++;
}
DbgPrint((DPRINT_INIFILE, "Parsed %d sections and %d settings.\n", IniFileSectionCount, IniFileSettingCount));
DbgPrint((DPRINT_INIFILE, "IniParseFile() done.\n"));
return TRUE;
}
U32 IniGetNextLineSize(PUCHAR IniFileData, U32 IniFileSize, U32 CurrentOffset)
{
U32 Idx;
U32 LineCharCount = 0;
// Loop through counting chars until we hit the end of the
// file or we encounter a new line char
for (Idx=0; (CurrentOffset < IniFileSize); CurrentOffset++)
{
// Increment the line character count
LineCharCount++;
// Check for new line char
if (IniFileData[CurrentOffset] == '\n')
{
CurrentOffset++;
break;
}
}
// Add one for the NULL-terminator
LineCharCount++;
// Send back line character count
return LineCharCount;
}
U32 IniGetNextLine(PUCHAR IniFileData, U32 IniFileSize, PUCHAR Buffer, U32 BufferSize, U32 CurrentOffset)
{
U32 Idx;
// Loop through grabbing chars until we hit the end of the
// file or we encounter a new line char
for (Idx=0; (CurrentOffset < IniFileSize); CurrentOffset++)
{
// If we haven't exceeded our buffer size yet
// then store another char
if (Idx < (BufferSize - 1))
{
Buffer[Idx++] = IniFileData[CurrentOffset];
}
// Check for new line char
if (IniFileData[CurrentOffset] == '\n')
{
CurrentOffset++;
break;
}
}
// Terminate the string
Buffer[Idx] = '\0';
// Get rid of newline & linefeed characters (if any)
if((Buffer[strlen(Buffer)-1] == '\n') || (Buffer[strlen(Buffer)-1] == '\r'))
Buffer[strlen(Buffer)-1] = '\0';
if((Buffer[strlen(Buffer)-1] == '\n') || (Buffer[strlen(Buffer)-1] == '\r'))
Buffer[strlen(Buffer)-1] = '\0';
// Send back new offset
return CurrentOffset;
}
BOOL IniIsLineEmpty(PUCHAR LineOfText, U32 TextLength)
{
U32 Idx;
// Check for text (skipping whitespace)
for (Idx=0; Idx<TextLength; Idx++)
{
if ((LineOfText[Idx] == ' ') ||
(LineOfText[Idx] == '\t') ||
(LineOfText[Idx] == '\n') ||
(LineOfText[Idx] == '\r'))
{
continue;
}
else
{
return FALSE;
}
}
return TRUE;
}
BOOL IniIsCommentLine(PUCHAR LineOfText, U32 TextLength)
{
U32 Idx;
// Check the first character (skipping whitespace)
// and make sure that it is an opening bracket
for (Idx=0; Idx<TextLength; Idx++)
{
if ((LineOfText[Idx] == ' ') ||
(LineOfText[Idx] == '\t'))
{
continue;
}
else if (LineOfText[Idx] == INI_FILE_COMMENT_CHAR)
{
return TRUE;
}
else
{
break;
}
}
return FALSE;
}
BOOL IniIsSectionName(PUCHAR LineOfText, U32 TextLength)
{
U32 Idx;
// Check the first character (skipping whitespace)
// and make sure that it is an opening bracket
for (Idx=0; Idx<TextLength; Idx++)
{
if ((LineOfText[Idx] == ' ') ||
(LineOfText[Idx] == '\t'))
{
continue;
}
else if (LineOfText[Idx] == '[')
{
return TRUE;
}
else
{
break;
}
}
return FALSE;
}
U32 IniGetSectionNameSize(PUCHAR SectionNameLine, U32 LineLength)
{
U32 Idx;
U32 NameSize;
// Find the opening bracket (skipping whitespace)
for (Idx=0; Idx<LineLength; Idx++)
{
if ((SectionNameLine[Idx] == ' ') ||
(SectionNameLine[Idx] == '\t'))
{
continue;
}
else //if (SectionNameLine[Idx] == '[')
{
break;
}
}
// Skip past the opening bracket
Idx++;
// Count the characters up until the closing bracket or EOL
for (NameSize=0; Idx<LineLength; Idx++)
{
if ((SectionNameLine[Idx] == ']') ||
(SectionNameLine[Idx] == '\0'))
{
break;
}
// Increment the count
NameSize++;
}
// Add one for the NULL-terminator
NameSize++;
return NameSize;
}
VOID IniExtractSectionName(PUCHAR SectionName, PUCHAR SectionNameLine, U32 LineLength)
{
U32 Idx;
U32 DestIdx;
// Find the opening bracket (skipping whitespace)
for (Idx=0; Idx<LineLength; Idx++)
{
if ((SectionNameLine[Idx] == ' ') ||
(SectionNameLine[Idx] == '\t'))
{
continue;
}
else //if (SectionNameLine[Idx] == '[')
{
break;
}
}
// Skip past the opening bracket
Idx++;
// Count the characters up until the closing bracket or EOL
for (DestIdx=0; Idx<LineLength; Idx++)
{
if ((SectionNameLine[Idx] == ']') ||
(SectionNameLine[Idx] == '\0'))
{
break;
}
// Grab a character and increment DestIdx
SectionName[DestIdx] = SectionNameLine[Idx];
DestIdx++;
}
// Terminate the string
SectionName[DestIdx] = '\0';
}
BOOL IniIsSetting(PUCHAR LineOfText, U32 TextLength)
{
U32 Idx;
// Basically just check for an '=' equals sign
for (Idx=0; Idx<TextLength; Idx++)
{
if (LineOfText[Idx] == '=')
{
return TRUE;
}
}
return FALSE;
}
U32 IniGetSettingNameSize(PUCHAR SettingNameLine, U32 LineLength)
{
U32 Idx;
U32 NameSize;
// Skip whitespace
for (Idx=0; Idx<LineLength; Idx++)
{
if ((SettingNameLine[Idx] == ' ') ||
(SettingNameLine[Idx] == '\t'))
{
continue;
}
else
{
break;
}
}
// Count the characters up until the '=' equals sign or EOL
for (NameSize=0; Idx<LineLength; Idx++)
{
if ((SettingNameLine[Idx] == '=') ||
(SettingNameLine[Idx] == '\0'))
{
break;
}
// Increment the count
NameSize++;
}
// Add one for the NULL-terminator
NameSize++;
return NameSize;
}
U32 IniGetSettingValueSize(PUCHAR SettingValueLine, U32 LineLength)
{
U32 Idx;
U32 ValueSize;
// Skip whitespace
for (Idx=0; Idx<LineLength; Idx++)
{
if ((SettingValueLine[Idx] == ' ') ||
(SettingValueLine[Idx] == '\t'))
{
continue;
}
else
{
break;
}
}
// Skip the characters up until the '=' equals sign or EOL
for (; Idx<LineLength; Idx++)
{
if (SettingValueLine[Idx] == '=')
{
Idx++;
break;
}
// If we hit EOL then obviously the value size is zero
if (SettingValueLine[Idx] == '\0')
{
return 0;
}
}
// Count the characters up until the EOL
for (ValueSize=0; Idx<LineLength; Idx++)
{
if (SettingValueLine[Idx] == '\0')
{
break;
}
// Increment the count
ValueSize++;
}
// Add one for the NULL-terminator
ValueSize++;
return ValueSize;
}
VOID IniExtractSettingName(PUCHAR SettingName, PUCHAR SettingNameLine, U32 LineLength)
{
U32 Idx;
U32 DestIdx;
// Skip whitespace
for (Idx=0; Idx<LineLength; Idx++)
{
if ((SettingNameLine[Idx] == ' ') ||
(SettingNameLine[Idx] == '\t'))
{
continue;
}
else
{
break;
}
}
// Get the characters up until the '=' equals sign or EOL
for (DestIdx=0; Idx<LineLength; Idx++)
{
if ((SettingNameLine[Idx] == '=') ||
(SettingNameLine[Idx] == '\0'))
{
break;
}
// Grab a character and increment DestIdx
SettingName[DestIdx] = SettingNameLine[Idx];
DestIdx++;
}
// Terminate the string
SettingName[DestIdx] = '\0';
}
VOID IniExtractSettingValue(PUCHAR SettingValue, PUCHAR SettingValueLine, U32 LineLength)
{
U32 Idx;
U32 DestIdx;
// Skip whitespace
for (Idx=0; Idx<LineLength; Idx++)
{
if ((SettingValueLine[Idx] == ' ') ||
(SettingValueLine[Idx] == '\t'))
{
continue;
}
else
{
break;
}
}
// Skip the characters up until the '=' equals sign or EOL
for (; Idx<LineLength; Idx++)
{
if (SettingValueLine[Idx] == '=')
{
Idx++;
break;
}
// If we hit EOL then obviously the value size is zero
if (SettingValueLine[Idx] == '\0')
{
SettingValue[0] = '\0';
return;
}
}
// Get the characters up until the EOL
for (DestIdx=0; Idx<LineLength; Idx++)
{
if (SettingValueLine[Idx] == '\0')
{
break;
}
// Grab a character and increment DestIdx
SettingValue[DestIdx] = SettingValueLine[Idx];
DestIdx++;
}
// Terminate the string
SettingValue[DestIdx] = '\0';
}

View File

@@ -1,508 +0,0 @@
/*
* FreeLoader
* Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <freeldr.h>
#include <arch.h>
#include <disk.h>
#include <miscboot.h>
#include <rtl.h>
#include <fs.h>
#include <ui.h>
#include <linux.h>
#include <debug.h>
#include <mm.h>
#include <inifile.h>
#include <oslist.h> // For RemoveQuotes()
#include <video.h>
#include <drivemap.h>
#define LINUX_READ_CHUNK_SIZE 0x20000 // Read 128k at a time
PLINUX_BOOTSECTOR LinuxBootSector = NULL;
PLINUX_SETUPSECTOR LinuxSetupSector = NULL;
U32 SetupSectorSize = 0;
BOOL NewStyleLinuxKernel = FALSE;
U32 LinuxKernelSize = 0;
U32 LinuxInitrdSize = 0;
UCHAR LinuxKernelName[260];
UCHAR LinuxInitrdName[260];
BOOL LinuxHasInitrd = FALSE;
UCHAR LinuxCommandLine[260] = "";
U32 LinuxCommandLineSize = 0;
PVOID LinuxKernelLoadAddress = NULL;
PVOID LinuxInitrdLoadAddress = NULL;
UCHAR LinuxBootDescription[80];
VOID LoadAndBootLinux(PUCHAR OperatingSystemName, PUCHAR Description)
{
PFILE LinuxKernel = NULL;
PFILE LinuxInitrdFile = NULL;
UCHAR TempString[260];
UiDrawBackdrop();
if (Description)
{
sprintf(LinuxBootDescription, "Loading %s...", Description);
}
else
{
strcpy(LinuxBootDescription, "Loading Linux...");
}
UiDrawStatusText(LinuxBootDescription);
UiDrawProgressBarCenter(0, 100, LinuxBootDescription);
// Parse the .ini file section
if (!LinuxParseIniSection(OperatingSystemName))
{
goto LinuxBootFailed;
}
// Open the boot volume
if (!FsOpenVolume(BootDrive, BootPartition))
{
UiMessageBox("Failed to open boot drive.");
goto LinuxBootFailed;
}
// Open the kernel
LinuxKernel = FsOpenFile(LinuxKernelName);
if (LinuxKernel == NULL)
{
sprintf(TempString, "Linux kernel \'%s\' not found.", LinuxKernelName);
UiMessageBox(TempString);
goto LinuxBootFailed;
}
// Open the initrd file image (if necessary)
if (LinuxHasInitrd)
{
LinuxInitrdFile = FsOpenFile(LinuxInitrdName);
if (LinuxInitrdFile == NULL)
{
sprintf(TempString, "Linux initrd image \'%s\' not found.", LinuxInitrdName);
UiMessageBox(TempString);
goto LinuxBootFailed;
}
}
// Read the boot sector
if (!LinuxReadBootSector(LinuxKernel))
{
goto LinuxBootFailed;
}
// Read the setup sector
if (!LinuxReadSetupSector(LinuxKernel))
{
goto LinuxBootFailed;
}
// Calc kernel size
LinuxKernelSize = FsGetFileSize(LinuxKernel) - (512 + SetupSectorSize);
// Get the file size
LinuxInitrdSize = FsGetFileSize(LinuxInitrdFile);
// Read the kernel
if (!LinuxReadKernel(LinuxKernel))
{
goto LinuxBootFailed;
}
// Read the initrd (if necessary)
if (LinuxHasInitrd)
{
if (!LinuxReadInitrd(LinuxInitrdFile))
{
goto LinuxBootFailed;
}
}
// If the default root device is set to FLOPPY (0000h), change to /dev/fd0 (0200h)
if (LinuxBootSector->RootDevice == 0x0000)
{
LinuxBootSector->RootDevice = 0x0200;
}
if (LinuxSetupSector->Version >= 0x0202)
{
LinuxSetupSector->CommandLinePointer = 0x99000;
}
else
{
LinuxBootSector->CommandLineMagic = LINUX_COMMAND_LINE_MAGIC;
LinuxBootSector->CommandLineOffset = 0x9000;
}
if (NewStyleLinuxKernel)
{
LinuxSetupSector->TypeOfLoader = LINUX_LOADER_TYPE_FREELOADER;
}
else
{
LinuxSetupSector->LoadFlags = 0;
}
RtlCopyMemory((PVOID)0x90000, LinuxBootSector, 512);
RtlCopyMemory((PVOID)0x90200, LinuxSetupSector, SetupSectorSize);
RtlCopyMemory((PVOID)0x99000, LinuxCommandLine, LinuxCommandLineSize);
UiUnInitialize("Booting Linux...");
DiskStopFloppyMotor();
if (LinuxSetupSector->LoadFlags & LINUX_FLAG_LOAD_HIGH)
{
BootNewLinuxKernel();
}
else
{
BootOldLinuxKernel(LinuxKernelSize);
}
LinuxBootFailed:
if (LinuxKernel != NULL)
{
FsCloseFile(LinuxKernel);
}
if (LinuxInitrdFile != NULL)
{
FsCloseFile(LinuxInitrdFile);
}
if (LinuxBootSector != NULL)
{
MmFreeMemory(LinuxBootSector);
}
if (LinuxSetupSector != NULL)
{
MmFreeMemory(LinuxSetupSector);
}
if (LinuxKernelLoadAddress != NULL)
{
MmFreeMemory(LinuxKernelLoadAddress);
}
if (LinuxInitrdLoadAddress != NULL)
{
MmFreeMemory(LinuxInitrdLoadAddress);
}
LinuxBootSector = NULL;
LinuxSetupSector = NULL;
LinuxKernelLoadAddress = NULL;
LinuxInitrdLoadAddress = NULL;
SetupSectorSize = 0;
NewStyleLinuxKernel = FALSE;
LinuxKernelSize = 0;
LinuxHasInitrd = FALSE;
strcpy(LinuxCommandLine, "");
LinuxCommandLineSize = 0;
}
BOOL LinuxParseIniSection(PUCHAR OperatingSystemName)
{
UCHAR SettingName[260];
UCHAR SettingValue[260];
U32 SectionId;
// Find all the message box settings and run them
UiShowMessageBoxesInSection(OperatingSystemName);
// Try to open the operating system section in the .ini file
if (!IniOpenSection(OperatingSystemName, &SectionId))
{
sprintf(SettingName, "Section [%s] not found in freeldr.ini.\n", OperatingSystemName);
UiMessageBox(SettingName);
return FALSE;
}
if (!IniReadSettingByName(SectionId, "BootDrive", SettingValue, 260))
{
UiMessageBox("Boot drive not specified for selected OS!");
return FALSE;
}
BootDrive = DriveMapGetBiosDriveNumber(SettingValue);
BootPartition = 0;
if (IniReadSettingByName(SectionId, "BootPartition", SettingValue, 260))
{
BootPartition = atoi(SettingValue);
}
// Get the kernel name
if (!IniReadSettingByName(SectionId, "Kernel", LinuxKernelName, 260))
{
UiMessageBox("Linux kernel filename not specified for selected OS!");
return FALSE;
}
// Get the initrd name
if (IniReadSettingByName(SectionId, "Initrd", LinuxInitrdName, 260))
{
LinuxHasInitrd = TRUE;
}
// Get the command line
if (IniReadSettingByName(SectionId, "CommandLine", LinuxCommandLine, 260))
{
RemoveQuotes(LinuxCommandLine);
LinuxCommandLineSize = strlen(LinuxCommandLine) + 1;
}
return TRUE;
}
BOOL LinuxReadBootSector(PFILE LinuxKernelFile)
{
// Allocate memory for boot sector
LinuxBootSector = (PLINUX_BOOTSECTOR)MmAllocateMemory(512);
if (LinuxBootSector == NULL)
{
return FALSE;
}
// Read linux boot sector
FsSetFilePointer(LinuxKernelFile, 0);
if (!FsReadFile(LinuxKernelFile, 512, NULL, LinuxBootSector))
{
return FALSE;
}
// Check for validity
if (LinuxBootSector->BootFlag != LINUX_BOOT_SECTOR_MAGIC)
{
UiMessageBox("Invalid boot sector magic (0xaa55)");
return FALSE;
}
DbgDumpBuffer(DPRINT_LINUX, LinuxBootSector, 512);
DbgPrint((DPRINT_LINUX, "SetupSectors: %d\n", LinuxBootSector->SetupSectors));
DbgPrint((DPRINT_LINUX, "RootFlags: 0x%x\n", LinuxBootSector->RootFlags));
DbgPrint((DPRINT_LINUX, "SystemSize: 0x%x\n", LinuxBootSector->SystemSize));
DbgPrint((DPRINT_LINUX, "SwapDevice: 0x%x\n", LinuxBootSector->SwapDevice));
DbgPrint((DPRINT_LINUX, "RamSize: 0x%x\n", LinuxBootSector->RamSize));
DbgPrint((DPRINT_LINUX, "VideoMode: 0x%x\n", LinuxBootSector->VideoMode));
DbgPrint((DPRINT_LINUX, "RootDevice: 0x%x\n", LinuxBootSector->RootDevice));
DbgPrint((DPRINT_LINUX, "BootFlag: 0x%x\n", LinuxBootSector->BootFlag));
return TRUE;
}
BOOL LinuxReadSetupSector(PFILE LinuxKernelFile)
{
U8 TempLinuxSetupSector[512];
LinuxSetupSector = (PLINUX_SETUPSECTOR)TempLinuxSetupSector;
// Read first linux setup sector
FsSetFilePointer(LinuxKernelFile, 512);
if (!FsReadFile(LinuxKernelFile, 512, NULL, TempLinuxSetupSector))
{
return FALSE;
}
// Check the kernel version
if (!LinuxCheckKernelVersion())
{
return FALSE;
}
if (NewStyleLinuxKernel)
{
SetupSectorSize = 512 * LinuxBootSector->SetupSectors;
}
else
{
SetupSectorSize = 4 * 512; // Always 4 setup sectors
}
// Allocate memory for setup sectors
LinuxSetupSector = (PLINUX_SETUPSECTOR)MmAllocateMemory(SetupSectorSize);
if (LinuxSetupSector == NULL)
{
return FALSE;
}
// Copy over first setup sector
RtlCopyMemory(LinuxSetupSector, TempLinuxSetupSector, 512);
// Read in the rest of the linux setup sectors
FsSetFilePointer(LinuxKernelFile, 1024);
if (!FsReadFile(LinuxKernelFile, SetupSectorSize - 512, NULL, ((PVOID)LinuxSetupSector) + 512))
{
return FALSE;
}
DbgDumpBuffer(DPRINT_LINUX, LinuxSetupSector, SetupSectorSize);
DbgPrint((DPRINT_LINUX, "SetupHeaderSignature: 0x%x (HdrS)\n", LinuxSetupSector->SetupHeaderSignature));
DbgPrint((DPRINT_LINUX, "Version: 0x%x\n", LinuxSetupSector->Version));
DbgPrint((DPRINT_LINUX, "RealModeSwitch: 0x%x\n", LinuxSetupSector->RealModeSwitch));
DbgPrint((DPRINT_LINUX, "SetupSeg: 0x%x\n", LinuxSetupSector->SetupSeg));
DbgPrint((DPRINT_LINUX, "StartSystemSeg: 0x%x\n", LinuxSetupSector->StartSystemSeg));
DbgPrint((DPRINT_LINUX, "KernelVersion: 0x%x\n", LinuxSetupSector->KernelVersion));
DbgPrint((DPRINT_LINUX, "TypeOfLoader: 0x%x\n", LinuxSetupSector->TypeOfLoader));
DbgPrint((DPRINT_LINUX, "LoadFlags: 0x%x\n", LinuxSetupSector->LoadFlags));
DbgPrint((DPRINT_LINUX, "SetupMoveSize: 0x%x\n", LinuxSetupSector->SetupMoveSize));
DbgPrint((DPRINT_LINUX, "Code32Start: 0x%x\n", LinuxSetupSector->Code32Start));
DbgPrint((DPRINT_LINUX, "RamdiskAddress: 0x%x\n", LinuxSetupSector->RamdiskAddress));
DbgPrint((DPRINT_LINUX, "RamdiskSize: 0x%x\n", LinuxSetupSector->RamdiskSize));
DbgPrint((DPRINT_LINUX, "BootSectKludgeOffset: 0x%x\n", LinuxSetupSector->BootSectKludgeOffset));
DbgPrint((DPRINT_LINUX, "BootSectKludgeSegment: 0x%x\n", LinuxSetupSector->BootSectKludgeSegment));
DbgPrint((DPRINT_LINUX, "HeapEnd: 0x%x\n", LinuxSetupSector->HeapEnd));
return TRUE;
}
BOOL LinuxReadKernel(PFILE LinuxKernelFile)
{
U32 BytesLoaded;
UCHAR StatusText[260];
PVOID LoadAddress;
sprintf(StatusText, "Loading %s", LinuxKernelName);
UiDrawStatusText(StatusText);
// Allocate memory for Linux kernel
LinuxKernelLoadAddress = MmAllocateMemoryAtAddress(LinuxKernelSize, (PVOID)LINUX_KERNEL_LOAD_ADDRESS);
if (LinuxKernelLoadAddress != (PVOID)LINUX_KERNEL_LOAD_ADDRESS)
{
return FALSE;
}
LoadAddress = LinuxKernelLoadAddress;
// Read linux kernel to 0x100000 (1mb)
FsSetFilePointer(LinuxKernelFile, 512 + SetupSectorSize);
for (BytesLoaded=0; BytesLoaded<LinuxKernelSize; )
{
if (!FsReadFile(LinuxKernelFile, LINUX_READ_CHUNK_SIZE, NULL, LoadAddress))
{
return FALSE;
}
BytesLoaded += LINUX_READ_CHUNK_SIZE;
LoadAddress += LINUX_READ_CHUNK_SIZE;
UiDrawProgressBarCenter(BytesLoaded, LinuxKernelSize + LinuxInitrdSize, LinuxBootDescription);
}
return TRUE;
}
BOOL LinuxCheckKernelVersion(VOID)
{
// Just assume old kernel until we find otherwise
NewStyleLinuxKernel = FALSE;
// Check for new style setup header
if (LinuxSetupSector->SetupHeaderSignature != LINUX_SETUP_HEADER_ID)
{
NewStyleLinuxKernel = FALSE;
}
// Check for version below 2.0
else if (LinuxSetupSector->Version < 0x0200)
{
NewStyleLinuxKernel = FALSE;
}
// Check for version 2.0
else if (LinuxSetupSector->Version == 0x0200)
{
NewStyleLinuxKernel = TRUE;
}
// Check for version 2.01+
else if (LinuxSetupSector->Version >= 0x0201)
{
NewStyleLinuxKernel = TRUE;
LinuxSetupSector->HeapEnd = 0x9000;
LinuxSetupSector->LoadFlags |= LINUX_FLAG_CAN_USE_HEAP;
}
if ((NewStyleLinuxKernel == FALSE) && (LinuxHasInitrd == TRUE))
{
UiMessageBox("Error: Cannot load a ramdisk (initrd) with an old kernel image.");
return FALSE;
}
return TRUE;
}
BOOL LinuxReadInitrd(PFILE LinuxInitrdFile)
{
U32 BytesLoaded;
UCHAR StatusText[260];
sprintf(StatusText, "Loading %s", LinuxInitrdName);
UiDrawStatusText(StatusText);
// Allocate memory for the ramdisk
//LinuxInitrdLoadAddress = MmAllocateMemory(LinuxInitrdSize);
// Try to align it at the next MB boundary after the kernel
//LinuxInitrdLoadAddress = MmAllocateMemoryAtAddress(LinuxInitrdSize, (PVOID)ROUND_UP((LINUX_KERNEL_LOAD_ADDRESS + LinuxKernelSize), 0x100000));
if (LinuxSetupSector->Version <= 0x0202)
{
LinuxInitrdLoadAddress = MmAllocateHighestMemoryBelowAddress(LinuxInitrdSize, (PVOID)LINUX_MAX_INITRD_ADDRESS);
}
else
{
LinuxInitrdLoadAddress = MmAllocateHighestMemoryBelowAddress(LinuxInitrdSize, (PVOID)LinuxSetupSector->InitrdAddressMax);
}
if (LinuxInitrdLoadAddress == NULL)
{
return FALSE;
}
// Set the information in the setup struct
LinuxSetupSector->RamdiskAddress = (U32)LinuxInitrdLoadAddress;
LinuxSetupSector->RamdiskSize = LinuxInitrdSize;
DbgPrint((DPRINT_LINUX, "RamdiskAddress: 0x%x\n", LinuxSetupSector->RamdiskAddress));
DbgPrint((DPRINT_LINUX, "RamdiskSize: 0x%x\n", LinuxSetupSector->RamdiskSize));
if (LinuxSetupSector->Version >= 0x0203)
{
DbgPrint((DPRINT_LINUX, "InitrdAddressMax: 0x%x\n", LinuxSetupSector->InitrdAddressMax));
}
// Read in the ramdisk
for (BytesLoaded=0; BytesLoaded<LinuxInitrdSize; )
{
if (!FsReadFile(LinuxInitrdFile, LINUX_READ_CHUNK_SIZE, NULL, (PVOID)LinuxInitrdLoadAddress))
{
return FALSE;
}
BytesLoaded += LINUX_READ_CHUNK_SIZE;
LinuxInitrdLoadAddress += LINUX_READ_CHUNK_SIZE;
UiDrawProgressBarCenter(BytesLoaded + LinuxKernelSize, LinuxInitrdSize + LinuxKernelSize, LinuxBootDescription);
}
return TRUE;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,301 +0,0 @@
/* Header file for libgcc2.c. */
/* Copyright (C) 2000, 2001
Free Software Foundation, Inc.
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 2, or (at your option) any later
version.
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
#ifndef GCC_LIBGCC2_H
#define GCC_LIBGCC2_H
extern int __gcc_bcmp (const unsigned char *, const unsigned char *, size_t);
extern void __clear_cache (char *, char *);
extern void __eprintf (const char *, const char *, unsigned int, const char *)
__attribute__ ((__noreturn__));
struct bb;
extern void __bb_exit_func (void);
extern void __bb_init_func (struct bb *);
extern void __bb_fork_func (void);
extern void __bb_trace_func (void);
extern void __bb_trace_ret (void);
extern void __bb_init_trace_func (struct bb *, unsigned long);
struct exception_descriptor;
extern short int __get_eh_table_language (struct exception_descriptor *);
extern short int __get_eh_table_version (struct exception_descriptor *);
/* Permit the tm.h file to select the endianness to use just for this
file. This is used when the endianness is determined when the
compiler is run. */
#ifndef LIBGCC2_WORDS_BIG_ENDIAN
#define LIBGCC2_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN
#endif
#ifndef LIBGCC2_LONG_DOUBLE_TYPE_SIZE
#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE LONG_DOUBLE_TYPE_SIZE
#endif
#ifndef MIN_UNITS_PER_WORD
#define MIN_UNITS_PER_WORD UNITS_PER_WORD
#endif
/* In the first part of this file, we are interfacing to calls generated
by the compiler itself. These calls pass values into these routines
which have very specific modes (rather than very specific types), and
these compiler-generated calls also expect any return values to have
very specific modes (rather than very specific types). Thus, we need
to avoid using regular C language type names in this part of the file
because the sizes for those types can be configured to be anything.
Instead we use the following special type names. */
typedef int QItype __attribute__ ((mode (QI)));
typedef unsigned int UQItype __attribute__ ((mode (QI)));
typedef int HItype __attribute__ ((mode (HI)));
typedef unsigned int UHItype __attribute__ ((mode (HI)));
#if MIN_UNITS_PER_WORD > 1
/* These typedefs are usually forbidden on dsp's with UNITS_PER_WORD 1 */
typedef int SItype __attribute__ ((mode (SI)));
typedef unsigned int USItype __attribute__ ((mode (SI)));
#if LONG_LONG_TYPE_SIZE > 32
/* These typedefs are usually forbidden on archs with UNITS_PER_WORD 2 */
typedef int DItype __attribute__ ((mode (DI)));
typedef unsigned int UDItype __attribute__ ((mode (DI)));
#if MIN_UNITS_PER_WORD > 4
/* These typedefs are usually forbidden on archs with UNITS_PER_WORD 4 */
typedef int TItype __attribute__ ((mode (TI)));
typedef unsigned int UTItype __attribute__ ((mode (TI)));
#endif
#endif
#endif
#if BITS_PER_UNIT == 8
typedef float SFtype __attribute__ ((mode (SF)));
typedef float DFtype __attribute__ ((mode (DF)));
#if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 96
typedef float XFtype __attribute__ ((mode (XF)));
#endif
#if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128
typedef float TFtype __attribute__ ((mode (TF)));
#endif
#else /* BITS_PER_UNIT != 8 */
/* On dsp's there are usually qf/hf/tqf modes used instead of the above.
For now we don't support them in libgcc2.c. */
#undef L_fixdfdi
#undef L_fixsfdi
#undef L_fixtfdi
#undef L_fixunsdfdi
#undef L_fixunsdfsi
#undef L_fixunssfdi
#undef L_fixunssfsi
#undef L_fixunstfdi
#undef L_fixunsxfdi
#undef L_fixunsxfsi
#undef L_fixxfdi
#undef L_floatdidf
#undef L_floatdisf
#undef L_floatditf
#undef L_floatdixf
#endif /* BITS_PER_UNIT != 8 */
typedef int word_type __attribute__ ((mode (__word__)));
/* Make sure that we don't accidentally use any normal C language built-in
type names in the first part of this file. Instead we want to use *only*
the type names defined above. The following macro definitions insure
that if we *do* accidentally use some normal C language built-in type name,
we will get a syntax error. */
#define char bogus_type
#define short bogus_type
#define int bogus_type
#define long bogus_type
#define unsigned bogus_type
#define float bogus_type
#define double bogus_type
#if MIN_UNITS_PER_WORD > 4
#define W_TYPE_SIZE (8 * BITS_PER_UNIT)
#define Wtype DItype
#define UWtype UDItype
#define HWtype DItype
#define UHWtype UDItype
#define DWtype TItype
#define UDWtype UTItype
#define __NW(a,b) __ ## a ## di ## b
#define __NDW(a,b) __ ## a ## ti ## b
#elif MIN_UNITS_PER_WORD > 2 \
|| (MIN_UNITS_PER_WORD > 1 && LONG_LONG_TYPE_SIZE > 32)
#define W_TYPE_SIZE (4 * BITS_PER_UNIT)
#define Wtype SItype
#define UWtype USItype
#define HWtype SItype
#define UHWtype USItype
#define DWtype DItype
#define UDWtype UDItype
#define __NW(a,b) __ ## a ## si ## b
#define __NDW(a,b) __ ## a ## di ## b
#elif MIN_UNITS_PER_WORD > 1
#define W_TYPE_SIZE (2 * BITS_PER_UNIT)
#define Wtype HItype
#define UWtype UHItype
#define HWtype HItype
#define UHWtype UHItype
#define DWtype SItype
#define UDWtype USItype
#define __NW(a,b) __ ## a ## hi ## b
#define __NDW(a,b) __ ## a ## si ## b
#else
#define W_TYPE_SIZE BITS_PER_UNIT
#define Wtype QItype
#define UWtype UQItype
#define HWtype QItype
#define UHWtype UQItype
#define DWtype HItype
#define UDWtype UHItype
#define __NW(a,b) __ ## a ## qi ## b
#define __NDW(a,b) __ ## a ## hi ## b
#endif
#define Wtype_MAX ((Wtype)(((UWtype)1 << (W_TYPE_SIZE - 1)) - 1))
#define Wtype_MIN (- Wtype_MAX - 1)
#define __muldi3 __NDW(mul,3)
#define __divdi3 __NDW(div,3)
#define __udivdi3 __NDW(udiv,3)
#define __moddi3 __NDW(mod,3)
#define __umoddi3 __NDW(umod,3)
#define __negdi2 __NDW(neg,2)
#define __lshrdi3 __NDW(lshr,3)
#define __ashldi3 __NDW(ashl,3)
#define __ashrdi3 __NDW(ashr,3)
#define __ffsdi2 __NDW(ffs,2)
#define __cmpdi2 __NDW(cmp,2)
#define __ucmpdi2 __NDW(ucmp,2)
#define __udivmoddi4 __NDW(udivmod,4)
#define __fixunstfDI __NDW(fixunstf,)
#define __fixtfdi __NDW(fixtf,)
#define __fixunsxfDI __NDW(fixunsxf,)
#define __fixxfdi __NDW(fixxf,)
#define __fixunsdfDI __NDW(fixunsdf,)
#define __fixdfdi __NDW(fixdf,)
#define __fixunssfDI __NDW(fixunssf,)
#define __fixsfdi __NDW(fixsf,)
#define __floatdixf __NDW(float,xf)
#define __floatditf __NDW(float,tf)
#define __floatdidf __NDW(float,df)
#define __floatdisf __NDW(float,sf)
#define __fixunsxfSI __NW(fixunsxf,)
#define __fixunstfSI __NW(fixunstf,)
#define __fixunsdfSI __NW(fixunsdf,)
#define __fixunssfSI __NW(fixunssf,)
extern DWtype __muldi3 (DWtype, DWtype);
extern DWtype __divdi3 (DWtype, DWtype);
extern UDWtype __udivdi3 (UDWtype, UDWtype);
extern UDWtype __umoddi3 (UDWtype, UDWtype);
extern DWtype __moddi3 (DWtype, DWtype);
/* __udivmoddi4 is static inline when building other libgcc2 portions. */
#if (!defined (L_udivdi3) && !defined (L_divdi3) && \
!defined (L_umoddi3) && !defined (L_moddi3))
extern UDWtype __udivmoddi4 (UDWtype, UDWtype, UDWtype *);
#endif
/* __negdi2 is static inline when building other libgcc2 portions. */
#if !defined(L_divdi3) && !defined(L_moddi3)
extern DWtype __negdi2 (DWtype);
#endif
extern DWtype __lshrdi3 (DWtype, word_type);
extern DWtype __ashldi3 (DWtype, word_type);
extern DWtype __ashrdi3 (DWtype, word_type);
extern DWtype __ffsdi2 (DWtype);
/* __udiv_w_sdiv is static inline when building other libgcc2 portions. */
#if (!defined(L_udivdi3) && !defined(L_divdi3) && \
!defined(L_umoddi3) && !defined(L_moddi3))
extern UWtype __udiv_w_sdiv (UWtype *, UWtype, UWtype, UWtype);
#endif
extern word_type __cmpdi2 (DWtype, DWtype);
extern word_type __ucmpdi2 (DWtype, DWtype);
extern Wtype __absvsi2 (Wtype);
extern DWtype __absvdi2 (DWtype);
extern Wtype __addvsi3 (Wtype, Wtype);
extern DWtype __addvdi3 (DWtype, DWtype);
extern Wtype __subvsi3 (Wtype, Wtype);
extern DWtype __subvdi3 (DWtype, DWtype);
extern Wtype __mulvsi3 (Wtype, Wtype);
extern DWtype __mulvdi3 (DWtype, DWtype);
extern Wtype __negvsi2 (Wtype);
extern DWtype __negvdi2 (DWtype);
#if BITS_PER_UNIT == 8
extern DWtype __fixdfdi (DFtype);
extern DWtype __fixsfdi (SFtype);
extern DFtype __floatdidf (DWtype);
extern SFtype __floatdisf (DWtype);
extern UWtype __fixunsdfSI (DFtype);
extern UWtype __fixunssfSI (SFtype);
extern DWtype __fixunsdfDI (DFtype);
extern DWtype __fixunssfDI (SFtype);
#if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 96
extern DWtype __fixxfdi (XFtype);
extern DWtype __fixunsxfDI (XFtype);
extern XFtype __floatdixf (DWtype);
extern UWtype __fixunsxfSI (XFtype);
#endif
#if LIBGCC2_LONG_DOUBLE_TYPE_SIZE == 128
extern DWtype __fixunstfDI (TFtype);
extern DWtype __fixtfdi (TFtype);
extern TFtype __floatditf (DWtype);
#endif
#endif /* BITS_PER_UNIT == 8 */
/* DWstructs are pairs of Wtype values in the order determined by
LIBGCC2_WORDS_BIG_ENDIAN. */
#if LIBGCC2_WORDS_BIG_ENDIAN
struct DWstruct {Wtype high, low;};
#else
struct DWstruct {Wtype low, high;};
#endif
/* We need this union to unpack/pack DImode values, since we don't have
any arithmetic yet. Incoming DImode parameters are stored into the
`ll' field, and the unpacked result is read from the struct `s'. */
typedef union
{
struct DWstruct s;
DWtype ll;
} DWunion;
#include "longlong.h"
#endif /* ! GCC_LIBGCC2_H */

File diff suppressed because it is too large Load Diff

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