00001
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include "precomp.h"
00028 #include "debug.h"
00029 #include "oemps.h"
00030 #include "GlyphTranslator.h"
00031
00032
00034
00036
00038 static const DRVFN OEMHookFuncs[] =
00039 {
00040 { INDEX_DrvStartPage, (PFN) OEMStartPage },
00041 { INDEX_DrvSendPage, (PFN) OEMSendPage },
00042 { INDEX_DrvStartDoc, (PFN) OEMStartDoc },
00043 { INDEX_DrvEndDoc, (PFN) OEMEndDoc },
00044 { INDEX_DrvEscape, (PFN) OEMEscape },
00045 { INDEX_DrvTextOut, (PFN) OEMTextOut },
00046 };
00047
00048
00049
00050
00063 PDEVOEM APIENTRY OEMEnablePDEV(PDEVOBJ pdevobj, PWSTR pPrinterName, ULONG cPatterns, HSURF *phsurfPatterns, ULONG cjGdiInfo, GDIINFO *pGdiInfo, ULONG cjDevInfo, DEVINFO *pDevInfo, DRVENABLEDATA *pded)
00064 {
00065 POEMPDEV poempdev;
00066 INT i, j;
00067 DWORD dwDDIIndex;
00068 PDRVFN pdrvfn;
00069
00070 VERBOSE(DLLTEXT("OEMEnablePDEV() entry.\r\n"));
00071
00072
00073
00074
00075 poempdev = new OEMPDEV;
00076 if (NULL == poempdev)
00077 {
00078 return NULL;
00079 }
00080
00081
00082
00083
00084 poempdev->nPage = 0;
00085 poempdev->pLinks = NULL;
00086 poempdev->pTranslator = NULL;
00087 POEMDEV pDevMode = (POEMDEV)pdevobj->pOEMDM;
00088 poempdev->bNeedText = pDevMode->bAutoURLs ? true : false;
00089
00090
00091
00092
00093 for (i = 0; i < MAX_DDI_HOOKS; i++)
00094 {
00095
00096
00097
00098 dwDDIIndex = OEMHookFuncs[i].iFunc;
00099 for (j = pded->c, pdrvfn = pded->pdrvfn; j > 0; j--, pdrvfn++)
00100 {
00101 if (dwDDIIndex == pdrvfn->iFunc)
00102 {
00103 poempdev->pfnPS[i] = pdrvfn->pfn;
00104 break;
00105 }
00106 }
00107 if (j == 0)
00108 {
00109
00110
00111
00112 poempdev->pfnPS[i] = NULL;
00113 }
00114
00115 }
00116
00117 return (POEMPDEV) poempdev;
00118 }
00119
00123 VOID APIENTRY OEMDisablePDEV(PDEVOBJ pdevobj)
00124 {
00125 VERBOSE(DLLTEXT("OEMDisablePDEV() entry.\r\n"));
00126
00127
00128
00129
00130
00131 assert(NULL != pdevobj->pdevOEM);
00132 POEMPDEV poempdev = (POEMPDEV)pdevobj->pdevOEM;
00133 while (poempdev->pLinks != NULL)
00134 {
00135 InnerEscapeLinkData* pLink = poempdev->pLinks;
00136 poempdev->pLinks = pLink->pNext;
00137 delete pLink;
00138 }
00139 if (poempdev->pTranslator != NULL)
00140 {
00141 delete poempdev->pTranslator;
00142 poempdev->pTranslator = NULL;
00143 }
00144 delete pdevobj->pdevOEM;
00145 }
00146
00152 BOOL APIENTRY OEMResetPDEV(PDEVOBJ pdevobjOld, PDEVOBJ pdevobjNew)
00153 {
00154 VERBOSE(DLLTEXT("OEMResetPDEV() entry.\r\n"));
00155
00156
00157
00158
00159
00160 POEMPDEV poempdevOld = (POEMPDEV)pdevobjOld->pdevOEM;
00161 POEMPDEV poempdevNew = (POEMPDEV)pdevobjNew->pdevOEM;
00162 if (poempdevNew->pTranslator == NULL)
00163 {
00164 poempdevNew->pTranslator = poempdevOld->pTranslator;
00165 poempdevOld->pTranslator = NULL;
00166 }
00167
00168 return TRUE;
00169 }
00170
00173 VOID APIENTRY OEMDisableDriver()
00174 {
00175 VERBOSE(DLLTEXT("OEMDisableDriver() entry.\r\n"));
00176 }
00177
00184 BOOL APIENTRY OEMEnableDriver(DWORD dwOEMintfVersion, DWORD dwSize, PDRVENABLEDATA pded)
00185 {
00186 VERBOSE(DLLTEXT("OEMEnableDriver() entry.\r\n"));
00187
00188
00189 pded->iDriverVersion = PRINTER_OEMINTF_VERSION;
00190 pded->c = sizeof(OEMHookFuncs) / sizeof(DRVFN);
00191 pded->pdrvfn = (DRVFN *) OEMHookFuncs;
00192
00193 return TRUE;
00194 }