4 * Copyright 1994 Bob Amstadt
16 INT16 WINAPI
Escape16( HDC16 hdc
, INT16 nEscape
, INT16 cbInput
,
17 SEGPTR lpszInData
, SEGPTR lpvOutData
)
19 DC
* dc
= DC_GetDCPtr( hdc
);
20 if (!dc
|| !dc
->funcs
->pEscape
) return 0;
21 return dc
->funcs
->pEscape( dc
, nEscape
, cbInput
, lpszInData
, lpvOutData
);
24 INT32 WINAPI
Escape32( HDC32 hdc
, INT32 nEscape
, INT32 cbInput
,
25 LPCSTR lpszInData
, LPVOID lpvOutData
)
27 DC
*dc
= DC_GetDCPtr( hdc
);
31 if (!dc
|| !dc
->funcs
->pEscape
) return 0;
32 segin
= (SEGPTR
)lpszInData
;
33 segout
= (SEGPTR
)lpvOutData
;
35 /* Escape(hdc,QUERYESCSUPPORT,LPINT32,NULL) */
36 case QUERYESCSUPPORT
: {
37 LPINT16 x
= (LPINT16
)SEGPTR_NEW(INT16
);
38 *x
= *(INT32
*)lpszInData
;
39 segin
= SEGPTR_GET(x
);
43 /* Escape(hdc,GETSCALINGFACTOR,NULL,LPPOINT32) */
44 /* Escape(hdc,GETPHYSPAGESIZE,NULL,LPPOINT32) */
45 /* Escape(hdc,GETPRINTINGOFFSET,NULL,LPPOINT32) */
47 case GETSCALINGFACTOR
:
49 case GETPRINTINGOFFSET
:
50 segout
= SEGPTR_GET(SEGPTR_NEW(POINT16
));
53 /* Escape(hdc,GETTECHNOLOGY,NULL,LPSTR); */
56 segout
= SEGPTR_GET(SEGPTR_ALLOC(200)); /* enough I hope */
61 /* Escape(hdc,ENABLEPAIRKERNING,LPINT16,LPINT16); */
63 case ENABLEPAIRKERNING
: {
64 LPINT16 enab
= SEGPTR_NEW(INT16
);
65 segout
= SEGPTR_GET(SEGPTR_NEW(INT16
));
66 segin
= SEGPTR_GET(enab
);
67 *enab
= *(INT32
*)lpszInData
;
71 /* Escape(hdc,GETFACENAME,NULL,LPSTR); */
74 segout
= SEGPTR_GET(SEGPTR_ALLOC(200));
78 /* Escape(hdc,STARTDOC,LPSTR,NULL); */
80 case STARTDOC
: /* string may not be \0 terminated */
82 char *cp
= SEGPTR_ALLOC(cbInput
);
83 memcpy(cp
, lpszInData
, cbInput
);
84 segin
= SEGPTR_GET(cp
);
94 ret
= dc
->funcs
->pEscape( dc
, nEscape
, cbInput
, segin
, segout
);
99 TRACE(driver
,"target DC implements Escape %d\n",nEscape
);
100 SEGPTR_FREE(PTR_SEG_TO_LIN(segin
));
102 case GETSCALINGFACTOR
:
103 case GETPRINTINGOFFSET
:
104 case GETPHYSPAGESIZE
: {
105 LPPOINT16 x
= (LPPOINT16
)PTR_SEG_TO_LIN(segout
);
106 CONV_POINT16TO32(x
,(LPPOINT32
)lpvOutData
);
110 case GETTECHNOLOGY
: {
111 LPSTR x
=PTR_SEG_TO_LIN(segout
);
112 lstrcpy32A(lpvOutData
,x
);
116 case ENABLEPAIRKERNING
: {
117 LPINT16 enab
= (LPINT16
)PTR_SEG_TO_LIN(segout
);
119 *(LPINT32
)lpvOutData
= *enab
;
121 SEGPTR_FREE(PTR_SEG_TO_LIN(segin
));
125 LPSTR x
= (LPSTR
)PTR_SEG_TO_LIN(segout
);
126 lstrcpy32A(lpvOutData
,x
);
131 SEGPTR_FREE(PTR_SEG_TO_LIN(segin
));
140 /******************************************************************************
141 * ExtEscape32 [GDI32.95]
144 * hdc [I] Handle to device context
145 * nEscape [I] Escape function
146 * cbInput [I] Number of bytes in input structure
147 * lpszInData [I] Pointer to input structure
148 * cbOutput [I] Number of bytes in output structure
149 * lpszOutData [O] Pointer to output structure
156 INT32 WINAPI
ExtEscape32( HDC32 hdc
, INT32 nEscape
, INT32 cbInput
,
157 LPCSTR lpszInData
, INT32 cbOutput
, LPSTR lpszOutData
)
159 FIXME(driver
,"(0x%04x,0x%x,%d,%s,%d,%p):stub\n",
160 hdc
,nEscape
,cbInput
,debugstr_a(lpszInData
),cbOutput
,lpszOutData
);