/*->h.zmextra */


#define OK 0

#undef  ERROR
#define ERROR (-1)


#define CPMEOF 032
#define WANTCRC 0103       /* send C not NAK to get crc not checksum */
#define TIMEOUT (-2)
#define RCDO (-3)
#define ERRORMAX 5
#define RETRYMAX 5
#define WCEOT (-10)
#define PATHLEN 257        /* ready for 4.2 bsd ? */
#define UNIXFILE 0xF000    /* The S_IFMT file mask bit for stat */



extern int  AutoResume;
extern int  zmautodload;

extern char * substr(char * s,char * t);
extern long   getfree(void);

extern int readline(int time);

#define purgeline() ftpflushinput()
#define flushmo() ftpflushinput()

#define xsendline(c) ftpoutbyte(c)
#define sendline(c) outbyte(c)


#define rdchk() ftpinputchars()


extern void   bttyout(int c);



/* #define ZMDEBUG  */  


#ifdef ZMDEBUG

extern void   zdeb(char * format, ...);

#define zdeb1(a) zdeb(a)
#define zdeb2(a,b) zdeb(a,b)
#define zdeb3(a,b,c) zdeb(a,b,c)
#define zdeb4(a,b,c,d) zdeb(a,b,c,d)
#define zdeb5(a,b,c,d,e) zdeb(a,b,c,d,e)
#define zdeb6(a,b,c,d,e,f) zdeb(a,b,c,d,e,f)
#define zdeb7(a,b,c,d,e,f,g) zdeb(a,b,c,d,e,f,g)
#define zdeb8(a,b,c,d,e,f,g,h) zdeb(a,b,c,d,e,f,g,h)
#define zdeb9(a,b,c,d,e,f,g,h,i) zdeb(a,b,c,d,e,f,g,h,i)
#define zdeb10(a,b,c,d,e,f,g,h,i,j) zdeb(a,b,c,d,e,f,g,h,j)



#else

#define zdeb1(a) ;
#define zdeb2(a,b) ;
#define zdeb3(a,b,c) ;
#define zdeb4(a,b,c,d) ;
#define zdeb5(a,b,c,d,e) ;
#define zdeb6(a,b,c,d,e,f) ;
#define zdeb7(a,b,c,d,e,f,g) ;
#define zdeb8(a,b,c,d,e,f,g,h) ;
#define zdeb9(a,b,c,d,e,f,g,h,i) ;
#define zdeb10(a,b,c,d,e,f,g,h,i,j) ;

#endif


extern int    wcreceive(void);
extern int    wcs(int bn);
extern void   sendsaybibi(void);




/* variables for receive */



extern char * secbuf;
extern char Pathname[PATHLEN];


extern FILE * fout;

extern int Lastrx;
extern int Crcflg;
extern int Firstsec;
extern int Eofseen;      /* indicates cpm eof (~Z) has been received */

extern int errors;

extern int Nflag;        /* Don't really transfer files */
extern int Rxclob;       /* Clobber existing file */
extern int Rxbinary;     /* receive all files in bin mode */
extern int Rxascii;      /* receive files in ascii (translate) mode */
extern int Thisbinary;   /* current file is to be received in bin mode */
extern int Blklen;       /* record length of received packets */
extern long Bytesleft;   /* number of bytes of incoming file left */
extern long Modtime;     /* Unix style mod time for incoming file */
extern int Filemode;     /* Unix style mode for incoming file */
extern int Lleft;        /* number of characters in linbuf */
extern int Verbose;
extern int Restricted;   /* restricted; no /.. or ../ in filenames */
extern char zconv;       /* ZMODEM file conversion request */
extern char zmanag;      /* ZMODEM file management request */
extern char ztrans;      /* ZMODEM file transport request */
extern char Lzmanag;     /* Local ZMODEM file management request */
extern int  Zctlesc;     /* Encode control characters */
extern int tryzhdrtype;  /* Header type to send corresp. to Last rx close */


/* variable for send */

extern int Ascii;          /* Add CR's for brain damaged programs */
extern int Lfseen;
extern unsigned Rxbuflen;  /* Receiver's max buffer length */
extern int Rxflags;

extern FILE * in;
extern int  Canseek;       /* 1: Can seek 0: only rewind -1: neither (pipe) */

extern char * txbuf;

extern long vpos;          /* Number of bytes read from file */
extern char Lzconv;        /* Local ZMODEM file conversion request */
extern char Lzmanag;       /* Local ZMODEM file management request */
extern int  Lskipnocor;
extern char Lztrans;
extern unsigned Baudrate;  /* Default, should be set by first mode() call */
extern unsigned Txwindow;  /* Control the size of the transmitted window */
extern unsigned Txwspac;   /* Spacing between zcrcq requests */
extern unsigned Txwcnt;    /* Counter used to space ack requests */
extern long Lrxpos;        /* Receiver's last reported offset */

extern long bytcnt;
extern int Wantfcs32;      /* want to send 32 bit FCS */
extern int Tframlen;       /* Override for tx frame length */
extern char *qbf;
extern long Lastsync;      /* Last offset to which we got a ZRPOS */
extern int Beenhereb4;     /* How many times we've been ZRPOS'd same place */

extern int firstsec;
extern char Myattn[];
extern int blkopt;         /* Override value for zmodem blklen */

extern int    Command;     /* Send a command, then exit. */
extern char * Cmdstr;      /* Pointer to the command string */
extern int    Cmdtries;
extern int    Cmdack1;     /* Rx ACKs command, then do it */


extern int BEofseen;       /* EOF seen on input set by fooseek */
extern int Totsecs;        /* total number of sectors this file */

extern int blklen;         /* length of transmitted records */
extern int Test;           /* Test mode */
extern int Exitcode;

extern int Dottoslash;     /* Change foo.bar.baz to foo/bar/baz */
extern int Fullname;       /* transmit full pathname */
extern int Filesleft;
extern int errcnt;         /* number of files unreadable */
extern int Filcnt;         /* count of number of files opened */
extern long Totalleft;





