/*->h.ckcdef */


extern char *hlptxt;
extern char *srvtxt;

/* Declarations for Send-Init Parameters */

extern int spsiz;             /* Current packet size to send */
extern int spmax;             /* (PWP) Biggest packet size we can send */
                              /* (see rcalcpsz()) */
extern int spsizf;            /* Flag to override what you ask for */
extern int rpsiz;             /* Biggest we want to receive */
extern int urpsiz;            /* User-requested rpsiz */
extern int maxrps;            /* Maximum incoming long packet size */
extern int maxsps;            /* Maximum outbound l.p. size */
extern int maxtry;            /* Maximum retries per packet */
extern int wslots;            /* Window size in use */
extern int wslotsr;           /* Window size requested */
extern int wslotsn;           /* Window size negotiated */
extern int timeouts;          /* For statistics reporting */
extern int spackets;          /*  ... */
extern int rpackets;          /*  ... */
extern int retrans;           /*  ... */
extern int crunched;          /*  ... */
extern int wmax;              /*  ... */
extern int timint;            /* Timeout interval I use */
extern int srvtim;            /* Server command wait timeout */
extern int rtimo;             /* Timeout I want you to use */
extern int timef;             /* Flag to override what you ask */
extern int npad;              /* How much padding to send */
extern int mypadn;            /* How much padding to ask for */
extern int bctr;              /* Block check type requested */
extern int bctu;              /* Block check type used */
extern int ebq;               /* 8th bit prefix */
extern int ebqflg;            /* 8th-bit quoting flag */
extern int rqf;               /* Flag used in 8bq negotiation */
extern int rq;                /* Received 8bq bid */
extern int sq;                /* Sent 8bq bid */
extern int rpt;               /* Repeat count */
extern int rptq;              /* Repeat prefix */
extern int rptflg;            /* Repeat processing flag */

extern int capas;             /* Position of Capabilities */
extern int atcapb;            /* Attribute capability */
extern int atcapr;            /*  requested */
extern int atcapu;            /*  used */
extern int swcapb;            /* Sliding Window capability */
extern int swcapr;            /*  requested */
extern int swcapu;            /*  used */
extern int lpcapb;            /* Long Packet capability */
extern int lpcapr;            /*  requested */
extern int lpcapu;            /*  used */



/* Flags for whether to use particular attributes */


extern int atenci;                         /* Encoding in */
extern int atenco;                         /* Encoding out */
extern int atdati;                         /* Date in */
extern int atdato;                         /* Date out */
extern int atdisi;                         /* Disposition in/out */
extern int atdiso;
extern int atleni;                         /* Length in/out (both kinds) */
extern int atleno;
extern int atblki;                         /* Blocksize in/out */
extern int atblko;
extern int attypi;                         /* File type in/out */
extern int attypo;
extern int atsidi;                         /* System ID in/out */
extern int atsido;
extern int atsysi;                    /* System-dependent parameters in/out */
extern int atsyso;

extern char padch;                    /* Padding character to send */
extern char mypadc;                   /* Padding character to ask for */
extern char seol;                     /* End-Of-Line character to send */
extern char eol;                      /* End-Of-Line character to look for */
extern char ctlq;                     /* Control prefix in incoming data */
extern char myctlq;                   /* Outbound control character prefix */

extern struct zattr iattr;            /* Incoming file attributes */

/* Packet-related variables */

extern int pktnum;                      /* Current packet number */
extern int prvpkt;                      /* Previous packet number */
extern int sndtyp;                      /* Type of packet just sent */
extern int rsn;                         /* Received packet sequence number */
extern int rln;                         /* Received packet length */
extern int size;                        /* Current size of output pkt data */
extern int osize;                       /* Previous output packet data size */
extern int maxsize;                     /* Max size for building data field */
extern int spktl;                       /* Length packet being sent */
extern int rprintf;                     /* REMOTE PRINT flag */
extern int rmailf;                      /* MAIL flag */



