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