325 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			325 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| //////////////////////////////////////////////////////////////////////////////
 | |
| //
 | |
| // faxdll.h
 | |
| //
 | |
| //	Copyright(c) 1994,1995 Data Techniques, Inc.
 | |
| //
 | |
| //////////////////////////////////////////////////////////////////////////////
 | |
| //$Header: /test/repos/ba/faxdll.h,v 1.1 1996-07-31 07:08:42 guy Exp $
 | |
| //$History: FAXDLL.H $
 | |
| // 
 | |
| // *****************  Version 37  *****************
 | |
| // User: Johnd        Date: 3/05/96    Time: 10:00a
 | |
| // Updated in $/FaxMan/Server
 | |
| // Added FAXMODEMDONE Msg
 | |
| // 
 | |
| // *****************  Version 36  *****************
 | |
| // User: Johnd        Date: 7/07/95    Time: 11:51a
 | |
| // Updated in $/FaxMan/Server
 | |
| // Fixed Bug #358, added FAXERR_PORTINIT to Fax Error enum
 | |
| // 
 | |
| // *****************  Version 35  *****************
 | |
| // User: Johnd        Date: 5/25/95    Time: 2:28p
 | |
| // Updated in $/FaxMan/DLL
 | |
| // Added FAR to second parameter of FaxLogFind prototype.
 | |
| // 
 | |
| // *****************  Version 34  *****************
 | |
| // User: Johnd        Date: 4/18/95    Time: 6:15p
 | |
| // Updated in $/FaxMan/Ole Control
 | |
| // Chgd some params from LPSTR to LPCSTRs.
 | |
| // 
 | |
| // *****************  Version 30  *****************
 | |
| // User: Johnd        Date: 3/29/95    Time: 4:53p
 | |
| // Updated in $/FaxMan/Server
 | |
| // Added new FAXERR enums for Class 1.
 | |
| // 
 | |
| // *****************  Version 29  *****************
 | |
| // User: Timk         Date: 3/10/95    Time: 3:22p
 | |
| // Updated in $/faxman/server
 | |
| // Added _ to SERVERCONFIG
 | |
| // 
 | |
| // *****************  Version 28  *****************
 | |
| // User: Timk         Date: 3/10/95    Time: 3:06p
 | |
| // Updated in $/faxman/server
 | |
| // Added nMaxLen parameter to FaxGetConfig function.
 | |
| // 
 | |
| // *****************  Version 27  *****************
 | |
| // User: Timk         Date: 3/09/95    Time: 6:56p
 | |
| // Updated in $/faxman/server
 | |
| // Added stuff for Setting/Getting server configuration.
 | |
| //
 | |
| 
 | |
| #ifndef PORTABLE
 | |
| typedef short SHORT;
 | |
| typedef unsigned short	USHORT;
 | |
| #endif
 | |
| 
 | |
| #define SEND_FAX_STRUCT_REV 1
 | |
| #define EXPORT_WINAPI	WINAPI _export
 | |
| #define MAXLEN	128
 | |
| #define MAXITERATORS	100	//max # of simultaneous iteratations
 | |
| #define FAXIDLEN		22			//len of FAXID fields (+2 for /0 and padding)
 | |
| #define MAXPATH		128
 | |
| #define APPNAMESIZE	30			
 | |
| 
 | |
| #define WM_FAXMSG	WM_USER+1000
 | |
| 
 | |
| // These identifiers should be responded to by the client apps.
 | |
| #define FAXSENDMSG		0
 | |
| #define FAXPRINTMSG		1
 | |
| #define FAXGETFILENAME	2
 | |
| #define FAXLOGADD		3
 | |
| #define FAXLOGREMOVE	4
 | |
| #define FAXCONFIGMSG	5
 | |
| #define FAXMODEMMSG		6
 | |
| #define FAXSERVERCONFIGMSG	7
 | |
| #define FAXMODEMDONE		8
 | |
| 
 | |