extern char * padbuf;                   /* Buffer for send-padding */
extern char *recpkt;
extern char *rdatap;                    /* Pointer to received packet data */
extern char *data;                      /* Pointer to send-packet data */
extern char * srvcmd;                   /* Where to decode server command */
extern char *srvptr;                    /* Pointer to above */
extern char mystch;                     /* Outbound packet-start character */
extern char stchr;                      /* Incoming packet-start character */




/* File-related variables */

extern char * filnam;                   /* Name of current file. */

extern int nfils;                       /* Number of files in file group */
extern int fsize;                       /* Size of current file */


extern int fblksiz;
extern int frecl;
extern int forg;
extern int frecfm;
extern int fncact;
extern int fcctrl;




/* Communication line variables */


extern int speed;                           /* Line speed */


extern int parity;                      /* Parity specified, 0,'e','o',etc */
extern int flow;                        /* Flow control, 1 = xon/xoff */
extern int turn;                        /* Line turnaround handshake flag */
extern int turnch;                      /* Line turnaround character */
extern int duplex;                      /* Duplex, full by default */
extern int escape;                      /* Escape character for connect */
extern int delay;                       /* Initial delay before sending */
extern int mdmtyp;                      /* Modem type (initially none)  */


/* Networks for SET HOST */

extern int network;                     /* Network vs tty connection */


/* Other recent additions */

extern int cdtimo;                     /* Carrier wait timeout */
extern int fncact;                     /* Filename collision action */


/* Statistics variables */

extern int filcnt;               /* Number of files in transaction */
extern int flci;                 /* Characters from line, current file */
extern int flco;                 /* Chars to line, current file  */
extern int tlci;                 /* Chars from line in transaction */
extern int tlco;                 /* Chars to line in transaction */
extern int ffc;                  /* Chars to/from current file */
extern int tfc;                  /* Chars to/from files in transaction */
extern int rptn;                 /* Repeated characters compressed */

extern int tsecs;                      /* Seconds for transaction */

/* Flags */

extern int deblog;                /* Flag for debug logging */
extern int debses;                /* Flag for DEBUG SESSION */
extern int pktlog;                /* Flag for packet logging */
extern int seslog;                /* Session logging */
extern int tralog;                /* Transaction logging */
extern int displa;                /* File transfer display on/off */
extern int stdouf;                /* Flag for output to stdout */
extern int stdinf;                /* Flag for input from stdin */
extern int xflg;                  /* Flag for X instead of F packet */
extern int hcflg;                 /* Doing Host command */
extern int fncnv;                 /* Flag for file name conversion */
extern int binary;                /* Flag for binary file */
extern int savmod;                /* Saved file mode (whole session) */
extern int bsave;                 /* Saved file mode (per file) */
extern int bsavef;                /* Flag if bsave was used. */
extern int cmask;                 /* Connect byte mask */
extern int fmask;                 /* File byte mask */
extern int warn;                  /* Flag for file warning */
extern int quiet;                 /* Be quiet during file transfer */
extern int local;                 /* Flag for external tty vs stdout */
extern int server;                /* Flag for being a server */
extern int cnflg;                 /* Connect after transaction */
extern int cxseen;                /* Flag for cancelling a file */
extern int czseen;                /* Flag for cancelling file group */
extern int discard;               /* Flag for file to be discarded */
extern int keep;                  /* Keep incomplete files */
extern int unkcs;                 /* Keep file w/unknown character set */
extern int nakstate;              /* In a state where we can send NAKs */



/* Variables passed from command parser to protocol module */


extern char sstate;                      /* Starting state for automaton */
extern char *cmarg;                      /* Pointer to command data */
extern char *cmarg2;                     /* Pointer to 2nd command data */
extern char **cmlist;                    /* Pointer to file list in argv */




/* Flags for the ENABLE and DISABLE commands */

