4 * Copyright 1994 Bob Amstadt
5 * Copyright 2001 Alexandre Julliard
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
26 #include "wine/debug.h"
28 WINE_DEFAULT_DEBUG_CHANNEL(driver);
31 /************************************************************************
34 INT WINAPI Escape( HDC hdc, INT escape, INT in_count, LPCSTR in_data, LPVOID out_data )
42 return AbortDoc( hdc );
49 pt->x = GetDeviceCaps( hdc, PHYSICALWIDTH );
50 pt->y = GetDeviceCaps( hdc, PHYSICALHEIGHT );
53 case GETPRINTINGOFFSET:
55 pt->x = GetDeviceCaps( hdc, PHYSICALOFFSETX );
56 pt->y = GetDeviceCaps( hdc, PHYSICALOFFSETY );
59 case GETSCALINGFACTOR:
61 pt->x = GetDeviceCaps( hdc, SCALINGFACTORX );
62 pt->y = GetDeviceCaps( hdc, SCALINGFACTORY );
66 return EndPage( hdc );
69 return SetAbortProc( hdc, (ABORTPROC)in_data );
76 /* in_data may not be 0 terminated so we must copy it */
79 name = HeapAlloc( GetProcessHeap(), 0, in_count+1 );
80 memcpy( name, in_data, in_count );
83 /* out_data is actually a pointer to the DocInfo structure and used as
84 * a second input parameter */
85 if (out_data) doc = *(DOCINFOA *)out_data;
88 doc.cbSize = sizeof(doc);
89 doc.lpszOutput = NULL;
90 doc.lpszDatatype = NULL;
93 doc.lpszDocName = name;
94 ret = StartDocA( hdc, &doc );
95 if (name) HeapFree( GetProcessHeap(), 0, name );
96 if (ret > 0) ret = StartPage( hdc );
100 case QUERYESCSUPPORT:
102 INT *ptr = (INT *)in_data;
103 if (in_count < sizeof(INT)) return 0;
108 case GETPHYSPAGESIZE:
109 case GETPRINTINGOFFSET:
110 case GETSCALINGFACTOR:
112 case QUERYESCSUPPORT:
121 /* if not handled internally, pass it to the driver */
122 return ExtEscape( hdc, escape, in_count, in_data, 0, out_data );
126 /******************************************************************************
127 * ExtEscape [GDI32.@]
130 * hdc [I] Handle to device context
131 * nEscape [I] Escape function
132 * cbInput [I] Number of bytes in input structure
133 * lpszInData [I] Pointer to input structure
134 * cbOutput [I] Number of bytes in output structure
135 * lpszOutData [O] Pointer to output structure
142 INT WINAPI ExtEscape( HDC hdc, INT nEscape, INT cbInput, LPCSTR lpszInData,
143 INT cbOutput, LPSTR lpszOutData )
146 DC * dc = DC_GetDCPtr( hdc );
149 if (dc->funcs->pExtEscape)
150 ret = dc->funcs->pExtEscape( dc->physDev, nEscape, cbInput, lpszInData, cbOutput, lpszOutData );
151 GDI_ReleaseObj( hdc );
157 /*******************************************************************
158 * DrawEscape [GDI32.@]
162 INT WINAPI DrawEscape(HDC hdc, INT nEscape, INT cbInput, LPCSTR lpszInData)
164 FIXME("DrawEscape, stub\n");