| typedef enum {
 | |
| 	LOGERR_NOITERATORS = MAXITERATORS+1,
 | |
| 	LOGERR_OK,
 | |
| 	LOGERR_CONTINUEIT,	//continue iteration
 | |
| 	LOGERR_ENDIT,	//end of iteration - nothing else in list
 | |
| 	LOGERR_NOENTRIES,	//no entries to iterate through
 | |
| } LOGERR;
 | |
| 
 | |
| typedef enum {
 | |
| 	FAX_0 = 0,
 | |
| 	FAX_1,
 | |
| 	FAX_2,
 | |
| 	FAX_20
 | |
| } FAXCLASS;
 | |
| 
 | |
| typedef enum {
 | |
| 	FAXST_ERROR	= 0,
 | |
| 	FAXST_OK,
 | |
| 	FAXST_INIT,
 | |
| 	FAXST_WAITFORSEND,
 | |
| 	FAXST_SEND_INIT,			//initializing a send operation
 | |
| 	FAXST_SEND_DIALING,		//we're dialing...
 | |
| 	FAXST_SEND_WAIT_FCON,	//waiting for connect message
 | |
| 	FAXST_SEND_FCON,			//Connected!
 | |
| 	FAXST_SEND_WAIT_FCSI,	//waiting for FCSI
 | |
| 	FAXST_SEND_FCSI,			//Receiver's ID string
 | |
| 	FAXST_SEND_WAIT_FDIS,	//waiting for remote +FDIS
 | |
| 	FAXST_SEND_FDIS,			//Remote T.30 parameters
 | |
| 	FAXST_SEND_WAIT_CONNECT,	//wait for connect
 | |
| 	FAXST_SEND_FDCS,			//negotiated T.30 parms
 | |
| 	FAXST_SENDING,				//actually sending data - no longer in command mode
 | |
| 	FAXST_PAGE_END,			//end of page
 | |
| 	FAXST_PORTSHUT,			//comm port deleted
 | |
| 	FAXST_ABORT,					//abort the current FAX operation and reset faxmodem
 | |
| 	FAXST_COMPLETE,			//we're done, and can dismantle our faxing apparatus
 | |
| 	// Receiving fax states
 | |
| 	FAXST_INITRX,				//initialize faxmodem for receive
 | |
| 	FAXST_WAITFORRX,			//waiting for RING
 | |
| 	FAXST_ANSWERING,			//answering the phone
 | |
| 	FAXST_RX_NEGOTIATE,		//negotiating RX parms
 | |
| 	FAXST_RXDATA,				//receiving fax data
 | |
| 	FAXST_RX_PAGE_END,		//end of rx page
 | |
| } FAXSTATE;
 | |
| 
 | |
| // FAXERROR is a list of error codes possible in FAXST_ERROR state
 | |
| typedef enum {	
 | |
| 	FAXERR_OK,
 | |
| 	FAXERR_ACK,				// Command wasn't acknowledged w/OK
 | |
| 	FAXERR_BADFAXMODEM,	// Faxmodem doesn't support FaxModem-level ops
 | |
| 	FAXERR_INIT,			// error initializing faxmodem
 | |
| 	FAXERR_FDIS,			// bad FDIS settings
 | |
| 	FAXERR_FLID,			// some kind of error setting local ID
 | |
| 	FAXERR_DIAL,			// error dialing
 | |
| 	FAXERR_FCON_ERR,		// error trying to connect to remote fax
 | |
| 	FAXERR_FCSI,			// bad FCSI string
 | |
| 	FAXERR_NEG_FDIS,		// error receiving Negotiated +FDIS
 | |
| 	FAXERR_BADSTATE,		// tried to do something at wrong time
 | |
| 	FAXERR_BUSY,			// line is busy
 | |
| 	FAXERR_NODIALTONE,	// no dialtone found when dialing
 | |
| 	FAXERR_NOCONNECT,		// didn't get expected CONNECT msg
 | |
| 	FAXERR_CANCEL,			// user cancel
 | |
| 	FAXERR_FPTS,			// bad or no FPTS when expected
 | |
| 	FAXERR_FHNG,			// bad FHNG exit code or no FHNG when expected
 | |
| 	FAXERR_FDCS,			// +FDCS: not found when expected
 | |
| 	FAXERR_ERROR,			// general unspecific error w/faxmodem
 | |
| 	FAXERR_FILE,			// invalid fax file or files specified
 | |
| 	FAXERR_VERSION,		// incompatible DLL/Server versions
 | |
| 
 | |
| 	FAXERR_TIMEOUT,		// Timeout during fax send/recv
 | |
| 	FAXERR_NO_MPS_RESP,	// Sent MPS 3 times w/o response
 | |
| 	FAXERR_NO_EOP_RESP,	// Sent EOP 3 times w/o response
 | |
| 	FAXERR_NOTRAIN,		// Unable to train with remote system
 | |
| 	FAXERR_PORTINIT,		// Error Opening/Initializing Port
 | |
| 
 | |
| } FAXERROR;
 | |
