This example shows how to call DevPostDeviceModes and allocate a new buffer, if necessary, for the larger job properties (DRIVDATA structure).
#define INCL_DEV
#define INCL_DOS
#include <os2.h>
#include <memory.h>
{
ULONG devrc=FALSE;
HAB hab;
PSZ pszPrinter;
HDC hdc=NULL;
PDRIVDATA pOldDrivData;
PDRIVDATA pNewDrivData=NULL;
PDEVOPENSTRUC dops;
LONG buflen;
/* check size of buffer required for job properties */
buflen = DevPostDeviceModes( hab,
NULL,
dops->pszDriverName,
dops->pdriv->szDeviceName,
pszPrinter,
DPDM_POSTJOBPROP
);
/* return error to caller */
if (buflen<=0)
return(buflen);
/* allocate some memory for larger job properties and */
/* return error to caller */
if (buflen != dops->pdriv->cb)
{
if (DosAllocMem((PPVOID)&pNewDrivData,buflen,fALLOC))
return(DPDM_ERROR);
}
/* copy over old data so driver can use old job */
/* properties as base for job properties dialog */
pOldDrivData = dops->pdriv;
dops->pdriv = pNewDrivData;
memcpy( (PSZ)pNewDrivData, (PSZ)pOldDrivData, pOldDrivData->cb );
/* display job properties dialog and get updated */
/* job properties from driver */
devrc = DevPostDeviceModes( hab,
dops->pdriv,
dops->pszDriverName,
dops->pdriv->szDeviceName,
pszPrinter,
DPDM_POSTJOBPROP
);
return(devrc);
}