Release 970928

Sat Sep 27 12:36:56 1997  Alexandre Julliard  <julliard@lrc.epfl.ch>

	* [if1632/relay.c]
	Made Catch and Throw also save %si and %di (untested).

	* [memory/selector.c]
	Added check for %fs and %gs in SELECTOR_FreeBlock.

	* [rc/winerc.c]
	Generated files no longer depend on Wine includes.
	Made .h generation optional.

	* [tools/build.c] [loader/task.c]
	Added CALL32_Init function.
	Added possibility to pass arguments when using CALLTO16_regs_.
	32-bit stack pointer is now saved on the 16-bit stack, instead of
	using IF1632_Saved32_esp.
	Removed CallTo32 callbacks.

	* [tools/makedep.c] [*/Makefile.in]
	Added support for directly generating dependencies for .y, .l and
	.rc files. Modified the makefiles to use this feature.

	* [windows/winproc.c] [if1632/thunk.c]
	Use CALLTO16_regs to call window procedures.

Thu Sep 25 12:18:57 1997  Kristian Nielsen <kristian.nielsen@risoe.dk>

	* [if1632/kernel.spec]
	Changed entry for SwitchStackBack to remove arguments from stack
	upon return (arguments left over from previous SwitchStackTo()).
	Borland C++ 4.0 now compiles "Hello World" (but crashes after
	outputting the .exe).

Wed Sep 24 13:54:44 1997  Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>

	* [files/directory.c]
	SearchPath might get NULL buffer (empty LRU list in wordpad).

	* [memory/selector.c]
	Added SUnMapLS*.

	* [loader/pe_image.c]
	Be able to run executeables from non mmap()ble filesystems.
	PE_LoadLibrary adds librarys loaded by another process to
	its own modref list too.

	* [windows/keyboard.c][include/accel.h][loader/resource.c]
	Fixed accelerator leakage, use SDK defines/names.

	* [graphics/env.c][misc/main.c]
	Set/GetEnvironemnt have nothing to do with environment vars,
	but with Printer Environment.

	* [graphics/escape.c]
	Escape32: map args back to segmented pointers.

	* [windows/win.c]
	WS_POPUP|WS_CHILD windows don't need a parent window (SDK).

Tue Sep 16 14:40:16 1997  Robert Wilhelm  <robert@physiol.med.tu-muenchen.de>

	* [if1632/crtdll.spec] [misc/crtdll.c]
	Added signal().
diff --git a/graphics/escape.c b/graphics/escape.c
index b60b9a8..124f7e7 100644
--- a/graphics/escape.c
+++ b/graphics/escape.c
@@ -7,6 +7,8 @@
 #include <stdio.h>
 #include "windows.h"
 #include "gdi.h"
+#include "heap.h"
+#include "ldt.h"
 #include "dc.h"
 
 INT16 WINAPI Escape16( HDC16 hdc, INT16 nEscape, INT16 cbInput,
@@ -20,13 +22,56 @@
 INT32 WINAPI Escape32( HDC32 hdc, INT32 nEscape, INT32 cbInput,
                        LPVOID lpszInData, LPVOID lpvOutData )
 {
-    DC * dc = DC_GetDCPtr( hdc );
+    DC		*dc = DC_GetDCPtr( hdc );
+    SEGPTR	segin,segout;
+    INT32	ret;
+
     if (!dc || !dc->funcs->pEscape) return 0;
+    segin	= (SEGPTR)lpszInData;
+    segout	= (SEGPTR)lpvOutData;
     switch (nEscape) {
-    case GETSCALINGFACTOR:
-         return 1;
-    	
+    	/* Escape(hdc,QUERYESCSUPPORT,LPINT32,NULL) */
+    case QUERYESCSUPPORT: {
+    	LPINT16 x = (LPINT16)SEGPTR_NEW(INT16);
+	*x = *(INT32*)lpszInData;
+	segin = SEGPTR_GET(x);
+	break;
     }
-    return dc->funcs->pEscape( dc, nEscape, cbInput,
-                               (SEGPTR)lpszInData, (SEGPTR)lpvOutData );
+
+    	/* Escape(hdc,GETSCALINGFACTOR,NULL,LPPOINT32) */
+    	/* Escape(hdc,GETPHYSPAGESIZE,NULL,LPPOINT32) */
+    	/* Escape(hdc,GETPRINTINGOFFSET,NULL,LPPOINT32) */
+
+    case GETSCALINGFACTOR:
+    case GETPHYSPAGESIZE:
+    case GETPRINTINGOFFSET:
+	segout = SEGPTR_GET(SEGPTR_NEW(POINT16));
+	break;
+    }
+    ret = dc->funcs->pEscape( dc, nEscape, cbInput, segin, segout );
+    switch(nEscape) {
+    case QUERYESCSUPPORT:
+    	if (ret)
+		fprintf(stderr,"target DC implements Escape %d\n",nEscape);
+    	SEGPTR_FREE(PTR_SEG_TO_LIN(segin));
+	break;
+    case GETSCALINGFACTOR:
+    case GETPRINTINGOFFSET:
+    case GETPHYSPAGESIZE: {
+    	LPPOINT16 x = (LPPOINT16)PTR_SEG_TO_LIN(segout);
+	CONV_POINT16TO32(x,(LPPOINT32)lpvOutData);
+	SEGPTR_FREE(x);
+	break;
+    }
+    default:
+    	break;
+    }
+    return ret;
+}
+
+INT32 WINAPI ExtEscape32(HDC32 hdc,INT32 nEscape,INT32 cbInput,LPCSTR x,INT32 cbOutput,LPSTR out) {
+	fprintf(stderr,"ExtEscape32(0x%04x,0x%x,%d,%s,%d,%p),stub!\n",
+		hdc,nEscape,cbInput,x,cbOutput,out
+	);
+	return 1;
 }