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 INT WINAPI Escape( HDC hdc, INT nEscape, INT 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 = *(INT*)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 = *(INT*)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,(LPPOINT)lpvOutData);
110 case GETTECHNOLOGY: {
111 LPSTR x=PTR_SEG_TO_LIN(segout);
112 lstrcpyA(lpvOutData,x);
116 case ENABLEPAIRKERNING: {
117 LPINT16 enab = (LPINT16)PTR_SEG_TO_LIN(segout);
119 *(LPINT)lpvOutData = *enab;
121 SEGPTR_FREE(PTR_SEG_TO_LIN(segin));
125 LPSTR x = (LPSTR)PTR_SEG_TO_LIN(segout);
126 lstrcpyA(lpvOutData,x);
131 SEGPTR_FREE(PTR_SEG_TO_LIN(segin));
140 /******************************************************************************
141 * ExtEscape [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 INT WINAPI ExtEscape( HDC hdc, INT nEscape, INT cbInput,
157 LPCSTR lpszInData, INT 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);
164 /*******************************************************************
165 * DrawEscape [GDI32.74]
169 INT WINAPI DrawEscape(HDC hdc, INT nEscape, INT cbInput, LPCSTR lpszInData)
171 FIXME(gdi, "DrawEscape, stub\n");