- Add DDK alignment macros and move/rename the ones in the NDK for user-mode only (since kernel-mode should use the DDK ones).
- Fix helper.h's alignment macros to protect properly and also use a faster implementation.
- Update NDK readme.
Modified: trunk/reactos/boot/freeldr/freeldr/include/freeldr.h
Modified: trunk/reactos/drivers/fs/vfat/vfat.h
Modified: trunk/reactos/include/ndk/extypes.h
Modified: trunk/reactos/include/ndk/fixmes.txt
Modified: trunk/reactos/include/ndk/lpctypes.h
Modified: trunk/reactos/include/ndk/ntndk.h
Modified: trunk/reactos/include/ndk/readme.txt
Modified: trunk/reactos/include/ndk/umtypes.h
Modified: trunk/reactos/include/reactos/helper.h
Modified: trunk/reactos/lib/crt/precomp.h
Modified: trunk/reactos/lib/rtl/rtl.h
Modified: trunk/reactos/w32api/include/ddk/winddk.h

Modified: trunk/reactos/boot/freeldr/freeldr/include/freeldr.h
--- trunk/reactos/boot/freeldr/freeldr/include/freeldr.h	2005-11-26 23:26:04 UTC (rev 19665)
+++ trunk/reactos/boot/freeldr/freeldr/include/freeldr.h	2005-11-27 02:55:13 UTC (rev 19666)
@@ -70,6 +70,7 @@
 /* Externals */
 #include <reactos/rossym.h>
 #include <reactos/buildno.h>
+#include <reactos/helper.h>
 /* Needed if debuging is enabled */
 #include <comm.h>
 

Modified: trunk/reactos/drivers/fs/vfat/vfat.h
--- trunk/reactos/drivers/fs/vfat/vfat.h	2005-11-26 23:26:04 UTC (rev 19665)
+++ trunk/reactos/drivers/fs/vfat/vfat.h	2005-11-27 02:55:13 UTC (rev 19666)
@@ -1,6 +1,7 @@
 #include <debug.h>
 #include <ntifs.h>
 #include <ntdddisk.h>
+#include <reactos/helper.h>
 
 #ifdef __GNUC__
 #include <ndk/ntndk.h>

Modified: trunk/reactos/include/ndk/extypes.h
--- trunk/reactos/include/ndk/extypes.h	2005-11-26 23:26:04 UTC (rev 19665)
+++ trunk/reactos/include/ndk/extypes.h	2005-11-27 02:55:13 UTC (rev 19666)
@@ -178,7 +178,7 @@
     SystemPrioritySeperation,
     SystemPlugPlayBusInformation,
     SystemDockInformation,
-    _SystemPowerInformation, // FIXME 
+    SystemPowerInformationNative,
     SystemProcessorSpeedInformation,
     SystemCurrentTimeZoneInformation,
     SystemLookasideInformation,
@@ -988,8 +988,7 @@
 } SYSTEM_DOCK_INFORMATION, *PSYSTEM_DOCK_INFORMATION;
 
 // Class 42
-// FIXME: Conflict with WINNT.H 
-typedef struct __SYSTEM_POWER_INFORMATION
+typedef struct _SYSTEM_POWER_INFORMATION_NATIVE
 {
     BOOLEAN SystemSuspendSupported;
     BOOLEAN SystemHibernateSupported;
@@ -1001,7 +1000,7 @@
     BOOLEAN SystemAcOrDc;
     BOOLEAN PowerDownDisabled;
     LARGE_INTEGER SpindownDrives;
-} _SYSTEM_POWER_INFORMATION, *P_SYSTEM_POWER_INFORMATION;
+} SYSTEM_POWER_INFORMATION_NATIVE, *PSYSTEM_POWER_INFORMATION_NATIVE;
 
 // Class 43
 typedef struct _SYSTEM_LEGACY_DRIVER_INFORMATION

