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
28 #include "wine/debug.h"
30 WINE_DEFAULT_DEBUG_CHANNEL(driver
);
33 /************************************************************************
36 INT WINAPI
Escape( HDC hdc
, INT escape
, INT in_count
, LPCSTR in_data
, LPVOID out_data
)
44 return AbortDoc( hdc
);
51 pt
->x
= GetDeviceCaps( hdc
, PHYSICALWIDTH
);
52 pt
->y
= GetDeviceCaps( hdc
, PHYSICALHEIGHT
);
55 case GETPRINTINGOFFSET
:
57 pt
->x
= GetDeviceCaps( hdc
, PHYSICALOFFSETX
);
58 pt
->y
= GetDeviceCaps( hdc
, PHYSICALOFFSETY
);
61 case GETSCALINGFACTOR
:
63 pt
->x
= GetDeviceCaps( hdc
, SCALINGFACTORX
);
64 pt
->y
= GetDeviceCaps( hdc
, SCALINGFACTORY
);
68 return EndPage( hdc
);
71 return SetAbortProc( hdc
, (ABORTPROC
)in_data
);
78 /* in_data may not be 0 terminated so we must copy it */
81 name
= HeapAlloc( GetProcessHeap(), 0, in_count
+1 );
82 memcpy( name
, in_data
, in_count
);
85 /* out_data is actually a pointer to the DocInfo structure and used as
86 * a second input parameter */
87 if (out_data
) doc
= *(DOCINFOA
*)out_data
;
90 doc
.cbSize
= sizeof(doc
);
91 doc
.lpszOutput
= NULL
;
92 doc
.lpszDatatype
= NULL
;
95 doc
.lpszDocName
= name
;
96 ret
= StartDocA( hdc
, &doc
);
97 if (name
) HeapFree( GetProcessHeap(), 0, name
);
98 if (ret
> 0) ret
= StartPage( hdc
);
102 case QUERYESCSUPPORT
:
104 INT
*ptr
= (INT
*)in_data
;
105 if (in_count
< sizeof(INT
)) return 0;
110 case GETPHYSPAGESIZE
:
111 case GETPRINTINGOFFSET
:
112 case GETSCALINGFACTOR
:
114 case QUERYESCSUPPORT
:
123 /* if not handled internally, pass it to the driver */
124 return ExtEscape( hdc
, escape
, in_count
, in_data
, 0, out_data
);
128 /******************************************************************************
129 * ExtEscape [GDI32.@]
132 * hdc [I] Handle to device context
133 * nEscape [I] Escape function
134 * cbInput [I] Number of bytes in input structure
135 * lpszInData [I] Pointer to input structure
136 * cbOutput [I] Number of bytes in output structure
137 * lpszOutData [O] Pointer to output structure
144 INT WINAPI
ExtEscape( HDC hdc
, INT nEscape
, INT cbInput
, LPCSTR lpszInData
,
145 INT cbOutput
, LPSTR lpszOutData
)
148 DC
* dc
= DC_GetDCPtr( hdc
);
151 if (dc
->funcs
->pExtEscape
)
152 ret
= dc
->funcs
->pExtEscape( dc
->physDev
, nEscape
, cbInput
, lpszInData
, cbOutput
, lpszOutData
);
153 GDI_ReleaseObj( hdc
);
159 /*******************************************************************
160 * DrawEscape [GDI32.@]
164 INT WINAPI
DrawEscape(HDC hdc
, INT nEscape
, INT cbInput
, LPCSTR lpszInData
)
166 FIXME("DrawEscape, stub\n");