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
|