//**************************************************************************** // Generic Win 3.1 fax printer driver support // // 02-jan-95 nandurir created. // 14-mar-95 reedb Use GDI hooks to move most functionality to UI. // 16-aug-95 reedb Move to kernel mode. Many declarations and // definitions moved from FAXCOMM.H to this file. // //**************************************************************************** #include "stddef.h" #include "windows.h" #include "winddi.h" #include "faxcomm.h" #include "winspool.h" // The following include is to pickup the definitions for // the DrvUpgradePrinter private API. These definitions should be in public. #include // WOWFAX component file names. #define WOWFAX_DLL_NAME L"WOWFAX.DLL" #define WOWFAXUI_DLL_NAME L"WOWFAXUI.DLL" // String table constants: #define WOWFAX_MAX_USER_MSG_LEN 256 #define WOWFAX_UNKNOWN_PROB_STR 0x100 #define WOWFAX_NAME_STR 0x101 #define WOWFAX_NOWOW_STR 0x102 #define WOWFAX_SELF_CONFIG_STR 0x103 #define WOWFAX_ENABLE_CONFIG_STR 0x104 // Dialog constants: #define IDD_NULLPROP 0x200 #define IDD_DOCPROP 0x201 // Text control constants: #define IDC_STATIC -1 #define IDC_FEEDBACK 0x300 // InterProcCommHandler command constants #define DRVFAX_SETMAPDATA 0x1 #define DRVFAX_SENDTOWOW 0x2 #define DRVFAX_SENDNOTIFYWOW 0x3 #define DRVFAX_CREATEMAP 0x4 #define DRVFAX_DESTROYMAP 0x5 #define DRVFAX_CALLWOW 0x6 // Logging macros /* XLATOFF */ // #define IFLOG(l) if (l==iFaxLogLevel && (iFaxLogLevel&1) || l<=iFaxLogLevel && !(iFaxLogLevel&1) || l == 0) #undef LOG #ifdef NOLOG #define LOG(l,args) #define SETREQLOG(l) #else #define SETREQLOG(l) iReqFaxLogLevel = l #define LOG(l,args) {SETREQLOG(l) ; faxlogprintf args;} #endif #if DBG extern INT iReqFaxLogLevel; #define LOGDEBUG(l,args) LOG(l,args) #else #define LOGDEBUG(l,args) #endif /* XLATON */ // // This structure is used to hold 16-bit fax driver data stored // in the registry. // typedef struct _REGFAXDRVINFO16 { LPTSTR lpDeviceName; LPTSTR lpDriverName; LPTSTR lpPortName; } REGFAXDRVINFO16, *LPREGFAXDRVINFO16; // The the escapes in the following escape range all need a valid HDC. // Range is inclusive lower, exclusive upper bound. See GDISPOOL.H for // the actual escape definitions. #define DOCUMENTEVENT_HDCFIRST 5 #define DOCUMENTEVENT_HDCLAST 11 // Prototypes for public functions implemented in WFSHEETS.C: PVOID MyGetPrinter(HANDLE hPrinter, DWORD level); // Prototypes for public functions implemented in WFUPGRAD.C: BOOL DoUpgradePrinter(DWORD dwLevel, LPDRIVER_UPGRADE_INFO_1W lpDrvUpgradeInfo); // Prototypes for public functions implemented in WFHELPERS.C: LPREGFAXDRVINFO16 Get16BitDriverInfoFromRegistry(PWSTR pDeviceName); VOID faxlogprintf(LPTSTR pszFmt, ...); VOID LogFaxDev(LPTSTR pszTitle, LPFAXDEV lpFaxDev); VOID LogWowFaxInfo(LPWOWFAXINFO lpWowFaxInfo); BOOL ValidateFaxDev(LPFAXDEV lpFaxDev); VOID Free16BitDriverInfo(LPREGFAXDRVINFO16 lpRegFaxDrvInfo16); BOOL FaxMapHandler(LPFAXDEV lpdev, UINT iAction); BOOL InterProcCommHandler(LPFAXDEV lpdev, UINT iAction); LPVOID WFHeapAlloc(DWORD dwBytes, LPWSTR lpszWhoCalled); LPVOID WFLocalAlloc(DWORD dwBytes, LPWSTR lpszWhoCalled); HWND FindWowFaxWindow(void); LPTSTR DupTokenW(LPTSTR lpTok); // Prototypes for functions which DrvDocumentEvent dispatches, // implemented in WOWFAXUI.C: int DocEvntCreateDCpre( LPWSTR lpszDevice, DEVMODEW *pDevModIn, DEVMODEW **pDevModOut ); int DocEvntResetDCpre( HDC hdc, DEVMODEW *pDevModIn, DEVMODEW **pDevModOut ); int DocEvntCreateDCpost( HDC hdc, DEVMODEW *pDevModIn ); int DocEvntResetDCpost( HDC hdc, DEVMODEW *pDevModIn ); int DocEvntStartDoc( HDC hdc, DOCINFOW *pDocInfoW ); int DocEvntDeleteDC( HDC hdc ); int DocEvntEndPage( HDC hdc ); int DocEvntEndDoc( HDC hdc ); // // Memory allocation macro. // #if DBG #define WFLOCALALLOC(dwBytes, lpszWhoCalled) WFLocalAlloc(dwBytes, lpszWhoCalled) #else #define WFLOCALALLOC(dwBytes, lpszWhoCalled) LocalAlloc(LPTR, dwBytes) #endif