DevPostDeviceModes - Example Code

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);
}


[Back: DevPostDeviceModes - Related Functions]
[Next: DevPostDeviceModes - Topics]