Modified: trunk/reactos/include/ndk/fixmes.txt
--- trunk/reactos/include/ndk/fixmes.txt	2005-11-26 23:26:04 UTC (rev 19665)
+++ trunk/reactos/include/ndk/fixmes.txt	2005-11-27 02:55:13 UTC (rev 19666)
@@ -17,12 +17,8 @@
 |rtltypes.h	- PPF_ Defines don't seem to be the real names (try to find them).
 |rtltypes.h	- _RTL_PROCESS_BACKTRACE_INFORMATION isn't done.
 |haltypes.h	- Multi-Boot flags are ReactOS Only.
-|extypes.h	- SystemPowerInformation in SYSTEM_INFORMATION_CLASS causes conflict.
 |extypes.h	- _RUNDOWN_DESCRIPTOR is possibly incorrect/unofficial.
-|asm.h		- Selector names are not official.
-|extypes.h	- Class 42 (SYSTEM_POWER_INFORMATION causes conflict).
 |extypes.h	- Classes 13, 20, 30, 31, 49, 51, 52, 54+ are undefined.
-|ntndk.h	- Incorrect rounding macro names
 |_____________________________________________________________________________________
 
 
@@ -113,4 +109,4 @@
 subsys\system\cmd\precomp.h: #include <ndk/ntndk.h>
 subsys\system\services\services.h: #include <ndk/ntndk.h>
 subsys\system\taskmgr\precomp.h: #include <ndk/ntndk.h>
-subsys\system\usetup\usetup.h: #include <ndk/ntndk.h>
\ No newline at end of file
+subsys\system\usetup\usetup.h: #include <ndk/ntndk.h>

Modified: trunk/reactos/include/ndk/lpctypes.h
--- trunk/reactos/include/ndk/lpctypes.h	2005-11-26 23:26:04 UTC (rev 19665)
+++ trunk/reactos/include/ndk/lpctypes.h	2005-11-27 02:55:13 UTC (rev 19666)
@@ -234,9 +234,9 @@
 // Maximum total Kernel-Mode LPC Message Structure Size
 //
 #define LPCP_MAX_MESSAGE_SIZE \
-    ROUND_UP(PORT_MAXIMUM_MESSAGE_LENGTH + \
+    ALIGN_UP(PORT_MAXIMUM_MESSAGE_LENGTH + \
     sizeof(LPCP_MESSAGE) + \
-    sizeof(LPCP_CONNECTION_MESSAGE), 16)
+    sizeof(LPCP_CONNECTION_MESSAGE), sizeof(ULONGLONG) * 2)
 
 //
 // Maximum actual LPC Message Length

Modified: trunk/reactos/include/ndk/ntndk.h
--- trunk/reactos/include/ndk/ntndk.h	2005-11-26 23:26:04 UTC (rev 19665)
+++ trunk/reactos/include/ndk/ntndk.h	2005-11-27 02:55:13 UTC (rev 19666)
@@ -19,14 +19,6 @@
 #ifndef _NTNDK_
 #define _NTNDK_
 
-//
-// FIXME: Rounding Macros
-//
-#define ROUNDUP(a,b)        ((((a)+(b)-1)/(b))*(b))
-#define ROUNDDOWN(a,b)      (((a)/(b))*(b))
-#define ROUND_UP            ROUNDUP
-#define ROUND_DOWN          ROUNDDOWN
-
 #include <stdarg.h>         // C Standard Header
 #include <umtypes.h>        // General Definitions
 

Modified: trunk/reactos/include/ndk/readme.txt
--- trunk/reactos/include/ndk/readme.txt	2005-11-26 23:26:04 UTC (rev 19665)
+++ trunk/reactos/include/ndk/readme.txt	2005-11-27 02:55:13 UTC (rev 19666)
@@ -116,6 +116,55 @@
 
 3. USAGE
 
-3.1 TODO (COPY FROM WIKI)
+3.1 ORGANIZATION
 
