Separate wineps out of Wine's core.

diff --git a/Make.rules.in b/Make.rules.in
index d762710..9db59aa 100644
--- a/Make.rules.in
+++ b/Make.rules.in
@@ -140,6 +140,7 @@
 	win87em \
 	windebug \
 	wineoss.drv \
+	wineps \
 	wing \
 	wininet \
 	winmm \
diff --git a/Makefile.in b/Makefile.in
index ebfa2c2..901f06e 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -37,7 +37,6 @@
 	graphics \
 	graphics/enhmetafiledrv \
 	graphics/metafiledrv \
-	graphics/psdrv \
 	graphics/win16drv \
 	if1632 \
 	library \
@@ -105,7 +104,6 @@
 	graphics/graphics.o \
 	graphics/enhmetafiledrv/enhmetafiledrv.o \
 	graphics/metafiledrv/metafiledrv.o \
-	graphics/psdrv/psdrv.o \
 	graphics/win16drv/win16drv.o \
 	if1632/if1632.o \
 	loader/loader.o \
diff --git a/configure b/configure
index 6bc80eb..25f92a5 100755
--- a/configure
+++ b/configure
@@ -6239,6 +6239,7 @@
 dlls/win87em/Makefile
 dlls/winaspi/Makefile
 dlls/windebug/Makefile
+dlls/wineps/Makefile
 dlls/wing/Makefile
 dlls/wininet/Makefile
 dlls/winmm/Makefile
@@ -6262,7 +6263,6 @@
 graphics/Makefile
 graphics/enhmetafiledrv/Makefile
 graphics/metafiledrv/Makefile
-graphics/psdrv/Makefile
 graphics/ttydrv/Makefile
 graphics/win16drv/Makefile
 graphics/x11drv/Makefile
@@ -6473,6 +6473,7 @@
 dlls/win87em/Makefile
 dlls/winaspi/Makefile
 dlls/windebug/Makefile
+dlls/wineps/Makefile
 dlls/wing/Makefile
 dlls/wininet/Makefile
 dlls/winmm/Makefile
@@ -6496,7 +6497,6 @@
 graphics/Makefile
 graphics/enhmetafiledrv/Makefile
 graphics/metafiledrv/Makefile
-graphics/psdrv/Makefile
 graphics/ttydrv/Makefile
 graphics/win16drv/Makefile
 graphics/x11drv/Makefile
diff --git a/configure.in b/configure.in
index 71ed2bd..8a7829d 100644
--- a/configure.in
+++ b/configure.in
@@ -1033,6 +1033,7 @@
 dlls/win87em/Makefile
 dlls/winaspi/Makefile
 dlls/windebug/Makefile
+dlls/wineps/Makefile
 dlls/wing/Makefile
 dlls/wininet/Makefile
 dlls/winmm/Makefile
@@ -1056,7 +1057,6 @@
 graphics/Makefile
 graphics/enhmetafiledrv/Makefile
 graphics/metafiledrv/Makefile
-graphics/psdrv/Makefile
 graphics/ttydrv/Makefile
 graphics/win16drv/Makefile
 graphics/x11drv/Makefile
diff --git a/dlls/Makefile.in b/dlls/Makefile.in
index daac70b..ef95561 100644
--- a/dlls/Makefile.in
+++ b/dlls/Makefile.in
@@ -75,7 +75,6 @@
 	commdlg \
 	compobj \
 	ddeml \
-	dispdib \
 	dplay \
 	gdi \
 	keyboard \
@@ -183,7 +182,7 @@
 libdsound.@LIBEXT@: dsound/libdsound.@LIBEXT@
 	$(RM) $@ && $(LN_S) dsound/libdsound.@LIBEXT@ $@
 
-libgdi32.@LIBEXT@ libgdi.@LIBEXT@ libdispdib.@LIBEXT@: gdi/libgdi32.@LIBEXT@
+libgdi32.@LIBEXT@ libgdi.@LIBEXT@: gdi/libgdi32.@LIBEXT@
 	$(RM) $@ && $(LN_S) gdi/libgdi32.@LIBEXT@ $@
 
 libicmp.@LIBEXT@: icmp/libicmp.@LIBEXT@
diff --git a/dlls/gdi/gdi_main.c b/dlls/gdi/gdi_main.c
index af40d4c..6bc394e 100644
--- a/dlls/gdi/gdi_main.c
+++ b/dlls/gdi/gdi_main.c
@@ -8,7 +8,6 @@
 
 #include "gdi.h"
 #include "global.h"
-#include "psdrv.h"
 #include "tweak.h"
 #include "win16drv.h"
 
@@ -35,7 +34,7 @@
     if (!WIN16DRV_Init()) return FALSE;
 
     /* PSDRV initialization */
-    if(!PSDRV_Init()) return FALSE;
+    if (!LoadLibraryA( "wineps" )) return FALSE;
 
     return TRUE;
 }
