Metropoli BBS
VIEWER: xfer.h MODE: TEXT (ASCII)
/*
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
[ RETURN TO DIRECTORY ]