-... TODO ... (COPY FROM WIKI)
+   * The NDK is organized in a main folder (include/ndk) with arch-specific subfolders (ex: include/ndk/i386). 
+   * The NDK is structured by NT Subsystem Component (ex: ex, ps, rtl, etc). 
+   * The NDK can either be included on-demand (#include <ndk/xxxxx.h>) or globally (#include <ndk/ntndk.h>).
+     The former is recommended to reduce compile time. 
+   * The NDK is structured by function and type. Every Subsystem Component has an associated "xxfuncs.h" and
+    "xxtypes.h" header, where "xx" is the Subsystem (ex: iofuncs.h, iotypes.h) 
+   * The NDK has a special file called "umtypes.h" which exports to User-Mode or Native-Mode Applications the
+     basic NT types which are present in ntdef.h. This file cannot be included since it would conflict with
+     winnt.h and/or windef.h. Thus, umtypes.h provides the missing types. This file is automatically included
+     in a User-Mode NDK project. 
+   * The NDK also includes a file called "umfuncs.h" which exports to User-Mode or Native-Mode Applications
+     undocumented functions which can only be accessed from ntdll.dll. 
+   * The NDK has another special file called "ifssupp.h", which exports to Kernel-Mode drivers a few types which
+     are only documented in the IFS kit, and are part of some native definitions. It will be deprecated next year
+     with the release of the WDK. 
+
+3.2 USING IN YOUR PROJECT
+
+    *  User Mode Application requiring Native Types: 
+
+       #define WIN32_NO_STATUS   /* Tell Windows headers you'll use ntstatus.s from NDK */
+       #include <windows.h>      /* Declare Windows Headers like you normally would */
+       #include <ntndk.h>        /* Declare the NDK Headers */
+
+    * Native Mode Application: 
+
+       #include <windows.h>      /* Declare Windows Headers for basic types. NEEDED UNTIL NDK 1.5 */
+       #include <ntndk.h>        /* Declare the NDK Headers */
+
+    * Kernel Mode Driver: 
+
+       #include <ntddk.h>       /* Declare DDK Headers like you normally would */
+       #include <ntndk.h>       /* Declare the NDK Headers */
+
+    * You may also include only the files you need (example for User-Mode application):
+
+       #define WIN32_NO_STATUS   /* Tell Windows headers you'll use ntstatus.s from NDK */
+       #include <windows.h>      /* Declare Windows Headers like you normally would */
+       #include <rtlfuncs.h>     /* Declare the Rtl* Functions */
+
+3.3 CAVEATS
+
+    * winternl.h: This header, part of the PSDK, was released by Microsoft as part of one of the governmen
+      lawsuits against it, and documents a certain (minimal) part of the Native API and/or types. Unforunately,
+      Microsoft decided to hack the Native Types and to define them incorrectly, replacing real members by "reserved"
+      ones. As such, you 'cannot include winternl.h in any project that uses the NDK. Note however, that the NDK fully
+      replaces it and retains compatibility with any project that used it.
+    * Native programs: Native programs must include "windows.h" until the next release of the NDK (1.5). The upcoming
+      version will automatically detect the lack of missing types and include them. Note however that you will still need
+      to have the PSDK installed.

Modified: trunk/reactos/include/ndk/umtypes.h
--- trunk/reactos/include/ndk/umtypes.h	2005-11-26 23:26:04 UTC (rev 19665)
+++ trunk/reactos/include/ndk/umtypes.h	2005-11-27 02:55:13 UTC (rev 19666)
@@ -61,6 +61,21 @@
 #endif
 
 //
+// Alignment Macros
+//
+#define ALIGN_DOWN(s, t) \
+    ((ULONG)(s) & ~(sizeof(t) - 1))
+
+#define ALIGN_UP(s, t) \
+    (ALIGN_DOWN(((ULONG)(s) + sizeof(t) - 1), t))
+
+#define ALIGN_DOWN_POINTER(p, t) \
+    ((PVOID)((ULONG_PTR)(p) & ~((ULONG_PTR)sizeof(t) - 1)))
+
+#define ALIGN_UP_POINTER(p, t) \
+    (ALIGN_DOWN_POINTER(((ULONG_PTR)(p) + sizeof(t) - 1), t))
+
+//
 // Native API Return Value Macros
 //
 #define NT_SUCCESS(Status)      (((NTSTATUS)(Status)) >= 0)

Modified: trunk/reactos/include/reactos/helper.h
--- trunk/reactos/include/reactos/helper.h	2005-11-26 23:26:04 UTC (rev 19665)
+++ trunk/reactos/include/reactos/helper.h	2005-11-27 02:55:13 UTC (rev 19666)
@@ -1,20 +1,22 @@
 #ifndef _HELPER_H
 #define _HELPER_H
 
-#ifndef ROUNDUP
-#define ROUNDUP(a,b)	((((a)+(b)-1)/(b))*(b))
+#ifndef ROUND_UP
+#define ROUND_UP(n, align) \
+    ROUND_DOWN(((ULONG)n) + (align) - 1, (align))
 #endif
 
-#ifndef ROUNDUP
-#define ROUNDDOWN(a,b)	(((a)/(b))*(b))
+#ifndef ROUND_DOWN
+#define ROUND_DOWN(n, align) \
+    (((ULONG)n) & ~((align) - 1l))
 #endif
 
-#ifndef ROUND_UP
-#define ROUND_UP ROUNDUP
+#ifndef ROUNDUP
+#define ROUNDUP ROUND_UP
 #endif
 
-#ifndef ROUND_DOWN
-#define ROUND_DOWN ROUNDDOWN
+#ifndef ROUNDDOWN
+#define ROUNDDOWN ROUND_DOWN
 #endif
 
 #ifndef PAGE_ROUND_DOWN

Modified: trunk/reactos/lib/crt/precomp.h
--- trunk/reactos/lib/crt/precomp.h	2005-11-26 23:26:04 UTC (rev 19665)
+++ trunk/reactos/lib/crt/precomp.h	2005-11-27 02:55:13 UTC (rev 19666)
@@ -16,10 +16,11 @@
 #include <math.h>
 #include <limits.h>
 
+/* PSDK/NDK Headers */
 #define WIN32_NO_STATUS
 #include <windows.h>
-#define NTOS_MODE_USER
 #include <ndk/ntndk.h>
+#include <reactos/helper.h>
 
 #if !defined(_MSC_VER)
   #include <stdint.h>

Modified: trunk/reactos/lib/rtl/rtl.h
--- trunk/reactos/lib/rtl/rtl.h	2005-11-26 23:26:04 UTC (rev 19665)
+++ trunk/reactos/lib/rtl/rtl.h	2005-11-27 02:55:13 UTC (rev 19666)
@@ -23,6 +23,7 @@
 #include <ndk/ntndk.h>
 
 /* Internal RTL header */
+#include <reactos/helper.h>
 #include "rtlp.h"
 
 /* EOF */

Modified: trunk/reactos/w32api/include/ddk/winddk.h
--- trunk/reactos/w32api/include/ddk/winddk.h	2005-11-26 23:26:04 UTC (rev 19665)
+++ trunk/reactos/w32api/include/ddk/winddk.h	2005-11-27 02:55:13 UTC (rev 19666)
@@ -98,6 +98,21 @@
 #endif
 
 /*
+ * Alignment Macros
+ */
+#define ALIGN_DOWN(s, t) \
+    ((ULONG)(s) & ~(sizeof(t) - 1))
+
+#define ALIGN_UP(s, t) \
+    (ALIGN_DOWN(((ULONG)(s) + sizeof(t) - 1), t))
+
+#define ALIGN_DOWN_POINTER(p, t) \
+    ((PVOID)((ULONG_PTR)(p) & ~((ULONG_PTR)sizeof(t) - 1)))
+
+#define ALIGN_UP_POINTER(p, t) \
+    (ALIGN_DOWN_POINTER(((ULONG_PTR)(p) + sizeof(t) - 1), t))
+
+/*
 ** Forward declarations
 */