/*++

Copyright (c) 1996  Microsoft Corporation

Module Name:

    oemui.h

Abstract:

    Header file to support OEM plugin UI

Environment:

    Windows NT printer drivers

Revision History:

    02/13/97 -davidx-
        Created it.

--*/

#ifndef _OEMUI_H_
#define _OEMUI_H_

#ifdef __cplusplus
extern "C" {
#endif

//
// Macros used to loop through each OEM plugin
//

#define FOREACH_OEMPLUGIN_LOOP(pci) \
        { \
            DWORD _oemCount = (pci)->pOemPlugins->dwCount; \
            POEM_PLUGIN_ENTRY pOemEntry = (pci)->pOemPlugins->aPlugins; \
            for ( ; _oemCount--; pOemEntry++) \
            { \
                if (pOemEntry->hInstance == NULL) continue;

#define END_OEMPLUGIN_LOOP \
            } \
        }

//
// Call OEM plugin UI modules to let them add their OPTITEMs
//

BOOL
BPackOemPluginItems(
    PUIDATA pUiData
    );

//
// Call OEM plugin module's callback function
//

LONG
LInvokeOemPluginCallbacks(
    PUIDATA         pUiData,
    PCPSUICBPARAM   pCallbackParam,
    LONG            lRet
    );

//
// Call OEM plugin UI modules to let them add their own property sheet pages
//

BOOL
BAddOemPluginPages(
    PUIDATA pUiData,
    DWORD   dwFlags
    );

//
// Figure whether a particular item is belongs to the driver
// (instead of to one of the OEM plugin UI modules)
//

#define IS_DRIVER_OPTITEM(pUiData, pOptItem) \
        ((DWORD) ((pOptItem) - (pUiData)->pDrvOptItem) < (pUiData)->dwDrvOptItem)


//
// Provide OEM plugins access to driver private settings
//

BOOL
APIENTRY
BGetDriverSettingForOEM(
    PCOMMONINFO pci,
    PCSTR       pFeatureKeyword,
    PVOID       pOutput,
    DWORD       cbSize,
    PDWORD      pcbNeeded,
    PDWORD      pdwOptionsReturned
    );

BOOL
BUpdateUISettingForOEM(
    PCOMMONINFO pci,
    PVOID       pOptItem,
    DWORD       dwPreviousSelection,
    DWORD       dwMode
    );


BOOL
BUpgradeRegistrySettingForOEM(
    HANDLE      hPrinter,
    PCSTR       pFeatureKeyword,
    PCSTR       pOptionKeyword
    );


extern const OEMUIPROCS OemUIHelperFuncs;

HRESULT
HDriver_CoCreateInstance(
    IN REFCLSID     rclsid,
    IN LPUNKNOWN    pUnknownOuter,
    IN DWORD        dwClsContext,
    IN REFIID       riid,
    IN LPVOID      *ppv,
    IN HANDLE       hInstance
    );

//
// The following helper functions are only available to UI plugins
//

#ifdef PSCRIPT

#ifndef WINNT_40

HRESULT
HQuerySimulationSupport(
    IN  HANDLE  hPrinter,
    IN  DWORD   dwLevel,
    OUT PBYTE   pCaps,
    IN  DWORD   cbSize,
    OUT PDWORD  pcbNeeded
    );

#endif // !WINNT_40

HRESULT
HEnumConstrainedOptions(
    IN  POEMUIOBJ  poemuiobj,
    IN  DWORD      dwFlags,
    IN  PCSTR      pszFeatureKeyword,
    OUT PSTR       pmszConstrainedOptionList,
    IN  DWORD      cbSize,
    OUT PDWORD     pcbNeeded
    );

HRESULT
HWhyConstrained(
    IN  POEMUIOBJ  poemuiobj,
    IN  DWORD      dwFlags,
    IN  PCSTR      pszFeatureKeyword,
    IN  PCSTR      pszOptionKeyword,
    OUT PSTR       pmszReasonList,
    IN  DWORD      cbSize,
    OUT PDWORD     pcbNeeded
    );

HRESULT
HSetOptions(
    IN  POEMUIOBJ  poemuiobj,
    IN  DWORD      dwFlags,
    IN  PCSTR      pmszFeatureOptionBuf,
    IN  DWORD      cbIn,
    OUT PDWORD     pdwResult
    );

#endif // PSCRIPT

#ifdef __cplusplus
}
#endif

#endif  // !_OEMUI_H_