1*4882a593Smuzhiyun #ifndef ZMODEM_GLOBAL_H 2*4882a593Smuzhiyun #define ZMODEM_GLOBAL_H 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun /* zglobal.h - prototypes etcetera for lrzsz 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun Copyright (C) until 1998 Chuck Forsberg (OMEN Technology Inc) 7*4882a593Smuzhiyun Copyright (C) 1994 Matt Porter 8*4882a593Smuzhiyun Copyright (C) 1996, 1997 Uwe Ohse 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun This program is free software; you can redistribute it and/or modify 11*4882a593Smuzhiyun it under the terms of the GNU General Public License as published by 12*4882a593Smuzhiyun the Free Software Foundation; either version 2, or (at your option) 13*4882a593Smuzhiyun any later version. 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun This program is distributed in the hope that it will be useful, 16*4882a593Smuzhiyun but WITHOUT ANY WARRANTY; without even the implied warranty of 17*4882a593Smuzhiyun MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*4882a593Smuzhiyun GNU General Public License for more details. 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun You should have received a copy of the GNU General Public License 21*4882a593Smuzhiyun along with this program; if not, write to the Free Software 22*4882a593Smuzhiyun Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 23*4882a593Smuzhiyun 02111-1307, USA. 24*4882a593Smuzhiyun */ 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun #include "config.h" 27*4882a593Smuzhiyun //#include <sys/types.h> 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun #ifdef __GNUC__ 30*4882a593Smuzhiyun # define alloca __builtin_alloca 31*4882a593Smuzhiyun # define HAVE_ALLOCA 1 32*4882a593Smuzhiyun #else 33*4882a593Smuzhiyun # if defined HAVE_ALLOCA_H || defined _LIBC 34*4882a593Smuzhiyun # include <alloca.h> 35*4882a593Smuzhiyun # else 36*4882a593Smuzhiyun # ifdef _AIX 37*4882a593Smuzhiyun #pragma alloca 38*4882a593Smuzhiyun # else 39*4882a593Smuzhiyun # ifndef alloca 40*4882a593Smuzhiyun # ifndef __GLIBC__ 41*4882a593Smuzhiyun char *alloca (); 42*4882a593Smuzhiyun # endif 43*4882a593Smuzhiyun # endif 44*4882a593Smuzhiyun # endif 45*4882a593Smuzhiyun # endif 46*4882a593Smuzhiyun #endif 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun #ifndef __P 49*4882a593Smuzhiyun #if defined (__GNUC__) || (defined (__STDC__) && __STDC__) 50*4882a593Smuzhiyun #define __P(args) args 51*4882a593Smuzhiyun #else 52*4882a593Smuzhiyun #define __P(args) () 53*4882a593Smuzhiyun #endif /* GCC. */ 54*4882a593Smuzhiyun #endif /* Not __P. */ 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun #ifdef __STDC__ 57*4882a593Smuzhiyun #include <stdarg.h> 58*4882a593Smuzhiyun #else 59*4882a593Smuzhiyun #include <varargs.h> 60*4882a593Smuzhiyun #endif 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun #ifdef TIME_WITH_SYS_TIME 63*4882a593Smuzhiyun # include <sys/time.h> 64*4882a593Smuzhiyun # include <time.h> 65*4882a593Smuzhiyun # define INCLUDED_SYS_TIME 66*4882a593Smuzhiyun #else 67*4882a593Smuzhiyun # ifdef HAVE_SYS_TIME_H 68*4882a593Smuzhiyun # include <sys/time.h> 69*4882a593Smuzhiyun # define INCLUDED_SYS_TIME 70*4882a593Smuzhiyun # else 71*4882a593Smuzhiyun # include <time.h> 72*4882a593Smuzhiyun # endif 73*4882a593Smuzhiyun #endif 74*4882a593Smuzhiyun #ifdef SYS_TIME_WITHOUT_SYS_SELECT 75*4882a593Smuzhiyun # ifdef INCLUDED_SYS_TIME 76*4882a593Smuzhiyun # undef HAVE_SYS_SELECT_H 77*4882a593Smuzhiyun # endif 78*4882a593Smuzhiyun #endif 79*4882a593Smuzhiyun 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun #ifdef HAVE_SYS_SELECT_H 82*4882a593Smuzhiyun # include <sys/select.h> 83*4882a593Smuzhiyun #endif 84*4882a593Smuzhiyun #ifdef __BEOS__ 85*4882a593Smuzhiyun /* BeOS 4.0: sys/select.h is almost completely #ifdefd out */ 86*4882a593Smuzhiyun #define HAVE_SOCKET_H 87*4882a593Smuzhiyun #ifdef HAVE_SOCKET_H 88*4882a593Smuzhiyun #include <socket.h> 89*4882a593Smuzhiyun #endif 90*4882a593Smuzhiyun #endif 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun #if STDC_HEADERS 93*4882a593Smuzhiyun # include <linux/string.h> 94*4882a593Smuzhiyun #else 95*4882a593Smuzhiyun # ifdef HAVE_STRINGS_H 96*4882a593Smuzhiyun # include <linux/strings.h> 97*4882a593Smuzhiyun # endif 98*4882a593Smuzhiyun # ifndef HAVE_STRCHR 99*4882a593Smuzhiyun # define strchr index 100*4882a593Smuzhiyun # define strrchr rindex 101*4882a593Smuzhiyun # endif 102*4882a593Smuzhiyun char *strchr (), *strrchr (); 103*4882a593Smuzhiyun # ifndef HAVE_MEMCPY 104*4882a593Smuzhiyun # define memcpy(d, s, n) bcopy ((s), (d), (n)) 105*4882a593Smuzhiyun # define memmove(d, s, n) bcopy ((s), (d), (n)) 106*4882a593Smuzhiyun # endif 107*4882a593Smuzhiyun #endif 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun //#include <sys/stat.h> 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun /* we need to decide whether readcheck is possible */ 112*4882a593Smuzhiyun #ifdef HAVE_FCNTL_H 113*4882a593Smuzhiyun # include <fcntl.h> 114*4882a593Smuzhiyun #endif 115*4882a593Smuzhiyun #ifdef HAVE_SYS_IOCTL_H 116*4882a593Smuzhiyun # include <sys/ioctl.h> 117*4882a593Smuzhiyun #endif 118*4882a593Smuzhiyun #ifdef HAVE_RDCHK 119*4882a593Smuzhiyun # define READCHECK 120*4882a593Smuzhiyun #else 121*4882a593Smuzhiyun # ifdef FIONREAD 122*4882a593Smuzhiyun # define READCHECK_FIONREAD 123*4882a593Smuzhiyun # define READCHECK 124*4882a593Smuzhiyun # else 125*4882a593Smuzhiyun # ifdef F_GETFL 126*4882a593Smuzhiyun # define READCHECK 127*4882a593Smuzhiyun # define READCHECK_READS 128*4882a593Smuzhiyun # define READCHECK_GETFL 129*4882a593Smuzhiyun # endif 130*4882a593Smuzhiyun # endif 131*4882a593Smuzhiyun #endif 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun /* used to use #elif, but native braindead hpux 9.00 c compiler didn't 134*4882a593Smuzhiyun * understand it */ 135*4882a593Smuzhiyun #ifdef HAVE_TERMIOS_H 136*4882a593Smuzhiyun /* get rid of warnings on SCO ODT 3.2 */ 137*4882a593Smuzhiyun struct termios; 138*4882a593Smuzhiyun # include <termios.h> 139*4882a593Smuzhiyun # define USE_TERMIOS 140*4882a593Smuzhiyun #else 141*4882a593Smuzhiyun # if defined(HAVE_SYS_TERMIOS_H) 142*4882a593Smuzhiyun # include <sys/termios.h> 143*4882a593Smuzhiyun # define USE_TERMIOS 144*4882a593Smuzhiyun # else 145*4882a593Smuzhiyun # if defined(HAVE_TERMIO_H) 146*4882a593Smuzhiyun # include <termio.h> 147*4882a593Smuzhiyun # define USE_TERMIO 148*4882a593Smuzhiyun # else 149*4882a593Smuzhiyun # if defined(HAVE_SYS_TERMIO_H) 150*4882a593Smuzhiyun # include <sys/termio.h> 151*4882a593Smuzhiyun # define USE_TERMIO 152*4882a593Smuzhiyun # else 153*4882a593Smuzhiyun # if defined(HAVE_SGTTY_H) 154*4882a593Smuzhiyun # include <sgtty.h> 155*4882a593Smuzhiyun # define USE_SGTTY 156*4882a593Smuzhiyun # ifdef LLITOUT 157*4882a593Smuzhiyun extern long Locmode; /* Saved "local mode" for 4.x BSD "new driver" */ 158*4882a593Smuzhiyun extern long Locbit; /* Bit SUPPOSED to disable output translations */ 159*4882a593Smuzhiyun # endif 160*4882a593Smuzhiyun # else 161*4882a593Smuzhiyun # // error neither termio.h nor sgtty.h found. Cannot continue. 162*4882a593Smuzhiyun # endif 163*4882a593Smuzhiyun # endif 164*4882a593Smuzhiyun # endif 165*4882a593Smuzhiyun # endif 166*4882a593Smuzhiyun #endif 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun #ifdef USE_SGTTY 169*4882a593Smuzhiyun # ifdef TIOCSBRK 170*4882a593Smuzhiyun # define CANBREAK 171*4882a593Smuzhiyun # endif 172*4882a593Smuzhiyun #endif 173*4882a593Smuzhiyun #ifdef USE_TERMIO 174*4882a593Smuzhiyun # define CANBREAK 175*4882a593Smuzhiyun #endif 176*4882a593Smuzhiyun 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun 179*4882a593Smuzhiyun /* Take care of NLS matters. */ 180*4882a593Smuzhiyun #if HAVE_LOCALE_H 181*4882a593Smuzhiyun # include <locale.h> 182*4882a593Smuzhiyun #endif 183*4882a593Smuzhiyun #if !HAVE_SETLOCALE 184*4882a593Smuzhiyun # define setlocale(Category, Locale) /* empty */ 185*4882a593Smuzhiyun #endif 186*4882a593Smuzhiyun 187*4882a593Smuzhiyun #if ENABLE_NLS 188*4882a593Smuzhiyun # include <libintl.h> 189*4882a593Smuzhiyun # define _(Text) gettext (Text) 190*4882a593Smuzhiyun #else 191*4882a593Smuzhiyun # define bindtextdomain(Domain, Directory) /* empty */ 192*4882a593Smuzhiyun # define textdomain(Domain) /* empty */ 193*4882a593Smuzhiyun # define _(Text) Text 194*4882a593Smuzhiyun #endif 195*4882a593Smuzhiyun 196*4882a593Smuzhiyun #ifndef ENABLE_SYSLOG 197*4882a593Smuzhiyun # undef HAVE_SYSLOG 198*4882a593Smuzhiyun #else 199*4882a593Smuzhiyun # ifdef HAVE_SYSLOG_H 200*4882a593Smuzhiyun # include <syslog.h> 201*4882a593Smuzhiyun # else 202*4882a593Smuzhiyun # if defined(HAVE_SYS_SYSLOG_H) 203*4882a593Smuzhiyun # include <sys/syslog.h> 204*4882a593Smuzhiyun # else 205*4882a593Smuzhiyun # undef HAVE_SYSLOG 206*4882a593Smuzhiyun # endif 207*4882a593Smuzhiyun # endif 208*4882a593Smuzhiyun #endif 209*4882a593Smuzhiyun #ifndef ENABLE_SYSLOG 210*4882a593Smuzhiyun # define openlog(name,pid,facility) /* void it */ 211*4882a593Smuzhiyun # define setlogmask(x) /* void it */ 212*4882a593Smuzhiyun #else 213*4882a593Smuzhiyun extern int enable_syslog; 214*4882a593Smuzhiyun #endif 215*4882a593Smuzhiyun 216*4882a593Smuzhiyun #if defined HAVE_UNISTD_H 217*4882a593Smuzhiyun # include <unistd.h> 218*4882a593Smuzhiyun #endif 219*4882a593Smuzhiyun /* The following is from pathmax.h. */ 220*4882a593Smuzhiyun /* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define 221*4882a593Smuzhiyun PATH_MAX but might cause redefinition warnings when sys/param.h is 222*4882a593Smuzhiyun later included (as on MORE/BSD 4.3). */ 223*4882a593Smuzhiyun #if defined(_POSIX_VERSION) || (defined(HAVE_LIMITS_H) && !defined(__GNUC__)) 224*4882a593Smuzhiyun # include <limits.h> 225*4882a593Smuzhiyun #endif 226*4882a593Smuzhiyun 227*4882a593Smuzhiyun #ifndef _POSIX_PATH_MAX 228*4882a593Smuzhiyun # define _POSIX_PATH_MAX 255 229*4882a593Smuzhiyun #endif 230*4882a593Smuzhiyun 231*4882a593Smuzhiyun #if !defined(PATH_MAX) && defined(_PC_PATH_MAX) 232*4882a593Smuzhiyun # define PATH_MAX 255 233*4882a593Smuzhiyun #endif 234*4882a593Smuzhiyun 235*4882a593Smuzhiyun /* Don't include sys/param.h if it already has been. */ 236*4882a593Smuzhiyun #if defined(HAVE_SYS_PARAM_H) && !defined(PATH_MAX) && !defined(MAXPATHLEN) 237*4882a593Smuzhiyun # include <sys/param.h> 238*4882a593Smuzhiyun #endif 239*4882a593Smuzhiyun 240*4882a593Smuzhiyun #if !defined(PATH_MAX) && defined(MAXPATHLEN) 241*4882a593Smuzhiyun # define PATH_MAX MAXPATHLEN 242*4882a593Smuzhiyun #endif 243*4882a593Smuzhiyun 244*4882a593Smuzhiyun #if !defined(LONG_MAX) && defined(HAVE_LIMITS_H) 245*4882a593Smuzhiyun # include <limits.h> 246*4882a593Smuzhiyun #endif 247*4882a593Smuzhiyun 248*4882a593Smuzhiyun #ifndef PATH_MAX 249*4882a593Smuzhiyun # define PATH_MAX _POSIX_PATH_MAX 250*4882a593Smuzhiyun #endif 251*4882a593Smuzhiyun 252*4882a593Smuzhiyun #ifdef __GNUC__ 253*4882a593Smuzhiyun 254*4882a593Smuzhiyun #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 5) 255*4882a593Smuzhiyun # define LRZSZ_ATTRIB_SECTION(x) __attribute__((section(#x))) 256*4882a593Smuzhiyun #endif 257*4882a593Smuzhiyun 258*4882a593Smuzhiyun #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4) 259*4882a593Smuzhiyun # define LRZSZ_ATTRIB_CONST __attribute__((__const__)) 260*4882a593Smuzhiyun #endif 261*4882a593Smuzhiyun 262*4882a593Smuzhiyun /* gcc.info sagt, noreturn w?re ab 2.5 verf?gbar. HPUX-gcc 2.5.8 263*4882a593Smuzhiyun * kann es noch nicht - what's this? 264*4882a593Smuzhiyun */ 265*4882a593Smuzhiyun #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 5) 266*4882a593Smuzhiyun # define LRZSZ_ATTRIB_NORET __attribute__((__noreturn__)) 267*4882a593Smuzhiyun #endif 268*4882a593Smuzhiyun 269*4882a593Smuzhiyun #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 5) 270*4882a593Smuzhiyun # define LRZSZ_ATTRIB_PRINTF(formatnr,firstargnr) \ 271*4882a593Smuzhiyun __attribute__((__format__ (printf,formatnr,firstargnr))) 272*4882a593Smuzhiyun #endif 273*4882a593Smuzhiyun 274*4882a593Smuzhiyun #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 6) 275*4882a593Smuzhiyun #define LRZSZ_ATTRIB_UNUSED __attribute__((__unused__)) 276*4882a593Smuzhiyun #endif 277*4882a593Smuzhiyun 278*4882a593Smuzhiyun #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) 279*4882a593Smuzhiyun # define LRZSZ_ATTRIB_REGPARM(n) \ 280*4882a593Smuzhiyun __attribute__((__regparm__ (n))) 281*4882a593Smuzhiyun #endif 282*4882a593Smuzhiyun #endif /* __GNUC__ */ 283*4882a593Smuzhiyun #ifndef LRZSZ_ATTRIB_REGPARM 284*4882a593Smuzhiyun #define LRZSZ_ATTRIB_REGPARM(n) 285*4882a593Smuzhiyun #endif 286*4882a593Smuzhiyun #ifndef LRZSZ_ATTRIB_UNUSED 287*4882a593Smuzhiyun #define LRZSZ_ATTRIB_UNUSED 288*4882a593Smuzhiyun #endif 289*4882a593Smuzhiyun #ifndef LRZSZ_ATTRIB_NORET 290*4882a593Smuzhiyun #define LRZSZ_ATTRIB_NORET 291*4882a593Smuzhiyun #endif 292*4882a593Smuzhiyun #ifndef LRZSZ_ATTRIB_CONST 293*4882a593Smuzhiyun #define LRZSZ_ATTRIB_CONST 294*4882a593Smuzhiyun #endif 295*4882a593Smuzhiyun #ifndef LRZSZ_ATTRIB_PRINTF 296*4882a593Smuzhiyun #define LRZSZ_ATTRIB_PRINTF(x,y) 297*4882a593Smuzhiyun #endif 298*4882a593Smuzhiyun #ifndef LRZSZ_ATTRIB_SECTION 299*4882a593Smuzhiyun #define LRZSZ_ATTRIB_SECTION(n) 300*4882a593Smuzhiyun #endif 301*4882a593Smuzhiyun #undef LRZSZ_ATTRIB_SECTION 302*4882a593Smuzhiyun #define LRZSZ_ATTRIB_SECTION(x) 303*4882a593Smuzhiyun #undef LRZSZ_ATTRIB_REGPARM 304*4882a593Smuzhiyun #define LRZSZ_ATTRIB_REGPARM(x) 305*4882a593Smuzhiyun 306*4882a593Smuzhiyun 307*4882a593Smuzhiyun #define OK 0 308*4882a593Smuzhiyun #define FALSE 0 309*4882a593Smuzhiyun #define TRUE 1 310*4882a593Smuzhiyun #define ERROR (-1) 311*4882a593Smuzhiyun 312*4882a593Smuzhiyun /* Ward Christensen / CP/M parameters - Don't change these! */ 313*4882a593Smuzhiyun #define ENQ 005 314*4882a593Smuzhiyun #define CAN ('X'&037) 315*4882a593Smuzhiyun #define XOFF ('s'&037) 316*4882a593Smuzhiyun #define XON ('q'&037) 317*4882a593Smuzhiyun #define SOH 1 318*4882a593Smuzhiyun #define STX 2 319*4882a593Smuzhiyun #define EOT 4 320*4882a593Smuzhiyun #define ACK 6 321*4882a593Smuzhiyun #define NAK 025 322*4882a593Smuzhiyun #define CPMEOF 032 323*4882a593Smuzhiyun #define WANTCRC 0103 /* send C not NAK to get crc not checksum */ 324*4882a593Smuzhiyun #define WANTG 0107 /* Send G not NAK to get nonstop batch xmsn */ 325*4882a593Smuzhiyun #define TIMEOUT (-2) 326*4882a593Smuzhiyun #define RCDO (-3) 327*4882a593Smuzhiyun #define WCEOT (-10) 328*4882a593Smuzhiyun 329*4882a593Smuzhiyun #define RETRYMAX 10 330*4882a593Smuzhiyun 331*4882a593Smuzhiyun #define UNIXFILE 0xF000 /* The S_IFMT file mask bit for stat */ 332*4882a593Smuzhiyun 333*4882a593Smuzhiyun #define DEFBYTL 2000000000L /* default rx file size */ 334*4882a593Smuzhiyun 335*4882a593Smuzhiyun enum zm_type_enum { 336*4882a593Smuzhiyun ZM_XMODEM, 337*4882a593Smuzhiyun ZM_YMODEM, 338*4882a593Smuzhiyun ZM_ZMODEM 339*4882a593Smuzhiyun }; 340*4882a593Smuzhiyun 341*4882a593Smuzhiyun struct zm_fileinfo { 342*4882a593Smuzhiyun char *fname; 343*4882a593Smuzhiyun time_t modtime; 344*4882a593Smuzhiyun mode_t mode; 345*4882a593Smuzhiyun size_t bytes_total; 346*4882a593Smuzhiyun size_t bytes_sent; 347*4882a593Smuzhiyun size_t bytes_received; 348*4882a593Smuzhiyun size_t bytes_skipped; /* crash recovery */ 349*4882a593Smuzhiyun int eof_seen; 350*4882a593Smuzhiyun }; 351*4882a593Smuzhiyun 352*4882a593Smuzhiyun #define R_BYTESLEFT(x) ((x)->bytes_total-(x)->bytes_received) 353*4882a593Smuzhiyun 354*4882a593Smuzhiyun extern enum zm_type_enum protocol; 355*4882a593Smuzhiyun 356*4882a593Smuzhiyun extern const char *program_name; /* the name by which we were called */ 357*4882a593Smuzhiyun extern int Verbose; 358*4882a593Smuzhiyun extern int errors; 359*4882a593Smuzhiyun extern int no_timeout; 360*4882a593Smuzhiyun extern int Zctlesc; /* Encode control characters */ 361*4882a593Smuzhiyun extern int under_rsh; 362*4882a593Smuzhiyun 363*4882a593Smuzhiyun RETSIGTYPE bibi __P ((int n)); 364*4882a593Smuzhiyun 365*4882a593Smuzhiyun //#define sendline(c) putchar((c) & 0377) 366*4882a593Smuzhiyun //#define xsendline(c) putchar(c) 367*4882a593Smuzhiyun 368*4882a593Smuzhiyun /* zreadline.c */ 369*4882a593Smuzhiyun extern char *readline_ptr; /* pointer for removing chars from linbuf */ 370*4882a593Smuzhiyun extern int readline_left; /* number of buffered chars left to read */ 371*4882a593Smuzhiyun #define READLINE_PF(timeout) \ 372*4882a593Smuzhiyun (--readline_left >= 0? (*readline_ptr++ & 0377) : readline_internal(timeout)) 373*4882a593Smuzhiyun 374*4882a593Smuzhiyun int readline_internal __P ((unsigned int timeout)); 375*4882a593Smuzhiyun void readline_purge __P ((void)); 376*4882a593Smuzhiyun void readline_setup __P ((int fd, size_t readnum, 377*4882a593Smuzhiyun size_t buffer_size)) LRZSZ_ATTRIB_SECTION(lrzsz_rare); 378*4882a593Smuzhiyun 379*4882a593Smuzhiyun 380*4882a593Smuzhiyun /* rbsb.c */ 381*4882a593Smuzhiyun extern int Fromcu; 382*4882a593Smuzhiyun extern int Twostop; 383*4882a593Smuzhiyun #ifdef READCHECK_READS 384*4882a593Smuzhiyun extern unsigned char checked; 385*4882a593Smuzhiyun #endif 386*4882a593Smuzhiyun extern int iofd; 387*4882a593Smuzhiyun extern unsigned Baudrate; 388*4882a593Smuzhiyun 389*4882a593Smuzhiyun void zperr __P ((const char *fmt, ...)); 390*4882a593Smuzhiyun void zpfatal __P ((const char *fmt, ...)); 391*4882a593Smuzhiyun void vfile __P ((const char *format, ...)); 392*4882a593Smuzhiyun #define vchar(x) putc(x) 393*4882a593Smuzhiyun #define vstring(x) fputs(stderr, x) 394*4882a593Smuzhiyun 395*4882a593Smuzhiyun #ifdef __GNUC__ 396*4882a593Smuzhiyun #if __GNUC__ > 1 397*4882a593Smuzhiyun #define vstringf(format,args...) fprintf(stderr,format, ##args) 398*4882a593Smuzhiyun #endif 399*4882a593Smuzhiyun #endif 400*4882a593Smuzhiyun #ifndef vstringf 401*4882a593Smuzhiyun void vstringf __P ((const char *format, ...)); 402*4882a593Smuzhiyun #endif 403*4882a593Smuzhiyun #define VPRINTF(level,format_args) do {if ((Verbose)>=(level)) \ 404*4882a593Smuzhiyun vstringf format_args ; } while(0) 405*4882a593Smuzhiyun 406*4882a593Smuzhiyun /* rbsb.c */ 407*4882a593Smuzhiyun int from_cu __P ((void)) LRZSZ_ATTRIB_SECTION(lrzsz_rare); 408*4882a593Smuzhiyun int rdchk __P ((int fd)); 409*4882a593Smuzhiyun int io_mode __P ((int fd, int n)) LRZSZ_ATTRIB_SECTION(lrzsz_rare); 410*4882a593Smuzhiyun void sendbrk __P ((int fd)); 411*4882a593Smuzhiyun //#define flushmo() fflush(stdout) 412*4882a593Smuzhiyun void purgeline __P ((int fd)); 413*4882a593Smuzhiyun void canit __P ((int fd)); 414*4882a593Smuzhiyun 415*4882a593Smuzhiyun 416*4882a593Smuzhiyun /* crctab.c */ 417*4882a593Smuzhiyun extern unsigned short crctab[256]; 418*4882a593Smuzhiyun #define updcrc(cp, crc) ( crctab[((crc >> 8) & 255)] ^ (crc << 8) ^ cp) 419*4882a593Smuzhiyun extern long cr3tab[]; 420*4882a593Smuzhiyun #define UPDC32(b, c) (cr3tab[((int)c ^ b) & 0xff] ^ ((c >> 8) & 0x00FFFFFF)) 421*4882a593Smuzhiyun 422*4882a593Smuzhiyun /* zm.c */ 423*4882a593Smuzhiyun #include "zmodem.h" 424*4882a593Smuzhiyun extern unsigned int Rxtimeout; /* Tenths of seconds to wait for something */ 425*4882a593Smuzhiyun extern int bytes_per_error; /* generate one error around every x bytes */ 426*4882a593Smuzhiyun 427*4882a593Smuzhiyun /* Globals used by ZMODEM functions */ 428*4882a593Smuzhiyun extern int Rxframeind; /* ZBIN ZBIN32, or ZHEX type of frame received */ 429*4882a593Smuzhiyun extern int Rxtype; /* Type of header received */ 430*4882a593Smuzhiyun extern int Zrwindow; /* RX window size (controls garbage count) */ 431*4882a593Smuzhiyun /* extern int Rxcount; */ /* Count of data bytes received */ 432*4882a593Smuzhiyun extern char Rxhdr[4]; /* Received header */ 433*4882a593Smuzhiyun extern char Txhdr[4]; /* Transmitted header */ 434*4882a593Smuzhiyun extern long Txpos; /* Transmitted file position */ 435*4882a593Smuzhiyun extern int Txfcs32; /* TURE means send binary frames with 32 bit FCS */ 436*4882a593Smuzhiyun extern int Crc32t; /* Display flag indicating 32 bit CRC being sent */ 437*4882a593Smuzhiyun extern int Crc32; /* Display flag indicating 32 bit CRC being received */ 438*4882a593Smuzhiyun extern int Znulls; /* Number of nulls to send at beginning of ZDATA hdr */ 439*4882a593Smuzhiyun extern char Attn[ZATTNLEN+1]; /* Attention string rx sends to tx on err */ 440*4882a593Smuzhiyun 441*4882a593Smuzhiyun extern void zsendline __P ((int c)); 442*4882a593Smuzhiyun extern void zsendline_init __P ((void)) LRZSZ_ATTRIB_SECTION(lrzsz_rare); 443*4882a593Smuzhiyun void zsbhdr __P ((int type, char *hdr)); 444*4882a593Smuzhiyun void zshhdr __P ((int type, char *hdr)); 445*4882a593Smuzhiyun void zsdata __P ((const char *buf, size_t length, int frameend)); 446*4882a593Smuzhiyun void zsda32 __P ((const char *buf, size_t length, int frameend)); 447*4882a593Smuzhiyun int zrdata __P ((char *buf, int length, size_t *received)); 448*4882a593Smuzhiyun int zgethdr __P ((char *hdr, int eflag, size_t *)); 449*4882a593Smuzhiyun void stohdr __P ((size_t pos)) LRZSZ_ATTRIB_REGPARM(1); 450*4882a593Smuzhiyun long rclhdr __P ((char *hdr)) LRZSZ_ATTRIB_REGPARM(1); 451*4882a593Smuzhiyun 452*4882a593Smuzhiyun int tcp_server __P ((char *buf)) LRZSZ_ATTRIB_SECTION(lrzsz_rare); 453*4882a593Smuzhiyun int tcp_connect __P ((char *buf)) LRZSZ_ATTRIB_SECTION(lrzsz_rare); 454*4882a593Smuzhiyun int tcp_accept __P ((int d)) LRZSZ_ATTRIB_SECTION(lrzsz_rare); 455*4882a593Smuzhiyun 456*4882a593Smuzhiyun 457*4882a593Smuzhiyun const char * protname __P ((void)) LRZSZ_ATTRIB_SECTION(lrzsz_rare); 458*4882a593Smuzhiyun void lsyslog __P ((int, const char *,...)); 459*4882a593Smuzhiyun #define xil_printf printf 460*4882a593Smuzhiyun 461*4882a593Smuzhiyun 462*4882a593Smuzhiyun 463*4882a593Smuzhiyun 464*4882a593Smuzhiyun #endif 465