- Timestamp:
- Apr 26, 2011, 9:00:45 PM (14 years ago)
- Location:
- trunk/src
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/comdlg32/comdlg32.cpp
r6437 r21630 44 44 a->hwndOwner = Win32ToOS2Handle(a->hwndOwner); 45 45 46 // from gdi32/devcontext.cpp 47 BOOL WIN32API GetPMQueueName(LPSTR pDeviceName, LPSTR lpszPMQueue, INT cbPMQueue); 48 49 // USING_OPEN32 seems to be not necessary since the WGSS GlobalAlloc API appears 50 // to be in line with the Odin32 GlobalAlloc API (and the current version of 51 // WGSS doesn't export this API anyway) 52 46 53 #ifdef USING_OPEN32 47 54 … … 49 56 #define FLAG_FROM_OPEN32 1 50 57 51 //****************************************************************************** 52 //****************************************************************************** 53 HGLOBAL GlobalCopy(HGLOBAL hDest, HGLOBAL hSource, BOOL fToOpen32) 58 static HGLOBAL GlobalCopy(HGLOBAL hDest, HGLOBAL hSource, BOOL fToOpen32) 54 59 { 55 LPVOID src; 56 LPVOID dest; 57 ULONG size; 58 59 if(fToOpen32 == FLAG_TO_OPEN32) { 60 src = GlobalLock(hSource); 61 if(src) { 62 size = GlobalSize(hSource); 63 if(hDest == NULL) { 64 hDest = O32_GlobalAlloc(GHND, size); 65 } 66 dest = O32_GlobalLock(hDest); 67 memcpy(dest, src, size); 68 O32_GlobalUnlock(hDest); 69 } 70 GlobalUnlock(hSource); 71 } 72 else { 73 src = O32_GlobalLock(hSource); 74 if(src) { 75 size = O32_GlobalSize(hSource); 76 if(hDest == NULL) { 77 hDest = GlobalAlloc(GHND, size); 78 } 79 dest = GlobalLock(hDest); 80 memcpy(dest, src, size); 81 GlobalUnlock(hDest); 82 } 83 O32_GlobalUnlock(hSource); 84 } 85 return hDest; 60 LPVOID src; 61 LPVOID dest; 62 ULONG size; 63 64 if (fToOpen32 == FLAG_TO_OPEN32) 65 { 66 src = GlobalLock(hSource); 67 if (src) 68 { 69 size = GlobalSize(hSource); 70 if(hDest == NULL) 71 { 72 hDest = O32_GlobalAlloc(GHND, size); 73 } 74 dest = O32_GlobalLock(hDest); 75 memcpy(dest, src, size); 76 O32_GlobalUnlock(hDest); 77 } 78 GlobalUnlock(hSource); 79 } 80 else 81 { 82 src = O32_GlobalLock(hSource); 83 if (src) 84 { 85 size = O32_GlobalSize(hSource); 86 if(hDest == NULL) 87 { 88 hDest = GlobalAlloc(GHND, size); 89 } 90 dest = GlobalLock(hDest); 91 memcpy(dest, src, size); 92 GlobalUnlock(hDest); 93 } 94 O32_GlobalUnlock(hSource); 95 } 96 return hDest; 86 97 } 98 99 #define MyGlobalAlloc O32_GlobalAlloc 100 #define MyGlobalLock O32_GlobalLock 101 #define MyGlobalUnlock O32_GlobalUnlock 102 #define MyGlobalFree O32_GlobalFree 103 #define MyGlobalSize O32_GlobalSize 104 105 #else 106 107 #define MyGlobalAlloc GlobalAlloc 108 #define MyGlobalLock GlobalLock 109 #define MyGlobalUnlock GlobalUnlock 110 #define MyGlobalFree GlobalFree 111 #define MyGlobalSize GlobalSize 112 87 113 #endif 88 #if 1 114 89 115 /***************************************************************************** 90 116 * Name : … … 102 128 LPPRINTDLGA, lppd) 103 129 { 104 BOOL ret;130 BOOL ret; 105 131 #ifdef USING_OPEN32 106 HGLOBAL hDevmode = 0, hDevNames = 0; 107 HGLOBAL hOrgDevmode = 0, hOrgDevNames = 0; 108 DEVMODEA *devmode, *devmodeorg; 109 DEVNAMES *devnames, *devnamesorg; 110 ULONG size; 132 HGLOBAL hOrgDevMode = 0, hOrgDevNames = 0; 111 133 #endif 112 113 COMDLG32_CHECKHOOK2(lppd, PD_ENABLEPRINTHOOK, LPPRINTHOOKPROC,lpfnPrintHook) 114 COMDLG32_CHECKHOOK2(lppd, PD_ENABLESETUPHOOK, LPSETUPHOOKPROC,lpfnSetupHook) 134 LPSTR origDevice = NULL; 135 136 COMDLG32_CHECKHOOK2(lppd, PD_ENABLEPRINTHOOK, LPPRINTHOOKPROC,lpfnPrintHook) 137 COMDLG32_CHECKHOOK2(lppd, PD_ENABLESETUPHOOK, LPSETUPHOOKPROC,lpfnSetupHook) 115 138 116 139 #ifdef USING_OPEN32 117 if(lppd->hDevMode) { 118 hOrgDevmode = lppd->hDevMode; 119 lppd->hDevMode = GlobalCopy(NULL, hOrgDevmode, FLAG_TO_OPEN32); 120 } 121 if(lppd->hDevNames) { 122 hOrgDevNames = lppd->hDevNames; 123 lppd->hDevNames = GlobalCopy(NULL, hOrgDevNames, FLAG_TO_OPEN32); 124 } 140 if (lppd->hDevMode) 141 { 142 hOrgDevMode = lppd->hDevMode; 143 lppd->hDevMode = GlobalCopy(NULL, hOrgDevMode, FLAG_TO_OPEN32); 144 } 145 if (lppd->hDevNames) 146 { 147 hOrgDevNames = lppd->hDevNames; 148 lppd->hDevNames = GlobalCopy(NULL, hOrgDevNames, FLAG_TO_OPEN32); 149 } 125 150 #endif 126 HWND hwndOwner = lppd->hwndOwner; 127 if(lppd->hwndOwner) { 128 lppd->hwndOwner = Win32ToOS2Handle(lppd->hwndOwner); 129 } 130 ret = O32_PrintDlg(lppd); 131 lppd->hwndOwner = hwndOwner; 151 152 if (lppd->hDevNames) 153 { 154 LPDEVNAMES devNames = (LPDEVNAMES)MyGlobalLock(lppd->hDevNames); 155 156 LPSTR driver = (LPSTR)devNames + devNames->wDriverOffset; 157 LPSTR device = (LPSTR)devNames + devNames->wDeviceOffset; 158 LPSTR output = (LPSTR)devNames + devNames->wOutputOffset; 159 int driverLen = lstrlenA(driver) + 1; 160 int deviceLen = lstrlenA(device) + 1; 161 int outputLen = lstrlenA(output) + 1; 162 163 // get the PM queue name for the device (which is usually the full 164 // PM printer's WPS object name): WGSS expects it and will correctly 165 // pre-select the printer specified in hDevNames. Note that we don't 166 // perform the opposite conversion from the PM queue to the device name 167 // after calling O32_PrintDlg() since this seems to work as it is: 168 // the dialog returns the correct DC when OK is pressed despite the name 169 // mismatch 170 171 CHAR queue[256]; 172 if (GetPMQueueName(device, queue, sizeof(queue))) 173 { 174 dprintf(("PrintDlgA: renamed device {%s} to PM queue {%s}", 175 device, queue)); 176 device = queue; 177 deviceLen = lstrlenA(device) + 1; 178 179 HGLOBAL hDevNames2 = 180 MyGlobalAlloc(GHND, MyGlobalSize(lppd->hDevNames) + 181 lstrlenA(queue) - (deviceLen - 1)); 182 183 LPDEVNAMES devNames2 = (LPDEVNAMES)MyGlobalLock(hDevNames2); 184 185 devNames2->wDriverOffset = sizeof(DEVNAMES); 186 memcpy((LPSTR)devNames2 + devNames2->wDriverOffset, driver, driverLen); 187 devNames2->wDeviceOffset = devNames2->wDriverOffset + driverLen; 188 memcpy((LPSTR)devNames2 + devNames2->wDeviceOffset, device, deviceLen); 189 devNames2->wOutputOffset = devNames2->wDeviceOffset + deviceLen; 190 memcpy((LPSTR)devNames2 + devNames2->wOutputOffset, output, outputLen); 191 devNames2->wDefault = devNames->wDefault; 192 193 MyGlobalUnlock(hDevNames2); 194 195 MyGlobalUnlock(lppd->hDevNames); 196 MyGlobalFree(lppd->hDevNames); 197 lppd->hDevNames = hDevNames2; 198 } 199 else 200 MyGlobalUnlock(lppd->hDevNames); 201 } 202 203 HWND hwndOwner = lppd->hwndOwner; 204 if (lppd->hwndOwner) 205 { 206 lppd->hwndOwner = Win32ToOS2Handle(lppd->hwndOwner); 207 } 208 209 ret = O32_PrintDlg(lppd); 210 211 lppd->hwndOwner = hwndOwner; 212 132 213 #ifdef USING_OPEN32 133 if(ret == TRUE) { 134 if(lppd->hDevMode) { 135 hDevmode = lppd->hDevMode; 136 lppd->hDevMode = GlobalCopy(hOrgDevmode, lppd->hDevMode, FLAG_FROM_OPEN32); 137 O32_GlobalFree(hDevmode); 138 } 139 if(lppd->hDevNames) { 140 hDevNames = lppd->hDevNames; 141 lppd->hDevNames = GlobalCopy(hOrgDevNames, lppd->hDevNames, FLAG_FROM_OPEN32); 142 O32_GlobalFree(hDevNames); 143 } 144 } 214 if (ret == TRUE) 215 { 216 if (lppd->hDevMode) 217 { 218 HGLOBAL hDevMode = lppd->hDevMode; 219 lppd->hDevMode = GlobalCopy(hOrgDevMode, lppd->hDevMode, 220 FLAG_FROM_OPEN32); 221 O32_GlobalFree(hDevMode); 222 } 223 if (lppd->hDevNames) 224 { 225 HGLOBAL hDevNames = lppd->hDevNames; 226 lppd->hDevNames = GlobalCopy(hOrgDevNames, lppd->hDevNames, 227 FLAG_FROM_OPEN32); 228 O32_GlobalFree(hDevNames); 229 } 230 } 231 else 232 { 233 if (lppd->hDevMode) 234 { 235 O32_GlobalFree(lppd->hDevMode); 236 lppd->hDevMode = hOrgDevMode; 237 } 238 if (lppd->hDevNames) 239 { 240 O32_GlobalFree(lppd->hDevNames); 241 lppd->hDevNames = hOrgDevNames; 242 } 243 } 145 244 #endif 146 if(lppd->hDC) { 147 OSLibGpiSetCp(lppd->hDC, GetDisplayCodepage()); 148 } 149 return ret; 245 246 if(lppd->hDC) 247 { 248 OSLibGpiSetCp(lppd->hDC, GetDisplayCodepage()); 249 } 250 251 return ret; 150 252 } 151 253 … … 166 268 LPPRINTDLGW, lppd) 167 269 { 168 169 PRINTDLGA pd; 170 BOOL bResult; 171 172 //SvL: TODO: hDevMode & hDevNames 173 dprintf(("PrintDlgW: ERROR NOT COMPLETE (UNICODE TRANSLATION)!!")); 174 175 memcpy(&pd, // make binary copy first to save all the fields 176 lppd, 177 sizeof(pd)); 178 179 // convert to ASCII string 180 if ((lppd->Flags & PD_ENABLEPRINTTEMPLATE) && 181 (lppd->lpPrintTemplateName != NULL)) 182 pd.lpPrintTemplateName = UnicodeToAsciiString((WCHAR*)lppd->lpPrintTemplateName); 183 else 184 pd.lpPrintTemplateName = NULL; 185 186 if ((lppd->Flags & PD_ENABLESETUPTEMPLATE) && 187 (lppd->lpSetupTemplateName != NULL)) 188 pd.lpSetupTemplateName = UnicodeToAsciiString((WCHAR*)lppd->lpSetupTemplateName); 189 else 190 pd.lpSetupTemplateName = NULL; 191 192 COMDLG32_CHECKHOOK2((&pd), PD_ENABLEPRINTHOOK, LPPRINTHOOKPROC,lpfnPrintHook) 193 COMDLG32_CHECKHOOK2((&pd), PD_ENABLESETUPHOOK, LPSETUPHOOKPROC,lpfnSetupHook) 194 195 bResult = O32_PrintDlg(&pd); // call ASCII API 196 197 if (pd.lpPrintTemplateName != NULL) FreeAsciiString((char*)pd.lpPrintTemplateName); 198 if (pd.lpSetupTemplateName != NULL) FreeAsciiString((char*)pd.lpSetupTemplateName); 199 200 // copy back result 201 lppd->Flags = pd.Flags; 202 lppd->nFromPage = pd.nFromPage; 203 lppd->nToPage = pd.nToPage; 204 lppd->nMinPage = pd.nMinPage; 205 lppd->nMaxPage = pd.nMaxPage; 206 lppd->nCopies = pd.nCopies; 207 //@@@PH: all pass-back fields ? 208 209 return bResult; 270 PRINTDLGA pd; 271 BOOL bResult; 272 273 memcpy(&pd, // make binary copy first to save all the fields 274 lppd, 275 sizeof(pd)); 276 277 if (lppd->hwndOwner) 278 { 279 pd.hwndOwner = Win32ToOS2Handle(lppd->hwndOwner); 280 } 281 282 if (lppd->hDevMode) 283 { 284 LPDEVMODEW devMode = (LPDEVMODEW)GlobalLock(lppd->hDevMode); 285 286 dprintf(("PrintDlgW: in devMode{%.*ls,%.*ls}", 287 CCHDEVICENAME, devMode->dmDeviceName, 288 CCHFORMNAME, devMode->dmFormName)); 289 290 pd.hDevMode = MyGlobalAlloc(GHND, sizeof(DEVMODEA)); 291 292 LPDEVMODEA devModeA = (LPDEVMODEA)MyGlobalLock(pd.hDevMode); 293 294 // convert to ASCII string 295 UnicodeToAsciiN((LPWSTR)devMode->dmDeviceName, (LPSTR)devModeA->dmDeviceName, 296 CCHDEVICENAME); 297 UnicodeToAsciiN((LPWSTR)devMode->dmFormName, (LPSTR)devModeA->dmFormName, 298 CCHFORMNAME); 299 300 MyGlobalLock(pd.hDevMode); 301 GlobalLock(lppd->hDevMode); 302 } 303 304 if (lppd->hDevNames) 305 { 306 LPDEVNAMES devNames = (LPDEVNAMES)GlobalLock(lppd->hDevNames); 307 308 dprintf(("PrintDlgW: in devNames{%ls,%ls,%ls}", 309 (LPCWSTR)devNames + devNames->wDriverOffset, 310 (LPCWSTR)devNames + devNames->wDeviceOffset, 311 (LPCWSTR)devNames + devNames->wOutputOffset)); 312 313 // convert to ASCII string 314 LPSTR driver = UnicodeToAsciiString((LPCWSTR)devNames + devNames->wDriverOffset); 315 LPSTR device = UnicodeToAsciiString((LPCWSTR)devNames + devNames->wDeviceOffset); 316 LPSTR output = UnicodeToAsciiString((LPCWSTR)devNames + devNames->wOutputOffset); 317 int driverLen = lstrlenA(driver) + 1; 318 int deviceLen = lstrlenA(device) + 1; 319 int outputLen = lstrlenA(output) + 1; 320 321 // get the PM queue name for the device (which is usually the full 322 // PM printer's WPS object name): WGSS expects it and will correctly 323 // pre-select the printer specified in hDevNames. Note that we don't 324 // perform the opposite conversion from the PM queue to the device name 325 // after calling O32_PrintDlg() since this seems to work as it is: 326 // the dialog returns the correct DC when OK is pressed despite the name 327 // mismatch 328 329 CHAR queue[256]; 330 if (GetPMQueueName(device, queue, sizeof(queue))) 331 { 332 dprintf(("PrintDlgW: renamed device {%s} to PM queue {%s}", 333 device, queue)); 334 device = queue; 335 deviceLen = lstrlenA(device) + 1; 336 } 337 338 pd.hDevNames = MyGlobalAlloc(GHND, sizeof(DEVNAMES) + 339 driverLen + deviceLen + outputLen); 340 341 LPDEVNAMES devNamesA = (LPDEVNAMES)MyGlobalLock(pd.hDevNames); 342 343 devNamesA->wDriverOffset = sizeof(DEVNAMES); 344 memcpy((LPSTR)devNamesA + devNamesA->wDriverOffset, driver, driverLen); 345 devNamesA->wDeviceOffset = devNamesA->wDriverOffset + driverLen; 346 memcpy((LPSTR)devNamesA + devNamesA->wDeviceOffset, device, deviceLen); 347 devNamesA->wOutputOffset = devNamesA->wDeviceOffset + deviceLen; 348 memcpy((LPSTR)devNamesA + devNamesA->wOutputOffset, output, outputLen); 349 devNamesA->wDefault = devNames->wDefault; 350 351 FreeAsciiString(output); 352 if (device != queue) 353 FreeAsciiString(device); 354 FreeAsciiString(driver); 355 356 MyGlobalUnlock(pd.hDevNames); 357 GlobalUnlock(lppd->hDevNames); 358 } 359 360 // convert to ASCII string 361 if ((lppd->Flags & PD_ENABLEPRINTTEMPLATE) && 362 (lppd->lpPrintTemplateName != NULL)) 363 pd.lpPrintTemplateName = UnicodeToAsciiString((WCHAR*)lppd->lpPrintTemplateName); 364 else 365 pd.lpPrintTemplateName = NULL; 366 367 if ((lppd->Flags & PD_ENABLESETUPTEMPLATE) && 368 (lppd->lpSetupTemplateName != NULL)) 369 pd.lpSetupTemplateName = UnicodeToAsciiString((WCHAR*)lppd->lpSetupTemplateName); 370 else 371 pd.lpSetupTemplateName = NULL; 372 373 COMDLG32_CHECKHOOK2((&pd), PD_ENABLEPRINTHOOK, LPPRINTHOOKPROC, lpfnPrintHook) 374 COMDLG32_CHECKHOOK2((&pd), PD_ENABLESETUPHOOK, LPSETUPHOOKPROC, lpfnSetupHook) 375 376 bResult = O32_PrintDlg(&pd); // call ASCII API 377 378 if (pd.lpPrintTemplateName != NULL) 379 FreeAsciiString((char*)pd.lpPrintTemplateName); 380 if (pd.lpSetupTemplateName != NULL) 381 FreeAsciiString((char*)pd.lpSetupTemplateName); 382 383 if (pd.hDevNames) 384 { 385 LPDEVNAMES devNames = (LPDEVNAMES)MyGlobalLock(pd.hDevNames); 386 387 dprintf(("PrintDlgW: out devNames{%s,%s,%s}", 388 (LPCSTR)devNames + devNames->wDriverOffset, 389 (LPCSTR)devNames + devNames->wDeviceOffset, 390 (LPCSTR)devNames + devNames->wOutputOffset)); 391 392 LPSTR realDevice = (LPSTR)devNames + devNames->wDeviceOffset; 393 394 // convert from ASCII string 395 LPWSTR driver = AsciiToUnicodeString((LPCSTR)devNames + devNames->wDriverOffset); 396 LPWSTR device = AsciiToUnicodeString(realDevice); 397 LPWSTR output = AsciiToUnicodeString((LPCSTR)devNames + devNames->wOutputOffset); 398 int driverLen = (lstrlenW(driver) + 1) * sizeof(WCHAR); 399 int deviceLen = (lstrlenW(device) + 1) * sizeof(WCHAR); 400 int outputLen = (lstrlenW(output) + 1) * sizeof(WCHAR); 401 402 if (lppd->hDevNames) 403 lppd->hDevNames = GlobalReAlloc(lppd->hDevNames, 404 sizeof(DEVNAMES) + 405 driverLen + deviceLen + outputLen, 406 GHND); 407 else 408 lppd->hDevNames = GlobalAlloc(GHND, sizeof(DEVNAMES) + 409 driverLen + deviceLen + outputLen); 410 411 LPDEVNAMES devNamesW = (LPDEVNAMES)GlobalLock(lppd->hDevNames); 412 413 devNamesW->wDriverOffset = sizeof(DEVNAMES) / sizeof(WCHAR); 414 memcpy((LPWSTR)devNamesW + devNamesW->wDriverOffset, driver, driverLen); 415 devNamesW->wDeviceOffset = devNamesW->wDriverOffset + (driverLen / sizeof(WCHAR)); 416 memcpy((LPWSTR)devNamesW + devNamesW->wDeviceOffset, device, deviceLen); 417 devNamesW->wOutputOffset = devNamesW->wDeviceOffset + (deviceLen / sizeof(WCHAR)); 418 memcpy((LPWSTR)devNamesW + devNamesW->wOutputOffset, output, outputLen); 419 devNamesW->wDefault = devNames->wDefault; 420 421 FreeAsciiString(output); 422 FreeAsciiString(device); 423 FreeAsciiString(driver); 424 425 GlobalUnlock(lppd->hDevNames); 426 MyGlobalUnlock(pd.hDevNames); 427 428 MyGlobalFree(pd.hDevNames); 429 } 430 else 431 { 432 if (lppd->hDevNames) 433 MyGlobalFree(lppd->hDevNames); 434 lppd->hDevNames = NULL; 435 } 436 437 if (pd.hDevMode) 438 { 439 LPDEVMODEA devMode = (LPDEVMODEA)MyGlobalLock(pd.hDevMode); 440 441 dprintf(("PrintDlgW: out devMode{%.*s,%.*s}", 442 CCHDEVICENAME, devMode->dmDeviceName, 443 CCHFORMNAME, devMode->dmFormName)); 444 445 if (!lppd->hDevMode) 446 lppd->hDevMode = GlobalAlloc(GHND, sizeof(DEVMODEW)); 447 448 LPDEVMODEW devModeW = (LPDEVMODEW)GlobalLock(lppd->hDevMode); 449 450 // convert from ASCII string 451 AsciiToUnicodeN((LPSTR)devMode->dmDeviceName, (LPWSTR)devModeW->dmDeviceName, 452 CCHDEVICENAME); 453 AsciiToUnicodeN((LPSTR)devMode->dmFormName, (LPWSTR)devModeW->dmFormName, 454 CCHFORMNAME); 455 456 memcpy(&devModeW->dmSpecVersion, &devMode->dmSpecVersion, 457 offsetof(DEVMODEW, dmFormName) - offsetof(DEVMODEW, dmSpecVersion)); 458 memcpy(&devModeW->dmLogPixels, &devMode->dmLogPixels, 459 sizeof(DEVMODEW) - offsetof(DEVMODEW, dmLogPixels)); 460 461 GlobalUnlock(lppd->hDevMode); 462 MyGlobalUnlock(pd.hDevMode); 463 464 MyGlobalFree(pd.hDevMode); 465 } 466 else 467 { 468 if (lppd->hDevNames) 469 MyGlobalFree(lppd->hDevNames); 470 lppd->hDevNames = NULL; 471 } 472 473 // copy back the rest 474 lppd->hDC = pd.hDC; 475 lppd->Flags = pd.Flags; 476 lppd->nFromPage = pd.nFromPage; 477 lppd->nToPage = pd.nToPage; 478 lppd->nMinPage = pd.nMinPage; 479 lppd->nMaxPage = pd.nMaxPage; 480 lppd->nCopies = pd.nCopies; 481 482 if (lppd->hDC) 483 { 484 OSLibGpiSetCp(lppd->hDC, GetDisplayCodepage()); 485 } 486 487 return bResult; 210 488 } 211 489 … … 258 536 } 259 537 260 #endif -
trunk/src/comdlg32/makefile
r21342 r21630 36 36 $(OBJDIR)\filedlg.obj \ 37 37 $(OBJDIR)\filedlg95.obj \ 38 ##$(OBJDIR)\comdlg32.obj \38 $(OBJDIR)\comdlg32.obj \ 39 39 $(OBJDIR)\filedlgbrowser.obj \ 40 $(OBJDIR)\printdlg.obj \40 ##$(OBJDIR)\printdlg.obj \ 41 41 $(OBJDIR)\rsrc.obj 42 42 -
trunk/src/gdi32/devcontext.cpp
r21304 r21630 54 54 // 55 55 //****************************************************************************** 56 static BOOLGetPMQueueName(LPSTR pDeviceName, LPSTR lpszPMQueue, INT cbPMQueue)56 BOOL WIN32API GetPMQueueName(LPSTR pDeviceName, LPSTR lpszPMQueue, INT cbPMQueue) 57 57 { 58 58 static HINSTANCE hInstance = 0; … … 86 86 else 87 87 { //Check if it's a printer device 88 if(GetPMQueueName((LPSTR)lpszDevice, szDevice, sizeof(szDevice)) == TRUE) 88 if(GetPMQueueName((LPSTR)lpszDevice, szDevice, sizeof(szDevice)) == TRUE) 89 89 { 90 90 dprintf(("Rename printer %s to PM Queue %s", lpszDevice, szDevice)); … … 149 149 devmode.dmPaperSize = arg4->dmPaperSize; 150 150 devmode.dmPaperLength = arg4->dmPaperLength; 151 devmode.dmPaperWidth = arg4->dmPaperWidth; 152 #else 153 devmode.s1.dmOrientation = arg4->s1.dmOrientation; 154 devmode.s1.dmPaperSize = arg4->s1.dmPaperSize; 155 devmode.s1.dmPaperLength = arg4->s1.dmPaperLength; 156 devmode.s1.dmPaperWidth = arg4->s1.dmPaperWidth; 157 #endif 158 devmode.dmScale = arg4->dmScale; 159 devmode.dmCopies = arg4->dmCopies; 160 devmode.dmDefaultSource = arg4->dmDefaultSource; 161 devmode.dmPrintQuality = arg4->dmPrintQuality; 162 devmode.dmColor = arg4->dmColor; 163 devmode.dmDuplex = arg4->dmDuplex; 164 devmode.dmYResolution = arg4->dmYResolution; 165 devmode.dmTTOption = arg4->dmTTOption; 166 devmode.dmCollate = arg4->dmCollate; 167 devmode.dmLogPixels = arg4->dmLogPixels; 168 devmode.dmBitsPerPel = arg4->dmBitsPerPel; 169 devmode.dmPelsWidth = arg4->dmPelsWidth; 170 devmode.dmPelsHeight = arg4->dmPelsHeight; 171 devmode.dmDisplayFlags = arg4->dmDisplayFlags; 172 devmode.dmDisplayFrequency = arg4->dmDisplayFrequency; 173 devmode.dmICMMethod = arg4->dmICMMethod; 174 devmode.dmICMIntent = arg4->dmICMIntent; 175 devmode.dmMediaType = arg4->dmMediaType; 176 devmode.dmDitherType = arg4->dmDitherType; 177 devmode.dmReserved1 = arg4->dmReserved1; 178 devmode.dmReserved2 = arg4->dmReserved2; 179 rc = CreateDCA(astring1,astring2,astring3,&devmode); 180 } 181 else 182 rc = CreateDCA(astring1,astring2,astring3, NULL); 183 184 FreeAsciiString(astring1); 185 FreeAsciiString(astring2); 186 FreeAsciiString(astring3); 187 188 if(arg4) 189 { 190 FreeAsciiString(astring4); 191 FreeAsciiString(astring5); 192 } 193 194 return rc; 195 } 196 //****************************************************************************** 197 //****************************************************************************** 198 HDC WIN32API CreateICA(LPCSTR lpszDriver, LPCSTR lpszDevice, LPCSTR lpszOutput, 199 const DEVMODEA *lpdvmInit) 200 { 201 HDC hdc; 202 char szDevice[256]; 203 204 //SvL: Open32 tests for "DISPLAY" 205 if(lpszDriver && !stricmp(lpszDriver, szDisplay)) { 206 lpszDriver = szDisplay; 207 } 208 else 209 { //Check if it's a printer device 210 if(GetPMQueueName((LPSTR)lpszDevice, szDevice, sizeof(szDevice)) == TRUE) 211 { 212 dprintf(("Rename printer %s to PM Queue %s", lpszDevice, szDevice)); 213 lpszDevice = szDevice; 214 //Must ignore port name here or else the wrong queue might be used 215 //(unless we are told to print to file) 216 if (lpszOutput && strcmp(lpszOutput, "FILE:") != 0 && strcmp(lpszOutput, "FILE") != 0) 217 lpszOutput = NULL; 218 } 219 } 220 221 //SvL: Open32 tests lpszDriver for NULL even though it's ignored 222 if(lpszDriver == NULL) { 223 lpszDriver = lpszDevice; 224 } 225 hdc = O32_CreateIC(lpszDriver, lpszDevice, lpszOutput, lpdvmInit); 226 227 dprintf(("GDI32: CreateICA %s %s %s %x returned %x", lpszDriver, lpszDevice, lpszOutput, lpdvmInit, hdc)); 228 229 if(hdc) STATS_CreateICA(hdc, lpszDriver, lpszDevice, lpszOutput, lpdvmInit); 230 return hdc; 231 } 232 //****************************************************************************** 233 //****************************************************************************** 234 HDC WIN32API CreateICW( LPCWSTR arg1, LPCWSTR arg2, LPCWSTR arg3, const DEVMODEW * arg4) 235 { 236 char *astring4, *astring5; 237 238 char *astring1 = UnicodeToAsciiString((LPWSTR)arg1); 239 char *astring2 = UnicodeToAsciiString((LPWSTR)arg2); 240 char *astring3 = UnicodeToAsciiString((LPWSTR)arg3); 241 if(arg4) 242 { 243 astring4 = UnicodeToAsciiString((LPWSTR)(arg4->dmDeviceName)); 244 astring5 = UnicodeToAsciiString((LPWSTR)(arg4->dmFormName)); 245 } 246 247 HDC rc; 248 DEVMODEA devmode; 249 250 if(arg4) 251 { 252 strcpy((char*)devmode.dmDeviceName, astring4); 253 strcpy((char*)devmode.dmFormName, astring5); 254 255 devmode.dmSpecVersion = arg4->dmSpecVersion; 256 devmode.dmDriverVersion = arg4->dmDriverVersion; 257 devmode.dmSize = arg4->dmSize; 258 devmode.dmDriverExtra = arg4->dmDriverExtra; 259 devmode.dmFields = arg4->dmFields; 260 #if (__IBMCPP__ == 360) 261 devmode.dmOrientation = arg4->dmOrientation; 262 devmode.dmPaperSize = arg4->dmPaperSize; 263 devmode.dmPaperLength = arg4->dmPaperLength; 264 devmode.dmPaperWidth = arg4->dmPaperWidth; 151 devmode.dmPaperWidth = arg4->dmPaperWidth; 265 152 #else 266 153 devmode.s1.dmOrientation = arg4->s1.dmOrientation; … … 290 177 devmode.dmReserved1 = arg4->dmReserved1; 291 178 devmode.dmReserved2 = arg4->dmReserved2; 179 rc = CreateDCA(astring1,astring2,astring3,&devmode); 180 } 181 else 182 rc = CreateDCA(astring1,astring2,astring3, NULL); 183 184 FreeAsciiString(astring1); 185 FreeAsciiString(astring2); 186 FreeAsciiString(astring3); 187 188 if(arg4) 189 { 190 FreeAsciiString(astring4); 191 FreeAsciiString(astring5); 192 } 193 194 return rc; 195 } 196 //****************************************************************************** 197 //****************************************************************************** 198 HDC WIN32API CreateICA(LPCSTR lpszDriver, LPCSTR lpszDevice, LPCSTR lpszOutput, 199 const DEVMODEA *lpdvmInit) 200 { 201 HDC hdc; 202 char szDevice[256]; 203 204 //SvL: Open32 tests for "DISPLAY" 205 if(lpszDriver && !stricmp(lpszDriver, szDisplay)) { 206 lpszDriver = szDisplay; 207 } 208 else 209 { //Check if it's a printer device 210 if(GetPMQueueName((LPSTR)lpszDevice, szDevice, sizeof(szDevice)) == TRUE) 211 { 212 dprintf(("Rename printer %s to PM Queue %s", lpszDevice, szDevice)); 213 lpszDevice = szDevice; 214 //Must ignore port name here or else the wrong queue might be used 215 //(unless we are told to print to file) 216 if (lpszOutput && strcmp(lpszOutput, "FILE:") != 0 && strcmp(lpszOutput, "FILE") != 0) 217 lpszOutput = NULL; 218 } 219 } 220 221 //SvL: Open32 tests lpszDriver for NULL even though it's ignored 222 if(lpszDriver == NULL) { 223 lpszDriver = lpszDevice; 224 } 225 hdc = O32_CreateIC(lpszDriver, lpszDevice, lpszOutput, lpdvmInit); 226 227 dprintf(("GDI32: CreateICA %s %s %s %x returned %x", lpszDriver, lpszDevice, lpszOutput, lpdvmInit, hdc)); 228 229 if(hdc) STATS_CreateICA(hdc, lpszDriver, lpszDevice, lpszOutput, lpdvmInit); 230 return hdc; 231 } 232 //****************************************************************************** 233 //****************************************************************************** 234 HDC WIN32API CreateICW( LPCWSTR arg1, LPCWSTR arg2, LPCWSTR arg3, const DEVMODEW * arg4) 235 { 236 char *astring4, *astring5; 237 238 char *astring1 = UnicodeToAsciiString((LPWSTR)arg1); 239 char *astring2 = UnicodeToAsciiString((LPWSTR)arg2); 240 char *astring3 = UnicodeToAsciiString((LPWSTR)arg3); 241 if(arg4) 242 { 243 astring4 = UnicodeToAsciiString((LPWSTR)(arg4->dmDeviceName)); 244 astring5 = UnicodeToAsciiString((LPWSTR)(arg4->dmFormName)); 245 } 246 247 HDC rc; 248 DEVMODEA devmode; 249 250 if(arg4) 251 { 252 strcpy((char*)devmode.dmDeviceName, astring4); 253 strcpy((char*)devmode.dmFormName, astring5); 254 255 devmode.dmSpecVersion = arg4->dmSpecVersion; 256 devmode.dmDriverVersion = arg4->dmDriverVersion; 257 devmode.dmSize = arg4->dmSize; 258 devmode.dmDriverExtra = arg4->dmDriverExtra; 259 devmode.dmFields = arg4->dmFields; 260 #if (__IBMCPP__ == 360) 261 devmode.dmOrientation = arg4->dmOrientation; 262 devmode.dmPaperSize = arg4->dmPaperSize; 263 devmode.dmPaperLength = arg4->dmPaperLength; 264 devmode.dmPaperWidth = arg4->dmPaperWidth; 265 #else 266 devmode.s1.dmOrientation = arg4->s1.dmOrientation; 267 devmode.s1.dmPaperSize = arg4->s1.dmPaperSize; 268 devmode.s1.dmPaperLength = arg4->s1.dmPaperLength; 269 devmode.s1.dmPaperWidth = arg4->s1.dmPaperWidth; 270 #endif 271 devmode.dmScale = arg4->dmScale; 272 devmode.dmCopies = arg4->dmCopies; 273 devmode.dmDefaultSource = arg4->dmDefaultSource; 274 devmode.dmPrintQuality = arg4->dmPrintQuality; 275 devmode.dmColor = arg4->dmColor; 276 devmode.dmDuplex = arg4->dmDuplex; 277 devmode.dmYResolution = arg4->dmYResolution; 278 devmode.dmTTOption = arg4->dmTTOption; 279 devmode.dmCollate = arg4->dmCollate; 280 devmode.dmLogPixels = arg4->dmLogPixels; 281 devmode.dmBitsPerPel = arg4->dmBitsPerPel; 282 devmode.dmPelsWidth = arg4->dmPelsWidth; 283 devmode.dmPelsHeight = arg4->dmPelsHeight; 284 devmode.dmDisplayFlags = arg4->dmDisplayFlags; 285 devmode.dmDisplayFrequency = arg4->dmDisplayFrequency; 286 devmode.dmICMMethod = arg4->dmICMMethod; 287 devmode.dmICMIntent = arg4->dmICMIntent; 288 devmode.dmMediaType = arg4->dmMediaType; 289 devmode.dmDitherType = arg4->dmDitherType; 290 devmode.dmReserved1 = arg4->dmReserved1; 291 devmode.dmReserved2 = arg4->dmReserved2; 292 292 293 293 rc = CreateICA(astring1,astring2,astring3,&devmode); … … 370 370 if(pHps->hrgnWin32Clip) { 371 371 // Make a copy of our current clip region 372 // (the visible region remains untouched!) 372 // (the visible region remains untouched!) 373 373 hClipRgn = GdiCopyClipRgn(pHps); 374 374 } … … 420 420 HDC WIN32API ResetDCA(HDC hdc, const DEVMODEA *lpInitData) 421 421 { 422 if(lpInitData) 422 if(lpInitData) 423 423 { 424 424 dprintfDEVMODE((DEVMODEA *)lpInitData); -
trunk/src/gdi32/gdi32.DEF
r21335 r21630 389 389 _GdiCombineVisRgnClipRgn@12 @1220 NONAME 390 390 391 _GetPMQueueName@12 @1221 NONAME -
trunk/src/gdi32/gdi32dbg.def
r21335 r21630 389 389 _GdiSetVisRgn@8 @1219 NONAME 390 390 _GdiCombineVisRgnClipRgn@12 @1220 NONAME 391 392 _GetPMQueueName@12 @1221 NONAME
Note:
See TracChangeset
for help on using the changeset viewer.