diff --git a/dlls/wineps/.cvsignore b/dlls/wineps/.cvsignore
new file mode 100644
index 0000000..9722db7
--- /dev/null
+++ b/dlls/wineps/.cvsignore
@@ -0,0 +1,4 @@
+Makefile
+libwineps.so.1.0
+wineps.spec.c
+wineps16.spec.c
diff --git a/graphics/psdrv/Makefile.in b/dlls/wineps/Makefile.in
similarity index 72%
rename from graphics/psdrv/Makefile.in
rename to dlls/wineps/Makefile.in
index f55dbcd..263d309 100644
--- a/graphics/psdrv/Makefile.in
+++ b/dlls/wineps/Makefile.in
@@ -1,9 +1,12 @@
-DEFS      = @DLLFLAGS@ -D__WINE__
 TOPSRCDIR = @top_srcdir@
 TOPOBJDIR = ../..
 SRCDIR    = @srcdir@
 VPATH     = @srcdir@
-MODULE    = psdrv
+MODULE    = wineps
+SOVERSION = 1.0
+ALTNAMES  = wineps16
+
+SPEC_SRCS = wineps.spec wineps16.spec
 
 C_SRCS = \
 	afm.c \
@@ -23,8 +26,6 @@
 	ps.c \
 	text.c
 
-all: $(MODULE).o
-
-@MAKE_RULES@
+@MAKE_DLL_RULES@
 
 ### Dependencies:
diff --git a/graphics/psdrv/afm.c b/dlls/wineps/afm.c
similarity index 100%
rename from graphics/psdrv/afm.c
rename to dlls/wineps/afm.c
diff --git a/graphics/psdrv/bitblt.c b/dlls/wineps/bitblt.c
similarity index 100%
rename from graphics/psdrv/bitblt.c
rename to dlls/wineps/bitblt.c
diff --git a/graphics/psdrv/bitmap.c b/dlls/wineps/bitmap.c
similarity index 100%
rename from graphics/psdrv/bitmap.c
rename to dlls/wineps/bitmap.c
diff --git a/graphics/psdrv/brush.c b/dlls/wineps/brush.c
similarity index 100%
rename from graphics/psdrv/brush.c
rename to dlls/wineps/brush.c
diff --git a/graphics/psdrv/clipping.c b/dlls/wineps/clipping.c
similarity index 100%
rename from graphics/psdrv/clipping.c
rename to dlls/wineps/clipping.c
diff --git a/graphics/psdrv/color.c b/dlls/wineps/color.c
similarity index 100%
rename from graphics/psdrv/color.c
rename to dlls/wineps/color.c
diff --git a/graphics/psdrv/driver.c b/dlls/wineps/driver.c
similarity index 100%
rename from graphics/psdrv/driver.c
rename to dlls/wineps/driver.c
diff --git a/graphics/psdrv/escape.c b/dlls/wineps/escape.c
similarity index 100%
rename from graphics/psdrv/escape.c
rename to dlls/wineps/escape.c
diff --git a/graphics/psdrv/font.c b/dlls/wineps/font.c
similarity index 100%
rename from graphics/psdrv/font.c
rename to dlls/wineps/font.c
diff --git a/graphics/psdrv/graphics.c b/dlls/wineps/graphics.c
similarity index 100%
rename from graphics/psdrv/graphics.c
rename to dlls/wineps/graphics.c
diff --git a/graphics/psdrv/init.c b/dlls/wineps/init.c
similarity index 94%
rename from graphics/psdrv/init.c
rename to dlls/wineps/init.c
index fef7145..6e9956a 100644
--- a/graphics/psdrv/init.c
+++ b/dlls/wineps/init.c
@@ -221,15 +221,35 @@
  * Initializes font metrics and registers driver. Called from GDI_Init()
  *
  */
-BOOL PSDRV_Init(void)
+BOOL WINAPI PSDRV_Init( HINSTANCE hinst, DWORD reason, LPVOID reserved )
 {
-    TRACE("\n");
-    PSDRV_Heap = HeapCreate(0, 0x10000, 0);
-    PSDRV_GetFontMetrics();
-    PSDRV_DefaultFont = CreateFontIndirectA(&DefaultLogFont);
-    return DRIVER_RegisterDriver( "WINEPS", &PSDRV_Funcs );
+    static int process_count = 0;
+
+    TRACE("(0x%4x, 0x%08lx, %p)\n", hinst, reason, reserved);
+   
+    switch(reason) {
+	case DLL_PROCESS_ATTACH:
+	    if (!process_count++) {
+		/* FIXME: return FALSE if we fail any of these steps */
+		PSDRV_Heap = HeapCreate(0, 0x10000, 0);
+		PSDRV_GetFontMetrics();
+		PSDRV_DefaultFont = CreateFontIndirectA(&DefaultLogFont);
+		DRIVER_RegisterDriver( "WINEPS", &PSDRV_Funcs );
+	    }
+	break;
+	case DLL_PROCESS_DETACH:
+            if (!--process_count) {
+		DeleteObject( PSDRV_DefaultFont );
+		HeapDestroy( PSDRV_Heap );
+		DRIVER_UnregisterDriver( "WINEPS" );
+	    }
+	break;
+    }
+ 
+    return TRUE;
 }
 