| 
 | |
| typedef struct tagSendFaxStruct {
 | |
| 	// FaxMan uses these first 3 items for security
 | |
| 	// Don't change them unless you know what to do with 'em
 | |
| 	char		sentinel[4];		//should be 'FMAN'
 | |
| 	WORD		wStructRev;			//revision # of structure
 | |
| 	WORD		wStructSize;		//size of structure, including variable strings
 | |
| 	LPSTR		szDestName;			//who the fax is to
 | |
| 	LPSTR		szDestFax;			//destination fax phone number
 | |
| 	LPSTR		szSubject;			//what the fax is about
 | |
| 	LPSTR		szFromLine;			//who the fax is from
 | |
| 	LPSTR		szBanner;			//defines the banner line for this fax
 | |
| 	LPSTR		szCover;				//file containing cover page
 | |
| 	LPSTR		szComments;			//String containing fax comments
 | |
| 	LPSTR		szFromCompany;		//company of the person sending the fax
 | |
| 	LPSTR		szToCompany;		//company of the fax recipient
 | |
| 	LPSTR		szFromFax;			//fax number of the sending fax
 | |
| 	LPSTR		szFromPhone;		//phone number to contact fax sender at
 | |
| 	LPSTR		szUserDefined;		//client-specific string
 | |
| 	char		szLocalID[FAXIDLEN];		//Fax ID of sending station ***LocalID***
 | |
| 	SHORT		nTimeout;		//Timeout val
 | |
| 	SHORT		nRetries;		//# of retries
 | |
| 	SHORT		nRetryDelay;	//seconds before a retry
 | |
| 	SHORT		nYear;			//year to send (1970-2038)
 | |
| 	SHORT		nMonth;			//month to send (1-12)
 | |
| 	SHORT		nDay;				//Day to send
 | |
| 	SHORT		nHour;			//hour to send (0-23)
 | |
| 	SHORT		nMin;				//minute to send (0-59)
 | |
| 	SHORT		nSecond;			//second to send (0-59)
 | |
| 	SHORT		nSendRes;		//requested resolution to send fax - 0=low, 1=high
 | |
| 	LPSTR		szFileList;			//list of files to fax
 | |
| 	// items below here are filled in by FaxMan - clients shouldn't change them.
 | |
| 	WORD		hWndNotify;			//notification window
 | |
| 	char		szAppName[APPNAMESIZE];	//name of app that sent the fax
 | |
| 	char		szRemoteID[FAXIDLEN];	//String ID of the fax we're connected to
 | |
| 	DWORD		dwSpeed;				//Connect speed
 | |
| 	SHORT		nFaxRes;				//Fax resolution (0 = LOW, 1 = HIGH)
 | |
| 	SHORT		nTotPages;			//# of pages in this fax (total)
 | |
| 	SHORT		nTotCurPage;		//current page (total)
 | |
| 	SHORT		nCurPages;			//# of pages in current file (faxfile)
 | |
| 	SHORT		nCurPage;			//currently sending page in current file
 | |
| 	SHORT		nPagesSent;			//actual # of pages sent (may be different from nTotPages)
 | |
| 	SHORT		nPercent;			//percent complete on current page
 | |
| 	DWORD		dwID;					//FaxMan Generated "handle" to this fax
 | |
| 	SHORT		nHangCode;			//+FHNG result (it's int 'cause it's initialized to -1)
 | |
| 	SHORT		nPort;				//comm port
 | |
| 	SHORT		nRetryCnt;			//actual # of retries attempted by server
 | |
| 	SHORT		nSendYear;			// time of actual transmission
 | |
| 	SHORT		nSendMonth;			//
 | |
| 	SHORT		nSendDay;			//
 | |
| 	SHORT		nSendHour;			//
 | |
| 	SHORT		nSendMin;			//
 | |
| 	SHORT		nSendSecond;		//
 | |
| 	DWORD		dwDuration;			//duration of send event
 | |
| 	FAXCLASS faxclass;			//type of faxmodem we're dealin' with
 | |
| 	WORD		wLog;					//current log this fax is in
 | |
| 	FAXSTATE	fs;					//current fax state (dialing, waiting, connected, etc...)
 | |
| 	FAXERROR	fe;					//current fax error state (if applicable)
 | |
| 
 | |
| 	char		szStrs[1];			//strings
 | |
| } SEND_FAX, FAR *PSEND_FAX;
 | |
