/* 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 #endif #if defined(__cplusplus) extern "C" { #endif #if defined(__POWERC) || defined(__TURBOC__) #include #endif #include #include #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