+
 /**********************************************************************
  *	     PSDRV_CreateDC
  */
diff --git a/graphics/psdrv/objects.c b/dlls/wineps/objects.c
similarity index 100%
rename from graphics/psdrv/objects.c
rename to dlls/wineps/objects.c
diff --git a/graphics/psdrv/pen.c b/dlls/wineps/pen.c
similarity index 100%
rename from graphics/psdrv/pen.c
rename to dlls/wineps/pen.c
diff --git a/graphics/psdrv/ppd.c b/dlls/wineps/ppd.c
similarity index 100%
rename from graphics/psdrv/ppd.c
rename to dlls/wineps/ppd.c
diff --git a/graphics/psdrv/ps.c b/dlls/wineps/ps.c
similarity index 100%
rename from graphics/psdrv/ps.c
rename to dlls/wineps/ps.c
diff --git a/include/psdrv.h b/dlls/wineps/psdrv.h
similarity index 98%
rename from include/psdrv.h
rename to dlls/wineps/psdrv.h
index 2902043..bf6a8a2 100644
--- a/include/psdrv.h
+++ b/dlls/wineps/psdrv.h
@@ -251,7 +251,7 @@
 extern void PSDRV_AddAFMtoList(FONTFAMILY **head, AFM *afm);
 extern void PSDRV_FreeAFMList( FONTFAMILY *head );
 
-extern BOOL PSDRV_Init(void);
+extern BOOL WINAPI PSDRV_Init(HINSTANCE hinst, DWORD reason, LPVOID reserved);
 extern HFONT16 PSDRV_FONT_SelectObject( DC *dc, HFONT16 hfont, FONTOBJ *font);
 extern HPEN PSDRV_PEN_SelectObject( DC * dc, HPEN hpen, PENOBJ * pen );
 extern HBRUSH PSDRV_BRUSH_SelectObject( DC * dc, HBRUSH hbrush,
diff --git a/graphics/psdrv/text.c b/dlls/wineps/text.c
similarity index 100%
rename from graphics/psdrv/text.c
rename to dlls/wineps/text.c
diff --git a/dlls/wineps/wineps.spec b/dlls/wineps/wineps.spec
new file mode 100644
index 0000000..41b475c
--- /dev/null
+++ b/dlls/wineps/wineps.spec
@@ -0,0 +1,4 @@
+name	wineps
+type	win32
+init	PSDRV_Init
+
diff --git a/if1632/wineps.spec b/dlls/wineps/wineps16.spec
similarity index 94%
rename from if1632/wineps.spec
rename to dlls/wineps/wineps16.spec
index 4ede174..33c2089 100644
--- a/if1632/wineps.spec
+++ b/dlls/wineps/wineps16.spec
@@ -1,4 +1,4 @@
-name    wineps
+name    wineps16
 type    win16
 
 13 pascal16 DeviceMode(word word str str) PSDRV_DeviceMode16
diff --git a/graphics/psdrv/.cvsignore b/graphics/psdrv/.cvsignore
deleted file mode 100644
index f3c7a7c..0000000
--- a/graphics/psdrv/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-Makefile
diff --git a/if1632/.cvsignore b/if1632/.cvsignore
index 422f416..9da227f 100644
--- a/if1632/.cvsignore
+++ b/if1632/.cvsignore
@@ -1,10 +1,4 @@
+*.spec.c
 Makefile
 call16.s
-comm.spec.c
-dispdib.spec.c
-kernel.spec.c
-system.spec.c
 thunk.glue.c
-toolhelp.spec.c
-wineps.spec.c
-wprocs.spec.c
diff --git a/if1632/Makefile.in b/if1632/Makefile.in
index f54f5dd..b1d82f2 100644
--- a/if1632/Makefile.in
+++ b/if1632/Makefile.in
@@ -7,6 +7,7 @@
 
 SPEC_SRCS = \
 	comm.spec \
+	dispdib.spec \
 	kernel.spec \
 	system.spec \
 	toolhelp.spec \
diff --git a/loader/main.c b/loader/main.c
index 1652e5e..cd59869 100644
--- a/loader/main.c
+++ b/loader/main.c
@@ -49,7 +49,6 @@
 #include "thread.h"
 #include "task.h"
 #include "debugtools.h"
-#include "psdrv.h"
 #include "win16drv.h"
 #include "callback.h"
 #include "server.h"