diff --git a/dlls/wineps.drv/driver.c b/dlls/wineps.drv/driver.c index c9c5b19a4a6..9443c668feb 100644 --- a/dlls/wineps.drv/driver.c +++ b/dlls/wineps.drv/driver.c @@ -67,6 +67,20 @@ PAGESIZE *find_pagesize( PPD *ppd, PSDRV_DEVMODE *dm ) return NULL; } +DUPLEX *find_duplex( PPD *ppd, PSDRV_DEVMODE *dm ) +{ + DUPLEX *duplex; + WORD win_duplex = dm->dmPublic.dmFields & DM_DUPLEX ? dm->dmPublic.dmDuplex : 0; + + if (win_duplex == 0) return NULL; /* Not capable */ + + LIST_FOR_EACH_ENTRY( duplex, &ppd->Duplexes, DUPLEX, entry ) + if (duplex->WinDuplex == win_duplex) + return duplex; + + return NULL; +} + /************************************************************************ * * PSDRV_MergeDevmodes diff --git a/dlls/wineps.drv/ps.c b/dlls/wineps.drv/ps.c index f4444e8218f..4aca6f14e7b 100644 --- a/dlls/wineps.drv/ps.c +++ b/dlls/wineps.drv/ps.c @@ -303,8 +303,7 @@ INT PSDRV_WriteHeader( PHYSDEV dev, LPCWSTR title ) char *buf, *escaped_title; INPUTSLOT *slot = find_slot( physDev->pi->ppd, physDev->Devmode ); PAGESIZE *page = find_pagesize( physDev->pi->ppd, physDev->Devmode ); - DUPLEX *duplex; - int win_duplex; + DUPLEX *duplex = find_duplex( physDev->pi->ppd, physDev->Devmode ); int llx, lly, urx, ury; int ret, len; @@ -356,18 +355,8 @@ INT PSDRV_WriteHeader( PHYSDEV dev, LPCWSTR title ) if (page && page->InvocationString) PSDRV_WriteFeature( dev, "*PageSize", page->Name, page->InvocationString ); - win_duplex = physDev->Devmode->dmPublic.dmFields & DM_DUPLEX ? - physDev->Devmode->dmPublic.dmDuplex : 0; - LIST_FOR_EACH_ENTRY( duplex, &physDev->pi->ppd->Duplexes, DUPLEX, entry ) - { - if(duplex->WinDuplex == win_duplex) { - if(duplex->InvocationString) { - PSDRV_WriteFeature(dev, "*Duplex", duplex->Name, - duplex->InvocationString); - break; - } - } - } + if (duplex && duplex->InvocationString) + PSDRV_WriteFeature( dev, "*Duplex", duplex->Name, duplex->InvocationString ); write_spool( dev, psendsetup, strlen(psendsetup) ); diff --git a/dlls/wineps.drv/psdrv.h b/dlls/wineps.drv/psdrv.h index f314dd94ff7..38e8306d8d0 100644 --- a/dlls/wineps.drv/psdrv.h +++ b/dlls/wineps.drv/psdrv.h @@ -403,6 +403,7 @@ extern char *PSDRV_ANSIVector[256] DECLSPEC_HIDDEN; extern INPUTSLOT *find_slot( PPD *ppd, PSDRV_DEVMODE *dm ); extern PAGESIZE *find_pagesize( PPD *ppd, PSDRV_DEVMODE *dm ); +extern DUPLEX *find_duplex( PPD *ppd, PSDRV_DEVMODE *dm ); /* GDI driver functions */ extern BOOL PSDRV_Arc( PHYSDEV dev, INT left, INT top, INT right, INT bottom,