| 
 | |
| typedef struct tagAppInfo {
 | |
| 	DWORD	sentinel;
 | |
| 	char	AppName[APPNAMESIZE];
 | |
| 	WORD	wndNotify;			//notification window
 | |
| 	WORD	wIterator;			//iterator value
 | |
| 	WORD	wDevIterator;		//device iterator
 | |
| 	WORD	fSubscribe;			//subscribe flags
 | |
| } APPINFO, FAR *PAPPINFO;
 | |
| 
 | |
| typedef enum {
 | |
| 	PRN_OK,		//printing completed OK
 | |
| 	PRN_ABORT,	//aborted by user
 | |
| 	PRN_DISKFULL,	//full disk error
 | |
| 	PRN_ERROR,		//undefined error
 | |
| } PRN_STATUS;
 | |
| 
 | |
| typedef struct tagPrintStat {
 | |
| 	WORD	nPages;					//# of pages printed
 | |
| 	char	FileName[MAXPATH];	//Name of file created by driver
 | |
| 	PRN_STATUS	pStat;			//status of print job
 | |
| } PRINTSTAT, FAR *PPRINTSTAT;
 | |
| 
 | |
| #define	PORT_SEND 0x01
 | |
| #define	PORT_RX 0x02
 | |
| #define	PORT_SENDING 0x04
 | |
| #define PORT_RECEIVING 0x08
 | |
| #define	PORT_CLS1 0x10
 | |
| #define	PORT_CLS2 0x20
 | |
| #define	PORT_CLS20 0x40
 | |
| #define PORT_BLOCKED 0x80	//some kind of error on this port...
 | |
| #define PORT_BUSY (PORT_RECEIVING | PORT_SENDING)
 | |
| 
 | |
| #define MAXCOMMSTRLEN	128
 | |
| typedef struct tagDevice {
 | |
| 	int		nPort;		//comm port this device is on
 | |
| 	WORD		wFlags;		//tells a little about the port...
 | |
| 	char		szInit[MAXCOMMSTRLEN];	//init string for this device
 | |
| 	char		szReset[MAXCOMMSTRLEN];	//reset string for this device
 | |
| } FAXDEVICE, FAR *PFAXDEVICE;
 | |
| 
 | |
| 
 | |
| // Subscription identifier flags
 | |
| //
 | |
| #define SUBSCRIBE_LOG_PENDING	0x01	// lParam == PSEND_FAX
 | |
| #define SUBSCRIBE_LOG_SENDING	0x02	// 
 | |
| #define SUBSCRIBE_LOG_COMPLETE	0x04
 | |
| #define SUBSCRIBE_LOG_FAILED		0x08
 | |
| #define SUBSCRIBE_LOG_RECEIVE	0x10
 | |
| #define SUBSCRIBE_LOG_ALL			0x1f
 | |
