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