extern int en_cwd;                         /* CD/CWD */
extern int en_del;                         /* DELETE */
extern int en_dir;                         /* DIRECTORY */
extern int en_fin;                         /* FINISH/BYE */
extern int en_get;                         /* GET */
extern int en_hos;                         /* HOST */
extern int en_sen;                         /* SEND */
extern int en_set;                         /* SET */
extern int en_spa;                         /* SPACE */
extern int en_typ;                         /* TYPE */
extern int en_who;                         /* WHO */



/* Miscellaneous */

/*
extern char zinbuffer[INBUFSIZE];
extern char zoutbuffer[INBUFSIZE];
 */

extern char * zinbuffer;
extern char * zoutbuffer;

extern char *zinptr;
extern char *zoutptr;
extern int  zincnt;
extern int  zoutcnt;



extern struct pktinfo * s_pkt;          /* arrays of pktinfo structures */
extern struct pktinfo * r_pkt;          /* for sent and received packets */



extern int winlo;                       /* packet number at low window edge  */
extern int sslotsiz,rslotsiz;           /* # of send & receive window slots  */

extern int bigsbufsiz;
extern int bigrbufsiz;

extern int sbufnum;                     /* number of free buffers */
extern int dum001;                      /* protection... */
extern int sbufuse[MAXWS];              /* buffer in-use flag */
extern int dum003;
extern int rbufnum;                     /* number of free buffers */
extern int dum002;                      /* more protection */
extern int rbufuse[MAXWS];              /* buffer in-use flag */
extern int sseqtbl[64];                 /* sequence # to buffer # table */
extern int rseqtbl[64];                 /* sequence # to buffer # table */

/* extern struct pktinfo s_pkt[MAXWS]; */    /* array of pktinfo structures */
/* extern struct pktinfo r_pkt[MAXWS]; */    /* array of pktinfo structures */

extern char xbuf[200];                  /* For debug logging */

/* extern CHAR bigsbuf[BIGSBUFSIZ + 5];  */  /* Send-packet buffer area */
/* extern CHAR bigrbuf[BIGRBUFSIZ + 5];  */  /* Receive-packet area */


extern CHAR * bigsbuf;
extern CHAR * bigrbuf;


extern int    xitsta;
extern int    success;

extern char * DIRCMD;
extern char * DELCMD;
extern char * TYPCMD;
extern char * SPACM2;
extern char * SPACMD;
extern char * WHOCMD;


extern void ermsg(char * message);

extern char * cmdstr;                /* Unix system command string */



/* c.ckcarc */

extern char optbuf[4];  /* Options for MAIL or REMOTE PRINT */

extern int conoc(char c);
extern void conol(char * s);
extern void conoll(char * s);
extern FILE * fp[ZNFILS];
extern int chkfn(int n);
extern int zoutdump(void);
extern int zinfill(void);
extern int zclose(int n,int errflg);
extern int zopeni(int n,char * name);
extern int zopeno(int n,char * name,struct zattr * zz,struct filinfo * fcb);
extern int zxpand(char * fn);
extern int znext(char * fn);
extern int zchkspa(char * f,long n);
extern void znewn(char * fn,char ** s);
extern int zrename(char * old,char * new);
extern int zsattr(struct zattr * xx);
extern int zfree(char * f);
extern char * zfcdat(char * name);

extern int zstime(char * f,struct zattr * yy, int x);
extern int zprint(char * p,char * f);
extern void zrtol(char * name,char * name2);
extern void zltor(char * name,char * name2);
extern int zchdir(char * dirnam);
extern char * zhome(void);
extern char * zgtdir(void);
extern int zdelet(char * name);
extern int zxcmd(int filnum,char * comand);
extern long zchki(char * name);
extern int zsout(int n,char * s);
extern int zsoutl(int n,char * s);
extern int zmail(char * p,char * f);
extern int zkself(void);
extern void rtimer(void);
extern int gtimer(void);
extern void ztime(char ** s);

