/*++ Copyright (c) 1996 Microsoft Corporation Module Name: faxmon.h Abstract: Header file for fax print monitor Environment: Windows NT fax print monitor Revision History: 02/22/96 -davidx- Created it. dd-mm-yy -author- description --*/ #ifndef _FAXMON_H_ #define _FAXMON_H_ #if defined(UNICODE) && !defined(_UNICODE) #define _UNICODE #endif #include #include #include #include #include #include #include #include "winfax.h" #include "winfaxp.h" #include "jobtag.h" // // String resource IDs // #define IDS_FAX_MONITOR_NAME 256 #define IDS_FAX_PORT_DESC 257 #define IDS_PORT_ALREADY_EXISTS 258 #define IDS_FAXERR_RECOVERABLE 259 #define IDS_FAXERR_FATAL 260 #define IDS_FAXERR_BAD_TIFF 261 #define IDS_FAXERR_BAD_DATA16 262 #define IDS_ADD_PORT 263 #define IDS_DELETE_PORT 264 #define IDS_CONFIGURE_PORT 265 #define IDS_CONFIG_ERROR 266 #define IDS_ADD_ERROR 267 #define IDS_DELETE_ERROR 268 // // Data structure for representing a fax monitor port // typedef struct _FAXPORT { PVOID startSig; // signature LPTSTR pName; // port name HANDLE hFaxSvc; // fax service handle DWORD jobId; // main job ID DWORD nextJobId; // next job ID in the chain HANDLE hFile; // handle to currently open file LPTSTR pFilename; // pointer to currently open file name LPTSTR pPrinterName; // currently connected printer name HANDLE hPrinter; // open handle to currently connected printer LPTSTR pParameters; // pointer to job parameter string FAX_JOB_PARAM jobParam; // pointer to individual job parameters HMODULE hWinFax; // handle for loaded winfax dll PFAXCONNECTFAXSERVERW pFaxConnectFaxServerW; // function pointer PFAXCLOSE pFaxClose; // function pointer PFAXSENDDOCUMENTW pFaxSendDocumentW; // function pointer PFAXACCESSCHECK pFaxAccessCheck; // function pointer PVOID endSig; // signature } FAXPORT, *PFAXPORT; #define ValidFaxPort(pFaxPort) \ ((pFaxPort) && (pFaxPort) == (pFaxPort)->startSig && (pFaxPort) == (pFaxPort)->endSig) // // Different error code when sending fax document // #define FAXERR_NONE 0 #define FAXERR_IGNORE 1 #define FAXERR_RESTART 2 #define FAXERR_SPECIAL 3 #define FAXERR_FATAL IDS_FAXERR_FATAL #define FAXERR_RECOVERABLE IDS_FAXERR_RECOVERABLE #define FAXERR_BAD_TIFF IDS_FAXERR_BAD_TIFF #define FAXERR_BAD_DATA16 IDS_FAXERR_BAD_DATA16 // // Memory allocation and deallocation macros // #define MemAlloc(size) ((PVOID) LocalAlloc(LMEM_FIXED, (size))) #define MemAllocZ(size) ((PVOID) LocalAlloc(LPTR, (size))) #define MemFree(ptr) { if (ptr) LocalFree((HLOCAL) (ptr)); } // // Number of tags used for passing fax job parameters // #define NUM_JOBPARAM_TAGS 11 // // Nul terminator for a character string // #define NUL 0 // // Result of string comparison // #define EQUAL_STRING 0 #define IsEmptyString(p) ((p)[0] == NUL) #define IsNulChar(c) ((c) == NUL) #define SizeOfString(p) ((_tcslen(p) + 1) * sizeof(TCHAR)) // // Maximum value for signed and unsigned integers // #ifndef MAX_LONG #define MAX_LONG 0x7fffffff #endif #ifndef MAX_DWORD #define MAX_DWORD 0xffffffff #endif #ifndef MAX_SHORT #define MAX_SHORT 0x7fff #endif #ifndef MAX_WORD #define MAX_WORD 0xffff #endif // // Path separator character // #define PATH_SEPARATOR '\\' // // Declaration of print monitor entry points // BOOL FaxMonOpenPort( LPTSTR pPortName, PHANDLE pHandle ); BOOL FaxMonClosePort( HANDLE hPort ); BOOL FaxMonStartDocPort( HANDLE hPort, LPTSTR pPrinterName, DWORD JobId, DWORD Level, LPBYTE pDocInfo ); BOOL FaxMonEndDocPort( HANDLE hPort ); BOOL FaxMonWritePort( HANDLE hPort, LPBYTE pBuffer, DWORD cbBuf, LPDWORD pcbWritten ); BOOL FaxMonReadPort( HANDLE hPort, LPBYTE pBuffer, DWORD cbBuf, LPDWORD pcbRead ); BOOL FaxMonEnumPorts( LPTSTR pServerName, DWORD Level, LPBYTE pPorts, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pReturned ); BOOL FaxMonAddPort( LPTSTR pServerName, HWND hwnd, LPTSTR pMonitorName ); BOOL FaxMonAddPortEx( LPTSTR pServerName, DWORD level, LPBYTE pBuffer, LPTSTR pMonitorName ); BOOL FaxMonDeletePort( LPTSTR pServerName, HWND hwnd, LPTSTR pPortName ); BOOL FaxMonConfigurePort( LPWSTR pServerName, HWND hwnd, LPWSTR pPortName ); // // Get the list of fax devices from the service // PFAX_PORT_INFO MyFaxEnumPorts( LPDWORD pcPorts, BOOL useCache ); // // Wrapper function for fax service's FaxGetPort API // PFAX_PORT_INFO MyFaxGetPort( LPTSTR pPortName, BOOL useCache ); // // Make a duplicate of the given character string // LPTSTR DuplicateString( LPCTSTR pSrcStr ); // // Update the status information of a print job // BOOL SetJobStatus( HANDLE hPrinter, DWORD jobId, INT statusStrId ); // // Wrapper function for spooler API GetJob // PVOID MyGetJob( HANDLE hPrinter, DWORD level, DWORD jobId ); // // Create a temporary file in the system spool directory for storing fax data // LPTSTR CreateTempFaxFile( VOID ); // // Open a handle to the current fax job file associated with a port // BOOL OpenTempFaxFile( PFAXPORT pFaxPort, BOOL doAppend ); // // Process fax jobs sent from win31 and win95 clients // INT ProcessDownlevelFaxJob( PFAXPORT pFaxPort ); // // Retrieve a DWORD value from the registry // DWORD GetRegistryDWord( HKEY hRegKey, LPTSTR pValueName, DWORD defaultValue ); #define REGVAL_CONNECT_RETRY_COUNT TEXT("ConnectRetryCount") #define REGVAL_CONNECT_RETRY_INTERVAL TEXT("ConnectRetryInterval") #if DBG // // These macros are used for debugging purposes. They expand // to white spaces on a free build. Here is a brief description // of what they do and how they are used: // // _debugLevel // A variable which controls the amount of debug messages. To generate // lots of debug messages, enter the following line in the debugger: // // ed _debugLevel 1 // // Verbose // Display a debug message if _debugLevel is set to non-zero. // // Verbose(("Entering XYZ: param = %d\n", param)); // // Error // Display an error message along with the filename and the line number // to indicate where the error occurred. // // Error(("XYZ failed")); // // Assert // Verify a condition is true. If not, force a breakpoint. // // Assert(p != NULL && (p->flags & VALID)); extern INT _debugLevel; extern VOID DbgPrint(LPCSTR, ...); extern LPCSTR StripDirPrefixA(LPCSTR); #define Warning(arg) {\ DbgPrint("WRN %s (%d): ", StripDirPrefixA(__FILE__), __LINE__);\ DbgPrint arg;\ } #define Error(arg) {\ DbgPrint("ERR %s (%d): ", StripDirPrefixA(__FILE__), __LINE__);\ DbgPrint arg;\ } #define Verbose(arg) { if (_debugLevel > 0) DbgPrint arg; } #define Assert(cond) {\ if (! (cond)) {\ DbgPrint("ASSERT: %s (%d)\n", StripDirPrefixA(__FILE__), __LINE__);\ __try { \ DebugBreak(); \ } __except (UnhandledExceptionFilter(GetExceptionInformation())) { \ } \ }\ } #define Trace(funcName) { if (_debugLevel > 0) DbgPrint("Entering %s ...\n", funcName); } #else // !DBG #define Verbose(arg) #define Assert(cond) #define Warning(arg) #define Error(arg) #define Trace(funcName) #endif // DBG #endif // !_FAXMON_H_