📄 zglobal.h
字号:
#ifndef ZMODEM_GLOBAL_H#define ZMODEM_GLOBAL_H/* zglobal.h - prototypes etcetera for lrzsz Copyright (C) until 1998 Chuck Forsberg (OMEN Technology Inc) Copyright (C) 1994 Matt Porter Copyright (C) 1996, 1997 Uwe Ohse This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.*/#include "config.h"#include <sys/types.h>#ifdef __GNUC__# define alloca __builtin_alloca# define HAVE_ALLOCA 1#else# if defined HAVE_ALLOCA_H || defined _LIBC# include <alloca.h># else# ifdef _AIX#pragma alloca# else# ifndef alloca# ifndef __GLIBC__char *alloca ();# endif# endif# endif# endif#endif#ifndef __P#if defined (__GNUC__) || (defined (__STDC__) && __STDC__)#define __P(args) args#else#define __P(args) ()#endif /* GCC. */#endif /* Not __P. */#ifdef __STDC__#include <stdarg.h>#else#include <varargs.h>#endif#ifdef TIME_WITH_SYS_TIME# include <sys/time.h># include <time.h># define INCLUDED_SYS_TIME#else# ifdef HAVE_SYS_TIME_H# include <sys/time.h># define INCLUDED_SYS_TIME# else# include <time.h># endif#endif#ifdef SYS_TIME_WITHOUT_SYS_SELECT# ifdef INCLUDED_SYS_TIME# undef HAVE_SYS_SELECT_H# endif#endif#ifdef HAVE_SYS_SELECT_H# include <sys/select.h>#endif#ifdef __BEOS__ /* BeOS 4.0: sys/select.h is almost completely #ifdefd out */#define HAVE_SOCKET_H#ifdef HAVE_SOCKET_H#include <socket.h>#endif#endif#if STDC_HEADERS# include <string.h>#else# ifdef HAVE_STRINGS_H# include <strings.h># endif# ifndef HAVE_STRCHR# define strchr index# define strrchr rindex# endifchar *strchr (), *strrchr ();# ifndef HAVE_MEMCPY# define memcpy(d, s, n) bcopy ((s), (d), (n))# define memmove(d, s, n) bcopy ((s), (d), (n))# endif#endif#include <sys/stat.h>/* we need to decide whether readcheck is possible */#ifdef HAVE_FCNTL_H# include <fcntl.h>#endif#ifdef HAVE_SYS_IOCTL_H# include <sys/ioctl.h>#endif#ifdef HAVE_RDCHK# define READCHECK#else# ifdef FIONREAD# define READCHECK_FIONREAD# define READCHECK# else# ifdef F_GETFL# define READCHECK# define READCHECK_READS# define READCHECK_GETFL# endif# endif#endif/* used to use #elif, but native braindead hpux 9.00 c compiler didn't * understand it */#ifdef HAVE_TERMIOS_H/* get rid of warnings on SCO ODT 3.2 */struct termios;# include <termios.h># define USE_TERMIOS#else# if defined(HAVE_SYS_TERMIOS_H)# include <sys/termios.h># define USE_TERMIOS# else# if defined(HAVE_TERMIO_H)# include <termio.h># define USE_TERMIO# else# if defined(HAVE_SYS_TERMIO_H)# include <sys/termio.h># define USE_TERMIO# else# if defined(HAVE_SGTTY_H)# include <sgtty.h># define USE_SGTTY# ifdef LLITOUT extern long Locmode; /* Saved "local mode" for 4.x BSD "new driver" */ extern long Locbit; /* Bit SUPPOSED to disable output translations */# endif# else# error neither termio.h nor sgtty.h found. Cannot continue.# endif# endif# endif# endif#endif#ifdef USE_SGTTY# ifdef TIOCSBRK# define CANBREAK# endif#endif#ifdef USE_TERMIO# define CANBREAK#endif/* Take care of NLS matters. */#if HAVE_LOCALE_H# include <locale.h>#endif#if !HAVE_SETLOCALE# define setlocale(Category, Locale) /* empty */#endif#if ENABLE_NLS# include <libintl.h># define _(Text) gettext (Text)#else# define bindtextdomain(Domain, Directory) /* empty */# define textdomain(Domain) /* empty */# define _(Text) Text#endif#ifndef ENABLE_SYSLOG# undef HAVE_SYSLOG#else# ifdef HAVE_SYSLOG_H# include <syslog.h># else# if defined(HAVE_SYS_SYSLOG_H)# include <sys/syslog.h># else# undef HAVE_SYSLOG# endif# endif#endif#ifndef ENABLE_SYSLOG# define openlog(name,pid,facility) /* void it */# define setlogmask(x) /* void it */#elseextern int enable_syslog;#endif#if defined HAVE_UNISTD_H# include <unistd.h>#endif/* The following is from pathmax.h. *//* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define PATH_MAX but might cause redefinition warnings when sys/param.h is later included (as on MORE/BSD 4.3). */#if defined(_POSIX_VERSION) || (defined(HAVE_LIMITS_H) && !defined(__GNUC__))# include <limits.h>#endif#ifndef _POSIX_PATH_MAX# define _POSIX_PATH_MAX 255#endif#if !defined(PATH_MAX) && defined(_PC_PATH_MAX)# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX))#endif/* Don't include sys/param.h if it already has been. */#if defined(HAVE_SYS_PARAM_H) && !defined(PATH_MAX) && !defined(MAXPATHLEN)# include <sys/param.h>#endif#if !defined(PATH_MAX) && defined(MAXPATHLEN)# define PATH_MAX MAXPATHLEN#endif#if !defined(LONG_MAX) && defined(HAVE_LIMITS_H)# include <limits.h>#endif#ifndef PATH_MAX# define PATH_MAX _POSIX_PATH_MAX#endif#ifdef __GNUC__#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 5)# define LRZSZ_ATTRIB_SECTION(x) __attribute__((section(#x)))#endif#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)# define LRZSZ_ATTRIB_CONST __attribute__((__const__))#endif /* gcc.info sagt, noreturn w鋜e ab 2.5 verf黦bar. HPUX-gcc 2.5.8 * kann es noch nicht - what's this? */#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 5)# define LRZSZ_ATTRIB_NORET __attribute__((__noreturn__))#endif#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 5)# define LRZSZ_ATTRIB_PRINTF(formatnr,firstargnr) \ __attribute__((__format__ (printf,formatnr,firstargnr)))#endif#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 6)#define LRZSZ_ATTRIB_UNUSED __attribute__((__unused__))#endif#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)# define LRZSZ_ATTRIB_REGPARM(n) \ __attribute__((__regparm__ (n)))#endif#endif /* __GNUC__ */#ifndef LRZSZ_ATTRIB_REGPARM#define LRZSZ_ATTRIB_REGPARM(n)#endif#ifndef LRZSZ_ATTRIB_UNUSED#define LRZSZ_ATTRIB_UNUSED#endif#ifndef LRZSZ_ATTRIB_NORET#define LRZSZ_ATTRIB_NORET#endif#ifndef LRZSZ_ATTRIB_CONST#define LRZSZ_ATTRIB_CONST#endif#ifndef LRZSZ_ATTRIB_PRINTF#define LRZSZ_ATTRIB_PRINTF(x,y)#endif#ifndef LRZSZ_ATTRIB_SECTION#define LRZSZ_ATTRIB_SECTION(n)#endif#undef LRZSZ_ATTRIB_SECTION#define LRZSZ_ATTRIB_SECTION(x)#undef LRZSZ_ATTRIB_REGPARM#define LRZSZ_ATTRIB_REGPARM(x)#define OK 0#define FALSE 0#define TRUE 1#define ERROR (-1)/* Ward Christensen / CP/M parameters - Don't change these! */#define ENQ 005#define CAN ('X'&037)#define XOFF ('s'&037)#define XON ('q'&037)#define SOH 1#define STX 2#define EOT 4#define ACK 6#define NAK 025#define CPMEOF 032#define WANTCRC 0103 /* send C not NAK to get crc not checksum */#define WANTG 0107 /* Send G not NAK to get nonstop batch xmsn */#define TIMEOUT (-2)#define RCDO (-3)#define WCEOT (-10)#define RETRYMAX 10#define UNIXFILE 0xF000 /* The S_IFMT file mask bit for stat */#define DEFBYTL 2000000000L /* default rx file size */enum zm_type_enum { ZM_XMODEM, ZM_YMODEM, ZM_ZMODEM};struct zm_fileinfo { char *fname; time_t modtime; mode_t mode; size_t bytes_total; size_t bytes_sent; size_t bytes_received; size_t bytes_skipped; /* crash recovery */ int eof_seen;};#define R_BYTESLEFT(x) ((x)->bytes_total-(x)->bytes_received)extern enum zm_type_enum protocol;extern const char *program_name; /* the name by which we were called */extern int Verbose;extern int errors;extern int no_timeout;extern int Zctlesc; /* Encode control characters */extern int under_rsh;RETSIGTYPE bibi __P ((int n));#define sendline(c) putchar((c) & 0377)#define xsendline(c) putchar(c)/* zreadline.c */extern char *readline_ptr; /* pointer for removing chars from linbuf */extern int readline_left; /* number of buffered chars left to read */#define READLINE_PF(timeout) \ (--readline_left >= 0? (*readline_ptr++ & 0377) : readline_internal(timeout))int readline_internal __P ((unsigned int timeout));void readline_purge __P ((void));void readline_setup __P ((int fd, size_t readnum, size_t buffer_size)) LRZSZ_ATTRIB_SECTION(lrzsz_rare);/* rbsb.c */extern int Fromcu;extern int Twostop;#ifdef READCHECK_READSextern unsigned char checked;#endifextern int iofd;extern unsigned Baudrate;void zperr __P ((const char *fmt, ...));void zpfatal __P ((const char *fmt, ...));void vfile __P ((const char *format, ...));#define vchar(x) putc(x,stderr)#define vstring(x) fputs(x,stderr)#ifdef __GNUC__#if __GNUC__ > 1#define vstringf(format,args...) fprintf(stderr,format, ##args)#endif#endif#ifndef vstringfvoid vstringf __P ((const char *format, ...));#endif#define VPRINTF(level,format_args) do {if ((Verbose)>=(level)) \ vstringf format_args ; } while(0)/* rbsb.c */int from_cu __P ((void)) LRZSZ_ATTRIB_SECTION(lrzsz_rare);int rdchk __P ((int fd));int io_mode __P ((int fd, int n)) LRZSZ_ATTRIB_SECTION(lrzsz_rare);void sendbrk __P ((int fd));#define flushmo() fflush(stdout)void purgeline __P ((int fd));void canit __P ((int fd));/* crctab.c */extern unsigned short crctab[256];#define updcrc(cp, crc) ( crctab[((crc >> 8) & 255)] ^ (crc << 8) ^ cp)extern long cr3tab[];#define UPDC32(b, c) (cr3tab[((int)c ^ b) & 0xff] ^ ((c >> 8) & 0x00FFFFFF))/* zm.c */#include "zmodem.h"extern unsigned int Rxtimeout; /* Tenths of seconds to wait for something */extern int bytes_per_error; /* generate one error around every x bytes *//* Globals used by ZMODEM functions */extern int Rxframeind; /* ZBIN ZBIN32, or ZHEX type of frame received */extern int Rxtype; /* Type of header received */extern int Zrwindow; /* RX window size (controls garbage count) *//* extern int Rxcount; */ /* Count of data bytes received */extern char Rxhdr[4]; /* Received header */extern char Txhdr[4]; /* Transmitted header */extern long Txpos; /* Transmitted file position */extern int Txfcs32; /* TURE means send binary frames with 32 bit FCS */extern int Crc32t; /* Display flag indicating 32 bit CRC being sent */extern int Crc32; /* Display flag indicating 32 bit CRC being received */extern int Znulls; /* Number of nulls to send at beginning of ZDATA hdr */extern char Attn[ZATTNLEN+1]; /* Attention string rx sends to tx on err */extern void zsendline __P ((int c));extern void zsendline_init __P ((void)) LRZSZ_ATTRIB_SECTION(lrzsz_rare);void zsbhdr __P ((int type, char *hdr));void zshhdr __P ((int type, char *hdr));void zsdata __P ((const char *buf, size_t length, int frameend));void zsda32 __P ((const char *buf, size_t length, int frameend));int zrdata __P ((char *buf, int length, size_t *received));int zgethdr __P ((char *hdr, int eflag, size_t *));void stohdr __P ((size_t pos)) LRZSZ_ATTRIB_REGPARM(1);long rclhdr __P ((char *hdr)) LRZSZ_ATTRIB_REGPARM(1);int tcp_server __P ((char *buf)) LRZSZ_ATTRIB_SECTION(lrzsz_rare);int tcp_connect __P ((char *buf)) LRZSZ_ATTRIB_SECTION(lrzsz_rare);int tcp_accept __P ((int d)) LRZSZ_ATTRIB_SECTION(lrzsz_rare);const char * protname __P ((void)) LRZSZ_ATTRIB_SECTION(lrzsz_rare);void lsyslog __P ((int, const char *,...));#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -