#define VERSION "3.48 01-27-98"
#define PUBDIR "/usr/spool/uucppublic"
/*
**************************************************************************
*
* sz.c By Chuck Forsberg, Omen Technology INC
* Copyright 1997 Omen Technology Inc All Rights Reserved
*
*********************************************************************
*********************************************************************
*
*
* This version implements numerous enhancements including ZMODEM
* Run Length Encoding and variable length headers. These
* features were not funded by the original Telenet development
* contract.
*
*
* This software may be freely used for educational (didactic
* only) purposes. "Didactic" means it is used as a study item
* in a course teaching the workings of computer protocols.
*
* This software may also be freely used to support file transfer
* operations to or from duly licensed Omen Technology products.
* This includes DSZ, GSZ, ZCOMM, Professional-YAM and PowerCom.
* Institutions desiring to use rz/sz this way should add the
* following to the sz compile line: -DCOMPL
* Programs based on stolen or public domain ZMODEM materials are
* not included. Use with other commercial or shareware programs
* (Crosstalk, Procomm, etc.) REQUIRES REGISTRATION.
*
*
* Any programs which incorporate part or all of this code must be
* provided in source form with this notice intact except by
* prior written permission from Omen Technology Incorporated.
* This includes compiled executables of this program.
*
* The .doc files and the file "mailer.rz" must also be included.
*
* Use of this software for commercial or administrative purposes
* except when exclusively limited to interfacing Omen Technology
* products requires license payment of $20.00 US per user
* (less in quantity, see mailer.rz). Use of this code by
* inclusion, decompilation, reverse engineering or any other means
* constitutes agreement to these conditions and acceptance of
* liability to license the materials and payment of reasonable
* legal costs necessary to enforce this license agreement.
*
*
* Omen Technology Inc
* Post Office Box 4681
* Portland OR 97208
*
* This code is made available in the hope it will be useful,
* BUT WITHOUT ANY WARRANTY OF ANY KIND OR LIABILITY FOR ANY
* DAMAGES OF ANY KIND.
*
* USG UNIX (3.0) ioctl conventions courtesy Jeff Martin
*/
char *Copyrsz = "Copyright 1997 Omen Technology Inc All Rights Reserved";
char *substr();
#define LOGFILE "/tmp/szlog"
#define LOGFILE2 "szlog"
#include <stdio.h>
#include <signal.h>
#include <ctype.h>
#include <errno.h>
extern int errno;
#define STATIC
#define PATHLEN 1000
#define OK 0
#define FALSE 0
#ifdef TRUE
#undef TRUE
#endif
#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 SYN 026
#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 GCOUNT (-4)
#define RETRYMAX 10
#define HOWMANY 2
STATIC int Zmodem=0; /* ZMODEM protocol requested by receiver */
unsigned Baudrate = 9600; /* Default, set by first mode() call */
STATIC unsigned Txwindow; /* Control the size of the transmitted window */
STATIC unsigned Txwspac; /* Spacing between zcrcq requests */
STATIC unsigned Txwcnt; /* Counter used to space ack requests */
STATIC long Lrxpos; /* Receiver's last reported offset */
STATIC int errors;
char endmsg[80] = {0}; /* Possible message to display on exit */
char Zsendmask[33]; /* Additional control chars to mask */
#include "rbsb.c" /* most of the system dependent stuff here */
#include "crctab.c"
STATIC int Filesleft;
STATIC long Totalleft;
/*
* Attention string to be executed by receiver to interrupt streaming data
* when an error is detected. A pause (0336) may be needed before the
* ^C (03) or after it.
*/
#ifdef READCHECK
STATIC char Myattn[] = { 0 };
#else
#ifdef USG
STATIC char Myattn[] = { 03, 0336, 0 };
#endif
#endif
FILE *in;
STATIC int Canseek = 1; /* 1: Can seek 0: only rewind -1: neither (pipe) */
#ifndef SMALL
#ifndef TXBSIZE
#define TXBSIZE 32768
#endif
#define TXBMASK (TXBSIZE-1)
STATIC char Txb[TXBSIZE + 1024]; /* Circular buffer for file reads */
STATIC char *txbuf = Txb; /* Pointer to current file segment */
#else
char txbuf[1024];
#endif
STATIC long vpos = 0; /* Number of bytes read from file */
STATIC char Lastrx;
STATIC char Crcflg;
STATIC int Modem2=0; /* XMODEM Protocol - don't send pathnames */
STATIC int Restricted=0; /* restricted; no /.. or ../ in filenames */
STATIC int Fullname=0; /* transmit full pathname */
STATIC int Unlinkafter=0; /* Unlink file after it is sent */
STATIC int Dottoslash=0; /* Change foo.bar.baz to foo/bar/baz */
STATIC int firstsec;
STATIC int errcnt=0; /* number of files unreadable */
STATIC int Skipbitch=0;
STATIC int Skipcount=0; /* Count of skipped files */
STATIC int blklen=128; /* length of transmitted records */
STATIC int Optiong; /* Let it rip no wait for sector ACK's */
STATIC int Eofseen; /* EOF seen on input set by zfilbuf */
STATIC int BEofseen; /* EOF seen on input set by fooseek */
STATIC int Totsecs; /* total number of sectors this file */
STATIC int Filcnt=0; /* count of number of files opened */
STATIC unsigned Rxbuflen=16384; /* Receiver's max buffer length */
STATIC long Tframlen = 0; /* Override for tx frame length */
STATIC int blkopt=0; /* Override value for zmodem blklen */
STATIC int Rxflags = 0;
STATIC long bytcnt, maxbytcnt;
STATIC int Wantfcs32 = TRUE; /* want to send 32 bit FCS */
STATIC char Lzconv; /* Local ZMODEM file conversion request */
STATIC char Lzmanag; /* Local ZMODEM file management request */
STATIC int Lskipnocor;
STATIC char Lztrans;
STATIC int Command; /* Send a command, then exit. */
STATIC char *Cmdstr; /* Pointer to the command string */
STATIC int Cmdack1; /* Rx ACKs command, then do it */
STATIC int Exitcode;
STATIC int Test; /* 1= Force receiver to send Attn, etc with qbf. */
/* 2= Character transparency test */
STATIC char *qbf=
"The quick brown fox jumped over the lazy dog's back 1234567890\r\n";
STATIC long Lastsync; /* Last offset to which we got a ZRPOS */
STATIC int Beenhereb4; /* How many times we've been ZRPOS'd here */
STATIC int Ksendstr; /* 1= Send esc-?-3-4-l to remote kermit */
STATIC char *ksendbuf = "\033[?34l";
STATIC jmp_buf intrjmp; /* For the interrupt on RX CAN */
/* called by signal interrupt or terminate to clean things up */
void
bibi(n)
{
canit(); fflush(stdout); mode(0);
fprintf(stderr, "sz: caught signal %d; exiting\n", n);
if (n == SIGQUIT)
abort();
if (n == 99)
fprintf(stderr, "mode(2) in rbsb.c not implemented!!\n");
exit(3);
}
/* Called when ZMODEM gets an interrupt (^X) */
void
onintr(c)
{
signal(SIGINT, SIG_IGN);
longjmp(intrjmp, -1);
}
STATIC int Zctlesc; /* Encode control characters */
STATIC int Nozmodem = 0; /* If invoked as "sb" */
STATIC char *Progname = "sz";
STATIC int Zrwindow = 1400; /* RX window size (controls garbage count) */
/*
* Log an error
*/
void
zperr1(s,p,u)
char *s, *p, *u;
{
if (Verbose <= 0)
return;
fprintf(stderr, "Retry %d: ", errors);
fprintf(stderr, s);
fprintf(stderr, "\n");
}
void
zperr2(s,p,u)
char *s, *p, *u;
{
if (Verbose <= 0)
return;
fprintf(stderr, "Retry %d: ", errors);
fprintf(stderr, s, p);
fprintf(stderr, "\n");
}
void
zperr3(s,p,u)
char *s, *p, *u;
{
if (Verbose <= 0)
return;
fprintf(stderr, "Retry %d: ", errors);
fprintf(stderr, s, p, u);
fprintf(stderr, "\n");
}
#include "zm.c"
#include "zmr.c"
main(argc, argv)
char *argv[];
{
register char *cp;
register npats;
char **patts;
if ((cp = getenv("ZNULLS")) && *cp)
Znulls = atoi(cp);
if ((cp=getenv("S
- 1
- 2
- 3
- 4
- 5
- 6
前往页