#include #include #include #include #include #include #include //#include #include "resource.h" #include #include #include #include #include #include #include #include #define StringSize(_s) (( _s ) ? (_tcslen( _s ) + 1) * sizeof(TCHAR) : 0) #define REGKEY_PROVIDER L"Software\\Microsoft\\Fax\\Device Providers\\NetCentric" #define REGVAL_SERVER L"Server" #define REGVAL_USERNAME L"UserName" #define REGVAL_PASSWORD L"Password" #define JobInfo(_fh) ((PJOB_INFO)(_fh)) #define NCFAX_ID "Micsosoft Personal Fax for Windows" #define NCFAX_CLIENTID 0 #define NCFAX_MAJOR 0 #define NCFAX_MINOR 9 #define NCFAX_RELEASE 1 #define NCFAX_PATCH 13 #define PRODUCTION_KEY "Microsoft" #define TAPI_VERSION 0x00020000 #define LT_SERVER_NAME 64 #define LT_FIRST_NAME 64 #define LT_LAST_NAME 64 #define LT_EMAIL 64 #define LT_AREA_CODE 64 #define LT_PHONE_NUMBER 64 #define LT_ADDRESS 64 #define LT_CITY 64 #define LT_STATE 2 #define LT_ZIP 11 #define LT_ACCOUNT_NAME 64 #define LT_PASSWORD 64 #define LT_CREDIT_CARD 64 #define LT_EXPIRY_MM 64 #define LT_EXPIRY_YY 64 #define LT_CC_NAME 64 #define LVIS_GCNOCHECK 0x1000 #define LVIS_GCCHECK 0x2000 #define IS_DONE_STATUS(code) \ (((code) != ST_STATUS_QUEUED) && \ ((code) != ST_STATUS_PENDING) && \ ((code) != ST_STATUS_ACTIVE)) typedef struct _JOB_INFO { CNcFaxJob *faxJob; CNcConnectionInfo *connInfo; CNcUser *sender; CNcUser *recipient; HLINE LineHandle; DWORD DeviceId; HANDLE CompletionPortHandle; DWORD CompletionKey; LONG ServerId; LONG JobId; } JOB_INFO, *PJOB_INFO; typedef struct _CONFIG_DATA { LPWSTR ServerName; LPWSTR UserName; LPWSTR Password; } CONFIG_DATA, *PCONFIG_DATA; extern HANDLE MyHeapHandle; extern HINSTANCE MyhInstance; extern CONFIG_DATA ConfigData; BOOL GetNcConfig( PCONFIG_DATA ConfigData ); BOOL SetNcConfig( PCONFIG_DATA ConfigData ); VOID InitializeStringTable( VOID ); LPWSTR GetString( DWORD ResourceId ); int PopUpMsg( HWND hwnd, DWORD ResourceId, BOOL Error, DWORD Type ); BOOL ParsePhoneNumber( LPWSTR PhoneNumber, LPSTR *CountryCode, LPSTR *AreaCode, LPSTR *SubscriberNumber ); int PopUpMsgString( HWND hwnd, LPSTR String, BOOL Error, DWORD Type ); LPWSTR AnsiStringToUnicodeString( LPSTR AnsiString ); LPSTR UnicodeStringToAnsiString( LPWSTR UnicodeString ); LPWSTR StringDup( LPWSTR String ); // // debugging information // #if DBG #define Assert(exp) if(!(exp)) {AssertError(TEXT(#exp),TEXT(__FILE__),__LINE__);} #define DebugPrint(_x_) dprintf _x_ #else #define Assert(exp) #define DebugPrint(_x_) #endif extern BOOL ConsoleDebugOutput; void dprintf( LPTSTR Format, ... ); VOID AssertError( LPTSTR Expression, LPTSTR File, ULONG LineNumber ); // // memory allocation // #define HEAP_SIZE (1024*1024) #ifdef FAX_HEAP_DEBUG #define HEAP_SIG 0x69696969 typedef struct _HEAP_BLOCK { LIST_ENTRY ListEntry; ULONG Signature; ULONG Size; ULONG Line; #ifdef UNICODE WCHAR File[22]; #else CHAR File[20]; #endif } HEAP_BLOCK, *PHEAP_BLOCK; #define MemAlloc(s) pMemAlloc(s,__LINE__,__FILE__) #define MemFree(p) pMemFree(p,__LINE__,__FILE__) #define MemFreeForHeap(h,p) pMemFreeForHeap(h,p,__LINE__,__FILE__) #define CheckHeap(p) pCheckHeap(p,__LINE__,__FILE__) #else #define MemAlloc(s) pMemAlloc(s) #define MemFree(p) pMemFree(p) #define MemFreeForHeap(h,p) pMemFreeForHeap(h,p) #define CheckHeap(p) #endif typedef LPVOID (WINAPI *PMEMALLOC) (DWORD); typedef VOID (WINAPI *PMEMFREE) (LPVOID); #define HEAPINIT_NO_VALIDATION 0x00000001 #define HEAPINIT_NO_STRINGS 0x00000002 HANDLE HeapInitialize( HANDLE hHeap, PMEMALLOC pMemAlloc, PMEMFREE pMemFree, DWORD Flags ); BOOL HeapExistingInitialize( HANDLE hExistHeap ); BOOL HeapCleanup( VOID ); #ifdef FAX_HEAP_DEBUG VOID pCheckHeap( PVOID MemPtr, ULONG Line, LPSTR File ); VOID PrintAllocations( VOID ); #else #define PrintAllocations() #endif PVOID pMemAlloc( ULONG AllocSize #ifdef FAX_HEAP_DEBUG ,ULONG Line ,LPSTR File #endif ); VOID pMemFree( PVOID MemPtr #ifdef FAX_HEAP_DEBUG ,ULONG Line ,LPSTR File #endif ); VOID pMemFreeForHeap( HANDLE hHeap, PVOID MemPtr #ifdef FAX_HEAP_DEBUG ,ULONG Line ,LPSTR File #endif );