Merge 13511:13830 from trunk
authorCasper Hornstrup <chorns@users.sourceforge.net>
Sat, 5 Mar 2005 20:50:25 +0000 (20:50 +0000)
committerCasper Hornstrup <chorns@users.sourceforge.net>
Sat, 5 Mar 2005 20:50:25 +0000 (20:50 +0000)
svn path=/branches/xmlbuildsystem/; revision=13833

62 files changed:
1  2 
reactos/Makefile
reactos/bootdata/packages/reactos.dff
reactos/drivers/fs/np/create.c
reactos/drivers/fs/np/fsctrl.c
reactos/drivers/fs/np/npfs.h
reactos/drivers/fs/np/rw.c
reactos/lib/crt/crt.xml
reactos/lib/crt/ctype/isalnum.c
reactos/lib/crt/ctype/isascii.c
reactos/lib/crt/ctype/iscntrl.c
reactos/lib/crt/ctype/isctype.c
reactos/lib/crt/ctype/isgraph.c
reactos/lib/crt/ctype/isprint.c
reactos/lib/crt/ctype/ispunct.c
reactos/lib/crt/ctype/isupper.c
reactos/lib/crt/stdio/sprintf.c
reactos/lib/crt/stdio/swprintf.c
reactos/lib/crt/stdio/vsprintf.c
reactos/lib/crt/stdio/vswprintf.c
reactos/lib/crt/wine/scanf.c
reactos/lib/crtdll/crtdll.def
reactos/lib/crtdll/crtdll.xml
reactos/lib/crtdll/stdio/vsprintf.c
reactos/lib/directory.xml
reactos/lib/expat/Makefile
reactos/lib/expat/conftools/ac_c_bigendian_cross.m4
reactos/lib/expat/conftools/mkinstalldirs
reactos/lib/expat/expat.xml
reactos/lib/msvcrt/dllmain.c
reactos/lib/msvcrt/msvcrt.def
reactos/lib/msvcrt/msvcrt.xml
reactos/lib/oleaut32/oleaut32.xml
reactos/lib/rpcrt4/rpc_message.c
reactos/lib/setupapi/setupapi.xml
reactos/lib/shlwapi/shlwapi.xml
reactos/ntoskrnl/include/internal/io.h
reactos/ntoskrnl/io/cancel.c
reactos/ntoskrnl/io/iomgr.c
reactos/ntoskrnl/io/irp.c
reactos/ntoskrnl/io/remlock.c
reactos/ntoskrnl/kd/gdbstub.c
reactos/ntoskrnl/ntoskrnl.xml
reactos/ntoskrnl/ob/handle.c
reactos/ntoskrnl/ps/kill.c
reactos/subsys/csrss/csrss.xml
reactos/subsys/smss/smss.xml
reactos/subsys/system/directory.xml
reactos/subsys/system/explorer/explorer.xml
reactos/subsys/system/ibrowser/Makefile
reactos/subsys/system/ibrowser/ibrowser.xml
reactos/subsys/win32k/main/dllmain.c
reactos/subsys/win32k/win32k.xml
reactos/tools/Makefile
reactos/tools/buildno/Makefile
reactos/tools/buildno/buildno.cpp
reactos/tools/rbuild/backend/mingw/mingw.cpp
reactos/tools/rbuild/backend/mingw/modulehandler.cpp
reactos/tools/unicode/Makefile
reactos/tools/wpp/Makefile
reactos/tools/wrc/Makefile
reactos/tools/wrc/parser.y
reactos/tools/wrc/y.tab.c

 -# $Id$
 -#
 -# Global makefile
 -#
 -
 -PATH_TO_TOP = .
 -
 -include $(PATH_TO_TOP)/rules.mak
 -include $(PATH_TO_TOP)/config
 -
 -#
 -# Define to build ReactOS external targets
 -#
 -ifeq ($(ROS_BUILD_EXT),)
 -ROS_BUILD_EXT = no
 -else
 -ROS_BUILD_EXT = yes
 -endif
 -
 -ifneq ($(MINIMALDEPENDENCIES),no)
 -IMPLIB =
 -else
 -IMPLIB = implib
 +host_gcc = gcc
 +host_gpp = g++
 +host_ld = ld
 +host_ar = ar
 +host_objcopy = objcopy
 +ifeq ($(HOST),mingw32-linux)
 +      EXEPREFIX = ./
 +      EXEPOSTFIX =
 +      SEP = /
 +      nmkdir = mkdir -p
 +      gcc = mingw32-gcc
 +      gpp = mingw32-g++
 +      ld = mingw32-ld
 +      ar = mingw32-ar
 +      objcopy = mingw32-objcopy
 +      dlltool = mingw32-dlltool
 +      windres = mingw32-windres
 +      rm = rm -f
 +      cp = cp
 +      NUL = /dev/null
 +else # mingw32-windows
 +      EXEPREFIX =
 +      EXEPOSTFIX = .exe
 +      SEP = \$(EMPTY_VAR)
 +      nmkdir = mkdir
 +      gcc = gcc
 +      gpp = g++
 +      ld = ld
 +      ar = ar
 +      objcopy = objcopy
 +      dlltool = dlltool
 +      windres = windres
 +      rm = del /f /q
 +      cp = copy /y
 +      NUL = NUL
  endif
  
 -# Boot loaders
 -BOOT_LOADERS = freeldr
 -
 -# Required to run the system
 -COMPONENTS = ntoskrnl
 -
 -# Hardware Abstraction Layers
 -# halx86
 -HALS = halx86/up halx86/mp
 -
 -# Bus drivers
 -# acpi isapnp pci
 -BUS = acpi isapnp pci
 -
 -# Filesystem libraries
 -# vfatlib
 -LIB_FSLIB = vfatlib
 -
 -# libunicode, must be empty!
 -LIBUNICODE = 
 -
 -# Static libraries
 -LIB_STATIC = string rosrtl epsapi uuid libwine zlib rtl tgetopt pseh adns dxguid strmiids crt rossym wdmguid
 -
 -# Keyboard layout libraries
 -DLLS_KBD = kbdda kbddv kbdes kbdfr kbdgr kbdse kbduk kbdus
 -
 -# Control Panels
 -DLLS_CPL = cpl
 -
 -# Shell extensions
 -DLLS_SHELLEXT = shellext
 -
 -# User mode libraries
 -# libpcap packet epsapi
 -DLLS = acledit aclui advapi32 advpack cabinet cards comctl32 crtdll comdlg32 d3d8thk dbghelp expat fmifs freetype \
 -      gdi32 gdiplus glu32 hid imagehlp imm32 iphlpapi kernel32 lzexpand mesa32 midimap mmdrv mpr msacm msafd \
 -      msgina msi msimg32 msvcrt20 msvideo mswsock netapi32 ntdll ole32 oleaut32 oledlg olepro32 opengl32 \
 -      packet psapi riched20 richedit rpcrt4 samlib secur32 setupapi shell32 shlwapi smdll snmpapi syssetup \
 -      twain user32 userenv version wininet winmm winspool ws2help ws2_32 wsock32 wshirda dnsapi \
 -      urlmon shdocvw dinput dinput8 dxdiagn devenum dsound lsasrv $(DLLS_KBD) $(DLLS_CPL) $(DLLS_SHELLEXT)
 -
 -SUBSYS = smss win32k csrss ntvdm
 -
 -#
 -# Select the server(s) you want to build
 -#
 -#SERVERS = posix linux os2
 -SERVERS = win32
 -
 -# Driver support libraries
 -#bzip2 zlib oskittcp
 -DRIVERS_LIB = bzip2 oskittcp ip csq
 +.PHONY: all
 +.PHONY: clean
  
 -# Kernel mode device drivers
 -# Obsolete: ide
 -# beep blue floppy null parallel ramdrv serenum serial
 -DEVICE_DRIVERS = beep blue debugout null serial bootvid
 +all: Makefile.auto
  
 -# Kernel mode input drivers
 -INPUT_DRIVERS = keyboard mouclass psaux sermouse
 -
 -# Kernel mode file system drivers
 -# cdfs ext2 fs_rec ms np vfat
 -FS_DRIVERS = cdfs fs_rec ms np vfat mup ntfs
 -
 -# Kernel mode networking drivers
 -# afd ndis npf tcpip tdi wshtcpip
 -NET_DRIVERS = afd ndis npf tcpip tdi wshtcpip
 -
 -# Kernel mode networking device drivers
 -# ne2000 pcnet
 -NET_DEVICE_DRIVERS = ne2000 pcnet
 -
 -# Kernel mode storage drivers
 -# atapi cdrom class2 disk scsiport
 -STORAGE_DRIVERS = atapi cdrom class2 disk floppy scsiport diskdump
 -
 -# System applications
 -# autochk cmd format services setup usetup welcome winlogon msiexec 
 -SYS_APPS = autochk calc cmd explorer expand format ibrowser msiexec regsvr32 \
 -  reporterror services setup taskmgr userinit usetup welcome vmwinst rundll32 \
 -  winlogon regedit winefile notepad reactos lsass
 -
 -# System services
 -SYS_SVC = rpcss eventlog umpnpmgr
 -
 -APPS = testsets utils
 -
 -
 -# External modules and (sub)systems for ReactOS
 -# rosapps posix os2 (requires c++) java (non-existant)
 -EXTERNALS = rosapps
 -
 -ifeq ($(ROS_BUILD_EXT),yes)
 -EXT_MODULES = $(EXTERNALS)
 -else
 -EXT_MODULES =
 +ifneq ($(ROS_INTERMEDIATE),)
 +$(ROS_INTERMEDIATE)tools: $(ROS_INTERMEDIATE)
 +      ${nmkdir} $(ROS_INTERMEDIATE)tools
  endif
  
 -KERNEL_DRIVERS = $(DRIVERS_LIB) $(DEVICE_DRIVERS) $(INPUT_DRIVERS) $(FS_DRIVERS) \
 -      $(NET_DRIVERS) $(NET_DEVICE_DRIVERS) $(STORAGE_DRIVERS) VIDEO_DRIVERS USB_DRIVERS
 -
 -# Regression tests
 -REGTESTS = regtests
 -
 -all: bootstrap $(BOOT_LOADERS) $(COMPONENTS) $(REGTESTS) $(HALS) $(BUS) $(LIB_FSLIB) \
 -     $(DLLS) $(SUBSYS) $(KERNEL_DRIVERS) $(SYS_APPS) $(SYS_SVC) $(APPS) $(EXT_MODULES)
 -
 -bootstrap: dk implib iface_native
 -
 -depends: $(LIB_STATIC:%=%_depends) $(LIB_FSLIB:%=%_depends) msvcrt_depends $(DLLS:%=%_depends) \
 -         $(SUBSYS:%=%_depends) $(SYS_SVC:%=%_depends) \
 -         $(EXT_MODULES:%=%_depends) $(POSIX_LIBS:%=%_depends)
 -
 -implib: hallib $(LIB_STATIC) $(LIB_FSLIB) $(COMPONENTS:%=%_implib) $(HALS:%=%_implib) \
 -        $(BUS:%=%_implib) $(LIB_STATIC:%=%_implib) $(LIB_FSLIB:%=%_implib) \
 -        msvcrt_implib $(DLLS:%=%_implib) $(KERNEL_DRIVERS:%=%_implib) \
 -        $(SUBSYS:%=%_implib) $(SYS_APPS:%=%_implib) $(SYS_SVC:%=%_implib) \
 -        $(EXT_MODULES:%=%_implib) $(REGTESTS:%=%_implib)
 -
 -test: $(BOOT_LOADERS:%=%_test) $(COMPONENTS:%=%_test) $(HALS:%=%_test) $(BUS:%=%_test) \
 -          $(LIB_STATIC:%=%_test) $(LIB_FSLIB:%=%_test) msvcrt_test $(DLLS:%=%_test) \
 -          $(KERNEL_DRIVERS:%=%_test) $(SUBSYS:%=%_test) \
 -          $(SYS_SVC:%=%_test) $(EXT_MODULES:%=%_test)
 -
 -clean: tools dk_clean iface_native_clean hallib_clean \
 -       $(BOOT_LOADERS:%=%_clean) $(HALS:%=%_clean) $(COMPONENTS:%=%_clean) \
 -       $(BUS:%=%_clean) $(LIB_STATIC:%=%_clean) $(LIB_FSLIB:%=%_clean) \
 -       msvcrt_clean $(DLLS:%=%_clean) $(KERNEL_DRIVERS:%=%_clean) \
 -       $(SUBSYS:%=%_clean) $(SYS_APPS:%=%_clean) $(SYS_SVC:%=%_clean) \
 -       $(NET_APPS:%=%_clean) $(APPS:%=%_clean) $(EXT_MODULES:%=%_clean) \
 -       $(REGTESTS:%=%_clean) clean_after tools_clean
 -
 -clean_after:
 -      $(HALFVERBOSEECHO) [RM]      /include/roscfg.h
 -      $(RM) $(PATH_TO_TOP)/include/roscfg.h
 -
 -fastinstall: tools install_dirs install_before $(COMPONENTS:%=%_install) $(HALS:%=%_install) \
 -         $(BUS:%=%_install) $(LIB_STATIC:%=%_install) $(LIB_FSLIB:%=%_install) \
 -         msvcrt_install $(DLLS:%=%_install) $(KERNEL_DRIVERS:%=%_install) \
 -         $(SUBSYS:%=%_install) $(SYS_APPS:%=%_install) $(SYS_SVC:%=%_install) \
 -         $(APPS:%=%_install) $(EXT_MODULES:%=%_install) $(REGTESTS:%=%_install)
 -install: fastinstall registry
 -
 -FREELDR_DIR = boot/freeldr
 -
 -bootcd_directory_layout:
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(BOOTCD_DIR)
 -      $(RMKDIR) $(BOOTCD_DIR)
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(BOOTCD_DIR)/bootdisk
 -      $(RMKDIR) $(BOOTCD_DIR)/bootdisk
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(BOOTCD_DIR)/loader
 -      $(RMKDIR) $(BOOTCD_DIR)/loader
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(BOOTCD_DIR)/reactos
 -      $(RMKDIR) $(BOOTCD_DIR)/reactos
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(BOOTCD_DIR)/reactos/system32
 -      $(RMKDIR) $(BOOTCD_DIR)/reactos/system32
 -
 -bootcd_bootstrap_files: $(BOOT_LOADERS:%=%_bootcd) $(COMPONENTS:%=%_bootcd) \
 -      $(HALS:%=%_bootcd) $(BUS:%=%_bootcd) $(LIB_STATIC:%=%_bootcd) \
 -      $(LIB_FSLIB:%=%_bootcd) msvcrt_bootcd $(DLLS:%=%_bootcd) \
 -      $(KERNEL_DRIVERS:%=%_bootcd) $(SUBSYS:%=%_bootcd) $(SYS_APPS:%=%_bootcd)
 -
 -bootcd_install_before:
 -      $(HALFVERBOSEECHO) [RLINE]   bootdata/autorun.inf to $(BOOTCD_DIR)/autorun.inf
 -      $(RLINE) bootdata/autorun.inf $(BOOTCD_DIR)/autorun.inf
 -      $(HALFVERBOSEECHO) [RLINE]   bootdata/readme.txt to $(BOOTCD_DIR)/readme.txt
 -      $(RLINE) bootdata/readme.txt $(BOOTCD_DIR)/readme.txt
 -      $(HALFVERBOSEECHO) [RLINE]   bootdata/hivecls.inf to $(BOOTCD_DIR)/reactos/hivecls.inf
 -      $(RLINE) bootdata/hivecls.inf $(BOOTCD_DIR)/reactos/hivecls.inf
 -      $(HALFVERBOSEECHO) [RLINE]   bootdata/hivedef.inf to $(BOOTCD_DIR)/reactos/hivedef.inf
 -      $(RLINE) bootdata/hivedef.inf $(BOOTCD_DIR)/reactos/hivedef.inf
 -      $(HALFVERBOSEECHO) [RLINE]   bootdata/hivesft.inf to $(BOOTCD_DIR)/reactos/hivesft.inf
 -      $(RLINE) bootdata/hivesft.inf $(BOOTCD_DIR)/reactos/hivesft.inf
 -      $(HALFVERBOSEECHO) [RLINE]   bootdata/hivesys.inf to $(BOOTCD_DIR)/reactos/hivesys.inf
 -      $(RLINE) bootdata/hivesys.inf $(BOOTCD_DIR)/reactos/hivesys.inf
 -      $(HALFVERBOSEECHO) [RLINE]   bootdata/txtsetup.sif to $(BOOTCD_DIR)/reactos/txtsetup.sif
 -      $(RLINE) bootdata/txtsetup.sif $(BOOTCD_DIR)/reactos/txtsetup.sif
 -      $(HALFVERBOSEECHO) [COPY]    bootdata/icon.ico to $(BOOTCD_DIR)/icon.ico
 -      $(CP) bootdata/icon.ico $(BOOTCD_DIR)/icon.ico
 -      $(HALFVERBOSEECHO) [COPY]    subsys/system/welcome/welcome.exe  to $(BOOTCD_DIR)/reactos/welcome.exe
 -      $(CP) subsys/system/welcome/welcome.exe $(BOOTCD_DIR)/reactos/welcome.exe
 -      $(HALFVERBOSEECHO) [COPY]    subsys/system/reactos/reactos.exe  to $(BOOTCD_DIR)/reactos/reactos.exe
 -      $(CP) subsys/system/reactos/reactos.exe $(BOOTCD_DIR)/reactos/reactos.exe
 -      $(HALFVERBOSEECHO) [COPY]    media/nls/c_1252.nls to $(BOOTCD_DIR)/reactos/c_1252.nls
 -      $(CP) media/nls/c_1252.nls $(BOOTCD_DIR)/reactos/c_1252.nls
 -      $(HALFVERBOSEECHO) [COPY]    media/nls/c_437.nls to $(BOOTCD_DIR)/reactos/c_437.nls
 -      $(CP) media/nls/c_437.nls $(BOOTCD_DIR)/reactos/c_437.nls
 -      $(HALFVERBOSEECHO) [COPY]    media/nls/l_intl.nls to $(BOOTCD_DIR)/reactos/l_intl.nls
 -      $(CP) media/nls/l_intl.nls $(BOOTCD_DIR)/reactos/l_intl.nls
 -      $(HALFVERBOSEECHO) [COPY]    media/drivers/etc/services to $(BOOTCD_DIR)/reactos/services
 -      $(CP) media/drivers/etc/services $(BOOTCD_DIR)/reactos/services
 -
 -bootcd_basic: bootcd_directory_layout bootcd_bootstrap_files bootcd_install_before
 -
 -bootcd_makecd:
 -      $(CABMAN) /C bootdata/packages/reactos.dff /L $(BOOTCD_DIR)/reactos /I
 -      $(CABMAN) /C bootdata/packages/reactos.dff /RC $(BOOTCD_DIR)/reactos/reactos.inf /L $(BOOTCD_DIR)/reactos /N
 -      - $(RM) $(BOOTCD_DIR)/reactos/reactos.inf
 -      $(HALFVERBOSEECHO) [CDMAKE]  ReactOS.iso
 -      $(CDMAKE) -v -m -b $(BOOTCD_DIR)/../isoboot.bin $(BOOTCD_DIR) REACTOS ReactOS.iso
 -
 -ubootcd_unattend:
 -      $(HALFVERBOSEECHO) [COPY]    bootdata/unattend.inf to $(BOOTCD_DIR)/reactos/unattend.inf
 -      $(CP) bootdata/unattend.inf $(BOOTCD_DIR)/reactos/unattend.inf
 -
 -livecd_directory_layout:
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(LIVECD_DIR)
 -      $(RMKDIR) $(LIVECD_DIR)
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(LIVECD_DIR)/loader
 -      $(RMKDIR) $(LIVECD_DIR)/loader
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(LIVECD_DIR)/reactos
 -      $(RMKDIR) $(LIVECD_DIR)/reactos
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(LIVECD_DIR)/Profiles/All\ Users/Desktop
 -      $(RMKDIR) $(LIVECD_DIR)/Profiles/All\ Users/Desktop
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(LIVECD_DIR)/Profiles/Default\ User/Desktop
 -      $(RMKDIR) $(LIVECD_DIR)/Profiles/Default\ User/Desktop
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(LIVECD_DIR)/Profiles/Default\ User/My\ Documents
 -      $(RMKDIR) $(LIVECD_DIR)/Profiles/Default\ User/My\ Documents
 -      $(HALFVERBOSEECHO) [COPY]    ${FREELDR_DIR}/bootsect/isoboot.bin to ${LIVECD_DIR}/../isoboot.bin
 -      $(CP) ${FREELDR_DIR}/bootsect/isoboot.bin ${LIVECD_DIR}/../isoboot.bin
 -      $(HALFVERBOSEECHO) [COPY]    ${FREELDR_DIR}/freeldr/freeldr.sys to ${LIVECD_DIR}/loader/setupldr.sys
 -      $(CP) ${FREELDR_DIR}/freeldr/freeldr.sys ${LIVECD_DIR}/loader/setupldr.sys
 -      $(HALFVERBOSEECHO) [RLINE]   bootdata/livecd.ini to $(LIVECD_DIR)/freeldr.ini
 -      $(RLINE) bootdata/livecd.ini $(LIVECD_DIR)/freeldr.ini
 -
 -livecd_bootstrap_files:
 -      $(MAKE) LIVECD_INSTALL=yes fastinstall
 -
 -livecd_install_before:
 -      $(MKHIVE) bootdata $(LIVECD_DIR)/reactos/system32/config bootdata/livecd.inf bootdata/hiveinst.inf
 -
 -livecd_basic: livecd_directory_layout livecd_bootstrap_files livecd_install_before
 -
 -livecd_makecd:
 -      $(HALFVERBOSEECHO) [CDMAKE]  roslive.iso
 -      $(CDMAKE) -m -j -b $(LIVECD_DIR)/../isoboot.bin $(LIVECD_DIR) REACTOS roslive.iso
 -
 -bootcd: bootcd_basic bootcd_makecd
 -
 -ubootcd: bootcd_basic ubootcd_unattend bootcd_makecd
 -
 -livecd: livecd_basic livecd_makecd
 -
 -registry: tools
 -      $(MKHIVE) bootdata $(INSTALL_DIR)/system32/config bootdata/hiveinst.inf
 -
 -.PHONY: all bootstrap depends implib test clean clean_before install bootcd_directory_layout \
 -bootcd_bootstrap_files bootcd_install_before bootcd_basic bootcd_makecd ubootcd_unattend bootcd
 -
 -
 -#
 -# Boot Loaders
 -#
 -$(BOOT_LOADERS): %:
 -      $(MAKE) -C boot/$*
 -
 -$(BOOT_LOADERS:%=%_test): %_test:
 -      $(MAKE) -C boot/$* test
 -
 -$(BOOT_LOADERS:%=%_clean): %_clean:
 -      $(MAKE) -C boot/$* clean
 -
 -$(BOOT_LOADERS:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C boot/$* bootcd
 -
 -.PHONY: $(BOOT_LOADERS) $(BOOT_LOADERS:%=%_test) $(BOOT_LOADERS:%=%_clean) \
 -        $(BOOT_LOADERS:%=%_bootcd)
 -
 -$(COMPONENTS): dk
 -
 -#
 -# System Applications
 -#
 -$(SYS_APPS): %: $(IMPLIB)
 -      $(MAKE) -C subsys/system/$*
 -
 -$(SYS_APPS:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C subsys/system/$* implib
 -
 -$(SYS_APPS:%=%_test): %_test:
 -      $(MAKE) -C subsys/system/$* test
 -
 -$(SYS_APPS:%=%_clean): %_clean:
 -      $(MAKE) -C subsys/system/$* clean
 -
 -$(SYS_APPS:%=%_install): %_install:
 -      $(MAKE) -C subsys/system/$* install
 -
 -$(SYS_APPS:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C subsys/system/$* bootcd
 -
 -.PHONY: $(SYS_APPS) $(SYS_APPS:%=%_implib) $(SYS_APPS:%=%_test) \
 -  $(SYS_APPS:%=%_clean) $(SYS_APPS:%=%_install) $(SYS_APPS:%=%_bootcd)
 -
 -#
 -# System Services
 -#
 -$(SYS_SVC): %: $(IMPLIB)
 -      $(MAKE) -C services/$*
 -
 -$(SYS_SVC:%=%_depends): %_depends:
 -      $(MAKE) -C services/$* depends
 -
 -$(SYS_SVC:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C services/$* implib
 -
 -$(SYS_SVC:%=%_test): %_test:
 -      $(MAKE) -C services/$* test
 -
 -$(SYS_SVC:%=%_clean): %_clean:
 -      $(MAKE) -C services/$* clean
 -
 -$(SYS_SVC:%=%_install): %_install:
 -      $(MAKE) -C services/$* install
 -
 -.PHONY: $(SYS_SVC) $(SYS_SVC:%=%_depends) $(SYS_SVC:%=%_implib) \
 -  $(SYS_SVC:%=%_test) $(SYS_SVC:%=%_clean) $(SYS_SVC:%=%_install)
 -
 -
 -#
 -# Applications
 -#
 -#
 -# Extra (optional system) Applications
 -#
 -$(APPS): %: $(IMPLIB)
 -      $(MAKE) -C apps/$*
 -
 -# Not needed
 -# $(APPS:%=%_implib): %_implib: dk
 -#     $(MAKE) --silent -C apps/$* implib
 -
 -$(APPS:%=%_test): %_test:
 -      $(MAKE) -C apps/$* test
 -
 -$(APPS:%=%_clean): %_clean:
 -      $(MAKE) -C apps/$* clean
 -
 -$(APPS:%=%_install): %_install:
 -      $(MAKE) -C apps/$* install
 -
 -.PHONY: $(APPS) $(APPS:%=%_test) $(APPS:%=%_clean) $(APPS:%=%_install)
 -
 -
 -#
 -# External ports and subsystem personalities
 -#
 -$(EXTERNALS): %:
 -      $(MAKE) -C $(ROOT_PATH)/$*
 -
 -$(EXTERNALS:%=%_depends): %_depends:
 -      $(MAKE) -C $(ROOT_PATH)/$* depends
 -
 -$(EXTERNALS:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C $(ROOT_PATH)/$* implib
 -
 -$(EXTERNALS:%=%_clean): %_clean:
 -      $(MAKE) -C $(ROOT_PATH)/$* clean
 -
 -$(EXTERNALS:%=%_install): %_install:
 -      $(MAKE) -C $(ROOT_PATH)/$* install
 -
 -.PHONY: $(EXTERNALS) $(EXTERNALS:%=%_depends) $(EXTERNALS:%=%_implib) $(EXTERNALS:%=%_clean) $(EXTERNALS:%=%_install)
 -
 -
 -#
 -# Tools
 -#
 -tools:
 -      $(MAKE) --silent -C tools
 -
 -tools_implib:
 -      
 -
 -tools_test:
 -      
 -
 -tools_clean:
 -      $(MAKE) -C tools clean
 -
 -tools_install:
 -
 -.PHONY: tools tools_implib tools_test tools_clean tools_install
 -
 -
 -#
 -# Developer Kits
 -#
 -dk: tools
 -      @$(RMKDIR) $(DK_PATH)
 -      @$(RMKDIR) $(DDK_PATH)
 -      @$(RMKDIR) $(DDK_PATH_LIB)
 -      @$(RMKDIR) $(DDK_PATH_INC)
 -      @$(RMKDIR) $(SDK_PATH)
 -      @$(RMKDIR) $(SDK_PATH_LIB)
 -      @$(RMKDIR) $(SDK_PATH_INC)
 -      @$(RMKDIR) $(XDK_PATH)
 -      @$(RMKDIR) $(XDK_PATH_LIB)
 -#     @$(RMKDIR) $(XDK_PATH_INC)
 -
 -dk_implib:
 -
 -# WARNING! Be very sure that there are no important files
 -#          in these directories before cleaning them!!!
 -dk_clean:
 -      $(HALFVERBOSEECHO) [RM]      $(DDK_PATH_LIB)/*.a
 -      $(RM) $(DDK_PATH_LIB)/*.a
 -#     $(HALFVERBOSEECHO) [RM]      $(DDK_PATH_INC)/*.h
 -#     $(RM) $(DDK_PATH_INC)/*.h
 -      $(HALFVERBOSEECHO) [RMDIR]   $(DDK_PATH_LIB)
 -      $(RMDIR) $(DDK_PATH_LIB)
 -#     $(HALFVERBOSEECHO) [RMDIR]   $(DDK_PATH_INC)
 -#     $(RMDIR) $(DDK_PATH_INC)
 -      $(HALFVERBOSEECHO) [RM]      $(SDK_PATH_LIB)/*.a
 -      $(RM) $(SDK_PATH_LIB)/*.a
 -#     $(HALFVERBOSEECHO) [RM]      $(SDK_PATH_INC)/*.h
 -#     $(RM) $(SDK_PATH_INC)/*.h
 -      $(HALFVERBOSEECHO) [RMDIR]   $(SDK_PATH_LIB)
 -      $(RMDIR) $(SDK_PATH_LIB)
 -#     $(HALFVERBOSEECHO) [RMDIR]   $(SDK_PATH_INC)
 -#     $(RMDIR) $(SDK_PATH_INC)
 -      $(HALFVERBOSEECHO) [RM]      $(XDK_PATH_LIB)/*.a
 -      $(RM) $(XDK_PATH_LIB)/*.a
 -#     $(HALFVERBOSEECHO) [RM]      $(XDK_PATH_INC)/*.h
 -#     $(RM) $(XDK_PATH_INC)/*.h
 -      $(HALFVERBOSEECHO) [RMDIR]   $(XDK_PATH_LIB)
 -      $(RMDIR) $(XDK_PATH_LIB)
 -#     $(HALFVERBOSEECHO) [RMDIR]   $(XDK_PATH_INC)
 -#     $(RMDIR) $(XDK_PATH_INC)
 -
 -dk_install:
 -
 -.PHONY: dk dk_implib dk_clean dk_install
 -
 -
 -#
 -# Interfaces
 -#
 -iface_native:
 -      $(MAKE) --silent -C tools/nci
 -
 -iface_native_implib:
 -      
 -iface_native_test:
 -      
 -iface_native_clean:
 -      $(MAKE) --silent -C tools/nci clean
 -
 -iface_native_install:
 -
 -iface_native_bootcd:
 -
 -.PHONY: iface_native iface_native_implib iface_native_test iface_native_clean \
 -        iface_native_install iface_native_bootcd
 -
 -
 -#
 -# Bus driver rules
 -#
 -$(BUS): %: $(IMPLIB)
 -      $(MAKE) -C drivers/bus/$*
 -
 -$(BUS:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C drivers/bus/$* implib
 -
 -$(BUS:%=%_test): %_test:
 -      $(MAKE) -C drivers/bus/$* test
 -
 -$(BUS:%=%_clean): %_clean:
 -      $(MAKE) -C drivers/bus/$* clean
 -
 -$(BUS:%=%_install): %_install:
 -      $(MAKE) -C drivers/bus/$* install
 -
 -$(BUS:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C drivers/bus/$* bootcd
 -
 -.PHONY: $(BUS) $(BUS:%=%_implib) $(BUS:%=%_clean) \
 -        $(BUS:%=%_install) $(BUS:%=%_bootcd)
 -
 -
 -#
 -# Driver support libraries rules
 -#
 -$(DRIVERS_LIB): %: $(IMPLIB)
 -      $(MAKE) -C drivers/lib/$*
 -
 -$(DRIVERS_LIB:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C drivers/lib/$* implib
 -
 -$(DRIVERS_LIB:%=%_test): %_test:
 -      $(MAKE) -C drivers/lib/$* test
 -
 -$(DRIVERS_LIB:%=%_clean): %_clean:
 -      $(MAKE) -C drivers/lib/$* clean
 -
 -$(DRIVERS_LIB:%=%_install): %_install:
 -      $(MAKE) -C drivers/lib/$* install
 -
 -$(DRIVERS_LIB:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C drivers/lib/$* bootcd
 -
 -.PHONY: $(DRIVERS_LIB) $(DRIVERS_LIB:%=%_implib) $(DRIVERS_LIB:%=%_test) \
 -        $(DRIVERS_LIB:%=%_clean) $(DRIVERS_LIB:%=%_install) $(DRIVERS_LIB:%=%_bootcd)
 -
 -
 -#
 -# Device driver rules
 -#
 -$(DEVICE_DRIVERS): %: $(IMPLIB)
 -      $(MAKE) -C drivers/dd/$*
 -
 -$(DEVICE_DRIVERS:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C drivers/dd/$* implib
 -
 -$(DEVICE_DRIVERS:%=%_test): %_test:
 -      $(MAKE) -C drivers/dd/$* test
 -
 -$(DEVICE_DRIVERS:%=%_clean): %_clean:
 -      $(MAKE) -C drivers/dd/$* clean
 -
 -$(DEVICE_DRIVERS:%=%_install): %_install:
 -      $(MAKE) -C drivers/dd/$* install
 -
 -$(DEVICE_DRIVERS:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C drivers/dd/$* bootcd
 -
 -.PHONY: $(DEVICE_DRIVERS) $(DEVICE_DRIVERS:%=%_implib) $(DEVICE_DRIVERS:%=%_test) \
 -        $(DEVICE_DRIVERS:%=%_clean) $(DEVICE_DRIVERS:%=%_install) $(DEVICE_DRIVERS:%=%_bootcd)
 -
 -
 -#
 -# Video device driver rules
 -#
 -VIDEO_DRIVERS: $(IMPLIB)
 -      $(MAKE) -C drivers/video
 -
 -VIDEO_DRIVERS_implib: dk
 -      $(MAKE) --silent -C drivers/video implib
 -
 -VIDEO_DRIVERS_test:
 -      $(MAKE) -C drivers/video test
 -
 -VIDEO_DRIVERS_clean:
 -      $(MAKE) -C drivers/video clean
 -
 -VIDEO_DRIVERS_install:
 -      $(MAKE) -C drivers/video install
 -
 -VIDEO_DRIVERS_bootcd:
 -      $(MAKE) -C drivers/video bootcd
 -
 -.PHONY: VIDEO_DRIVERS VIDEO_DRIVERS_implib VIDEO_DRIVERS_test\
 -        VIDEO_DRIVERS_clean VIDEO_DRIVERS_install VIDEO_DRIVERS_bootcd
 -
 -#
 -# USB device driver rules
 -#
 -USB_DRIVERS: $(IMPLIB)
 -      $(MAKE) -C drivers/usb
 -
 -USB_DRIVERS_implib: dk
 -      $(MAKE) --silent -C drivers/usb implib
 -
 -USB_DRIVERS_test:
 -      $(MAKE) -C drivers/usb test
 -
 -USB_DRIVERS_clean:
 -      $(MAKE) -C drivers/usb clean
 -
 -USB_DRIVERS_install:
 -      $(MAKE) -C drivers/usb install
 -
 -USB_DRIVERS_bootcd:
 -      $(MAKE) -C drivers/usb bootcd
 -
 -.PHONY: USB_DRIVERS USB_DRIVERS_implib USB_DRIVERS_test\
 -        USB_DRIVERS_clean USB_DRIVERS_install USB_DRIVERS_bootcd
 -
 -
 -#
 -# Input driver rules
 -#
 -$(INPUT_DRIVERS): %: $(IMPLIB)
 -      $(MAKE) -C drivers/input/$*
 -
 -$(INPUT_DRIVERS:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C drivers/input/$* implib
 -
 -$(INPUT_DRIVERS:%=%_test): %_test:
 -      $(MAKE) -C drivers/input/$* test
 -
 -$(INPUT_DRIVERS:%=%_clean): %_clean:
 -      $(MAKE) -C drivers/input/$* clean
 -
 -$(INPUT_DRIVERS:%=%_install): %_install:
 -      $(MAKE) -C drivers/input/$* install
 -
 -$(INPUT_DRIVERS:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C drivers/input/$* bootcd
 -
 -.PHONY: $(INPUT_DRIVERS) $(INPUT_DRIVERS:%=%_implib) $(INPUT_DRIVERS:%=%_test) \
 -        $(INPUT_DRIVERS:%=%_clean) $(INPUT_DRIVERS:%=%_install) $(INPUT_DRIVERS:%=%_bootcd)
 -
 -#
 -# Filesystem driver rules
 -#
 -$(FS_DRIVERS): %: $(IMPLIB)
 -      $(MAKE) -C drivers/fs/$*
 -
 -$(FS_DRIVERS:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C drivers/fs/$* implib
 -
 -$(FS_DRIVERS:%=%_test): %_test:
 -      $(MAKE) -C drivers/fs/$* test
 -
 -$(FS_DRIVERS:%=%_clean): %_clean:
 -      $(MAKE) -C drivers/fs/$* clean
 -
 -$(FS_DRIVERS:%=%_install): %_install:
 -      $(MAKE) -C drivers/fs/$* install
 -
 -$(FS_DRIVERS:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C drivers/fs/$* bootcd
 -
 -.PHONY: $(FS_DRIVERS) $(FS_DRIVERS:%=%_implib) $(FS_DRIVERS:%=%_test) \
 -        $(FS_DRIVERS:%=%_clean) $(FS_DRIVERS:%=%_install) $(FS_DRIVERS:%=%_bootcd)
 -
 -
 -#
 -# Network driver rules
 -#
 -$(NET_DRIVERS): %: $(IMPLIB)
 -      $(MAKE) -C drivers/net/$*
 -
 -$(NET_DRIVERS:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C drivers/net/$* implib
 -
 -$(NET_DRIVERS:%=%_test): %_test:
 -      $(MAKE) -C drivers/net/$* test
 -
 -$(NET_DRIVERS:%=%_clean): %_clean:
 -      $(MAKE) -C drivers/net/$* clean
 -
 -$(NET_DRIVERS:%=%_install): %_install:
 -      $(MAKE) -C drivers/net/$* install
 -
 -$(NET_DRIVERS:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C drivers/net/$* bootcd
 -
 -.PHONY: $(NET_DRIVERS) $(NET_DRIVERS:%=%_implib) $(NET_DRIVERS:%=%_test) \
 -        $(NET_DRIVERS:%=%_clean) $(NET_DRIVERS:%=%_install) $(NET_DRIVERS:%=%_bootcd)
 -
 -
 -#
 -# Network device driver rules
 -#
 -$(NET_DEVICE_DRIVERS): %: $(IMPLIB)
 -      $(MAKE) -C drivers/net/dd/$*
 -
 -$(NET_DEVICE_DRIVERS:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C drivers/net/dd/$* implib
 -
 -$(NET_DEVICE_DRIVERS:%=%_test): %_test:
 -      $(MAKE) -C drivers/net/dd/$* test
 -
 -$(NET_DEVICE_DRIVERS:%=%_clean): %_clean:
 -      $(MAKE) -C drivers/net/dd/$* clean
 -
 -$(NET_DEVICE_DRIVERS:%=%_install): %_install:
 -      $(MAKE) -C drivers/net/dd/$* install
 -
 -$(NET_DEVICE_DRIVERS:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C drivers/net/dd/$* bootcd
 -
 -.PHONY: $(NET_DEVICE_DRIVERS) $(NET_DEVICE_DRIVERS:%=%_clean) \
 -        $(NET_DEVICE_DRIVERS:%=%_implib) $(NET_DEVICE_DRIVERS:%=%_test) \
 -        $(NET_DEVICE_DRIVERS:%=%_install) $(NET_DEVICE_DRIVERS:%=%_bootcd)
 -
 -
 -#
 -# storage driver rules
 -#
 -$(STORAGE_DRIVERS): %: $(IMPLIB)
 -      $(MAKE) -C drivers/storage/$*
 -
 -$(STORAGE_DRIVERS:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C drivers/storage/$* implib
 -
 -$(STORAGE_DRIVERS:%=%_test): %_test:
 -      $(MAKE) -C drivers/storage/$* test
 -
 -$(STORAGE_DRIVERS:%=%_clean): %_clean:
 -      $(MAKE) -C drivers/storage/$* clean
 -
 -$(STORAGE_DRIVERS:%=%_install): %_install:
 -      $(MAKE) -C drivers/storage/$* install
 -
 -$(STORAGE_DRIVERS:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C drivers/storage/$* bootcd
 -
 -.PHONY: $(STORAGE_DRIVERS) $(STORAGE_DRIVERS:%=%_clean) \
 -        $(STORAGE_DRIVERS:%=%_implib) $(STORAGE_DRIVERS:%=%_test) \
 -        $(STORAGE_DRIVERS:%=%_install) $(STORAGE_DRIVERS:%=%_bootcd)
 -
 -
 -#
 -# Required system components
 -#
 -ntoskrnl: bootstrap
 -      $(MAKE) -C ntoskrnl
 -
 -ntoskrnl_implib: dk
 -      $(MAKE) --silent -C ntoskrnl implib
 -
 -ntoskrnl_test:
 -      $(MAKE) -C ntoskrnl test
 -
 -ntoskrnl_clean:
 -      $(MAKE) -C ntoskrnl clean
 -
 -ntoskrnl_install:
 -      $(MAKE) -C ntoskrnl install
 -
 -ntoskrnl_bootcd:
 -      $(MAKE) -C ntoskrnl bootcd
 -
 -.PHONY: ntoskrnl ntoskrnl_implib ntoskrnl_test \
 -        ntoskrnl_clean ntoskrnl_install ntoskrnl_bootcd
 -
 -
 -#
 -# Hardware Abstraction Layer import library
 -#
 -hallib: $(PATH_TO_TOP)/include/roscfg.h ntoskrnl_implib
 -      $(MAKE) --silent -C hal/hal
 -
 -hallib_implib: dk ntoskrnl_implib
 -      $(MAKE) --silent -C hal/hal implib
 -
 -hallib_test:
 -      $(MAKE) -C hal/hal test
 -
 -hallib_clean:
 -      $(MAKE) -C hal/hal clean
 -
 -hallib_install:
 -      $(MAKE) -C hal/hal install
 -
 -hallib_bootcd:
 -      $(MAKE) -C hal/hal bootcd
 -
 -.PHONY: hallib hallib_implib hallib_test hallib_clean \
 -        hallib_install hallib_bootcd
 -
 -
 -#
 -# Hardware Abstraction Layers
 -#
 -ifeq ($(CONFIG_SMP),1)
 -halx86: halx86/mp
 -else
 -halx86: halx86/up
 +ifneq ($(ROS_INTERMEDIATE),)
 +$(ROS_INTERMEDIATE):
 +      ${nmkdir} $(ROS_INTERMEDIATE)
  endif
  
 -$(HALS): %: $(IMPLIB)
 -      $(MAKE) -C hal/$*
 -
 -$(HALS:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C hal/$* implib
 -
 -$(HALS:%=%_test): %_test:
 -      $(MAKE) -C hal/$* test
 -
 -$(HALS:%=%_clean): %_clean:
 -      $(MAKE) -C hal/$* clean
 -
 -$(HALS:%=%_install): %_install:
 -      $(MAKE) -C hal/$* install
 -
 -$(HALS:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C hal/$* bootcd
 -
 -.PHONY: $(HALS) $(HALS:%=%_implib) $(HALS:%=%_test) \
 -        $(HALS:%=%_clean) $(HALS:%=%_install) $(HALS:%=%_bootcd)
 -
 -
 -#
 -# File system libraries
 -#
 -$(LIB_FSLIB): %: dk
 -      $(MAKE) -C lib/fslib/$*
 -
 -$(LIB_FSLIB:%=%_depends): %_depends:
 -      $(MAKE) -C lib/fslib/$* depends
 -
 -$(LIB_FSLIB:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C lib/fslib/$* implib
 -
 -$(LIB_FSLIB:%=%_test): %_test:
 -      $(MAKE) -C lib/fslib/$* test
 -
 -$(LIB_FSLIB:%=%_clean): %_clean:
 -      $(MAKE) -C lib/fslib/$* clean
 -
 -$(LIB_FSLIB:%=%_install): %_install:
 -      $(MAKE) -C lib/fslib/$* install
 -
 -$(LIB_FSLIB:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C lib/fslib/$* bootcd
 -
 -.PHONY: $(LIB_FSLIB) $(LIB_FSLIB:%=%_depends) $(LIB_FSLIB:%=%_implib) \
 -        $(LIB_FSLIB:%=%_test) $(LIB_FSLIB:%=%_clean) \
 -        $(LIB_FSLIB:%=%_install) $(LIB_FSLIB:%=%_bootcd)
 -
 -
 -#
 -# Static libraries
 -#
 -$(LIB_STATIC): %: dk
 -      $(MAKE) --silent -C lib/$*
 -
 -$(LIB_STATIC:%=%_depends): %_depends:
 -      $(MAKE) -C lib/string depends
 -
 -$(LIB_STATIC:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C lib/$* implib
 -
 -$(LIB_STATIC:%=%_test): %_test:
 -      $(MAKE) -C lib/$* test
 -
 -$(LIB_STATIC:%=%_clean): %_clean:
 -      $(MAKE) -C lib/$* clean
 -
 -$(LIB_STATIC:%=%_install): %_install:
 -      $(MAKE) -C lib/$* install
 -
 -$(LIB_STATIC:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C lib/$* bootcd
 -
 -.PHONY: $(LIB_STATIC) $(LIB_STATIC:%=%_depends) $(LIB_STATIC:%=%_implib) \
 -        $(LIB_STATIC:%=%_test) $(LIB_STATIC:%=%_clean) \
 -        $(LIB_STATIC:%=%_install) $(LIB_STATIC:%=%_bootcd)
 -
 -
 -#
 -# MSVCRT is seperate since CRTDLL depend on this
 -#
 -msvcrt: $(IMPLIB)
 -      $(MAKE) -C lib/msvcrt
 -
 -msvcrt_depends:
 -      $(MAKE) -C lib/msvcrt depends
 -
 -msvcrt_implib: dk
 -      $(MAKE) --silent -C lib/msvcrt implib
 -
 -msvcrt_test:
 -      $(MAKE) -C lib/msvcrt test
 -
 -msvcrt_clean:
 -      $(MAKE) -C lib/msvcrt clean
 -
 -msvcrt_install:
 -      $(MAKE) -C lib/msvcrt install
 -
 -msvcrt_bootcd:
 -      $(MAKE) -C lib/msvcrt bootcd
 -
 -.PHONY: msvcrt msvcrt_depends msvcrt_implib msvcrt_test \
 -        msvcrt_clean msvcrt_install msvcrt_bootcd
 -
 -
 -#
 -# DLLs
 -#
 -$(DLLS): %: $(IMPLIB) msvcrt
 -      $(MAKE) -C lib/$*
 -
 -$(DLLS:%=%_depends): %_depends:
 -      $(MAKE) -C lib/$* depends
 -
 -$(DLLS:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C lib/$* implib
 -
 -$(DLLS:%=%_test): %_test:
 -      $(MAKE) -C lib/$* test
 -
 -$(DLLS:%=%_clean): %_clean:
 -      $(MAKE) -C lib/$* clean
 -
 -$(DLLS:%=%_install): %_install:
 -      $(MAKE) -C lib/$* install
 -
 -$(DLLS:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C lib/$* bootcd
 -
 -.PHONY: $(DLLS) $(DLLS:%=%_depends) $(DLLS:%=%_implib) $(DLLS:%=%_test) \
 -        $(DLLS:%=%_clean) $(DLLS:%=%_install) $(DLLS:%=%_bootcd)
 -
 -
 -#
 -# Subsystem support modules
 -#
 -$(SUBSYS): %: $(IMPLIB)
 -      $(MAKE) -C subsys/$*
 -
 -$(SUBSYS:%=%_depends): %_depends:
 -      $(MAKE) -C subsys/$* depends
 -
 -$(SUBSYS:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C subsys/$* implib
 -
 -$(SUBSYS:%=%_test): %_test:
 -      $(MAKE) -C subsys/$* test
 -
 -$(SUBSYS:%=%_clean): %_clean:
 -      $(MAKE) -C subsys/$* clean
 -
 -$(SUBSYS:%=%_install): %_install:
 -      $(MAKE) -C subsys/$* install
 -
 -$(SUBSYS:%=%_bootcd): %_bootcd:
 -      $(MAKE) -C subsys/$* bootcd
 -
 -.PHONY: $(SUBSYS) $(SUBSYS:%=%_depends) $(SUBSYS:%=%_implib) $(SUBSYS:%=%_test) \
 -        $(SUBSYS:%=%_clean) $(SUBSYS:%=%_install) $(SUBSYS:%=%_bootcd)
 -
 -#
 -# Regression testsuite
 -#
 -
 -$(REGTESTS): %: $(IMPLIB)
 -      $(MAKE) --silent -C regtests
 -
 -$(REGTESTS:%=%_implib): %_implib: dk
 -      $(MAKE) --silent -C regtests implib
 -
 -$(REGTESTS:%=%_clean): %_clean:
 -      $(MAKE) -C regtests clean
 -
 -$(REGTESTS:%=%_install): %_install:
 -      $(MAKE) -C regtests install
 -
 -.PHONY: $(REGTESTS) $(REGTESTS:%=%_depends) $(SUBSYS:%=%_clean) $(REGTESTS:%=%_install)
 -
 -
 -#
 -# Create an installation
 -#
 -
 -install_clean:
 -      $(HALFVERBOSEECHO) [RM]      $(INSTALL_DIR)/system32/drivers/*.*
 -      $(RM) $(INSTALL_DIR)/system32/drivers/*.*
 -      $(HALFVERBOSEECHO) [RM]      $(INSTALL_DIR)/system32/config/*.*
 -      $(RM) $(INSTALL_DIR)/system32/config/*.*
 -      $(HALFVERBOSEECHO) [RM]      $(INSTALL_DIR)/system32/*.*
 -      $(RM) $(INSTALL_DIR)/system32/*.*
 -      $(HALFVERBOSEECHO) [RM]      $(INSTALL_DIR)/media/fonts/*.*
 -      $(RM) $(INSTALL_DIR)/media/fonts/*.*
 -      $(HALFVERBOSEECHO) [RM]      $(INSTALL_DIR)/media/*.*
 -      $(RM) $(INSTALL_DIR)/media/*.*
 -      $(HALFVERBOSEECHO) [RM]      $(INSTALL_DIR)/inf/*.*
 -      $(RM) $(INSTALL_DIR)/inf/*.*
 -      $(HALFVERBOSEECHO) [RM]      $(INSTALL_DIR)/bin/*.*
 -      $(RM) $(INSTALL_DIR)/bin/*.*
 -      $(HALFVERBOSEECHO) [RMDIR]   $(INSTALL_DIR)/system32/drivers
 -      $(RMDIR) $(INSTALL_DIR)/system32/drivers
 -      $(HALFVERBOSEECHO) [RMDIR]   $(INSTALL_DIR)/system32/config
 -      $(RMDIR) $(INSTALL_DIR)/system32/config
 -      $(HALFVERBOSEECHO) [RMDIR]   $(INSTALL_DIR)/system32
 -      $(RMDIR) $(INSTALL_DIR)/system32
 -      $(HALFVERBOSEECHO) [RMDIR]   $(INSTALL_DIR)/media/fonts
 -      $(RMDIR) $(INSTALL_DIR)/media/fonts
 -      $(HALFVERBOSEECHO) [RMDIR]   $(INSTALL_DIR)/media
 -      $(RMDIR) $(INSTALL_DIR)/media
 -      $(HALFVERBOSEECHO) [RMDIR]   $(INSTALL_DIR)/inf
 -      $(RMDIR) $(INSTALL_DIR)/inf
 -      $(HALFVERBOSEECHO) [RMDIR]   $(INSTALL_DIR)/bin
 -      $(RMDIR) $(INSTALL_DIR)/bin
 -      $(HALFVERBOSEECHO) [RMDIR]   $(INSTALL_DIR)
 -      $(RMDIR) $(INSTALL_DIR)
 -
 -install_dirs:
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(INSTALL_DIR)
 -      $(RMKDIR) $(INSTALL_DIR)
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(INSTALL_DIR)/bin
 -      $(RMKDIR) $(INSTALL_DIR)/bin
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(INSTALL_DIR)/inf
 -      $(RMKDIR) $(INSTALL_DIR)/inf
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(INSTALL_DIR)/media
 -      $(RMKDIR) $(INSTALL_DIR)/media
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(INSTALL_DIR)/media/fonts
 -      $(RMKDIR) $(INSTALL_DIR)/media/fonts
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(INSTALL_DIR)/system32
 -      $(RMKDIR) $(INSTALL_DIR)/system32
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(INSTALL_DIR)/system32/config
 -      $(RMKDIR) $(INSTALL_DIR)/system32/config
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(INSTALL_DIR)/system32/drivers
 -      $(RMKDIR) $(INSTALL_DIR)/system32/drivers
 -      $(HALFVERBOSEECHO) [RMKDIR]  $(INSTALL_DIR)/system32/drivers/etc
 -      $(RMKDIR) $(INSTALL_DIR)/system32/drivers/etc
 -
 -install_before:
 -      $(HALFVERBOSEECHO) [INSTALL] media/inf to $(INSTALL_DIR)/inf
 -      $(CP) media/inf $(INSTALL_DIR)/inf
 -      $(HALFVERBOSEECHO) [INSTALL] media/fonts to $(INSTALL_DIR)/media/fonts
 -      $(CP) media/fonts $(INSTALL_DIR)/media/fonts
 -      $(HALFVERBOSEECHO) [INSTALL] media/nls to $(INSTALL_DIR)/system32
 -      $(CP) media/nls $(INSTALL_DIR)/system32
 -      $(HALFVERBOSEECHO) [INSTALL] media/nls/c_1252.nls to $(INSTALL_DIR)/system32/ansi.nls
 -      $(CP) media/nls/c_1252.nls $(INSTALL_DIR)/system32/ansi.nls
 -      $(HALFVERBOSEECHO) [INSTALL] media/nls/c_437.nls to $(INSTALL_DIR)/system32/oem.nls
 -      $(CP) media/nls/c_437.nls $(INSTALL_DIR)/system32/oem.nls
 -      $(HALFVERBOSEECHO) [INSTALL] media/nls/l_intl.nls to $(INSTALL_DIR)/system32/casemap.nls
 -      $(CP) media/nls/l_intl.nls $(INSTALL_DIR)/system32/casemap.nls
 -      $(HALFVERBOSEECHO) [INSTALL] media/drivers/etc/services to $(INSTALL_DIR)/system32/drivers/etc/services
 -      $(CP) media/drivers/etc/services $(INSTALL_DIR)/system32/drivers/etc/services
 -
 -.PHONY: install_clean install_dirs install_before
 -
 -
 -etags:
 -      find . -name "*.[ch]" -print | etags --language=c -
 -
 -
 -docu:
 -      echo generating ReactOS NTOSKRNL documentation ...
 -      $(MAKE) -C ntoskrnl docu
 -
 -      echo generating ReactOS drivers documentation ...
 -      $(MAKE) -C drivers docu
 -
 -      echo generating ReactOS NTDLL documentation ...
 -      $(MAKE) -C lib/ntdll docu
 -
 -      echo generating ReactOS Freetype documentation ...
 -      $(MAKE) -C lib/freetype docu
 -
 -      echo generating ReactOS libs documentation ...
 -      $(MAKE) -C lib docu
 +include tools/Makefile
 +-include Makefile.auto
  
 -      echo generating ReactOS WIN32K documentation ...
 -      $(MAKE) -C subsys/win32k docu
 +PREAUTO := \
 +      include$(SEP)reactos$(SEP)buildno.h \
 +      include$(SEP)reactos$(SEP)bugcodes.h \
 +      ntoskrnl$(SEP)bugcodes.rc \
 +      include$(SEP)reactos$(SEP)errcodes.h \
 +      lib$(SEP)kernel32$(SEP)errcodes.rc
  
- Makefile.auto: $(RMKDIR_TARGET) $(BUILDNO_TARGET) $(NCI_SERVICE_FILES) $(WMC_TARGET) $(CDMAKE_TARGET) $(RBUILD_TARGET) $(PREAUTO)
 -      echo generating ReactOS apps+tools documentation ...
 -      $(MAKE) -C apps docu
++Makefile.auto: $(RMKDIR_TARGET) $(BUILDNO_TARGET) $(NCI_SERVICE_FILES) $(WMC_TARGET) $(WRC_TARGET) \
++               $(CDMAKE_TARGET) $(RBUILD_TARGET) $(PREAUTO)
 +      tools$(SEP)rbuild$(SEP)rbuild$(EXEPOSTFIX) mingw
 +#     $(MAKE) $(MAKECMDGOALS)
  
 -      echo generating ReactOS explorer documentation ...
 -      $(MAKE) -C subsys/system/explorer full-docu
  
 -      echo generating remaining ReactOS documentation ...
 -      doxygen Doxyfile
 +include$(SEP)reactos$(SEP)bugcodes.h ntoskrnl$(SEP)bugcodes.rc: $(WMC_TARGET) ntoskrnl$(SEP)ntoskrnl.mc
 +      $(WMC_TARGET) -H include$(SEP)reactos$(SEP)bugcodes.h -o ntoskrnl$(SEP)bugcodes.rc ntoskrnl$(SEP)ntoskrnl.mc
  
 -.PHONY: docu
 +include$(SEP)reactos$(SEP)errcodes.h lib$(SEP)kernel32$(SEP)errcodes.rc: $(WMC_TARGET) lib$(SEP)kernel32$(SEP)kernel32.mc
 +      $(WMC_TARGET) -H include$(SEP)reactos$(SEP)errcodes.h -o lib$(SEP)kernel32$(SEP)errcodes.rc lib$(SEP)kernel32$(SEP)kernel32.mc
  
 -include $(TOOLS_PATH)/config.mk
 +.PHONY: makefile_auto_clean
 +makefile_auto_clean:
 +      -@$(rm) Makefile.auto $(PREAUTO) 2>$(NUL)
 +clean: makefile_auto_clean
Simple merge
@@@ -48,17 -48,17 +48,18 @@@ static PNPFS_FC
  NpfsFindListeningServerInstance(PNPFS_PIPE Pipe)
  {
    PLIST_ENTRY CurrentEntry;
--  PNPFS_FCB ServerFcb;
++  PNPFS_WAITER_ENTRY Waiter;
  
--  CurrentEntry = Pipe->ServerFcbListHead.Flink;
--  while (CurrentEntry != &Pipe->ServerFcbListHead)
++  CurrentEntry = Pipe->WaiterListHead.Flink;
++  while (CurrentEntry != &Pipe->WaiterListHead)
      {
--      ServerFcb = CONTAINING_RECORD(CurrentEntry, NPFS_FCB, FcbListEntry);
--      if (ServerFcb->PipeState == FILE_PIPE_LISTENING_STATE)
++      Waiter = CONTAINING_RECORD(CurrentEntry, NPFS_WAITER_ENTRY, Entry);
++      if (Waiter->Fcb->PipeState == FILE_PIPE_LISTENING_STATE)
        {
--        DPRINT("Server found! Fcb %p\n", ServerFcb);
--        return ServerFcb;
++        DPRINT("Server found! Fcb %p\n", Waiter->Fcb);
++        return Waiter->Fcb;
        }
++
        CurrentEntry = CurrentEntry->Flink;
      }
  
  }
  
  
++static VOID
++NpfsSignalAndRemoveListeningServerInstance(PNPFS_PIPE Pipe,
++                                         PNPFS_FCB Fcb)
++{
++  PLIST_ENTRY CurrentEntry;
++  PNPFS_WAITER_ENTRY Waiter;
++
++  CurrentEntry = Pipe->WaiterListHead.Flink;
++  while (CurrentEntry != &Pipe->WaiterListHead)
++    {
++      Waiter = CONTAINING_RECORD(CurrentEntry, NPFS_WAITER_ENTRY, Entry);
++      if (Waiter->Fcb == Fcb)
++      {
++        DPRINT("Server found! Fcb %p\n", Waiter->Fcb);
++
++        KeSetEvent(Waiter->Irp->UserEvent, 0, FALSE);
++        Waiter->Irp->UserIosb->Status = FILE_PIPE_CONNECTED_STATE;
++        Waiter->Irp->UserIosb->Information = 0;
++        IoCompleteRequest(Waiter->Irp, IO_NO_INCREMENT);
++
++        RemoveEntryList(&Waiter->Entry);
++        ExFreePool(Waiter);
++        return;
++      }
++      CurrentEntry = CurrentEntry->Flink;
++    }
++}
++
++
  NTSTATUS STDCALL
  NpfsCreate(PDEVICE_OBJECT DeviceObject,
           PIRP Irp)
        ClientFcb->PipeState = FILE_PIPE_CONNECTED_STATE;
        ServerFcb->PipeState = FILE_PIPE_CONNECTED_STATE;
  
--      /* Wake server thread */
--      DPRINT("Setting the ConnectEvent for %x\n", ServerFcb);
--      KeSetEvent(&ServerFcb->ConnectEvent, 0, FALSE);
++      /* Signal the server thread and remove it from the waiter list */
++      NpfsSignalAndRemoveListeningServerInstance(Pipe, ServerFcb);
      }
  
    KeUnlockMutex(&Pipe->FcbListLock);
@@@ -318,6 -318,6 +347,7 @@@ NpfsCreateNamedPipe(PDEVICE_OBJECT Devi
  
         InitializeListHead(&Pipe->ServerFcbListHead);
         InitializeListHead(&Pipe->ClientFcbListHead);
++       InitializeListHead(&Pipe->WaiterListHead);
         KeInitializeMutex(&Pipe->FcbListLock, 0);
  
         Pipe->PipeType = Buffer->NamedPipeType;
  
  /* FUNCTIONS *****************************************************************/
  
++static VOID
++NpfsListeningCancelRoutine(IN PDEVICE_OBJECT DeviceObject,
++                           IN PIRP Irp)
++{
++  PNPFS_WAITER_ENTRY Waiter;
++
++  DPRINT1("NpfsListeningCancelRoutine() called\n");
++  /* FIXME: Not tested. */
++
++  Waiter = Irp->Tail.Overlay.DriverContext[0];
++
++  RemoveEntryList(&Waiter->Entry);
++  ExFreePool(Waiter);
++
++  IoReleaseCancelSpinLock(Irp->CancelIrql);
++
++  Irp->IoStatus.Status = STATUS_CANCELLED;
++  Irp->IoStatus.Information = 0;
++  IoCompleteRequest(Irp, IO_NO_INCREMENT);
++}
++
++
++static NTSTATUS
++NpfsAddListeningServerInstance(PIRP Irp,
++                             PNPFS_FCB Fcb)
++{
++  PNPFS_WAITER_ENTRY Entry;
++  KIRQL OldIrql;
++
++  Entry = ExAllocatePool(NonPagedPool, sizeof(NPFS_WAITER_ENTRY));
++  if (Entry == NULL)
++    return STATUS_INSUFFICIENT_RESOURCES;
++
++  Entry->Irp = Irp;
++  Entry->Fcb = Fcb;
++  InsertTailList(&Fcb->Pipe->WaiterListHead, &Entry->Entry);
++
++  IoAcquireCancelSpinLock(&OldIrql);
++  if (!Irp->Cancel)
++    {
++      Irp->Tail.Overlay.DriverContext[0] = Entry;
++      IoMarkIrpPending(Irp);
++      IoSetCancelRoutine(Irp, NpfsListeningCancelRoutine);
++      IoReleaseCancelSpinLock(OldIrql);
++      return STATUS_PENDING;
++    }
++  /* IRP has already been cancelled */
++  IoReleaseCancelSpinLock(OldIrql);
++
++  DPRINT1("FIXME: Remove waiter entry!\n");
++  RemoveEntryList(&Entry->Entry);
++  ExFreePool(Entry);
++
++  return STATUS_CANCELLED;
++}
++
++
  static NTSTATUS
--NpfsConnectPipe(PNPFS_FCB Fcb)
++NpfsConnectPipe(PIRP Irp,
++                PNPFS_FCB Fcb)
  {
    PNPFS_PIPE Pipe;
    PLIST_ENTRY current_entry;
        current_entry = current_entry->Flink;
      }
  
--  KeUnlockMutex(&Pipe->FcbListLock);
--
    /* no listening client fcb found */
    DPRINT("No listening client fcb found -- waiting for client\n");
  
    Fcb->PipeState = FILE_PIPE_LISTENING_STATE;
  
--  Status = KeWaitForSingleObject(&Fcb->ConnectEvent,
--                               UserRequest,
--                               KernelMode,
--                               FALSE,
--                               NULL);
--  if (!NT_SUCCESS(Status))
--    {
--      DPRINT("KeWaitForSingleObject() failed (Status %lx)\n", Status);
--      return Status;
--    }
++  Status = NpfsAddListeningServerInstance(Irp, Fcb);
  
--  Fcb->PipeState = FILE_PIPE_CONNECTED_STATE;
++  KeUnlockMutex(&Pipe->FcbListLock);
  
--  DPRINT("Client Fcb: %p\n", Fcb->OtherSide);
++  DPRINT("NpfsConnectPipe() done (Status %lx)\n", Status);
  
--  return STATUS_PIPE_CONNECTED;
++  return Status;
  }
  
  
@@@ -327,7 -327,7 +374,6 @@@ NpfsPeekPipe(PIRP Irp
  }
  
  
--
  NTSTATUS STDCALL
  NpfsFileSystemControl(PDEVICE_OBJECT DeviceObject,
                      PIRP Irp)
  
        case FSCTL_PIPE_LISTEN:
        DPRINT("Connecting pipe %wZ\n", &Pipe->PipeName);
--      Status = NpfsConnectPipe(Fcb);
++      Status = NpfsConnectPipe(Irp, Fcb);
        break;
  
        case FSCTL_PIPE_PEEK:
        Status = STATUS_UNSUCCESSFUL;
      }
  
--  Irp->IoStatus.Status = Status;
--  Irp->IoStatus.Information = 0;
--
--  IoCompleteRequest(Irp, IO_NO_INCREMENT);
++  if (Status != STATUS_PENDING)
++    {
++      Irp->IoStatus.Status = Status;
++      Irp->IoStatus.Information = 0;
++ 
++      IoCompleteRequest(Irp, IO_NO_INCREMENT);
++    }
  
--  return(Status);
++  return Status;
  }
  
  
@@@ -25,6 -19,6 +19,7 @@@ typedef struct _NPFS_PIP
    KMUTEX FcbListLock;
    LIST_ENTRY ServerFcbListHead;
    LIST_ENTRY ClientFcbListHead;
++  LIST_ENTRY WaiterListHead;
    ULONG PipeType;
    ULONG ReadMode;
    ULONG WriteMode;
@@@ -58,6 -52,6 +53,14 @@@ typedef struct _NPFS_FC
    KSPIN_LOCK DataListLock;    /* Data queue lock */
  } NPFS_FCB, *PNPFS_FCB;
  
++typedef struct _NPFS_WAITER_ENTRY
++{
++  LIST_ENTRY Entry;
++  PIRP Irp;
++  PNPFS_PIPE Pipe;
++  PNPFS_FCB Fcb;
++} NPFS_WAITER_ENTRY, *PNPFS_WAITER_ENTRY;
++
  
  extern NPAGED_LOOKASIDE_LIST NpfsPipeDataLookasideList;
  
@@@ -126,11 -99,14 +99,13 @@@ NpfsRead(PDEVICE_OBJECT DeviceObject
    while (1)
      {
        /* FIXME: check if in blocking mode */
-       if (ReadFcb->ReadDataAvailable == 0)
+       if (Fcb->ReadDataAvailable == 0)
        {
--        KeResetEvent(&Fcb->Event);
-         KeSetEvent(&ReadFcb->Event, IO_NO_INCREMENT, FALSE);
-         KeReleaseSpinLock(&ReadFcb->DataListLock, OldIrql);
+         if (Fcb->PipeState == FILE_PIPE_CONNECTED_STATE)
+           {
+             KeSetEvent(&WriterFcb->Event, IO_NO_INCREMENT, FALSE);
+           }
+         KeReleaseSpinLock(&Fcb->DataListLock, OldIrql);
          if (Information > 0)
            {
              Status = STATUS_SUCCESS;
  
          if (Length == 0)
            {
-             KeSetEvent(&ReadFcb->Event, IO_NO_INCREMENT, FALSE);
+             KeSetEvent(&WriterFcb->Event, IO_NO_INCREMENT, FALSE);
++            KeResetEvent(&Fcb->Event);
              break;
            }
        }
  #endif
  
              Information = CopyLength;
-             ReadFcb->ReadDataAvailable = 0;
-             ReadFcb->WriteQuotaAvailable = ReadFcb->MaxDataLength;
 -            Fcb->ReadDataAvailable = 0;
 -            Fcb->WriteQuotaAvailable = Fcb->MaxDataLength;
++
++            if (Fcb->ReadDataAvailable > Length)
++              {
++                memmove(Fcb->Data, Fcb->Data + Length,
++                        Fcb->ReadDataAvailable - Length);
++                Fcb->ReadDataAvailable -= Length;
++                Status = STATUS_MORE_ENTRIES;
++              }
++            else
++              {
++                Fcb->ReadDataAvailable = 0;
++                Fcb->WriteQuotaAvailable = Fcb->MaxDataLength;
++              }
            }
  
          if (Information > 0)
            {
-             KeSetEvent(&ReadFcb->Event, IO_NO_INCREMENT, FALSE);
+             if (Fcb->PipeState == FILE_PIPE_CONNECTED_STATE)
+               {
+                 KeSetEvent(&WriterFcb->Event, IO_NO_INCREMENT, FALSE);
+               }
++            KeResetEvent(&Fcb->Event);
              break;
            }
        }
@@@ -329,11 -289,11 +301,10 @@@ NpfsWrite(PDEVICE_OBJECT DeviceObject
  
    while(1)
      {
-       if (Fcb->WriteQuotaAvailable == 0)
+       if (ReaderFcb->WriteQuotaAvailable == 0)
        {
--        KeResetEvent(&Fcb->Event);
-         KeSetEvent(&Fcb->OtherSide->Event, IO_NO_INCREMENT, FALSE);
-         KeReleaseSpinLock(&Fcb->DataListLock, OldIrql);
+         KeSetEvent(&ReaderFcb->Event, IO_NO_INCREMENT, FALSE);
+         KeReleaseSpinLock(&ReaderFcb->DataListLock, OldIrql);
          if (Fcb->PipeState != FILE_PIPE_CONNECTED_STATE)
            {
              Status = STATUS_PIPE_BROKEN;
  
          if (Length == 0)
            {
-             KeSetEvent(&Fcb->OtherSide->Event, IO_NO_INCREMENT, FALSE);
+             KeSetEvent(&ReaderFcb->Event, IO_NO_INCREMENT, FALSE);
++            KeResetEvent(&Fcb->Event);
              break;
            }
        }
  
          if (Information > 0)
            {
-             KeSetEvent(&Fcb->OtherSide->Event, IO_NO_INCREMENT, FALSE);
+             KeSetEvent(&ReaderFcb->Event, IO_NO_INCREMENT, FALSE);
++            KeResetEvent(&Fcb->Event);
              break;
            }
        }
index 672e3e8,0000000..bf81f99
mode 100644,000000..100644
--- /dev/null
@@@ -1,386 -1,0 +1,385 @@@
-               <file>cscanf.c</file>\r
 +<module name="crt" type="staticlibrary">\r
 +      <include base="crt">.</include>\r
++      <include base="crt">include</include>\r
 +      <define name="_DISABLE_TIDENTS" />\r
++      <define name="__MINGW_IMPORT">extern</define>\r
 +      <define name="__USE_W32API" />\r
 +      <define name="_WIN32_IE">0x600</define>\r
 +      <define name="_WIN32_WINNT">0x501</define>\r
 +      <define name="__REACTOS__" />\r
 +      <define name="USE_MSVCRT_PREFIX" />\r
 +      <define name="_MSVCRT_LIB_" />\r
++      <define name="_MSVCRT_" />\r
 +      <define name="_MT" />\r
 +      <directory name="conio">\r
 +              <file>cgets.c</file>\r
 +              <file>cprintf.c</file>\r
 +              <file>cputs.c</file>\r
-           <file>stubs.c</file>\r
 +              <file>getch.c</file>\r
 +              <file>getche.c</file>\r
 +              <file>kbhit.c</file>\r
 +              <file>putch.c</file>\r
 +              <file>ungetch.c</file>\r
 +      </directory>\r
 +      <directory name="ctype">\r
 +              <file>ctype.c</file>\r
 +              <file>isascii.c</file>\r
 +              <file>iscntrl.c</file>\r
 +              <file>isgraph.c</file>\r
 +              <file>isprint.c</file>\r
 +              <file>ispunct.c</file>\r
 +              <file>isupper.c</file>\r
 +              <file>isctype.c</file>\r
 +      </directory>\r
 +      <directory name="direct">\r
 +              <file>chdir.c</file>\r
 +              <file>chdrive.c</file>\r
 +              <file>getcwd.c</file>\r
 +              <file>getdcwd.c</file>\r
 +              <file>getdfree.c</file>\r
 +              <file>getdrive.c</file>\r
 +              <file>mkdir.c</file>\r
 +              <file>rmdir.c</file>\r
 +              <file>wchdir.c</file>\r
 +              <file>wgetcwd.c</file>\r
 +              <file>wgetdcwd.c</file>\r
 +              <file>wmkdir.c</file>\r
 +              <file>wrmdir.c</file>\r
 +      </directory>\r
 +      <directory name="except">\r
 +              <file>abnorter.c</file>\r
 +              <file>exhand2.c</file>\r
 +              <file>matherr.c</file>\r
 +              <file>unwind.c</file>\r
 +      </directory>\r
 +      <directory name="float">\r
 +              <file>chgsign.c</file>\r
 +              <file>clearfp.c</file>\r
 +              <file>cntrlfp.c</file>\r
 +              <file>copysign.c</file>\r
 +              <file>fpclass.c</file>\r
 +              <file>fpecode.c</file>\r
 +              <file>fpreset.c</file>\r
 +              <file>isnan.c</file>\r
 +              <file>logb.c</file>\r
 +              <file>nafter.c</file>\r
 +              <file>scalb.c</file>\r
 +              <file>statfp.c</file>\r
 +      </directory>\r
 +      <directory name="io">\r
 +              <file>access.c</file>\r
 +              <file>chmod.c</file>\r
 +              <file>chsize.c</file>\r
 +              <file>close.c</file>\r
 +              <file>commit.c</file>\r
 +              <file>create.c</file>\r
 +              <file>dup.c</file>\r
 +              <file>dup2.c</file>\r
 +              <file>eof.c</file>\r
 +              <file>filelen.c</file>\r
 +              <file>fileleni.c</file>\r
 +              <file>find.c</file>\r
 +              <file>fmode.c</file>\r
 +              <file>isatty.c</file>\r
 +              <file>locking.c</file>\r
 +              <file>lseek.c</file>\r
 +              <file>lseeki64.c</file>\r
 +              <file>mktemp.c</file>\r
 +              <file>open.c</file>\r
 +              <file>pipe.c</file>\r
 +              <file>read.c</file>\r
 +              <file>setmode.c</file>\r
 +              <file>sopen.c</file>\r
-               <file>fscanf.c</file>\r
++              <file>stubs.c</file>\r
 +              <file>tell.c</file>\r
 +              <file>telli64.c</file>\r
 +              <file>umask.c</file>\r
 +              <file>unlink.c</file>\r
 +              <file>utime.c</file>\r
 +              <file>waccess.c</file>\r
 +              <file>wchmod.c</file>\r
 +              <file>wcreate.c</file>\r
 +              <file>wfind.c</file>\r
 +              <file>wmktemp.c</file>\r
 +              <file>wopen.c</file>\r
 +              <file>write.c</file>\r
 +              <file>wunlink.c</file>\r
 +              <file>wutime.c</file>\r
 +      </directory>\r
 +      <directory name="locale">\r
 +              <file>locale.c</file>\r
 +      </directory>\r
 +      <directory name="math">\r
 +              <file>acos.c</file>\r
 +              <file>adjust.c</file>\r
 +              <file>asin.c</file>\r
 +              <file>atan2.c</file>\r
 +              <file>cabs.c</file>\r
 +              <file>cosh.c</file>\r
 +              <file>exp.c</file>\r
 +              <file>fmod.c</file>\r
 +              <file>frexp.c</file>\r
 +              <file>huge_val.c</file>\r
 +              <file>hypot.c</file>\r
 +              <file>j0_y0.c</file>\r
 +              <file>j1_y1.c</file>\r
 +              <file>jn_yn.c</file>\r
 +              <file>ldexp.c</file>\r
 +              <file>log10.c</file>\r
 +              <file>modf.c</file>\r
 +              <file>pow.c</file>\r
 +              <file>sinh.c</file>\r
 +              <file>stubs.c</file>\r
 +              <file>tanh.c</file>\r
 +      </directory>\r
 +      <directory name="mbstring">\r
 +              <file>hanzen.c</file>\r
 +              <file>ischira.c</file>\r
 +              <file>iskana.c</file>\r
 +              <file>iskmoji.c</file>\r
 +              <file>iskpun.c</file>\r
 +              <file>islead.c</file>\r
 +              <file>islwr.c</file>\r
 +              <file>ismbal.c</file>\r
 +              <file>ismbaln.c</file>\r
 +              <file>ismbc.c</file>\r
 +              <file>ismbgra.c</file>\r
 +              <file>ismbkaln.c</file>\r
 +              <file>ismblead.c</file>\r
 +              <file>ismbpri.c</file>\r
 +              <file>ismbpun.c</file>\r
 +              <file>ismbtrl.c</file>\r
 +              <file>isuppr.c</file>\r
 +              <file>jistojms.c</file>\r
 +              <file>jmstojis.c</file>\r
 +              <file>mbbtype.c</file>\r
 +              <file>mbccpy.c</file>\r
 +              <file>mbclen.c</file>\r
 +              <file>mbscat.c</file>\r
 +              <file>mbschr.c</file>\r
 +              <file>mbscmp.c</file>\r
 +              <file>mbscoll.c</file>\r
 +              <file>mbscpy.c</file>\r
 +              <file>mbscspn.c</file>\r
 +              <file>mbsdec.c</file>\r
 +              <file>mbsdup.c</file>\r
 +              <file>mbsicmp.c</file>\r
 +              <file>mbsicoll.c</file>\r
 +              <file>mbsinc.c</file>\r
 +              <file>mbslen.c</file>\r
 +              <file>mbslwr.c</file>\r
 +              <file>mbsncat.c</file>\r
 +              <file>mbsnccnt.c</file>\r
 +              <file>mbsncmp.c</file>\r
 +              <file>mbsncoll.c</file>\r
 +              <file>mbsncpy.c</file>\r
 +              <file>mbsnextc.c</file>\r
 +              <file>mbsnicmp.c</file>\r
 +              <file>mbsnicoll.c</file>\r
 +              <file>mbsninc.c</file>\r
 +              <file>mbsnset.c</file>\r
 +              <file>mbspbrk.c</file>\r
 +              <file>mbsrchr.c</file>\r
 +              <file>mbsrev.c</file>\r
 +              <file>mbsset.c</file>\r
 +              <file>mbsspn.c</file>\r
 +              <file>mbsspnp.c</file>\r
 +              <file>mbsstr.c</file>\r
 +              <file>mbstok.c</file>\r
 +              <file>mbstrlen.c</file>\r
 +              <file>mbsupr.c</file>\r
 +      </directory>\r
 +      <directory name="misc">\r
 +              <file>amsg.c</file>\r
 +              <file>assert.c</file>\r
 +              <file>crtmain.c</file>\r
 +              <file>environ.c</file>\r
 +              <file>getargs.c</file>\r
 +              <file>initterm.c</file>\r
 +              <file>lock.c</file>\r
 +              <file>purecall.c</file>\r
 +              <file>stubs.c</file>\r
 +              <file>tls.c</file>\r
 +      </directory>\r
 +      <directory name="process">\r
 +              <file>_cwait.c</file>\r
 +              <file>_system.c</file>\r
 +              <file>dll.c</file>\r
 +              <file>process.c</file>\r
 +              <file>procid.c</file>\r
 +              <file>thread.c</file>\r
 +              <file>threadid.c</file>\r
 +              <file>threadx.c</file>\r
 +      </directory>\r
 +      <directory name="search">\r
 +              <file>lfind.c</file>\r
 +              <file>lsearch.c</file>\r
 +      </directory>\r
 +      <directory name="setjmp">\r
 +              <directory name="i386">\r
 +                      <file>setjmp.s</file>\r
 +              </directory>\r
 +      </directory>\r
 +      <directory name="signal">\r
 +              <file>signal.c</file>\r
 +              <file>xcptinfo.c</file>\r
 +      </directory>\r
 +      <directory name="stdio">\r
 +              <file>allocfil.c</file>\r
 +              <file>clearerr.c</file>\r
 +              <file>fclose.c</file>\r
 +              <file>fdopen.c</file>\r
 +              <file>feof.c</file>\r
 +              <file>ferror.c</file>\r
 +              <file>fflush.c</file>\r
 +              <file>fgetc.c</file>\r
 +              <file>fgetchar.c</file>\r
 +              <file>fgetpos.c</file>\r
 +              <file>fgets.c</file>\r
 +              <file>fgetws.c</file>\r
 +              <file>filbuf.c</file>\r
 +              <file>fileno.c</file>\r
 +              <file>flsbuf.c</file>\r
 +              <file>fopen.c</file>\r
 +              <file>fprintf.c</file>\r
 +              <file>fputc.c</file>\r
 +              <file>fputchar.c</file>\r
 +              <file>fputs.c</file>\r
 +              <file>fread.c</file>\r
 +              <file>freopen.c</file>\r
-               <file>scanf.c</file>\r
 +              <file>fseek.c</file>\r
 +              <file>fsetpos.c</file>\r
 +              <file>fsopen.c</file>\r
 +              <file>ftell.c</file>\r
 +              <file>fwalk.c</file>\r
 +              <file>fwrite.c</file>\r
 +              <file>getc.c</file>\r
 +              <file>getchar.c</file>\r
 +              <file>gets.c</file>\r
 +              <file>getw.c</file>\r
 +              <file>perror.c</file>\r
 +              <file>popen.c</file>\r
 +              <file>printf.c</file>\r
 +              <file>putc.c</file>\r
 +              <file>putchar.c</file>\r
 +              <file>puts.c</file>\r
 +              <file>putw.c</file>\r
 +              <file>remove.c</file>\r
 +              <file>rename.c</file>\r
 +              <file>rewind.c</file>\r
 +              <file>rmtmp.c</file>\r
-               <file>sscanf.c</file>\r
 +              <file>setbuf.c</file>\r
 +              <file>setvbuf.c</file>\r
 +              <file>sprintf.c</file>\r
-               <file>vfscanf.c</file>\r
++              <file>swprintf.c</file>\r
 +              <file>stdhnd.c</file>\r
 +              <file>tempnam.c</file>\r
 +              <file>tmpfile.c</file>\r
 +              <file>tmpnam.c</file>\r
 +              <file>ungetc.c</file>\r
 +              <file>vfprintf.c</file>\r
-               <file>vscanf.c</file>\r
 +              <file>vfwprint.c</file>\r
 +              <file>vprintf.c</file>\r
-               <file>vsscanf.c</file>\r
 +              <file>vsprintf.c</file>\r
++              <file>vswprintf.c</file>\r
 +              <file>wfdopen.c</file>\r
 +              <file>wrename.c</file>\r
 +              <file>wtempnam.c</file>\r
 +              <file>wtmpnam.c</file>\r
 +      </directory>\r
 +      <directory name="stdlib">\r
 +              <file>_exit.c</file>\r
 +              <file>abort.c</file>\r
 +              <file>atexit.c</file>\r
 +              <file>atof.c</file>\r
 +              <file>div.c</file>\r
 +              <file>ecvt.c</file>\r
 +              <file>ecvtbuf.c</file>\r
 +              <file>errno.c</file>\r
 +              <file>fcvt.c</file>\r
 +              <file>fcvtbuf.c</file>\r
 +              <file>fullpath.c</file>\r
 +              <file>gcvt.c</file>\r
 +              <file>getenv.c</file>\r
 +              <file>ldiv.c</file>\r
 +              <file>makepath.c</file>\r
 +              <file>malloc.c</file>\r
 +              <file>mbtowc.c</file>\r
 +              <file>obsol.c</file>\r
 +              <file>putenv.c</file>\r
 +              <file>rand.c</file>\r
 +              <file>rot.c</file>\r
 +              <file>senv.c</file>\r
 +              <file>strtod.c</file>\r
 +              <file>strtoul.c</file>\r
 +              <file>swab.c</file>\r
 +              <file>wcstod.c</file>\r
 +              <file>wcstombs.c</file>\r
 +              <file>wctomb.c</file>\r
 +              <file>wfulpath.c</file>\r
 +              <file>wputenv.c</file>\r
 +              <file>wsenv.c</file>\r
 +              <file>wsplitp.c</file>\r
 +              <file>wmakpath.c</file>\r
 +      </directory>\r
 +      <directory name="string">\r
 +              <file>lasttok.c</file>\r
 +              <file>strcoll.c</file>\r
 +              <file>strdup.c</file>\r
 +              <file>strerror.c</file>\r
 +              <file>strncoll.c</file>\r
 +              <file>strpbrk.c</file>\r
 +              <file>strrev.c</file>\r
 +              <file>strset.c</file>\r
 +              <file>strstr.c</file>\r
 +              <file>strtok.c</file>\r
 +              <file>strupr.c</file>\r
 +              <file>strxfrm.c</file>\r
 +      </directory>\r
 +      <directory name="sys_stat">\r
 +              <file>fstat.c</file>\r
 +              <file>fstati64.c</file>\r
 +              <file>futime.c</file>\r
 +              <file>stat.c</file>\r
 +              <file>wstat.c</file>\r
 +              <file>systime.c</file>\r
 +      </directory>\r
 +      <directory name="time">\r
 +              <file>clock.c</file>\r
 +              <file>ctime.c</file>\r
 +              <file>difftime.c</file>\r
 +              <file>ftime.c</file>\r
 +              <file>strdate.c</file>\r
 +              <file>strftime.c</file>\r
 +              <file>strtime.c</file>\r
 +              <file>time.c</file>\r
 +              <file>tz_vars.c</file>\r
 +              <file>wctime.c</file>\r
 +              <file>wstrdate.c</file>\r
 +              <file>wstrtime.c</file>\r
 +      </directory>\r
 +      <directory name="wstring">\r
 +              <file>wcscoll.c</file>\r
 +              <file>wcscspn.c</file>\r
 +              <file>wcsdup.c</file>\r
 +              <file>wcsicmp.c</file>\r
 +              <file>wcslwr.c</file>\r
 +              <file>wcsnicmp.c</file>\r
 +              <file>wcspbrk.c</file>\r
 +              <file>wcsrev.c</file>\r
 +              <file>wcsset.c</file>\r
 +              <file>wcsspn.c</file>\r
 +              <file>wcsstr.c</file>\r
 +              <file>wcstok.c</file>\r
 +              <file>wcsupr.c</file>\r
 +              <file>wcsxfrm.c</file>\r
 +              <file>wlasttok.c</file>\r
 +      </directory>\r
 +      <directory name="wine">\r
 +              <file>cpp.c</file>\r
 +              <file>cppexcept.c</file>\r
 +              <file>heap.c</file>\r
++              <file>scanf.c</file>\r
 +              <file>thread.c</file>\r
 +      </directory>\r
 +</module>\r
@@@ -7,9 -7,18 +7,9 @@@
   * UPDATE HISTORY:
   *              28/12/98: Created
   */
- #include <msvcrt/ctype.h>
+ #include <ctype.h>
  
  
 -#undef isalnum
 -/*
 - * @implemented
 - */
 -int isalnum(int c)
 -{
 -    return _isctype(c, _ALPHA | _DIGIT);
 -}
 -
  #undef iswalnum
  /*
   * @implemented
@@@ -8,8 -8,16 +8,8 @@@
   *              28/12/98: Created
   */
  
- #include <msvcrt/ctype.h>
+ #include <ctype.h>
  
 -/*
 - * @implemented
 - */
 -int __isascii(int c)
 -{
 -    return (!((c)&(~0x7f)));
 -}
 -
  /*
   * @implemented
   */
@@@ -6,8 -6,16 +6,8 @@@
   * PROGRAMMER:       Copyright (C) 1995 DJ Delorie
   */
  
- #include <msvcrt/ctype.h>
+ #include <ctype.h>
  
 -#undef iscntrl
 -/*
 - * @implemented
 - */
 -int iscntrl(int c)
 -{
 -    return _isctype(c, _CONTROL);
 -}
  
  #undef iswcntrl
  /*
Simple merge
@@@ -6,8 -6,17 +6,8 @@@
   * PROGRAMMER:       Copyright (C) 1995 DJ Delorie
   */
  
- #include <msvcrt/ctype.h>
+ #include <ctype.h>
  
 -#undef isgraph
 -/*
 - * @implemented
 - */
 -int isgraph(int c)
 -{
 -  return _isctype(c,_PUNCT | _ALPHA | _DIGIT);
 -}
 -
  #undef iswgraph
  /*
   * @implemented
@@@ -6,8 -6,17 +6,8 @@@
   * PROGRAMMER:       Copyright (C) 1995 DJ Delorie
   */
  
- #include <msvcrt/ctype.h>
+ #include <ctype.h>
  
 -#undef isprint
 -/*
 - * @implemented
 - */
 -int isprint(int c)
 -{
 -  return _isctype(c,_BLANK | _PUNCT | _ALPHA | _DIGIT);
 -}
 -
  /*
   * @implemented
   */
@@@ -6,8 -6,17 +6,8 @@@
   * PROGRAMMER:       Copyright (C) 1995 DJ Delorie
   */
  
- #include <msvcrt/ctype.h>
+ #include <ctype.h>
  
 -#undef ispunct
 -/*
 - * @implemented
 - */
 -int ispunct(int c)
 -{
 -    return _isctype(c, _PUNCT);
 -}
 -
  #undef iswpunct
  /*
   * @implemented
@@@ -6,8 -6,17 +6,8 @@@
   * PROGRAMMER:       Copyright (C) 1995 DJ Delorie
   */
  
- #include <msvcrt/ctype.h>
+ #include <ctype.h>
  
 -#undef isupper
 -/*
 - * @implemented
 - */
 -int isupper(int c)
 -{
 -    return _isctype(c, _UPPER);
 -}
 -
  /*
   * @implemented
   */
@@@ -26,26 -27,12 +27,9 @@@ Cambridge, MA 02139, USA.  *
  
  #undef sprintf
  #undef wsprintf
- /*
-  * @implemented
-  */
- int
- crt_sprintf(char *str, const char *fmt, ...)
- {
-   va_list arg;
-   int done;
  
-   va_start (arg, fmt);
-   done = vsprintf (str, fmt, arg);
-   va_end (arg);
-   return done;
- }
--/*
-- * @implemented
-- */
  int
- crt_swprintf(wchar_t *str, const wchar_t *fmt, ...)
 -_stprintf(_TCHAR *str, const _TCHAR *fmt, ...)
++crt_sprintf(_TCHAR *str, const _TCHAR *fmt, ...)
  {
    va_list arg;
    int done;
  /* Write formatted output into S, according to the format
     string FORMAT, writing no more than MAXLEN characters.  */
  /* VARARGS3 */
- /*
-  * @implemented
-  */
- int
- crt__snprintf (char *s, size_t maxlen,const char *format, ...)
- {
-   va_list arg;
-   int done;
-   va_start (arg, format);
-   done = _vsnprintf (s, maxlen, format, arg);
-   va_end (arg);
-   return done;
- }
--/*
-- * @implemented
-- */
  int
- crt__snwprintf (wchar_t *s, size_t maxlen,const wchar_t *format, ...)
 -_sntprintf (_TCHAR *s, size_t maxlen,const _TCHAR *format, ...)
++crt__snprintf (_TCHAR *s, size_t maxlen,const _TCHAR *format, ...)
  {
    va_list arg;
    int done;
@@@ -1,65 -1,4 +1,62 @@@
- /* Copyright (C) 1991 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- Library General Public License for more details.
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB.  If
- not, write to the Free Software Foundation, Inc., 675 Mass Ave,
- Cambridge, MA 02139, USA.  */
- #include <msvcrt/stdarg.h>
- #include <msvcrt/stdio.h>
- #include <msvcrt/wchar.h>
- #include <msvcrt/alloc.h>
- #include <msvcrt/internal/stdio.h>
- /* Read formatted input from STREAM according to the format string FORMAT.  */
- /* VARARGS2 */
- /*
-  * @implemented
-  */
- int fscanf(FILE *stream,const char *format, ...)
- {
-   va_list arg;
-   int done;
-   va_start(arg, format);
-   done = __vfscanf(stream, format, arg);
-   va_end(arg);
-   return done;
- }
- /*
-  * @implemented
-  */
- int
- fwscanf(FILE *stream, const wchar_t *fmt, ...)
- {
-   va_list arg;
-   int done;
-   char *cf;
-   int i,len = wcslen(fmt);
-   cf = malloc(len+1);
-   for(i=0;i<len;i++)
-     cf[i] = fmt[i];
-   cf[i] = 0;
-   va_start(arg, fmt);
-   done = __vfscanf(stream, cf, arg);
-   va_end(arg);
-   free(cf);
-   return done;
- }
++/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */\r
++\r
++/* Copyright (C) 1991, 1995 Free Software Foundation, Inc.\r
++This file is part of the GNU C Library.\r
++\r
++The GNU C Library is free software; you can redistribute it and/or\r
++modify it under the terms of the GNU Library General Public License as\r
++published by the Free Software Foundation; either version 2 of the\r
++License, or (at your option) any later version.\r
++\r
++The GNU C Library is distributed in the hope that it will be useful,\r
++but WITHOUT ANY WARRANTY; without even the implied warranty of\r
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
++Library General Public License for more details.\r
++\r
++You should have received a copy of the GNU Library General Public\r
++License along with the GNU C Library; see the file COPYING.LIB.  If\r
++not, write to the Free Software Foundation, Inc., 675 Mass Ave,\r
++Cambridge, MA 02139, USA.  */\r
++\r
+ #define UNICODE\r
+ #define _UNICODE\r
++#include <stdarg.h>\r
++#include <stdio.h>\r
++#include <wchar.h>\r
++#include <limits.h>\r
++#include <internal/file.h>\r
++#include <tchar.h>\r
++\r
++#undef sprintf\r
++#undef wsprintf\r
++\r
++int\r
++crt_swprintf(_TCHAR *str, const _TCHAR *fmt, ...)\r
++{\r
++  va_list arg;\r
++  int done;\r
++\r
++  va_start (arg, fmt);\r
++  done = _vstprintf (str, fmt, arg);\r
++  va_end (arg);\r
++  return done;\r
++}\r
++\r
++\r
++/* Write formatted output into S, according to the format\r
++   string FORMAT, writing no more than MAXLEN characters.  */\r
++/* VARARGS3 */\r
++int\r
++crt__snwprintf (_TCHAR *s, size_t maxlen,const _TCHAR *format, ...)\r
++{\r
++  va_list arg;\r
++  int done;\r
++\r
++  va_start (arg, format);\r
++  done = _vsntprintf(s, maxlen, format, arg);\r
++  va_end (arg);\r
++\r
++  return done;\r
++}\r
++\r
\r
 -#include "sprintf.c"\r
@@@ -1,31 -1,17 +1,14 @@@
  /* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
- #include <msvcrt/stdio.h>
- #include <msvcrt/stdarg.h>
+ #include <stdio.h>
+ #include <stdarg.h>
  #include <limits.h>
- #include <msvcrt/internal/file.h>
+ #include <internal/file.h>
+ #include <tchar.h>
  
 -/*
 - * @implemented
 - */
  int
- crt_vsprintf(char *str, const char *fmt, va_list ap)
 -_vstprintf(_TCHAR *str, const _TCHAR *fmt, va_list ap)
++crt_vsprintf(_TCHAR *str, const _TCHAR *fmt, va_list ap)
  {
-   FILE f;
-   int len;
-   f._flag = _IOWRT|_IOSTRG|_IOBINARY;
-   f._ptr = str;
-   f._cnt = INT_MAX;
-   f._file = -1;
-   len = vfprintf(&f,fmt, ap);
-   *f._ptr = 0;
-   return len;
- }
- /*
-  * @implemented
-  */
- int
- vswprintf(wchar_t *str, const wchar_t *fmt, va_list ap)
- {
-   FILE f;
+   FILE f = {0};
    int len;
  
    f._flag = _IOWRT|_IOSTRG|_IOBINARY;
  }
  
  
 -/*
 - * @implemented
 - */
  int
- crt__vsnprintf(char *str, size_t maxlen, const char *fmt, va_list ap)
- {
-   FILE f;
-   int len;
-   f._flag = _IOWRT|_IOSTRG|_IOBINARY;
-   f._ptr = str;
-   f._cnt = maxlen;
-   f._file = -1;
-   len = vfprintf(&f,fmt, ap);
-   // what if the buffer is full ??
-   *f._ptr = 0;
-   return len;
- }
- int
- crt__vsnwprintf(wchar_t *str, size_t maxlen, const wchar_t *fmt, va_list ap)
 -_vsntprintf(_TCHAR *str, size_t maxlen, const _TCHAR *fmt, va_list ap)
++crt__vsnprintf(_TCHAR *str, size_t maxlen, const _TCHAR *fmt, va_list ap)
  {
-   FILE f;
+   FILE f = {0};
    int len;
+   
    f._flag = _IOWRT|_IOSTRG|_IOBINARY;
    f._ptr = (char*)str;
    f._cnt = maxlen;
index 0000000,646e937..9b3cbd8
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,4 +1,40 @@@
 -#include "vsprintf.c"\r
++/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */\r
+ #define UNICODE\r
+ #define _UNICODE\r
++#include <stdio.h>\r
++#include <stdarg.h>\r
++#include <limits.h>\r
++#include <internal/file.h>\r
++#include <tchar.h>\r
\r
++int\r
++crt__vswprintf(_TCHAR *str, const _TCHAR *fmt, va_list ap)\r
++{\r
++  FILE f = {0};\r
++  int len;\r
++\r
++  f._flag = _IOWRT|_IOSTRG|_IOBINARY;\r
++  f._ptr = (char*)str;\r
++  f._cnt = INT_MAX;\r
++  f._file = -1;\r
++  len = _vftprintf(&f,fmt, ap);\r
++  *(_TCHAR*)f._ptr = 0;\r
++  return len;\r
++}\r
++\r
++\r
++int\r
++crt__vsnwprintf(_TCHAR *str, size_t maxlen, const _TCHAR *fmt, va_list ap)\r
++{\r
++  FILE f = {0};\r
++  int len;\r
++  \r
++  f._flag = _IOWRT|_IOSTRG|_IOBINARY;\r
++  f._ptr = (char*)str;\r
++  f._cnt = maxlen;\r
++  f._file = -1;\r
++  len = _vftprintf(&f,fmt, ap);\r
++  // what if the buffer is full ??\r
++  *(_TCHAR *)f._ptr = 0;\r
++  return len;\r
++}\r
index 0000000,f7d9232..185e16d
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,223 +1,223 @@@
 -int sscanf(const char *str, const char *format, ...)\r
+ /*\r
+  * general implementation of scanf used by scanf, sscanf, fscanf,\r
+  * _cscanf, wscanf, swscanf and fwscanf\r
+  *\r
+  * Copyright 1996,1998 Marcus Meissner\r
+  * Copyright 1996 Jukka Iivonen\r
+  * Copyright 1997,2000 Uwe Bonnes\r
+  * Copyright 2000 Jon Griffiths\r
+  * Copyright 2002 Daniel Gudbjartsson\r
+  *\r
+  * This library is free software; you can redistribute it and/or\r
+  * modify it under the terms of the GNU Lesser General Public\r
+  * License as published by the Free Software Foundation; either\r
+  * version 2.1 of the License, or (at your option) any later version.\r
+  *\r
+  * This library is distributed in the hope that it will be useful,\r
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
+  * Lesser General Public License for more details.\r
+  *\r
+  * You should have received a copy of the GNU Lesser General Public\r
+  * License along with this library; if not, write to the Free Software\r
+  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
+  */\r
+  \r
+  \r
+ /*\r
+ #include <stdarg.h>\r
\r
+ #include "windef.h"\r
+ #include "winbase.h"\r
+ #include "winreg.h"\r
+ #include "winternl.h"\r
+ #include "msvcrt.h"\r
+ */\r
\r
+ //#include <ntdll/ntdll.h>\r
+ #include <ntdll/rtl.h>\r
+ //#include <ddk/ntddk.h>\r
+ //#include <ntos/heap.h>\r
+ #include <stdarg.h>\r
+ #include <wchar.h>\r
+ #include <stdio.h>\r
+ #include <conio.h>\r
+ #include <ctype.h>\r
+ #include <internal/file.h>\r
\r
+ //#include <ntos/heap.h>\r
\r
+ #define NDEBUG\r
+ #include <internal/debug.h>\r
\r
\r
+ /*\r
+ This is so ugly. I tried including anything/everything, but no matter\r
+ what i did i got complaints about RtlGetProcessHeap etc. being undefined.\r
+ -Gunnar (i hate headers)\r
+ */\r
+ #define RtlFreeHeap HeapFree\r
+ #define RtlAllocateHeap HeapAlloc\r
+ #define RtlGetProcessHeap GetProcessHeap\r
+ //#include "wine/debug.h"\r
\r
+ #define WARN DPRINT1\r
\r
+ //WINE_DEFAULT_DEBUG_CHANNEL(msvcrt);\r
\r
+ extern FILE _iob[];\r
\r
+ /* helper function for *scanf.  Returns the value of character c in the\r
+  * given base, or -1 if the given character is not a digit of the base.\r
+  */\r
+ static int char2digit(char c, int base) {\r
+     if ((c>='0') && (c<='9') && (c<='0'+base-1)) return (c-'0');\r
+     if (base<=10) return -1;\r
+     if ((c>='A') && (c<='Z') && (c<='A'+base-11)) return (c-'A'+10);\r
+     if ((c>='a') && (c<='z') && (c<='a'+base-11)) return (c-'a'+10);\r
+     return -1;\r
+ }\r
\r
+ /* helper function for *wscanf.  Returns the value of character c in the\r
+  * given base, or -1 if the given character is not a digit of the base.\r
+  */\r
+ static int wchar2digit(wchar_t c, int base) {\r
+     if ((c>=L'0') && (c<=L'9') && (c<=L'0'+base-1)) return (c-L'0');\r
+     if (base<=10) return -1;\r
+     if ((c>=L'A') && (c<=L'Z') && (c<=L'A'+base-11)) return (c-L'A'+10);\r
+     if ((c>=L'a') && (c<=L'z') && (c<=L'a'+base-11)) return (c-L'a'+10);\r
+     return -1;\r
+ }\r
\r
+ /* vfscanf */\r
+ #undef WIDE_SCANF\r
+ #undef CONSOLE\r
+ #undef STRING\r
+ #include "scanf.h"\r
\r
+ /* vfwscanf */\r
+ #define WIDE_SCANF 1\r
+ #undef CONSOLE\r
+ #undef STRING\r
+ #include "scanf.h"\r
\r
+ /* vsscanf */\r
+ #undef WIDE_SCANF\r
+ #undef CONSOLE\r
+ #define STRING 1\r
+ #include "scanf.h"\r
\r
+ /* vswscanf */\r
+ #define WIDE_SCANF 1\r
+ #undef CONSOLE\r
+ #define STRING 1\r
+ #include "scanf.h"\r
\r
+ /* vcscanf */\r
+ #undef WIDE_SCANF\r
+ #define CONSOLE 1\r
+ #undef STRING\r
+ #include "scanf.h"\r
\r
\r
+ /*********************************************************************\r
+  *            fscanf (MSVCRT.@)\r
+  */\r
+ int fscanf(FILE *file, const char *format, ...)\r
+ {\r
+     va_list valist;\r
+     int res;\r
\r
+     va_start(valist, format);\r
+     res = vfscanf(file, format, valist);\r
+     va_end(valist);\r
+     return res;\r
+ }\r
\r
+ /*********************************************************************\r
+  *            scanf (MSVCRT.@)\r
+  */\r
+ int scanf(const char *format, ...)\r
+ {\r
+     va_list valist;\r
+     int res;\r
\r
+     va_start(valist, format);\r
+     res = vfscanf(stdin, format, valist);\r
+     va_end(valist);\r
+     return res;\r
+ }\r
\r
+ /*********************************************************************\r
+  *            fwscanf (MSVCRT.@)\r
+  */\r
+ int fwscanf(FILE *file, const wchar_t *format, ...)\r
+ {\r
+     va_list valist;\r
+     int res;\r
\r
+     va_start(valist, format);\r
+     res = vfwscanf(file, format, valist);\r
+     va_end(valist);\r
+     return res;\r
+ }\r
\r
\r
+ /*********************************************************************\r
+  *            wscanf (MSVCRT.@)\r
+  */\r
+ int wscanf(const wchar_t *format, ...)\r
+ {\r
+     va_list valist;\r
+     int res;\r
\r
+     va_start(valist, format);\r
+     res = vfwscanf(stdin, format, valist);\r
+     va_end(valist);\r
+     return res;\r
+ }\r
\r
\r
+ /*********************************************************************\r
+  *            sscanf (MSVCRT.@)\r
+  */\r
++int crt_sscanf(const char *str, const char *format, ...)\r
+ {\r
+     va_list valist;\r
+     int res;\r
\r
+     va_start(valist, format);\r
+     res = vsscanf(str, format, valist);\r
+     va_end(valist);\r
+     return res;\r
+ }\r
\r
\r
+ /*********************************************************************\r
+  *            swscanf (MSVCRT.@)\r
+  */\r
+ int swscanf(const wchar_t *str, const wchar_t *format, ...)\r
+ {\r
+     va_list valist;\r
+     int res;\r
\r
+     va_start(valist, format);\r
+     res = vswscanf(str, format, valist);\r
+     va_end(valist);\r
+     return res;\r
+ }\r
\r
\r
+ /*********************************************************************\r
+  *            _cscanf (MSVCRT.@)\r
+  */\r
+ int _cscanf(/*const*/ char *format, ...)\r
+ {\r
+     va_list valist;\r
+     int res;\r
\r
+     va_start(valist, format);\r
+     res = vcscanf(format, valist);\r
+     va_end(valist);\r
+     return res;\r
+ }\r
Simple merge
index a3609d1,0000000..8484282
mode 100644,000000..100644
--- /dev/null
@@@ -1,19 -1,0 +1,20 @@@
-       <library>crt</library>\r
 +<module name="crtdll" type="win32dll" baseaddress="${BASEADDRESS_CRTDLL}" mangledsymbols="true">\r
 +      <linkerflag>-nostartfiles</linkerflag>\r
 +      <linkerflag>-lgcc</linkerflag>\r
 +      <importlibrary definition="crtdll.def" />\r
 +      <include base="crtdll">.</include>\r
++      <include base="crt">include</include>\r
 +      <define name="_DISABLE_TIDENTS" />\r
 +      <define name="__USE_W32API" />\r
 +      <define name="_WIN32_IE">0x600</define>\r
 +      <define name="_WIN32_WINNT">0x501</define>\r
 +      <define name="__REACTOS__" />\r
 +      <define name="USE_MSVCRT_PREFIX" />\r
 +      <define name="_MSVCRT_LIB_" />\r
++      <library>crt</library>\r
 +      <library>string</library>\r
 +      <library>kernel32</library>\r
 +      <library>ntdll</library>\r
 +      <file>dllmain.c</file>\r
 +      <file>crtdll.rc</file>\r
 +</module>\r
@@@ -8,7 -8,7 +8,7 @@@
   * @implemented
   */
  int
--vsprintf(char *str, const char *fmt, va_list ap)
++crt_vsprintf(char *str, const char *fmt, va_list ap)
  {
    FILE f;
    int len;
@@@ -63,7 -63,7 +63,7 @@@ _vsnprintf(char *str, size_t maxlen, co
   * @implemented
   */
  int
--_vsnwprintf(wchar_t *str, size_t maxlen, const wchar_t *fmt, va_list ap)
++crt__vsnwprintf(wchar_t *str, size_t maxlen, const wchar_t *fmt, va_list ap)
  {
    FILE f;
    int len;
index c082b12,0000000..967de96
mode 100644,000000..100644
--- /dev/null
@@@ -1,273 -1,0 +1,270 @@@
- <directory name="unicode">\r
-       <xi:include href="unicode/unicode.xml" />\r
- </directory>\r
 +<directory name="acledit">\r
 +      <xi:include href="acledit/acledit.xml" />\r
 +</directory>\r
 +<directory name="aclui">\r
 +      <xi:include href="aclui/aclui.xml" />\r
 +</directory>\r
 +<directory name="adns">\r
 +      <xi:include href="adns/adns.xml" />\r
 +</directory>\r
 +<directory name="advapi32">\r
 +      <xi:include href="advapi32/advapi32.xml" />\r
 +</directory>\r
 +<directory name="advpack">\r
 +      <xi:include href="advpack/advpack.xml" />\r
 +</directory>\r
 +<directory name="cabinet">\r
 +      <xi:include href="cabinet/cabinet.xml" />\r
 +</directory>\r
 +<directory name="cards">\r
 +      <xi:include href="cards/cards.xml" />\r
 +</directory>\r
 +<directory name="comctl32">\r
 +      <xi:include href="comctl32/comctl32.xml" />\r
 +</directory>\r
 +<directory name="comdlg32">\r
 +      <xi:include href="comdlg32/comdlg32.xml" />\r
 +</directory>\r
 +<directory name="cpl">\r
 +      <xi:include href="cpl/directory.xml" />\r
 +</directory>\r
 +<directory name="crt">\r
 +      <xi:include href="crt/crt.xml" />\r
 +</directory>\r
 +<directory name="crtdll">\r
 +      <xi:include href="crtdll/crtdll.xml" />\r
 +</directory>\r
 +<directory name="dbghelp">\r
 +      <xi:include href="dbghelp/dbghelp.xml" />\r
 +</directory>\r
 +<directory name="devenum">\r
 +      <xi:include href="devenum/devenum.xml" />\r
 +</directory>\r
 +<directory name="dinput">\r
 +      <xi:include href="dinput/dinput.xml" />\r
 +</directory>\r
 +<directory name="dinput8">\r
 +      <xi:include href="dinput8/dinput8.xml" />\r
 +</directory>\r
 +<directory name="dnsapi">\r
 +      <xi:include href="dnsapi/dnsapi.xml" />\r
 +</directory>\r
 +<directory name="dsound">\r
 +      <xi:include href="dsound/dsound.xml" />\r
 +</directory>\r
 +<directory name="dxdiagn">\r
 +      <xi:include href="dxdiagn/dxdiagn.xml" />\r
 +</directory>\r
 +<directory name="dxguid">\r
 +      <xi:include href="dxguid/dxguid.xml" />\r
 +</directory>\r
 +<directory name="epsapi">\r
 +      <xi:include href="epsapi/epsapi.xml" />\r
 +</directory>\r
 +<directory name="expat">\r
 +      <xi:include href="expat/expat.xml" />\r
 +</directory>\r
 +<directory name="fmifs">\r
 +      <xi:include href="fmifs/fmifs.xml" />\r
 +</directory>\r
 +<directory name="freetype">\r
 +      <xi:include href="freetype/freetype.xml" />\r
 +</directory>\r
 +<directory name="fslib">\r
 +      <xi:include href="fslib/directory.xml" />\r
 +</directory>\r
 +<directory name="gdi32">\r
 +      <xi:include href="gdi32/gdi32.xml" />\r
 +</directory>\r
 +<directory name="gdiplus">\r
 +      <xi:include href="gdiplus/gdiplus.xml" />\r
 +</directory>\r
 +<directory name="glu32">\r
 +      <xi:include href="glu32/glu32.xml" />\r
 +</directory>\r
 +<directory name="imagehlp">\r
 +      <xi:include href="imagehlp/imagehlp.xml" />\r
 +</directory>\r
 +<directory name="imm32">\r
 +      <xi:include href="imm32/imm32.xml" />\r
 +</directory>\r
 +<directory name="iphlpapi">\r
 +      <xi:include href="iphlpapi/iphlpapi.xml" />\r
 +</directory>\r
 +<directory name="kbdda">\r
 +      <xi:include href="kbdda/kbdda.xml" />\r
 +</directory>\r
 +<directory name="kbddv">\r
 +      <xi:include href="kbddv/kbddv.xml" />\r
 +</directory>\r
 +<directory name="kbdes">\r
 +      <xi:include href="kbdes/kbdes.xml" />\r
 +</directory>\r
 +<directory name="kbdfr">\r
 +      <xi:include href="kbdfr/kbdfr.xml" />\r
 +</directory>\r
 +<directory name="kbdgr">\r
 +      <xi:include href="kbdgr/kbdgr.xml" />\r
 +</directory>\r
 +<directory name="kbdse">\r
 +      <xi:include href="kbdse/kbdse.xml" />\r
 +</directory>\r
 +<directory name="kbduk">\r
 +      <xi:include href="kbduk/kbduk.xml" />\r
 +</directory>\r
 +<directory name="kbdus">\r
 +      <xi:include href="kbdus/kbdus.xml" />\r
 +</directory>\r
 +<directory name="kernel32">\r
 +      <xi:include href="kernel32/kernel32.xml" />\r
 +</directory>\r
 +<directory name="kjs">\r
 +      <xi:include href="kjs/kjs.xml" />\r
 +</directory>\r
 +<directory name="libwine">\r
 +      <xi:include href="libwine/libwine.xml" />\r
 +</directory>\r
 +<directory name="lzexpand">\r
 +      <xi:include href="lzexpand/lz32.xml" />\r
 +</directory>\r
 +<directory name="mesa32">\r
 +      <xi:include href="mesa32/mesa32.xml" />\r
 +</directory>\r
 +<directory name="midimap">\r
 +      <xi:include href="midimap/midimap.xml" />\r
 +</directory>\r
 +<directory name="mmdrv">\r
 +      <xi:include href="mmdrv/mmdrv.xml" />\r
 +</directory>\r
 +<directory name="mpr">\r
 +      <xi:include href="mpr/mpr.xml" />\r
 +</directory>\r
 +<directory name="msafd">\r
 +      <xi:include href="msafd/msafd.xml" />\r
 +</directory>\r
 +<directory name="msgina">\r
 +      <xi:include href="msgina/msgina.xml" />\r
 +</directory>\r
 +<directory name="msimg32">\r
 +      <xi:include href="msimg32/msimg32.xml" />\r
 +</directory>\r
 +<directory name="msvcrt">\r
 +      <xi:include href="msvcrt/msvcrt.xml" />\r
 +</directory>\r
 +<directory name="msvcrt20">\r
 +      <xi:include href="msvcrt20/msvcrt20.xml" />\r
 +</directory>\r
 +<directory name="netapi32">\r
 +      <xi:include href="netapi32/netapi32.xml" />\r
 +</directory>\r
 +<directory name="ntdll">\r
 +      <xi:include href="ntdll/ntdll.xml" />\r
 +</directory>\r
 +<directory name="ole32">\r
 +      <xi:include href="ole32/ole32.xml" />\r
 +</directory>\r
 +<directory name="oleaut32">\r
 +      <xi:include href="oleaut32/oleaut32.xml" />\r
 +</directory>\r
 +<directory name="olepro32">\r
 +      <xi:include href="olepro32/olepro32.xml" />\r
 +</directory>\r
 +<directory name="opengl32">\r
 +      <xi:include href="opengl32/opengl32.xml" />\r
 +</directory>\r
 +<directory name="psapi">\r
 +      <xi:include href="psapi/psapi.xml" />\r
 +</directory>\r
 +<directory name="pseh">\r
 +      <xi:include href="pseh/pseh.xml" />\r
 +</directory>\r
 +<directory name="richedit">\r
 +      <xi:include href="richedit/riched32.xml" />\r
 +</directory>\r
 +<directory name="rosrtl">\r
 +      <xi:include href="rosrtl/rosrtl.xml" />\r
 +</directory>\r
 +<directory name="rossym">\r
 +      <xi:include href="rossym/rossym.xml" />\r
 +</directory>\r
 +<directory name="rpcrt4">\r
 +      <xi:include href="rpcrt4/rpcrt4.xml" />\r
 +</directory>\r
 +<directory name="rtl">\r
 +      <xi:include href="rtl/rtl.xml" />\r
 +</directory>\r
 +<directory name="samlib">\r
 +      <xi:include href="samlib/samlib.xml" />\r
 +</directory>\r
 +<directory name="secur32">\r
 +      <xi:include href="secur32/secur32.xml" />\r
 +</directory>\r
 +<directory name="setupapi">\r
 +      <xi:include href="setupapi/setupapi.xml" />\r
 +</directory>\r
 +<directory name="shdocvw">\r
 +      <xi:include href="shdocvw/shdocvw.xml" />\r
 +</directory>\r
 +<directory name="shell32">\r
 +      <xi:include href="shell32/shell32.xml" />\r
 +</directory>\r
 +<directory name="shlwapi">\r
 +      <xi:include href="shlwapi/shlwapi.xml" />\r
 +</directory>\r
 +<directory name="snmpapi">\r
 +      <xi:include href="snmpapi/snmpapi.xml" />\r
 +</directory>\r
 +<directory name="smdll">\r
 +      <xi:include href="smdll/smdll.xml" />\r
 +</directory>\r
 +<directory name="string">\r
 +      <xi:include href="string/string.xml" />\r
 +</directory>\r
 +<directory name="strmiids">\r
 +      <xi:include href="strmiids/strmiids.xml" />\r
 +</directory>\r
 +<directory name="syssetup">\r
 +      <xi:include href="syssetup/syssetup.xml" />\r
 +</directory>\r
 +<directory name="twain">\r
 +      <xi:include href="twain/twain_32.xml" />\r
 +</directory>\r
 +<directory name="urlmon">\r
 +      <xi:include href="urlmon/urlmon.xml" />\r
 +</directory>\r
 +<directory name="user32">\r
 +      <xi:include href="user32/user32.xml" />\r
 +</directory>\r
 +<directory name="userenv">\r
 +      <xi:include href="userenv/userenv.xml" />\r
 +</directory>\r
 +<directory name="uuid">\r
 +      <xi:include href="uuid/uuid.xml" />\r
 +</directory>\r
 +<directory name="version">\r
 +      <xi:include href="version/version.xml" />\r
 +</directory>\r
 +<directory name="wininet">\r
 +      <xi:include href="wininet/wininet.xml" />\r
 +</directory>\r
 +<directory name="winmm">\r
 +      <xi:include href="winmm/winmm.xml" />\r
 +</directory>\r
 +<directory name="winspool">\r
 +      <xi:include href="winspool/winspool.xml" />\r
 +</directory>\r
 +<directory name="ws2_32">\r
 +      <xi:include href="ws2_32/ws2_32.xml" />\r
 +</directory>\r
 +<directory name="ws2help">\r
 +      <xi:include href="ws2help/ws2help.xml" />\r
 +</directory>\r
 +<directory name="wshirda">\r
 +      <xi:include href="wshirda/wshirda.xml" />\r
 +</directory>\r
 +<directory name="wsock32">\r
 +      <xi:include href="wsock32/wsock32.xml" />\r
 +</directory>\r
 +<directory name="zlib">\r
 +      <xi:include href="zlib/zlib.xml" />\r
 +</directory>\r
@@@ -1,4 -1,4 +1,4 @@@
- # $Id$
 -# $Id: Makefile 13593 2005-02-16 14:01:34Z weiden $
++# $Id: Makefile 12851 2005-01-06 13:34:15Z mf $
  
  PATH_TO_TOP = ../..
  
@@@ -7,7 -7,7 +7,7 @@@ dnl The implementation will create a bi
  dnl the binary it will be grep'ed for some symbols that will look
  dnl different for different endianess of the binary.
  dnl
- dnl @version $Id$
 -dnl @version $Id: ac_c_bigendian_cross.m4,v 1.2 2001/10/01 20:03:13 fdrake Exp $
++dnl @version $Id: ac_c_bigendian_cross.m4 12851 2005-01-06 13:34:15Z mf $
  dnl @author Guido Draheim <guidod@gmx.de>
  dnl
  AC_DEFUN([AC_C_BIGENDIAN_CROSS],
@@@ -4,7 -4,7 +4,7 @@@
  # Created: 1993-05-16
  # Public domain
  
- # $Id$
 -# $Id: mkinstalldirs,v 1.1 2000/09/18 16:26:21 coopercc Exp $
++# $Id: mkinstalldirs 12851 2005-01-06 13:34:15Z mf $
  
  errstatus=0
  
index 1ce519f,0000000..1fc36fa
mode 100644,000000..100644
--- /dev/null
@@@ -1,12 -1,0 +1,13 @@@
 +<module name="expat" type="win32dll">\r
 +      <importlibrary definition="lib/libexpat.def" />\r
 +      <include base="expat">.</include>\r
++      <include base="expat">lib</include>\r
 +      <define name="HAVE_EXPAT_CONFIG_H" />\r
 +      <define name="__USE_W32API" />\r
 +      <library>kernel32</library>\r
 +      <directory name="lib">\r
 +              <file>xmlparse.c</file>\r
 +              <file>xmlrole.c</file>\r
 +              <file>xmltok.c</file>\r
 +      </directory>\r
 +</module>\r
Simple merge
@@@ -160,9 -160,9 +160,9 @@@ __setlc_active DAT
  __setusermatherr
  __threadhandle
  __threadid
 -__toascii
 +__toascii=NTDLL.__toascii
- ;__unDName
- ;__unDNameEx
+ __unDName=stub
+ __unDNameEx=stub
  __unguarded_readlc_active DATA
  __wargv
  __wgetmainargs
@@@ -192,21 -192,21 +192,21 @@@ _adj_fdivr_m32 = _adj_fdivr_m32@
  _adj_fdivr_m32i = _adj_fdivr_m32i@4
  _adj_fdivr_m64 = _adj_fdivr_m64@8
  _adj_fpatan
- ;_adj_fprem
- ;_adj_fprem1
- ;_adj_fptan
+ _adj_fprem=stub
+ _adj_fprem1=stub
+ _adj_fptan=stub
  _adjust_fdiv DATA
  _aexit_rtn
- ;_aligned_free
- ;_aligned_malloc
- ;_aligned_offset_malloc
- ;_aligned_offset_realloc
- ;_aligned_realloc
+ _aligned_free=stub
+ _aligned_malloc=stub
+ _aligned_offset_malloc=stub
+ _aligned_offset_realloc=stub
+ _aligned_realloc=stub
  _amsg_exit
  _assert
- ;_atodbl
+ _atodbl=stub
 -_atoi64
 +_atoi64=NTDLL._atoi64
- ;_atoldbl
+ _atoldbl=stub
  _beep
  _beginthread
  _beginthreadex
@@@ -322,15 -323,15 +323,15 @@@ _heapad
  _heapchk
  _heapmin
  _heapset
- ;_heapused
+ _heapused=stub
  _heapwalk
  _hypot
 -_i64toa
 -_i64tow
 +_i64toa=NTDLL._i64toa
 +_i64tow=NTDLL._i64tow
  _initterm
- ;_inp
- ;_inpd
- ;_inpw
+ _inp=stub
+ _inpd=stub
+ _inpw=stub
  _iob
  _isatty
  _isctype
@@@ -441,10 -443,10 +443,10 @@@ _mbsto
  _mbstrlen
  _mbsupr
  _memccpy
 -_memicmp
 +_memicmp=NTDLL._memicmp
  _mkdir
  _mktemp
- ;_mktime64
+ _mktime64=stub
  _msize
  _nextafter
  _onexit
@@@ -493,10 -495,10 +495,10 @@@ _setmbc
  _setmode
  _setsystime
  _sleep
 -_snprintf
 +_snprintf=crt__snprintf
- ;_snscanf
- ;_snwscanf
+ _snscanf=stub
+ _snwscanf=stub
 -_snwprintf
 +_snwprintf=crt__snwprintf
  _sopen
  _spawnl
  _spawnle
@@@ -506,9 -508,9 +508,9 @@@ _spawn
  _spawnve
  _spawnvp
  _spawnvpe
 -_splitpath
 +_splitpath=NTDLL._splitpath
  _stat
- ;_stat64
+ _stat64=stub
  _stati64
  _statusfp
  _strcmpi
@@@ -534,28 -536,27 +536,27 @@@ _sys_nerr DAT
  _tell
  _telli64
  _tempnam
- ;_time64
+ _time64=stub
  _timezone DATA
 -_tolower
 -_toupper
 +_tolower=NTDLL._tolower
 +_toupper=NTDLL._toupper
  _tzname DATA
  _tzset
 -_ui64toa
 -_ui64tow
 -_ultoa
 -_ultow
 +_ui64toa=NTDLL._i64toa
 +_ui64tow=NTDLL._i64tow
 +_ultoa=NTDLL._ultoa
 +_ultow=NTDLL._ultow
  _umask
  _ungetch
- ;_ungetwch
  _unlink
  _unloaddll
  _unlock
  _utime
- ;_utime64
- ;_vscprintf
- ;_vscwprintf
+ _utime64=stub
+ _vscprintf=stub
+ _vscwprintf=stub
 -_vsnprintf
 -_vsnwprintf
 +_vsnprintf=crt__vsnprintf
 +_vsnwprintf=crt__vsnwprintf
  _waccess
  _wasctime
  _wchdir
@@@ -633,12 -634,12 +634,12 @@@ _wstat64=stu
  _wstati64
  _wstrdate
  _wstrtime
- ;_wsystem
+ _wsystem=stub
  _wtempnam
  _wtmpnam
- ;_wtof
+ _wtof=stub
 -_wtoi
 -_wtoi64
 +_wtoi=NTDLL._wtoi
 +_wtoi64=NTDLL._wtoi64
  _wtol
  _wunlink
  _wutime
index 4e23941,0000000..feafc28
mode 100644,000000..100644
--- /dev/null
@@@ -1,22 -1,0 +1,23 @@@
-       <library>crt</library>\r
 +<module name="msvcrt" type="win32dll" baseaddress="${BASEADDRESS_MSVCRT}" mangledsymbols="true">\r
 +      <linkerflag>-nostartfiles</linkerflag>\r
 +      <linkerflag>--enable-stdcall-fixup</linkerflag>\r
 +      <linkerflag>-lgcc</linkerflag>\r
 +      <importlibrary definition="msvcrt.def" />\r
 +      <include base="msvcrt">.</include>\r
++      <include base="crt">include</include>\r
 +      <define name="_DISABLE_TIDENTS" />\r
 +      <define name="__USE_W32API" />\r
 +      <define name="_WIN32_IE">0x600</define>\r
 +      <define name="_WIN32_WINNT">0x501</define>\r
 +      <define name="__REACTOS__" />\r
 +      <define name="USE_MSVCRT_PREFIX" />\r
 +      <define name="_MSVCRT_LIB_" />\r
 +      <define name="_MT" />\r
++      <library>crt</library>\r
 +      <library>wine</library>\r
 +      <library>string</library>\r
 +      <library>kernel32</library>\r
 +      <library>ntdll</library>\r
 +      <file>dllmain.c</file>\r
 +      <file>msvcrt.rc</file>\r
 +</module>\r
index 32720af,0000000..a3cfd44
mode 100644,000000..100644
--- /dev/null
@@@ -1,45 -1,0 +1,44 @@@
-       <library>wine_unicode</library>\r
 +<module name="oleaut32" type="win32dll" baseaddress="${BASEADDRESS_OLEAUT32}">\r
 +      <dependency>winebuild</dependency>\r
 +      <importlibrary definition="oleaut32.spec.def" />\r
 +      <include base="oleaut32">.</include>\r
 +      <include base="ReactOS">include/wine</include>\r
 +      <define name="UNICODE" />\r
 +      <define name="_UNICODE" />\r
 +      <define name="__REACTOS__" />\r
 +      <define name="__USE_W32API" />\r
 +      <define name="_WIN32_IE">0x600</define>\r
 +      <define name="_WIN32_WINNT">0x501</define>\r
 +      <define name="WINVER">0x501</define>\r
 +      <define name="_STDDEF_H" />\r
 +      <define name="_OLEAUT32_" />\r
 +      <define name="COM_NO_WINDOWS_H" />\r
 +      <library>wine</library>\r
 +      <library>uuid</library>\r
 +      <library>ntdll</library>\r
 +      <library>kernel32</library>\r
 +      <library>advapi32</library>\r
 +      <library>gdi32</library>\r
 +      <library>user32</library>\r
 +      <library>rpcrt4</library>\r
 +      <library>ole32</library>\r
 +      <library>comctl32</library>\r
 +      <file>connpt.c</file>\r
 +      <file>dispatch.c</file>\r
 +      <file>hash.c</file>\r
 +      <file>oaidl_p.c</file>\r
 +      <file>oleaut.c</file>\r
 +      <file>olefont.c</file>\r
 +      <file>olepicture.c</file>\r
 +      <file>regsvr.c</file>\r
 +      <file>safearray.c</file>\r
 +      <file>stubs.c</file>\r
 +      <file>tmarshal.c</file>\r
 +      <file>typelib.c</file>\r
 +      <file>typelib2.c</file>\r
 +      <file>usrmarshal.c</file>\r
 +      <file>varformat.c</file>\r
 +      <file>variant.c</file>\r
 +      <file>vartype.c</file>\r
 +      <file>oleaut32.spec</file>\r
 +</module>\r
@@@ -265,10 -265,10 +265,15 @@@ RPC_STATUS RPCRT4_Send(RpcConnection *C
      }\r
  \r
      /* transmit packet header */\r
--    if (!WriteFile(Connection->conn, Header, hdr_size, &count, NULL)) {\r
++    ResetEvent(Connection->ovl.hEvent);\r
++    if (!WriteFile(Connection->conn, Header, hdr_size, &count, &Connection->ovl)) {\r
        WARN("WriteFile failed with error %ld\n", GetLastError());\r
        return GetLastError();\r
      }\r
++    if (!GetOverlappedResult(Connection->conn, &Connection->ovl, &count, TRUE)) {\r
++      WARN("GetOverlappedResult failed with error %ld\n", GetLastError());\r
++      return GetLastError();\r
++    }\r
  \r
      /* fragment consisted of header only and is the last one */\r
      if (hdr_size == Header->common.frag_len &&\r
      }\r
  \r
      /* send the fragment data */\r
--    if (!WriteFile(Connection->conn, buffer_pos, Header->common.frag_len - hdr_size, &count, NULL)) {\r
++    ResetEvent(Connection->ovl.hEvent);\r
++    if (!WriteFile(Connection->conn, buffer_pos, Header->common.frag_len - hdr_size, &count, &Connection->ovl)) {\r
        WARN("WriteFile failed with error %ld\n", GetLastError());\r
        return GetLastError();\r
      }\r
++    if (!GetOverlappedResult(Connection->conn, &Connection->ovl, &count, TRUE)) {\r
++      WARN("GetOverlappedResult failed with error %ld\n", GetLastError());\r
++      return GetLastError();\r
++    }\r
  \r
      Header->common.flags &= ~RPC_FLG_FIRST;\r
    }\r
@@@ -309,9 -309,9 +319,15 @@@ RPC_STATUS RPCRT4_Receive(RpcConnectio
    TRACE("(%p, %p, %p)\n", Connection, Header, pMsg);\r
  \r
    /* read packet common header */\r
--  if (!ReadFile(Connection->conn, &common_hdr, sizeof(common_hdr), &dwRead, NULL)) {\r
++  ResetEvent(Connection->ovl.hEvent);\r
++  if (!ReadFile(Connection->conn, &common_hdr, sizeof(common_hdr), &dwRead, &Connection->ovl)) {\r
++    WARN("ReadFile failed with error %ld\n", GetLastError());\r
++    status = RPC_S_PROTOCOL_ERROR;\r
++    goto fail;\r
++  }\r
++  if (!GetOverlappedResult(Connection->conn, &Connection->ovl, &dwRead, TRUE)) {\r
      if (GetLastError() != ERROR_MORE_DATA) {\r
--      WARN("ReadFile failed with error %ld\n", GetLastError());\r
++      WARN("GetOverlappedResult failed with error %ld\n", GetLastError());\r
        status = RPC_S_PROTOCOL_ERROR;\r
        goto fail;\r
      }\r
    memcpy(*Header, &common_hdr, sizeof(common_hdr));\r
  \r
    /* read the rest of packet header */\r
++  ResetEvent(Connection->ovl.hEvent);\r
    if (!ReadFile(Connection->conn, &(*Header)->common + 1,\r
--                hdr_length - sizeof(common_hdr), &dwRead, NULL)) {\r
++                hdr_length - sizeof(common_hdr), &dwRead, &Connection->ovl)) {\r
++    WARN("ReadFile failed with error %ld\n", GetLastError());\r
++    status = RPC_S_PROTOCOL_ERROR;\r
++    goto fail;\r
++  }\r
++  if (!GetOverlappedResult(Connection->conn, &Connection->ovl, &dwRead, TRUE)) {\r
      if (GetLastError() != ERROR_MORE_DATA) {\r
--      WARN("ReadFile failed with error %ld\n", GetLastError());\r
++      WARN("GetOverlappedResult failed with error %ld\n", GetLastError());\r
        status = RPC_S_PROTOCOL_ERROR;\r
        goto fail;\r
      }\r
      goto fail;\r
    }\r
  \r
++\r
    /* read packet body */\r
    switch (common_hdr.ptype) {\r
    case PKT_RESPONSE:\r
        goto fail;\r
      }\r
  \r
--    if (data_length == 0) dwRead = 0; else\r
--    if (!ReadFile(Connection->conn, buffer_ptr, data_length, &dwRead, NULL)) {\r
--      if (GetLastError() != ERROR_MORE_DATA) {\r
++    if (data_length == 0) dwRead = 0; else {\r
++      ResetEvent(Connection->ovl.hEvent);\r
++      if (!ReadFile(Connection->conn, buffer_ptr, data_length, &dwRead, &Connection->ovl)) {\r
          WARN("ReadFile failed with error %ld\n", GetLastError());\r
          status = RPC_S_PROTOCOL_ERROR;\r
          goto fail;\r
        }\r
++      if (!GetOverlappedResult(Connection->conn, &Connection->ovl, &dwRead, TRUE)) {\r
++        if (GetLastError() != ERROR_MORE_DATA) {\r
++          WARN("GetOverlappedResult failed with error %ld\n", GetLastError());\r
++          status = RPC_S_PROTOCOL_ERROR;\r
++          goto fail;\r
++        }\r
++      }\r
      }\r
      if (dwRead != data_length) {\r
        status = RPC_S_PROTOCOL_ERROR;\r
        TRACE("next header\n");\r
  \r
        /* read the header of next packet */\r
--      if (!ReadFile(Connection->conn, *Header, hdr_length, &dwRead, NULL)) {\r
++      ResetEvent(Connection->ovl.hEvent);\r
++      if (!ReadFile(Connection->conn, *Header, hdr_length, &dwRead, &Connection->ovl)) {\r
++        WARN("ReadFile failed with error %ld\n", GetLastError());\r
++        status = GetLastError();\r
++        goto fail;\r
++      }\r
++      if (!GetOverlappedResult(Connection->conn, &Connection->ovl, &dwRead, TRUE)) {\r
          if (GetLastError() != ERROR_MORE_DATA) {\r
--          WARN("ReadFile failed with error %ld\n", GetLastError());\r
--          status = GetLastError();\r
++          WARN("GetOverlappedResult failed with error %ld\n", GetLastError());\r
++          status = RPC_S_PROTOCOL_ERROR;\r
            goto fail;\r
          }\r
        }\r
index 697ccb3,0000000..b96e022
mode 100644,000000..100644
--- /dev/null
@@@ -1,34 -1,0 +1,34 @@@
-       <library>wine_unicode</library>\r
 +<module name="setupapi" type="win32dll" baseaddress="${BASEADDRESS_SETUPAPI}">\r
 +      <dependency>winebuild</dependency>\r
 +      <importlibrary definition="setupapi.spec.def" />\r
 +      <include base="setupapi">.</include>\r
 +      <include base="ReactOS">include/wine</include>\r
 +      <define name="UNICODE" />\r
 +      <define name="_UNICODE" />\r
 +      <define name="__REACTOS__" />\r
 +      <define name="__USE_W32API" />\r
 +      <define name="_WIN32_IE">0x600</define>\r
 +      <define name="_WIN32_WINNT">0x501</define>\r
 +      <define name="WINVER">0x501</define>\r
 +      <define name="__WINESRC__" />\r
 +      <define name="_SETUPAPI_" />\r
 +      <library>wine</library>\r
 +      <library>ntdll</library>\r
 +      <library>kernel32</library>\r
 +      <library>advapi32</library>\r
 +      <library>user32</library>\r
 +      <library>rpcrt4</library>\r
 +      <library>version</library>\r
++      <file>cfgmgr.c</file>\r
 +      <file>devinst.c</file>\r
 +      <file>dirid.c</file>\r
 +      <file>diskspace.c</file>\r
 +      <file>install.c</file>\r
 +      <file>misc.c</file>\r
 +      <file>parser.c</file>\r
 +      <file>queue.c</file>\r
 +      <file>setupcab.c</file>\r
 +      <file>stubs.c</file>\r
 +      <file>setupapi.rc</file>\r
 +      <file>setupapi.spec</file>\r
 +</module>\r
index 357e683,0000000..ca01a3a
mode 100644,000000..100644
--- /dev/null
@@@ -1,43 -1,0 +1,42 @@@
-       <library>wine_unicode</library>\r
 +<module name="shlwapi" type="win32dll" baseaddress="${BASEADDRESS_SHLWAPI}">\r
 +      <dependency>winebuild</dependency>\r
 +      <importlibrary definition="shlwapi.spec.def" />\r
 +      <include base="shlwapi">.</include>\r
 +      <include base="ReactOS">include/wine</include>\r
 +      <define name="UNICODE" />\r
 +      <define name="_UNICODE" />\r
 +      <define name="__REACTOS__" />\r
 +      <define name="__USE_W32API" />\r
 +      <define name="_WIN32_IE">0x600</define>\r
 +      <define name="_WIN32_WINNT">0x501</define>\r
 +      <define name="WINVER">0x501</define>\r
 +      <define name="_SHLWAPI_"/>\r
 +      <define name="WINSHLWAPI">""</define>\r
 +      <linkerflag>-nostdlib</linkerflag>\r
 +      <linkerflag>-lgcc</linkerflag>\r
 +      <library>wine</library>\r
 +      <library>uuid</library>\r
 +      <library>msvcrt</library>\r
 +      <library>ntdll</library>\r
 +      <library>kernel32</library>\r
 +      <library>advapi32</library>\r
 +      <library>gdi32</library>\r
 +      <library>user32</library>\r
 +      <library>ole32</library>\r
 +      <library>oleaut32</library>\r
 +      <file>assoc.c</file>\r
 +      <file>clist.c</file>\r
 +      <file>istream.c</file>\r
 +      <file>msgbox.c</file>\r
 +      <file>ordinal.c</file>\r
 +      <file>path.c</file>\r
 +      <file>reg.c</file>\r
 +      <file>regstream.c</file>\r
 +      <file>shlwapi_main.c</file>\r
 +      <file>stopwatch.c</file>\r
 +      <file>string.c</file>\r
 +      <file>thread.c</file>\r
 +      <file>url.c</file>\r
 +      <file>wsprintf.c</file>\r
 +      <file>shlwapi.spec</file>\r
 +</module>\r
@@@ -426,6 -426,6 +426,11 @@@ IopBootLog(PUNICODE_STRING DriverName, 
  VOID
  IopSaveBootLogToFile(VOID);
  
++/* cancel.c */
++
++VOID STDCALL
++IoCancelThreadIo(PETHREAD Thread);
++
  /* errlog.c */
  
  NTSTATUS
@@@ -20,12 -20,12 +20,181 @@@ static KSPIN_LOCK CancelSpinLock
  
  /* FUNCTIONS *****************************************************************/
  
++/**
++ * @name NtCancelIoFile
++ *
++ * Cancel all pending I/O operations in the current thread for specified 
++ * file object.
++ *
++ * @param FileHandle
++ *        Handle to file object to cancel requests for. No specific
++ *        access rights are needed.
++ * @param IoStatusBlock
++ *        Pointer to status block which is filled with final completition
++ *        status on successful return.
++ *
++ * @return Status.
++ *
++ * @implemented
++ */
++
  NTSTATUS STDCALL
--NtCancelIoFile (IN    HANDLE                  FileHandle,
--              OUT     PIO_STATUS_BLOCK        IoStatusBlock)
++NtCancelIoFile(
++   IN HANDLE FileHandle,
++   OUT PIO_STATUS_BLOCK IoStatusBlock)
  {
--  UNIMPLEMENTED;
--  return(STATUS_NOT_IMPLEMENTED);
++   NTSTATUS Status;
++   PFILE_OBJECT FileObject;
++   PETHREAD Thread;
++   PLIST_ENTRY IrpEntry;
++   PIRP Irp;
++   KIRQL OldIrql;
++   BOOLEAN OurIrpsInList = FALSE;
++   LARGE_INTEGER Interval;
++
++   if ((ULONG_PTR)IoStatusBlock >= MmUserProbeAddress &&
++       KeGetPreviousMode() == UserMode)
++      return STATUS_ACCESS_VIOLATION;
++
++   Status = ObReferenceObjectByHandle(FileHandle, 0, IoFileObjectType,
++                                      KeGetPreviousMode(), (PVOID*)&FileObject,
++                                      NULL);
++   if (!NT_SUCCESS(Status))
++      return Status;
++
++   /* IRP cancellations are synchronized at APC_LEVEL. */
++   OldIrql = KfRaiseIrql(APC_LEVEL);
++
++   /*
++    * Walk the list of active IRPs and cancel the ones that belong to
++    * our file object.
++    */
++
++   Thread = PsGetCurrentThread();
++   for (IrpEntry = Thread->IrpList.Flink;
++        IrpEntry != &Thread->IrpList;
++        IrpEntry = IrpEntry->Flink)
++   {
++      Irp = CONTAINING_RECORD(IrpEntry, IRP, ThreadListEntry);
++      if (Irp->Tail.Overlay.OriginalFileObject == FileObject)
++      {
++         IoCancelIrp(Irp);
++         /* Don't break here, we want to cancel all IRPs for the file object. */
++         OurIrpsInList = TRUE;
++      }
++   }   
++
++   KfLowerIrql(OldIrql);
++
++   while (OurIrpsInList)
++   {
++      OurIrpsInList = FALSE;
++
++      /* Wait a short while and then look if all our IRPs were completed. */
++      Interval.QuadPart = -1000000; /* 100 milliseconds */
++      KeDelayExecutionThread(KernelMode, FALSE, &Interval);
++
++      OldIrql = KfRaiseIrql(APC_LEVEL);
++
++      /*
++       * Look in the list if all IRPs for the specified file object
++       * are completed (or cancelled). If someone sends a new IRP
++       * for our file object while we're here we can happily loop
++       * forever.
++       */
++
++      for (IrpEntry = Thread->IrpList.Flink;
++           IrpEntry != &Thread->IrpList;
++           IrpEntry = IrpEntry->Flink)
++      {
++         Irp = CONTAINING_RECORD(IrpEntry, IRP, ThreadListEntry);
++         if (Irp->Tail.Overlay.OriginalFileObject == FileObject)
++         {
++            OurIrpsInList = TRUE;
++            break;
++         }
++      }
++
++      KfLowerIrql(OldIrql);
++   }
++
++   _SEH_TRY
++   {
++      IoStatusBlock->Status = STATUS_SUCCESS;
++      IoStatusBlock->Information = 0;
++      Status = STATUS_SUCCESS;
++   }
++   _SEH_HANDLE
++   {
++      Status = STATUS_UNSUCCESSFUL;
++   }
++   _SEH_END;
++
++   ObDereferenceObject(FileObject);
++
++   return Status;
++}
++
++/**
++ * @name IoCancelThreadIo
++ *
++ * Cancel all pending I/O request associated with specified thread.
++ *
++ * @param Thread
++ *        Thread to cancel requests for.
++ */
++
++VOID STDCALL
++IoCancelThreadIo(PETHREAD Thread)
++{
++   PLIST_ENTRY IrpEntry;
++   PIRP Irp;
++   KIRQL OldIrql;
++   ULONG Retries = 3000;
++   LARGE_INTEGER Interval;
++
++   OldIrql = KfRaiseIrql(APC_LEVEL);
++
++   /*
++    * Start by cancelling all the IRPs in the current thread queue.
++    */
++
++   for (IrpEntry = Thread->IrpList.Flink;
++        IrpEntry != &Thread->IrpList;
++        IrpEntry = IrpEntry->Flink)
++   {
++      Irp = CONTAINING_RECORD(IrpEntry, IRP, ThreadListEntry);
++      IoCancelIrp(Irp);
++   }
++
++   /*
++    * Wait till all the IRPs are completed or cancelled.
++    */
++
++   while (!IsListEmpty(&Thread->IrpList))
++   {
++      KfLowerIrql(OldIrql);
++
++      /* Wait a short while and then look if all our IRPs were completed. */
++      Interval.QuadPart = -1000000; /* 100 milliseconds */
++      KeDelayExecutionThread(KernelMode, FALSE, &Interval);
++
++      /*
++       * Don't stay here forever if some broken driver doesn't complete
++       * the IRP.
++       */
++
++      if (Retries-- == 0)
++      {
++         /* FIXME: Handle this gracefully. */
++         DPRINT1("Thread with dead IRPs!");
++         ASSERT(FALSE);
++      }
++      
++      OldIrql = KfRaiseIrql(APC_LEVEL);
++   }
++
++   KfLowerIrql(OldIrql);
  }
  
  /*
@@@ -105,15 -105,15 +105,24 @@@ IopDeleteFile(PVOID ObjectBody
                                UserMode);
  #endif   
       KeResetEvent( &FileObject->Event );
--     Irp = IoBuildSynchronousFsdRequest(IRP_MJ_CLOSE,
--                                      FileObject->DeviceObject,
--                                      NULL,
--                                      0,
--                                      NULL,
--                                      &FileObject->Event,
--                                      NULL);
++
++     Irp = IoAllocateIrp(FileObject->DeviceObject->StackSize, TRUE);
++     if (Irp == NULL)
++     {
++        /*
++         * FIXME: This case should eventually be handled. We should wait
++         * until enough memory is available to allocate the IRP.
++         */
++        ASSERT(FALSE);
++     }
++   
++     Irp->UserEvent = &FileObject->Event;
++     Irp->Tail.Overlay.Thread = PsGetCurrentThread();
       Irp->Flags |= IRP_CLOSE_OPERATION;
++   
       StackPtr = IoGetNextIrpStackLocation(Irp);
++     StackPtr->MajorFunction = IRP_MJ_CLOSE;
++     StackPtr->DeviceObject = FileObject->DeviceObject;
       StackPtr->FileObject = FileObject;
     
       Status = IoCallDriver(FileObject->DeviceObject, Irp);
@@@ -268,7 -268,7 +268,6 @@@ IoAllocateIrp(CCHAR StackSize
        return(NULL);
      }
  
--  RtlZeroMemory(Irp, IoSizeOfIrp(StackSize));
    IoInitializeIrp(Irp,
                  IoSizeOfIrp(StackSize),
                  StackSize);
@@@ -364,6 -364,6 +363,9 @@@ IofCompleteRequest(PIRP Irp
        ULONG MasterIrpCount;
        PIRP MasterIrp = Irp->AssociatedIrp.MasterIrp;
  
++      /* This should never happen! */
++      ASSERT(IsListEmpty(&Irp->ThreadListEntry));
++
        MasterIrpCount = InterlockedDecrement(&MasterIrp->AssociatedIrp.IrpCount);
        while ((Mdl = Irp->MdlAddress))
        {
     /* Windows NT File System Internals, page 165 */
     if (Irp->Flags & (IRP_PAGING_IO|IRP_CLOSE_OPERATION))
     {
++      /* This should never happen! */
++      ASSERT(IsListEmpty(&Irp->ThreadListEntry));
++
        /* 
         * If MDL_IO_PAGE_READ is set, then the caller is responsible 
         * for deallocating of the mdl. 
@@@ -582,19 -582,19 +587,19 @@@ IoGetTopLevelIrp(VOID
  VOID STDCALL
  IoQueueThreadIrp(IN PIRP Irp)
  {
--/* undefine this when (if ever) implementing irp cancellation */
--#if 0
--  KIRQL oldIrql;
++   KIRQL OldIrql;
    
--  oldIrql = KfRaiseIrql(APC_LEVEL);
++   OldIrql = KfRaiseIrql(APC_LEVEL);
    
--  /* Synchronous irp's are queued to requestor thread. If they are not completed
--  when the thread exits, they are canceled (cleaned up).
--  -Gunnar */
--  InsertTailList(&PsGetCurrentThread()->IrpList, &Irp->ThreadListEntry);
++   /*
++    * Synchronous irp's are queued to requestor thread. If they are not
++    * completed when the thread exits, they are canceled (cleaned up).
++    * - Gunnar
++    */
++
++   InsertTailList(&Irp->Tail.Overlay.Thread->IrpList, &Irp->ThreadListEntry);
      
--  KfLowerIrql(oldIrql);    
--#endif
++   KfLowerIrql(OldIrql);
  }
  
  
Simple merge
Simple merge
index 4794940,0000000..9aa63b2
mode 100644,000000..100644
--- /dev/null
@@@ -1,366 -1,0 +1,367 @@@
 +<module name="ntoskrnl" type="kernel">\r
 +      <bootstrap base="reactos" />\r
 +      <importlibrary definition="ntoskrnl.def" />\r
 +      <define name="_SEH_NO_NATIVE_NLG" />\r
 +      <define name="_DISABLE_TIDENTS" />\r
 +      <define name="__NTOSKRNL__" />\r
 +      <define name="__3GB__" />\r
 +      <include base="kjs">include</include>\r
 +      <include base="ntoskrnl">include</include>\r
 +      <library>csq</library>\r
 +      <library>hal</library>\r
 +      <library>kjs</library>\r
 +      <library>pseh</library>\r
 +      <library>rosrtl</library>\r
 +      <library>rtl</library>\r
 +      <library>string</library>\r
 +      <directory name="ke">\r
 +              <if property="ARCH" value="i386">\r
 +                      <directory name="i386">\r
 +                              <file first="true">main.S</file>\r
 +                              <file>bios.c</file>\r
 +                              <file>brkpoint.c</file>\r
 +                              <file>bthread.S</file>\r
 +                              <file>exp.c</file>\r
 +                              <file>fpu.c</file>\r
 +                              <file>gdt.c</file>\r
 +                              <file>i386-mcount.S</file>\r
 +                              <file>idt.c</file>\r
 +                              <file>irq.c</file>\r
 +                              <file>irqhand.s</file>\r
 +                              <file>kernel.c</file>\r
 +                              <file>ldt.c</file>\r
 +                              <file>stkswitch.S</file>\r
 +                              <file>syscall.S</file>\r
 +                              <file>thread.c</file>\r
 +                              <file>tlbflush.S</file>\r
 +                              <file>trap.s</file>\r
 +                              <file>tskswitch.S</file>\r
 +                              <file>tss.c</file>\r
 +                              <file>usercall.c</file>\r
 +                              <file>usertrap.c</file>\r
 +                              <file>v86m.c</file>\r
 +                              <file>v86m_sup.S</file>\r
 +                              <file>vdm.c</file>\r
 +                      </directory>\r
 +              </if>\r
 +              <file>alert.c</file>\r
 +              <file>apc.c</file>\r
 +              <file>bug.c</file>\r
 +              <file>catch.c</file>\r
++              <file>clock.c</file>\r
 +              <file>critical.c</file>\r
 +              <file>device.c</file>\r
 +              <file>dpc.c</file>\r
 +              <file>error.c</file>\r
 +              <file>event.c</file>\r
 +              <file>gmutex.c</file>\r
 +              <file>ipi.c</file>\r
 +              <file>kqueue.c</file>\r
 +              <file>kthread.c</file>\r
 +              <file>main.c</file>\r
 +              <file>mutex.c</file>\r
 +              <file>process.c</file>\r
 +              <file>profile.c</file>\r
 +              <file>queue.c</file>\r
 +              <file>sem.c</file>\r
 +              <file>spinlock.c</file>\r
 +              <file>timer.c</file>\r
 +              <file>wait.c</file>\r
 +      </directory>\r
 +      <directory name="cc">\r
 +              <file>cacheman.c</file>\r
 +              <file>copy.c</file>\r
 +              <file>fs.c</file>\r
 +              <file>mdl.c</file>\r
 +              <file>pin.c</file>\r
 +              <file>view.c</file>\r
 +      </directory>\r
 +      <directory name="cm">\r
 +              <file>import.c</file>\r
 +              <file>ntfunc.c</file>\r
 +              <file>regfile.c</file>\r
 +              <file>registry.c</file>\r
 +              <file>regobj.c</file>\r
 +      </directory>\r
 +      <directory name="dbg">\r
 +              <if property="ARCH" value="i386">\r
 +                      <directory name="i386">\r
 +                              <if property="KDBG" value="1">\r
 +                                      <group>\r
 +                                              <file>i386-dis.c</file>\r
 +                                              <file>kdb_help.S</file>\r
 +                                      </group>\r
 +                              </if>\r
 +                      </directory>\r
 +              </if>\r
 +              <if property="KDBG" value="1">\r
 +                      <file>kdb.c</file>\r
 +                      <file>kdb_keyboard.c</file>\r
 +                      <file>kdb_serial.c</file>\r
 +                      <file>rdebug.c</file>\r
 +                      <file>profile.c</file>\r
 +              </if>\r
 +              <if property="DBG_OR_KDBG" value="true">\r
 +                      <file>kdb_stabs.c</file>\r
 +                      <file>kdb_symbols.c</file>\r
 +              </if>\r
 +              <file>dbgctrl.c</file>\r
 +              <file>errinfo.c</file>\r
 +              <file>print.c</file>\r
 +              <file>user.c</file>\r
 +      </directory>\r
 +      <directory name="ex">\r
 +              <if property="ARCH" value="i386">\r
 +                      <directory name="i386">\r
 +                              <file>interlck.c</file>\r
 +                      </directory>\r
 +              </if>\r
 +              <file>btree.c</file>\r
 +              <file>callback.c</file>\r
 +              <file>event.c</file>\r
 +              <file>evtpair.c</file>\r
 +              <file>fmutex.c</file>\r
 +              <file>hashtab.c</file>\r
 +              <file>init.c</file>\r
 +              <file>interlck.c</file>\r
 +              <file>list.c</file>\r
 +              <file>lookas.c</file>\r
 +              <file>mutant.c</file>\r
 +              <file>napi.c</file>\r
 +              <file>power.c</file>\r
 +              <file>profile.c</file>\r
 +              <file>resource.c</file>\r
 +              <file>rundown.c</file>\r
 +              <file>sem.c</file>\r
 +              <file>stree.c</file>\r
 +              <file>synch.c</file>\r
 +              <file>sysinfo.c</file>\r
 +              <file>time.c</file>\r
 +              <file>timer.c</file>\r
 +              <file>util.c</file>\r
 +              <file>uuid.c</file>\r
 +              <file>win32k.c</file>\r
 +              <file>work.c</file>\r
 +              <file>zone.c</file>\r
 +              <file>zw.S</file>\r
 +      </directory>\r
 +      <directory name="fs">\r
 +              <file>dbcsname.c</file>\r
 +              <file>filelock.c</file>\r
 +              <file>mcb.c</file>\r
 +              <file>mdl.c</file>\r
 +              <file>name.c</file>\r
 +              <file>notify.c</file>\r
 +              <file>oplock.c</file>\r
 +              <file>pool.c</file>\r
 +              <file>tunnel.c</file>\r
 +              <file>unc.c</file>\r
 +              <file>util.c</file>\r
 +      </directory>\r
 +      <directory name="inbv">\r
 +              <file>inbv.c</file>\r
 +      </directory>\r
 +      <directory name="io">\r
 +              <file>adapter.c</file>\r
 +              <file>arcname.c</file>\r
 +              <file>bootlog.c</file>\r
 +              <file>buildirp.c</file>\r
 +              <file>cancel.c</file>\r
 +              <file>cleanup.c</file>\r
 +              <file>cntrller.c</file>\r
 +              <file>create.c</file>\r
 +              <file>device.c</file>\r
 +              <file>deviface.c</file>\r
 +              <file>dir.c</file>\r
 +              <file>driver.c</file>\r
 +              <file>efi.c</file>\r
 +              <file>errlog.c</file>\r
 +              <file>error.c</file>\r
 +              <file>event.c</file>\r
 +              <file>file.c</file>\r
 +              <file>flush.c</file>\r
 +              <file>fs.c</file>\r
 +              <file>iocomp.c</file>\r
 +              <file>ioctrl.c</file>\r
 +              <file>iomgr.c</file>\r
 +              <file>iowork.c</file>\r
 +              <file>irp.c</file>\r
 +              <file>irq.c</file>\r
 +              <file>lock.c</file>\r
 +              <file>mailslot.c</file>\r
 +              <file>mdl.c</file>\r
 +              <file>npipe.c</file>\r
 +              <file>page.c</file>\r
 +              <file>parttab.c</file>\r
 +              <file>plugplay.c</file>\r
 +              <file>pnpdma.c</file>\r
 +              <file>pnpmgr.c</file>\r
 +              <file>pnpnotify.c</file>\r
 +              <file>pnpreport.c</file>\r
 +              <file>pnproot.c</file>\r
 +              <file>process.c</file>\r
 +              <file>queue.c</file>\r
 +              <file>rawfs.c</file>\r
 +              <file>remlock.c</file>\r
 +              <file>resource.c</file>\r
 +              <file>rw.c</file>\r
 +              <file>share.c</file>\r
 +              <file>shutdown.c</file>\r
 +              <file>symlink.c</file>\r
 +              <file>timer.c</file>\r
 +              <file>vpb.c</file>\r
 +              <file>wdm.c</file>\r
 +              <file>wmi.c</file>\r
 +              <file>xhaldisp.c</file>\r
 +              <file>xhaldrv.c</file>\r
 +      </directory>\r
 +      <directory name="kd">\r
 +              <file>dlog.c</file>\r
 +              <file>gdbstub.c</file>\r
 +              <file>kdebug.c</file>\r
 +              <file>mda.c</file>\r
 +              <file>service.c</file>\r
 +      </directory>\r
 +      <directory name="ldr">\r
 +              <file>init.c</file>\r
 +              <file>loader.c</file>\r
 +              <file>resource.c</file>\r
 +              <file>rtl.c</file>\r
 +              <file>sysdll.c</file>\r
 +              <file>userldr.c</file>\r
 +      </directory>\r
 +      <directory name="lpc">\r
 +              <file>close.c</file>\r
 +              <file>complete.c</file>\r
 +              <file>connect.c</file>\r
 +              <file>create.c</file>\r
 +              <file>listen.c</file>\r
 +              <file>port.c</file>\r
 +              <file>query.c</file>\r
 +              <file>queue.c</file>\r
 +              <file>receive.c</file>\r
 +              <file>reply.c</file>\r
 +              <file>send.c</file>\r
 +      </directory>\r
 +      <directory name="mm">\r
 +              <if property="ARCH" value="i386">\r
 +                      <directory name="i386">\r
 +                              <file>memsafe.s</file>\r
 +                              <file>page.c</file>\r
 +                              <file>pfault.c</file>\r
 +                      </directory>\r
 +              </if>\r
 +              <file>anonmem.c</file>\r
 +              <file>aspace.c</file>\r
 +              <file>balance.c</file>\r
 +              <file>cont.c</file>\r
 +              <file>drvlck.c</file>\r
 +              <file>elf32.c</file>\r
 +              <file>elf64.c</file>\r
 +              <file>freelist.c</file>\r
 +              <file>iospace.c</file>\r
 +              <file>kmap.c</file>\r
 +              <file>marea.c</file>\r
 +              <file>mdl.c</file>\r
 +              <file>mm.c</file>\r
 +              <file>mminit.c</file>\r
 +              <file>mpw.c</file>\r
 +              <file>ncache.c</file>\r
 +              <file>npool.c</file>\r
 +              <file>pagefile.c</file>\r
 +              <file>pageop.c</file>\r
 +              <file>pager.c</file>\r
 +              <file>pagfault.c</file>\r
 +              <file>paging.c</file>\r
 +              <file>pe.c</file>\r
 +              <file>physical.c</file>\r
 +              <file>pool.c</file>\r
 +              <file>ppool.c</file>\r
 +              <file>region.c</file>\r
 +              <file>rmap.c</file>\r
 +              <file>section.c</file>\r
 +              <file>verifier.c</file>\r
 +              <file>virtual.c</file>\r
 +              <file>wset.c</file>\r
 +      </directory>\r
 +      <directory name="ob">\r
 +              <file>dirobj.c</file>\r
 +              <file>handle.c</file>\r
 +              <file>namespc.c</file>\r
 +              <file>ntobj.c</file>\r
 +              <file>object.c</file>\r
 +              <file>sdcache.c</file>\r
 +              <file>security.c</file>\r
 +              <file>symlink.c</file>\r
 +      </directory>\r
 +      <directory name="po">\r
 +              <file>power.c</file>\r
 +      </directory>\r
 +      <directory name="ps">\r
 +              <if property="ARCH" value="i386">\r
 +                      <directory name="i386">\r
 +                              <file>continue.c</file>\r
 +                      </directory>\r
 +              </if>\r
 +              <file>cid.c</file>\r
 +              <file>create.c</file>\r
 +              <file>debug.c</file>\r
 +              <file>idle.c</file>\r
 +              <file>job.c</file>\r
 +              <file>kill.c</file>\r
 +              <file>locale.c</file>\r
 +              <file>process.c</file>\r
 +              <file>psmgr.c</file>\r
 +              <file>suspend.c</file>\r
 +              <file>thread.c</file>\r
 +              <file>tinfo.c</file>\r
 +              <file>w32call.c</file>\r
 +              <file>win32.c</file>\r
 +      </directory>\r
 +      <directory name="rtl">\r
 +              <if property="ARCH" value="i386">\r
 +                      <directory name="i386">\r
 +                              <file>alldiv.s</file>\r
 +                              <file>allmul.s</file>\r
 +                              <file>allrem.s</file>\r
 +                              <file>allshl.s</file>\r
 +                              <file>allshr.s</file>\r
 +                              <file>aulldiv.s</file>\r
 +                              <file>aullrem.s</file>\r
 +                              <file>aullshr.s</file>\r
 +                              <file>exception.c</file>\r
 +                              <file>seh.s</file>\r
 +                      </directory>\r
 +              </if>\r
 +              <file>atom.c</file>\r
 +              <file>capture.c</file>\r
 +              <file>ctype.c</file>\r
 +              <file>handle.c</file>\r
 +              <file>libsupp.c</file>\r
 +              <file>message.c</file>\r
 +              <file>misc.c</file>\r
 +              <file>nls.c</file>\r
 +              <file>purecall.c</file>\r
 +              <file>rangelist.c</file>\r
 +              <file>regio.c</file>\r
 +              <file>sprintf.c</file>\r
 +              <file>stdlib.c</file>\r
 +              <file>string.c</file>\r
 +              <file>strtok.c</file>\r
 +              <file>swprintf.c</file>\r
 +              <file>wstring.c</file>\r
 +      </directory>\r
 +      <directory name="se">\r
 +              <file>access.c</file>\r
 +              <file>acl.c</file>\r
 +              <file>audit.c</file>\r
 +              <file>lsa.c</file>\r
 +              <file>luid.c</file>\r
 +              <file>priv.c</file>\r
 +              <file>sd.c</file>\r
 +              <file>semgr.c</file>\r
 +              <file>sid.c</file>\r
 +              <file>token.c</file>\r
 +      </directory>\r
 +      <file>ntoskrnl.rc</file>\r
 +</module>\r
@@@ -1070,4 -1079,31 +1079,36 @@@ ObFindHandleForObject(IN PEPROCESS Proc
    return STATUS_UNSUCCESSFUL;
  }
  
+ VOID
+ ObpGetNextHandleByProcessCount(PSYSTEM_HANDLE_TABLE_ENTRY_INFO pshi,
+                                PEPROCESS Process,
+                                int Count)
+ {
+       ULONG P;
+       KIRQL oldIrql;
+ //      pshi->HandleValue;
++/* 
++   This will never work with ROS! M$, I guess uses 0 -> 65535.
++   Ros uses 0 -> 4294967295!
++ */
++
+       P = (ULONG) Process->UniqueProcessId;
+       pshi->UniqueProcessId = (USHORT) P;
+       KeAcquireSpinLock( &Process->HandleTable.ListLock, &oldIrql );
+ //      pshi->GrantedAccess;
+ //      pshi->Object;
+ //      pshi->ObjectTypeIndex;
+ //      pshi->HandleAttributes;
+       KeReleaseSpinLock( &Process->HandleTable.ListLock, oldIrql );
+       return;
+ }
  /* EOF */
@@@ -144,6 -158,6 +158,9 @@@ PsTerminateCurrentThread(NTSTATUS ExitS
   
     PsLockProcess(CurrentProcess, FALSE);
  
++   /* Cancel I/O for the thread. */
++   IoCancelThreadIo(CurrentThread);
++
     /* Remove the thread from the thread list of its process */
     RemoveEntryList(&CurrentThread->ThreadListEntry);
     Last = IsListEmpty(&CurrentProcess->ThreadListHead);
index b308c47,0000000..a7cdac0
mode 100644,000000..100644
--- /dev/null
@@@ -1,23 -1,0 +1,24 @@@
 +<module name="csrss" type="nativecui">\r
 +      <include base="csrss">.</include>\r
 +      <include base="csrss">include</include>\r
 +      <define name="__USE_W32API" />\r
 +      <define name="_WIN32_WINNT">0x0600</define>\r
 +      <define name="WINVER">0x0501</define>\r
 +      <library>rosrtl</library>\r
 +      <library>ntdll</library>\r
++      <library>smdll</library>\r
 +      <directory name="api">\r
 +              <file>handle.c</file>\r
 +              <file>process.c</file>\r
 +              <file>user.c</file>\r
 +              <file>wapi.c</file>\r
 +      </directory>\r
 +      <file>csrss.c</file>\r
 +      <file>init.c</file>\r
 +      <file>print.c</file>\r
 +      <file>video.c</file>\r
 +      <file>csrss.rc</file>\r
 +</module>\r
 +<directory name="win32csr">\r
 +      <xi:include href="win32csr/win32csr.xml" />\r
 +</directory>\r
index c71a071,0000000..930edeb
mode 100644,000000..100644
--- /dev/null
@@@ -1,21 -1,0 +1,26 @@@
-       <file>Debug.c</file>\r
 +<module name="smss" type="nativecui">\r
 +      <include base="smss">.</include>\r
 +      <define name="_DISABLE_TIDENTS" />\r
 +      <library>ntdll</library>\r
++      <library>smdll</library>\r
++      <linkerflag>-lgcc</linkerflag>\r
 +      <file>client.c</file>\r
++      <file>debug.c</file>\r
 +      <file>init.c</file>\r
 +      <file>initdosdev.c</file>\r
 +      <file>initenv.c</file>\r
 +      <file>initheap.c</file>\r
 +      <file>initmv.c</file>\r
 +      <file>initobdir.c</file>\r
 +      <file>initpage.c</file>\r
 +      <file>initreg.c</file>\r
 +      <file>initrun.c</file>\r
 +      <file>initss.c</file>\r
 +      <file>initwkdll.c</file>\r
++      <file>print.c</file>\r
 +      <file>smapi.c</file>\r
++      <file>smapicomp.c</file>\r
++      <file>smapiexec.c</file>\r
 +      <file>smss.c</file>\r
 +      <file>smss.rc</file>\r
 +</module>\r
index 499454c,0000000..b54bc33
mode 100644,000000..100644
--- /dev/null
@@@ -1,60 -1,0 +1,57 @@@
- <directory name="regedt32">\r
-       <xi:include href="regedt32/regedt32.xml" />\r
- </directory>\r
 +<directory name="autochk">\r
 +      <xi:include href="autochk/autochk.xml" />\r
 +</directory>\r
 +<directory name="calc">\r
 +      <xi:include href="calc/calc.xml" />\r
 +</directory>\r
 +<directory name="cmd">\r
 +      <xi:include href="cmd/cmd.xml" />\r
 +</directory>\r
 +<directory name="explorer">\r
 +      <xi:include href="explorer/explorer.xml" />\r
 +</directory>\r
 +<directory name="ibrowser">\r
 +      <xi:include href="ibrowser/ibrowser.xml" />\r
 +</directory>\r
 +<directory name="format">\r
 +      <xi:include href="format/format.xml" />\r
 +</directory>\r
 +<directory name="notepad">\r
 +      <xi:include href="notepad/notepad.xml" />\r
 +</directory>\r
 +<directory name="regedit">\r
 +      <xi:include href="regedit/regedit.xml" />\r
 +</directory>\r
 +<directory name="regsvr32">\r
 +      <xi:include href="regsvr32/regsvr32.xml" />\r
 +</directory>\r
 +<directory name="reporterror">\r
 +      <xi:include href="reporterror/reporterror.xml" />\r
 +</directory>\r
 +<directory name="services">\r
 +      <xi:include href="services/services.xml" />\r
 +</directory>\r
 +<directory name="setup">\r
 +      <xi:include href="setup/setup.xml" />\r
 +</directory>\r
 +<directory name="taskmgr">\r
 +      <xi:include href="taskmgr/taskmgr.xml" />\r
 +</directory>\r
 +<directory name="userinit">\r
 +      <xi:include href="userinit/userinit.xml" />\r
 +</directory>\r
 +<directory name="usetup">\r
 +      <xi:include href="usetup/usetup.xml" />\r
 +</directory>\r
 +<directory name="vmwinst">\r
 +      <xi:include href="vmwinst/vmwinst.xml" />\r
 +</directory>\r
 +<directory name="winefile">\r
 +      <xi:include href="winefile/winefile.xml" />\r
 +</directory>\r
 +<directory name="winlogon">\r
 +      <xi:include href="winlogon/winlogon.xml" />\r
 +</directory>\r
 +<directory name="welcome">\r
 +      <xi:include href="welcome/welcome.xml" />\r
 +</directory>\r
index 468625f,0000000..7994c7d
mode 100644,000000..100644
--- /dev/null
@@@ -1,66 -1,0 +1,68 @@@
 +<module name="explorer" type="win32gui">\r
 +      <linkerflag>-fexceptions</linkerflag>\r
 +      <include base="explorer">.</include>\r
++      <include base="ReactOS">include/expat</include>\r
 +      <define name="__USE_W32API" />\r
 +      <define name="UNICODE" />\r
 +      <define name="WIN32" />\r
 +      <define name="_ROS_" />\r
 +      <define name="_WIN32_IE">0x0600</define>\r
 +      <define name="_WIN32_WINNT">0x0501</define>\r
 +      <define name="WINVER">0x0500</define>\r
++      <define name="__WINDRES__" />\r
 +      <library>uuid</library>\r
 +      <library>kernel32</library>\r
 +      <library>gdi32</library>\r
 +      <library>ws2_32</library>\r
 +      <library>msimg32</library>\r
 +      <library>comctl32</library>\r
 +      <library>ole32</library>\r
 +      <library>oleaut32</library>\r
 +      <library>shell32</library>\r
 +      <library>expat</library>\r
 +      <library>notifyhook</library>\r
 +      <directory name="desktop">\r
 +              <file>desktop.cpp</file>\r
 +      </directory>\r
 +      <directory name="dialogs">\r
 +              <file>searchprogram.cpp</file>\r
 +              <file>settings.cpp</file>\r
 +      </directory>\r
 +      <directory name="shell">\r
 +              <file>entries.cpp</file>\r
 +              <file>fatfs.cpp</file>\r
 +              <file>filechild.cpp</file>\r
 +              <file>shellfs.cpp</file>\r
 +              <file>mainframe.cpp</file>\r
 +              <file>ntobjfs.cpp</file>\r
 +              <file>pane.cpp</file>\r
 +              <file>regfs.cpp</file>\r
 +              <file>shellbrowser.cpp</file>\r
 +              <file>startup.c</file>\r
 +              <file>unixfs.cpp</file>\r
 +              <file>webchild.cpp</file>\r
 +              <file>winfs.cpp</file>\r
 +      </directory>\r
 +      <directory name="taskbar">\r
 +              <file>desktopbar.cpp</file>\r
 +              <file>favorites.cpp</file>\r
 +              <file>taskbar.cpp</file>\r
 +              <file>startmenu.cpp</file>\r
 +              <file>traynotify.cpp</file>\r
 +              <file>quicklaunch.cpp</file>\r
 +      </directory>\r
 +      <directory name="utility">\r
 +              <file>shellclasses.cpp</file>\r
 +              <file>utility.cpp</file>\r
 +              <file>window.cpp</file>\r
 +              <file>dragdropimpl.cpp</file>\r
 +              <file>shellbrowserimpl.cpp</file>\r
 +              <file>xmlstorage.cpp</file>\r
 +      </directory>\r
 +      <file>explorer.cpp</file>\r
 +      <file>i386-stub-win32.c</file>\r
 +      <file>explorer.rc</file>\r
 +</module>\r
 +<directory name="notifyhook">\r
 +      <xi:include href="notifyhook/notifyhook.xml" />\r
 +</directory>\r
index a381bf7,0000000..2305957
mode 100644,000000..100644
--- /dev/null
@@@ -1,29 -1,0 +1,30 @@@
 +<module name="ibrowser" type="win32gui">\r
 +      <linkerflag>-fexceptions</linkerflag>\r
 +      <include base="ibrowser">.</include>\r
++      <include base="ReactOS">include/expat</include>\r
 +      <define name="__USE_W32API" />\r
 +      <define name="UNICODE" />\r
 +      <define name="WIN32" />\r
 +      <define name="_ROS_" />\r
 +      <define name="_WIN32_IE">0x0600</define>\r
 +      <define name="_WIN32_WINNT">0x0501</define>\r
 +      <define name="WINVER">0x0500</define>\r
 +      <library>uuid</library>\r
 +      <library>kernel32</library>\r
 +      <library>gdi32</library>\r
 +      <library>comctl32</library>\r
 +      <library>ole32</library>\r
 +      <library>oleaut32</library>\r
 +      <library>shell32</library>\r
 +      <library>expat</library>\r
 +      <directory name="utility">\r
 +              <file>utility.cpp</file>\r
 +              <file>window.cpp</file>\r
 +              <file>xmlstorage.cpp</file>\r
 +      </directory>\r
 +      <file>ibrowser.cpp</file>\r
 +      <file>favorites.cpp</file>\r
 +      <file>mainframe.cpp</file>\r
 +      <file>webchild.cpp</file>\r
 +      <file>ibrowser.rc</file>\r
 +</module>\r
Simple merge
index 3a8a6a1,0000000..f58aeb1
mode 100644,000000..100644
--- /dev/null
@@@ -1,134 -1,0 +1,135 @@@
 +<module name="win32k" type="kernelmodedriver">\r
 +      <importlibrary definition="win32k.def" />\r
 +      <include base="win32k">.</include>\r
 +      <include base="win32k">include</include>\r
 +      <include base="ntoskrnl">include</include>\r
 +      <include base="freetype">include</include>\r
 +      <define name="UNICODE" />\r
 +      <define name="__USE_W32API" />\r
 +      <define name="_WIN32_WINNT">0x0501</define>\r
 +      <define name="WINVER">0x600</define>\r
 +      <define name="_WIN32K_" />\r
 +      <library>rosrtl</library>\r
 +      <library>ntoskrnl</library>\r
 +      <library>hal</library>\r
 +      <library>pseh</library>\r
 +      <library>freetype</library>\r
 +      <directory name="dib">\r
 +              <file>dib1bpp.c</file>\r
 +              <file>dib4bpp.c</file>\r
 +              <file>dib8bpp.c</file>\r
 +              <file>dib16bpp.c</file>\r
 +              <file>dib24bpp.c</file>\r
 +              <file>dib32bpp.c</file>\r
 +              <file>dib.c</file>\r
 +      </directory>\r
 +      <directory name="eng">\r
 +              <file>bitblt.c</file>\r
 +              <file>brush.c</file>\r
 +              <file>clip.c</file>\r
 +              <file>copybits.c</file>\r
 +              <file>debug.c</file>\r
 +              <file>device.c</file>\r
 +              <file>driverobj.c</file>\r
 +              <file>error.c</file>\r
 +              <file>event.c</file>\r
 +              <file>float.c</file>\r
 +              <file>gradient.c</file>\r
 +              <file>lineto.c</file>\r
 +              <file>mem.c</file>\r
 +              <file>misc.c</file>\r
 +              <file>mouse.c</file>\r
 +              <file>paint.c</file>\r
 +              <file>palette.c</file>\r
 +              <file>perfcnt.c</file>\r
 +              <file>semaphor.c</file>\r
 +              <file>sort.c</file>\r
 +              <file>surface.c</file>\r
 +              <file>transblt.c</file>\r
 +              <file>window.c</file>\r
 +              <file>xlate.c</file>\r
 +      </directory>\r
 +      <directory name="ldr">\r
 +              <file>loader.c</file>\r
 +      </directory>\r
 +      <directory name="main">\r
 +              <file>dllmain.c</file>\r
 +              <file>svctabm.c</file>\r
 +      </directory>\r
 +      <directory name="misc">\r
 +              <file>driver.c</file>\r
 +              <file>error.c</file>\r
 +              <file>math.c</file>\r
 +              <file>object.c</file>\r
++              <file>ssec.c</file>\r
 +      </directory>\r
 +      <directory name="ntddraw">\r
 +              <file>ddraw.c</file>\r
 +              <file>stubs.c</file>\r
 +      </directory>\r
 +      <directory name="ntuser">\r
 +              <file>accelerator.c</file>\r
 +              <file>callback.c</file>\r
 +              <file>caret.c</file>\r
 +              <file>class.c</file>\r
 +              <file>clipboard.c</file>\r
 +              <file>csr.c</file>\r
 +              <file>cursoricon.c</file>\r
 +              <file>desktop.c</file>\r
 +              <file>focus.c</file>\r
 +              <file>guicheck.c</file>\r
 +              <file>hook.c</file>\r
 +              <file>hotkey.c</file>\r
 +              <file>input.c</file>\r
 +              <file>keyboard.c</file>\r
 +              <file>menu.c</file>\r
 +              <file>message.c</file>\r
 +              <file>metric.c</file>\r
 +              <file>misc.c</file>\r
 +              <file>monitor.c</file>\r
 +              <file>msgqueue.c</file>\r
 +              <file>painting.c</file>\r
 +              <file>prop.c</file>\r
 +              <file>scrollbar.c</file>\r
 +              <file>stubs.c</file>\r
 +              <file>timer.c</file>\r
 +              <file>useratom.c</file>\r
 +              <file>vis.c</file>\r
 +              <file>windc.c</file>\r
 +              <file>window.c</file>\r
 +              <file>winpos.c</file>\r
 +              <file>winsta.c</file>\r
 +      </directory>\r
 +      <directory name="objects">\r
 +              <file>bezier.c</file>\r
 +              <file>bitmaps.c</file>\r
 +              <file>brush.c</file>\r
 +              <file>cliprgn.c</file>\r
 +              <file>color.c</file>\r
 +              <file>coord.c</file>\r
 +              <file>dc.c</file>\r
 +              <file>dib.c</file>\r
 +              <file>fillshap.c</file>\r
 +              <file>font.c</file>\r
 +              <file>gdiobj.c</file>\r
 +              <file>icm.c</file>\r
 +              <file>line.c</file>\r
 +              <file>metafile.c</file>\r
 +              <file>paint.c</file>\r
 +              <file>palette.c</file>\r
 +              <file>path.c</file>\r
 +              <file>pen.c</file>\r
 +              <file>polyfill.c</file>\r
 +              <file>print.c</file>\r
 +              <file>rect.c</file>\r
 +              <file>region.c</file>\r
 +              <file>stockobj.c</file>\r
 +              <file>text.c</file>\r
 +              <file>wingl.c</file>\r
 +      </directory>\r
 +      <directory name="stubs">\r
 +              <file>stubs.c</file>\r
 +              <file>xpstubs.c</file>\r
 +      </directory>\r
 +      <file>win32k.rc</file>\r
 +</module>\r
 -PATH_TO_TOP = ..
 +RMKDIR_BASE = tools
  
 -include $(PATH_TO_TOP)/rules.mak
 +RMKDIR_TARGET = \
 +      $(ROS_INTERMEDIATE)$(RMKDIR_BASE)$(SEP)rmkdir$(EXEPOSTFIX)
  
 -CFLAGS += -Wall -Werror
 +RMKDIR_SOURCES = \
 +      $(RMKDIR_BASE)$(SEP)rmkdir.c
  
 -TOOLS = \
 -      regtests$(EXE_POSTFIX) \
 -      rcopy$(EXE_POSTFIX) \
 -      rdel$(EXE_POSTFIX) \
 -      rline$(EXE_POSTFIX) \
 -      rmkdir$(EXE_POSTFIX) \
 -      rrmdir$(EXE_POSTFIX) \
 -      rsym$(EXE_POSTFIX) \
 -      rtouch$(EXE_POSTFIX) \
 -      mkflpimg$(EXE_POSTFIX) \
 -      depends$(EXE_POSTFIX)
 +RMKDIR_OBJECTS = \
 +      $(RMKDIR_SOURCES:.c=.o)
  
 -LIBS = lib_unicode lib_wpp
 +RMKDIR_HOST_CFLAGS = -g -Werror -Wall
  
 -CLEAN_FILES = $(TOOLS)
 +RMKDIR_HOST_LFLAGS = -g
  
 -all: $(TOOLS) $(LIBS) zlib_target wmc_target cabman_target cdmake_target mkhive_target rgenstat_target \
 -      wine2ros_target pipetools_target winebuild_target bin2res_target wrc_target widl_target \
 -      buildno_target
 +$(RMKDIR_TARGET): $(RMKDIR_OBJECTS)
 +      ${host_gcc} $(RMKDIR_OBJECTS) $(RMKDIR_HOST_LFLAGS) -o $(RMKDIR_TARGET)
  
 -regtests$(EXE_POSTFIX): regtests.c
 -      @$(HOST_CC) $(CFLAGS) -o regtests$(EXE_POSTFIX) regtests.c
 +$(RMKDIR_OBJECTS): %.o : %.c
 +      ${host_gcc} $(RMKDIR_HOST_CFLAGS) -c $< -o $@
  
 -ifeq ($(HOST),mingw32-linux)
 -rcopy$(EXE_POSTFIX): rcopy.c
 -      @$(HOST_CC) $(CFLAGS) -DUNIX_PATHS rcopy.c -o rcopy$(EXE_POSTFIX)
 -endif
 -ifeq ($(HOST),mingw32-windows)
 -rcopy$(EXE_POSTFIX): rcopy.c
 -      @$(HOST_CC) $(CFLAGS) -DDOS_PATHS rcopy.c -o rcopy$(EXE_POSTFIX)
 -endif
 +.PHONY: rmkdir_clean
 +rmkdir_clean:
 +      -@$(rm) $(RMKDIR_TARGET) $(RMKDIR_OBJECTS) 2>$(NUL)
 +clean: rmkdir_clean
  
 -rdel$(EXE_POSTFIX): rdel.c
 -      @$(HOST_CC) $(CFLAGS) rdel.c -o rdel$(EXE_POSTFIX)
--
- BUILDNO_BASE = tools
 -ifeq ($(HOST),mingw32-linux)
 -rline$(EXE_POSTFIX): rline.c
 -      @$(HOST_CC) $(CFLAGS) -DUNIX_PATHS rline.c -o rline$(EXE_POSTFIX)
 -endif
 -ifeq ($(HOST),mingw32-windows)
 -rline$(EXE_POSTFIX): rmkdir.c
 -      @$(HOST_CC) $(CFLAGS) -DDOS_PATHS rline.c -o rline$(EXE_POSTFIX)
 -endif
--
- BUILDNO_TARGET = \
-       $(ROS_INTERMEDIATE)$(BUILDNO_BASE)$(SEP)buildno$(EXEPOSTFIX)
 -ifeq ($(HOST),mingw32-linux)
 -rmkdir$(EXE_POSTFIX): rmkdir.c
 -      @$(HOST_CC) $(CFLAGS) -DUNIX_PATHS rmkdir.c -o rmkdir$(EXE_POSTFIX)
 -endif
 -ifeq ($(HOST),mingw32-windows)
 -rmkdir$(EXE_POSTFIX): rmkdir.c
 -      @$(HOST_CC) $(CFLAGS) -DDOS_PATHS rmkdir.c -o rmkdir$(EXE_POSTFIX)
 -endif
--
- BUILDNO_SOURCES = \
-       $(BUILDNO_BASE)$(SEP)buildno.c
 -ifeq ($(HOST),mingw32-linux)
 -rrmdir$(EXE_POSTFIX): rrmdir.c
 -      @$(HOST_CC) $(CFLAGS) -DUNIX_PATHS rrmdir.c -o rrmdir$(EXE_POSTFIX)
 -endif
 -ifeq ($(HOST),mingw32-windows)
 -rrmdir$(EXE_POSTFIX): rrmdir.c
 -      @$(HOST_CC) $(CFLAGS) -DDOS_PATHS rrmdir.c -o rrmdir$(EXE_POSTFIX)
 -endif
--
- BUILDNO_OBJECTS = \
-       $(BUILDNO_SOURCES:.c=.o)
 -ifeq ($(HOST),mingw32-linux)
 -rsym$(EXE_POSTFIX): rsym.c
 -      @$(HOST_CC) $(CFLAGS) -DUNIX_PATHS rsym.c -o rsym$(EXE_POSTFIX)
 -endif
 -ifeq ($(HOST),mingw32-windows)
 -rsym$(EXE_POSTFIX): rsym.c
 -      @$(HOST_CC) $(CFLAGS) -DDOS_PATHS rsym.c -o rsym$(EXE_POSTFIX)
 -endif
--
- BUILDNO_HOST_CFLAGS = -g -Werror -Wall
 -ifeq ($(HOST),mingw32-linux)
 -rtouch$(EXE_POSTFIX): rtouch.c
 -      @$(HOST_CC) $(CFLAGS) -DUNIX_PATHS rtouch.c -o rtouch$(EXE_POSTFIX)
 -endif
 -ifeq ($(HOST),mingw32-windows)
 -rtouch$(EXE_POSTFIX): rtouch.c
 -      @$(HOST_CC) $(CFLAGS) -DDOS_PATHS rtouch.c -o rtouch$(EXE_POSTFIX)
 -endif
--
- BUILDNO_HOST_LFLAGS = -g
 -ifeq ($(HOST),mingw32-linux)
 -mkflpimg$(EXE_POSTFIX): mkflpimg.c
 -      @$(HOST_CC) $(CFLAGS) -DUNIX_PATHS mkflpimg.c -o mkflpimg$(EXE_POSTFIX)
 -endif
 -ifeq ($(HOST),mingw32-windows)
 -mkflpimg$(EXE_POSTFIX): mkflpimg.c
 -      @$(HOST_CC) $(CFLAGS) -DDOS_PATHS mkflpimg.c -o mkflpimg$(EXE_POSTFIX)
 -endif
--
- $(BUILDNO_TARGET): $(BUILDNO_OBJECTS)
-       ${host_gcc} $(BUILDNO_OBJECTS) $(BUILDNO_HOST_LFLAGS) -o $(BUILDNO_TARGET)
 -depends$(EXE_POSTFIX): depends.c
 -      @$(HOST_CC) $(CFLAGS) depends.c -o depends$(EXE_POSTFIX)
--
- $(BUILDNO_OBJECTS): %.o : %.c
-       ${host_gcc} $(BUILDNO_HOST_CFLAGS) -c $< -o $@
 -zlib_target:
 -      $(MAKE) --silent -C ../lib/zlib -f Makefile.host
--
- .PHONY: buildno_clean
- buildno_clean:
-       -@$(rm) $(BUILDNO_TARGET) $(BUILDNO_OBJECTS) 2>$(NUL)
- clean: buildno_clean
 -wmc_target:
 -      $(MAKE) --silent -C wmc wmc$(EXE_POSTFIX)
--
- include$(SEP)reactos$(SEP)buildno.h: $(BUILDNO_TARGET)
-       $(EXEPREFIX)$(BUILDNO_TARGET) include$(SEP)reactos$(SEP)buildno.h
 -cabman_target:
 -      $(MAKE) --silent -C cabman cabman$(EXE_POSTFIX)
 -
 -cdmake_target:
 -      $(MAKE) --silent -C cdmake cdmake$(EXE_POSTFIX)
 -
 -mkhive_target:
 -      $(MAKE) --silent -C mkhive mkhive$(EXE_POSTFIX)
 -
 -rgenstat_target:
 -      $(MAKE) --silent -C rgenstat rgenstat$(EXE_POSTFIX)
 -
 -wine2ros_target:
 -      $(MAKE) --silent -C wine2ros wine2ros$(EXE_POSTFIX)
 -
 -pipetools_target:
 -ifeq ($(HOST),mingw32-windows)
 -      $(MAKE) --silent -C pipetools
 -endif
 -
 -winebuild_target:
 -      $(MAKE) --silent -C winebuild winebuild$(EXE_POSTFIX)
 -
 -bin2res_target:
 -      $(MAKE) --silent -C bin2res bin2res$(EXE_POSTFIX)
 -
 -wrc_target: $(LIBS)
 -      $(MAKE) --silent -C wrc wrc$(EXE_POSTFIX)
 -
 -widl_target: lib_wpp
 -      $(MAKE) --silent -C widl widl$(EXE_POSTFIX)
 -
 -buildno_target:
 -      $(MAKE) --silent -C buildno buildno$(EXE_POSTFIX)
 -
 -lib_unicode:
 -      $(MAKE) -C unicode
 -
 -lib_wpp:
 -      $(MAKE) -C wpp
 -
 -.PHONY: wmc_target cdmake_target mkhive_target rgenstat_target pipetools_target wrc_target \
 -        widl_target buildno_target lib_unicode lib_wpp
 -
 -
 -ifeq ($(HOST),mingw32-linux)
 -clean:
 -      $(MAKE) --silent -C buildno clean
 -      $(MAKE) --silent -C widl clean
 -      $(MAKE) --silent -C wrc clean
 -      $(MAKE) --silent -C cabman clean
 -      $(MAKE) --silent -C cdmake clean
 -      $(MAKE) --silent -C mkhive clean
 -      $(MAKE) --silent -C wmc clean
 -      $(MAKE) --silent -C rgenstat clean
 -      $(MAKE) --silent -C wine2ros clean
 -      $(MAKE) --silent -C winebuild clean
 -      $(MAKE) --silent -C bin2res clean
 -      $(MAKE) --silent -C ../lib/zlib -f Makefile.host clean
 -      $(MAKE) -C wpp clean
 -      $(MAKE) -C unicode clean
 -      @rm mkconfig
 -      @rm $(TOOLS)
 -endif
 -ifeq ($(HOST),mingw32-windows)
 -clean:
 -      $(MAKE) --silent -C buildno clean
 -      $(MAKE) --silent -C widl clean
 -      $(MAKE) --silent -C wrc clean
 -      $(MAKE) --silent -C cabman clean
 -      $(MAKE) --silent -C cdmake clean
 -      $(MAKE) --silent -C mkhive clean
 -      $(MAKE) --silent -C wmc clean
 -      $(MAKE) --silent -C rgenstat clean
 -      $(MAKE) --silent -C pipetools clean
 -      $(MAKE) --silent -C wine2ros clean
 -      $(MAKE) --silent -C winebuild clean
 -      $(MAKE) --silent -C bin2res clean
 -      $(MAKE) --silent -C ../lib/zlib -f Makefile.host clean
 -      $(MAKE) -C wpp clean
 -      $(MAKE) -C unicode clean
 -      -@del *$(EXE_POSTFIX)
 -endif
--
 -.PHONY: all clean
++include tools/buildno/Makefile
 +include tools/cdmake/makefile
 +include tools/nci/makefile
 +include tools/rbuild/makefile
++include tools/unicode/Makefile
 +include tools/wmc/makefile
++include tools/wpp/Makefile
++include tools/wrc/makefile
index 0000000,a5e3cd7..a7136ac
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,42 +1,32 @@@
 -PATH_TO_TOP = ../..
++BUILDNO_BASE = tools$(SEP)buildno
 -TARGET = buildno$(EXE_POSTFIX)
++BUILDNO_TARGET = \
++      $(ROS_INTERMEDIATE)$(BUILDNO_BASE)$(SEP)buildno$(EXEPOSTFIX)
 -all: $(TARGET)
++BUILDNO_SOURCES = \
++      $(BUILDNO_BASE)$(SEP)buildno.cpp \
++      $(BUILDNO_BASE)$(SEP)exception.cpp \
++      $(BUILDNO_BASE)$(SEP)ssprintf.cpp \
++      $(BUILDNO_BASE)$(SEP)XML.cpp
 -OBJECTS = buildno.o XML.o exception.o ssprintf.o
++BUILDNO_OBJECTS = \
++      $(BUILDNO_SOURCES:.cpp=.o)
 -CLEAN_FILES = *.o buildno$(EXE_POSTFIX)
++BUILDNO_HOST_CFLAGS = -Iinclude/reactos -g -Werror -Wall
 -HOST_CXXFLAGS = -I$(PATH_TO_TOP)/include/reactos -g -Wall -Werror
++BUILDNO_HOST_LFLAGS = -g
 -buildno.o: buildno.cpp $(PATH_TO_TOP)/include/reactos/version.h
 -      $(HOST_CXX) $(HOST_CXXFLAGS) -o buildno.o -c buildno.cpp
++$(BUILDNO_TARGET): $(BUILDNO_OBJECTS)
++      ${host_gpp} $(BUILDNO_OBJECTS) $(BUILDNO_HOST_CFLAGS) -o $(BUILDNO_TARGET)
 -XML.o: XML.cpp
 -      $(HOST_CXX) $(HOST_CXXFLAGS) -o XML.o -c XML.cpp
++$(BUILDNO_OBJECTS): %.o : %.cpp include$(SEP)reactos$(SEP)version.h
++      ${host_gpp} $(BUILDNO_HOST_CFLAGS) -c $< -o $@
 -exception.o: exception.cpp
 -      $(HOST_CXX) $(HOST_CXXFLAGS) -o exception.o -c exception.cpp
++.PHONY: buildno_clean
++buildno_clean:
++      -@$(rm) $(BUILDNO_TARGET) $(BUILDNO_OBJECTS) 2>$(NUL)
 -ssprintf.o: ssprintf.cpp
 -      $(HOST_CXX) $(HOST_CXXFLAGS) -o ssprintf.o -c ssprintf.cpp
++BUILDNO_H = include$(SEP)reactos$(SEP)buildno.h
 -buildno$(EXE_POSTFIX): $(OBJECTS)
 -      $(HOST_CXX) -g $(OBJECTS) -o $(TARGET)
 -      @$(EXE_PREFIX)buildno$(EXE_POSTFIX)
 -
 -ifeq ($(HOST),mingw32-linux)
 -clean:
 -      -rm -f *.o $(TARGET)
 -      -rm $(PATH_TO_TOP)/include/reactos/buildno.h
 -endif
 -ifneq ($(HOST),mingw32-linux)
 -clean:
 -      -del *.o $(TARGET)
 -      -del ..\..\include\reactos\buildno.h
 -endif
 -
 -.PHONY: clean
 -
 -include $(PATH_TO_TOP)/rules.mak
++$(BUILDNO_H): $(BUILDNO_TARGET)
++      $(EXEPREFIX)$(BUILDNO_TARGET) $(BUILDNO_H)
Simple merge
index ea99758,0000000..fa848a5
mode 100644,000000..100644
--- /dev/null
@@@ -1,281 -1,0 +1,282 @@@
 +\r
 +#include "../../pch.h"\r
 +\r
 +#include "mingw.h"\r
 +#include <assert.h>\r
 +\r
 +using std::string;\r
 +using std::vector;\r
 +\r
 +static class MingwFactory : public Backend::Factory\r
 +{\r
 +public:\r
 +      MingwFactory() : Factory ( "mingw" ) {}\r
 +      Backend* operator() ( Project& project )\r
 +      {\r
 +              return new MingwBackend ( project );\r
 +      }\r
 +} factory;\r
 +\r
 +\r
 +MingwBackend::MingwBackend ( Project& project )\r
 +      : Backend ( project )\r
 +{\r
 +}\r
 +\r
 +void\r
 +MingwBackend::Process ()\r
 +{\r
 +      CreateMakefile ();\r
 +      GenerateHeader ();\r
 +      GenerateGlobalVariables ();\r
 +      GenerateAllTarget ();\r
 +      GenerateInitTarget ();\r
 +      for ( size_t i = 0; i < ProjectNode.modules.size (); i++ )\r
 +      {\r
 +              Module& module = *ProjectNode.modules[i];\r
 +              ProcessModule ( module );\r
 +      }\r
 +      CheckAutomaticDependencies ();\r
 +      CloseMakefile ();\r
 +}\r
 +\r
 +void\r
 +MingwBackend::CreateMakefile ()\r
 +{\r
 +      fMakefile = fopen ( ProjectNode.makefile.c_str (), "w" );\r
 +      if ( !fMakefile )\r
 +              throw AccessDeniedException ( ProjectNode.makefile );\r
 +      MingwModuleHandler::SetMakefile ( fMakefile );\r
 +}\r
 +\r
 +void\r
 +MingwBackend::CloseMakefile () const\r
 +{\r
 +      if (fMakefile)\r
 +              fclose ( fMakefile );\r
 +}\r
 +\r
 +void\r
 +MingwBackend::GenerateHeader () const\r
 +{\r
 +      fprintf ( fMakefile, "# THIS FILE IS AUTOMATICALLY GENERATED, EDIT 'ReactOS.xml' INSTEAD\n\n" );\r
 +}\r
 +\r
 +void\r
 +MingwBackend::GenerateProjectCFlagsMacro ( const char* assignmentOperation,\r
 +                                           const vector<Include*>& includes,\r
 +                                           const vector<Define*>& defines ) const\r
 +{\r
 +      size_t i;\r
 +\r
 +      fprintf (\r
 +              fMakefile,\r
 +              "PROJECT_CFLAGS %s",\r
 +              assignmentOperation );\r
 +      for ( i = 0; i < includes.size(); i++ )\r
 +      {\r
 +              fprintf (\r
 +                      fMakefile,\r
 +                      " -I%s",\r
 +                      includes[i]->directory.c_str() );\r
 +      }\r
 +\r
 +      for ( i = 0; i < defines.size(); i++ )\r
 +      {\r
 +              Define& d = *defines[i];\r
 +              fprintf (\r
 +                      fMakefile,\r
 +                      " -D%s",\r
 +                      d.name.c_str() );\r
 +              if ( d.value.size() )\r
 +                      fprintf (\r
 +                              fMakefile,\r
 +                              "=%s",\r
 +                              d.value.c_str() );\r
 +      }\r
 +      fprintf ( fMakefile, "\n" );\r
 +}\r
 +\r
 +void\r
 +MingwBackend::GenerateGlobalCFlagsAndProperties (\r
 +      const char* assignmentOperation,\r
 +      const vector<Property*>& properties,\r
 +      const vector<Include*>& includes,\r
 +      const vector<Define*>& defines,\r
 +      const vector<If*>& ifs ) const\r
 +{\r
 +      size_t i;\r
 +\r
 +      for ( i = 0; i < properties.size(); i++ )\r
 +      {\r
 +              Property& prop = *properties[i];\r
 +              fprintf ( fMakefile, "%s := %s\n",\r
 +                      prop.name.c_str(),\r
 +                      prop.value.c_str() );\r
 +      }\r
 +\r
 +      if ( includes.size() || defines.size() )\r
 +      {\r
 +              GenerateProjectCFlagsMacro ( assignmentOperation,\r
 +                                     includes,\r
 +                                     defines );\r
 +      }\r
 +\r
 +      for ( i = 0; i < ifs.size(); i++ )\r
 +      {\r
 +              If& rIf = *ifs[i];\r
 +              if ( rIf.defines.size() || rIf.includes.size() || rIf.ifs.size() )\r
 +              {\r
 +                      fprintf (\r
 +                              fMakefile,\r
 +                              "ifeq (\"$(%s)\",\"%s\")\n",\r
 +                              rIf.property.c_str(),\r
 +                              rIf.value.c_str() );\r
 +                      GenerateGlobalCFlagsAndProperties (\r
 +                              "+=",\r
 +                              rIf.properties,\r
 +                              rIf.includes,\r
 +                              rIf.defines,\r
 +                              rIf.ifs );\r
 +                      fprintf (\r
 +                              fMakefile,\r
 +                              "endif\n\n" );\r
 +              }\r
 +      }\r
 +}\r
 +\r
 +string\r
 +MingwBackend::GenerateProjectLFLAGS () const\r
 +{\r
 +      string lflags;\r
 +      for ( size_t i = 0; i < ProjectNode.linkerFlags.size (); i++ )\r
 +      {\r
 +              LinkerFlag& linkerFlag = *ProjectNode.linkerFlags[i];\r
 +              if ( lflags.length () > 0 )\r
 +                      lflags += " ";\r
 +              lflags += linkerFlag.flag;\r
 +      }\r
 +      return lflags;\r
 +}\r
 +\r
 +void\r
 +MingwBackend::GenerateGlobalVariables () const\r
 +{\r
 +      fprintf ( fMakefile, "mkdir = tools" SSEP "rmkdir" EXEPOSTFIX "\n" );\r
 +      fprintf ( fMakefile, "winebuild = tools" SSEP "winebuild" SSEP "winebuild" EXEPOSTFIX "\n" );\r
 +      fprintf ( fMakefile, "bin2res = tools" SSEP "bin2res" SSEP "bin2res" EXEPOSTFIX "\n" );\r
 +      fprintf ( fMakefile, "cabman = tools" SSEP "cabman" SSEP "cabman" EXEPOSTFIX "\n" );\r
 +      fprintf ( fMakefile, "cdmake = tools" SSEP "cdmake" SSEP "cdmake" EXEPOSTFIX "\n" );\r
++      fprintf ( fMakefile, "wrc = tools" SSEP "wrc" SSEP "wrc" EXEPOSTFIX "\n" );\r
 +      fprintf ( fMakefile, "\n" );\r
 +      GenerateGlobalCFlagsAndProperties (\r
 +              "=",\r
 +              ProjectNode.properties,\r
 +              ProjectNode.includes,\r
 +              ProjectNode.defines,\r
 +              ProjectNode.ifs );\r
 +      fprintf ( fMakefile, "PROJECT_RCFLAGS = $(PROJECT_CFLAGS)\n" );\r
 +      fprintf ( fMakefile, "PROJECT_LFLAGS = %s\n",\r
 +                GenerateProjectLFLAGS ().c_str () );\r
 +      fprintf ( fMakefile, "\n" );\r
 +}\r
 +\r
 +bool\r
 +MingwBackend::IncludeInAllTarget ( const Module& module ) const\r
 +{\r
 +      if ( module.type == ObjectLibrary )\r
 +              return false;\r
 +      if ( module.type == BootSector )\r
 +              return false;\r
 +      if ( module.type == Iso )\r
 +              return false;\r
 +      return true;\r
 +}\r
 +\r
 +void\r
 +MingwBackend::GenerateAllTarget () const\r
 +{\r
 +      fprintf ( fMakefile, "all:" );\r
 +      for ( size_t i = 0; i < ProjectNode.modules.size (); i++ )\r
 +      {\r
 +              Module& module = *ProjectNode.modules[i];\r
 +              if ( IncludeInAllTarget ( module ) )\r
 +              {\r
 +                      fprintf ( fMakefile,\r
 +                                " %s",\r
 +                                FixupTargetFilename ( module.GetPath () ).c_str () );\r
 +              }\r
 +      }\r
 +      fprintf ( fMakefile, "\n\t\n\n" );\r
 +}\r
 +\r
 +string\r
 +MingwBackend::GetBuildToolDependencies () const\r
 +{\r
 +      string dependencies;\r
 +      for ( size_t i = 0; i < ProjectNode.modules.size (); i++ )\r
 +      {\r
 +              Module& module = *ProjectNode.modules[i];\r
 +              if ( module.type == BuildTool )\r
 +              {\r
 +                      if ( dependencies.length () > 0 )\r
 +                              dependencies += " ";\r
 +                      dependencies += module.GetDependencyPath ();\r
 +              }\r
 +      }\r
 +      return dependencies;\r
 +}\r
 +\r
 +void\r
 +MingwBackend::GenerateInitTarget () const\r
 +{\r
 +      fprintf ( fMakefile,\r
 +                "init:");\r
 +      fprintf ( fMakefile,\r
 +                " $(ROS_INTERMEDIATE)." SSEP "tools" );\r
 +      fprintf ( fMakefile,\r
 +                " %s",\r
 +                GetBuildToolDependencies ().c_str () );\r
 +      fprintf ( fMakefile,\r
 +                " %s",\r
 +                "include" SSEP "reactos" SSEP "buildno.h" );\r
 +      fprintf ( fMakefile,\r
 +                "\n\t\n\n" );\r
 +\r
 +      fprintf ( fMakefile,\r
 +                "$(ROS_INTERMEDIATE)." SSEP "tools:\n" );\r
 +      fprintf ( fMakefile,\r
 +                "ifneq ($(ROS_INTERMEDIATE),)\n" );\r
 +      fprintf ( fMakefile,\r
 +                "\t${nmkdir} $(ROS_INTERMEDIATE)\n" );\r
 +      fprintf ( fMakefile,\r
 +                "endif\n" );\r
 +      fprintf ( fMakefile,\r
 +                "\t${nmkdir} $(ROS_INTERMEDIATE)." SSEP "tools\n" );\r
 +      fprintf ( fMakefile,\r
 +                "\n" );\r
 +}\r
 +\r
 +void\r
 +MingwBackend::CheckAutomaticDependencies ()\r
 +{\r
 +      AutomaticDependency automaticDependency ( ProjectNode );\r
 +      automaticDependency.Process ();\r
 +      automaticDependency.CheckAutomaticDependencies ();\r
 +}\r
 +\r
 +void\r
 +MingwBackend::ProcessModule ( Module& module ) const\r
 +{\r
 +      MingwModuleHandler* h = MingwModuleHandler::LookupHandler (\r
 +              module.node.location,\r
 +              module.type );\r
 +      h->Process ( module );\r
 +      h->GenerateDirectoryTargets ();\r
 +}\r
 +\r
 +string\r
 +FixupTargetFilename ( const string& targetFilename )\r
 +{\r
 +      return string("$(ROS_INTERMEDIATE)") + NormalizeFilename ( targetFilename );\r
 +}\r
index 9a82bff,0000000..5098698
mode 100644,000000..100644
--- /dev/null
@@@ -1,2126 -1,0 +1,2144 @@@
-                      const string& newExtension )\r
 +#include "../../pch.h"\r
 +#include <assert.h>\r
 +\r
 +#include "../../rbuild.h"\r
 +#include "mingw.h"\r
 +#include "modulehandler.h"\r
 +\r
 +using std::string;\r
 +using std::vector;\r
 +using std::map;\r
 +using std::set;\r
 +\r
 +typedef set<string> set_string;\r
 +\r
 +map<ModuleType,MingwModuleHandler*>*\r
 +MingwModuleHandler::handler_map = NULL;\r
 +set_string\r
 +MingwModuleHandler::directory_set;\r
 +int\r
 +MingwModuleHandler::ref = 0;\r
 +\r
 +FILE*\r
 +MingwModuleHandler::fMakefile = NULL;\r
 +\r
 +string\r
 +ReplaceExtension ( const string& filename,\r
-                "\t%s %s -o %s ${%s}\n",\r
-                "${windres}",\r
++                   const string& newExtension )\r
 +{\r
 +      size_t index = filename.find_last_of ( '/' );\r
 +      if (index == string::npos) index = 0;\r
 +      string tmp = filename.substr( index, filename.size() - index );\r
 +      size_t ext_index = tmp.find_last_of( '.' );\r
 +      if (ext_index != string::npos) \r
 +              return filename.substr ( 0, index + ext_index ) + newExtension;\r
 +      return filename + newExtension;\r
 +}\r
 +\r
 +\r
 +MingwModuleHandler::MingwModuleHandler ( ModuleType moduletype )\r
 +{\r
 +      if ( !ref++ )\r
 +              handler_map = new map<ModuleType,MingwModuleHandler*>;\r
 +      (*handler_map)[moduletype] = this;\r
 +}\r
 +\r
 +MingwModuleHandler::~MingwModuleHandler()\r
 +{\r
 +      if ( !--ref )\r
 +      {\r
 +              delete handler_map;\r
 +              handler_map = NULL;\r
 +      }\r
 +}\r
 +\r
 +const string &\r
 +MingwModuleHandler::PassThruCacheDirectory ( const string &file ) const \r
 +{\r
 +      directory_set.insert ( GetDirectory ( file ) );\r
 +      return file;\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::SetMakefile ( FILE* f )\r
 +{\r
 +      fMakefile = f;\r
 +}\r
 +\r
 +MingwModuleHandler*\r
 +MingwModuleHandler::LookupHandler ( const string& location,\r
 +                                    ModuleType moduletype )\r
 +{\r
 +      if ( !handler_map )\r
 +              throw Exception ( "internal tool error: no registered module handlers" );\r
 +      MingwModuleHandler* h = (*handler_map)[moduletype];\r
 +      if ( !h )\r
 +      {\r
 +              throw UnknownModuleTypeException ( location, moduletype );\r
 +              return NULL;\r
 +      }\r
 +      return h;\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetWorkingDirectory () const\r
 +{\r
 +      return ".";\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetBasename ( const string& filename ) const\r
 +{\r
 +      size_t index = filename.find_last_of ( '.' );\r
 +      if ( index != string::npos )\r
 +              return filename.substr ( 0, index );\r
 +      return "";\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetActualSourceFilename ( const string& filename ) const\r
 +{\r
 +      string extension = GetExtension ( filename );\r
 +      if ( extension == ".spec" || extension == "SPEC" )\r
 +      {\r
 +              string basename = GetBasename ( filename );\r
 +              return basename + ".stubs.c";\r
 +      }\r
 +      else\r
 +              return filename;\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetModuleArchiveFilename ( const Module& module ) const\r
 +{\r
 +      return ReplaceExtension ( FixupTargetFilename ( module.GetPath () ),\r
 +                                ".a" );\r
 +}\r
 +\r
 +bool\r
 +MingwModuleHandler::IsGeneratedFile ( const File& file ) const\r
 +{\r
 +      string extension = GetExtension ( file.name );\r
 +      if ( extension == ".spec" || extension == "SPEC" )\r
 +              return true;\r
 +      else\r
 +              return false;\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetImportLibraryDependency ( const Module& importedModule ) const\r
 +{\r
 +      if ( importedModule.type == ObjectLibrary )\r
 +              return GetObjectsMacro ( importedModule );\r
 +      else\r
 +              return PassThruCacheDirectory ( FixupTargetFilename ( importedModule.GetDependencyPath () ) );\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetImportLibraryDependencies ( const Module& module ) const\r
 +{\r
 +      string dependencies ( "" );\r
 +      for ( size_t i = 0; i < module.libraries.size (); i++ )\r
 +      {\r
 +              if ( dependencies.size () > 0 )\r
 +                      dependencies += " ";\r
 +              const Module* importedModule = module.project.LocateModule ( module.libraries[i]->name );\r
 +              assert ( importedModule != NULL );\r
 +              dependencies += GetImportLibraryDependency ( *importedModule );\r
 +      }\r
 +      return dependencies;\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetModuleDependencies ( const Module& module ) const\r
 +{\r
 +      if ( module.dependencies.size () == 0 )\r
 +              return "";\r
 +      \r
 +      string dependencies ( "" );\r
 +      for ( size_t i = 0; i < module.dependencies.size (); i++ )\r
 +      {\r
 +              if ( dependencies.size () > 0 )\r
 +                      dependencies += " ";\r
 +              const Dependency* dependency = module.dependencies[i];\r
 +              const Module* dependencyModule = dependency->dependencyModule;\r
 +              dependencies += dependencyModule->GetTargets ();\r
 +      }\r
 +      string definitionDependencies = GetDefinitionDependencies ( module );\r
 +      if ( dependencies.length () > 0 && definitionDependencies.length () > 0 )\r
 +              dependencies += " " + definitionDependencies;\r
 +      else if ( definitionDependencies.length () > 0 )\r
 +              dependencies = definitionDependencies;\r
 +      return dependencies;\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetAllDependencies ( const Module& module ) const\r
 +{\r
 +      string dependencies = GetImportLibraryDependencies ( module );\r
 +      string s = GetModuleDependencies ( module );\r
 +      if ( s.length () > 0 )\r
 +      {\r
 +              dependencies += " ";\r
 +              dependencies += s;\r
 +      }\r
 +      return dependencies;\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetSourceFilenames ( const Module& module,\r
 +                                           bool includeGeneratedFiles ) const\r
 +{\r
 +      size_t i;\r
 +\r
 +      string sourceFilenames ( "" );\r
 +      for ( i = 0; i < module.files.size (); i++ )\r
 +      {\r
 +              if ( includeGeneratedFiles || !IsGeneratedFile ( *module.files[i] ) )\r
 +                      sourceFilenames += " " + GetActualSourceFilename ( module.files[i]->name );\r
 +      }\r
 +      vector<If*> ifs = module.ifs;\r
 +      for ( i = 0; i < ifs.size (); i++ )\r
 +      {\r
 +              size_t j;\r
 +              If& rIf = *ifs[i];\r
 +              for ( j = 0; j < rIf.ifs.size (); j++ )\r
 +                      ifs.push_back ( rIf.ifs[j] );\r
 +              for ( j = 0; j < rIf.files.size (); j++ )\r
 +              {\r
 +                      if ( includeGeneratedFiles || !IsGeneratedFile ( *rIf.files[j] ) )\r
 +                              sourceFilenames += " " + GetActualSourceFilename ( rIf.files[j]->name );\r
 +              }\r
 +      }\r
 +      return sourceFilenames;\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetSourceFilenames ( const Module& module ) const\r
 +{\r
 +      return GetSourceFilenames ( module,\r
 +                                  true );\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetSourceFilenamesWithoutGeneratedFiles ( const Module& module ) const\r
 +{\r
 +      return GetSourceFilenames ( module,\r
 +                                  false );\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetObjectFilename ( const string& sourceFilename )\r
 +{\r
 +      string newExtension;\r
 +      string extension = GetExtension ( sourceFilename );\r
 +      if ( extension == ".rc" || extension == ".RC" )\r
 +              newExtension = ".coff";\r
 +      else if ( extension == ".spec" || extension == ".SPEC" )\r
 +              newExtension = ".stubs.o";\r
 +      else\r
 +              newExtension = ".o";\r
 +      return FixupTargetFilename ( ReplaceExtension ( sourceFilename, newExtension ) );\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetObjectFilenames ( const Module& module ) const\r
 +{\r
 +      if ( module.files.size () == 0 )\r
 +              return "";\r
 +      \r
 +      string objectFilenames ( "" );\r
 +      for ( size_t i = 0; i < module.files.size (); i++ )\r
 +      {\r
 +              if ( objectFilenames.size () > 0 )\r
 +                      objectFilenames += " ";\r
 +              objectFilenames += PassThruCacheDirectory ( MingwModuleHandler::GetObjectFilename ( module.files[i]->name ) );\r
 +      }\r
 +      return objectFilenames;\r
 +}\r
 +\r
 +bool\r
 +MingwModuleHandler::IncludeDirectoryTarget ( const string& directory ) const\r
 +{\r
 +      if ( directory == "$(ROS_INTERMEDIATE)." SSEP "tools")\r
 +              return false;\r
 +      else\r
 +              return true;\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateDirectoryTargets () const\r
 +{\r
 +      if ( directory_set.size () == 0 )\r
 +              return;\r
 +      \r
 +      set_string::iterator i;\r
 +      fprintf ( fMakefile, "directories::" );\r
 +\r
 +      for ( i = directory_set.begin ();\r
 +            i != directory_set.end ();\r
 +            i++ )\r
 +      {\r
 +              if ( IncludeDirectoryTarget ( *i ) )\r
 +              {\r
 +                      fprintf ( fMakefile,\r
 +                                " %s",\r
 +                                i->c_str () );\r
 +              }\r
 +      }\r
 +\r
 +      fprintf ( fMakefile, "\n\n" );\r
 +\r
 +      for ( i = directory_set.begin ();\r
 +            i != directory_set.end ();\r
 +            i++ )\r
 +      {\r
 +              if ( IncludeDirectoryTarget ( *i ) )\r
 +              {\r
 +                      fprintf ( fMakefile,\r
 +                                "%s ",\r
 +                                i->c_str () );\r
 +              }\r
 +      }\r
 +\r
 +      fprintf ( fMakefile, \r
 +                "::\n\t${mkdir} $@\n\n" );\r
 +\r
 +      directory_set.clear ();\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GenerateGccDefineParametersFromVector ( const vector<Define*>& defines ) const\r
 +{\r
 +      string parameters;\r
 +      for ( size_t i = 0; i < defines.size (); i++ )\r
 +      {\r
 +              Define& define = *defines[i];\r
 +              if (parameters.length () > 0)\r
 +                      parameters += " ";\r
 +              parameters += "-D";\r
 +              parameters += define.name;\r
 +              if (define.value.length () > 0)\r
 +              {\r
 +                      parameters += "=";\r
 +                      parameters += define.value;\r
 +              }\r
 +      }\r
 +      return parameters;\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GenerateGccDefineParameters ( const Module& module ) const\r
 +{\r
 +      string parameters = GenerateGccDefineParametersFromVector ( module.project.defines );\r
 +      string s = GenerateGccDefineParametersFromVector ( module.defines );\r
 +      if ( s.length () > 0 )\r
 +      {\r
 +              parameters += " ";\r
 +              parameters += s;\r
 +      }\r
 +      return parameters;\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::ConcatenatePaths ( const string& path1,\r
 +                                         const string& path2 ) const\r
 +{\r
 +      if ( ( path1.length () == 0 ) || ( path1 == "." ) || ( path1 == "./" ) )\r
 +              return path2;\r
 +      if ( path1[path1.length ()] == CSEP )\r
 +              return path1 + path2;\r
 +      else\r
 +              return path1 + CSEP + path2;\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GenerateGccIncludeParametersFromVector ( const vector<Include*>& includes ) const\r
 +{\r
 +      string parameters;\r
 +      for ( size_t i = 0; i < includes.size (); i++ )\r
 +      {\r
 +              Include& include = *includes[i];\r
 +              if ( parameters.length () > 0 )\r
 +                      parameters += " ";\r
 +              parameters += "-I" + include.directory;\r
 +      }\r
 +      return parameters;\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GenerateGccIncludeParameters ( const Module& module ) const\r
 +{\r
 +      string parameters = GenerateGccIncludeParametersFromVector ( module.includes );\r
 +      string s = GenerateGccIncludeParametersFromVector ( module.project.includes );\r
 +      if ( s.length () > 0 )\r
 +      {\r
 +              parameters += " ";\r
 +              parameters += s;\r
 +      }\r
 +      return parameters;\r
 +}\r
 +\r
 +\r
 +string\r
 +MingwModuleHandler::GenerateCompilerParametersFromVector ( const vector<CompilerFlag*>& compilerFlags ) const\r
 +{\r
 +      string parameters;\r
 +      for ( size_t i = 0; i < compilerFlags.size (); i++ )\r
 +      {\r
 +              CompilerFlag& compilerFlag = *compilerFlags[i];\r
 +              if ( parameters.length () > 0 )\r
 +                      parameters += " ";\r
 +              parameters += compilerFlag.flag;\r
 +      }\r
 +      return parameters;\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GenerateLinkerParametersFromVector ( const vector<LinkerFlag*>& linkerFlags ) const\r
 +{\r
 +      string parameters;\r
 +      for ( size_t i = 0; i < linkerFlags.size (); i++ )\r
 +      {\r
 +              LinkerFlag& linkerFlag = *linkerFlags[i];\r
 +              if ( parameters.length () > 0 )\r
 +                      parameters += " ";\r
 +              parameters += linkerFlag.flag;\r
 +      }\r
 +      return parameters;\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GenerateLinkerParameters ( const Module& module ) const\r
 +{\r
 +      return GenerateLinkerParametersFromVector ( module.linkerFlags );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateMacro ( const char* assignmentOperation,\r
 +                                    const string& macro,\r
 +                                    const vector<Include*>& includes,\r
 +                                    const vector<Define*>& defines,\r
 +                                    const vector<CompilerFlag*>* compilerFlags ) const\r
 +{\r
 +      size_t i;\r
 +\r
 +      fprintf (\r
 +              fMakefile,\r
 +              "%s %s",\r
 +              macro.c_str(),\r
 +              assignmentOperation );\r
 +      \r
 +      if ( compilerFlags != NULL )\r
 +      {\r
 +              string compilerParameters = GenerateCompilerParametersFromVector ( *compilerFlags );\r
 +              if ( compilerParameters.size () > 0 )\r
 +              {\r
 +                      fprintf (\r
 +                              fMakefile,\r
 +                              " %s",\r
 +                              compilerParameters.c_str () );\r
 +              }\r
 +      }\r
 +\r
 +      for ( i = 0; i < includes.size(); i++ )\r
 +      {\r
 +              fprintf (\r
 +                      fMakefile,\r
 +                      " -I%s",\r
 +                      includes[i]->directory.c_str() );\r
 +      }\r
 +      for ( i = 0; i < defines.size(); i++ )\r
 +      {\r
 +              Define& d = *defines[i];\r
 +              fprintf (\r
 +                      fMakefile,\r
 +                      " -D%s",\r
 +                      d.name.c_str() );\r
 +              if ( d.value.size() )\r
 +                      fprintf (\r
 +                              fMakefile,\r
 +                              "=%s",\r
 +                              d.value.c_str() );\r
 +      }\r
 +      fprintf ( fMakefile, "\n" );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateMacros (\r
 +      const char* assignmentOperation,\r
 +      const vector<File*>& files,\r
 +      const vector<Include*>& includes,\r
 +      const vector<Define*>& defines,\r
 +      const vector<CompilerFlag*>* compilerFlags,\r
 +      const vector<LinkerFlag*>* linkerFlags,\r
 +      const vector<If*>& ifs,\r
 +      const string& cflags_macro,\r
 +      const string& nasmflags_macro,\r
 +      const string& windresflags_macro,\r
 +      const string& linkerflags_macro,\r
 +      const string& objs_macro) const\r
 +{\r
 +      size_t i;\r
 +\r
 +      if ( includes.size() || defines.size() )\r
 +      {\r
 +              GenerateMacro ( assignmentOperation,\r
 +                              cflags_macro,\r
 +                              includes,\r
 +                              defines,\r
 +                              compilerFlags );\r
 +              GenerateMacro ( assignmentOperation,\r
 +                              windresflags_macro,\r
 +                              includes,\r
 +                              defines,\r
 +                              compilerFlags );\r
 +      }\r
 +      \r
 +      if ( linkerFlags != NULL )\r
 +      {\r
 +              string linkerParameters = GenerateLinkerParametersFromVector ( *linkerFlags );\r
 +              if ( linkerParameters.size () > 0 )\r
 +              {\r
 +                      fprintf (\r
 +                              fMakefile,\r
 +                              "%s %s %s\n",\r
 +                              linkerflags_macro.c_str (),\r
 +                              assignmentOperation,\r
 +                              linkerParameters.c_str() );\r
 +              }\r
 +      }\r
 +      \r
 +      if ( files.size() )\r
 +      {\r
 +              for ( i = 0; i < files.size(); i++ )\r
 +              {\r
 +                      if ( files[i]->first )\r
 +                      {\r
 +                              fprintf ( fMakefile,\r
 +                                      "%s := %s $(%s)\n",\r
 +                                      objs_macro.c_str(),\r
 +                                      PassThruCacheDirectory ( MingwModuleHandler::GetObjectFilename ( files[i]->name ) ).c_str (),\r
 +                                      objs_macro.c_str() );\r
 +                      }\r
 +              }\r
 +              fprintf (\r
 +                      fMakefile,\r
 +                      "%s %s",\r
 +                      objs_macro.c_str(),\r
 +                      assignmentOperation );\r
 +              for ( i = 0; i < files.size(); i++ )\r
 +              {\r
 +                      string extension = GetExtension ( files[i]->name );\r
 +                      if ( extension != ".spec"\r
 +                        && extension != ".SPEC"\r
 +                        && !files[i]->first )\r
 +                      {\r
 +                              fprintf (\r
 +                                      fMakefile,\r
 +                                      "%s%s",\r
 +                                      ( i%10 == 9 ? "\\\n\t" : " " ),\r
 +                                      PassThruCacheDirectory ( MingwModuleHandler::GetObjectFilename ( files[i]->name ) ).c_str () );\r
 +                      }\r
 +              }\r
 +              fprintf ( fMakefile, "\n" );\r
 +      }\r
 +\r
 +      for ( i = 0; i < ifs.size(); i++ )\r
 +      {\r
 +              If& rIf = *ifs[i];\r
 +              if ( rIf.defines.size() || rIf.includes.size() || rIf.files.size() || rIf.ifs.size() )\r
 +              {\r
 +                      fprintf (\r
 +                              fMakefile,\r
 +                              "ifeq (\"$(%s)\",\"%s\")\n",\r
 +                              rIf.property.c_str(),\r
 +                              rIf.value.c_str() );\r
 +                      GenerateMacros (\r
 +                              "+=",\r
 +                              rIf.files,\r
 +                              rIf.includes,\r
 +                              rIf.defines,\r
 +                              NULL,\r
 +                              NULL,\r
 +                              rIf.ifs,\r
 +                              cflags_macro,\r
 +                              nasmflags_macro,\r
 +                              windresflags_macro,\r
 +                              linkerflags_macro,\r
 +                              objs_macro );\r
 +                      fprintf ( \r
 +                              fMakefile,\r
 +                              "endif\n\n" );\r
 +              }\r
 +      }\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateMacros (\r
 +      const Module& module,\r
 +      const string& cflags_macro,\r
 +      const string& nasmflags_macro,\r
 +      const string& windresflags_macro,\r
 +      const string& linkerflags_macro,\r
 +      const string& objs_macro) const\r
 +{\r
 +      GenerateMacros (\r
 +              "=",\r
 +              module.files,\r
 +              module.includes,\r
 +              module.defines,\r
 +              &module.compilerFlags,\r
 +              &module.linkerFlags,\r
 +              module.ifs,\r
 +              cflags_macro,\r
 +              nasmflags_macro,\r
 +              windresflags_macro,\r
 +              linkerflags_macro,\r
 +              objs_macro );\r
 +      fprintf ( fMakefile, "\n" );\r
 +\r
 +      fprintf (\r
 +              fMakefile,\r
 +              "%s += $(PROJECT_CFLAGS)\n\n",\r
 +              cflags_macro.c_str () );\r
 +\r
 +      fprintf (\r
 +              fMakefile,\r
 +              "%s += $(PROJECT_RCFLAGS)\n\n",\r
 +              windresflags_macro.c_str () );\r
 +\r
 +      fprintf (\r
 +              fMakefile,\r
 +              "%s_LFLAGS += $(PROJECT_LFLAGS)\n\n",\r
 +              module.name.c_str () );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateGccCommand ( const Module& module,\r
 +                                         const string& sourceFilename,\r
 +                                         const string& cc,\r
 +                                         const string& cflagsMacro ) const\r
 +{\r
 +      string objectFilename = PassThruCacheDirectory ( MingwModuleHandler::GetObjectFilename ( sourceFilename ) );\r
 +      fprintf ( fMakefile,\r
 +                "%s: %s\n",\r
 +                objectFilename.c_str (),\r
 +                sourceFilename.c_str () );\r
 +      fprintf ( fMakefile,\r
 +               "\t%s -c %s -o %s %s\n",\r
 +               cc.c_str (),\r
 +               sourceFilename.c_str (),\r
 +               objectFilename.c_str (),\r
 +               cflagsMacro.c_str () );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateGccAssemblerCommand ( const Module& module,\r
 +                                                  const string& sourceFilename,\r
 +                                                  const string& cc,\r
 +                                                  const string& cflagsMacro ) const\r
 +{\r
 +      string objectFilename = PassThruCacheDirectory ( MingwModuleHandler::GetObjectFilename ( sourceFilename ) );\r
 +      fprintf ( fMakefile,\r
 +                "%s: %s\n",\r
 +                objectFilename.c_str (),\r
 +                sourceFilename.c_str () );\r
 +      fprintf ( fMakefile,\r
 +                "\t%s -x assembler-with-cpp -c %s -o %s -D__ASM__ %s\n",\r
 +                cc.c_str (),\r
 +                sourceFilename.c_str (),\r
 +                objectFilename.c_str (),\r
 +                cflagsMacro.c_str () );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateNasmCommand ( const Module& module,\r
 +                                          const string& sourceFilename,\r
 +                                          const string& nasmflagsMacro ) const\r
 +{\r
 +      string objectFilename = PassThruCacheDirectory ( MingwModuleHandler::GetObjectFilename ( sourceFilename ) );\r
 +      fprintf ( fMakefile,\r
 +                "%s: %s\n",\r
 +                objectFilename.c_str (),\r
 +                sourceFilename.c_str () );\r
 +      fprintf ( fMakefile,\r
 +                "\t%s -f win32 %s -o %s %s\n",\r
 +                "nasm",\r
 +                sourceFilename.c_str (),\r
 +                objectFilename.c_str (),\r
 +                nasmflagsMacro.c_str () );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateWindresCommand ( const Module& module,\r
 +                                             const string& sourceFilename,\r
 +                                             const string& windresflagsMacro ) const\r
 +{\r
 +      string objectFilename = PassThruCacheDirectory ( MingwModuleHandler::GetObjectFilename ( sourceFilename ) );\r
++  string rciFilename = ReplaceExtension ( sourceFilename,\r
++                                          ".rci" );\r
++  string resFilename = ReplaceExtension ( sourceFilename,\r
++                                          ".res" );\r
 +      fprintf ( fMakefile,\r
 +                "%s: %s\n",\r
 +                objectFilename.c_str (),\r
 +                sourceFilename.c_str () );\r
 +      fprintf ( fMakefile,\r
-                objectFilename.c_str (),\r
-                windresflagsMacro.c_str () );\r
++               "\t${gcc} -xc -E -DRC_INVOKED ${%s} %s > %s\n",\r
++               windresflagsMacro.c_str (),\r
 +               sourceFilename.c_str (),\r
++               rciFilename.c_str () );\r
++      fprintf ( fMakefile,\r
++               "\t${wrc} ${%s} %s %s\n",\r
++           windresflagsMacro.c_str (),\r
++               rciFilename.c_str (),\r
++               resFilename.c_str () );\r
++      fprintf ( fMakefile,\r
++               "\t${rm} %s\n",\r
++               rciFilename.c_str () );\r
++      fprintf ( fMakefile,\r
++               "\t${windres} %s -o %s\n",\r
++               resFilename.c_str (),\r
++               objectFilename.c_str () );\r
++      fprintf ( fMakefile,\r
++               "\t${rm} %s\n",\r
++               resFilename.c_str () );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateWinebuildCommands ( const Module& module,\r
 +                                                const string& sourceFilename ) const\r
 +{\r
 +      string basename = GetBasename ( sourceFilename );\r
 +      fprintf ( fMakefile,\r
 +                "%s.spec.def: %s\n",\r
 +                basename.c_str (),\r
 +                sourceFilename.c_str () );\r
 +      fprintf ( fMakefile,\r
 +                "\t%s --def=%s -o %s.spec.def\n",\r
 +                "${winebuild}",\r
 +                sourceFilename.c_str (),\r
 +                basename.c_str () );\r
 +\r
 +      fprintf ( fMakefile,\r
 +                "%s.stubs.c: %s\n",\r
 +                basename.c_str (),\r
 +                sourceFilename.c_str () );\r
 +      fprintf ( fMakefile,\r
 +                "\t%s --pedll=%s -o %s.stubs.c\n",\r
 +                "${winebuild}",\r
 +                sourceFilename.c_str (),\r
 +                basename.c_str () );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateCommands ( const Module& module,\r
 +                                       const string& sourceFilename,\r
 +                                       const string& cc,\r
 +                                       const string& cppc,\r
 +                                       const string& cflagsMacro,\r
 +                                       const string& nasmflagsMacro,\r
 +                                       const string& windresflagsMacro ) const\r
 +{\r
 +      string extension = GetExtension ( sourceFilename );\r
 +      if ( extension == ".c" || extension == ".C" )\r
 +      {\r
 +              GenerateGccCommand ( module,\r
 +                                   sourceFilename,\r
 +                                   cc,\r
 +                                   cflagsMacro );\r
 +              return;\r
 +      }\r
 +      else if ( extension == ".cc" || extension == ".CC" ||\r
 +                extension == ".cpp" || extension == ".CPP" ||\r
 +                extension == ".cxx" || extension == ".CXX" )\r
 +      {\r
 +              GenerateGccCommand ( module,\r
 +                                   sourceFilename,\r
 +                                   cppc,\r
 +                                   cflagsMacro );\r
 +              return;\r
 +      }\r
 +      else if ( extension == ".s" || extension == ".S" )\r
 +      {\r
 +              GenerateGccAssemblerCommand ( module,\r
 +                                            sourceFilename,\r
 +                                            cc,\r
 +                                            cflagsMacro );\r
 +              return;\r
 +      }\r
 +      else if ( extension == ".asm" || extension == ".ASM" )\r
 +      {\r
 +              GenerateNasmCommand ( module,\r
 +                                    sourceFilename,\r
 +                                    nasmflagsMacro );\r
 +              return;\r
 +      }\r
 +      else if ( extension == ".rc" || extension == ".RC" )\r
 +      {\r
 +              GenerateWindresCommand ( module,\r
 +                                       sourceFilename,\r
 +                                       windresflagsMacro );\r
 +              return;\r
 +      }\r
 +      else if ( extension == ".spec" || extension == ".SPEC" )\r
 +      {\r
 +              GenerateWinebuildCommands ( module,\r
 +                                          sourceFilename );\r
 +              GenerateGccCommand ( module,\r
 +                                   GetActualSourceFilename ( sourceFilename ),\r
 +                                   cc,\r
 +                                   cflagsMacro );\r
 +              return;\r
 +      }\r
 +\r
 +      throw InvalidOperationException ( __FILE__,\r
 +                                        __LINE__,\r
 +                                        "Unsupported filename extension '%s' in file '%s'",\r
 +                                        extension.c_str (),\r
 +                                        sourceFilename.c_str () );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateLinkerCommand ( const Module& module,\r
 +                                            const string& linker,\r
 +                                            const string& linkerParameters,\r
 +                                            const string& objectFilenames ) const\r
 +{\r
 +      string targetName ( module.GetTargetName () );\r
 +      string target ( FixupTargetFilename ( module.GetPath () ) );\r
 +      string importLibraryDependencies = GetImportLibraryDependencies ( module );\r
 +      if ( module.importLibrary != NULL )\r
 +      {\r
 +              static string ros_junk ( "$(ROS_TEMPORARY)" );\r
 +              string base_tmp = ros_junk + module.name + ".base.tmp";\r
 +              string junk_tmp = ros_junk + module.name + ".junk.tmp";\r
 +              string temp_exp = ros_junk + module.name + ".temp.exp";\r
 +\r
 +              fprintf ( fMakefile,\r
 +                        "\t%s %s -Wl,--base-file,%s -o %s %s %s %s\n",\r
 +                        linker.c_str (),\r
 +                        linkerParameters.c_str (),\r
 +                        base_tmp.c_str (),\r
 +                        junk_tmp.c_str (),\r
 +                        objectFilenames.c_str (),\r
 +                        importLibraryDependencies.c_str (),\r
 +                        GetLinkerMacro ( module ).c_str () );\r
 +\r
 +              fprintf ( fMakefile,\r
 +                        "\t${rm} %s\n",\r
 +                        junk_tmp.c_str () );\r
 +\r
 +              string killAt = module.mangledSymbols ? "" : "--kill-at";\r
 +              fprintf ( fMakefile,\r
 +                        "\t${dlltool} --dllname %s --base-file %s --def %s --output-exp %s %s\n",\r
 +                        targetName.c_str (),\r
 +                        base_tmp.c_str (),\r
 +                        ( module.GetBasePath () + SSEP + module.importLibrary->definition ).c_str (),\r
 +                        temp_exp.c_str (),\r
 +                        killAt.c_str () );\r
 +\r
 +              fprintf ( fMakefile,\r
 +                        "\t${rm} %s\n",\r
 +                        base_tmp.c_str () );\r
 +\r
 +              fprintf ( fMakefile,\r
 +                        "\t%s %s %s -o %s %s %s %s\n\n",\r
 +                        linker.c_str (),\r
 +                        linkerParameters.c_str (),\r
 +                        temp_exp.c_str (),\r
 +                        target.c_str (),\r
 +                        objectFilenames.c_str (),\r
 +                        importLibraryDependencies.c_str (),\r
 +                        GetLinkerMacro ( module ).c_str () );\r
 +\r
 +              fprintf ( fMakefile,\r
 +                        "\t${rm} %s\n\n",\r
 +                        temp_exp.c_str () );\r
 +      }\r
 +      else\r
 +      {\r
 +              fprintf ( fMakefile,\r
 +                        "\t%s %s -o %s %s %s %s\n\n",\r
 +                        linker.c_str (),\r
 +                        linkerParameters.c_str (),\r
 +                        target.c_str (),\r
 +                        objectFilenames.c_str (),\r
 +                        importLibraryDependencies.c_str (),\r
 +                        GetLinkerMacro ( module ).c_str () );\r
 +      }\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateObjectFileTargets ( const Module& module,\r
 +                                                const vector<File*>& files,\r
 +                                                const vector<If*>& ifs,\r
 +                                                const string& cc,\r
 +                                                const string& cppc,\r
 +                                                const string& cflagsMacro,\r
 +                                                const string& nasmflagsMacro,\r
 +                                                const string& windresflagsMacro ) const\r
 +{\r
 +      size_t i;\r
 +\r
 +      for ( i = 0; i < files.size (); i++ )\r
 +      {\r
 +              string sourceFilename = files[i]->name;\r
 +              GenerateCommands ( module,\r
 +                                 sourceFilename,\r
 +                                 cc,\r
 +                                 cppc,\r
 +                                 cflagsMacro,\r
 +                                 nasmflagsMacro,\r
 +                                 windresflagsMacro );\r
 +              fprintf ( fMakefile,\r
 +                        "\n" );\r
 +      }\r
 +\r
 +      for ( i = 0; i < ifs.size(); i++ )\r
 +      {\r
 +              GenerateObjectFileTargets ( module,\r
 +                                          ifs[i]->files,\r
 +                                          ifs[i]->ifs,\r
 +                                          cc,\r
 +                                          cppc,\r
 +                                          cflagsMacro,\r
 +                                          nasmflagsMacro,\r
 +                                          windresflagsMacro );\r
 +      }\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateObjectFileTargets ( const Module& module,\r
 +                                                const string& cc,\r
 +                                                const string& cppc,\r
 +                                                const string& cflagsMacro,\r
 +                                                const string& nasmflagsMacro,\r
 +                                                const string& windresflagsMacro ) const\r
 +{\r
 +      GenerateObjectFileTargets ( module,\r
 +                                  module.files,\r
 +                                  module.ifs,\r
 +                                  cc,\r
 +                                  cppc,\r
 +                                  cflagsMacro,\r
 +                                  nasmflagsMacro,\r
 +                                  windresflagsMacro );\r
 +      fprintf ( fMakefile, "\n" );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GetCleanTargets ( vector<string>& out,\r
 +                                      const vector<File*>& files,\r
 +                                      const vector<If*>& ifs ) const\r
 +{\r
 +      size_t i;\r
 +\r
 +      for ( i = 0; i < files.size(); i++ )\r
 +              out.push_back ( PassThruCacheDirectory ( MingwModuleHandler::GetObjectFilename ( files[i]->name ) ) );\r
 +\r
 +      for ( i = 0; i < ifs.size(); i++ )\r
 +              GetCleanTargets ( out, ifs[i]->files, ifs[i]->ifs );\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GenerateArchiveTarget ( const Module& module,\r
 +                                            const string& ar,\r
 +                                            const string& objs_macro ) const\r
 +{\r
 +      string archiveFilename = GetModuleArchiveFilename ( module );\r
 +      \r
 +      fprintf ( fMakefile,\r
 +                "%s: %s\n",\r
 +                archiveFilename.c_str (),\r
 +                objs_macro.c_str ());\r
 +\r
 +      fprintf ( fMakefile,\r
 +                "\t%s -rc %s %s\n\n",\r
 +                ar.c_str (),\r
 +                archiveFilename.c_str (),\r
 +                objs_macro.c_str ());\r
 +\r
 +      return archiveFilename;\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetCFlagsMacro ( const Module& module ) const\r
 +{\r
 +      return ssprintf ( "$(%s_CFLAGS)",\r
 +                        module.name.c_str () );\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetObjectsMacro ( const Module& module ) const\r
 +{\r
 +      return ssprintf ( "$(%s_OBJS)",\r
 +                        module.name.c_str () );\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetLinkerMacro ( const Module& module ) const\r
 +{\r
 +      return ssprintf ( "$(%s_LFLAGS)",\r
 +                        module.name.c_str () );\r
 +}\r
 +                                          \r
 +void\r
 +MingwModuleHandler::GenerateMacrosAndTargets (\r
 +      const Module& module,\r
 +      const string& cc,\r
 +      const string& cppc,\r
 +      const string& ar,\r
 +      const string* cflags,\r
 +      const string* nasmflags ) const\r
 +{\r
 +      string cflagsMacro = ssprintf ("%s_CFLAGS", module.name.c_str ());\r
 +      string nasmflagsMacro = ssprintf ("%s_NASMFLAGS", module.name.c_str ());\r
 +      string windresflagsMacro = ssprintf ("%s_RCFLAGS", module.name.c_str ());\r
 +      string linkerFlagsMacro = ssprintf ("%s_LFLAGS", module.name.c_str ());\r
 +      string objectsMacro = ssprintf ("%s_OBJS", module.name.c_str ());\r
 +\r
 +      GenerateMacros ( module,\r
 +                      cflagsMacro,\r
 +                      nasmflagsMacro,\r
 +                      windresflagsMacro,\r
 +                      linkerFlagsMacro,\r
 +                      objectsMacro );\r
 +\r
 +      if ( cflags != NULL )\r
 +      {\r
 +              fprintf ( fMakefile,\r
 +                        "%s += %s\n\n",\r
 +                        cflagsMacro.c_str (),\r
 +                        cflags->c_str () );\r
 +      }\r
 +\r
 +      if ( nasmflags != NULL )\r
 +      {\r
 +              fprintf ( fMakefile,\r
 +                        "%s += %s\n\n",\r
 +                        nasmflagsMacro.c_str (),\r
 +                        nasmflags->c_str () );\r
 +      }\r
 +\r
 +      // generate phony target for module name\r
 +      fprintf ( fMakefile, ".PHONY: %s\n",\r
 +              module.name.c_str () );\r
 +      fprintf ( fMakefile, "%s: %s\n\n",\r
 +              module.name.c_str (),\r
 +              FixupTargetFilename ( module.GetPath () ).c_str () );\r
 +\r
 +      // future references to the macros will be to get their values\r
 +      cflagsMacro = ssprintf ("$(%s)", cflagsMacro.c_str ());\r
 +      nasmflagsMacro = ssprintf ("$(%s)", nasmflagsMacro.c_str ());\r
 +      objectsMacro = ssprintf ("$(%s)", objectsMacro.c_str ());\r
 +\r
 +      string ar_target = GenerateArchiveTarget ( module, ar, objectsMacro );\r
 +      GenerateObjectFileTargets ( module,\r
 +                                  cc,\r
 +                                  cppc,\r
 +                                  cflagsMacro,\r
 +                                  nasmflagsMacro,\r
 +                                  windresflagsMacro );\r
 +\r
 +      vector<string> clean_files;\r
 +      clean_files.push_back ( FixupTargetFilename(module.GetPath()) );\r
 +      clean_files.push_back ( ar_target );\r
 +      GetCleanTargets ( clean_files, module.files, module.ifs );\r
 +\r
 +      fprintf ( fMakefile, ".PHONY: %s_clean\n", module.name.c_str() );\r
 +      fprintf ( fMakefile, "%s_clean:\n\t-@$(rm)", module.name.c_str() );\r
 +      for ( size_t i = 0; i < clean_files.size(); i++ )\r
 +      {\r
 +              if ( 9==(i%10) )\r
 +                      fprintf ( fMakefile, " 2>$(NUL)\n\t-@$(rm)" );\r
 +              fprintf ( fMakefile, " %s", clean_files[i].c_str() );\r
 +      }\r
 +      fprintf ( fMakefile, " 2>$(NUL)\n" );\r
 +      fprintf ( fMakefile, "clean: %s_clean\n\n", module.name.c_str() );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateMacrosAndTargetsHost ( const Module& module ) const\r
 +{\r
 +      GenerateMacrosAndTargets ( module,\r
 +                                 "${host_gcc}",\r
 +                                 "${host_gpp}",\r
 +                                 "${host_ar}",\r
 +                                 NULL,\r
 +                                 NULL );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateMacrosAndTargetsTarget ( const Module& module ) const\r
 +{\r
 +      GenerateMacrosAndTargetsTarget ( module,\r
 +                                       NULL,\r
 +                                       NULL );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateMacrosAndTargetsTarget ( const Module& module,\r
 +                                                       const string* cflags,\r
 +                                                       const string* nasmflags ) const\r
 +{\r
 +      GenerateMacrosAndTargets ( module,\r
 +                                "${gcc}",\r
 +                                "${gpp}",\r
 +                                "${ar}",\r
 +                                cflags,\r
 +                                nasmflags );\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetInvocationDependencies ( const Module& module ) const\r
 +{\r
 +      string dependencies;\r
 +      for ( size_t i = 0; i < module.invocations.size (); i++ )\r
 +      {\r
 +              Invoke& invoke = *module.invocations[i];\r
 +              if (invoke.invokeModule == &module)\r
 +                      /* Protect against circular dependencies */\r
 +                      continue;\r
 +              if ( dependencies.length () > 0 )\r
 +                      dependencies += " ";\r
 +              dependencies += invoke.GetTargets ();\r
 +      }\r
 +      return dependencies;\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateInvocations ( const Module& module ) const\r
 +{\r
 +      if ( module.invocations.size () == 0 )\r
 +              return;\r
 +      \r
 +      for ( size_t i = 0; i < module.invocations.size (); i++ )\r
 +      {\r
 +              const Invoke& invoke = *module.invocations[i];\r
 +\r
 +              if ( invoke.invokeModule->type != BuildTool )\r
 +              {\r
 +                      throw InvalidBuildFileException ( module.node.location,\r
 +                                                        "Only modules of type buildtool can be invoked." );\r
 +              }\r
 +\r
 +              string invokeTarget = module.GetInvocationTarget ( i );\r
 +              fprintf ( fMakefile,\r
 +                        ".PHONY: %s\n\n",\r
 +                        invokeTarget.c_str () );\r
 +              fprintf ( fMakefile,\r
 +                        "%s: %s\n\n",\r
 +                        invokeTarget.c_str (),\r
 +                        invoke.GetTargets ().c_str () );\r
 +              fprintf ( fMakefile,\r
 +                        "%s: %s\n",\r
 +                        invoke.GetTargets ().c_str (),\r
 +                        FixupTargetFilename ( invoke.invokeModule->GetPath () ).c_str () );\r
 +              fprintf ( fMakefile,\r
 +                        "\t%s %s\n\n",\r
 +                        FixupTargetFilename ( invoke.invokeModule->GetPath () ).c_str (),\r
 +                        invoke.GetParameters ().c_str () );\r
 +      }\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetPreconditionDependenciesName ( const Module& module ) const\r
 +{\r
 +      return ssprintf ( "%s_precondition",\r
 +                        module.name.c_str () );\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetDefaultDependencies ( const Module& module ) const\r
 +{\r
 +      /* Avoid circular dependency */\r
 +      if ( module.type == BuildTool || module.name == "zlib" )\r
 +              return "$(ROS_INTERMEDIATE)." SSEP "tools $(ROS_INTERMEDIATE)." SSEP "lib" SSEP "zlib";\r
 +      else\r
 +              return "init";\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GeneratePreconditionDependencies ( const Module& module ) const\r
 +{\r
 +      string preconditionDependenciesName = GetPreconditionDependenciesName ( module );\r
 +      string sourceFilenames = GetSourceFilenamesWithoutGeneratedFiles ( module );\r
 +      string dependencies = GetDefaultDependencies ( module );\r
 +      string s = GetModuleDependencies ( module );\r
 +      if ( s.length () > 0 )\r
 +      {\r
 +              if ( dependencies.length () > 0 )\r
 +                      dependencies += " ";\r
 +              dependencies += s;\r
 +      }\r
 +\r
 +      s = GetInvocationDependencies ( module );\r
 +      if ( s.length () > 0 )\r
 +      {\r
 +              if ( dependencies.length () > 0 )\r
 +                      dependencies += " ";\r
 +              dependencies += s;\r
 +      }\r
 +      \r
 +      fprintf ( fMakefile,\r
 +                ".PHONY: %s\n\n",\r
 +                preconditionDependenciesName.c_str () );\r
 +      fprintf ( fMakefile,\r
 +                "%s: %s\n\n",\r
 +                preconditionDependenciesName.c_str (),\r
 +                dependencies.c_str () );\r
 +      const char* p = sourceFilenames.c_str();\r
 +      const char* end = p + strlen(p);\r
 +      while ( p < end )\r
 +      {\r
 +              const char* p2 = &p[512];\r
 +              if ( p2 > end )\r
 +                      p2 = end;\r
 +              while ( p2 > p && !isspace(*p2) )\r
 +                      --p2;\r
 +              if ( p == p2 )\r
 +              {\r
 +                      p2 = strpbrk ( p, " \t" );\r
 +                      if ( !p2 )\r
 +                              p2 = end;\r
 +              }\r
 +              fprintf ( fMakefile,\r
 +                        "%.*s: %s\n",\r
 +                        p2-p,\r
 +                        p,\r
 +                        preconditionDependenciesName.c_str ());\r
 +              p = p2;\r
 +              p += strspn ( p, " \t" );\r
 +      }\r
 +      fprintf ( fMakefile, "\n" );\r
 +}\r
 +\r
 +void\r
 +MingwModuleHandler::GenerateImportLibraryTargetIfNeeded ( const Module& module ) const\r
 +{\r
 +      if ( module.importLibrary != NULL )\r
 +      {\r
 +              string definitionDependencies = GetDefinitionDependencies ( module );\r
 +              fprintf ( fMakefile, "%s: %s\n",\r
 +                        FixupTargetFilename( module.GetDependencyPath () ).c_str (),\r
 +                        definitionDependencies.c_str () );\r
 +\r
 +              string killAt = module.mangledSymbols ? "" : "--kill-at";\r
 +              fprintf ( fMakefile,\r
 +                        "\t${dlltool} --dllname %s --def %s --output-lib %s %s\n\n",\r
 +                        module.GetTargetName ().c_str (),\r
 +                        ( module.GetBasePath () + SSEP + module.importLibrary->definition ).c_str (),\r
 +                        FixupTargetFilename ( module.GetDependencyPath () ).c_str (),\r
 +                        killAt.c_str () );\r
 +      }\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetSpecObjectDependencies ( const string& filename ) const\r
 +{\r
 +      string basename = GetBasename ( filename );\r
 +      return basename + ".spec.def" + " " + basename + ".stubs.c";\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetDefinitionDependencies ( const Module& module ) const\r
 +{\r
 +      string dependencies;\r
 +      string dkNkmLibNoFixup = "dk/nkm/lib";\r
 +      dependencies += FixupTargetFilename ( dkNkmLibNoFixup );\r
 +      PassThruCacheDirectory ( dkNkmLibNoFixup + SSEP );\r
 +      for ( size_t i = 0; i < module.files.size (); i++ )\r
 +      {\r
 +              File& file = *module.files[i];\r
 +              string extension = GetExtension ( file.name );\r
 +              if ( extension == ".spec" || extension == ".SPEC" )\r
 +              {\r
 +                      if ( dependencies.length () > 0 )\r
 +                              dependencies += " ";\r
 +                      dependencies += GetSpecObjectDependencies ( file.name );\r
 +              }\r
 +      }\r
 +      return dependencies;\r
 +}\r
 +\r
 +string\r
 +MingwModuleHandler::GetLinkingDependencies ( const Module& module ) const\r
 +{\r
 +      string dependencies = GetImportLibraryDependencies ( module );\r
 +      string s = GetDefinitionDependencies ( module );\r
 +      if ( s.length () > 0 )\r
 +      {\r
 +              dependencies += " ";\r
 +              dependencies += s;\r
 +      }\r
 +      return dependencies;\r
 +}\r
 +\r
 +bool\r
 +MingwModuleHandler::IsCPlusPlusModule ( const Module& module ) const\r
 +{\r
 +      if ( module.HasFileWithExtensions ( ".cc", ".CC" ) )\r
 +              return true;\r
 +      if ( module.HasFileWithExtensions ( ".cxx", ".CXX" ) )\r
 +              return true;\r
 +      if ( module.HasFileWithExtensions ( ".cpp", ".CPP" ) )\r
 +              return true;\r
 +      return false;\r
 +}\r
 +\r
 +\r
 +static MingwBuildToolModuleHandler buildtool_handler;\r
 +\r
 +MingwBuildToolModuleHandler::MingwBuildToolModuleHandler()\r
 +      : MingwModuleHandler ( BuildTool )\r
 +{\r
 +}\r
 +\r
 +void\r
 +MingwBuildToolModuleHandler::Process ( const Module& module )\r
 +{\r
 +      GeneratePreconditionDependencies ( module );\r
 +      GenerateBuildToolModuleTarget ( module );\r
 +      GenerateInvocations ( module );\r
 +}\r
 +\r
 +void\r
 +MingwBuildToolModuleHandler::GenerateBuildToolModuleTarget ( const Module& module )\r
 +{\r
 +      string target ( FixupTargetFilename ( module.GetPath () ) );\r
 +      string archiveFilename = GetModuleArchiveFilename ( module );\r
 +      string importLibraryDependencies = GetImportLibraryDependencies ( module );\r
 +\r
 +      GenerateMacrosAndTargetsHost ( module );\r
 +\r
 +      string linker;\r
 +      if ( IsCPlusPlusModule ( module ) )\r
 +              linker = "${host_gpp}";\r
 +      else\r
 +              linker = "${host_gcc}";\r
 +      \r
 +      fprintf ( fMakefile, "%s: %s %s\n",\r
 +                target.c_str (),\r
 +                archiveFilename.c_str (),\r
 +                importLibraryDependencies.c_str () );\r
 +      fprintf ( fMakefile,\r
 +                "\t%s %s -o %s %s %s\n\n",\r
 +                linker.c_str (),\r
 +                GetLinkerMacro ( module ).c_str (),\r
 +                target.c_str (),\r
 +                archiveFilename.c_str (),\r
 +                importLibraryDependencies.c_str () );\r
 +}\r
 +\r
 +\r
 +static MingwKernelModuleHandler kernelmodule_handler;\r
 +\r
 +MingwKernelModuleHandler::MingwKernelModuleHandler ()\r
 +      : MingwModuleHandler ( Kernel )\r
 +{\r
 +}\r
 +\r
 +void\r
 +MingwKernelModuleHandler::Process ( const Module& module )\r
 +{\r
 +      GeneratePreconditionDependencies ( module );\r
 +      GenerateKernelModuleTarget ( module );\r
 +      GenerateInvocations ( module );\r
 +}\r
 +\r
 +void\r
 +MingwKernelModuleHandler::GenerateKernelModuleTarget ( const Module& module )\r
 +{\r
 +      static string ros_junk ( "$(ROS_TEMPORARY)" );\r
 +      string targetName ( module.GetTargetName () );\r
 +      string target ( FixupTargetFilename (module.GetPath ()) );\r
 +      string workingDirectory = GetWorkingDirectory ();\r
 +      string objectsMacro = GetObjectsMacro ( module );\r
 +      string importLibraryDependencies = GetImportLibraryDependencies ( module );\r
 +      string base_tmp = ros_junk + module.name + ".base.tmp";\r
 +      string junk_tmp = ros_junk + module.name + ".junk.tmp";\r
 +      string temp_exp = ros_junk + module.name + ".temp.exp";\r
 +      string gccOptions = ssprintf ("-Wl,-T,%s" SSEP "ntoskrnl.lnk -Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -mdll",\r
 +                                    module.GetBasePath ().c_str (),\r
 +                                    module.entrypoint.c_str (),\r
 +                                    module.baseaddress.c_str () );\r
 +\r
 +      GenerateMacrosAndTargetsTarget ( module );\r
 +\r
 +      GenerateImportLibraryTargetIfNeeded ( module );\r
 +\r
 +      fprintf ( fMakefile, "%s: %s %s\n",\r
 +                target.c_str (),\r
 +                objectsMacro.c_str (),\r
 +                importLibraryDependencies.c_str () );\r
 +      fprintf ( fMakefile,\r
 +                "\t${gcc} %s %s -Wl,--base-file,%s -o %s %s %s\n",\r
 +                GetLinkerMacro ( module ).c_str (),\r
 +                gccOptions.c_str (),\r
 +                base_tmp.c_str (),\r
 +                junk_tmp.c_str (),\r
 +                objectsMacro.c_str (),\r
 +                importLibraryDependencies.c_str () );\r
 +      fprintf ( fMakefile,\r
 +                "\t${rm} %s\n",\r
 +                junk_tmp.c_str () );\r
 +      string killAt = module.mangledSymbols ? "" : "--kill-at";\r
 +      fprintf ( fMakefile,\r
 +                "\t${dlltool} --dllname %s --base-file %s --def ntoskrnl/ntoskrnl.def --output-exp %s %s\n",\r
 +                targetName.c_str (),\r
 +                base_tmp.c_str (),\r
 +                temp_exp.c_str (),\r
 +                killAt.c_str () );\r
 +      fprintf ( fMakefile,\r
 +                "\t${rm} %s\n",\r
 +                base_tmp.c_str () );\r
 +      fprintf ( fMakefile,\r
 +                "\t${gcc} %s %s -Wl,%s -o %s %s %s\n",\r
 +                GetLinkerMacro ( module ).c_str (),\r
 +                gccOptions.c_str (),\r
 +                temp_exp.c_str (),\r
 +                target.c_str (),\r
 +                objectsMacro.c_str (),\r
 +                importLibraryDependencies.c_str () );\r
 +      fprintf ( fMakefile,\r
 +                "\t${rm} %s\n\n",\r
 +                temp_exp.c_str () );\r
 +}\r
 +\r
 +\r
 +static MingwStaticLibraryModuleHandler staticlibrary_handler;\r
 +\r
 +MingwStaticLibraryModuleHandler::MingwStaticLibraryModuleHandler ()\r
 +      : MingwModuleHandler ( StaticLibrary )\r
 +{\r
 +}\r
 +\r
 +void\r
 +MingwStaticLibraryModuleHandler::Process ( const Module& module )\r
 +{\r
 +      GeneratePreconditionDependencies ( module );\r
 +      GenerateStaticLibraryModuleTarget ( module );\r
 +      GenerateInvocations ( module );\r
 +}\r
 +\r
 +void\r
 +MingwStaticLibraryModuleHandler::GenerateStaticLibraryModuleTarget ( const Module& module )\r
 +{\r
 +      GenerateMacrosAndTargetsTarget ( module );\r
 +}\r
 +\r
 +\r
 +static MingwObjectLibraryModuleHandler objectlibrary_handler;\r
 +\r
 +MingwObjectLibraryModuleHandler::MingwObjectLibraryModuleHandler ()\r
 +      : MingwModuleHandler ( ObjectLibrary )\r
 +{\r
 +}\r
 +\r
 +void\r
 +MingwObjectLibraryModuleHandler::Process ( const Module& module )\r
 +{\r
 +      GeneratePreconditionDependencies ( module );\r
 +      GenerateObjectLibraryModuleTarget ( module );\r
 +      GenerateInvocations ( module );\r
 +}\r
 +\r
 +void\r
 +MingwObjectLibraryModuleHandler::GenerateObjectLibraryModuleTarget ( const Module& module )\r
 +{\r
 +      GenerateMacrosAndTargetsTarget ( module );\r
 +}\r
 +\r
 +\r
 +static MingwKernelModeDLLModuleHandler kernelmodedll_handler;\r
 +\r
 +MingwKernelModeDLLModuleHandler::MingwKernelModeDLLModuleHandler ()\r
 +      : MingwModuleHandler ( KernelModeDLL )\r
 +{\r
 +}\r
 +\r
 +void\r
 +MingwKernelModeDLLModuleHandler::Process ( const Module& module )\r
 +{\r
 +      GeneratePreconditionDependencies ( module );\r
 +      GenerateKernelModeDLLModuleTarget ( module );\r
 +      GenerateInvocations ( module );\r
 +}\r
 +\r
 +void\r
 +MingwKernelModeDLLModuleHandler::GenerateKernelModeDLLModuleTarget ( const Module& module )\r
 +{\r
 +      static string ros_junk ( "$(ROS_TEMPORARY)" );\r
 +      string target ( FixupTargetFilename ( module.GetPath () ) );\r
 +      string workingDirectory = GetWorkingDirectory ( );\r
 +      string archiveFilename = GetModuleArchiveFilename ( module );\r
 +      string importLibraryDependencies = GetImportLibraryDependencies ( module );\r
 +\r
 +      GenerateImportLibraryTargetIfNeeded ( module );\r
 +\r
 +      if ( module.files.size () > 0 )\r
 +      {\r
 +              GenerateMacrosAndTargetsTarget ( module );\r
 +\r
 +              fprintf ( fMakefile, "%s: %s %s\n",\r
 +                        target.c_str (),\r
 +                        archiveFilename.c_str (),\r
 +                        importLibraryDependencies.c_str () );\r
 +\r
 +              string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -mdll",\r
 +                                                   module.entrypoint.c_str (),\r
 +                                                   module.baseaddress.c_str () );\r
 +              GenerateLinkerCommand ( module,\r
 +                                      "${gcc}",\r
 +                                      linkerParameters,\r
 +                                      archiveFilename );\r
 +      }\r
 +      else\r
 +      {\r
 +              fprintf ( fMakefile, ".PHONY: %s\n\n",\r
 +                        target.c_str ());\r
 +              fprintf ( fMakefile, "%s:\n",\r
 +                        target.c_str ());\r
 +      }\r
 +}\r
 +\r
 +\r
 +static MingwKernelModeDriverModuleHandler kernelmodedriver_handler;\r
 +\r
 +MingwKernelModeDriverModuleHandler::MingwKernelModeDriverModuleHandler ()\r
 +      : MingwModuleHandler ( KernelModeDriver )\r
 +{\r
 +}\r
 +\r
 +void\r
 +MingwKernelModeDriverModuleHandler::Process ( const Module& module )\r
 +{\r
 +      GeneratePreconditionDependencies ( module );\r
 +      GenerateKernelModeDriverModuleTarget ( module );\r
 +      GenerateInvocations ( module );\r
 +}\r
 +\r
 +\r
 +void\r
 +MingwKernelModeDriverModuleHandler::GenerateKernelModeDriverModuleTarget ( const Module& module )\r
 +{\r
 +      static string ros_junk ( "$(ROS_TEMPORARY)" );\r
 +      string target ( PassThruCacheDirectory( FixupTargetFilename ( module.GetPath () ) ) );\r
 +      string workingDirectory = GetWorkingDirectory ( );\r
 +      string archiveFilename = GetModuleArchiveFilename ( module );\r
 +      string importLibraryDependencies = GetImportLibraryDependencies ( module );\r
 +\r
 +      GenerateImportLibraryTargetIfNeeded ( module );\r
 +\r
 +      if ( module.files.size () > 0 )\r
 +      {\r
 +              string* cflags = new string ( "-D__NTDRIVER__" );\r
 +              GenerateMacrosAndTargetsTarget ( module,\r
 +                                               cflags,\r
 +                                               NULL );\r
 +              delete cflags;\r
 +\r
 +              fprintf ( fMakefile, "%s: %s %s\n",\r
 +                        target.c_str (),\r
 +                        archiveFilename.c_str (),\r
 +                        importLibraryDependencies.c_str () );\r
 +\r
 +              string linkerParameters = ssprintf ( "-Wl,--subsystem,native -Wl,--entry,%s -Wl,--image-base,%s -Wl,--file-alignment,0x1000 -Wl,--section-alignment,0x1000 -nostartfiles -mdll",\r
 +                                                   module.entrypoint.c_str (),\r
 +                                                   module.baseaddress.c_str () );\r
 +              GenerateLinkerCommand ( module,\r
 +                                      "${gcc}",\r
 +                                      linkerParameters,\r
 +                                      archiveFilename );\r
 +      }\r
 +      else\r
 +      {\r
 +              fprintf ( fMakefile, ".PHONY: %s\n\n",\r
 +                        target.c_str ());\r
 +              fprintf ( fMakefile, "%s:\n",\r
 +                        target.c_str () );\r
 +      }\r
 +}\r
 +\r
 +\r
 +static MingwNativeDLLModuleHandler nativedll_handler;\r
 +\r
 +MingwNativeDLLModuleHandler::MingwNativeDLLModuleHandler ()\r
 +      : MingwModuleHandler ( NativeDLL )\r
 +{\r
 +}\r
 +\r
 +void\r
 +MingwNativeDLLModuleHandler::Process ( const Module& module )\r
 +{\r
 +      GeneratePreconditionDependencies ( module );\r
 +      GenerateNativeDLLModuleTarget ( module );\r
 +      GenerateInvocations ( module );\r
 +}\r
 +\r
 +void\r
 +MingwNativeDLLModuleHandler::GenerateNativeDLLModuleTarget ( const Module& module )\r
 +{\r
 +      static string ros_junk ( "$(ROS_TEMPORARY)" );\r
 +      string target ( FixupTargetFilename ( module.GetPath () ) );\r
 +      string workingDirectory = GetWorkingDirectory ( );\r
 +      string objectFilenames = GetObjectFilenames ( module );\r
 +     &n