| //faxmodem initialization/configuration messages
 | |
| #define SUBSCRIBE_FAX_CONFIG		0x20	// lParam == PFAXDEVICE
 | |
| //faxmodem state changes
 | |
| #define SUBSCRIBE_FAXMODEM		0x40	// lParam == PFAXDEVICE
 | |
| #define SUBSCRIBE_SERVER_CONFIG	0x80	// lParam = PSERVERCONFIG
 | |
| 
 | |
| typedef enum {
 | |
| 	FAXINIT_INIT,
 | |
| 	FAXINIT_TXCLASS,
 | |
| 	FAXINIT_RXCLASS,
 | |
| 	FAXINIT_DONE,
 | |
| 	FAXINIT_ERROPEN,		//unable to open the comm port
 | |
| 	FAXINIT_ERRNOPORTS,	//no ports were found!
 | |
| 	FAXINIT_ERRTIMEOUT,	//timeout waiting for response from modem
 | |
| } FAXINIT_STEP;
 | |
| 
 | |
| typedef struct tagFAX_INIT {
 | |
| 	FAXINIT_STEP	fStep;	//init step we're currently on
 | |
| 	WORD				nPort;	//faxmodem port we're initializing
 | |
| 	FAXCLASS			fClass;	//faxmodem class
 | |
| } FAX_INIT, FAR *PFAX_INIT;
 | |
| 
 | |
| typedef struct tagSERVER_CONFIG {
 | |
| 	LPSTR	lpKey;
 | |
| 	LPSTR	lpValue;
 | |
| } SERVER_CONFIG, FAR *PSERVER_CONFIG;
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| // FaxLog interface - these function are called by client apps
 | |
| PAPPINFO EXPORT_WINAPI FaxRegisterApp(LPCSTR lpAppName, WORD AppNotifyWnd);
 | |
| BOOL EXPORT_WINAPI FaxUnregisterApp(PAPPINFO);
 | |
| BOOL EXPORT_WINAPI FaxCloseServer(PAPPINFO);
 | |
| 
 | |
| void EXPORT_WINAPI FaxInitSendStruct(PAPPINFO, PSEND_FAX);
 | |
| DWORD EXPORT_WINAPI FaxSchedule(PAPPINFO, PSEND_FAX);	//returns dwID
 | |
| BOOL EXPORT_WINAPI FaxCancel(PAPPINFO, DWORD);
 | |
| 
 | |
| int EXPORT_WINAPI FaxEnumDevices(PAPPINFO);
 | |
| int EXPORT_WINAPI FaxAddDevice(PAPPINFO, int);
 | |
| int EXPORT_WINAPI FaxRemoveDevice(PAPPINFO, int);
 | |
| int EXPORT_WINAPI FaxConfigureDevice(PAPPINFO, PFAXDEVICE);
 | |
| 
 | |
| WORD EXPORT_WINAPI FaxLogFind(PAPPINFO, PSEND_FAX FAR *, DWORD);	//find an item in the log
 | |
| WORD EXPORT_WINAPI FaxLogInit(PAPPINFO, WORD);	//initialize log iteration
 | |
| WORD EXPORT_WINAPI FaxLogNext(PAPPINFO, PSEND_FAX);	//find next item in log
 | |
| WORD EXPORT_WINAPI FaxLogDelete(PAPPINFO, DWORD, WORD);	//delete fax w/dwID
 | |
| 
 | |
| WORD EXPORT_WINAPI FaxSetConfig(PAPPINFO, LPCSTR, LPCSTR);
 | |
| WORD EXPORT_WINAPI FaxGetConfig(PAPPINFO, LPCSTR, LPSTR, WORD nLen);
 | |
| 
 | |
| int EXPORT_WINAPI FaxSubscribe(PAPPINFO, WORD);	//subscribe to specified fax events
 | |
| 
 | |
| PSEND_FAX EXPORT_WINAPI FaxCopy(PSEND_FAX);
 | |
| WORD EXPORT_WINAPI FaxCreate(PAPPINFO, LPCSTR, LPCSTR, DWORD);
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 |