extern int ttinl(CHAR * dest,int max,int timo,CHAR eol);
extern int ttol(char * s,int n);
extern int ttflui(void);
extern int ttchk(void);
extern int ttopen(char * ttname,int * lcl,int modem,int timo);
extern int ttpkt(int speed,int flow,int parity);
extern int ttres(void);
extern void sleep(int times);

extern void tstats(void);
extern void fstats(void);
extern void doexit(int code);

extern void screen(int f,char c,long n,char * s);

extern void intmsg(int n);
extern void sdebu(int n);
extern void rdebu(int n);
extern void ttoutline(char * s);
extern void zcreatenewfile(char * lname,char * rname);
extern int  chkint(void);

extern int  zgetnextfilename(char * name);
extern void zsetmode(int bctu);


/* c.ckcfn2 */

extern int numerrs;

extern int input(void);
extern int spack(char type,int n,int len,CHAR * d);
extern int chk1(CHAR * pkt);
extern unsigned int chk2(CHAR * pkt);
extern unsigned int chk3(CHAR * pkt);
extern int nxtpkt(void);
extern int ack(void);
extern int ackns(int n,CHAR * s);
extern int ackn(int n);
extern int ack1(char * s);
extern int nack(int n);
extern void rcalcpsz(void);
extern int resend(int n);
extern void errpkt(char * reason);
extern void scmd(char t,char * dat);
extern void srinit(void);
extern int rpack(void);
extern CHAR dopar(CHAR ch);



/* c.ckcfn3 */

extern int makebuf(int slots,int bufsiz,CHAR * buf,struct pktinfo * xx);
extern int mksbuf(int slots);
extern int mkrbuf(int slots);
extern int window(int n);
extern int getsbuf(int n);
extern int getrbuf(void);
extern int freesbuf(int n);
extern int freerbuf(int i);
extern int chkwin(int n,int bottom,int slots);
extern int dumpsbuf(void);
extern int dumprbuf(void);
extern int sattr(int xp);
extern int rsattr(char * s);
extern int gattr(char * s,struct zattr * yy);
extern int initattr(struct zattr * yy);
extern int adebu(char * f,struct zattr * zz);
extern int opena(char * f,struct zattr * zz);
extern int canned(char * buf);
extern int openi(char * name);
extern int openo(char * name,struct zattr * zz,struct filinfo * fcb);
extern int opent(struct zattr * zz);
extern void clsif(int errflg);
extern int  clsof(int disp);


/* c.ckcfns */

#define ENCBUFL 200

extern CHAR * encbuf;                   /* Because getpkt always writes */

extern int sndsrc;                      /* Flag for where to send from: */
                                        /* -1: name in cmdata */
                                        /*  0: stdin          */
                                        /* >0: list in cmlist */

extern int  memstr;                     /* Flag for input from memory string */
extern void encstr(char * s);
extern void encode(char a);
extern int putsrv(char c);
extern int puttrm(char c);
extern void zdstuff(char c);
extern int decode(char * buf,int (*fn)(char c));
extern int getpkt(int bufmax);
extern int tinit(void);
extern void pktinit(void);
extern void rinit(char * d);
extern void resetc(void);
extern int sinit(void);
extern void sipkt(char c);
extern int rcvfil(char * n);
extern int reof(char * f,struct zattr * yy);
extern void reot(void);
extern int sfile(int x);
extern int sdata(void);
extern int seof(char * s);
extern void sxeof(char * s);
extern int seot(void);
extern CHAR * rpar(void);
extern int spar(char * s);
extern int gnfile(void);
extern int sndhlp(void);
extern int cwd(char * vdir);
extern int syscmd(char * prefix,char * suffix);
extern int remset(char * s);
extern int adjpkl(int pktlen,int slots,int bufsiz);
extern int putfil(char c);


/* c.ckcpro */

extern void proto(void);
extern int  what;


