Alexandre Julliard | 490a27e | 1994-06-08 13:57:50 +0000 | [diff] [blame] | 1 | /* |
| 2 | * Escape() function. |
| 3 | * |
| 4 | * Copyright 1994 Bob Amstadt |
Alexandre Julliard | 0e270f4 | 1996-08-24 18:26:35 +0000 | [diff] [blame] | 5 | */ |
Alexandre Julliard | 490a27e | 1994-06-08 13:57:50 +0000 | [diff] [blame] | 6 | |
David Luyer | ee517e8 | 1999-02-28 12:27:56 +0000 | [diff] [blame] | 7 | #include <string.h> |
Marcus Meissner | 04c3e1d | 1999-02-19 10:37:02 +0000 | [diff] [blame] | 8 | #include "wingdi.h" |
Alexandre Julliard | 0e270f4 | 1996-08-24 18:26:35 +0000 | [diff] [blame] | 9 | #include "gdi.h" |
Alexandre Julliard | 3db94ef | 1997-09-28 17:43:24 +0000 | [diff] [blame] | 10 | #include "heap.h" |
| 11 | #include "ldt.h" |
Alexandre Julliard | 01d6346 | 1997-01-20 19:43:45 +0000 | [diff] [blame] | 12 | #include "dc.h" |
Alexandre Julliard | 06c275a | 1999-05-02 14:32:27 +0000 | [diff] [blame] | 13 | #include "debugtools.h" |
Alexandre Julliard | 46ea8b3 | 1998-05-03 19:01:20 +0000 | [diff] [blame] | 14 | |
Alexandre Julliard | 06c275a | 1999-05-02 14:32:27 +0000 | [diff] [blame] | 15 | DEFAULT_DEBUG_CHANNEL(driver) |
Patrik Stridvall | b4b9fae | 1999-04-19 14:56:29 +0000 | [diff] [blame] | 16 | |
Huw D M Davies | b0dd717 | 1999-07-24 12:13:46 +0000 | [diff] [blame] | 17 | /*********************************************************************** |
| 18 | * Escape16 [GDI.38] |
| 19 | */ |
Alexandre Julliard | 670cdc4 | 1997-08-24 16:00:30 +0000 | [diff] [blame] | 20 | INT16 WINAPI Escape16( HDC16 hdc, INT16 nEscape, INT16 cbInput, |
| 21 | SEGPTR lpszInData, SEGPTR lpvOutData ) |
Alexandre Julliard | 490a27e | 1994-06-08 13:57:50 +0000 | [diff] [blame] | 22 | { |
Alexandre Julliard | 01d6346 | 1997-01-20 19:43:45 +0000 | [diff] [blame] | 23 | DC * dc = DC_GetDCPtr( hdc ); |
| 24 | if (!dc || !dc->funcs->pEscape) return 0; |
Huw D M Davies | 304d9a4 | 1999-09-13 15:15:45 +0000 | [diff] [blame] | 25 | if(nEscape == SETABORTPROC) SetAbortProc16(hdc, lpszInData); |
Alexandre Julliard | 0e270f4 | 1996-08-24 18:26:35 +0000 | [diff] [blame] | 26 | return dc->funcs->pEscape( dc, nEscape, cbInput, lpszInData, lpvOutData ); |
Alexandre Julliard | 490a27e | 1994-06-08 13:57:50 +0000 | [diff] [blame] | 27 | } |
Alexandre Julliard | 01d6346 | 1997-01-20 19:43:45 +0000 | [diff] [blame] | 28 | |
Huw D M Davies | b0dd717 | 1999-07-24 12:13:46 +0000 | [diff] [blame] | 29 | /************************************************************************ |
| 30 | * Escape [GDI32.200] |
| 31 | */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 32 | INT WINAPI Escape( HDC hdc, INT nEscape, INT cbInput, |
Huw D M Davies | b0dd717 | 1999-07-24 12:13:46 +0000 | [diff] [blame] | 33 | LPCSTR lpszInData, LPVOID lpvOutData ) |
Alexandre Julliard | 01d6346 | 1997-01-20 19:43:45 +0000 | [diff] [blame] | 34 | { |
Alexandre Julliard | 3db94ef | 1997-09-28 17:43:24 +0000 | [diff] [blame] | 35 | SEGPTR segin,segout; |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 36 | INT ret; |
Huw D M Davies | 304d9a4 | 1999-09-13 15:15:45 +0000 | [diff] [blame] | 37 | DC * dc = DC_GetDCPtr( hdc ); |
| 38 | if (!dc || !dc->funcs->pEscape) return 0; |
Alexandre Julliard | 3db94ef | 1997-09-28 17:43:24 +0000 | [diff] [blame] | 39 | |
Alexandre Julliard | 3db94ef | 1997-09-28 17:43:24 +0000 | [diff] [blame] | 40 | segin = (SEGPTR)lpszInData; |
| 41 | segout = (SEGPTR)lpvOutData; |
Alexandre Julliard | 670cdc4 | 1997-08-24 16:00:30 +0000 | [diff] [blame] | 42 | switch (nEscape) { |
Huw D M Davies | e39b676 | 1999-05-17 16:20:51 +0000 | [diff] [blame] | 43 | /* Escape(hdc,QUERYESCSUPPORT,LPINT,NULL) */ |
Huw D M Davies | 56a8644 | 1999-09-19 14:13:39 +0000 | [diff] [blame] | 44 | /* Escape(hdc,CLIP_TO_PATH,LPINT,NULL) */ |
Huw D M Davies | e39b676 | 1999-05-17 16:20:51 +0000 | [diff] [blame] | 45 | case QUERYESCSUPPORT: |
Huw D M Davies | 56a8644 | 1999-09-19 14:13:39 +0000 | [diff] [blame] | 46 | case CLIP_TO_PATH: |
Huw D M Davies | e39b676 | 1999-05-17 16:20:51 +0000 | [diff] [blame] | 47 | { |
Alexandre Julliard | 3db94ef | 1997-09-28 17:43:24 +0000 | [diff] [blame] | 48 | LPINT16 x = (LPINT16)SEGPTR_NEW(INT16); |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 49 | *x = *(INT*)lpszInData; |
Alexandre Julliard | 3db94ef | 1997-09-28 17:43:24 +0000 | [diff] [blame] | 50 | segin = SEGPTR_GET(x); |
Huw D M Davies | d0cbe85 | 1999-05-22 18:40:36 +0000 | [diff] [blame] | 51 | cbInput = sizeof(INT16); |
Alexandre Julliard | 3db94ef | 1997-09-28 17:43:24 +0000 | [diff] [blame] | 52 | break; |
Huw D M Davies | e39b676 | 1999-05-17 16:20:51 +0000 | [diff] [blame] | 53 | } |
Alexandre Julliard | 3db94ef | 1997-09-28 17:43:24 +0000 | [diff] [blame] | 54 | |
| 55 | /* Escape(hdc,GETSCALINGFACTOR,NULL,LPPOINT32) */ |
| 56 | /* Escape(hdc,GETPHYSPAGESIZE,NULL,LPPOINT32) */ |
| 57 | /* Escape(hdc,GETPRINTINGOFFSET,NULL,LPPOINT32) */ |
| 58 | |
| 59 | case GETSCALINGFACTOR: |
| 60 | case GETPHYSPAGESIZE: |
| 61 | case GETPRINTINGOFFSET: |
| 62 | segout = SEGPTR_GET(SEGPTR_NEW(POINT16)); |
Huw D M Davies | d0cbe85 | 1999-05-22 18:40:36 +0000 | [diff] [blame] | 63 | cbInput = sizeof(POINT16); |
Alexandre Julliard | 3db94ef | 1997-09-28 17:43:24 +0000 | [diff] [blame] | 64 | break; |
Alexandre Julliard | 491502b | 1997-11-01 19:08:16 +0000 | [diff] [blame] | 65 | |
Huw D M Davies | 304d9a4 | 1999-09-13 15:15:45 +0000 | [diff] [blame] | 66 | /* Escape(hdc,EXT_DEVICE_CAPS,LPINT,LPDWORD) */ |
| 67 | case EXT_DEVICE_CAPS: |
| 68 | { |
| 69 | LPINT16 lpIndex = (LPINT16)SEGPTR_NEW(INT16); |
| 70 | LPDWORD lpCaps = (LPDWORD)SEGPTR_NEW(DWORD); |
| 71 | *lpIndex = *(INT*)lpszInData; |
| 72 | |
| 73 | segin = SEGPTR_GET(lpIndex); |
| 74 | segout = SEGPTR_GET(lpCaps); |
| 75 | cbInput = sizeof(INT16); |
| 76 | break; |
| 77 | } |
Alexandre Julliard | 491502b | 1997-11-01 19:08:16 +0000 | [diff] [blame] | 78 | |
Huw D M Davies | 56a8644 | 1999-09-19 14:13:39 +0000 | [diff] [blame] | 79 | /* Escape(hdc,SETLINECAP,LPINT,LPINT) */ |
| 80 | case SETLINECAP: |
| 81 | case SETLINEJOIN: |
| 82 | case SETMITERLIMIT: |
| 83 | { |
| 84 | LPINT16 new = (LPINT16)SEGPTR_NEW(INT16); |
| 85 | LPINT16 old = (LPINT16)SEGPTR_NEW(INT16); |
| 86 | *new = *(INT*)lpszInData; |
| 87 | segin = SEGPTR_GET(new); |
| 88 | segout = SEGPTR_GET(old); |
| 89 | cbInput = sizeof(INT16); |
| 90 | break; |
| 91 | } |
Huw D M Davies | 304d9a4 | 1999-09-13 15:15:45 +0000 | [diff] [blame] | 92 | /* Escape(hdc,GETTECHNOLOGY,NULL,LPSTR); */ |
Alexandre Julliard | 491502b | 1997-11-01 19:08:16 +0000 | [diff] [blame] | 93 | case GETTECHNOLOGY: { |
| 94 | segout = SEGPTR_GET(SEGPTR_ALLOC(200)); /* enough I hope */ |
| 95 | break; |
| 96 | |
| 97 | } |
| 98 | |
| 99 | /* Escape(hdc,ENABLEPAIRKERNING,LPINT16,LPINT16); */ |
| 100 | |
| 101 | case ENABLEPAIRKERNING: { |
| 102 | LPINT16 enab = SEGPTR_NEW(INT16); |
| 103 | segout = SEGPTR_GET(SEGPTR_NEW(INT16)); |
| 104 | segin = SEGPTR_GET(enab); |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 105 | *enab = *(INT*)lpszInData; |
Huw D M Davies | d0cbe85 | 1999-05-22 18:40:36 +0000 | [diff] [blame] | 106 | cbInput = sizeof(INT16); |
Alexandre Julliard | 491502b | 1997-11-01 19:08:16 +0000 | [diff] [blame] | 107 | break; |
| 108 | } |
| 109 | |
| 110 | /* Escape(hdc,GETFACENAME,NULL,LPSTR); */ |
| 111 | |
| 112 | case GETFACENAME: { |
| 113 | segout = SEGPTR_GET(SEGPTR_ALLOC(200)); |
| 114 | break; |
| 115 | } |
Huw D M Davies | 6fafe9e | 1998-11-01 14:06:04 +0000 | [diff] [blame] | 116 | |
Huw D M Davies | c0da44e4 | 1999-10-31 01:49:30 +0000 | [diff] [blame] | 117 | /* Escape(hdc,STARTDOC,LPSTR,LPDOCINFOA); |
| 118 | * lpvOutData is actually a pointer to the DocInfo structure and used as |
| 119 | * a second input parameter |
| 120 | */ |
Huw D M Davies | 6fafe9e | 1998-11-01 14:06:04 +0000 | [diff] [blame] | 121 | |
| 122 | case STARTDOC: /* string may not be \0 terminated */ |
| 123 | if(lpszInData) { |
| 124 | char *cp = SEGPTR_ALLOC(cbInput); |
| 125 | memcpy(cp, lpszInData, cbInput); |
| 126 | segin = SEGPTR_GET(cp); |
| 127 | } else |
| 128 | segin = 0; |
Huw D M Davies | c0da44e4 | 1999-10-31 01:49:30 +0000 | [diff] [blame] | 129 | |
| 130 | if(lpvOutData) { |
| 131 | DOCINFO16 *lpsegdoc = SEGPTR_NEW(DOCINFO16); |
| 132 | DOCINFOA *lpdoc = lpvOutData; |
| 133 | memset(lpsegdoc, 0, sizeof(*lpsegdoc)); |
| 134 | lpsegdoc->cbSize = sizeof(*lpsegdoc); |
| 135 | lpsegdoc->lpszDocName = SEGPTR_GET(SEGPTR_STRDUP(lpdoc->lpszDocName)); |
| 136 | lpsegdoc->lpszOutput = SEGPTR_GET(SEGPTR_STRDUP(lpdoc->lpszOutput)); |
| 137 | lpsegdoc->lpszDatatype = SEGPTR_GET(SEGPTR_STRDUP(lpdoc->lpszDatatype)); |
| 138 | lpsegdoc->fwType = lpdoc->fwType; |
| 139 | segout = SEGPTR_GET(lpsegdoc); |
| 140 | } |
Huw D M Davies | 6fafe9e | 1998-11-01 14:06:04 +0000 | [diff] [blame] | 141 | break; |
| 142 | |
Huw D M Davies | 304d9a4 | 1999-09-13 15:15:45 +0000 | [diff] [blame] | 143 | case SETABORTPROC: |
| 144 | SetAbortProc(hdc, (ABORTPROC)lpszInData); |
| 145 | break; |
| 146 | |
Huw D M Davies | 56a8644 | 1999-09-19 14:13:39 +0000 | [diff] [blame] | 147 | /* Escape(hdc,END_PATH,PATHINFO,NULL); */ |
| 148 | case END_PATH: |
| 149 | { |
| 150 | BYTE *p = SEGPTR_ALLOC(cbInput); |
| 151 | memcpy(p, lpszInData, cbInput); |
| 152 | segin = SEGPTR_GET(p); |
| 153 | break; |
| 154 | } |
| 155 | |
Huw D M Davies | 6fafe9e | 1998-11-01 14:06:04 +0000 | [diff] [blame] | 156 | default: |
| 157 | break; |
| 158 | |
Alexandre Julliard | 3db94ef | 1997-09-28 17:43:24 +0000 | [diff] [blame] | 159 | } |
Huw D M Davies | 6fafe9e | 1998-11-01 14:06:04 +0000 | [diff] [blame] | 160 | |
Huw D M Davies | 304d9a4 | 1999-09-13 15:15:45 +0000 | [diff] [blame] | 161 | ret = dc->funcs->pEscape( dc, nEscape, cbInput, segin, segout ); |
Huw D M Davies | 6fafe9e | 1998-11-01 14:06:04 +0000 | [diff] [blame] | 162 | |
Alexandre Julliard | 3db94ef | 1997-09-28 17:43:24 +0000 | [diff] [blame] | 163 | switch(nEscape) { |
| 164 | case QUERYESCSUPPORT: |
| 165 | if (ret) |
Alexandre Julliard | 06c275a | 1999-05-02 14:32:27 +0000 | [diff] [blame] | 166 | TRACE("target DC implements Escape %d\n",nEscape); |
Alexandre Julliard | 3db94ef | 1997-09-28 17:43:24 +0000 | [diff] [blame] | 167 | SEGPTR_FREE(PTR_SEG_TO_LIN(segin)); |
| 168 | break; |
Huw D M Davies | 56a8644 | 1999-09-19 14:13:39 +0000 | [diff] [blame] | 169 | |
Huw D M Davies | d0cbe85 | 1999-05-22 18:40:36 +0000 | [diff] [blame] | 170 | case SETLINECAP: |
| 171 | case SETLINEJOIN: |
Huw D M Davies | 56a8644 | 1999-09-19 14:13:39 +0000 | [diff] [blame] | 172 | case SETMITERLIMIT: |
| 173 | *(LPINT)lpvOutData = *(LPINT16)PTR_SEG_TO_LIN(segout); |
Huw D M Davies | e39b676 | 1999-05-17 16:20:51 +0000 | [diff] [blame] | 174 | SEGPTR_FREE(PTR_SEG_TO_LIN(segin)); |
Huw D M Davies | 56a8644 | 1999-09-19 14:13:39 +0000 | [diff] [blame] | 175 | SEGPTR_FREE(PTR_SEG_TO_LIN(segout)); |
Huw D M Davies | e39b676 | 1999-05-17 16:20:51 +0000 | [diff] [blame] | 176 | break; |
Alexandre Julliard | 3db94ef | 1997-09-28 17:43:24 +0000 | [diff] [blame] | 177 | case GETSCALINGFACTOR: |
| 178 | case GETPRINTINGOFFSET: |
| 179 | case GETPHYSPAGESIZE: { |
| 180 | LPPOINT16 x = (LPPOINT16)PTR_SEG_TO_LIN(segout); |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 181 | CONV_POINT16TO32(x,(LPPOINT)lpvOutData); |
Alexandre Julliard | 3db94ef | 1997-09-28 17:43:24 +0000 | [diff] [blame] | 182 | SEGPTR_FREE(x); |
| 183 | break; |
| 184 | } |
Huw D M Davies | 304d9a4 | 1999-09-13 15:15:45 +0000 | [diff] [blame] | 185 | case EXT_DEVICE_CAPS: |
| 186 | *(LPDWORD)lpvOutData = *(LPDWORD)PTR_SEG_TO_LIN(segout); |
| 187 | SEGPTR_FREE(PTR_SEG_TO_LIN(segin)); |
| 188 | SEGPTR_FREE(PTR_SEG_TO_LIN(segout)); |
| 189 | break; |
| 190 | |
Alexandre Julliard | 491502b | 1997-11-01 19:08:16 +0000 | [diff] [blame] | 191 | case GETTECHNOLOGY: { |
| 192 | LPSTR x=PTR_SEG_TO_LIN(segout); |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 193 | lstrcpyA(lpvOutData,x); |
Alexandre Julliard | 491502b | 1997-11-01 19:08:16 +0000 | [diff] [blame] | 194 | SEGPTR_FREE(x); |
Alexandre Julliard | e658d82 | 1997-11-30 17:45:40 +0000 | [diff] [blame] | 195 | break; |
Alexandre Julliard | 491502b | 1997-11-01 19:08:16 +0000 | [diff] [blame] | 196 | } |
| 197 | case ENABLEPAIRKERNING: { |
| 198 | LPINT16 enab = (LPINT16)PTR_SEG_TO_LIN(segout); |
| 199 | |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 200 | *(LPINT)lpvOutData = *enab; |
Alexandre Julliard | 491502b | 1997-11-01 19:08:16 +0000 | [diff] [blame] | 201 | SEGPTR_FREE(enab); |
| 202 | SEGPTR_FREE(PTR_SEG_TO_LIN(segin)); |
Alexandre Julliard | e658d82 | 1997-11-30 17:45:40 +0000 | [diff] [blame] | 203 | break; |
Alexandre Julliard | 491502b | 1997-11-01 19:08:16 +0000 | [diff] [blame] | 204 | } |
| 205 | case GETFACENAME: { |
| 206 | LPSTR x = (LPSTR)PTR_SEG_TO_LIN(segout); |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 207 | lstrcpyA(lpvOutData,x); |
Alexandre Julliard | 491502b | 1997-11-01 19:08:16 +0000 | [diff] [blame] | 208 | SEGPTR_FREE(x); |
| 209 | break; |
| 210 | } |
Huw D M Davies | c0da44e4 | 1999-10-31 01:49:30 +0000 | [diff] [blame] | 211 | case STARTDOC: { |
| 212 | DOCINFO16 *doc = PTR_SEG_TO_LIN(segout); |
| 213 | SEGPTR_FREE(PTR_SEG_TO_LIN(doc->lpszDocName)); |
| 214 | SEGPTR_FREE(PTR_SEG_TO_LIN(doc->lpszOutput)); |
| 215 | SEGPTR_FREE(PTR_SEG_TO_LIN(doc->lpszDatatype)); |
| 216 | SEGPTR_FREE(doc); |
| 217 | SEGPTR_FREE(PTR_SEG_TO_LIN(segin)); |
| 218 | break; |
| 219 | } |
| 220 | |
Huw D M Davies | 56a8644 | 1999-09-19 14:13:39 +0000 | [diff] [blame] | 221 | case CLIP_TO_PATH: |
| 222 | case END_PATH: |
Huw D M Davies | 6fafe9e | 1998-11-01 14:06:04 +0000 | [diff] [blame] | 223 | SEGPTR_FREE(PTR_SEG_TO_LIN(segin)); |
| 224 | break; |
| 225 | |
Alexandre Julliard | 3db94ef | 1997-09-28 17:43:24 +0000 | [diff] [blame] | 226 | default: |
| 227 | break; |
| 228 | } |
| 229 | return ret; |
| 230 | } |
| 231 | |
Alexandre Julliard | d30dfd2 | 1998-09-27 18:28:36 +0000 | [diff] [blame] | 232 | /****************************************************************************** |
Alexandre Julliard | 8da12c4 | 1999-01-17 16:55:11 +0000 | [diff] [blame] | 233 | * ExtEscape [GDI32.95] |
Alexandre Julliard | d30dfd2 | 1998-09-27 18:28:36 +0000 | [diff] [blame] | 234 | * |
| 235 | * PARAMS |
| 236 | * hdc [I] Handle to device context |
| 237 | * nEscape [I] Escape function |
| 238 | * cbInput [I] Number of bytes in input structure |
| 239 | * lpszInData [I] Pointer to input structure |
| 240 | * cbOutput [I] Number of bytes in output structure |
| 241 | * lpszOutData [O] Pointer to output structure |
| 242 | * |
| 243 | * RETURNS |
| 244 | * Success: >0 |
| 245 | * Not implemented: 0 |
| 246 | * Failure: <0 |
| 247 | */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 248 | INT WINAPI ExtEscape( HDC hdc, INT nEscape, INT cbInput, |
Huw D M Davies | b0dd717 | 1999-07-24 12:13:46 +0000 | [diff] [blame] | 249 | LPCSTR lpszInData, INT cbOutput, LPSTR lpszOutData ) |
Alexandre Julliard | d30dfd2 | 1998-09-27 18:28:36 +0000 | [diff] [blame] | 250 | { |
Huw D M Davies | b0dd717 | 1999-07-24 12:13:46 +0000 | [diff] [blame] | 251 | char *inBuf, *outBuf; |
| 252 | INT ret; |
| 253 | |
| 254 | inBuf = SEGPTR_ALLOC(cbInput); |
| 255 | memcpy(inBuf, lpszInData, cbInput); |
| 256 | outBuf = cbOutput ? SEGPTR_ALLOC(cbOutput) : NULL; |
| 257 | ret = Escape16( hdc, nEscape, cbInput, SEGPTR_GET(inBuf), |
| 258 | SEGPTR_GET(outBuf) ); |
| 259 | SEGPTR_FREE(inBuf); |
| 260 | if(outBuf) { |
| 261 | memcpy(lpszOutData, outBuf, cbOutput); |
| 262 | SEGPTR_FREE(outBuf); |
| 263 | } |
| 264 | return ret; |
Alexandre Julliard | 01d6346 | 1997-01-20 19:43:45 +0000 | [diff] [blame] | 265 | } |
Alexandre Julliard | d30dfd2 | 1998-09-27 18:28:36 +0000 | [diff] [blame] | 266 | |
Paul Quinn | 1beaae5 | 1998-12-15 15:38:36 +0000 | [diff] [blame] | 267 | /******************************************************************* |
| 268 | * DrawEscape [GDI32.74] |
| 269 | * |
| 270 | * |
| 271 | */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 272 | INT WINAPI DrawEscape(HDC hdc, INT nEscape, INT cbInput, LPCSTR lpszInData) |
Paul Quinn | 1beaae5 | 1998-12-15 15:38:36 +0000 | [diff] [blame] | 273 | { |
Alexandre Julliard | 06c275a | 1999-05-02 14:32:27 +0000 | [diff] [blame] | 274 | FIXME("DrawEscape, stub\n"); |
Paul Quinn | 1beaae5 | 1998-12-15 15:38:36 +0000 | [diff] [blame] | 275 | return 0; |
| 276 | } |