/*
Copyright (C) Magna Carta Software, Inc. 1988-1990. All Rights Reserved.
C COMMUNICATIONS TOOLKIT
XFER.H -- Data types used in CCT file transfer
*/
#if !defined(XFER_H_INCLUDED)
#define XFER_H_INCLUDED
#if !defined(COMM_H_INCLUDED)
#include <comm.h>
#endif
#if defined(__cplusplus)
extern "C" {
#endif
#if defined(__POWERC) || defined(__TURBOC__)
#include <dir.h>
#endif
#include <sys\types.h>
#include <sys\stat.h>
#if !defined(FHANDLE_DEFINED)
#define FHANDLE_DEFINED
#if defined(USE_STREAM_IO)
typedef FILE * FHANDLE;
#else
typedef long FHANDLE;
#endif
#endif
typedef struct xfer {
char * buf; /* transfer buffer */
char * pb; /* pointer to transfer buffer */
char * high; /* receive buffer high water mark */
FHANDLE fh; /* stream */
char * fspec; /* file spec (e.g. 80 char buffer) */
unsigned len; /* buffer length -- actual*/
unsigned maxlen; /* buffer length -- desired */
short origin; /* if a send, this indicates DISK or RAM */
unsigned short protocol; /* protocol in use */
unsigned short blocksize; /* size of file transmission blocks */
unsigned short soh; /* start-of-header character. */
unsigned short poll; /* poll character. */
unsigned short ibdelay; /* interbyte delay during send and receive */
unsigned short retries; /* number of retries */
unsigned short num_files; /* number of files in transfer */
short f_pos; /* FLAG -- end of file reached */
unsigned short f_write; /* FLAG -- write received buffer to disk */
unsigned free_space; /* RAM not used by file transfer buffers */
struct stat stat; /* file 'stat' (as in UNIX/POSIX */
/* THIS MEMBER POINTS TO THE FUNCTION THAT PERFORMS ERROR CHECKING */
unsigned short (*chk)(unsigned short, unsigned short);
/* THIS FUNCTION IS CALLED DURING FILE TRANSFER TO REPORT PROGRESS */
short (CDECL_ *p_user)(struct comm_port *, short, unsigned long);
short * error; /* array of error counters */
void * k;
struct xfer_file *xf; /* first link in list of file info. */
struct xfer_file *xf_current; /* current link in the file list */
} XFER;
typedef struct xfer_file {
struct xfer_file *next; /* next file to transfer */
struct xfer_file *prev; /* last file transferred */
char fspec[80]; /* file spec (may be full path) */
unsigned short crc; /* file CRC */
unsigned short f_status; /* status flag. Bit encoded as:
Bit 0: 1 if file sent OK
Bit 1: 1 if this link should not
be deleted when file sent.
Bit 2-7: RESERVED.
*/
} XFER_FILE;
#define XFER_IBDELAY 3000
#define XFER_RETRIES 5
#define PATHLEN 80 /* maximum path length to process */
#define CCT_IOBUFSIZE 512 /* size of I/O buffer */
short ascii_send_(COMM_PORT *p, XFER *x, unsigned buflen, short (CDECL_ *progress)(struct comm_port *, short, DWORD));
short FCALL_ fqueue(XFER *x, char *fname);
short FCALL_ freceive(COMM_PORT *p, XFER *x, short protocol, unsigned bufsize, short (CDECL_ *progress)(struct comm_port *, short, DWORD));
short FCALL_ fsend(COMM_PORT *p, XFER *x, short protocol, unsigned len, short (CDECL_ *progress_function)(struct comm_port *, short, DWORD));
short FCALL_ funload(XFER *x, const char *fname);
short FCALL_ funqueue(XFER *x, const char *fspec);
short FCALL_ get_file_xfer_status(void);
short x_tx_(COMM_PORT *p, XFER *x, short protocol, unsigned len, short (CDECL_ *progress)(struct comm_port *, short, DWORD));
extern char fname[PATHLEN]; /* name of received file */
extern unsigned long fsize; /* size of received file */
extern unsigned long fdate; /* date of rx file (secs since 1-1-70 */
extern char * ftempname; /* temporary name for receive files */
extern short a_xfer_errors[]; /* an array of error counters */
extern short cct_xfer_status; /* set by send & receive routines */
#if defined(__cplusplus)
}
#endif
#endif