/***************************************************************************
 Name     :	CAS.C
 Comment  :	

	Copyright (c) Microsoft Corp. 1991, 1992, 1993

 Revision Log
 Date     Name  Description
 -------- ----- ---------------------------------------------------------
***************************************************************************/


#ifdef CAS

// Copy of the DCX and PCX header from dcx.h in \wfw\efaxpump

#define MAX_DCX_PAGES       1023 

typedef struct DCXHDR_s
{
    DWORD   id;                     // 4 byte integer =987654321
    DWORD   Offset[MAX_DCX_PAGES+1];// array of 4 byte integers showing page offsets

}   DCXHDR;

typedef struct PCXHDR_s
{
	char    id;             // always = 0Ah
	char    version;        // value of 2 is suggested, higher allowed
	char    encode_method;  // always = 1
	char    bitsperpixel;   // =1 for fax mode transfer
	short   xtopleft;
	short   ytopleft;
	short   width;
	short   height;
	short   hDPI; 
	short   vDPI; 
	char    pal[48];
	char    reserv;
	char    colorplanes;    // must be 1 for fax mode
	short   horiz;
    	short   nPaletteInfo;   // palette info. must be 1
	char    filler[58];
}   PCXHDR;


/***------------------ Interface to CAS.C ------------------***/

		BOOL __export WINAPI CASModemFind(void);
typedef BOOL (WINAPI  *LPFN_CASMODEMFIND)(void);
	// returns TRUE if CAS is installed, FALSE if not

		VOID __export WINAPI CASInit(void);
typedef BOOL (WINAPI  *LPFN_CASINIT)(void);
	// init stuff, if any

		VOID __export WINAPI CASDeInit(void);
typedef VOID (WINAPI  *LPFN_CASDEINIT)(void);
	// if you want to down any shutdown-cleanup
	// (e.g. if there are pending receives, does CAS 
	// save them for you across a reboot?)

		BOOL __export WINAPI CASSendFile(ATOM aPhone, ATOM aFileMG3, ATOM aFileIFX, ATOM aFileEFX, ATOM aFileDCX);
typedef BOOL (WINAPI  *LPFN_CASSENDFILE)(ATOM aPhone, ATOM aFileMG3, ATOM aFileIFX, ATOM aFileEFX, ATOM aFileDCX);
	// Send. Returns immediately with TRUE unless
	// some internal DEBUGCHK-like error or multiple
	// sends. Handles only one at a time & saves CAS handle
	// internally

		WORD __export WINAPI CASCheckSent(void);
typedef WORD (WINAPI  *LPFN_CASCHECKSENT)(void);
	// Checks if pending send (only one at any time), was sent. 
	// Returns 0 if still pending, non-zero if done, with success/error. 
	// The return value should be in LOBYTE=result HIBYTE=extended-error 
	// form. See FILET30.H, line 29-38 for valid values/combinations.

		USHORT __export WINAPI CASGetNumReceived(void);
typedef USHORT (WINAPI  *LPFN_CASGETNUMRECEIVED)(void);
	// Get *number* of pending receives	(successful or failure) only. 
	// Don't actually dequeue any.

		DWORD __export WINAPI CASGetNextRecv(LPSTR szPath, LPSTR szFile);
typedef DWORD (WINAPI  *LPFN_CASGETNEXTRECV)(LPSTR szPath, LPSTR szFile);
	// gives the spool dir (recvd file in all forms _must_ be put 
	// there for pump to get it) and a suggested filename (8.3 format) 
	// which has been checked to be "safe" to create in that directory. 
	// File name/extension can be changed as neccesary.
	// Return value must be a DWORD with the return filename atom
	// in LOWORD and result/extendederr in HIWORD (i.e result
	// is LOBYTE(HIWORD()) and exterr is HIBYTE(HIWORD()).
	// See lines 54--66 of FILET30.H for valid return values

		VOID __export WINAPI CASAbort(void);
typedef VOID (WINAPI  *LPFN_CASABORT)(void);
	// Abort current Send/Recv if possible.
	// Return when abort is **complete**. Can stub it out currently

		BOOL __export WINAPI CASSetAutoAnswer(BOOL fOn, USHORT uNumRings);
typedef BOOL (WINAPI  *LPFN_CASSETAUTOANSWER)(BOOL fOn, USHORT uNumRings);
	// fOn==TRUE--answer On, FALSE--answer Off
	// uNumRings == after X rings. (0 or more)


		BOOL __export WINAPI CASSetBC(LPBC lpbc, BCTYPE bctype);
typedef	BOOL (WINAPI  *LPFN_CASSETBC)(LPBC lpbc, BCTYPE bctype);

// Finally, we should also see if we can implement any of Mike 
// Ginsberg's INI settings on a CAS board. 

#endif // CAS