lrzsz-0.12.21rc/ 777 764 764 0 6760042375 6474 5lrzsz-0.12.21rc/Makefile.in 664 764 764 33256 6760042371 10564 # Makefile.in generated automatically by automake 1.4a from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = . ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_FLAG = transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CFLAGS = @CFLAGS@ CPP = @CPP@ DATADIRNAME = @DATADIRNAME@ ENABLE_TIMESYNC = @ENABLE_TIMESYNC@ GENCAT = @GENCAT@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GT_NO = @GT_NO@ GT_YES = @GT_YES@ INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@ INSTOBJEXT = @INSTOBJEXT@ INTLDEPS = @INTLDEPS@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ PACKAGE = @PACKAGE@ PACKAGE_VERSION = @PACKAGE_VERSION@ POFILES = @POFILES@ POSUB = @POSUB@ RANLIB = @RANLIB@ U = @U@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ l = @l@ SUBDIRS = lib intl src po man testsuite EXTRA_DIST = check.lrzsz COMPATABILITY README.cvs README.isdn4linux README.gettext rpmrc buildrpm systype.in fastcheck.sh README.tests beos-runpiped.c fastcheck.beos noinst_SCRIPTS = systype PR = @PACKAGE@-@VERSION@ CLEAN_FILES = fastcheck.done ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = Specfile systype SCRIPTS = $(noinst_SCRIPTS) DIST_COMMON = README ./stamp-h.in ABOUT-NLS AUTHORS COPYING ChangeLog \ INSTALL Makefile.am Makefile.in NEWS Specfile.in THANKS TODO acconfig.h \ acinclude.m4 aclocal.m4 config.guess config.h.in configure configure.in \ install-sh missing mkinstalldirs systype.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = gtar GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status $(ACLOCAL_M4): configure.in acinclude.m4 cd $(srcdir) && $(ACLOCAL) config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) cd $(srcdir) && $(AUTOCONF) config.h: stamp-h @if test ! -f $@; then \ rm -f stamp-h; \ $(MAKE) stamp-h; \ else :; fi stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES= CONFIG_HEADERS=config.h \ $(SHELL) ./config.status @echo timestamp > stamp-h 2> /dev/null $(srcdir)/config.h.in: $(srcdir)/stamp-h.in @if test ! -f $@; then \ rm -f $(srcdir)/stamp-h.in; \ $(MAKE) $(srcdir)/stamp-h.in; \ else :; fi $(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h cd $(top_srcdir) && $(AUTOHEADER) @echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null mostlyclean-hdr: clean-hdr: distclean-hdr: -rm -f config.h maintainer-clean-hdr: Specfile: $(top_builddir)/config.status Specfile.in cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status systype: $(top_builddir)/config.status systype.in cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. @SET_MAKE@ all-recursive install-data-recursive install-exec-recursive \ installdirs-recursive install-recursive uninstall-recursive \ check-recursive installcheck-recursive info-recursive dvi-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $(MAKEFLAGS); amf=$$2; \ dot_seen=no; \ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ rev="$$subdir $$rev"; \ test "$$subdir" = "." && dot_seen=yes; \ done; \ test "$$dot_seen" = "no" && rev=". $$rev"; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist -rm -rf $(distdir) GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz mkdir $(distdir)/=build mkdir $(distdir)/=inst dc_install_base=`cd $(distdir)/=inst && pwd`; \ cd $(distdir)/=build \ && ../configure --with-included-gettext --srcdir=.. --prefix=$$dc_install_base \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) dist -rm -rf $(distdir) @banner="$(distdir).tar.gz is ready for distribution"; \ dashes=`echo "$$banner" | sed s/./=/g`; \ echo "$$dashes"; \ echo "$$banner"; \ echo "$$dashes" dist: distdir -chmod -R a+r $(distdir) GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) -rm -rf $(distdir) dist-all: distdir -chmod -R a+r $(distdir) GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) -rm -rf $(distdir) distdir: $(DISTFILES) -rm -rf $(distdir) mkdir $(distdir) -chmod 777 $(distdir) @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done for subdir in $(SUBDIRS); do \ if test "$$subdir" = .; then :; else \ test -d $(distdir)/$$subdir \ || mkdir $(distdir)/$$subdir \ || exit 1; \ chmod 777 $(distdir)/$$subdir; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \ || exit 1; \ fi; \ done info-am: info: info-recursive dvi-am: dvi: dvi-recursive check-am: all-am check: check-recursive installcheck-am: installcheck: installcheck-recursive all-recursive-am: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive install-exec-am: install-exec: install-exec-recursive install-data-am: install-data: install-data-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-recursive uninstall-am: uninstall: uninstall-recursive all-am: Makefile $(SCRIPTS) config.h all-redirect: all-recursive-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install installdirs: installdirs-recursive installdirs-am: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-hdr mostlyclean-tags mostlyclean-generic mostlyclean: mostlyclean-recursive clean-am: clean-hdr clean-tags clean-generic mostlyclean-am clean: clean-recursive distclean-am: distclean-hdr distclean-tags distclean-generic clean-am distclean: distclean-recursive -rm -f config.status maintainer-clean-am: maintainer-clean-hdr maintainer-clean-tags \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-recursive -rm -f config.status .PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \ install-data-recursive uninstall-data-recursive install-exec-recursive \ uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ all-recursive check-recursive installcheck-recursive info-recursive \ dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ dvi-am dvi check check-am installcheck-am installcheck all-recursive-am \ install-exec-am install-exec install-data-am install-data install-am \ install uninstall-am uninstall all-redirect all-am all installdirs-am \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean oldcheck-local: QUIET=-q $(srcdir)/check.lrzsz $(srcdir) `pwd` fastcheck: if [ x`uname -s` = xBeOS ] ; then make fastcheck-beos ; else \ $(srcdir)/fastcheck.sh $(srcdir) `pwd` ; fi fastcheck-beos: beos-runpiped $(srcdir)/fastcheck.beos $(srcdir) `pwd` beos-runpiped: beos-runpiped.c $(CC) -o $@ $< success: fastcheck sh systype | mail uwe-generic-counter@ohse.de vcheck: $(srcdir)/check.lrzsz $(srcdir) `pwd` vcheck-%: $(srcdir)/check.lrzsz $(srcdir) `pwd` $(subst vcheck-,,$@) check-%: QUIET=-q $(srcdir)/check.lrzsz $(srcdir) `pwd` $(subst check-,,$@) vcheck-x: $(srcdir)/check.lrzsz $(srcdir) `pwd` x vcheck-y: $(srcdir)/check.lrzsz $(srcdir) `pwd` y vcheck-z: $(srcdir)/check.lrzsz $(srcdir) `pwd` z vcheck-z8: $(srcdir)/check.lrzsz $(srcdir) `pwd` z8 vcheck-sz-r: $(srcdir)/check.lrzsz $(srcdir) `pwd` sz-r vcheck-rz-r: $(srcdir)/check.lrzsz $(srcdir) `pwd` rz-r vcheck-turbo: $(srcdir)/check.lrzsz $(srcdir) `pwd` turbo vcheck-error: $(srcdir)/check.lrzsz $(srcdir) `pwd` error vcheck-manag vcheck-manage: $(srcdir)/check.lrzsz $(srcdir) `pwd` manage vcheck-zm-rz: $(srcdir)/check.lrzsz $(srcdir) `pwd` zm-rz vcheck-zm-sz: $(srcdir)/check.lrzsz $(srcdir) `pwd` zm-sz vcheck-orig-rz: $(srcdir)/check.lrzsz $(srcdir) `pwd` orig-rz vcheck-orig-sz: $(srcdir)/check.lrzsz $(srcdir) `pwd` orig-sz vcheck-orig-kombi: $(srcdir)/check.lrzsz $(srcdir) `pwd` orig-kombi vcheck-abuse: $(srcdir)/check.lrzsz $(srcdir) `pwd` abuse vcheck-startup: $(srcdir)/check.lrzsz $(srcdir) `pwd` startup vcheck-tmp: $(srcdir)/check.lrzsz $(srcdir) `pwd` tmp # Tag before making distribution. Also, don't make a distribution if # checks fail. Also, make sure the NEWS file is up-to-date. cvs-dist: @if sed 1q NEWS | grep -e "$(VERSION)" > /dev/null; then :; else \ echo "NEWS not updated; not releasing" 1>&2; \ exit 1; \ fi cvs tag `echo "Release-$(VERSION)" | sed 's/\./-/g'` $(MAKE) dist rpm: $(PR).tar.gz Specfile $(srcdir)/buildrpm $(srcdir) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lrzsz-0.12.21rc/README 644 764 764 3211 6642657325 7353 lrzsz is a X/Y/ZModem package built from the public-domain version of Chuck Forsberg´s rzsz package. This package contains NO code from later releases of rzsz which would preclude it from being released under the GPL. It has been heavily modified by me and others. Please note that credit should be given to Chuck Forsberg (rzsz) and Stephen Satchell/Satchell Evaluations (crc routines) for this package. Any later modifications were minor and merely introduced to increase performance, reliability or compatability. There is a mailing list for lrzsz: . To subscribe send a mail to . I prefer to get bug reports sent using the `lrzszbug' shell script which you can find in the `src' subdirectory (this script is not installed together with the programs because i don't expect many bug reports). Nethertheless you can still send bug reports to as normal electronic mails. Bugs received at this address may be forwarded to the mailing list. Please read: - INSTALL for installation instructions - NEWS for a list of major changes between the releases - ChangeLog for the list of minor changes. - AUTHORS and THANKS to see whom to thank for this package. - README.cvs for informations about CVS access to the lrzsz sources. - README.tests for information about how to do a self test - README.systems for a list of systems lrzsz has been compiled and passed a simple self test under. In case you want to report a successful build: make success or make fastcheck && \ sh systype | mail uwe-generic-counter@ohse.de "sh systype" alone shows what data this script sends. Uwe Ohse lrzsz-0.12.21rc/stamp-h.in 644 764 764 12 6760042325 10315 timestamp lrzsz-0.12.21rc/ABOUT-NLS 666 764 764 26435 6607440600 7746 Notes on the Free Translation Project ************************************* Free software is going international! The Free Translation Project is a way to get maintainers of free software, translators, and users all together, so that will gradually become able to speak many languages. A few packages already provide translations for their messages. If you found this `ABOUT-NLS' file inside a distribution, you may assume that the distributed package does use GNU `gettext' internally, itself available at your nearest GNU archive site. But you do *not* need to install GNU `gettext' prior to configuring, installing or using this package with messages translated. Installers will find here some useful hints. These notes also explain how users should proceed for getting the programs to use the available translations. They tell how people wanting to contribute and work at translations should contact the appropriate team. When reporting bugs in the `intl/' directory or bugs which may be related to internationalization, you should tell about the version of `gettext' which is used. The information can be found in the `intl/VERSION' file, in internationalized packages. One advise in advance ===================== If you want to exploit the full power of internationalization, you should configure it using ./configure --with-included-gettext to force usage of internationalizing routines provided within this package, despite the existence of internationalizing capabilities in the operating system where this package is being installed. So far, only the `gettext' implementation in the GNU C library version 2 provides as many features (such as locale alias or message inheritance) as the implementation here. It is also not possible to offer this additional functionality on top of a `catgets' implementation. Future versions of GNU `gettext' will very likely convey even more functionality. So it might be a good idea to change to GNU `gettext' as soon as possible. So you need not provide this option if you are using GNU libc 2 or you have installed a recent copy of the GNU gettext package with the included `libintl'. INSTALL Matters =============== Some packages are "localizable" when properly installed; the programs they contain can be made to speak your own native language. Most such packages use GNU `gettext'. Other packages have their own ways to internationalization, predating GNU `gettext'. By default, this package will be installed to allow translation of messages. It will automatically detect whether the system provides usable `catgets' (if using this is selected by the installer) or `gettext' functions. If neither is available, the GNU `gettext' own library will be used. This library is wholly contained within this package, usually in the `intl/' subdirectory, so prior installation of the GNU `gettext' package is *not* required. Installers may use special options at configuration time for changing the default behaviour. The commands: ./configure --with-included-gettext ./configure --with-catgets ./configure --disable-nls will respectively bypass any pre-existing `catgets' or `gettext' to use the internationalizing routines provided within this package, enable the use of the `catgets' functions (if found on the locale system), or else, *totally* disable translation of messages. When you already have GNU `gettext' installed on your system and run configure without an option for your new package, `configure' will probably detect the previously built and installed `libintl.a' file and will decide to use this. This might be not what is desirable. You should use the more recent version of the GNU `gettext' library. I.e. if the file `intl/VERSION' shows that the library which comes with this package is more recent, you should use ./configure --with-included-gettext to prevent auto-detection. By default the configuration process will not test for the `catgets' function and therefore they will not be used. The reasons are already given above: the emulation on top of `catgets' cannot provide all the extensions provided by the GNU `gettext' library. If you nevertheless want to use the `catgets' functions use ./configure --with-catgets to enable the test for `catgets' (this causes no harm if `catgets' is not available on your system). If you really select this option we would like to hear about the reasons because we cannot think of any good one ourself. Internationalized packages have usually many `po/LL.po' files, where LL gives an ISO 639 two-letter code identifying the language. Unless translations have been forbidden at `configure' time by using the `--disable-nls' switch, all available translations are installed together with the package. However, the environment variable `LINGUAS' may be set, prior to configuration, to limit the installed set. `LINGUAS' should then contain a space separated list of two-letter codes, stating which languages are allowed. Using This Package ================== As a user, if your language has been installed for this package, you only have to set the `LANG' environment variable to the appropriate ISO 639 `LL' two-letter code prior to using the programs in the package. For example, let's suppose that you speak German. At the shell prompt, merely execute `setenv LANG de' (in `csh'), `export LANG; LANG=de' (in `sh') or `export LANG=de' (in `bash'). This can be done from your `.login' or `.profile' file, once and for all. An operating system might already offer message localization for many of its programs, while other programs have been installed locally with the full capabilities of GNU `gettext'. Just using `gettext' extended syntax for `LANG' would break proper localization of already available operating system programs. In this case, users should set both `LANGUAGE' and `LANG' variables in their environment, as programs using GNU `gettext' give preference to `LANGUAGE'. For example, some Swedish users would rather read translations in German than English for when Swedish is not available. This is easily accomplished by setting `LANGUAGE' to `sv:de' while leaving `LANG' to `sv'. Translating Teams ================= For the Free Translation Project to be a success, we need interested people who like their own language and write it well, and who are also able to synergize with other translators speaking the same language. Each translation team has its own mailing list, courtesy of Linux International. You may reach your translation team at the address `LL@li.org', replacing LL by the two-letter ISO 639 code for your language. Language codes are *not* the same as the country codes given in ISO 3166. The following translation teams exist, as of August 1997: Chinese `zh', Czech `cs', Danish `da', Dutch `nl', English `en', Esperanto `eo', Finnish `fi', French `fr', German `de', Hungarian `hu', Irish `ga', Italian `it', Indonesian `id', Japanese `ja', Korean `ko', Latin `la', Norwegian `no', Persian `fa', Polish `pl', Portuguese `pt', Russian `ru', Slovenian `sl', Spanish `es', Swedish `sv', and Turkish `tr'. For example, you may reach the Chinese translation team by writing to `zh@li.org'. If you'd like to volunteer to *work* at translating messages, you should become a member of the translating team for your own language. The subscribing address is *not* the same as the list itself, it has `-request' appended. For example, speakers of Swedish can send a message to `sv-request@li.org', having this message body: subscribe Keep in mind that team members are expected to participate *actively* in translations, or at solving translational difficulties, rather than merely lurking around. If your team does not exist yet and you want to start one, or if you are unsure about what to do or how to get started, please write to `translation@iro.umontreal.ca' to reach the coordinator for all translator teams. The English team is special. It works at improving and uniformizing the terminology in use. Proven linguistic skill are praised more than programming skill, here. Available Packages ================== Languages are not equally supported in all packages. The following matrix shows the current state of internationalization, as of August 1997. The matrix shows, in regard of each package, for which languages PO files have been submitted to translation coordination. Ready PO files cs da de en es fi fr it ja ko nl no pl pt sl sv .-------------------------------------------------. bash | [] [] [] | 3 bison | [] [] [] | 3 clisp | [] [] [] [] | 4 cpio | [] [] [] [] [] | 5 diffutils | [] [] [] [] [] | 5 enscript | [] [] [] [] [] [] | 6 fileutils | [] [] [] [] [] [] [] [] [] [] | 10 findutils | [] [] [] [] [] [] [] [] | 8 flex | [] [] [] [] | 4 gcal | [] [] [] [] [] | 5 gettext | [] [] [] [] [] [] [] [] [] [] | 11 grep | [] [] [] [] [] [] [] [] [] | 9 hello | [] [] [] [] [] [] [] [] [] [] | 10 id-utils | [] [] [] | 3 indent | [] [] [] [] | 4 libc | [] [] [] [] [] [] [] | 7 m4 | [] [] [] [] [] | 5 make | [] [] [] [] [] [] | 6 music | [] [] | 2 ptx | [] [] [] [] [] [] [] [] | 8 recode | [] [] [] [] [] [] [] [] [] | 9 sh-utils | [] [] [] [] [] [] [] | 7 sharutils | [] [] [] [] [] | 5 tar | [] [] [] [] [] [] [] [] [] [] | 10 texinfo | [] | 1 textutils | [] [] [] [] [] [] [] [] [] | 9 wdiff | [] [] [] [] [] [] [] [] | 8 `-------------------------------------------------' 16 languages cs da de en es fi fr it ja ko nl no pl pt sl sv 27 packages 3 2 24 1 17 1 26 2 1 11 20 9 19 7 7 17 167 Some counters in the preceding matrix are higher than the number of visible blocks let us expect. This is because a few extra PO files are used for implementing regional variants of languages, or language dialects. For a PO file in the matrix above to be effective, the package to which it applies should also have been internationalized and distributed as such by its maintainer. There might be an observable lag between the mere existence a PO file and its wide availability in a distribution. If August 1997 seems to be old, you may fetch a more recent copy of this `ABOUT-NLS' file on most GNU archive sites. lrzsz-0.12.21rc/AUTHORS 664 764 764 372 6727531770 7531 Chuck Forsberg: original rz and sz programs (Public domain version) Matt Porter : Modification for versions 0.10 und 0.11 mblack@csihq.com: Modifications for version 0.12a Uwe Ohse : Modifications for 0.12b und 0.12.* lrzsz-0.12.21rc/COPYING 666 764 764 43127 6607440600 7547 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy 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 of the License, 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 Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. lrzsz-0.12.21rc/ChangeLog 644 764 764 120772 6760031634 10307 1998-06-15 Uwe Ohse * src/rbsb.c (io_mode), case 1: disable IEXTEN, from Usman Muzaffar . 1998-06-15 Uwe Ohse * src/lsz.c: Transfering 0 byte files with Zmodem made lsz crash. 1998-06-03 Uwe Ohse * update to automake-1.4, autoconf-2.13. * configure.in: - version number set to 0.12.21 - Threw out explicit AC_LINK_FILES statement in configure.in. 1998-03-21 Uwe Ohse * configure.in, aclocal.m4: check for socklen_t. * check.lrzsz: threw out tcp inband checks. * src/lrz.c: threw out tcp inband stuff (--tcp). The only user doesn't need it anymore. changed static SEGMENTS buffer to dynamic allocation. make some global variables static. * src/lsz.c: threw out tcp inband stuff (--tcp). The only user doesn't need it anymore. allocate receive-buffer dynamically. * src/tcp.c: change a size_t to socklen_t. * zm.c: prototype for zsendline_s. 1998-02-06 Uwe Ohse * debian/* * Makefile.am: * configure.in: removed support for debian, on mail from Josip Rodin . 1998-12-29 Uwe Ohse * src/lrz.c: removed stpcpy call. got rid of warnings on solaris (isXXXXX treating arguments as signed, size_t is not of "long" size). * src/lsz.c: removed stpcpy calls. got rid of warnings on solaris (isXXXXX treating arguments as signed, size_t is not of "long" size). (wcs): has another argument "filename on remote site". (wcsend): if no timezone variable was found the printf was called with to few arguments for the format. (send_pseudo): removed major/minor security problem (major, though nobody used that code, so it in fact was minor), stupid usage of /tmp. damned, i thought i had done that _long_ ago? * src/lsyslog.c (lsyslog): special code for varargs. * src/zm.c: threw out prototype for zsendline_s(). * src/rbsb.c: moved getspeed() and speeds table upwards. * systype.in: realname can be given on the command line. * configure.in: use LOG_USER in case LOG_UUCP is undefined. check for libnsl (slowlaris). * README.tests: new * Makefile.am: support for fastcheck, fastcheck-beos, "make success". * beos-runpiped.c: new file. 1998-12-28 Uwe Ohse * src/canit.c: new file. * src/zglobal.h: canit() prototype. declare "struct termios;" before including termios.h on svr3, to get rid of warnings. * src/lsz.c (canit): deleted. (everythere): replaced invocation of canit() with canit(fd). * src/lrz.c (canit): deleted. (everythere): replaced invocation of canit() with canit(fd). * src/Makefile.am: added -DLOCALEDIR=... to DEFS * acconfig.h: threw out LOCALEDIR. Gives redefinition warnings in intl directory. * configure.in: --enable-syslog=LOG_UUCP is now default. * src/tcp.c (tcp_connect): get rid of "signed/unsigned" warning and "array subscript is of type char" warning on isspace(). 1998-12-27 Uwe Ohse * Makefile.am: distribute systype.in * acinclude.m4: new macro lrzsz_HEADER_SYS_SELECT (can sys/time.h and sys/select.h both be used) * acconfig.h: define SYS_TIME_WITHOUT_SYS_SELECT * check.lrzsz: check for emacs sources slightly changed to work ... * configure.in: create "systype" script, use lrzsz_HEADER_SYS_SELECT * lib/Makefile.am: use ansi2knr. * lib/ansi2knr.c: * src/ansi2knr.c: updated to automake-1.3 version, implemented workaround for automake stupidity. * src/lrz.c (do_crc_check): changed formatting. * src/zglobal.h: use SYS_TIME_WITHOUT_SYS_SELECT. * zperr.c: provide K&R style function definitions. 1998-12-23 Uwe Ohse * src/rbsb.c (rdchk): the read() version3 was buggy, didn't return 0 on EWOULDBLOCK. That's a really long-standing problem ... * src/tcp.c: include arpa/inet.h only if it exists. * src/zglobal.h: include on BeOS to get fd_set. 1998-12-22 Uwe Ohse * src/lsz.c (main): got rid of CPU and OS. (usage): got rid of CPU and OS. * src/lrz.c (main): got rid of CPU and OS. (usage): got rid of CPU and OS. * acconfig.h: got rid of CPU and OS. * configure.in: don't call AC_CANONICAL_HOST anymore. 1998-12-21 Uwe Ohse * configure.in: PUBDIR was handled incorrectly. Thanks to Stanislav Brabec . * buildrpm, Specfile.in, rpmrc: new files. * Makefile.am: support rpm stuff. * src/lsz.c (main): start_blklen by default is not longer then framlength (except if luser personally decides to use both -4/-8 and -l). (getzrxinit): minor cleanup. (getzrxinit): test for S_ISCHR was reversed. Thanks to Nick Rossi . * src/lrz.c (main): use umask(). 1998-10-22 Uwe Ohse * src/lrz.c (procheader): removed warnings about unused variable e (used only if #ifdef ENABLE_SYSLOG). * src/lsyslog.c (lsyslog): removed warnings about unused arguments if not defined ENABLE_SYSLOG. 1998-08-18 Uwe Ohse * src/lsz.c (wcputsec): don't say "Ymodem" if running as Xmodem. * changed version number to 0.12.20. * src/lsz.c (getzrxinit): throw out purgeline() again. This causes selftest to break, and also other zmodems. Slightly modified the logic to resend a zrqinit. (getnak): Slightly modified the logic to resend a zrqinit. Maybe the real solution is to throw out the resending of ZRQINITs ... as omen doesn't do it, too, although it's documented in the protocol. 1998-07-25 Uwe Ohse * src/lsz.c (getzrxinit): calling purgeline() at start solves Stefan Glasers problems (internal connect zmodem, slow startup with other zmodems). Also: don't send a second ZRQINIT directly after the first one. (getnak): don't send a second ZRQINIT directly after the first one. 1998-07-08 Uwe Ohse * README.isdn4linux: new file. 1998-03-13 Uwe Ohse * src/tcp.c: #define INADDR_NONE if it is undefined 1998-01-18 Uwe Ohse * src/lrz.c (show_version): new function. (main) call parse_long_options() with only 4 arguments. didn't wrap all mmap-specifics in #ifdef HAVE_MMAP. * src/lsz.c (show_version): new function. (main) call parse_long_options() with only 4 arguments. didn't wrap all mmap-specifics in #ifdef HAVE_MMAP. * configure.in: vasprintf should not only be checked for but replaced of needed. * lib/long-options.c * lib/long-options.h new versions with only 4 arguments. 1998-01-03 Philippe De Muyter * src/lsz.c (zfilbuf): Look ahead for one char, to set eof_seen early and to avoid yielding 0 at the end of file. 1997-12-14 Uwe Ohse * src/lrz.c (do_crc_check): removed warnings. (procheader): removed warnings. (procheader): stupic bug: "&~1024" should have been "&~1023" to get block start aligned to whole kilobytes. global: moved DO_SYSLOG definition, renamed it to DO_SYSLOG_FNAME, replaced some lsyslog-Calls with new macro DO_SYSLOG. * src/lsz.c (struct long_option): --immediate-command should have used shortopt `i', but used `c'. applied patch from Philippe De Muyter , original date 1997-11-20: * aclocal.m4 (LRZSZ_TYPE_SPEED_T): Really look for speed_t, not $1. * acconfig.h (speed_t): New define slot; replaces LRZSZ_TYPE_SPEED_T. 1997-12-13 Uwe Ohse * src/lsz.c: new option --check-crc (implement ZMCRC option), use ZMCRC if --resume is given twice. (getzrxinit) Oops. Canseek was set incorrectly if S_ISREG was defined. (zsendfile): ZCRC-Code needed debugging. munmap added. * src/lrz.c: new option --check-crc (implement ZMCRC option), use ZMCRC if --resume is given twice. (procheader) implement ZMCRC. (do_crc_check) new function. 1997-12-09 Uwe Ohse * src/lrz.c (procheader): implement --newer and --newer-or-longer option, which Chuck Forsberg must have forgotten to implement in rz (sz did know about them). implement a --junk-path option - junks the paths of the files, removing directory part of a file name. (main): implement command line switches for the options. 1997-12-08 Uwe Ohse * src/lrz.c (main): oops. --rename included Zctlesc ... catch SIGPIPE. (global): new variable skip_if_not_found. (procheader): use "r+" fopen()-mode if "skip_if_not_found" is set. if fopen() fails tell that to syslog. (tryz): set skip_of_not_found if ZF1_ZMSKNOLOC is received (this fixes the "--overwrite-or-skip" option) don't use "Zctlesc = TESCCTL & Rxhdr[ZF0];", use "|=" instead. * src/lsz.c (main): catch SIGPIPE,SIGHUP. (global): new variable/option "--no-unixmode". This is needed to check the "keep-uppercase" option. (getzrxinit): call "zsendline_init" to reinitialize escape table if receiver told us to escape control chars (fixes "rz --escape"). 1997-12-07 Uwe Ohse * src/zm.c (zsda32): crashed if sending packet with 0 bytes data. 1997-11-07 Uwe Ohse * configure.in: changed version number to 0.12.18. * src/zm.c: remove #include (zgethdr): removed warnings. (noxrd7,tgeth1, zgethex): reordered to help gcc inline them. * src/lsz.c (main): removed unused variable `s'. * src/zglobal.h: remove define for syslog(). * src/zm.c (printout_blocksizes): * src/lrz.c (wcreceive): (DO_SYSLOG): (rzfile): * src/lsz.c (DO_SYSLOG): (wcs): use lsyslog instead of syslog. * src/Makefile.am (lsz_SOURCES and lrz_SOURCES): include lsyslog.c. * configure.in (AC_CHECK_FUNCS): check for vasprintf.c (elsewhere): changed tirka.gun.de hacks to tirka.ohse.de. * lib/Makefile.am (EXTRA_DIST): include vasprintf.c * src/lsyslog.c (lsyslog): new file. Sun Sep 14 08:07:52 MET DST 1997 * Makefile.am: add lrzszbug to DISTCLEAN_FILES * src/zreadline.c (readline): optimize for calling from READLINE_PF. get rid of some vprintf. rename to readline_internal (should only be called from READLINE_PF). * src/zglobal.h: rename readline to readline_internal. * src/zm.c (noxrd7): use READLINE_PF, not readline. (zgethdr) likewise. (zrhhdr): likewise. * src/lrz.c (wcrxpn): use READLINE_PF, not readline. (wcgetsec): likewise. (ackbibi): likewise. (global) (main): implement --tcp-server and --tcp-client addr:port. * src/lsz.c (getnak): use READLINE_PF, not readline. (wctx): likewise. (wcputsec): likewise. (zsendfile): likewise. (zsendfdata): likewise. (global) (main): implement --tcp-server and --tcp-client addr:port. * src/tcp.c: fix some byteorder problems. (tcp_connect): accept hostnames. Sat Sep 13 20:04:56 MET DST 1997 * src/zmodem.h: #ifdef out some declarations already found in zglobal.h. * acinclude.m4: new macro LRZSZ_ERRNO_DECL, checks for declaration of errno, taken from taylor uucp. * configure.in: use LRZSZ_ERRNO_DECL * src/lrz.c: remove lots of egcs -Wparanoia warnings. zrdata needs new parameter. Rxcount isn't global anymore. many int or long -> signed or size_t changes. * src/zm.c: zrdata get's new argument, pointer to size_t to store number of bytes read into. Remove Not8bit, wasn't used. remove lots of egcs -Wparanoia warnings. zgethdr gets a new argument, pointer to size_t. Remove global variable Rxpos. * rbsb.c: remove lots of egcs -Wparanoia warnings. sendbrk sends break now in posix termios mode, too. * src/lsz.c: remove lots of egcs -Wparanoia warnings. many int or long -> signed or size_t changes. Rxcount and Rxpos removed. * src/zreadline.c: remove egcs -Wparanoia warnings. Mon Sep 1 00:02:27 MET DST 1997 * src/lrzszbug.in: new script. * src/Makefile.am: distribute lrzszbug.in * configure.in: generate lrzszbug. Sun Aug 31 18:00:00 MET DST 1997 * Release 0.12.17 Sat Aug 23 22:54:12 MET DST 1997 * src/lrz.c (closeit): use S_ISREG instead of (mode&S_IFMT)==... if possible. (closeit) removed unused variable * src/rbsb.c (Fromcu): deal with major(), minor() and makedev ... dev_t might not be a simple type of the system (or, worse, the compiler). * src/tcp.c (tcp_server): change len to size_t. (tcp_server): remove unused variable namelen. (tcp_accept): change namelen to size_t. (global): include "error.h", , , . (tcp_accept): remove unused variable newsock. (tcp_connect): rename variable sin to s_in. * src/lsz.c (wcs): use S_ISxxx instead of (mode & S_IFxxx)==...) if possible. (getzrxinit) same. (countem) also. * src/Makefile.am: don't uses LOCALEDIR, OS, CPU anymore * configure.in: AC_DEFINEs_UNQUOTED LOCALEDIR, OS, CPU. Bugfix: PUBDIR should be AC_DEFINEd_UNQUOTED, not AC_DEFINEd. * src/zm.c (zsendline_s): last_esc was not initialized. Sun Jun 1 09:52:45 MET DST 1997 Uwe Ohse * updated COPYING * man/Makefile.am: added manual pages to EXTRA_DIST as automake doesn't automagically distribute them anymore. * src/zglobal.h: new macro vchar() (put a char onto stderr), new macro vstring() (put a string onto ...). prototype for vstringf(). remove prototype for cucheck(). * src/zperr.c: new function vstringf() (vfile without "Verbose > 2" check). * src/lrz.c: use vchar/vstring/vstringf instead of writing to stderr. implement tcp mode code. don't restrict setgid anymore, too many people had problems with this ... * src/zreadline.c: use vchar/vstring/vstringf instead of writing to stderr. * src/zm.c: use vchar/vstring/vstringf instead of writing to stderr. made zsendline_s receive a _const_ char *. * src/rbsb.c: use vchar/vstring/vstringf instead of writing to stderr. remove unused function cucheck(). * src/lsz.c: removed NEW_ERROR define, delete old code, NEW_ERROR is now certainly stable enough. most places: use vchar/vstring/vstringf instead of writing to stderr. New options -4/-5 for try4k/start4k. 4k blocksize gives somewhat better benchmark results than 1k and 10% better results than 8k on my dual processor system (don't wonder: 4k is a pagesize, and using more than 4k makes pipe writes block. doesn't matter in real life :-)). implement tcp mode code. don't restrict setgid anymore, too many people had problems with this ... * src/tcp.c: new file. * configure.in: change version to 0.12.17. fiddled around to get it properly running with automake-1.1p. * lib/Makefile.am: add LIBOBJS to libzmodem_a_DEPENDENCIES (don't know why automake-1.1p needs this, but anyway). Wed May 21 16:49:51 1997 Philippe De Muyter * src/zglobal.h (termios.h): Do not include that file unconditionally ! (USE_TERMIOS): Do not define that unconditionally ! Tue Mar 25 01:21:07 MET 1997 * lib/Makefile.am: add "libzmodem_a_DEPENDENCIES = @ALLOCA@" Mon Mar 24 08:01:14 MET 1997 * Release 0.12.16 * Makefile.am: check -> check-local Sat Mar 15 08:26:39 MET 1997 * src/zglobal.h: provide prototypes for zsdat32. * src/zm.c (zsdata): doesn't call zsdat32() anymore. (zsdat32): not static anymore. * src/lsz.c (ZSDATA): new macro. calls zsdata or zsdata32. (sendzsinit) (zsendfile) (zsendfdata) (zsendcmd): replaced zsdata with ZSDATA. Thu Mar 13 07:54:07 MET 1997 * src/lsz.c(main): * src/lrz.c(main): don't run setuid or setgid. call_zsendline_init(). * src/zm.c (zsendline_init): don't takes a parameter anymore, uses sourcefile-static variable. (zsendline): don't call zsendline_init anymore. (zsendline_s): new function (faster blockmode version of zsendline) (zsda32): used zsendline_s() * src/zglobal.h: provide prototype for zsendline_init(). Mon Mar 10 23:13:59 MET 1997 Uwe Ohse * updated to gettext-0.10.27 * updated to automake-1.1l (especially Makefiles and configure.in) * check.lrzsz: small fixes. Sun Mar 9 10:29:39 MET 1997 Uwe Ohse * src/lrz.c: Warnings and #ifdef O_SYNC around O_SYNC-Code. Sun Feb 2 12:52:01 MET 1997 Uwe Ohse * Release 0.12.15 * src/lrz.c (procheader): xmodem didn't work on m68k-hp-hpux9.00, compiled with gcc. procheader got "" as filename if using xmodem, and does this: char *p=name+1+strlen(name). certainly not ok :-) Sat Feb 1 19:55:08 MET 1997 Uwe Ohse * src/lrz.c (procheader): change mode of received file to O_SYNC if o_sync is set. (main): set o_sync if --o-sync (or --o_sync) is given. (global): new variable static int o_sync. (usage): new option --o-sync. * src/rbsb.c: * src/timing.c: * src/zglobal.h: don't use #elif anymore (didn't know that pre ansi systems don't understand it). * src/timing.h: * src/lrz.c: * src/lsz.c: * src/zm.c: * src/zglobal.h: use __P in prototypes. * src/zglobal.h: include varargs.h instead of stdarg.h ifndef __STDC__ * src/zperr.c: #define VA_START(x,y) to va_start(x,y) (__STDC__) or va_start(x) (!__STDC__). * src/rbsb.c: made it compile with hpux bundled compiler. purgeline(fd) -> purgeline (int fd). int rdchk(int fd) -> int rdcheck(int fd) Fri Jan 31 01:01:47 MET 1997 Uwe Ohse * lib/alloca.c (xmalloc): de-ANSI-fy. * lib/Makefile.am: turn off ansi2knr * src/ansi2knr.c: include newer version from fileutils-3.16 Sun Jan 19 09:03:54 1997 Philippe De Muyter * src/zglobal.h (LONG_MAX): If everything else failed, include limits.h. * intl/l10nflist.c: * intl/explodename.c include Tue Jan 7 07:33:55 MET 1997 Uwe Ohse * configure.in: change version to 0.12.14 * src/lrz.c (procheader): Overwrite "waiting to receive" with spaces. "file exists, skipped" -> "file exists, skipped: filename", print it if: "Verbose > 2" -> "Verbose". (Glenn Burkhardt ) Sat Jan 4 10:12:56 1997 Uwe Ohse * configure.in: check for libsocket (contains syslog() under SCO). don't use AC_FUNC_STRFTIME (sets "LIBS=-lintl $libs", and this doesn't interact well with the intl/libintl.a and the ud_GNU_GETTEXT), do AC_REPLACE_FUNC(strftime). * lib/strftime.c: new file (taken from fileutils-3.14). I did *not* include multibyte character support (== including wchar.h == AC_CHECK_HEADER(wchar.h)), as timesync doesn't need multibyte characters. * src/timing.c (timing): throw out "goto doit". Forgot it a long time ago. * src/zglobal.h: include sys/select.h after including sys/time.h (sys/select.h needs struct timeval). make "char checked;" an unsigned char. remove extern int readline_readnum; not needed. * src/rbsb.c: make "char checked;" an unsigned char. (to get rid of warnings on systems where readcheck reads). * src/lsz.c (zsendfdata): remove #ifndef linux around "XOFF | 0200". (wcs): cast pid_t to unsigned long before using it in printf. (HPUX). (wcsend): remove #ifdef HAVE_STRFTIME - we know that we have strftime. * src/lrz.c (procheader): oops, alloca(strlen(name+5)) should have been alloca(strlen(name)+5); -> crash on HP9000/712, HPUX 9.07, PA-Risc. * removed forgotten strace from check.lrzsz (did you ever wonder why zmodem8k was slower in `make check'?) * src/zm.c: zsbh32,zsda32,zrdat32,zrbhdr32,zrhhdr,zputhex,zgethex, zgeth1: had static prototype, but were not defined as static. Now prototype and function are static. Thu Jan 2 22:59:44 1997 Uwe Ohse * configure.in: + AC_C_INLINE (cleanup, was called from aclocal.m4) + AC_TYPE_OFF_T (cleanup, was called from aclocal.m4) - AC_FUNC_UTIME_NULL (not really needed) + check for strings.h (was done before in aclocal.m4) + call AC_FUNC_STRFTIME + check for vprintf (not done before, used in error.c) * src/lsz.c: #ifdef HAVE_SELECT around call to select(). * src/timing.c: don't include limits.h,unistd.h: already done from zglobal.h. * src/zm.c: * src/zreadline.c: don't include unistd.h, already done from zglobal.h. Wed Jan 1 17:18:34 1997 Uwe Ohse * Release 0.12.13 * updated gettext to 0.10.26. * took out purgeline() call in zsendfile (didn't help). * check.lrzsz: splitted resume directory into two parts. * configure.in: call AC_AIX, AC_MINIX. Wed Dec 18 22:44:55 1996 Uwe Ohse * src/lsz.c: start_blklen changed to 0. (chkinvoc): don't change blklen to 1024 for YMODEM. [use -k if you want better performance, worse interoperatibility] (main): if start_blklen is 0 after processing arguments change it to 1024 (zmodem) or 128 (x/y). (zsendfile): call purgeline() once - hopefully fixed stefan glasers problem. * configure.in: remove AC_C_CROSS Sat Nov 9 16:34:09 1996 Uwe Ohse * src/lrz.c (long_options): --with-crc doesn't require an argument. (main): shortopts-string given to getopt() wasn't up-to-date. Tue Nov 5 00:05:36 1996 Uwe Ohse * src/lsz.c (zsendfdata): moved SIGINT-activation to the beginning of the file's transfer (no need to activate if before every write). * src/zm.c (bttyout): removed. (zgethdr): don't call bttyout, write directly to stderr. Thu Oct 10 15:31:54 1996 Philippe De Muyter * configure.in: Replace mktime if needed. * lib/Makefile.am (EXTRA_DIST): Distribute mktime.c * lib/mktime.c: new file, replacement function for mktime(). Mon Oct 7 22:57:09 1996 Uwe Ohse * src/lsz.c (usage): * src/lrz.c (usage): updated help text. * configure.in (VERSION): changed to 0.12.11 * src/lrz.c (main): * src/lsz.c (main): "rshell" is another name for a restricted shell. Sun Oct 6 20:45:20 1996 Uwe Ohse * src/lrz.c (wcreceive): changed calls to timing(). (rzfiles): dito. (rzfile): dito. implement --stop-at TIME. (main): recognize --stop-at and parse argument. (usage): document --stop-at. * src/lsz.c (wcs): changed call to timing(). (wcs): dito. (zsendfdata): implement --stop-at TIME. changed call to timing(), threw out calls to time(): (main): recognize --stop-at and parse argument. (usage): document --stop-at. * src/timing.c (timing): now gets another parameter time_t *now, to be filled with the "now" time (to reduce number of system call if using --min-bps or --stop-at). * src/timing.h (timing): changed prototype for timing() (optional parameter time_t *now); Thu Oct 3 09:22:26 1996 Uwe Ohse * src/lrz.c (tryz): don't return FALSE to early if getting to many ZRQINITs. * src/lsz.c (main): tell library to interrupt system calls if we get an SIGALRM (stupid BSD people - why did they make restarting systems calls the *default*)? * configure.in (ALL_LINGUAS): check for siginterrupt(). * src/lrz.c (ecgetsec): read at max 1000 bytes after we got an bad header. (was endless loop, if sender didn't time out). * src/lrz.c (main): * src/lsz.c (main): new option --delay-startup N: makes program sleep for N seconds before sarting transactions (for debugging). * lib/Makefile.am (zmodem_SOURCES): remove duplicate zmodem_SOURCES line. Wed Sep 18 20:27:00 1996 Uwe Ohse * src/lsz.c (wcs): #ifdef HAVE_MMAP around dont_mmap_this. Wed Sep 18 18:36:40 1996 Philippe De Muyter * lib/Makefile.am (EXTRA_DIST): distribute stpcpy.c. * src/lrz.c, src/lsz.c: declare stpcpy if not STRICT_PROTOTYPES. * src/lrz.c (DEFBYTL): declaration removed from here. * src/zglobal.h (DEFBYTL): declaration moved here. * src/lsz.c (wcs): enclose dont_mmap_this in #ifdef HAVE_MMAP; initialize bytes_total to DEFBYTL if file is a pipe; use bytes_sent, not bytes_total for final statistics. (calc_blklen): best_bytes and transmitted made unsigned long, not long. (countem): use DEFBYTL as filesize for "-". Tue Sep 17 23:50:34 1996 Uwe Ohse * src/lrz.c (main): enable SIGINT code. * src/lsz.c: whole file: enable SIGINT code. Sat Sep 14 10:02:41 1996 Uwe Ohse * configure.in (VERSION): change to 0.12.10 * src/lrz.c (wcreceive): unlink Pathname only if not NULL. * src/lsz.c (getzrxinit): resend ZRQINIT if we don't get a ZRINIT. This is needed to ensure that a receiver which starts up late, looses ZRQINIT and doesn't send a ZRINIT by default gets the ZRQINIT it needs. [resending ZRQINIT is documented in zmodem.doc, but unix zmodem doesn't do it. Well, this is not the only missing feature.] (getnak): resend ZRQINIT if getting a timeout. (zrqinits_sent): new variable. counts number of sent zrqinits. Need to do this because unix rz cancels transmission if getting more than 5 ZRQINITS. Thu Sep 5 21:22:32 1996 Uwe Ohse * src/lsz.c (wcsend): use stpcpy instead of strcpy + strcat. * src/lrz.c (procheader): use stpcpy instead of strcpy + strlen. * lib/stpcpy.c: new file. * configure.in: Replace strtol, strpbrk, stpcpy if needed. * check.lrzsz: Redirect all error messages to $testdir/error.log. Modified to avoid 'cp -f', dd conv=notrunc, /dev/zero. Typo : management, not managment. (Philippe De Muyter ) * configure.in: check for mode_t, replace strtoul if needed. (Philippe De Muyter ) * src/rbsb.c: Do not include fcntl.h twice. (Philippe De Muyter ) * src/lrz.c (long_options): * src/lsz.c (long_options): fix typo (restriced -> restricted) (Philippe De Muyter ) * intl/l10nflist.c, intl/explodename.c (stdlib.h): Include sys/types.h and define NULL for size_t-less or missing stdlib.h. (Philippe De Muyter ) Wed Sep 4 20:21:56 1996 Uwe Ohse * src/zglobal.h: include if it exists. (Philippe De Muyter ) * configure.in: check for sys/select.h (Philippe De Muyter ) * src/lsz.c (getinsync): clearerr(input_f) is a bad idea if (input_f == NULL). Tue Sep 3 21:55:30 1996 Uwe Ohse * src/lsz.c (wcs): oops, use name where oname should have been printed in error message. if sending file "-" treat it special. (main): replace `0' with io_mode_fd, set io_mode_fd to 1 if sending file "-". (wctx): replace `0' with io_mode_fd. (zsendfdata): rdchk(io_fd) instead of rdchk(0). Sun Sep 1 10:12:42 1996 Uwe Ohse * configure.in (VERSION): changed to 0.12.9 * man/lrz.1: documetn --rename, --min-bps, --min-bps-time. * man/lsz.1: document --turbo, --rename, --min-bps, --min-bps-time. * src/lsz.c (main): support -m/--min-bps and -M/min-bps-time options. (wctxpn): added missing error messages. (zsendfile): added missing error messages. (zsendfdata): support --min-bps and --min-bps-time. (usage): document --min-bps and --min-bps-time. * src/lrz.c (main): support -m/--min-bps M option. (rzfile): support --min-bps-Option, --min-bps-time. (main): support --min-bps-time/-M option. (rzfiles): does print error messages to syslog (rzfiles did just say "error", rzfiles can tell *what* error happened). (usage): document min-bps and min-bps-time. document --error. Wed Aug 28 11:23:01 1996 Uwe Ohse * src/zreadline.c: include errno.h * src/zglobal.h: include limits.h (_POSIX_PATH_MAX). Fixed misspelled HAVE_TERMIO_H to HAVE_TERMIOS_H. changed long Locmode, long Locbit to extern. * po/de.po: * src/lrz.c (usage): * src/lsz.c (usage): add --rename option. Tue Aug 27 10:53:43 1996 Uwe Ohse * Release 0.12.8 * src/lsz.c (main): do a select/read-loop after calling purgeline() to get rid of really anything already in the queue. * configure.in (VERSION): changed to 0.12.8 * src/lrz.c (rzfile): added missing error message. (rzfile): buffer packets we received out-of-sync, and try to reuse them later. * src/lsz.c: (whole file): renamed flags. (main): new option -E --rename: change name if target exists. (long_options): new option --rename. * src/lrz.c: (whole file) renamed flags. (procheader): implement ZF1_ZMCHNG (change name if target exists). (main): new option -E --rename: change name if target exists. (long_options): new option --rename. (procheader): fix --append-Option (ZF1_ZMAPND). Will now work even on binary files (why not send wtmp?). * src/zmodem.h (ZF1_ZMCHNG): new flag. change filename if destination exists. Some flags renamed (prefixed with ZFn etc). changed some octal numbers to hex. * src/lsz.c (main): setup readline to read up to 128 bytes. * src/zreadline.c (readline): minimal timeout now 1 second if timeout-variable is 1. * src/zreadline.c (readline): if Verbose > 9 dump up to 48 bytes direct after read(). * src/lsz.c (main): call purgeline to get rid of junk on the line. * check.lrzsz: use source files for resume test. Sun Aug 25 11:11:17 1996 Uwe Ohse * src/zm.c (zsendline_init): if turbo_escape is set: do not escape ^P, 0200|^P,015,0215. * src/lsz.c (main): recognize -T aka --turbo, sets variable turbo_escape. * src/zm.c: new variable turbo_escape. * src/lsz.c (calc_blklen): calculated with *full* last block, causing to choose smaller block sizes if last block not full. * src/zreadline.c (readline): print strerror(errno) if read returned -1 bytes and Verbose > 5. Sat Aug 24 16:39:41 1996 Uwe Ohse * src/rbsb.c (from_cu): debug messages deleted. Fri Aug 23 14:32:51 1996 Uwe Ohse * src/lsz.c (usage1): usage1 is static, had static prototype, but was not made static. * src/lrz.c (procheader): case result of strdup because we might not have a prototype for it. * lib/alloca.c: provide xmalloc. * configure.in: use GCC-CFlags only if using gcc (did a test with lcc ...). Thu Aug 22 19:48:16 1996 Uwe Ohse * Release 0.12.7 * configure.in (VERSION): changed to 0.12.7 Tue Aug 13 00:00:27 1996 Uwe Ohse * check.lrzsz: accepts third parameter (x,y,z,z8,sz-r,rz-r,abuse), to do one test. * src/timing.c (timing): DST_NONE might be undefined. * src/lsz.c: do not include unistd.h, limits.h. (wcsend): dynamically alloca tmp and pa variables (PATH_MAX). (wctxpn): dito. * src/zglobal.h: get alloca. Mon Aug 12 21:46:09 1996 Uwe Ohse * src/lrz.c (procheader): dynamically allocate Pathname-String (PATH_MAX may be variable). (wcreceive): dynamically allocate Pathname. * configure.in: check for sys/param.h * src/rbsb.c: don't include sys/stat.h, sys/types.h * src/lsz.c: * src/lrz.c: don't include time-includes. do not include sys/stat.h, unistd.h * src/zglobal.h: include time-includes. include sys/stat.h, sys/types.h #define PATH_MAX if needed. Sun Aug 11 07:39:37 1996 Uwe Ohse * src/lrz.c (rzfile): instead of sending ZACK flush XON flush send (ZACK | 0x80) to remote. This removes on write operation. * src/zm.c (zshhdr): use a mask of 0x7f for frametype (see change to lrz.c above). * configure.in (VERSION): increased version number to 0.12.6 * src/lsz.c: buffersize, use_mmap: new variables. (long_options): add --bufsize aka -B option. (wcs): added support for variable buffer size (input file). (zsendfdata): use mmap only if use_mmap != 0. (usage): show -B option. * po/de.po: added translation for -B option. * src/lrz.c (usage): show -B option. * man/lsz.1: * man/lrz.1: documented -B option. * src/lsz.c: * src/lrz.c: added extern declarations for time(), strerror() and strstr(), if not STRICT_PROTOTYPES. (phdm@info.ucl.ac.be) * src/lrz.c: (procheader): use variable size FILE buffer. buffersize: new variable (main): added -B-Option to set buffersize. (long_options): new option --bufsize aka -B. * acconfig.h: #undef STRICT PROTOTYPES * configure.in: remove AC_PROG_LN_S (not used anymore). moved "test $prefix = NONE && prefix=/usr" to local part (if host == tirka.gun.de). (phdm@info.ucl.ac.be) if -Wstrict-prototypes in CFLAGS then AC_DEFINES(STRICT_PROTOTYPES). * src/Makefile.am (install-exec-local): used ln, not ln -s. don't use -f option to ln (unportable). (phdm@info.ucl.ac.be) * check.lrzsz (z_test_files): try mknod if mkfifo failed. (phdm@info.ucl.ac.be) * src/rbsb.c: sys/types.h and sys/stat.h included twice. (phdm@info.ucl.ac.be) * config.guess, config.sub: replaced by autoconf-2.10 version. (phdm@info.ucl.ac.be) Tue Aug 6 11:16:12 1996 Uwe Ohse * src/zm.c (count_blk) (printout_blocksizes): neuer Code. wenn DEBUG_BLOCKSIZE definiert ist und gcc verwendet wird, wird am Ende der Übertragung eine Statistik der Blockgrößen mit syslog(LOG_DEBUG) ausgegeben. * src/zglobal.h (CANBREAK): nun hier definiert. (USE_SGTTY,USE_*TERMIO*): nun hier definiert, includes finden hier statt. * src/rbsb.c: einen Teil der Includes nach zglobal.h verlegt (lrz.c benötigt CANBREAK). (sendbrk): #define CANBREAK nach zglobal.h verlagert. Sat Aug 3 16:14:47 1996 Uwe Ohse * configure.in: change version number to 0.12.5 * Release 0.12.5 Wed Jul 24 13:14:45 1996 Uwe Ohse * configure.in: AC_REPLACE_GNU_GETOPT missing. Tue Jul 23 16:20:06 1996 Uwe Ohse * src/rbsb.c (rdchk): f should have been fd. * src/zperr.c: include errno.h Fri Jul 5 15:51:51 1996 Uwe Ohse * configure.in: AC_DEFINE(HAVE_STRERROR,1) * acconfig.h: #undef HAVE_STRERROR Thu Jun 20 16:42:26 1996 Uwe Ohse * src/Makefile.am (uninstall-local) (install-exec-local): new targets, creating symlinks from l[rs]z to l[rs][bx]. Sat Jun 15 08:13:41 1996 Uwe Ohse * changed version number to 0.12.4 Thu Jun 13 08:25:22 1996 Uwe Ohse * oh, i should have written this in english. Sorry. * check.lrzsz: neue Tests, ob recovery funktioniert. * lsz.c: wenn sender keine Konvertierungsoptionen (ZCBIN, ZCNL oder ZCRESUME), sondern das Feld auf 0 läßt, wird nun ZCBIN angenommen. Und schon funktioniert die `-r'-Logik in procheader(). * zm.c (zdlread): weite Teile werden nun ge-inline-d. Das spart in etwa drei Funktionsaufrufe pro 4 gelesene Bytes. * src/lrz.c (procheader): oops, setvbuf wurde nur bei der ersten Datei aufgerufen. * src/lrz.c (usage): * src/lsz.c (usage): In der Usage-Zeile wurden nicht alle Optionen ausgegeben. Es waren ohnehin ohnehin zu viele, deshalb wird [options] geschrieben. * check.lrzsz: Behandlung von /pub/gnu/emacs-*.tar.gz war falsch (der Fall, daß sie nicht da waren, wurde nicht abgefangen). Wenn ZMODEM-Test fehlschlug wurde am Ende ausgegeben, daß XMODEM nicht funktioniert. Sun Jun 9 07:43:32 1996 Uwe Ohse * Prototypendeklaration für gettimeofday aus timing.c entfernt, kollidiert mit Solaris oder HP/UX. Sollte ohnehin überflüssig sein. Sat Jun 8 23:56:42 1996 Uwe Ohse * configure.in: Versionsnummer auf 0.12.3 erhöht. AC_LINK_FILES($nls_cv_header_libgt, $nls_cv_header_intl) wird nun aufgerufen. * zm.c,lsz.c: Variable Zmodem, irrtümlich am Mittwoch verkannt (sie bedeutete nicht "wir benutzen Zmodem", sondern "ZModem-Request erhalten") und entfernt, ist nun wieder eingebaut als zmodem_requested. * lrz.c: Zmodem -> zmodem_requested. Thu Jun 6 12:03:24 1996 Uwe Ohse all files: * use automake. * go away from flat directory. * internationalized. * de-localized. * cleaned up. * added syslog support. * added termios support. short: everything changed. Mon Jun 3 08:06:52 1996 Uwe Ohse * lsz.c (countem): replaced access(,04) with access(,R_OK). protoized function. (usage): protoized, added parameter ("describe failure"). (chkinvok), (chartest), (zsendcmd), (bttyout), (saybibi), (getinsync), (canit), (zsendfdata), (zperr), * lrz.c (bttyout): moved to zm.c * lsz.c: include unistd.h, define R_OK if undefined. * Makefile.in (MOSTLYCLEANFILES): added lint target. * timing.c (timing): got rid of a warning. * configure.in: added missing AC_ARG_PROGRAM ---------------------------------------------------------------------- Original lrzsz CHANGES file: ---------------------------------------------------------------------- 0.10 - 4-15-94 -------------- Made a bunch of changes to the last public domain rzsz release to make progress reports look pretty under various communications packages. Most mods are to lrz.c and lsz.c to give only a reasonable amount of information while a transfer occurs. 0.11 - 4-17-94 -------------- Whoops. Changed the location of 'rzlog' (the logfile) to /var/adm instead of /tmp to meet the requirements of the Linux FSSTD. Also fixed the Makefile so it uses relative links we don't confuse oddly configured systems. Included the GNU General Public License for convenience. To Do ----- Tk interface for progress reporting under X11. Matt Porter 0.11 to 0.12a ------------- - disabled log file code in rz.c and sz.c - added timing code / transfer rate calculation to rz.c and sz.c (new code in timing.c) 0.12b - 5-26-96 to 6-2-96 Uwe Ohse - lrz.c: Restricted mode now defaults to 1. To turn off restricted mode use -U. Use -R to disable creation of directories and invisible files. If $ZMODEM_RESTRICTED is found Restricted mode defaults to 2 (no creation of directories and invisible files), but can still be reset through -U (whoever gives the options is also able to set/unset environment variables). Turning of restricted mode is impossible if running under a restricted shell. Remote command execution is disabled in restricted mode. - lsz.c: Restricted mode is turned on if running under a restricted shell, or -R is given, or $ZMODEM_RESTRICTED is set. With -U restricted mode is turned off unless running under a restricted shell. - lrz.c: exitcode in main() was not initialized. - lsz.c: missing break statement after -r option added (sz). -r implied -q, this is certainly not needed. - lsz.c: threw out TXBSIZE-code (stdio can do that better - without TXBSIZE the benchmarks give better results). Only lossage: can't seek on pipes anymore (but that didn't work with large buffers and long delays or really fast lines anyway). - lsz.c: use mmap if possible. - lrz.c: zmputs used to write a string in single byte writes. Changed that ... - lrz.c, lsz.c: now recognize x- or y-modem-mode even if named lsb or lsx (instead of sb or sx). ### TODO: make that work with program_transform_name. - lrz.c: increased HOWMANY to 8192 (255, if NFGVMIN is not defined) - lrz.c: added a missing error message. - lrz.c, lsz.c: reenabled timeout code, can be disabled with the -O option. - lsz.c, lrz.c: added timesync protocol extension by Peter Mandrella (can be totally disabled with configure --disable-timesync). if lrz is called with -S it will request a timesync packet and complain about larger differences if -v is given, if -S is given twice it will set the system time to the senders time (if running under root, oh well). lsz recognizes timesync protocoll only if -S is given (so timesync is normally disabled and doesn't introduce any incompatabilities) - lrz.c: added crash recovery (this is a really simple extension to the receivers file opening code). Both lrz and lsz no have a -r switch to request resume of a former transfer. - lrz.c: used putc to write the data to disk. changed that to fwrite. - lrz.c: now removes the received file if fclose() failed. - lrz.c/lsz.c: reduced number of outputs to stderr (progress/BPS-rate was printed far too often and reduced the performance). - lrz.c/lsz.c: added option -O: "disable timeout/SIGALRM handling". This should increase performance significantly, and, on the other hand, makes l[sr]z wait forever (until it is interrupted/killed). Anyway: Even without -O performance is good enough. 280KB/sec through TCP/IP (localhost). -O gives about 290KB/sec. - lrz.c/lsz.c: implemented 8K blocksize (give lsz the -8 option to use it - it defaults to traditional 1K). - lrz.c: reduced calls to readline() (too many function calls - now uses a macro call in zm.c). - lsz.c: Option -c (sending commands to remote) disabled in restricted mode. - lsz.c, lrz.c: PUBDIR is now optional (i don't trust public writable directories). - lrz.c, lsz.c: threw out substr() - strstr is available since ages. - changed error recovery mode: old didn't ever increase block sizes. new one gets far better performance if transmission is bad for only a short time. - lrz.c, lsz.c: off_t is long long under FreeBSD, can't be printed with %ld. - updated manpages. - almost all Files: autoconf'd them. - Makefile.in: largely rewritten, now mostly conforms to the GNU standards (mostly: i don't know what i've forgotten). - updated version number to 0.12b lrzsz-0.12.21rc/INSTALL 644 764 764 23721 6703467636 7556 To install: 0) if you are uncommon with configuration and installation of GNU/autoconf'd software please read to generic install text at the end of this file. 1) configure the package, possibly with CFLAGS=-O2 ./configure Use the following options if you need to: --disble-timesync this saves a few bytes. The timesync protocol allows to set the receivers system time to the sender's time (see option S in the manual pages). Including timesync support doesn't introduce any incompatabilites (but *using* timesync does). --enable-pubdir=/var/spool/uucppublic if you want support for a public writeable directory. --enable-syslog[=[[FACILITY,]level]] to include syslog support. Not much will be written to syslog, just one line per file. Default facility is LOG_UUCP, but you can change that to whatever your syslog.h supports. Level defaults to "default", meaning syslog is on by default, but is can be forced ("force"), meaning users will not be allowed to turn it off, and it can be "optional", meaning users have to turn it on for every transmission. Example: --enable-syslog=LOG_LOCAL0,force every filetransfer will be logged to LOG_LOCAL0. --enable-syslog=default and --enable-syslog every filetransfer will be logged to LOG_UUCP, unless the user turns this off with the "--syslog=off" runtime option of lsz and lrz. --enable-syslog=optional no filetransfer will be logged, but syslogging can be enabled with the "--syslog" runtime option of lsz and lrz. --disable-mkdir if rz shall never create directories (this option is only included because disbaling the directory creation was possible with the original sources). --prefix=/usr/local to install the programs and documentation under /usr/local instead of /usr (default). --program-transform-name=s/l// to install the programs and manual pages under the traditional names (sz, sz.1 instead of lsz, lsz.1). 2) make (please contact uwe@ohse.de if there are any problems.) 3) make check will perform a selftest, sending some files in the distribution through a named pipe. ("make vcheck" will do the same as "make check" does, but prints a progress report) 4) please read COMPATABILITY 5) make install if everything is ok. -------------------- generic GNU INSTALL text ----------------------------- Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. lrzsz-0.12.21rc/Makefile.am 644 764 764 4364 6675022007 10526 SUBDIRS = lib intl src po man testsuite EXTRA_DIST = check.lrzsz COMPATABILITY README.cvs README.isdn4linux \ README.gettext rpmrc buildrpm systype.in fastcheck.sh README.tests \ beos-runpiped.c fastcheck.beos noinst_SCRIPTS=systype PR=@PACKAGE@-@VERSION@ CLEAN_FILES=fastcheck.done oldcheck-local: QUIET=-q $(srcdir)/check.lrzsz $(srcdir) `pwd` fastcheck: if [ x`uname -s` = xBeOS ] ; then make fastcheck-beos ; else \ $(srcdir)/fastcheck.sh $(srcdir) `pwd` ; fi fastcheck-beos: beos-runpiped $(srcdir)/fastcheck.beos $(srcdir) `pwd` beos-runpiped: beos-runpiped.c $(CC) -o $@ $< success: fastcheck sh systype | mail uwe-generic-counter@ohse.de vcheck: $(srcdir)/check.lrzsz $(srcdir) `pwd` vcheck-%: $(srcdir)/check.lrzsz $(srcdir) `pwd` $(subst vcheck-,,$@) check-%: QUIET=-q $(srcdir)/check.lrzsz $(srcdir) `pwd` $(subst check-,,$@) vcheck-x: $(srcdir)/check.lrzsz $(srcdir) `pwd` x vcheck-y: $(srcdir)/check.lrzsz $(srcdir) `pwd` y vcheck-z: $(srcdir)/check.lrzsz $(srcdir) `pwd` z vcheck-z8: $(srcdir)/check.lrzsz $(srcdir) `pwd` z8 vcheck-sz-r: $(srcdir)/check.lrzsz $(srcdir) `pwd` sz-r vcheck-rz-r: $(srcdir)/check.lrzsz $(srcdir) `pwd` rz-r vcheck-turbo: $(srcdir)/check.lrzsz $(srcdir) `pwd` turbo vcheck-error: $(srcdir)/check.lrzsz $(srcdir) `pwd` error vcheck-manag vcheck-manage: $(srcdir)/check.lrzsz $(srcdir) `pwd` manage vcheck-zm-rz: $(srcdir)/check.lrzsz $(srcdir) `pwd` zm-rz vcheck-zm-sz: $(srcdir)/check.lrzsz $(srcdir) `pwd` zm-sz vcheck-orig-rz: $(srcdir)/check.lrzsz $(srcdir) `pwd` orig-rz vcheck-orig-sz: $(srcdir)/check.lrzsz $(srcdir) `pwd` orig-sz vcheck-orig-kombi: $(srcdir)/check.lrzsz $(srcdir) `pwd` orig-kombi vcheck-abuse: $(srcdir)/check.lrzsz $(srcdir) `pwd` abuse vcheck-startup: $(srcdir)/check.lrzsz $(srcdir) `pwd` startup vcheck-tmp: $(srcdir)/check.lrzsz $(srcdir) `pwd` tmp # Tag before making distribution. Also, don't make a distribution if # checks fail. Also, make sure the NEWS file is up-to-date. cvs-dist: @if sed 1q NEWS | grep -e "$(VERSION)" > /dev/null; then :; else \ echo "NEWS not updated; not releasing" 1>&2; \ exit 1; \ fi cvs tag `echo "Release-$(VERSION)" | sed 's/\./-/g'` $(MAKE) dist rpm: $(PR).tar.gz Specfile $(srcdir)/buildrpm $(srcdir) lrzsz-0.12.21rc/NEWS 644 764 764 15572 6642657325 7227 Version 0.12.20 - December 1998, Uwe Ohse * works on BeOS and stone-aged SCO (sco-3.2v4.2) * pubdir-"feature" works again. * "make rpm" creates a rpm file. * "optimal blklen calculation" was too aggressive, it now does nothing if the user demands fixed blklens. * various smaller and medium bug fixes. * a more or less important security bug is fixed (stupid use of /tmp in a piece of code which is rarely used). * lrz uses umask to make files unreadable which receiving them. * "sh systype | mail uwe-generic-counter@ohse.de" sends a success report with a description of the system type. * --enable-syslog is now default Version 0.12.19 - January 1998, Uwe Ohse * 0.12.18 was broken, lsz crashed if receiver found an CRC error. * lrz options "--rename" and "--escape" didn't work. * lrz didn't implement senders "overwrite-or-skip" option. * added dejagnu testsuite. Maybe you need a dejagnu snapshot to use it. Version 0.12.18 - November 1997, Uwe Ohse * syslog output now includes user name. * new script lrzszbug, to be used for bugreports (untested) * lots of compiler warnings (egcs -Wparanoia [many -W]) removed. * new options --tcp-server and --tcp-client ADDRESS:PORT for both programs. Version 0.12.17 - August 1997, Uwe Ohse * internal cleanup. * portability enhancements by (Philippe De Muyter ) * lsz has a new option "--tcp" (no shortopt implemented). lsz transmits one file over normal stdin/stdout (a control file), then opens a tcp connection to transmit all other files. [this should help you, Peter] That _might_ be useful if your telnetd is really stupid. (was _not_put on ftp/http server) Version 0.12.16 - March 1997, Uwe Ohse * major performance improvement (less CPU time needed - don't expect faster transfers over slow lines). `make vcheck' now show about 50% more throughput. * updated to gettext-0.12.27 and automake-1.1l (automake-1.1l bug: AC_SUBST in AM_PATH_PROG_WITH_TEST leads to a "$1=@$1@" line in Makefile.in. I hacked around it in /usr/share/aclocal/gettext.m4) * minor bug fix. Version 0.12.15 - Februar 1997, Uwe Ohse * should now compile with pre-ANSI-compilers (tested with HPUX bundled compiler - what a bad program. shame on HP). * new option --o-sync for lrz, open output file in synchronous write mode (for those poor systems losing interrupts if update locks interrupts too long). Version 0.12.14 - Januar 1997, Uwe Ohse * compiles cleaner on SCO, HPUX (even with the native compiler). * improved error reporting (i think there are still possibilities for further improvements, if anybody case spare time :-)). Version 0.12.13 - Januar 1997, Uwe Ohse * no user visible changes Version 0.12.12 - December 1996, Uwe Ohse * lrx and lrb (aka lsz --x/ymodem) now default to 128 byte block length (to fix interoperatability problems with some Xmodems [USR courier flash upload]). * lrz didn't recognize every short option. * minor performance tweaks. * replace mktime() if needed. * updated to autoconf 2.12. Version 0.12.11 - October 1996, Uwe Ohse * lrzsz now has a home page, http://www.csl-gmbh.net/~uwe/lrzsz.html. it still needs some work (oh well, it's "under construction" :-). * lsz/lrz recognize "rshell" as another name for the restricted shell. * new option --stop-at HH:MM (stop transmission at HH:MM), and --stop-at +N (stop in N seconds). * don't hang on BSD machines after getting a timeout (SIGALRM). Stupid BSD people ... * rb (Y-Modem receive): read at max 1000 bytes after getting a bad header, before giving up. * new option --delay-startup N: wait N seconds before doing anything (debugging aid). * Interrupt signal handling turned on under linux (i still don't know why it was turned off). * better handling of "sz -", by Philippe De Muyter. Version 0.12.10 - September 1996, Uwe Ohse * lsz resends init string if it doesn't receive rz's init. * improved "make check". (Philippe De Muyter ) * `sz -' should work again (but i cannot test it). Anyway, this will not work if sz cannot read from stdout. * portability enhancements by (Philippe De Muyter ) Version 0.12.9 - September 1996, Uwe Ohse * new options --min-bps N and --min-bps-time M: If BPS rate falls under N for at least M seconds (default: 120) transmission will be stopped. * added some missing error messages. * updated manual pages. Version 0.12.8 - August 1996, Uwe Ohse * bug fixes. * sz and rz now know about a new option: -E, --rename: change name if target exists. * new option -T, --turbo for sz: sz doesn't escape 4 special characters if this option is given (this should not make problems with any rz, but could be problematic on certain links where this characters have to be escaped). * debugged blocksize calculation. * -+, --append option fixed. Version 0.12.7 - August 1996, Uwe Ohse * portability enhancements. compiles and runs under hurd. Version 0.12.6 - August 1996, Uwe Ohse * some portability enhancements (phdm@info.ucl.ac.be) * sz and rz now have a new option -B NNN. NNN stands for the size of the disk buffer to use (in Bytes). NNN == auto buffers the whole file. Use it if you get crc errors while accessing the disk. Version 0.12.5 - August 1996, Uwe Ohse * some portability enhancements (getopt.c) * install creates symlinks from l[rs]z to l[rs][bx] Version 0.12.4 - June 1996, Uwe Ohse * some bug fixes * `rz -r' should now really work * `make check' and `make vcheck' now try to check crash recovery Version 0.12.3 - June 1996, Uwe Ohse * just a few bugfixes. Version 0.12.2 - June 1996, by Uwe Ohse * German translation * internationalized * went away from flat directory structure * added termios support * added syslog support * turned to automake * lrz want give received files execution permission if running under rsh. New in lrzsz-0.12b: - lrz: remote command execution is disabled per default. This fixes a major security hole. - lrz now defaults to restricted mode. - lrz has a more restricted mode in which creation of directories and invisible files is not allowed. See lrz.1 for more information. - rz and sz now recognize x- or y-modem-mode even if named lsb or lsx (instead of sb or sx). - timeout code is enabled again, can be turned of with the -O option. - PUBDIR is now optional. configure with --enable-pubdir=/path if you really want a public writeable directory (i don't, so the default is no such directory). - turned to GNU autoconf. - added timesync protocol extension by Peter Mandrella. See timesync.doc and the man pages for more information. - added crash recovery (this is a really simple extension to the receivers file opening code). Both lrz and lsz no have a -r switch to request resume of a former transfer. - many major and minor performance hacks. - new: 8K blocksize (a common extension in the DOS world). Turn on with the -8 option to lsz (lrz handles this automatically). lrzsz-0.12.21rc/Specfile.in 644 764 764 4545 6642657325 10570 Summary: lzrz - sz, rz, and friends Name: @PACKAGE@ Version: @VERSION@ Release: 0 Copyright: GPL Group: Applications/Communications Source: ftp://ftp.ohse.de/uwe/releases/@PACKAGE_VERSION@.tar.gz BuildRoot: /var/tmp/lrzsz-root Summary(de): lzrz - sz, rz und Co. Summary(fr): lzrz - sz, rz, et consorts Summary(tr): Modem protokolleri %description This collection of commands can be used to download and upload files using the Z, X, and Y protocols. Many terminal programs (like minicom) make use of these programs to transfer files. %description -l de Diese Sammlung von Befehlen läßt sich zum Herunter- und Aufwärtsladen von Dateien anhand der Z-, X- und Y-Protokolle benutzen. Viele Terminalprogramme (wie Minicom) setzen diese Programme für die Übertragung von Dateien ein. %description -l fr Cet ensemble de commande sert ŕ télécharger des fichiers en utilisant les protocoles Z, X et Y. De nombreux programmes de terminal (comme minicom) utilisent ces programmes pour transférer les fichiers. %description -l tr Bu komutlar topluluđu Z, X ve Y protokollerini kullanarak dosya aktarýmý için kullanýlabilir. Pek çok uç birim programý (örneđin minicom) dosya taţýmak için bu programlarý kullanýr. %prep %setup %build CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=/usr --program-transform-name=s/l// make %install rm -rf $RPM_BUILD_ROOT make prefix=$RPM_BUILD_ROOT/usr install strip $RPM_BUILD_ROOT/usr/bin/{rb,rx,rz,sb,sx,sz} %files %defattr(-,root,root) %doc AUTHORS COMPATABILITY ChangeLog NEWS README README.gettext TODO THANKS README.cvs README.isdn4linux README.systems README.tests /usr/bin/sz /usr/bin/sb /usr/bin/sx /usr/bin/rz /usr/bin/rb /usr/bin/rx /usr/man/man1/sz.1 /usr/man/man1/rz.1 %clean rm -rf $RPM_BUILD_ROOT %changelog * Mon Dec 21 1998 Uwe Ohse - stole redhats specfile and hacked it. Redhat people: "Upgraded to 0.12.14 and changed makefiles so gettext isnt built." is that kind of problem the author would have liked to know. * Sun Aug 16 1998 Jeff Johnson - build root * Thu May 07 1998 Prospector System - translations modified for de, fr, tr * Tue Oct 21 1997 Donnie Barnes - spec file cleanups * Thu Jul 10 1997 Erik Troan - built against glibc * Wed Mar 5 1997 msf@redhat.com - Upgraded to 0.12.14 and changed makefiles so gettext isnt built. lrzsz-0.12.21rc/THANKS 666 764 764 262 6607440600 7360 There are undoubtly more people to thank, but here's a start: Philippe De Muyter Glenn Burkhardt Philip Cox lrzsz-0.12.21rc/TODO 644 764 764 1333 6642657325 7166 - make argv[0]-recognition of X/YModem work with program_name_transform. - look into VMIN code: how to determine if it's usable (it isn't unter FreeBSD and NetBSD (might have changed) and possibly many other system), and what is the max value? Anyway - we don't *need* it. It just reduces system load (but that's not a real problem - zmodem over a ISDN/modem link is not much load). - provide a way to not use any CRC check (for those people who a) think that lrzsz is to slow for their serial lines, or b) think that their transmission lines are safe. Oh well, some people don't learn without having pain). - improve error reporting. - clean up Output in verbose mode. (document what's printed if verbose is `n') lrzsz-0.12.21rc/acconfig.h 644 764 764 3720 6760040653 10411 /* define this if you have a reliable ftime function */ #undef HAVE_FTIME /* define this if you have the timezone variable */ #undef HAVE_TIMEZONE_VAR /* Define to 1 if NLS is requested. */ #undef ENABLE_NLS /* Define as 1 if you have catgets and don't want to use GNU gettext. */ #undef HAVE_CATGETS /* Define as 1 if you have gettext and don't want to use GNU gettext. */ #undef HAVE_GETTEXT /* Define if your locale.h file contains LC_MESSAGES. */ #undef HAVE_LC_MESSAGES /* Define to the name of the distribution. */ #undef PACKAGE /* The concatenation of the strings PACKAGE, "-", and VERSION. */ #undef PACKAGE_VERSION /* Define to the version of the distribution. */ #undef VERSION /* Define to 1 if you have the stpcpy function. */ #undef HAVE_STPCPY /* Define to 1 if your utime() takes struct utimbuf as second argument */ #undef HAVE_STRUCT_UTIMBUF /* Define to 1 if ANSI function prototypes are usable. */ #undef PROTOTYPES /* Define to LOG_xxx (a syslog facility) if syslog() shall be used */ #undef ENABLE_SYSLOG /* Define to 1 if syslogging shall be forced */ #undef ENABLE_SYSLOG_FORCE /* Define to 1 if syslogging shall be default */ #undef ENABLE_SYSLOG_DEFAULT /* Define to 1 if lrz shall create directories if needed */ #undef ENABLE_MKDIR /* Define to public writable directory if you want this. Leave out the "'s */ #undef PUBDIR /* Define to 1 if you want support for the timesync protocol */ #undef ENABLE_TIMESYNC /* define to 1. we have a replacement function for it. */ #undef HAVE_STRERROR /* define to 1 if you want strict ANSI prototypes. will remove some extern x(); declarations. */ #undef STRICT_PROTOTYPES /* where the localedata hides */ /* #undef LOCALEDIR */ /* do your system libraries declare errno? */ #undef HAVE_ERRNO_DECLARATION /* define to type of speed_t (long?) */ #undef speed_t /* define this if you headers conflict */ #undef SYS_TIME_WITHOUT_SYS_SELECT /* define to type of socklen_t (int?) */ #undef socklen_t lrzsz-0.12.21rc/acinclude.m4 644 764 764 4476 6760042307 10667 dnl AC_REPLACE_GNU_GETOPT AC_DEFUN(AC_REPLACE_GNU_GETOPT, [AC_CHECK_FUNC(getopt_long, , [LIBOBJS="$LIBOBJS getopt1.o getopt.o"]) AC_SUBST(LIBOBJS)dnl ]) dnl dnl taken from taylor uucp AC_DEFUN(LRZSZ_ERRNO_DECL,[ AC_MSG_CHECKING(for errno declaration) AC_CACHE_VAL(lrzsz_cv_decl_errno, [AC_TRY_COMPILE([#include ], [int i = errno; errno = 1;], lrzsz_cv_decl_errno=yes, lrzsz_cv_decl_errno=no)]) AC_MSG_RESULT($lrzsz_cv_decl_errno) if test $lrzsz_cv_decl_errno = yes; then AC_DEFINE([HAVE_ERRNO_DECLARATION]) fi ]) dnl for ease of use AC_DEFUN([LRZSZ_HEADERS_TERM_IO],[ AC_CHECK_HEADERS(termios.h sys/termios.h termio.h sys/termio.h sgtty.h)dnl ]) dnl LRZSZ_TYPE_SPEED_T AC_DEFUN(LRZSZ_TYPE_SPEED_T,[ AC_REQUIRE([AC_HEADER_STDC])dnl AC_REQUIRE([LRZSZ_HEADERS_TERM_IO])dnl AC_MSG_CHECKING(for speed_t) AC_CACHE_VAL(ac_cv_type_speed_t, [AC_EGREP_CPP(speed_t, [#include #if STDC_HEADERS #include #include #endif #ifdef HAVE_TERMIOS_H #include #else #if defined(HAVE_SYS_TERMIOS_H) #include #else #if defined(HAVE_TERMIO_H) #include #else #if defined(HAVE_SYS_TERMIO_H) #include #else #if defined(HAVE_SGTTY_H) #include #else #error neither termio.h nor sgtty.h found. Cannot continue. */ #endif #endif #endif #endif #endif ], ac_cv_type_speed_t=yes, ac_cv_type_speed_t=no)])dnl AC_MSG_RESULT($ac_cv_type_speed_t) if test $ac_cv_type_speed_t = no; then AC_DEFINE([speed_t],long) fi ]) AC_DEFUN(lrzsz_HEADER_SYS_SELECT, [AC_CACHE_CHECK([whether sys/time.h and sys/select.h may both be included], lrzsz_cv_header_sys_select, [AC_TRY_COMPILE([#include #include #include ], [struct tm *tp;], lrzsz_cv_header_sys_select=yes, lrzsz_cv_header_sys_select=no)]) if test $lrzsz_cv_header_sys_select = no; then AC_DEFINE(SYS_TIME_WITHOUT_SYS_SELECT) fi ]) AC_DEFUN(UO_TYPE_SOCKLEN_T,[ AC_CACHE_CHECK([for socklen_t],ac_cv_type_socklen_t, [AC_TRY_COMPILE([ #include "confdefs.h" #include #include #if STDC_HEADERS #include #include #endif ],[socklen_t x=0;return x;] ,ac_cv_type_socklen_t=yes,ac_cv_type_socklen_t=no)] ) if test $ac_cv_type_socklen_t = no; then cat >> confdefs.h <<\EOF #define socklen_t int EOF AC_DEFINE([socklen_t],int) fi ]) dnl DEFUN lrzsz-0.12.21rc/aclocal.m4 644 764 764 53617 6760042313 10354 dnl aclocal.m4 generated automatically by aclocal 1.4a dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This program is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A dnl PARTICULAR PURPOSE. dnl AC_REPLACE_GNU_GETOPT AC_DEFUN(AC_REPLACE_GNU_GETOPT, [AC_CHECK_FUNC(getopt_long, , [LIBOBJS="$LIBOBJS getopt1.o getopt.o"]) AC_SUBST(LIBOBJS)dnl ]) dnl dnl taken from taylor uucp AC_DEFUN(LRZSZ_ERRNO_DECL,[ AC_MSG_CHECKING(for errno declaration) AC_CACHE_VAL(lrzsz_cv_decl_errno, [AC_TRY_COMPILE([#include ], [int i = errno; errno = 1;], lrzsz_cv_decl_errno=yes, lrzsz_cv_decl_errno=no)]) AC_MSG_RESULT($lrzsz_cv_decl_errno) if test $lrzsz_cv_decl_errno = yes; then AC_DEFINE([HAVE_ERRNO_DECLARATION]) fi ]) dnl for ease of use AC_DEFUN([LRZSZ_HEADERS_TERM_IO],[ AC_CHECK_HEADERS(termios.h sys/termios.h termio.h sys/termio.h sgtty.h)dnl ]) dnl LRZSZ_TYPE_SPEED_T AC_DEFUN(LRZSZ_TYPE_SPEED_T,[ AC_REQUIRE([AC_HEADER_STDC])dnl AC_REQUIRE([LRZSZ_HEADERS_TERM_IO])dnl AC_MSG_CHECKING(for speed_t) AC_CACHE_VAL(ac_cv_type_speed_t, [AC_EGREP_CPP(speed_t, [#include #if STDC_HEADERS #include #include #endif #ifdef HAVE_TERMIOS_H #include #else #if defined(HAVE_SYS_TERMIOS_H) #include #else #if defined(HAVE_TERMIO_H) #include #else #if defined(HAVE_SYS_TERMIO_H) #include #else #if defined(HAVE_SGTTY_H) #include #else #error neither termio.h nor sgtty.h found. Cannot continue. */ #endif #endif #endif #endif #endif ], ac_cv_type_speed_t=yes, ac_cv_type_speed_t=no)])dnl AC_MSG_RESULT($ac_cv_type_speed_t) if test $ac_cv_type_speed_t = no; then AC_DEFINE([speed_t],long) fi ]) AC_DEFUN(lrzsz_HEADER_SYS_SELECT, [AC_CACHE_CHECK([whether sys/time.h and sys/select.h may both be included], lrzsz_cv_header_sys_select, [AC_TRY_COMPILE([#include #include #include ], [struct tm *tp;], lrzsz_cv_header_sys_select=yes, lrzsz_cv_header_sys_select=no)]) if test $lrzsz_cv_header_sys_select = no; then AC_DEFINE(SYS_TIME_WITHOUT_SYS_SELECT) fi ]) AC_DEFUN(UO_TYPE_SOCKLEN_T,[ AC_CACHE_CHECK([for socklen_t],ac_cv_type_socklen_t, [AC_TRY_COMPILE([ #include "confdefs.h" #include #include #if STDC_HEADERS #include #include #endif ],[socklen_t x=0;return x;] ,ac_cv_type_socklen_t=yes,ac_cv_type_socklen_t=no)] ) if test $ac_cv_type_socklen_t = no; then cat >> confdefs.h <<\EOF #define socklen_t int EOF AC_DEFINE([socklen_t],int) fi ]) dnl DEFUN # Do all the work for Automake. This macro actually does too much -- # some checks are only needed if your package does certain things. # But this isn't really a big deal. # serial 1 dnl Usage: dnl AM_INIT_AUTOMAKE(package,version, [no-define]) AC_DEFUN(AM_INIT_AUTOMAKE, [AC_REQUIRE([AC_PROG_INSTALL]) dnl We require 2.13 because we rely on SHELL being computed by configure. AC_PREREQ([2.13]) PACKAGE=[$1] AC_SUBST(PACKAGE) VERSION=[$2] AC_SUBST(VERSION) dnl test to see if srcdir already configured if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi ifelse([$3],, AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])) AC_REQUIRE([AM_SANITY_CHECK]) AC_REQUIRE([AC_ARG_PROGRAM]) dnl FIXME This is truly gross. missing_dir=`cd $ac_aux_dir && pwd` AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir) AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir) AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir) AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir) AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir) AC_REQUIRE([AC_PROG_MAKE_SET])]) # # Check to make sure that the build environment is sane. # AC_DEFUN(AM_SANITY_CHECK, [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftestfile # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` if test "[$]*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftestfile` fi if test "[$]*" != "X $srcdir/configure conftestfile" \ && test "[$]*" != "X conftestfile $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "[$]2" = conftestfile ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi rm -f conftest* AC_MSG_RESULT(yes)]) dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY) dnl The program must properly implement --version. AC_DEFUN(AM_MISSING_PROG, [AC_MSG_CHECKING(for working $2) # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if ($2 --version) < /dev/null > /dev/null 2>&1; then $1=$2 AC_MSG_RESULT(found) else $1="$3/missing $2" AC_MSG_RESULT(missing) fi AC_SUBST($1)]) # Like AC_CONFIG_HEADER, but automatically create stamp file. AC_DEFUN(AM_CONFIG_HEADER, [AC_PREREQ([2.12]) AC_CONFIG_HEADER([$1]) dnl When config.status generates a header, we must update the stamp-h file. dnl This file resides in the same directory as the config header dnl that is generated. We must strip everything past the first ":", dnl and everything past the last "/". AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>, <>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>, <>; do case " <<$>>CONFIG_HEADERS " in *" <<$>>am_file "*<<)>> echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx ;; esac am_indx=`expr "<<$>>am_indx" + 1` done<<>>dnl>>) changequote([,]))]) # serial 1 AC_DEFUN(AM_C_PROTOTYPES, [AC_REQUIRE([AM_PROG_CC_STDC]) AC_REQUIRE([AC_PROG_CPP]) AC_MSG_CHECKING([for function prototypes]) if test "$am_cv_prog_cc_stdc" != no; then AC_MSG_RESULT(yes) AC_DEFINE(PROTOTYPES,1,[Define if compiler has function prototypes]) U= ANSI2KNR= else AC_MSG_RESULT(no) U=_ ANSI2KNR=./ansi2knr # Ensure some checks needed by ansi2knr itself. AC_HEADER_STDC AC_CHECK_HEADERS(string.h) fi AC_SUBST(U)dnl AC_SUBST(ANSI2KNR)dnl ]) # serial 1 # @defmac AC_PROG_CC_STDC # @maindex PROG_CC_STDC # @ovindex CC # If the C compiler in not in ANSI C mode by default, try to add an option # to output variable @code{CC} to make it so. This macro tries various # options that select ANSI C on some system or another. It considers the # compiler to be in ANSI C mode if it handles function prototypes correctly. # # If you use this macro, you should check after calling it whether the C # compiler has been set to accept ANSI C; if not, the shell variable # @code{am_cv_prog_cc_stdc} is set to @samp{no}. If you wrote your source # code in ANSI C, you can make an un-ANSIfied copy of it by using the # program @code{ansi2knr}, which comes with Ghostscript. # @end defmac AC_DEFUN(AM_PROG_CC_STDC, [AC_REQUIRE([AC_PROG_CC]) AC_BEFORE([$0], [AC_C_INLINE]) AC_BEFORE([$0], [AC_C_CONST]) dnl Force this before AC_PROG_CPP. Some cpp's, eg on HPUX, require dnl a magic option to avoid problems with ANSI preprocessor commands dnl like #elif. dnl FIXME: can't do this because then AC_AIX won't work due to a dnl circular dependency. dnl AC_BEFORE([$0], [AC_PROG_CPP]) AC_MSG_CHECKING(for ${CC-cc} option to accept ANSI C) AC_CACHE_VAL(am_cv_prog_cc_stdc, [am_cv_prog_cc_stdc=no ac_save_CC="$CC" # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" AC_TRY_COMPILE( [#include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; ], [ return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ], [am_cv_prog_cc_stdc="$ac_arg"; break]) done CC="$ac_save_CC" ]) if test -z "$am_cv_prog_cc_stdc"; then AC_MSG_RESULT([none needed]) else AC_MSG_RESULT($am_cv_prog_cc_stdc) fi case "x$am_cv_prog_cc_stdc" in x|xno) ;; *) CC="$CC $am_cv_prog_cc_stdc" ;; esac ]) # Macro to add for using GNU gettext. # Ulrich Drepper , 1995. # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # Please note that the actual code is *not* freely available. # serial 5 AC_DEFUN(AM_WITH_NLS, [AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE(nls, [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT($USE_NLS) AC_SUBST(USE_NLS) USE_INCLUDED_LIBINTL=no dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then AC_DEFINE(ENABLE_NLS) AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH(included-gettext, [ --with-included-gettext use the GNU gettext library included here], nls_cv_force_use_gnu_gettext=$withval, nls_cv_force_use_gnu_gettext=no) AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then dnl User does not insist on using GNU NLS library. Figure out what dnl to use. If gettext or catgets are available (in this order) we dnl use this. Else we have to fall back to GNU NLS library. dnl catgets is only used if permitted by option --with-catgets. nls_cv_header_intl= nls_cv_header_libgt= CATOBJEXT=NONE AC_CHECK_HEADER(libintl.h, [AC_CACHE_CHECK([for gettext in libc], gt_cv_func_gettext_libc, [AC_TRY_LINK([#include ], [return (int) gettext ("")], gt_cv_func_gettext_libc=yes, gt_cv_func_gettext_libc=no)]) if test "$gt_cv_func_gettext_libc" != "yes"; then AC_CHECK_LIB(intl, bindtextdomain, [AC_CACHE_CHECK([for gettext in libintl], gt_cv_func_gettext_libintl, [AC_CHECK_LIB(intl, gettext, gt_cv_func_gettext_libintl=yes, gt_cv_func_gettext_libintl=no)], gt_cv_func_gettext_libintl=no)]) fi if test "$gt_cv_func_gettext_libc" = "yes" \ || test "$gt_cv_func_gettext_libintl" = "yes"; then AC_DEFINE(HAVE_GETTEXT) AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl if test "$MSGFMT" != "no"; then AC_CHECK_FUNCS(dcgettext) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr], [CATOBJEXT=.gmo DATADIRNAME=share], [CATOBJEXT=.mo DATADIRNAME=lib]) INSTOBJEXT=.mo fi fi ]) if test "$CATOBJEXT" = "NONE"; then AC_MSG_CHECKING([whether catgets can be used]) AC_ARG_WITH(catgets, [ --with-catgets use catgets functions if available], nls_cv_use_catgets=$withval, nls_cv_use_catgets=no) AC_MSG_RESULT($nls_cv_use_catgets) if test "$nls_cv_use_catgets" = "yes"; then dnl No gettext in C library. Try catgets next. AC_CHECK_LIB(i, main) AC_CHECK_FUNC(catgets, [AC_DEFINE(HAVE_CATGETS) INTLOBJS="\$(CATOBJS)" AC_PATH_PROG(GENCAT, gencat, no)dnl if test "$GENCAT" != "no"; then AC_PATH_PROG(GMSGFMT, gmsgfmt, no) if test "$GMSGFMT" = "no"; then AM_PATH_PROG_WITH_TEST(GMSGFMT, msgfmt, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no) fi AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) USE_INCLUDED_LIBINTL=yes CATOBJEXT=.cat INSTOBJEXT=.cat DATADIRNAME=lib INTLDEPS='$(top_builddir)/intl/libintl.a' INTLLIBS=$INTLDEPS LIBS=`echo $LIBS | sed -e 's/-lintl//'` nls_cv_header_intl=intl/libintl.h nls_cv_header_libgt=intl/libgettext.h fi]) fi fi if test "$CATOBJEXT" = "NONE"; then dnl Neither gettext nor catgets in included in the C library. dnl Fall back on GNU gettext library. nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions used to generate GNU NLS library. INTLOBJS="\$(GETTOBJS)" AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], msgfmt) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) AC_SUBST(MSGFMT) USE_INCLUDED_LIBINTL=yes CATOBJEXT=.gmo INSTOBJEXT=.mo DATADIRNAME=share INTLDEPS='$(top_builddir)/intl/libintl.a' INTLLIBS=$INTLDEPS LIBS=`echo $LIBS | sed -e 's/-lintl//'` nls_cv_header_intl=intl/libintl.h nls_cv_header_libgt=intl/libgettext.h fi dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then dnl If it is no GNU xgettext we define it as : so that the dnl Makefiles still can work. if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else AC_MSG_RESULT( [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po else DATADIRNAME=share nls_cv_header_intl=intl/libintl.h nls_cv_header_libgt=intl/libgettext.h fi AC_LINK_FILES($nls_cv_header_libgt, $nls_cv_header_intl) AC_OUTPUT_COMMANDS( [case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac]) # If this is used in GNU gettext we have to set USE_NLS to `yes' # because some of the sources are only built for this goal. if test "$PACKAGE" = gettext; then USE_NLS=yes USE_INCLUDED_LIBINTL=yes fi dnl These rules are solely for the distribution goal. While doing this dnl we only have to keep exactly one list of the available catalogs dnl in configure.in. for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done dnl Make all variables we use known to autoconf. AC_SUBST(USE_INCLUDED_LIBINTL) AC_SUBST(CATALOGS) AC_SUBST(CATOBJEXT) AC_SUBST(DATADIRNAME) AC_SUBST(GMOFILES) AC_SUBST(INSTOBJEXT) AC_SUBST(INTLDEPS) AC_SUBST(INTLLIBS) AC_SUBST(INTLOBJS) AC_SUBST(POFILES) AC_SUBST(POSUB) ]) AC_DEFUN(AM_GNU_GETTEXT, [AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_RANLIB])dnl AC_REQUIRE([AC_ISC_POSIX])dnl AC_REQUIRE([AC_HEADER_STDC])dnl AC_REQUIRE([AC_C_CONST])dnl AC_REQUIRE([AC_C_INLINE])dnl AC_REQUIRE([AC_TYPE_OFF_T])dnl AC_REQUIRE([AC_TYPE_SIZE_T])dnl AC_REQUIRE([AC_FUNC_ALLOCA])dnl AC_REQUIRE([AC_FUNC_MMAP])dnl AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h string.h \ unistd.h sys/param.h]) AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp \ strdup __argz_count __argz_stringify __argz_next]) if test "${ac_cv_func_stpcpy+set}" != "set"; then AC_CHECK_FUNCS(stpcpy) fi if test "${ac_cv_func_stpcpy}" = "yes"; then AC_DEFINE(HAVE_STPCPY) fi AM_LC_MESSAGES AM_WITH_NLS if test "x$CATOBJEXT" != "x"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else AC_MSG_CHECKING(for catalogs to be installed) NEW_LINGUAS= for lang in ${LINGUAS=$ALL_LINGUAS}; do case "$ALL_LINGUAS" in *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;; esac done LINGUAS=$NEW_LINGUAS AC_MSG_RESULT($LINGUAS) fi dnl Construct list of names of catalog files to be constructed. if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi dnl The reference to in the installed file dnl must be resolved because we cannot expect the users of this dnl to define HAVE_LOCALE_H. if test $ac_cv_header_locale_h = yes; then INCLUDE_LOCALE_H="#include " else INCLUDE_LOCALE_H="\ /* The system does not provide the header . Take care yourself. */" fi AC_SUBST(INCLUDE_LOCALE_H) dnl Determine which catalog format we have (if any is needed) dnl For now we know about two different formats: dnl Linux libc-5 and the normal X/Open format test -d intl || mkdir intl if test "$CATOBJEXT" = ".cat"; then AC_CHECK_HEADER(linux/version.h, msgformat=linux, msgformat=xopen) dnl Transform the SED scripts while copying because some dumb SEDs dnl cannot handle comments. sed -e '/^#/d' $srcdir/intl/$msgformat-msg.sed > intl/po2msg.sed fi dnl po2tbl.sed is always needed. sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \ $srcdir/intl/po2tbl.sed.in > intl/po2tbl.sed dnl In the intl/Makefile.in we have a special dependency which makes dnl only sense for gettext. We comment this out for non-gettext dnl packages. if test "$PACKAGE" = "gettext"; then GT_NO="#NO#" GT_YES= else GT_NO= GT_YES="#YES#" fi AC_SUBST(GT_NO) AC_SUBST(GT_YES) dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly dnl find the mkinstalldirs script in another subdir but ($top_srcdir). dnl Try to locate is. MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi AC_SUBST(MKINSTALLDIRS) dnl *** For now the libtool support in intl/Makefile is not for real. l= AC_SUBST(l) dnl Generate list of files to be processed by xgettext which will dnl be included in po/Makefile. test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES ]) # Search path for a program which passes the given test. # Ulrich Drepper , 1996. # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # Please note that the actual code is *not* freely available. # serial 1 dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) AC_DEFUN(AM_PATH_PROG_WITH_TEST, [# Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in /*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in ifelse([$5], , $PATH, [$5]); do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test -n "[$]$1"; then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) # Check whether LC_MESSAGES is available in . # Ulrich Drepper , 1995. # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # Please note that the actual code is *not* freely available. # serial 1 AC_DEFUN(AM_LC_MESSAGES, [if test $ac_cv_header_locale_h = yes; then AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) if test $am_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES) fi fi]) lrzsz-0.12.21rc/config.guess 777 764 764 41602 6607440601 11031 #! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 93, 94, 95, 1996 Free Software Foundation, Inc. # # This file 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 of the License, 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. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Written by Per Bothner . # The master version of this file is at the FSF in /home/gd/gnu/lib. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit system type (host/target name). # # Only a few systems have been added to this list; please add others # (but try to keep the structure clean). # # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 8/24/94.) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15 # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in alpha:OSF1:*:*) # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//'` exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-cbm-sysv4 exit 0;; amiga:NetBSD:*:*) echo m68k-cbm-netbsd${UNAME_RELEASE} exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; Pyramid*:OSx*:*:*) if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; sun4*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit 0 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; atari*:NetBSD:*:*) echo m68k-atari-netbsd${UNAME_RELEASE} exit 0 ;; sun3*:NetBSD:*:*) echo m68k-sun-netbsd${UNAME_RELEASE} exit 0 ;; mac68k:NetBSD:*:*) echo m68k-apple-netbsd${UNAME_RELEASE} exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; mips:*:4*:UMIPS) echo mips-mips-riscos4sysv exit 0 ;; mips:*:5*:RISCos) echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88100 ] ; then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \ -o ${TARGET_BINARY_INTERFACE}x = x ] ; then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit 0 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit 0 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit 0 ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i[34]86:AIX:*:*) echo i386-ibm-aix exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then sed 's/^ //' << EOF >dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 rm -f dummy.c dummy echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit 0 ;; *:AIX:*:4) if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=4.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:*:*) echo rs6000-ibm-aix exit 0 ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit 0 ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit 0 ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; 9000/[3478]??:HP-UX:*:*) case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/7?? | 9000/8?[679] ) HP_ARCH=hppa1.1 ;; 9000/8?? ) HP_ARCH=hppa1.0 ;; esac HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) sed 's/^ //' << EOF >dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 rm -f dummy.c dummy echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit 0 ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; CRAY*X-MP:*:*:*) echo xmp-cray-unicos exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} exit 0 ;; CRAY*C90:*:*:*) echo c90-cray-unicos${UNAME_RELEASE} exit 0 ;; CRAY-2:*:*:*) echo cray2-cray-unicos exit 0 ;; hp3[0-9][05]:NetBSD:*:*) echo m68k-hp-netbsd${UNAME_RELEASE} exit 0 ;; i[34]86:BSD/386:*:* | *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; *:NetBSD:*:*) echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` exit 0 ;; i*:CYGWIN*:*) echo i386-unknown-cygwin32 exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin32 exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; *:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. ld_help_string=`ld --help 2>&1` if echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf_i[345]86"; then echo "${UNAME_MACHINE}-unknown-linux" ; exit 0 elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i[345]86linux"; then echo "${UNAME_MACHINE}-unknown-linuxaout" ; exit 0 elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i[345]86coff"; then echo "${UNAME_MACHINE}-unknown-linuxcoff" ; exit 0 elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68kelf"; then echo "${UNAME_MACHINE}-unknown-linux" ; exit 0 elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68klinux"; then echo "${UNAME_MACHINE}-unknown-linuxaout" ; exit 0 elif test "${UNAME_MACHINE}" = "alpha" ; then echo alpha-unknown-linux ; exit 0 else # Either a pre-BFD a.out linker (linuxoldld) or one that does not give us # useful --help. Gcc wants to distinguish between linuxoldld and linuxaout. test ! -d /usr/lib/ldscripts/. \ && echo "${UNAME_MACHINE}-unknown-linuxoldld" && exit 0 # Determine whether the default compiler is a.out or elf cat >dummy.c </dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0 rm -f dummy.c dummy fi ;; # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions # are messed up and put the nodename in both sysname and nodename. i[34]86:DYNIX/ptx:4*:*) echo i386-sequent-sysv4 exit 0 ;; i[34]86:*:4.*:* | i[34]86:SYSTEM_V:4.*:*) if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE} else echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; i[34]86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 echo ${UNAME_MACHINE}-unknown-sco$UNAME_REL else echo ${UNAME_MACHINE}-unknown-sysv32 fi exit 0 ;; Intel:Mach:3*:*) echo i386-unknown-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 exit 0 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit 0 ;; M680[234]0:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0) uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4.3 && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m680[234]0:LynxOS:2.[23]*:*) echo m68k-lynx-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; i[34]86:LynxOS:2.[23]*:*) echo i386-lynx-lynxos${UNAME_RELEASE} exit 0 ;; TSUNAMI:LynxOS:2.[23]*:*) echo sparc-lynx-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.[23]*:*) echo rs6000-lynx-lynxos${UNAME_RELEASE} exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; R3000:*System_V*:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 cat >dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; printf ("%s-next-nextstep%s\n", __ARCHITECTURE__, version==2 ? "2" : "3"); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-unknown-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) printf ("vax-dec-bsd\n"); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0 rm -f dummy.c dummy # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit 0 ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; c34*) echo c34-convex-bsd exit 0 ;; c38*) echo c38-convex-bsd exit 0 ;; c4*) echo c4-convex-bsd exit 0 ;; esac fi #echo '(Unable to guess system type)' 1>&2 exit 1 lrzsz-0.12.21rc/config.h.in 664 764 764 21246 6760042325 10535 /* config.h.in. Generated automatically from configure.in by autoheader. */ /* Define if on AIX 3. System headers sometimes define this. We just want to avoid a redefinition error message. */ #ifndef _ALL_SOURCE #undef _ALL_SOURCE #endif /* Define if using alloca.c. */ #undef C_ALLOCA /* Define to empty if the keyword does not work. */ #undef const /* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. This function is required for alloca.c support on those systems. */ #undef CRAY_STACKSEG_END /* Define if you have alloca, as a function or macro. */ #undef HAVE_ALLOCA /* Define if you have and it should be used (not on Ultrix). */ #undef HAVE_ALLOCA_H /* Define if you have a working `mmap' system call. */ #undef HAVE_MMAP /* Define if your struct stat has st_rdev. */ #undef HAVE_ST_RDEV /* Define as __inline if that's what the C compiler calls it. */ #undef inline /* Define if on MINIX. */ #undef _MINIX /* Define to `int' if doesn't define. */ #undef mode_t /* Define to `long' if doesn't define. */ #undef off_t /* Define if the system does not provide POSIX.1 features except with this defined. */ #undef _POSIX_1_SOURCE /* Define if you need to in order for stat and other things to work. */ #undef _POSIX_SOURCE /* Define as the return type of signal handlers (int or void). */ #undef RETSIGTYPE /* Define if the setvbuf function takes the buffering type as its second argument and the buffer pointer as the third, as on System V before release 3. */ #undef SETVBUF_REVERSED /* Define to `unsigned' if doesn't define. */ #undef size_t /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at run-time. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Define if your declares struct tm. */ #undef TM_IN_SYS_TIME /* define this if you have a reliable ftime function */ #undef HAVE_FTIME /* define this if you have the timezone variable */ #undef HAVE_TIMEZONE_VAR /* Define to 1 if NLS is requested. */ #undef ENABLE_NLS /* Define as 1 if you have catgets and don't want to use GNU gettext. */ #undef HAVE_CATGETS /* Define as 1 if you have gettext and don't want to use GNU gettext. */ #undef HAVE_GETTEXT /* Define if your locale.h file contains LC_MESSAGES. */ #undef HAVE_LC_MESSAGES /* Define to the name of the distribution. */ #undef PACKAGE /* The concatenation of the strings PACKAGE, "-", and VERSION. */ #undef PACKAGE_VERSION /* Define to the version of the distribution. */ #undef VERSION /* Define to 1 if you have the stpcpy function. */ #undef HAVE_STPCPY /* Define to 1 if your utime() takes struct utimbuf as second argument */ #undef HAVE_STRUCT_UTIMBUF /* Define to LOG_xxx (a syslog facility) if syslog() shall be used */ #undef ENABLE_SYSLOG /* Define to 1 if syslogging shall be forced */ #undef ENABLE_SYSLOG_FORCE /* Define to 1 if syslogging shall be default */ #undef ENABLE_SYSLOG_DEFAULT /* Define to 1 if lrz shall create directories if needed */ #undef ENABLE_MKDIR /* Define to public writable directory if you want this. Leave out the "'s */ #undef PUBDIR /* Define to 1 if you want support for the timesync protocol */ #undef ENABLE_TIMESYNC /* define to 1. we have a replacement function for it. */ #undef HAVE_STRERROR /* define to 1 if you want strict ANSI prototypes. will remove some extern x(); declarations. */ #undef STRICT_PROTOTYPES /* where the localedata hides */ /* #undef LOCALEDIR */ /* do your system libraries declare errno? */ #undef HAVE_ERRNO_DECLARATION /* define to type of speed_t (long?) */ #undef speed_t /* define this if you headers conflict */ #undef SYS_TIME_WITHOUT_SYS_SELECT /* define to type of socklen_t (int?) */ #undef socklen_t /* Define if you have the __argz_count function. */ #undef HAVE___ARGZ_COUNT /* Define if you have the __argz_next function. */ #undef HAVE___ARGZ_NEXT /* Define if you have the __argz_stringify function. */ #undef HAVE___ARGZ_STRINGIFY /* Define if you have the dcgettext function. */ #undef HAVE_DCGETTEXT /* Define if you have the getcwd function. */ #undef HAVE_GETCWD /* Define if you have the getpagesize function. */ #undef HAVE_GETPAGESIZE /* Define if you have the gettimeofday function. */ #undef HAVE_GETTIMEOFDAY /* Define if you have the memcpy function. */ #undef HAVE_MEMCPY /* Define if you have the mkdir function. */ #undef HAVE_MKDIR /* Define if you have the mktime function. */ #undef HAVE_MKTIME /* Define if you have the munmap function. */ #undef HAVE_MUNMAP /* Define if you have the putenv function. */ #undef HAVE_PUTENV /* Define if you have the rdchk function. */ #undef HAVE_RDCHK /* Define if you have the select function. */ #undef HAVE_SELECT /* Define if you have the setenv function. */ #undef HAVE_SETENV /* Define if you have the setlocale function. */ #undef HAVE_SETLOCALE /* Define if you have the settimeofday function. */ #undef HAVE_SETTIMEOFDAY /* Define if you have the siginterrupt function. */ #undef HAVE_SIGINTERRUPT /* Define if you have the stpcpy function. */ #undef HAVE_STPCPY /* Define if you have the strcasecmp function. */ #undef HAVE_STRCASECMP /* Define if you have the strchr function. */ #undef HAVE_STRCHR /* Define if you have the strdup function. */ #undef HAVE_STRDUP /* Define if you have the strerror function. */ #undef HAVE_STRERROR /* Define if you have the strftime function. */ #undef HAVE_STRFTIME /* Define if you have the strpbrk function. */ #undef HAVE_STRPBRK /* Define if you have the strstr function. */ #undef HAVE_STRSTR /* Define if you have the strtol function. */ #undef HAVE_STRTOL /* Define if you have the strtoul function. */ #undef HAVE_STRTOUL /* Define if you have the syslog function. */ #undef HAVE_SYSLOG /* Define if you have the times function. */ #undef HAVE_TIMES /* Define if you have the utime function. */ #undef HAVE_UTIME /* Define if you have the vasprintf function. */ #undef HAVE_VASPRINTF /* Define if you have the vprintf function. */ #undef HAVE_VPRINTF /* Define if you have the header file. */ #undef HAVE_ARGZ_H /* Define if you have the header file. */ #undef HAVE_ARPA_INET_H /* Define if you have the header file. */ #undef HAVE_FCNTL_H /* Define if you have the header file. */ #undef HAVE_LIMITS_H /* Define if you have the header file. */ #undef HAVE_LOCALE_H /* Define if you have the header file. */ #undef HAVE_MALLOC_H /* Define if you have the header file. */ #undef HAVE_NL_TYPES_H /* Define if you have the header file. */ #undef HAVE_SGTTY_H /* Define if you have the header file. */ #undef HAVE_STRING_H /* Define if you have the header file. */ #undef HAVE_STRINGS_H /* Define if you have the header file. */ #undef HAVE_SYS_IOCTL_H /* Define if you have the header file. */ #undef HAVE_SYS_MMAN_H /* Define if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define if you have the header file. */ #undef HAVE_SYS_SELECT_H /* Define if you have the header file. */ #undef HAVE_SYS_SYSLOG_H /* Define if you have the header file. */ #undef HAVE_SYS_TERMIO_H /* Define if you have the header file. */ #undef HAVE_SYS_TERMIOS_H /* Define if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define if you have the header file. */ #undef HAVE_SYS_TIMES_H /* Define if you have the header file. */ #undef HAVE_SYSLOG_H /* Define if you have the header file. */ #undef HAVE_TERMIO_H /* Define if you have the header file. */ #undef HAVE_TERMIOS_H /* Define if you have the header file. */ #undef HAVE_UNISTD_H /* Define if you have the header file. */ #undef HAVE_UTIME_H /* Define if you have the be library (-lbe). */ #undef HAVE_LIBBE /* Define if you have the i library (-li). */ #undef HAVE_LIBI /* Define if you have the nsl library (-lnsl). */ #undef HAVE_LIBNSL /* Define if you have the socket library (-lsocket). */ #undef HAVE_LIBSOCKET /* Name of package */ #undef PACKAGE /* Version number of package */ #undef VERSION /* Define if compiler has function prototypes */ #undef PROTOTYPES lrzsz-0.12.21rc/configure 755 764 764 442641 6760042314 10443 #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated automatically using autoconf version 2.13 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. # Defaults: ac_help= ac_default_prefix=/usr/local # Any additions from configure.in: ac_help="$ac_help --disable-timesync exclude support for timesync protocol" ac_help="$ac_help --enable-pubdir=/path include support for a public writeable directory" ac_help="$ac_help --disable-mkdir disable support for creating directories (lrz)" ac_help="$ac_help --enable-syslog=FACILITY,{force,default,optional} include syslogsupport" ac_help="$ac_help --disable-nls do not use Native Language Support" ac_help="$ac_help --with-included-gettext use the GNU gettext library included here" ac_help="$ac_help --with-catgets use catgets functions if available" # Initialize some variables set by options. # The variables have the same names as the options, with # dashes changed to underlines. build=NONE cache_file=./config.cache exec_prefix=NONE host=NONE no_create= nonopt=NONE no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= target=NONE verbose= x_includes=NONE x_libraries=NONE bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datadir='${prefix}/share' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' infodir='${prefix}/info' mandir='${prefix}/man' # Initialize some other variables. subdirs= MFLAGS= MAKEFLAGS= SHELL=${CONFIG_SHELL-/bin/sh} # Maximum number of lines to put in a shell here document. ac_max_here_lines=12 ac_prev= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" ac_prev= continue fi case "$ac_option" in -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; *) ac_optarg= ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case "$ac_option" in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir="$ac_optarg" ;; -build | --build | --buil | --bui | --bu) ac_prev=build ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build="$ac_optarg" ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file="$ac_optarg" ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) datadir="$ac_optarg" ;; -disable-* | --disable-*) ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } fi ac_feature=`echo $ac_feature| sed 's/-/_/g'` eval "enable_${ac_feature}=no" ;; -enable-* | --enable-*) ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } fi ac_feature=`echo $ac_feature| sed 's/-/_/g'` case "$ac_option" in *=*) ;; *) ac_optarg=yes ;; esac eval "enable_${ac_feature}='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix="$ac_optarg" ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he) # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat << EOF Usage: configure [options] [host] Options: [defaults in brackets after descriptions] Configuration: --cache-file=FILE cache test results in FILE --help print this message --no-create do not create output files --quiet, --silent do not print \`checking...' messages --version print the version of autoconf that created configure Directory and file names: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [same as prefix] --bindir=DIR user executables in DIR [EPREFIX/bin] --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] --libexecdir=DIR program executables in DIR [EPREFIX/libexec] --datadir=DIR read-only architecture-independent data in DIR [PREFIX/share] --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data in DIR [PREFIX/com] --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] --libdir=DIR object code libraries in DIR [EPREFIX/lib] --includedir=DIR C header files in DIR [PREFIX/include] --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] --infodir=DIR info documentation in DIR [PREFIX/info] --mandir=DIR man documentation in DIR [PREFIX/man] --srcdir=DIR find the sources in DIR [configure dir or ..] --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names EOF cat << EOF Host type: --build=BUILD configure for building on BUILD [BUILD=HOST] --host=HOST configure for HOST [guessed] --target=TARGET configure for TARGET [TARGET=HOST] Features and packages: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR EOF if test -n "$ac_help"; then echo "--enable and --with options recognized:$ac_help" fi exit 0 ;; -host | --host | --hos | --ho) ac_prev=host ;; -host=* | --host=* | --hos=* | --ho=*) host="$ac_optarg" ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir="$ac_optarg" ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir="$ac_optarg" ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir="$ac_optarg" ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir="$ac_optarg" ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ | --locals | --local | --loca | --loc | --lo) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) localstatedir="$ac_optarg" ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir="$ac_optarg" ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir="$ac_optarg" ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix="$ac_optarg" ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix="$ac_optarg" ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix="$ac_optarg" ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name="$ac_optarg" ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir="$ac_optarg" ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir="$ac_optarg" ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site="$ac_optarg" ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir="$ac_optarg" ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir="$ac_optarg" ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target="$ac_optarg" ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers) echo "configure generated by autoconf version 2.13" exit 0 ;; -with-* | --with-*) ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } fi ac_package=`echo $ac_package| sed 's/-/_/g'` case "$ac_option" in *=*) ;; *) ac_optarg=yes ;; esac eval "with_${ac_package}='$ac_optarg'" ;; -without-* | --without-*) ac_package=`echo $ac_option|sed -e 's/-*without-//'` # Reject names that are not valid shell variable names. if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } fi ac_package=`echo $ac_package| sed 's/-/_/g'` eval "with_${ac_package}=no" ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes="$ac_optarg" ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries="$ac_optarg" ;; -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } ;; *) if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then echo "configure: warning: $ac_option: invalid host type" 1>&2 fi if test "x$nonopt" != xNONE; then { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } fi nonopt="$ac_option" ;; esac done if test -n "$ac_prev"; then { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } fi trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 # File descriptor usage: # 0 standard input # 1 file creation # 2 errors and warnings # 3 some systems may open it to /dev/tty # 4 used on the Kubota Titan # 6 checking for... messages and results # 5 compiler messages saved in config.log if test "$silent" = yes; then exec 6>/dev/null else exec 6>&1 fi exec 5>./config.log echo "\ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. " 1>&5 # Strip out --no-create and --no-recursion so they do not pile up. # Also quote any args containing shell metacharacters. ac_configure_args= for ac_arg do case "$ac_arg" in -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c) ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) ac_configure_args="$ac_configure_args '$ac_arg'" ;; *) ac_configure_args="$ac_configure_args $ac_arg" ;; esac done # NLS nuisances. # Only set these to C if already set. These must not be set unconditionally # because not all systems understand e.g. LANG=C (notably SCO). # Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! # Non-C LC_CTYPE values break the ctype check. if test "${LANG+set}" = set; then LANG=C; export LANG; fi if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -rf conftest* confdefs.h # AIX cpp loses on an empty file, so make sure it contains at least a newline. echo > confdefs.h # A filename unique to this package, relative to the directory that # configure is in, which we can look for to find out if srcdir is correct. ac_unique_file=src/crctab.c # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. ac_prog=$0 ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } else { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } fi fi srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" else CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then echo "loading site script $ac_site_file" . "$ac_site_file" fi done if test -r "$cache_file"; then echo "loading cache $cache_file" . $cache_file else echo "creating cache $cache_file" > $cache_file fi ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross ac_exeext= ac_objext=o if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then ac_n= ac_c=' ' ac_t=' ' else ac_n=-n ac_c= ac_t= fi else ac_n= ac_c='\c' ac_t= fi ac_aux_dir= for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f $ac_dir/install.sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break fi done if test -z "$ac_aux_dir"; then { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } fi ac_config_guess=$ac_aux_dir/config.guess ac_config_sub=$ac_aux_dir/config.sub ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 echo "configure:570: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" for ac_dir in $PATH; do # Account for people who put trailing slashes in PATH elements. case "$ac_dir/" in /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do if test -f $ac_dir/$ac_prog; then if test $ac_prog = install && grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : else ac_cv_path_install="$ac_dir/$ac_prog -c" break 2 fi fi done ;; esac done IFS="$ac_save_IFS" fi if test "${ac_cv_path_install+set}" = set; then INSTALL="$ac_cv_path_install" else # As a last resort, use the slow shell script. We don't cache a # path for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the path is relative. INSTALL="$ac_install_sh" fi fi echo "$ac_t""$INSTALL" 1>&6 # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 echo "configure:623: checking whether build environment is sane" >&5 # Just in case sleep 1 echo timestamp > conftestfile # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t $srcdir/configure conftestfile` fi if test "$*" != "X $srcdir/configure conftestfile" \ && test "$*" != "X conftestfile $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". { echo "configure: error: ls -t appears to fail. Make sure there is not a broken alias in your environment" 1>&2; exit 1; } fi test "$2" = conftestfile ) then # Ok. : else { echo "configure: error: newly created file is older than distributed files! Check your system clock" 1>&2; exit 1; } fi rm -f conftest* echo "$ac_t""yes" 1>&6 if test "$program_transform_name" = s,x,x,; then program_transform_name= else # Double any \ or $. echo might interpret backslashes. cat <<\EOF_SED > conftestsed s,\\,\\\\,g; s,\$,$$,g EOF_SED program_transform_name="`echo $program_transform_name|sed -f conftestsed`" rm -f conftestsed fi test "$program_prefix" != NONE && program_transform_name="s,^,${program_prefix},; $program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s,\$\$,${program_suffix},; $program_transform_name" # sed with no file args requires a program. test "$program_transform_name" = "" && program_transform_name="s,x,x," echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 echo "configure:680: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftestmake <<\EOF all: @echo 'ac_maketemp="${MAKE}"' EOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` if test -n "$ac_maketemp"; then eval ac_cv_prog_make_${ac_make}_set=yes else eval ac_cv_prog_make_${ac_make}_set=no fi rm -f conftestmake fi if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then echo "$ac_t""yes" 1>&6 SET_MAKE= else echo "$ac_t""no" 1>&6 SET_MAKE="MAKE=${MAKE-make}" fi PACKAGE=lrzsz VERSION=0.12.21rc if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } fi cat >> confdefs.h <> confdefs.h <&6 echo "configure:727: checking for working aclocal" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (aclocal --version) < /dev/null > /dev/null 2>&1; then ACLOCAL=aclocal echo "$ac_t""found" 1>&6 else ACLOCAL="$missing_dir/missing aclocal" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 echo "configure:740: checking for working autoconf" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (autoconf --version) < /dev/null > /dev/null 2>&1; then AUTOCONF=autoconf echo "$ac_t""found" 1>&6 else AUTOCONF="$missing_dir/missing autoconf" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working automake""... $ac_c" 1>&6 echo "configure:753: checking for working automake" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (automake --version) < /dev/null > /dev/null 2>&1; then AUTOMAKE=automake echo "$ac_t""found" 1>&6 else AUTOMAKE="$missing_dir/missing automake" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 echo "configure:766: checking for working autoheader" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (autoheader --version) < /dev/null > /dev/null 2>&1; then AUTOHEADER=autoheader echo "$ac_t""found" 1>&6 else AUTOHEADER="$missing_dir/missing autoheader" echo "$ac_t""missing" 1>&6 fi echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 echo "configure:779: checking for working makeinfo" >&5 # Run test in a subshell; some versions of sh will print an error if # an executable is not found, even if stderr is redirected. # Redirect stdin to placate older versions of autoconf. Sigh. if (makeinfo --version) < /dev/null > /dev/null 2>&1; then MAKEINFO=makeinfo echo "$ac_t""found" 1>&6 else MAKEINFO="$missing_dir/missing makeinfo" echo "$ac_t""missing" 1>&6 fi PACKAGE_VERSION="$PACKAGE-$VERSION" cat >> confdefs.h <> confdefs.h <> confdefs.h <> confdefs.h <<\EOF #define ENABLE_TIMESYNC 1 EOF fi else cat >> confdefs.h <<\EOF #define ENABLE_TIMESYNC 1 EOF fi # Check whether --enable-pubdir or --disable-pubdir was given. if test "${enable_pubdir+set}" = set; then enableval="$enable_pubdir" if test "$enableval" = "no" ; then : else cat >> confdefs.h <> confdefs.h <<\EOF #define ENABLE_MKDIR 1 EOF fi else cat >> confdefs.h <<\EOF #define ENABLE_MKDIR 1 EOF fi # Check whether --enable-syslog or --disable-syslog was given. if test "${enable_syslog+set}" = set; then enableval="$enable_syslog" if test "$enableval" = "no" ; then : else case "$enableval" in *,*) level=`echo $enableval|sed -e 's/^.*,//'` fac=`echo $enableval|sed -e 's/,.*$//'` cat >> confdefs.h <> confdefs.h <<\EOF #define ENABLE_SYSLOG_FORCE 1 EOF else if test "$level" = "optional" ; then : else cat >> confdefs.h <<\EOF #define ENABLE_SYSLOG_DEFAULT 1 EOF fi fi fi else cat >> confdefs.h <<\EOF #define ENABLE_SYSLOG_DEFAULT 1 EOF lookup_facility=LOG_UUCP fi if test "x$CFLAGS" = x ; then old_cflags_empty=1; fi # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:930: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CC="gcc" break fi done IFS="$ac_save_ifs" fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:960: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_prog_rejected=no ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" break fi done IFS="$ac_save_ifs" if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# -gt 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift set dummy "$ac_dir/$ac_word" "$@" shift ac_cv_prog_CC="$@" fi fi fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi if test -z "$CC"; then case "`uname -s`" in *win32* | *WIN32*) # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1011: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_CC="cl" break fi done IFS="$ac_save_ifs" fi fi CC="$ac_cv_prog_CC" if test -n "$CC"; then echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi ;; esac fi test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 echo "configure:1043: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF #line 1054 "configure" #include "confdefs.h" main(){return(0);} EOF if { (eval echo configure:1059: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then ac_cv_prog_cc_cross=no else ac_cv_prog_cc_cross=yes fi else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 ac_cv_prog_cc_works=no fi rm -fr conftest* ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' cross_compiling=$ac_cv_prog_cc_cross echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 echo "configure:1085: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 echo "configure:1090: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no fi fi echo "$ac_t""$ac_cv_prog_gcc" 1>&6 if test $ac_cv_prog_gcc = yes; then GCC=yes else GCC= fi ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 echo "configure:1118: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else echo 'void f(){}' > conftest.c if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then ac_cv_prog_cc_g=yes else ac_cv_prog_cc_g=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 if test "$ac_test_CFLAGS" = set; then CFLAGS="$ac_save_CFLAGS" elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 echo "configure:1150: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else # This must be in double quotes, not single quotes, because CPP may get # substituted into the Makefile and "${CC-cc}" will confuse make. CPP="${CC-cc} -E" # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1171: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1188: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1205: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CPP=/lib/cpp fi rm -f conftest* fi rm -f conftest* fi rm -f conftest* ac_cv_prog_CPP="$CPP" fi CPP="$ac_cv_prog_CPP" else ac_cv_prog_CPP="$CPP" fi echo "$ac_t""$CPP" 1>&6 if test "x$GCC" = xyes ; then if test "x$old_cflags_empty" = x1 ; then if test "x$_CFLAGS_OWG" != x ; then # each environment should contain at least one helpful hack :-) CFLAGS="$_CFLAGS_OWG" fi fi fi if test $ac_cv_prog_gcc = yes; then echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6 echo "configure:1239: checking whether ${CC-cc} needs -traditional" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_pattern="Autoconf.*'x'" cat > conftest.$ac_ext < Autoconf TIOCGETP EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "$ac_pattern" >/dev/null 2>&1; then rm -rf conftest* ac_cv_prog_gcc_traditional=yes else rm -rf conftest* ac_cv_prog_gcc_traditional=no fi rm -f conftest* if test $ac_cv_prog_gcc_traditional = no; then cat > conftest.$ac_ext < Autoconf TCGETA EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "$ac_pattern" >/dev/null 2>&1; then rm -rf conftest* ac_cv_prog_gcc_traditional=yes fi rm -f conftest* fi fi echo "$ac_t""$ac_cv_prog_gcc_traditional" 1>&6 if test $ac_cv_prog_gcc_traditional = yes; then CC="$CC -traditional" fi fi # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:1287: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_prog_RANLIB="ranlib" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" fi fi RANLIB="$ac_cv_prog_RANLIB" if test -n "$RANLIB"; then echo "$ac_t""$RANLIB" 1>&6 else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 echo "configure:1315: checking for POSIXized ISC" >&5 if test -d /etc/conf/kconfig.d && grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 then echo "$ac_t""yes" 1>&6 ISC=yes # If later tests want to check for ISC. cat >> confdefs.h <<\EOF #define _POSIX_SOURCE 1 EOF if test "$GCC" = yes; then CC="$CC -posix" else CC="$CC -Xp" fi else echo "$ac_t""no" 1>&6 ISC= fi echo $ac_n "checking for AIX""... $ac_c" 1>&6 echo "configure:1336: checking for AIX" >&5 cat > conftest.$ac_ext <&5 | egrep "yes" >/dev/null 2>&1; then rm -rf conftest* echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF #define _ALL_SOURCE 1 EOF else rm -rf conftest* echo "$ac_t""no" 1>&6 fi rm -f conftest* ac_safe=`echo "minix/config.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for minix/config.h""... $ac_c" 1>&6 echo "configure:1361: checking for minix/config.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1371: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 MINIX=yes else echo "$ac_t""no" 1>&6 MINIX= fi if test "$MINIX" = yes; then cat >> confdefs.h <<\EOF #define _POSIX_SOURCE 1 EOF cat >> confdefs.h <<\EOF #define _POSIX_1_SOURCE 2 EOF cat >> confdefs.h <<\EOF #define _MINIX 1 EOF fi echo $ac_n "checking for ${CC-cc} option to accept ANSI C""... $ac_c" 1>&6 echo "configure:1412: checking for ${CC-cc} option to accept ANSI C" >&5 if eval "test \"`echo '$''{'am_cv_prog_cc_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else am_cv_prog_cc_stdc=no ac_save_CC="$CC" # Don't try gcc -ansi; that turns off useful extensions and # breaks some systems' header files. # AIX -qlanglvl=ansi # Ultrix and OSF/1 -std1 # HP-UX -Aa -D_HPUX_SOURCE # SVR4 -Xc -D__EXTENSIONS__ for ac_arg in "" -qlanglvl=ansi -std1 "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" cat > conftest.$ac_ext < #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main() { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } EOF if { (eval echo configure:1465: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* am_cv_prog_cc_stdc="$ac_arg"; break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* done CC="$ac_save_CC" fi if test -z "$am_cv_prog_cc_stdc"; then echo "$ac_t""none needed" 1>&6 else echo "$ac_t""$am_cv_prog_cc_stdc" 1>&6 fi case "x$am_cv_prog_cc_stdc" in x|xno) ;; *) CC="$CC $am_cv_prog_cc_stdc" ;; esac echo $ac_n "checking for function prototypes""... $ac_c" 1>&6 echo "configure:1491: checking for function prototypes" >&5 if test "$am_cv_prog_cc_stdc" != no; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define PROTOTYPES 1 EOF U= ANSI2KNR= else echo "$ac_t""no" 1>&6 U=_ ANSI2KNR=./ansi2knr # Ensure some checks needed by ansi2knr itself. echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 echo "configure:1504: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include #include #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1517: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* ac_cv_header_stdc=yes else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "memchr" >/dev/null 2>&1; then : else rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "free" >/dev/null 2>&1; then : else rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') #define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF if { (eval echo configure:1584: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_header_stdc=no fi rm -fr conftest* fi fi fi echo "$ac_t""$ac_cv_header_stdc" 1>&6 if test $ac_cv_header_stdc = yes; then cat >> confdefs.h <<\EOF #define STDC_HEADERS 1 EOF fi for ac_hdr in string.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:1611: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1621: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done fi echo $ac_n "checking for working const""... $ac_c" 1>&6 echo "configure:1650: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; } ; return 0; } EOF if { (eval echo configure:1704: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_c_const=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_c_const" 1>&6 if test $ac_cv_c_const = no; then cat >> confdefs.h <<\EOF #define const EOF fi echo $ac_n "checking for inline""... $ac_c" 1>&6 echo "configure:1725: checking for inline" >&5 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_inline=$ac_kw; break else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -f conftest* done fi echo "$ac_t""$ac_cv_c_inline" 1>&6 case "$ac_cv_c_inline" in inline | yes) ;; no) cat >> confdefs.h <<\EOF #define inline EOF ;; *) cat >> confdefs.h <> confdefs.h <<\EOF #define STRICT_PROTOTYPES 1 EOF ;; esac echo $ac_n "checking for syslog in -lsocket""... $ac_c" 1>&6 echo "configure:1790: checking for syslog in -lsocket" >&5 ac_lib_var=`echo socket'_'syslog | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo socket | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 fi echo $ac_n "checking for syslog in -lbe""... $ac_c" 1>&6 echo "configure:1837: checking for syslog in -lbe" >&5 ac_lib_var=`echo be'_'syslog | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lbe $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo be | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 fi echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6 echo "configure:1884: checking for gethostbyname in -lnsl" >&5 ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lnsl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo nsl | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 fi echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 echo "configure:1932: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include #include #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:1945: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* ac_cv_header_stdc=yes else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "memchr" >/dev/null 2>&1; then : else rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "free" >/dev/null 2>&1; then : else rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') #define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); exit (0); } EOF if { (eval echo configure:2012: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_header_stdc=no fi rm -fr conftest* fi fi fi echo "$ac_t""$ac_cv_header_stdc" 1>&6 if test $ac_cv_header_stdc = yes; then cat >> confdefs.h <<\EOF #define STDC_HEADERS 1 EOF fi for ac_hdr in fcntl.h limits.h sys/ioctl.h sys/time.h unistd.h sys/times.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:2039: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:2049: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done for ac_hdr in termios.h sys/termios.h termio.h sys/termio.h sgtty.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:2080: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:2090: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done for ac_hdr in termios.h sys/termios.h termio.h sys/termio.h sgtty.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:2120: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:2130: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done for ac_hdr in sys/mman.h utime.h syslog.h sys/syslog.h sys/param.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:2160: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:2170: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done for ac_hdr in sys/select.h strings.h arpa/inet.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:2200: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:2210: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done echo $ac_n "checking for size_t""... $ac_c" 1>&6 echo "configure:2238: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_size_t=yes else rm -rf conftest* ac_cv_type_size_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_size_t" 1>&6 if test $ac_cv_type_size_t = no; then cat >> confdefs.h <<\EOF #define size_t unsigned EOF fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 echo "configure:2271: checking for mode_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])mode_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_mode_t=yes else rm -rf conftest* ac_cv_type_mode_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_mode_t" 1>&6 if test $ac_cv_type_mode_t = no; then cat >> confdefs.h <<\EOF #define mode_t int EOF fi echo $ac_n "checking for off_t""... $ac_c" 1>&6 echo "configure:2304: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "(^|[^a-zA-Z_0-9])off_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_off_t=yes else rm -rf conftest* ac_cv_type_off_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_off_t" 1>&6 if test $ac_cv_type_off_t = no; then cat >> confdefs.h <<\EOF #define off_t long EOF fi echo $ac_n "checking for speed_t""... $ac_c" 1>&6 echo "configure:2338: checking for speed_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_speed_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS #include #include #endif #ifdef HAVE_TERMIOS_H #include #else #if defined(HAVE_SYS_TERMIOS_H) #include #else #if defined(HAVE_TERMIO_H) #include #else #if defined(HAVE_SYS_TERMIO_H) #include #else #if defined(HAVE_SGTTY_H) #include #else #error neither termio.h nor sgtty.h found. Cannot continue. */ #endif #endif #endif #endif #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "speed_t" >/dev/null 2>&1; then rm -rf conftest* ac_cv_type_speed_t=yes else rm -rf conftest* ac_cv_type_speed_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_speed_t" 1>&6 if test $ac_cv_type_speed_t = no; then cat >> confdefs.h <<\EOF #define speed_t long EOF fi echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 echo "configure:2393: checking for st_rdev in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include int main() { struct stat s; s.st_rdev; ; return 0; } EOF if { (eval echo configure:2406: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_rdev=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_struct_st_rdev=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_struct_st_rdev" 1>&6 if test $ac_cv_struct_st_rdev = yes; then cat >> confdefs.h <<\EOF #define HAVE_ST_RDEV 1 EOF fi echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 echo "configure:2427: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include #include int main() { struct tm *tp; ; return 0; } EOF if { (eval echo configure:2441: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_header_time=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_header_time" 1>&6 if test $ac_cv_header_time = yes; then cat >> confdefs.h <<\EOF #define TIME_WITH_SYS_TIME 1 EOF fi echo $ac_n "checking for socklen_t""... $ac_c" 1>&6 echo "configure:2463: checking for socklen_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_socklen_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include #if STDC_HEADERS #include #include #endif int main() { socklen_t x=0;return x; ; return 0; } EOF if { (eval echo configure:2484: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_socklen_t=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_type_socklen_t=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_socklen_t" 1>&6 if test $ac_cv_type_socklen_t = no; then cat >> confdefs.h <<\EOF #define socklen_t int EOF cat >> confdefs.h <<\EOF #define socklen_t int EOF fi echo $ac_n "checking whether sys/time.h and sys/select.h may both be included""... $ac_c" 1>&6 echo "configure:2509: checking whether sys/time.h and sys/select.h may both be included" >&5 if eval "test \"`echo '$''{'lrzsz_cv_header_sys_select'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include #include int main() { struct tm *tp; ; return 0; } EOF if { (eval echo configure:2523: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* lrzsz_cv_header_sys_select=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* lrzsz_cv_header_sys_select=no fi rm -f conftest* fi echo "$ac_t""$lrzsz_cv_header_sys_select" 1>&6 if test $lrzsz_cv_header_sys_select = no; then cat >> confdefs.h <<\EOF #define SYS_TIME_WITHOUT_SYS_SELECT 1 EOF fi echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6 echo "configure:2544: checking whether struct tm is in sys/time.h or time.h" >&5 if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include int main() { struct tm *tp; tp->tm_sec; ; return 0; } EOF if { (eval echo configure:2557: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm=time.h else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_struct_tm=sys/time.h fi rm -f conftest* fi echo "$ac_t""$ac_cv_struct_tm" 1>&6 if test $ac_cv_struct_tm = sys/time.h; then cat >> confdefs.h <<\EOF #define TM_IN_SYS_TIME 1 EOF fi echo $ac_n "checking for errno declaration""... $ac_c" 1>&6 echo "configure:2579: checking for errno declaration" >&5 if eval "test \"`echo '$''{'lrzsz_cv_decl_errno'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { int i = errno; errno = 1; ; return 0; } EOF if { (eval echo configure:2591: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* lrzsz_cv_decl_errno=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* lrzsz_cv_decl_errno=no fi rm -f conftest* fi echo "$ac_t""$lrzsz_cv_decl_errno" 1>&6 if test $lrzsz_cv_decl_errno = yes; then cat >> confdefs.h <<\EOF #define HAVE_ERRNO_DECLARATION 1 EOF fi if test $cross_compiling = no ; then echo $ac_n "checking whether setvbuf arguments are reversed""... $ac_c" 1>&6 echo "configure:2614: checking whether setvbuf arguments are reversed" >&5 if eval "test \"`echo '$''{'ac_cv_func_setvbuf_reversed'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; } else cat > conftest.$ac_ext < /* If setvbuf has the reversed format, exit 0. */ main () { /* This call has the arguments reversed. A reversed system may check and see that the address of main is not _IOLBF, _IONBF, or _IOFBF, and return nonzero. */ if (setvbuf(stdout, _IOLBF, (char *) main, BUFSIZ) != 0) exit(1); putc('\r', stdout); exit(0); /* Non-reversed systems segv here. */ } EOF if { (eval echo configure:2636: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_setvbuf_reversed=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_func_setvbuf_reversed=no fi rm -fr conftest* fi rm -f core core.* *.core fi echo "$ac_t""$ac_cv_func_setvbuf_reversed" 1>&6 if test $ac_cv_func_setvbuf_reversed = yes; then cat >> confdefs.h <<\EOF #define SETVBUF_REVERSED 1 EOF fi fi echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 echo "configure:2661: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include #ifdef signal #undef signal #endif #ifdef __cplusplus extern "C" void (*signal (int, void (*)(int)))(int); #else void (*signal ()) (); #endif int main() { int i; ; return 0; } EOF if { (eval echo configure:2683: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_type_signal=int fi rm -f conftest* fi echo "$ac_t""$ac_cv_type_signal" 1>&6 cat >> confdefs.h <&6 echo "configure:2705: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:2715: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done for ac_func in getpagesize do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:2744: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:2772: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 fi done echo $ac_n "checking for working mmap""... $ac_c" 1>&6 echo "configure:2797: checking for working mmap" >&5 if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_func_mmap_fixed_mapped=no else cat > conftest.$ac_ext < #include #include /* This mess was copied from the GNU getpagesize.h. */ #ifndef HAVE_GETPAGESIZE # ifdef HAVE_UNISTD_H # include # endif /* Assume that all systems that can run configure have sys/param.h. */ # ifndef HAVE_SYS_PARAM_H # define HAVE_SYS_PARAM_H 1 # endif # ifdef _SC_PAGESIZE # define getpagesize() sysconf(_SC_PAGESIZE) # else /* no _SC_PAGESIZE */ # ifdef HAVE_SYS_PARAM_H # include # ifdef EXEC_PAGESIZE # define getpagesize() EXEC_PAGESIZE # else /* no EXEC_PAGESIZE */ # ifdef NBPG # define getpagesize() NBPG * CLSIZE # ifndef CLSIZE # define CLSIZE 1 # endif /* no CLSIZE */ # else /* no NBPG */ # ifdef NBPC # define getpagesize() NBPC # else /* no NBPC */ # ifdef PAGESIZE # define getpagesize() PAGESIZE # endif /* PAGESIZE */ # endif /* no NBPC */ # endif /* no NBPG */ # endif /* no EXEC_PAGESIZE */ # else /* no HAVE_SYS_PARAM_H */ # define getpagesize() 8192 /* punt totally */ # endif /* no HAVE_SYS_PARAM_H */ # endif /* no _SC_PAGESIZE */ #endif /* no HAVE_GETPAGESIZE */ #ifdef __cplusplus extern "C" { void *malloc(unsigned); } #else char *malloc(); #endif int main() { char *data, *data2, *data3; int i, pagesize; int fd; pagesize = getpagesize(); /* * First, make a file with some known garbage in it. */ data = malloc(pagesize); if (!data) exit(1); for (i = 0; i < pagesize; ++i) *(data + i) = rand(); umask(0); fd = creat("conftestmmap", 0600); if (fd < 0) exit(1); if (write(fd, data, pagesize) != pagesize) exit(1); close(fd); /* * Next, try to mmap the file at a fixed address which * already has something else allocated at it. If we can, * also make sure that we see the same garbage. */ fd = open("conftestmmap", O_RDWR); if (fd < 0) exit(1); data2 = malloc(2 * pagesize); if (!data2) exit(1); data2 += (pagesize - ((int) data2 & (pagesize - 1))) & (pagesize - 1); if (data2 != mmap(data2, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, fd, 0L)) exit(1); for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data2 + i)) exit(1); /* * Finally, make sure that changes to the mapped area * do not percolate back to the file as seen by read(). * (This is a bug on some variants of i386 svr4.0.) */ for (i = 0; i < pagesize; ++i) *(data2 + i) = *(data2 + i) + 1; data3 = malloc(pagesize); if (!data3) exit(1); if (read(fd, data3, pagesize) != pagesize) exit(1); for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data3 + i)) exit(1); close(fd); unlink("conftestmmap"); exit(0); } EOF if { (eval echo configure:2945: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_mmap_fixed_mapped=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_func_mmap_fixed_mapped=no fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_func_mmap_fixed_mapped" 1>&6 if test $ac_cv_func_mmap_fixed_mapped = yes; then cat >> confdefs.h <<\EOF #define HAVE_MMAP 1 EOF fi # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6 echo "configure:2970: checking for working alloca.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { char *p = alloca(2 * sizeof(int)); ; return 0; } EOF if { (eval echo configure:2982: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_header_alloca_h=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_header_alloca_h=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_header_alloca_h" 1>&6 if test $ac_cv_header_alloca_h = yes; then cat >> confdefs.h <<\EOF #define HAVE_ALLOCA_H 1 EOF fi echo $ac_n "checking for alloca""... $ac_c" 1>&6 echo "configure:3003: checking for alloca" >&5 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < # define alloca _alloca # else # if HAVE_ALLOCA_H # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ char *alloca (); # endif # endif # endif # endif #endif int main() { char *p = (char *) alloca(1); ; return 0; } EOF if { (eval echo configure:3036: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* ac_cv_func_alloca_works=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* ac_cv_func_alloca_works=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_func_alloca_works" 1>&6 if test $ac_cv_func_alloca_works = yes; then cat >> confdefs.h <<\EOF #define HAVE_ALLOCA 1 EOF fi if test $ac_cv_func_alloca_works = no; then # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=alloca.${ac_objext} cat >> confdefs.h <<\EOF #define C_ALLOCA 1 EOF echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 echo "configure:3068: checking whether alloca needs Cray hooks" >&5 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5 | egrep "webecray" >/dev/null 2>&1; then rm -rf conftest* ac_cv_os_cray=yes else rm -rf conftest* ac_cv_os_cray=no fi rm -f conftest* fi echo "$ac_t""$ac_cv_os_cray" 1>&6 if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:3098: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:3126: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <&6 fi done fi echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 echo "configure:3153: checking stack direction for C alloca" >&5 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then ac_cv_c_stack_direction=0 else cat > conftest.$ac_ext < addr) ? 1 : -1; } main () { exit (find_stack_direction() < 0); } EOF if { (eval echo configure:3180: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_c_stack_direction=1 else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* ac_cv_c_stack_direction=-1 fi rm -fr conftest* fi fi echo "$ac_t""$ac_cv_c_stack_direction" 1>&6 cat >> confdefs.h < conftest.$ac_ext < EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "struct.*utimbuf" >/dev/null 2>&1; then rm -rf conftest* cat >> confdefs.h <<\EOF #define HAVE_STRUCT_UTIMBUF 1 EOF fi rm -f conftest* for ac_func in gettimeofday settimeofday do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:3220: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:3248: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 fi done for ac_func in strchr memcpy select vprintf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:3275: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:3303: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 fi done for ac_func in times rdchk utime syslog siginterrupt do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:3330: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:3358: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 fi done for ac_func in mkdir mktime strerror strstr strdup strtoul strtol strpbrk do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:3385: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:3413: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 LIBOBJS="$LIBOBJS ${ac_func}.${ac_objext}" fi done for ac_func in stpcpy strftime vasprintf do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:3442: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:3470: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 LIBOBJS="$LIBOBJS ${ac_func}.${ac_objext}" fi done echo $ac_n "checking for getopt_long""... $ac_c" 1>&6 echo "configure:3498: checking for getopt_long" >&5 if eval "test \"`echo '$''{'ac_cv_func_getopt_long'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char getopt_long(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_getopt_long) || defined (__stub___getopt_long) choke me #else getopt_long(); #endif ; return 0; } EOF if { (eval echo configure:3526: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_getopt_long=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_getopt_long=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'getopt_long`\" = yes"; then echo "$ac_t""yes" 1>&6 : else echo "$ac_t""no" 1>&6 LIBOBJS="$LIBOBJS getopt1.o getopt.o" fi cat >> confdefs.h <<\EOF #define HAVE_STRERROR 1 EOF echo $ac_n "checking for ftime""... $ac_c" 1>&6 echo "configure:3556: checking for ftime" >&5 if eval "test \"`echo '$''{'ac_cv_func_ftime'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char ftime(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_ftime) || defined (__stub___ftime) choke me #else ftime(); #endif ; return 0; } EOF if { (eval echo configure:3584: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_ftime=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_ftime=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'ftime`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking that ftime works correctly""... $ac_c" 1>&6 echo "configure:3599: checking that ftime works correctly" >&5 if eval "test \"`echo '$''{'lrzsz_cv_sys_ftime_ok'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else if test "$cross_compiling" = yes; then lrzsz_cv_sys_ftime_ok=runtime else cat > conftest.$ac_ext < #include #include main () { struct timeb s, slast; int c = 0; ftime (&slast); while (c < 10) { ftime (&s); if (s.time < slast.time || (s.time == slast.time && s.millitm < slast.millitm)) { fprintf(stderr,"s: %ld, %ld, slast: %ld, %ld\n", s.time,s.millitm, slast.time,slast.millitm); exit (1); } if (s.time != slast.time) ++c; slast.time = s.time; slast.millitm = s.millitm; } exit (0); } EOF if { (eval echo configure:3636: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then lrzsz_cv_sys_ftime_ok=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -fr conftest* lrzsz_cv_sys_ftime_ok=no fi rm -fr conftest* fi fi case $lrzsz_cv_sys_ftime_ok in yes) cat >> confdefs.h <<\EOF #define HAVE_FTIME 1 EOF echo "$ac_t""yes" 1>&6 ;; no) echo "$ac_t""no" 1>&6 echo "configure: warning: ftime seems to be buggy" 1>&2 ;; runtime) cat >> confdefs.h <<\EOF #define HAVE_FTIME 1 EOF echo "$ac_t""will check at run time" 1>&6 ;; esac else echo "$ac_t""no" 1>&6 fi echo $ac_n "checking for timezone variable""... $ac_c" 1>&6 echo "configure:3670: checking for timezone variable" >&5 if eval "test \"`echo '$''{'libquark_cv_var_timezone'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { return(int)(timezone/2); ; return 0; } EOF if { (eval echo configure:3683: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* libquark_cv_var_timezone=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* libquark_cv_var_timezone=no fi rm -f conftest* fi if test $libquark_cv_var_timezone = yes ; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_TIMEZONE_VAR 1 EOF else echo "$ac_t""no" 1>&6 fi if test "x$lookup_facility" = x ; then : else echo $ac_n "checking for $lookup_facility""... $ac_c" 1>&6 echo "configure:3709: checking for $lookup_facility" >&5 if eval "test \"`echo '$''{'lrzsz_cv_lookup_facility'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #else #include #endif #ifdef $lookup_facility ihave$lookup_facility #endif EOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | egrep "ihave$lookup_facility" >/dev/null 2>&1; then rm -rf conftest* lrzsz_cv_lookup_facility=yes else rm -rf conftest* lrzsz_cv_lookup_facility=no fi rm -f conftest* fi if test $lrzsz_cv_lookup_facility = yes ; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <> confdefs.h <<\EOF #define ENABLE_SYSLOG LOG_USER EOF echo "$ac_t""no" 1>&6 fi fi for ac_hdr in argz.h limits.h locale.h nl_types.h malloc.h string.h \ unistd.h sys/param.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 echo "configure:3767: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:3777: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` cat >> confdefs.h <&6 fi done for ac_func in getcwd munmap putenv setenv setlocale strchr strcasecmp \ strdup __argz_count __argz_stringify __argz_next do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:3807: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:3835: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 fi done if test "${ac_cv_func_stpcpy+set}" != "set"; then for ac_func in stpcpy do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:3864: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:3892: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 fi done fi if test "${ac_cv_func_stpcpy}" = "yes"; then cat >> confdefs.h <<\EOF #define HAVE_STPCPY 1 EOF fi if test $ac_cv_header_locale_h = yes; then echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6 echo "configure:3926: checking for LC_MESSAGES" >&5 if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { return LC_MESSAGES ; return 0; } EOF if { (eval echo configure:3938: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* am_cv_val_LC_MESSAGES=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* am_cv_val_LC_MESSAGES=no fi rm -f conftest* fi echo "$ac_t""$am_cv_val_LC_MESSAGES" 1>&6 if test $am_cv_val_LC_MESSAGES = yes; then cat >> confdefs.h <<\EOF #define HAVE_LC_MESSAGES 1 EOF fi fi echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6 echo "configure:3959: checking whether NLS is requested" >&5 # Check whether --enable-nls or --disable-nls was given. if test "${enable_nls+set}" = set; then enableval="$enable_nls" USE_NLS=$enableval else USE_NLS=yes fi echo "$ac_t""$USE_NLS" 1>&6 USE_INCLUDED_LIBINTL=no if test "$USE_NLS" = "yes"; then cat >> confdefs.h <<\EOF #define ENABLE_NLS 1 EOF echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6 echo "configure:3979: checking whether included gettext is requested" >&5 # Check whether --with-included-gettext or --without-included-gettext was given. if test "${with_included_gettext+set}" = set; then withval="$with_included_gettext" nls_cv_force_use_gnu_gettext=$withval else nls_cv_force_use_gnu_gettext=no fi echo "$ac_t""$nls_cv_force_use_gnu_gettext" 1>&6 nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then nls_cv_header_intl= nls_cv_header_libgt= CATOBJEXT=NONE ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for libintl.h""... $ac_c" 1>&6 echo "configure:3998: checking for libintl.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:4008: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for gettext in libc""... $ac_c" 1>&6 echo "configure:4025: checking for gettext in libc" >&5 if eval "test \"`echo '$''{'gt_cv_func_gettext_libc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { return (int) gettext ("") ; return 0; } EOF if { (eval echo configure:4037: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* gt_cv_func_gettext_libc=yes else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* gt_cv_func_gettext_libc=no fi rm -f conftest* fi echo "$ac_t""$gt_cv_func_gettext_libc" 1>&6 if test "$gt_cv_func_gettext_libc" != "yes"; then echo $ac_n "checking for bindtextdomain in -lintl""... $ac_c" 1>&6 echo "configure:4053: checking for bindtextdomain in -lintl" >&5 ac_lib_var=`echo intl'_'bindtextdomain | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lintl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 echo $ac_n "checking for gettext in libintl""... $ac_c" 1>&6 echo "configure:4088: checking for gettext in libintl" >&5 if eval "test \"`echo '$''{'gt_cv_func_gettext_libintl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else echo $ac_n "checking for gettext in -lintl""... $ac_c" 1>&6 echo "configure:4093: checking for gettext in -lintl" >&5 ac_lib_var=`echo intl'_'gettext | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-lintl $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 gt_cv_func_gettext_libintl=yes else echo "$ac_t""no" 1>&6 gt_cv_func_gettext_libintl=no fi fi echo "$ac_t""$gt_cv_func_gettext_libintl" 1>&6 else echo "$ac_t""no" 1>&6 fi fi if test "$gt_cv_func_gettext_libc" = "yes" \ || test "$gt_cv_func_gettext_libintl" = "yes"; then cat >> confdefs.h <<\EOF #define HAVE_GETTEXT 1 EOF # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:4151: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$MSGFMT" in /*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then ac_cv_path_MSGFMT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test -n "$MSGFMT"; then echo "$ac_t""$MSGFMT" 1>&6 else echo "$ac_t""no" 1>&6 fi if test "$MSGFMT" != "no"; then for ac_func in dcgettext do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:4185: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char $ac_func(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_$ac_func) || defined (__stub___$ac_func) choke me #else $ac_func(); #endif ; return 0; } EOF if { (eval echo configure:4213: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_$ac_func=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` cat >> confdefs.h <&6 fi done # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:4240: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$GMSGFMT" in /*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_GMSGFMT="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT="$ac_cv_path_GMSGFMT" if test -n "$GMSGFMT"; then echo "$ac_t""$GMSGFMT" 1>&6 else echo "$ac_t""no" 1>&6 fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:4276: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$XGETTEXT" in /*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then ac_cv_path_XGETTEXT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test -n "$XGETTEXT"; then echo "$ac_t""$XGETTEXT" 1>&6 else echo "$ac_t""no" 1>&6 fi cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* CATOBJEXT=.gmo DATADIRNAME=share else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* CATOBJEXT=.mo DATADIRNAME=lib fi rm -f conftest* INSTOBJEXT=.mo fi fi else echo "$ac_t""no" 1>&6 fi if test "$CATOBJEXT" = "NONE"; then echo $ac_n "checking whether catgets can be used""... $ac_c" 1>&6 echo "configure:4339: checking whether catgets can be used" >&5 # Check whether --with-catgets or --without-catgets was given. if test "${with_catgets+set}" = set; then withval="$with_catgets" nls_cv_use_catgets=$withval else nls_cv_use_catgets=no fi echo "$ac_t""$nls_cv_use_catgets" 1>&6 if test "$nls_cv_use_catgets" = "yes"; then echo $ac_n "checking for main in -li""... $ac_c" 1>&6 echo "configure:4352: checking for main in -li" >&5 ac_lib_var=`echo i'_'main | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_save_LIBS="$LIBS" LIBS="-li $LIBS" cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=no" fi rm -f conftest* LIBS="$ac_save_LIBS" fi if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then echo "$ac_t""yes" 1>&6 ac_tr_lib=HAVE_LIB`echo i | sed -e 's/[^a-zA-Z0-9_]/_/g' \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` cat >> confdefs.h <&6 fi echo $ac_n "checking for catgets""... $ac_c" 1>&6 echo "configure:4395: checking for catgets" >&5 if eval "test \"`echo '$''{'ac_cv_func_catgets'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 builtin and then its argument prototype would still apply. */ char catgets(); int main() { /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined (__stub_catgets) || defined (__stub___catgets) choke me #else catgets(); #endif ; return 0; } EOF if { (eval echo configure:4423: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_catgets=yes" else echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_func_catgets=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_func_'catgets`\" = yes"; then echo "$ac_t""yes" 1>&6 cat >> confdefs.h <<\EOF #define HAVE_CATGETS 1 EOF INTLOBJS="\$(CATOBJS)" # Extract the first word of "gencat", so it can be a program name with args. set dummy gencat; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:4445: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GENCAT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$GENCAT" in /*) ac_cv_path_GENCAT="$GENCAT" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_GENCAT="$GENCAT" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_GENCAT="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_GENCAT" && ac_cv_path_GENCAT="no" ;; esac fi GENCAT="$ac_cv_path_GENCAT" if test -n "$GENCAT"; then echo "$ac_t""$GENCAT" 1>&6 else echo "$ac_t""no" 1>&6 fi if test "$GENCAT" != "no"; then # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:4481: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$GMSGFMT" in /*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_GMSGFMT="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="no" ;; esac fi GMSGFMT="$ac_cv_path_GMSGFMT" if test -n "$GMSGFMT"; then echo "$ac_t""$GMSGFMT" 1>&6 else echo "$ac_t""no" 1>&6 fi if test "$GMSGFMT" = "no"; then # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:4518: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$GMSGFMT" in /*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then ac_cv_path_GMSGFMT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="no" ;; esac fi GMSGFMT="$ac_cv_path_GMSGFMT" if test -n "$GMSGFMT"; then echo "$ac_t""$GMSGFMT" 1>&6 else echo "$ac_t""no" 1>&6 fi fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:4553: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$XGETTEXT" in /*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then ac_cv_path_XGETTEXT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test -n "$XGETTEXT"; then echo "$ac_t""$XGETTEXT" 1>&6 else echo "$ac_t""no" 1>&6 fi USE_INCLUDED_LIBINTL=yes CATOBJEXT=.cat INSTOBJEXT=.cat DATADIRNAME=lib INTLDEPS='$(top_builddir)/intl/libintl.a' INTLLIBS=$INTLDEPS LIBS=`echo $LIBS | sed -e 's/-lintl//'` nls_cv_header_intl=intl/libintl.h nls_cv_header_libgt=intl/libgettext.h fi else echo "$ac_t""no" 1>&6 fi fi fi if test "$CATOBJEXT" = "NONE"; then nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then INTLOBJS="\$(GETTOBJS)" # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:4611: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$MSGFMT" in /*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then ac_cv_path_MSGFMT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="msgfmt" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test -n "$MSGFMT"; then echo "$ac_t""$MSGFMT" 1>&6 else echo "$ac_t""no" 1>&6 fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:4645: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$GMSGFMT" in /*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; ?:/*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a dos path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ac_cv_path_GMSGFMT="$ac_dir/$ac_word" break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT="$ac_cv_path_GMSGFMT" if test -n "$GMSGFMT"; then echo "$ac_t""$GMSGFMT" 1>&6 else echo "$ac_t""no" 1>&6 fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 echo "configure:4681: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else case "$XGETTEXT" in /*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then ac_cv_path_XGETTEXT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test -n "$XGETTEXT"; then echo "$ac_t""$XGETTEXT" 1>&6 else echo "$ac_t""no" 1>&6 fi USE_INCLUDED_LIBINTL=yes CATOBJEXT=.gmo INSTOBJEXT=.mo DATADIRNAME=share INTLDEPS='$(top_builddir)/intl/libintl.a' INTLLIBS=$INTLDEPS LIBS=`echo $LIBS | sed -e 's/-lintl//'` nls_cv_header_intl=intl/libintl.h nls_cv_header_libgt=intl/libgettext.h fi if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else echo "$ac_t""found xgettext program is not GNU xgettext; ignore it" 1>&6 XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po else DATADIRNAME=share nls_cv_header_intl=intl/libintl.h nls_cv_header_libgt=intl/libgettext.h fi # If this is used in GNU gettext we have to set USE_NLS to `yes' # because some of the sources are only built for this goal. if test "$PACKAGE" = gettext; then USE_NLS=yes USE_INCLUDED_LIBINTL=yes fi for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done if test "x$CATOBJEXT" != "x"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6 echo "configure:4774: checking for catalogs to be installed" >&5 NEW_LINGUAS= for lang in ${LINGUAS=$ALL_LINGUAS}; do case "$ALL_LINGUAS" in *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;; esac done LINGUAS=$NEW_LINGUAS echo "$ac_t""$LINGUAS" 1>&6 fi if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi if test $ac_cv_header_locale_h = yes; then INCLUDE_LOCALE_H="#include " else INCLUDE_LOCALE_H="\ /* The system does not provide the header . Take care yourself. */" fi test -d intl || mkdir intl if test "$CATOBJEXT" = ".cat"; then ac_safe=`echo "linux/version.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for linux/version.h""... $ac_c" 1>&6 echo "configure:4802: checking for linux/version.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" { (eval echo configure:4812: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* eval "ac_cv_header_$ac_safe=yes" else echo "$ac_err" >&5 echo "configure: failed program was:" >&5 cat conftest.$ac_ext >&5 rm -rf conftest* eval "ac_cv_header_$ac_safe=no" fi rm -f conftest* fi if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then echo "$ac_t""yes" 1>&6 msgformat=linux else echo "$ac_t""no" 1>&6 msgformat=xopen fi sed -e '/^#/d' $srcdir/intl/$msgformat-msg.sed > intl/po2msg.sed fi sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \ $srcdir/intl/po2tbl.sed.in > intl/po2tbl.sed if test "$PACKAGE" = "gettext"; then GT_NO="#NO#" GT_YES= else GT_NO= GT_YES="#YES#" fi MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi l= test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES cat >> confdefs.h < confcache <<\EOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs. It is not useful on other systems. # If it contains results you don't want to keep, you may remove or edit it. # # By default, configure uses ./config.cache as the cache file, # creating it if it does not exist already. You can give configure # the --cache-file=FILE option to use a different cache file; that is # what configure does when it calls configure scripts in # subdirectories, so they share the cache. # Giving --cache-file=/dev/null disables caching, for debugging configure. # config.status only pays attention to the cache file if you give it the # --recheck option to rerun configure. # EOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, don't put newlines in cache variables' values. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. (set) 2>&1 | case `(ac_space=' '; set | grep ac_space) 2>&1` in *ac_space=\ *) # `set' does not quote correctly, so add quotes (double-quote substitution # turns \\\\ into \\, and sed turns \\ into \). sed -n \ -e "s/'/'\\\\''/g" \ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' ;; esac >> confcache if cmp -s $cache_file confcache; then : else if test -w $cache_file; then echo "updating cache $cache_file" cat confcache > $cache_file else echo "not updating unwritable cache $cache_file" fi fi rm -f confcache trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Any assignment to VPATH causes Sun make to only execute # the first set of double-colon rules, so remove it if not needed. # If there is a colon in the path, we need to keep it. if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' fi trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 DEFS=-DHAVE_CONFIG_H # Without the "./", some shells look in PATH for config.status. : ${CONFIG_STATUS=./config.status} echo creating $CONFIG_STATUS rm -f $CONFIG_STATUS cat > $CONFIG_STATUS </dev/null | sed 1q`: # # $0 $ac_configure_args # # Compiler output produced by configure, useful for debugging # configure, is in ./config.log if it exists. ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" for ac_option do case "\$ac_option" in -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; -version | --version | --versio | --versi | --vers | --ver | --ve | --v) echo "$CONFIG_STATUS generated by autoconf version 2.13" exit 0 ;; -help | --help | --hel | --he | --h) echo "\$ac_cs_usage"; exit 0 ;; *) echo "\$ac_cs_usage"; exit 1 ;; esac done ac_given_srcdir=$srcdir ac_given_INSTALL="$INSTALL" trap 'rm -fr `echo "Makefile intl/Makefile lib/Makefile testsuite/Makefile \ man/Makefile po/Makefile.in src/Makefile Specfile systype \ src/lrzszbug config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF $ac_vpsub $extrasub s%@SHELL@%$SHELL%g s%@CFLAGS@%$CFLAGS%g s%@CPPFLAGS@%$CPPFLAGS%g s%@CXXFLAGS@%$CXXFLAGS%g s%@FFLAGS@%$FFLAGS%g s%@DEFS@%$DEFS%g s%@LDFLAGS@%$LDFLAGS%g s%@LIBS@%$LIBS%g s%@exec_prefix@%$exec_prefix%g s%@prefix@%$prefix%g s%@program_transform_name@%$program_transform_name%g s%@bindir@%$bindir%g s%@sbindir@%$sbindir%g s%@libexecdir@%$libexecdir%g s%@datadir@%$datadir%g s%@sysconfdir@%$sysconfdir%g s%@sharedstatedir@%$sharedstatedir%g s%@localstatedir@%$localstatedir%g s%@libdir@%$libdir%g s%@includedir@%$includedir%g s%@oldincludedir@%$oldincludedir%g s%@infodir@%$infodir%g s%@mandir@%$mandir%g s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g s%@INSTALL_DATA@%$INSTALL_DATA%g s%@PACKAGE@%$PACKAGE%g s%@VERSION@%$VERSION%g s%@ACLOCAL@%$ACLOCAL%g s%@AUTOCONF@%$AUTOCONF%g s%@AUTOMAKE@%$AUTOMAKE%g s%@AUTOHEADER@%$AUTOHEADER%g s%@MAKEINFO@%$MAKEINFO%g s%@SET_MAKE@%$SET_MAKE%g s%@PACKAGE_VERSION@%$PACKAGE_VERSION%g s%@ENABLE_TIMESYNC@%$ENABLE_TIMESYNC%g s%@CC@%$CC%g s%@CPP@%$CPP%g s%@RANLIB@%$RANLIB%g s%@U@%$U%g s%@ANSI2KNR@%$ANSI2KNR%g s%@ALLOCA@%$ALLOCA%g s%@LIBOBJS@%$LIBOBJS%g s%@USE_NLS@%$USE_NLS%g s%@MSGFMT@%$MSGFMT%g s%@GMSGFMT@%$GMSGFMT%g s%@XGETTEXT@%$XGETTEXT%g s%@GENCAT@%$GENCAT%g s%@USE_INCLUDED_LIBINTL@%$USE_INCLUDED_LIBINTL%g s%@CATALOGS@%$CATALOGS%g s%@CATOBJEXT@%$CATOBJEXT%g s%@DATADIRNAME@%$DATADIRNAME%g s%@GMOFILES@%$GMOFILES%g s%@INSTOBJEXT@%$INSTOBJEXT%g s%@INTLDEPS@%$INTLDEPS%g s%@INTLLIBS@%$INTLLIBS%g s%@INTLOBJS@%$INTLOBJS%g s%@POFILES@%$POFILES%g s%@POSUB@%$POSUB%g s%@INCLUDE_LOCALE_H@%$INCLUDE_LOCALE_H%g s%@GT_NO@%$GT_NO%g s%@GT_YES@%$GT_YES%g s%@MKINSTALLDIRS@%$MKINSTALLDIRS%g s%@l@%$l%g CEOF EOF cat >> $CONFIG_STATUS <<\EOF # Split the substitutions into bite-sized pieces for seds with # small command number limits, like on Digital OSF/1 and HP-UX. ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. ac_file=1 # Number of current file. ac_beg=1 # First line for current file. ac_end=$ac_max_sed_cmds # Line after last line for current file. ac_more_lines=: ac_sed_cmds="" while $ac_more_lines; do if test $ac_beg -gt 1; then sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file else sed "${ac_end}q" conftest.subs > conftest.s$ac_file fi if test ! -s conftest.s$ac_file; then ac_more_lines=false rm -f conftest.s$ac_file else if test -z "$ac_sed_cmds"; then ac_sed_cmds="sed -f conftest.s$ac_file" else ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" fi ac_file=`expr $ac_file + 1` ac_beg=$ac_end ac_end=`expr $ac_end + $ac_max_sed_cmds` fi done if test -z "$ac_sed_cmds"; then ac_sed_cmds=cat fi EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case "$ac_file" in *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; *) ac_file_in="${ac_file}.in" ;; esac # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. # Remove last slash and all that follows it. Not all systems have dirname. ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then # The file is in a subdirectory. test ! -d "$ac_dir" && mkdir "$ac_dir" ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" # A "../" for each directory in $ac_dir_suffix. ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` else ac_dir_suffix= ac_dots= fi case "$ac_given_srcdir" in .) srcdir=. if test -z "$ac_dots"; then top_srcdir=. else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; *) # Relative path. srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" top_srcdir="$ac_dots$ac_given_srcdir" ;; esac case "$ac_given_INSTALL" in [/$]*) INSTALL="$ac_given_INSTALL" ;; *) INSTALL="$ac_dots$ac_given_INSTALL" ;; esac echo creating "$ac_file" rm -f "$ac_file" configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." case "$ac_file" in *Makefile*) ac_comsub="1i\\ # $configure_input" ;; *) ac_comsub= ;; esac ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` sed -e "$ac_comsub s%@configure_input@%$configure_input%g s%@srcdir@%$srcdir%g s%@top_srcdir@%$top_srcdir%g s%@INSTALL@%$INSTALL%g " $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file fi; done rm -f conftest.s* # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where # NAME is the cpp macro being defined and VALUE is the value it is being given. # # ac_d sets the value in "#define NAME VALUE" lines. ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' ac_dC='\3' ac_dD='%g' # ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_uB='\([ ]\)%\1#\2define\3' ac_uC=' ' ac_uD='\4%g' # ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ac_eB='$%\1#\2define\3' ac_eC=' ' ac_eD='%g' if test "${CONFIG_HEADERS+set}" != set; then EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF fi for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case "$ac_file" in *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; *) ac_file_in="${ac_file}.in" ;; esac echo creating $ac_file rm -f conftest.frag conftest.in conftest.out ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` cat $ac_file_inputs > conftest.in EOF # Transform confdefs.h into a sed script conftest.vals that substitutes # the proper values into config.h.in to produce config.h. And first: # Protect against being on the right side of a sed subst in config.status. # Protect against being in an unquoted here document in config.status. rm -f conftest.vals cat > conftest.hdr <<\EOF s/[\\&%]/\\&/g s%[\\$`]%\\&%g s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp s%ac_d%ac_u%gp s%ac_u%ac_e%gp EOF sed -n -f conftest.hdr confdefs.h > conftest.vals rm -f conftest.hdr # This sed command replaces #undef with comments. This is necessary, for # example, in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. cat >> conftest.vals <<\EOF s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% EOF # Break up conftest.vals because some shells have a limit on # the size of here documents, and old seds have small limits too. rm -f conftest.tail while : do ac_lines=`grep -c . conftest.vals` # grep -c gives empty output for an empty file on some AIX systems. if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi # Write a limited-size here document to conftest.frag. echo ' cat > conftest.frag <> $CONFIG_STATUS sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS echo 'CEOF sed -f conftest.frag conftest.in > conftest.out rm -f conftest.in mv conftest.out conftest.in ' >> $CONFIG_STATUS sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail rm -f conftest.vals mv conftest.tail conftest.vals done rm -f conftest.vals cat >> $CONFIG_STATUS <<\EOF rm -f conftest.frag conftest.h echo "/* $ac_file. Generated automatically by configure. */" > conftest.h cat conftest.in >> conftest.h rm -f conftest.in if cmp -s $ac_file conftest.h 2>/dev/null; then echo "$ac_file is unchanged" rm -f conftest.h else # Remove last slash and all that follows it. Not all systems have dirname. ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then # The file is in a subdirectory. test ! -d "$ac_dir" && mkdir "$ac_dir" fi rm -f $ac_file mv conftest.h $ac_file fi fi; done EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF srcdir=$ac_given_srcdir while test -n "$ac_sources"; do set $ac_dests; ac_dest=$1; shift; ac_dests=$* set $ac_sources; ac_source=$1; shift; ac_sources=$* echo "linking $srcdir/$ac_source to $ac_dest" if test ! -r $srcdir/$ac_source; then { echo "configure: error: $srcdir/$ac_source: File not found" 1>&2; exit 1; } fi rm -f $ac_dest # Make relative symlinks. # Remove last slash and all that follows it. Not all systems have dirname. ac_dest_dir=`echo $ac_dest|sed 's%/[^/][^/]*$%%'` if test "$ac_dest_dir" != "$ac_dest" && test "$ac_dest_dir" != .; then # The dest file is in a subdirectory. test ! -d "$ac_dest_dir" && mkdir "$ac_dest_dir" ac_dest_dir_suffix="/`echo $ac_dest_dir|sed 's%^\./%%'`" # A "../" for each directory in $ac_dest_dir_suffix. ac_dots=`echo $ac_dest_dir_suffix|sed 's%/[^/]*%../%g'` else ac_dest_dir_suffix= ac_dots= fi case "$srcdir" in [/$]*) ac_rel_source="$srcdir/$ac_source" ;; *) ac_rel_source="$ac_dots$srcdir/$ac_source" ;; esac # Make a symlink if possible; otherwise try a hard link. if ln -s $ac_rel_source $ac_dest 2>/dev/null || ln $srcdir/$ac_source $ac_dest; then : else { echo "configure: error: can not link $ac_dest to $srcdir/$ac_source" 1>&2; exit 1; } fi done EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile; test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h exit 0 EOF chmod +x $CONFIG_STATUS rm -fr confdefs* $ac_clean_files test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 lrzsz-0.12.21rc/configure.in 644 764 764 15627 6760036625 11035 dnl Process this file with autoconf to produce a configure script. AC_INIT(src/crctab.c) AM_INIT_AUTOMAKE(lrzsz, 0.12.21rc) AM_CONFIG_HEADER(config.h) dnl AC_C_CROSS is in AC_PROG_CC since 2.12 AC_PREREQ(2.12) PACKAGE_VERSION="$PACKAGE-$VERSION" AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE") AC_DEFINE_UNQUOTED(VERSION, "$VERSION") AC_DEFINE_UNQUOTED(PACKAGE_VERSION, "$PACKAGE_VERSION") AC_SUBST(PACKAGE) AC_SUBST(VERSION) AC_SUBST(PACKAGE_VERSION) ALL_LINGUAS="de" AC_SUBST(PACKAGE) AC_SUBST(VERSION) changequote(,)dnl case $VERSION in [0-9]*.[0-9]*.[0-9]*) README_ALPHA="README-alpha";; *) README_ALPHA=;; esac changequote([, ])dnl AC_ARG_ENABLE(timesync, [--disable-timesync exclude support for timesync protocol], [if test "$enableval" = "no" ; then : else AC_DEFINE(ENABLE_TIMESYNC) fi], [AC_DEFINE(ENABLE_TIMESYNC)]) AC_SUBST(ENABLE_TIMESYNC) AC_ARG_ENABLE(pubdir, [--enable-pubdir=/path include support for a public writeable directory], [if test "$enableval" = "no" ; then : else AC_DEFINE_UNQUOTED(PUBDIR,"$enableval") fi]) AC_ARG_ENABLE(mkdir, [--disable-mkdir disable support for creating directories (lrz)], [if test "$enableval" = "no" ; then : else AC_DEFINE(ENABLE_MKDIR) fi], [AC_DEFINE(ENABLE_MKDIR)]) AC_ARG_ENABLE(syslog, [--enable-syslog=FACILITY,{force,default,optional} include syslogsupport], [ if test "$enableval" = "no" ; then : else case "$enableval" in *,*) level=`echo $enableval|sed -e 's/^.*,//'` fac=`echo $enableval|sed -e 's/,.*$//'` AC_DEFINE_UNQUOTED(ENABLE_SYSLOG,$fac) ;; *) lookup_facility=LOG_UUCP level="$enableval" ;; esac if test "$level" = "force" ; then AC_DEFINE(ENABLE_SYSLOG_FORCE) else if test "$level" = "optional" ; then : else AC_DEFINE(ENABLE_SYSLOG_DEFAULT) fi fi fi],[ AC_DEFINE(ENABLE_SYSLOG_DEFAULT) lookup_facility=LOG_UUCP ]) if test "x$CFLAGS" = x ; then old_cflags_empty=1; fi dnl Checks for programs. AC_PROG_CC AC_PROG_CPP if test "x$GCC" = xyes ; then if test "x$old_cflags_empty" = x1 ; then if test "x$_CFLAGS_OWG" != x ; then # each environment should contain at least one helpful hack :-) CFLAGS="$_CFLAGS_OWG" fi fi fi AC_PROG_GCC_TRADITIONAL dnl AC_PROG_INSTALL included in AM_INIT_AUTOMAKE dnl AC_PROG_MAKE_SET included in AM_INIT_AUTOMAKE AC_PROG_RANLIB AC_ISC_POSIX AC_AIX AC_MINIX AM_C_PROTOTYPES AC_C_CONST AC_C_INLINE if test `hostname` = tirka.ohse.de -a "$cross_compiling" = no ; then test $prefix = NONE && prefix=/usr if test -z "$CFLAGS" ; then case "$CC" in *gcc*) CFLAGS="-Wall -Wstrict-prototypes -Wmissing-prototypes" # -Wnested_externs entfernt wegen dcgettext() CFLAGS="$CFLAGS -Wpointer-arith -Wcast-qual -Wcast-align" CFLAGS="$CFLAGS -Winline -Wwrite-strings -Wshadow -Wmissing-braces" CFLAGS="$CFLAGS -Wcomments -fforce-mem -fforce-addr -O2 -m486 -pipe" CFLAGS="$CFLAGS -malign-loops=2 -malign-jumps=2 -malign-functions=2 -g3" ;; esac fi fi case "$CFLAGS" in *-Wstrict-prototypes*) AC_DEFINE(STRICT_PROTOTYPES) ;; esac dnl Checks for libraries. dnl SCO needs this. AC_CHECK_LIB(socket,syslog,,,) dnl BeOS needs this AC_CHECK_LIB(be,syslog,,,) dnl slowlartis needs this AC_CHECK_LIB(nsl,gethostbyname,,,) dnl Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS(fcntl.h limits.h sys/ioctl.h sys/time.h unistd.h sys/times.h) LRZSZ_HEADERS_TERM_IO AC_CHECK_HEADERS(termios.h sys/termios.h termio.h sys/termio.h sgtty.h) AC_CHECK_HEADERS(sys/mman.h utime.h syslog.h sys/syslog.h sys/param.h) AC_CHECK_HEADERS(sys/select.h strings.h arpa/inet.h) dnl Checks for typedefs, structures, and compiler characteristics. AC_TYPE_SIZE_T AC_TYPE_MODE_T AC_TYPE_OFF_T LRZSZ_TYPE_SPEED_T AC_STRUCT_ST_RDEV AC_HEADER_TIME UO_TYPE_SOCKLEN_T lrzsz_HEADER_SYS_SELECT AC_STRUCT_TM LRZSZ_ERRNO_DECL dnl Checks for library functions. if test $cross_compiling = no ; then AC_FUNC_SETVBUF_REVERSED fi AC_TYPE_SIGNAL dnl suggested by autoscan, but not really needed. dnl AC_FUNC_UTIME_NULL AC_FUNC_MMAP AC_FUNC_ALLOCA AC_EGREP_HEADER([struct.*utimbuf], utime.h, AC_DEFINE(HAVE_STRUCT_UTIMBUF)) AC_CHECK_FUNCS(gettimeofday settimeofday) AC_CHECK_FUNCS(strchr memcpy select vprintf) AC_CHECK_FUNCS(times rdchk utime syslog siginterrupt) AC_REPLACE_FUNCS(mkdir mktime strerror strstr strdup strtoul strtol strpbrk) AC_REPLACE_FUNCS(stpcpy strftime vasprintf) AC_REPLACE_GNU_GETOPT dnl for lib/error.c AC_DEFINE(HAVE_STRERROR) dnl special tests dnl this is taken from taylor uucp. dnl Check for the SCO buggy ftime; the code can cope with the bug, dnl though it would prefer not to, so if we're cross-configuring we dnl accept that ftime exists. AC_CHECK_FUNC(ftime, [AC_MSG_CHECKING(that ftime works correctly) AC_CACHE_VAL(lrzsz_cv_sys_ftime_ok, [AC_TRY_RUN([ #include #include #include main () { struct timeb s, slast; int c = 0; ftime (&slast); while (c < 10) { ftime (&s); if (s.time < slast.time || (s.time == slast.time && s.millitm < slast.millitm)) { fprintf(stderr,"s: %ld, %ld, slast: %ld, %ld\n", s.time,s.millitm, slast.time,slast.millitm); exit (1); } if (s.time != slast.time) ++c; slast.time = s.time; slast.millitm = s.millitm; } exit (0); } ], lrzsz_cv_sys_ftime_ok=yes, lrzsz_cv_sys_ftime_ok=no, lrzsz_cv_sys_ftime_ok=runtime)]) case $lrzsz_cv_sys_ftime_ok in yes) AC_DEFINE(HAVE_FTIME) AC_MSG_RESULT(yes) ;; no) AC_MSG_RESULT(no) AC_MSG_WARN(ftime seems to be buggy) ;; runtime) AC_DEFINE(HAVE_FTIME) AC_MSG_RESULT(will check at run time) ;; esac ]) dnl AC_MSG_CHECKING([for timezone variable]) AC_CACHE_VAL(libquark_cv_var_timezone,[ AC_TRY_LINK([#include ],[return(int)(timezone/2);], [libquark_cv_var_timezone=yes], [libquark_cv_var_timezone=no]) ]) if test $libquark_cv_var_timezone = yes ; then AC_MSG_RESULT(yes) AC_DEFINE(HAVE_TIMEZONE_VAR) else AC_MSG_RESULT(no) fi if test "x$lookup_facility" = x ; then : else AC_MSG_CHECKING([for $lookup_facility]) AC_CACHE_VAL(lrzsz_cv_lookup_facility,[ AC_EGREP_CPP(ihave$lookup_facility, [ #ifdef HAVE_SYSLOG_H #include #else #include #endif #ifdef $lookup_facility ihave$lookup_facility #endif ], lrzsz_cv_lookup_facility=yes, lrzsz_cv_lookup_facility=no) ]) if test $lrzsz_cv_lookup_facility = yes ; then AC_MSG_RESULT(yes) AC_DEFINE_UNQUOTED(ENABLE_SYSLOG,$lookup_facility) else AC_DEFINE(ENABLE_SYSLOG,LOG_USER) AC_MSG_RESULT(no) fi fi AC_SUBST(CFLAGS) AC_SUBST(LDFLAGS) AC_SUBST(LIBS) AM_GNU_GETTEXT AC_DEFINE_UNQUOTED(LOCALEDIR,"$prefix/$DATADIRNAME") dnl AC_LINK_FILES($nls_cv_header_libgt, $nls_cv_header_intl) AC_OUTPUT([Makefile intl/Makefile lib/Makefile testsuite/Makefile \ man/Makefile po/Makefile.in src/Makefile Specfile systype \ src/lrzszbug], [sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile; test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h]) lrzsz-0.12.21rc/install-sh 777 764 764 11243 6607440601 10513 #!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. # # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" tranformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 lrzsz-0.12.21rc/missing 777 764 764 11027 6607440601 10106 #! /bin/sh # Common stub for a few missing GNU programs while installing. # Copyright (C) 1996, 1997 Free Software Foundation, Inc. # Franc,ois Pinard , 1996. # 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. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi case "$1" in -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison touch file \`y.tab.c' makeinfo touch the output file yacc touch file \`y.tab.c'" ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing - GNU libit 0.0" ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; aclocal) echo 1>&2 "\ WARNING: \`$1' is missing on your system. It should be needed only if you modified \`acinclude.m4' or \`configure.in'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is missing on your system. It should be needed only if you modified \`configure.in'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is missing on your system. It should be needed only if you modified \`acconfig.h' or \`configure.in'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch config.h.in ;; automake) echo 1>&2 "\ WARNING: \`$1' is missing on your system. It should be needed only if you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print \ | sed 's/^\(.*\).am$/touch \1.in/' \ | sh ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." touch y.tab.c ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is missing on your system. It should be needed only if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` fi touch $file ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequirements for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 lrzsz-0.12.21rc/mkinstalldirs 777 764 764 1276 6607440601 11302 #! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Last modified: 1995-03-05 # Public domain errstatus=0 for file in ${1+"$@"} ; do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d in ${1+"$@"} ; do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" 1>&2 mkdir "$pathcomp" > /dev/null 2>&1 || lasterr=$? fi if test ! -d "$pathcomp"; then errstatus=$lasterr fi pathcomp="$pathcomp/" done done exit $errstatus lrzsz-0.12.21rc/systype.in 644 764 764 12124 6642657327 10570 #! /bin/sh CC="@CC@" CFLAGS="@CFLAGS@" GCC="@GCC@" srcdir=@srcdir@ # oper-:arch-:syst-:chip-:kern- # oper = operating system type; e.g., sunos-4.1.4 # arch = machine language; e.g., sparc # syst = which binaries can run; e.g., sun4 # chip = chip model; e.g., micro-2-80 # kern = kernel version; e.g., sun4m # dependence: arch --- chip # \ \ # oper --- syst --- kern # so, for example, syst is interpreted in light of oper, but chip is not. # anyway, no slashes, no extra colons, no uppercase letters. # the point of the extra -'s is to ease parsing: can add hierarchies later. # e.g., *:i386-*:*:pentium-*:* would handle pentium-100 as well as pentium, # and i386-486 (486s do have more instructions, you know) as well as i386. # the idea here is to include ALL useful available information. sys="`uname -s 2>/dev/null | tr '/:[A-Z]' '..[a-z]'`" if [ x"$sys" != x ] then unamer="`uname -r 2>/dev/null | tr /: ..`" unamem="`uname -m 2>/dev/null | tr /: ..`" unamev="`uname -v 2>/dev/null | tr /: ..`" case "$sys" in bsd.os) # in bsd 4.4, uname -v does not have useful info. # in bsd 4.4, uname -m is arch, not chip. oper="$sys-$unamer" arch="$unamem" syst="" chip="`sysctl -n hw.model 2>/dev/null`" kern="" ;; freebsd) # see above about bsd 4.4 oper="$sys-$unamer" arch="$unamem" syst="" chip="`sysctl -n hw.model 2>/dev/null`" # hopefully kern="" ;; netbsd) # see above about bsd 4.4 oper="$sys-$unamer" arch="$unamem" syst="" chip="`sysctl -n hw.model 2>/dev/null`" # hopefully kern="" ;; linux) # i'd really like to know what distribution the user has ... # as in bsd 4.4, uname -v does not have useful info. oper="$sys-$unamer" # not oper! syst="" chip="$unamem" case "$chip" in i386|i486|i586|i686) arch="i386" ;; alpha) arch="alpha" ;; esac ;; aix) # naturally IBM has to get uname -r and uname -v backwards. dorks. oper="$sys-$unamev-$unamer" arch="`arch 2>/dev/null | tr /: ..`" syst="" chip="$unamem" kern="" ;; sunos) oper="$sys-$unamer-$unamev" arch="`(uname -p 2>/dev/null || mach 2>/dev/null ) | tr /: ..`" syst="`arch 2>/dev/null | tr /: ..`" chip="$unamem" # this is wrong; is there any way to get the real info? kern="`arch -k 2>/dev/null | tr /: ..`" ;; unix_sv) oper="$sys-$unamer-$unamev" arch="`uname -m 2>/dev/null`" syst="" chip="$unamem" kern="" ;; beos) oper="$sys-$unamer-$unamev" case "$unamem" in *BePC*) arch="i386"; chip=""; if /bin/sysinfo -cpu 2>/dev/null >/dev/null ; then (/bin/sysinfo -cpu 2>/dev/null |grep PentiumPro >/dev/null) && chip=ppro; test "$chip" = "" && \ (/bin/sysinfo -cpu 2>/dev/null |grep Pentium >/dev/null) && chip=pentium; fi ;; esac ;; *) need_config_guess=1; ;; esac else need_config_guess=1; fi if test "x$need_config_guess" = x1 ; then cg=`$srcdir/config.guess` # cpu-company-system if test "x$cg" = x ; then # damned, config.guess does nothing if it doesn't support the # system. oper="`uname -s 2>/dev/null | tr '/:[A-Z]' '..[a-z]'`" chip="`uname -m 2>/dev/null | tr /: ..`" if test "x$oper" = x ; then oper="unknown" fi else # cpu-company-system # chip-useless-oper+version # i586-unknown-sco3.2v4.2 # m68k-hp-hpux9.00 # i486-unknown-linux chip="`echo $cg | sed s/-.*//`" oper="`echo $cg | sed s/.*-// | tr '[A-Z]' '[a-z]'`" case "$oper" in *[0-9]*) # sco3.2v4.2 # hpux9.00 x="`echo $oper|sed 's/[0-9].*//'`" y="`echo $oper|sed 's/^[a-z]*//'`" oper="$x-$y"; ;; *linux*) oper=linux-"`uname -r`" ;; esac fi fi case "$chip" in 80486) # let's try to be consistent here. (BSD/OS) chip=i486 ;; i486DX) # respect the hyphen hierarchy. (FreeBSD) chip=i486-dx ;; i486.DX2) # respect the hyphen hierarchy. (FreeBSD) chip=i486-dx2 ;; Intel.586) # no, you nitwits, there is no such chip. (NeXTStep) chip=pentium ;; i586) # no, you nitwits, there is no such chip. (Linux) chip=pentium # djb, stop bashing linux alone, bash to GNU people too ... # config.guess also does this! ;; i686) # STOP SAYING THAT! (Linux) chip=ppro esac if test "x$arch" = x ; then if test "x$chip" = i386 -o "x$chip" = i486 -o "x$chip" = "pentium" \ -o "x$chip" = "ppro" ; then arch="i386"; fi fi x=`echo "$oper-:$arch-:$syst-:$chip-:$kern-" | tr ' [A-Z]' '.[a-z]'` if test x"$@" = x ; then echo "Future @PACKAGE@ versions will include a list of systems this version" >&2 echo "was compiled under (that's what you send this message for). In case" >&2 echo "want to see a shorthand expression of your real name in this list" >&2 echo "you may provide it here:" >&2 echo "Realname: " >&2 read realname else realname="$@" fi echo # BeOS /bin/mail doesn't generate any header ... echo "" echo "SYS: $x" echo "PACKAGE: @PACKAGE@ @VERSION@" cc="`echo \"$CC\"|sed 's/ .*//'`" x=`$CC --version /dev/null` echo "CC: $cc $x" echo "CFLAGS: $CFLAGS" if test "x$realname" = x ; then : else echo "REALNAME: $realname" fi lrzsz-0.12.21rc/check.lrzsz 755 764 764 47271 6760035662 10712 #! /bin/sh testdir="testdir.lrzsz" srcdir="$1" if test $srcdir = . ; then srcdir=`pwd` fi if test $srcdir = .. ; then srcdir=`pwd`/.. fi objdir="$2" if test $objdir = . ; then objdir=`pwd` fi if test "x$3" = x ; then mode=all else mode=$3 fi #SZBUFSIZE="-B 524288" RZBUFSIZE="-B 524288" SZ="$objdir/src/lsz" RZ="$objdir/src/lrz" echo checking with srcdir = $1 and objdir = $2 # z_test_files: files to test zmodem with. # z8_test_files: files to test zmodem-8k with. Optional. # y_test_files: files to test ymodem with. # x_test_files: files to test xmodem with. Must be ascii, as we need the # ascii mode to remove the padding ^Zs. # generate list of testfiles z_test_files="" for i in $srcdir/src/l?z.c ; do z_test_files="$z_test_files $i" x_test_files="$x_test_files $i" done for i in $objdir/src/l?z ; do z_test_files="$z_test_files $i" y_test_files="$y_test_files $i" done rm -f $objdir/null1 $objdir/null2 touch $objdir/null1 $objdir/null2 x_test_files="$objdir/null1 $x_test_files" y_test_files="$objdir/null1 $y_test_files" z_test_files="$objdir/null1 $objdir/null2 $z_test_files" for i in /pub/gnu/emacs/emacs-2*.tar.gz ; do if test -f "$i" ; then z8_test_files="$z8_test_files $i" z_test_files="$z_test_files $i" fi done # change to tmp dir if test "x$TMPDIR" = x ; then cd /tmp else cd $TMPDIR || cd /tmp fi rm -rf $testdir mkdir $testdir exec 5>$testdir/error.log (mkfifo $testdir/pipe || mknod $testdir/pipe p) 2>&5 # test zmodem if test "$mode" = all -o "$mode" = z ; then echo "testing ZMODEM" mkdir $testdir/zmodem failed=0 ($SZ -q $SZBUFSIZE $z_test_files ) <$testdir/pipe | \ (cd $testdir/zmodem ; echo "123" >null1 ; exec $RZ -y $RZBUFSIZE $QUIET >>../pipe ) for i in $z_test_files ; do bn=`basename $i` cmp $i $testdir/zmodem/$bn if test $? -eq 0 ; then rm -f $testdir/zmodem/$bn else failed=1 fi done rmdir $testdir/zmodem 2>&5 if test $failed = 1 ; then echo "ZMODEM test failed" any_failure="$any_failure ZMODEM" fi fi # test zmodem framlen if test "$mode" = f ; then echo "testing ZMODEMframlen" mkdir $testdir/zmodem failed=0 ($SZ -q $SZBUFSIZE -l 128 $z_test_files ) <$testdir/pipe | \ (cd $testdir/zmodem ; exec $RZ $RZBUFSIZE $QUIET >>../pipe ) for i in $z_test_files ; do bn=`basename $i` cmp $i $testdir/zmodem/$bn if test $? -eq 0 ; then rm -f $testdir/zmodem/$bn else failed=1 fi done rmdir $testdir/zmodem 2>&5 if test $failed = 1 ; then echo "ZMODEM test failed" any_failure="$any_failure ZMODEM" fi fi # test zmodem-4k if test "$mode" = all -o "$mode" = z4 ; then echo "testing ZMODEM4K" mkdir $testdir/zmodem4k failed=0 ($SZ -q4 $SZBUFSIZE $z_test_files ) <$testdir/pipe | \ (cd $testdir/zmodem4k ; exec $RZ $RZBUFSIZE $QUIET >>../pipe ) for i in $z_test_files ; do bn=`basename $i` cmp $i $testdir/zmodem4k/$bn if test $? -eq 0 ; then rm -f $testdir/zmodem4k/$bn else failed=1 fi done rmdir $testdir/zmodem4k 2>&5 if test $failed = 1 ; then echo "ZMODEM4k test failed" any_failure="$any_failure ZMODEM4k" fi fi # test zmodem8k if test "$mode" = all -o "$mode" = z8 ; then # we test this only if we have something really large, because this is # we only case we can expect any differences if test "x$z8_test_files" = x ; then : else echo "testing ZMODEM8K" mkdir $testdir/zmodem8k failed=0 $SZ -q8OT $SZBUFSIZE $z8_test_files <$testdir/pipe | \ (cd $testdir/zmodem8k ; $RZ -O $RZBUFSIZE $QUIET >>../pipe ) for i in $z8_test_files ; do bn=`basename $i` cmp $i $testdir/zmodem8k/$bn if test $? -eq 0 ; then rm -f $testdir/zmodem8k/$bn else failed=1 fi done if test $failed = 1 ; then echo "ZMODEM8k test failed" any_failure="$any_failure ZMODEM8k" fi rmdir $testdir/zmodem8k 2>&5 fi fi if test "$mode" = all -o "$mode" = z8N ; then # we test this only if we have something really large, because this is # we only case we can expect any differences if test "x$z8_test_files" = x ; then : else echo "testing ZMODEM8K-NULL" mkdir $testdir/zmodem8k-NULL $SZ -q8OT $SZBUFSIZE $z8_test_files <$testdir/pipe | \ (cd $testdir/zmodem8k-NULL ; $RZ -DO $RZBUFSIZE $QUIET >>../pipe ) rmdir $testdir/zmodem8k-NULL 2>&5 fi fi # out-of-band tcp if test "$mode" = tcpo ; then echo "testing ZMODEMtcpo" mkdir $testdir/zmodemtcpo failed=0 $SZ --tcp-server -q $SZBUFSIZE $z_test_files | \ perl -e '$|=1; while(<>) {if (/^connect with .* "(.*)"/) {print $1 . "\n";}}' | ( cd $testdir/zmodemtcpo ; xargs -l1 $RZ $RZBUFSIZE -vv --tcp-client ) for i in $z_test_files ; do bn=`basename $i` cmp $i $testdir/zmodemtcpo/$bn if test $? -eq 0 ; then rm -f $testdir/zmodemtcpo/$bn else failed=1 fi done rmdir $testdir/zmodemtcpo 2>&5 if test $failed = 1 ; then echo "ZMODEMtcpo test failed" any_failure="$any_failure ZMODEMtcpo" fi fi if test "$mode" = error ; then # we test this only if we have something really large, because this is # we only case we can expect any differences if test "x$y_test_files" = x ; then : else echo "testing error, lsz" mkdir $testdir/error.lsz failed=0 # strace -vs 128 -o out $SZ -8 -vvvvvvvv $SZBUFSIZE $y_test_files <$testdir/pipe | \ $SZ -8q $SZBUFSIZE $y_test_files <$testdir/pipe | \ (cd $testdir/error.lsz ; $RZ --errors 32768 $RZBUFSIZE $QUIET >>../pipe 2>/dev/null) for i in $y_test_files ; do bn=`basename $i` cmp $i $testdir/error.lsz/$bn if test $? -eq 0 ; then rm -f $testdir/error.lsz/$bn else failed=1 fi done if test $failed = 1 ; then echo "error test failed" any_failure="$any_failure error.lsz" fi rmdir $testdir/error.lsz 2>&5 # omen zmodem has a really bad error behaviour. it gets so slow # that you wouldn't believe it ... echo "testing error, omen.sz" mkdir $testdir/error.omen failed=0 omen.sz $y_test_files <$testdir/pipe | \ (cd $testdir/error.omen ; $RZ -vvv --errors 32768 $RZBUFSIZE $QUIET >>../pipe 2>/tmp/out2) for i in $y_test_files ; do bn=`basename $i` cmp $i $testdir/error.omen/$bn if test $? -eq 0 ; then rm -f $testdir/error.omen/$bn else failed=1 fi done if test $failed = 1 ; then echo "error.omen test failed" any_failure="$any_failure error.omen" fi rmdir $testdir/error.omen 2>&5 echo "testing error, zm.sz" mkdir $testdir/error.zm failed=0 zmtx $y_test_files <$testdir/pipe | \ (cd $testdir/error.zm ; $RZ -vvv --errors 32768 $RZBUFSIZE $QUIET >>../pipe 2>/tmp/out2) for i in $y_test_files ; do bn=`basename $i` cmp $i $testdir/error.zm/$bn if test $? -eq 0 ; then rm -f $testdir/error.zm/$bn else failed=1 fi done if test $failed = 1 ; then echo "error.zm test failed" any_failure="$any_failure error.zm" fi rmdir $testdir/error.zm 2>&5 fi fi # test ymodem if test "$mode" = all -o "$mode" = y ; then echo "testing YMODEM" mkdir $testdir/ymodem failed=0 $SZ --ymodem -q $y_test_files <$testdir/pipe | \ (cd $testdir/ymodem ; $RZ $QUIET --ymodem >>../pipe) for i in $y_test_files ; do bn=`basename $i` cmp $i $testdir/ymodem/$bn if test $? -eq 0 ; then rm -f $testdir/ymodem/$bn else failed=1 fi done rmdir $testdir/ymodem 2>&5 if test $failed = 1 ; then echo "YMODEM test failed" any_failure="$any_failure YMODEM" fi fi if test "$mode" = all -o "$mode" = x ; then echo "testing XMODEM" mkdir $testdir/xmodem failed=0 for i in $x_test_files; do bn=`basename $i` $SZ --xmodem -qa $i <$testdir/pipe | \ (cd $testdir/xmodem ; $RZ $QUIET -a --xmodem $bn >>../pipe) cmp $i $testdir/xmodem/$bn if test $? -eq 0 ; then rm -f $testdir/xmodem/$bn else failed=1 fi done rmdir $testdir/xmodem 2>&5 if test $failed = 1 ; then echo "XMODEM test failed" any_failure="$any_failure XMODEM" fi fi if test "$mode" = all -o "$mode" = manage ; then echo "testing file management, appending" mkdir $testdir/manag.append failed=0 $SZ -q --append $srcdir/src/lsz.c $srcdir/src/lsz.c <$testdir/pipe | \ (cd $testdir/manag.append ; $RZ $QUIET >>../pipe) rm -f $testdir/manag.append/compare cp $srcdir/src/lsz.c $testdir/manag.append/compare cat $srcdir/src/lsz.c >>$testdir/manag.append/compare cmp $testdir/manag.append/compare $testdir/manag.append/lsz.c if test $? -eq 0 ; then rm -f $testdir/manag.append/lsz.c rm -f $testdir/manag.append/compare else failed=1 fi rmdir $testdir/manag.append 2>&5 if test $failed = 1 ; then echo "management/append test failed" any_failure="$any_failure manag.append" fi echo "testing file management, renaming" mkdir $testdir/manag.rename failed=0 rm -f $testdir/manag.rename/lsz.c cp $srcdir/src/lsz.c $testdir/manag.rename/ $SZ -q --rename $srcdir/src/lsz.c $srcdir/src/lsz.c <$testdir/pipe | \ (cd $testdir/manag.rename ; $RZ $QUIET >>../pipe) cmp $testdir/manag.rename/lsz.c $srcdir/src/lsz.c if test $? -ne 0 ; then failed=1 else cmp $testdir/manag.rename/lsz.c.0 $srcdir/src/lsz.c if test $? -ne 0 ; then failed=1 else cmp $testdir/manag.rename/lsz.c.1 $srcdir/src/lsz.c if test $? -ne 0 ; then failed=1 fi fi fi if test $failed -eq 0 ; then rm -f $testdir/manag.rename/lsz.c rm -f $testdir/manag.rename/lsz.c.0 rm -f $testdir/manag.rename/lsz.c.1 fi rmdir $testdir/manag.rename 2>&5 if test $failed = 1 ; then echo "management/rename test failed" any_failure="$any_failure manag.rename" fi fi # resume -r if test "$mode" = all -o "$mode" = sz-r ; then mkdir $testdir/resume-s echo "testing ZMODEM resume (sz -r)" dd if=$srcdir/src/Makefile.in of=$testdir/resume-s/lsz.c bs=256 count=5 2>&5 ($SZ -rq $srcdir/src/lsz.c) <$testdir/pipe | \ (cd $testdir/resume-s ; $RZ $QUIET >>../pipe ) echo "differences are normal:" >&5 if cmp $srcdir/src/lsz.c $testdir/resume-s/lsz.c >&5 ; then echo "receiver did not resume, but file is ok" any_failure="$any_failure ZMODEM-resume/sz" else dd if=$srcdir/src/lsz.c of=$testdir/resume-s/lsz.c1 bs=256 count=5 2>&5 dd if=$testdir/resume-s/lsz.c bs=256 skip=5 >>$testdir/resume-s/lsz.c1 2>&5 if cmp $srcdir/src/lsz.c $testdir/resume-s/lsz.c1 ; then : rm -f $testdir/resume-s/lsz.c rm -f $testdir/resume-s/lsz.c1 rmdir $testdir/resume-s 2>&5 else echo "sender resumed, but files differ. This is really bad" any_failure="$any_failure ZMODEM-resume/sz" fi fi fi if test "$mode" = all -o "$mode" = rz-r ; then echo "testing ZMODEM resume (rz -r)" mkdir $testdir/resume-r 2>&5 dd if=$srcdir/src/Makefile.in of=$testdir/resume-r/lsz.c bs=256 count=5 2>&5 ($SZ -q $srcdir/src/lsz.c) <$testdir/pipe | \ (cd $testdir/resume-r ; $RZ -r $QUIET >>../pipe ) echo "differences are normal:" >&5 if cmp $srcdir/src/lsz.c $testdir/resume-r/lsz.c >&5 ; then echo "receiver did not resume, but file is ok" any_failure="$any_failure ZMODEM-resume/rz" else dd if=$srcdir/src/lsz.c of=$testdir/resume-r/lsz.c1 bs=256 count=5 2>&5 dd if=$testdir/resume-r/lsz.c bs=256 skip=5 >>$testdir/resume-r/lsz.c1 2>&5 if cmp $srcdir/src/lsz.c $testdir/resume-r/lsz.c1 ; then : rm -f $testdir/resume-r/lsz.c rm -f $testdir/resume-r/lsz.c1 rmdir $testdir/resume-r 2>&5 else echo "sender resumed, but files differ. This is really bad" any_failure="$any_failure ZMODEM-resume/rz" fi fi fi # test lsz -> original rz if test "$mode" = orig-rz ; then echo "testing ZMODEM" mkdir $testdir/zmodem failed=0 ($SZ -q $SZBUFSIZE $z_test_files ) 2>/dev/null <$testdir/pipe | \ (cd $testdir/zmodem ; exec omen.rz $QUIET >>../pipe) for i in $z_test_files ; do bn=`basename $i` cmp $i $testdir/zmodem/$bn if test $? -eq 0 ; then rm -f $testdir/zmodem/$bn else failed=1 fi done rmdir $testdir/zmodem 2>&5 if test $failed = 1 ; then echo "orig-rz test failed" any_failure="$any_failure orig-rz" fi fi # test original sz -> lrz if test "$mode" = orig-sz ; then echo "testing ZMODEM" mkdir $testdir/zmodem failed=0 (omen.sz $z_test_files ) 2>/dev/null <$testdir/pipe | \ (cd $testdir/zmodem ; exec $RZ >>../pipe) for i in $z_test_files ; do bn=`basename $i` cmp $i $testdir/zmodem/$bn if test $? -eq 0 ; then rm -f $testdir/zmodem/$bn else failed=1 fi done rmdir $testdir/zmodem 2>&5 if test $failed = 1 ; then echo "orig-sz test failed" any_failure="$any_failure orig-sz" fi fi # test original sz -> lrz if test "$mode" = orig-kombi ; then echo "testing ZMODEM" mkdir $testdir/zmodem failed=0 (omen.sz $y_test_files ; sleep 1; cd $testdir/zmodem; echo  exec omen.rz ) 2>/dev/null <$testdir/pipe | \ (cd $testdir/zmodem ; $RZ ; rm -f * ; sleep 3 ; $SZ $y_test_files ) >>$testdir/pipe for i in $y_test_files ; do bn=`basename $i` cmp $i $testdir/zmodem/$bn if test $? -eq 0 ; then rm -f $testdir/zmodem/$bn else failed=1 fi done rmdir $testdir/zmodem 2>&5 if test $failed = 1 ; then echo "orig-kombi test failed" any_failure="$any_failure orig-kombi" fi fi # test lsz -> zm rz (zxrx) if test "$mode" = zm-rz ; then echo "testing ZMODEM" mkdir $testdir/zmodem failed=0 ($SZ -q $SZBUFSIZE $z_test_files ) 2>/dev/null <$testdir/pipe | \ (cd $testdir/zmodem ; exec zmrx $QUIET >>../pipe) for i in $z_test_files ; do bn=`basename $i` cmp $i $testdir/zmodem/$bn if test $? -eq 0 ; then rm -f $testdir/zmodem/$bn else failed=1 fi done rmdir $testdir/zmodem 2>&5 if test $failed = 1 ; then echo "orig-rz test failed" any_failure="$any_failure zm-rz" fi fi # test zm sz (zmtx) -> lrz if test "$mode" = zm-sz ; then echo "testing ZMODEM" mkdir $testdir/zmodem failed=0 (zmtx $z_test_files ) 2>/dev/null <$testdir/pipe | \ (cd $testdir/zmodem ; exec $RZ >>../pipe) for i in $z_test_files ; do bn=`basename $i` cmp $i $testdir/zmodem/$bn if test $? -eq 0 ; then rm -f $testdir/zmodem/$bn else failed=1 fi done rmdir $testdir/zmodem 2>&5 if test $failed = 1 ; then echo "orig-sz test failed" any_failure="$any_failure zm-sz" fi fi # test turbo mode lsz -> zmrx, omen.rz, lrz if test "$mode" = turbo ; then echo "testing turbo -> zmrx" mkdir $testdir/turbo.zmrx failed=0 ($SZ -qT $SZBUFSIZE $z_test_files ) 2>/dev/null <$testdir/pipe | \ (cd $testdir/turbo.zmrx ; exec zmrx >>../pipe) for i in $z_test_files ; do bn=`basename $i` cmp $i $testdir/turbo.zmrx/$bn if test $? -eq 0 ; then rm -f $testdir/turbo.zmrx/$bn else failed=1 fi done rmdir $testdir/turbo.zmrx 2>&5 if test $failed = 1 ; then echo "turbo-zmrx test failed" any_failure="$any_failure turbo-zmrx" fi echo "testing turbo -> omen.rz" mkdir $testdir/turbo.omen.rz failed=0 ($SZ -qT $SZBUFSIZE $z_test_files ) 2>/dev/null <$testdir/pipe | \ (cd $testdir/turbo.omen.rz ; exec omen.rz >>../pipe) for i in $z_test_files ; do bn=`basename $i` cmp $i $testdir/turbo.omen.rz/$bn if test $? -eq 0 ; then rm -f $testdir/turbo.omen.rz/$bn else failed=1 fi done rmdir $testdir/turbo.omen.rz 2>&5 if test $failed = 1 ; then echo "turbo-omen.rz test failed" any_failure="$any_failure turbo-omen.rz" fi echo "testing turbo -> lrz" mkdir $testdir/turbo.lrz failed=0 ($SZ -qT $SZBUFSIZE $z_test_files ) 2>/dev/null <$testdir/pipe | \ (cd $testdir/turbo.lrz ; exec lrz >>../pipe) for i in $z_test_files ; do bn=`basename $i` cmp $i $testdir/turbo.lrz/$bn if test $? -eq 0 ; then rm -f $testdir/turbo.lrz/$bn else failed=1 fi done rmdir $testdir/turbo.omen.rz 2>&5 if test $failed = 1 ; then echo "turbo-lrz test failed" any_failure="$any_failure turbo-lrz" fi fi # # startup timing checks # # test lsz -> zm rz (zxrx) if test "$mode" = startup ; then echo "testing lsz -> zm rz. lsz sleeps 10 seconds" mkdir $testdir/startup.1 failed=0 ($SZ --delay-startup 10 -q $SZBUFSIZE $z_test_files ) 2>/dev/null <$testdir/pipe | \ (cd $testdir/startup.1 ; exec zmrx $QUIET >>../pipe) for i in $z_test_files ; do bn=`basename $i` cmp $i $testdir/startup.1/$bn if test $? -eq 0 ; then rm -f $testdir/startup.1/$bn else failed=1 fi done rmdir $testdir/startup.1 2>&5 if test $failed = 1 ; then echo "zm-rz startup-timing test failed" any_failure="$any_failure zm-rz-startup-timing" fi echo "testing lsz -> omen.rz. lsz sleeps 10 seconds" mkdir $testdir/startup.2 failed=0 ($SZ --delay-startup 10 -q $SZBUFSIZE $z_test_files ) 2>/dev/null <$testdir/pipe | \ (cd $testdir/startup.2 ; exec omen.rz $QUIET >>../pipe) for i in $z_test_files ; do bn=`basename $i` cmp $i $testdir/startup.2/$bn if test $? -eq 0 ; then rm -f $testdir/startup.2/$bn else failed=1 fi done rmdir $testdir/startup.2 2>&5 if test $failed = 1 ; then echo "omen.rz startup-timing test failed" any_failure="$any_failure omen-rz-startup-timing" fi echo "testing lsz -> lrz. lsz sleeps 10 seconds" mkdir $testdir/startup.3 failed=0 ($SZ --delay-startup 10 -q $SZBUFSIZE $z_test_files ) 2>/dev/null <$testdir/pipe | \ (cd $testdir/startup.3 ; exec $RZ $QUIET >>../pipe) for i in $z_test_files ; do bn=`basename $i` cmp $i $testdir/startup.3/$bn if test $? -eq 0 ; then rm -f $testdir/startup.3/$bn else failed=1 fi done rmdir $testdir/startup.3 2>&5 if test $failed = 1 ; then echo "lrz startup-timing test failed" any_failure="$any_failure lrz-startup-timing" fi echo "testing zmtx -> lrz. lrz sleeps 10 seconds" mkdir $testdir/startup.4 failed=0 (zmtx $z_test_files ) 2>/dev/null <$testdir/pipe | \ (cd $testdir/startup.4 ; exec $RZ --delay-startup 10 $QUIET >>../pipe) for i in $z_test_files ; do bn=`basename $i` cmp $i $testdir/startup.4/$bn if test $? -eq 0 ; then rm -f $testdir/startup.4/$bn else failed=1 fi done rmdir $testdir/startup.4 2>&5 if test $failed = 1 ; then echo "zmtx startup-timing test failed" any_failure="$any_failure zmtx-startup-timing" fi echo "testing omen.sz -> lrz. lrz sleeps 10 seconds" mkdir $testdir/startup.5 failed=0 (omen.sz $z_test_files ) 2>/dev/null <$testdir/pipe | \ (cd $testdir/startup.5 ; exec $RZ --delay-startup 10 $QUIET >>../pipe) for i in $z_test_files ; do bn=`basename $i` cmp $i $testdir/startup.5/$bn if test $? -eq 0 ; then rm -f $testdir/startup.5/$bn else failed=1 fi done rmdir $testdir/startup.5 2>&5 if test $failed = 1 ; then echo "omen.sz startup-timing test failed" any_failure="$any_failure omen.sz-startup-timing" fi echo "testing lsz -> lrz. lrz sleeps 10 seconds" mkdir $testdir/startup.6 failed=0 ($SZ -q $z_test_files ) 2>/dev/null <$testdir/pipe | \ (cd $testdir/startup.6 ; exec $RZ --delay-startup 10 $QUIET >>../pipe) for i in $z_test_files ; do bn=`basename $i` cmp $i $testdir/startup.6/$bn if test $? -eq 0 ; then rm -f $testdir/startup.6/$bn else failed=1 fi done rmdir $testdir/startup.6 2>&5 if test $failed = 1 ; then echo "lsz startup-timing test failed" any_failure="$any_failure lsz-startup-timing" fi fi if test "$mode" = stop-at ; then echo "testing lsz -> lrz. lsz stops after 10 seconds" mkdir $testdir/stop-at failed=0 ($SZ --stop-at +10 $z8_test_files ) 2>/dev/null <$testdir/pipe | \ (cd $testdir/stop-at ; exec $RZ $QUIET >>../pipe) for i in $z8_test_files ; do bn=`basename $i` cmp $i $testdir/stop-at/$bn if test $? -eq 0 ; then rm -f $testdir/stop-at/$bn else failed=1 fi done rmdir $testdir/stop-at 2>&5 if test $failed = 1 ; then echo "stop-at test failed" any_failure="$any_failure stop-at" fi fi if test "x$any_failure" = x ; then : else echo "the following tests failed:" echo $any_failure echo "have a look into `pwd`/$testdir" exit 1 fi echo "All tests OK." if test "$mode" = all -o "$mode" = abuse ; then echo echo "going to tests misuse. Errors are ok, hangs are not!" echo echo "both sides sending:" $SZ -q $z_test_files <$testdir/pipe | \ ($SZ $z_test_files >>$testdir/pipe ) echo echo "both sides receiving:" $RZ -q <$testdir/pipe | \ ( $RZ >>$testdir/pipe ) fi rm -rf $testdir rm -f $objdir/null1 $objdir/null2 exit 0 lrzsz-0.12.21rc/COMPATABILITY 666 764 764 2530 6607440600 10411 ZModem standard: lrzsz is compatible with standard zmodem as long as you don't use certain options: -8 is incompatible with the standard, but should work with most DOS/Atari/Amiga ZModems. It's a common extension, but a dangerous one. Do not use it unless you know that the receiver can handle it. -S is incompatible with certain ZModems which use the TIMESYNC bit for other purposes (timesync is a protocol extension by Peter Mandrella, read timesync.doc for more information). The default is to disable timesync, you must use the `S' option to enable it. Calling conventions: lrzsz is not fully compatible with older UNIX ZModems: - PUBDIR (/var/spool/uucppublic) is normally disabled. If you like public writable directories please use: configure --enable-pubdir=/var/spool/uucppublic - lrz defaults to restricted mode, in which the sender must not upload any files outside the working directory or PUBDIR (if pubdir is enabled). With the old version you had to set SHELL=rsh. For more information read the SECURITY paragraph in lrz.1. - lrz: remote command execution is disabled. To enable it use -C (but be careful - the sender might delete all your files). - lrz: does not set executable bits for any files it received under a restricted shell. lrzsz-0.12.21rc/README.cvs 644 764 764 1207 6642657325 10150 You can access the lrzsz sources through CVS, using something like export CVSROOT=:pserver:cvsread@tirka.ohse.de:/var/cvs-pub cvs login use `cvsread' as password cvs checkout lrzsz But you'll need the same automake version as i use (use finger to find which one i'm using at the moment: finger uwe-tool-versions@tirka.ohse.de ). The same might be true für autoconf and gettext. Automake _will_ be run because CVS garbles the timestamp of the files it checks out. You'll have to live with that. Tar archives and diffs of the cvs trees and are also available. See ftp://tirka.ohse.de/uwe/cvs-trees They share the same problems, though. lrzsz-0.12.21rc/README.isdn4linux 666 764 764 676 6607440600 11436 There is a problem with isdn4linux: lsz seems to stop the transmission after sending some kilobytes. I've been told that the packet size used in the X.75i protocol defaults to a too high value which is outside the specification. Workaround: initialize isdn4linux with "AT&B1024" (some boards can deal with higher values, maxbe up to 2000 Bytes). Thanks to Andreas Romeyke and Frank Thieme . lrzsz-0.12.21rc/README.gettext 644 764 764 3542 6642657325 11045 In case you see a dump of your environment after running configure or config.status you might want to either: - downgrade to gettext-0.10.32 (maybe 33 or 34 will work too, but i didn' test them) - upgrade to a newer autoconf version (there is none at the moment of this writing - Oct 1998 - and i suspect this state will not change soon) - patch your /usr/lib/acgeneral.m4 (see below). In any case you should rerun "aclocal" afterwards and "configure" again. Sorry for the trouble. -------------------------------------------------------------------- This little patch solves a problem i found using gettext-0.10.35. For some reason AM_GNU_GETTEXT (serial 5) calls AC_LINK_FILES($nls_cv_header_libgt, $nls_cv_header_intl) with both variables being empty (at least on my redhat-5.1 system). This gives an config.status script like this one: ac_sources=" " ac_dests=" " srcdir=$ac_given_srcdir while test -n "$ac_sources"; do set $ac_dests; ac_dest=$1; shift; ac_dests=$* set $ac_sources; ac_source=$1; shift; ac_sources=$* "set ; ac_source=$1; shift; ac_sources=$*" produces some not so nice looking output ... I think the right fix is something like that, but maybe Ulrich might want to try something else since autoconf seems to be basically unmaintained. don't forget to rebuild your frozen m4 files: cd /usr/lib/autoconf m4 -F autoconf.m4f autoconf.m4 m4 -F autoheader.m4f autoheader.m4 Regards, Uwe --------------------------------------------------------- > --- acgeneral.m4.old Fri Oct 9 19:42:32 1998 > +++ acgeneral.m4 Fri Oct 9 19:43:43 1998 > @@ -2289,7 +2289,7 @@ > [EOF > > cat >> $CONFIG_STATUS < -ac_sources="$1" > +ac_sources=`echo "$1" | sed 's/^ *$//'` > ac_dests="$2" > EOF > --------------------------------------------------------- Well, i sent this to the gettext maintainer some months ago, but never got an answer .... lrzsz-0.12.21rc/rpmrc 644 764 764 77 6610605420 7470 sourcedir: . builddir: . rpmdir: . srcrpmdir: . #rpmfilename: lrzsz-0.12.21rc/buildrpm 755 764 764 557 6610616073 10217 #! /bin/sh set -x srcdir=$1 arch=`rpm --showrc --rcfile $srcdir/rpmrc | awk '/^build arch/ {print $4}'` if test "x$arch" = "x" ; then echo "cannot determinate architecture" >&2 exit 1 fi mkdir $arch 2>/dev/null didmkdir=$? rpm -ba --rcfile $srcdir/rpmrc Specfile ec=$? if test $ec ; then mv $arch/* . ec=$? fi if test $didmkdir ; then rmdir $arch fi exit $ec lrzsz-0.12.21rc/fastcheck.sh 755 764 764 2317 6642121240 10751 #! /bin/sh srcdir="$1" if test $srcdir = . ; then srcdir=`pwd` fi if test $srcdir = .. ; then srcdir=`pwd`/.. fi objdir="$2" if test $objdir = . ; then objdir=`pwd` fi testdir=$objdir/fastcheck.lrzsz SZ="$objdir/src/lsz" RZ="$objdir/src/lrz" echo checking with srcdir = $1 and objdir = $2 z_test_files="" for i in $srcdir/src/l?z.c ; do z_test_files="$z_test_files $i" done for i in $objdir/src/l?z ; do z_test_files="$z_test_files $i" done # change to tmp dir if test "x$TMPDIR" = x ; then if test "x$TMP" = x ; then cd /tmp else cd $TMP || cd /tmp fi else cd $TMPDIR || cd /tmp fi rm -rf $testdir mkdir $testdir exec 5>$testdir/error.log (mkfifo $testdir/pipe || mknod $testdir/pipe p) 2>&5 mkdir $testdir/zmodem failed=0 ($SZ -q $z_test_files ) <$testdir/pipe | \ (cd $testdir/zmodem ; exec $RZ $QUIET >>../pipe ) for i in $z_test_files ; do bn=`basename $i` cmp $i $testdir/zmodem/$bn if test $? -eq 0 ; then rm -f $testdir/zmodem/$bn else failed=1 fi done rm -rf $testdir if test "x$failed" = x0 ; then : else echo "the test failed." >&2 echo "use 'make check' or 'make vcheck' for a more detailed test" >&2 touch $objdir/fastcheck.failed exit 1 fi touch $objdir/fastcheck.ok exit 0 lrzsz-0.12.21rc/README.tests 644 764 764 1241 6642460342 10504 From "ease of use" onwards: "make fastcheck" will do a simple self check, sending lsz, lrz, lsz.c and lrz.c over a named pipe. This test just covers basic zmodem functionality, and it's the only one which will work under BeOS: All other tests need "real" named pipes, /pipe under BeOS simply hasn't the right semantics. "make vcheck" and "make oldcheck-local" will do a fast check of the most important features. "vcheck" gives some more output, especially CPS-rates. "make check" will do a _long_ regression test. Some tests need special programs (omen.sz, omen.rz, zmtx, zmrx). Some might only work on my system. In any case you'll need dejagnu for this. lrzsz-0.12.21rc/beos-runpiped.c 644 764 764 2156 6642121476 11413 #include #include #include int main(int argc, char **argv) { int pid,fd1,fd2; sem_id sem1,sem2; sem1=create_sem(1,"piperun"); sem2=create_sem(1,"piperun"); if (sem1$testdir/error.log (mkfifo $testdir/pipe || mknod $testdir/pipe p) 2>&5 mkdir $testdir/zmodem failed=0 $objdir/beos-runpiped "$SZ -q $z_test_files" "cd $testdir/zmodem ; exec $RZ $QUIET" for i in $z_test_files ; do bn=`basename $i` cmp $i $testdir/zmodem/$bn if test $? -eq 0 ; then rm -f $testdir/zmodem/$bn else failed=1 fi done rm -rf $testdir if test "x$failed" = x0 ; then : else echo "the test failed." >&2 echo "use 'make check' or 'make vcheck' for a more detailed test" >&2 touch $objdir/fastcheck.failed exit 1 fi touch $objdir/fastcheck.ok exit 0 lrzsz-0.12.21rc/lib/ 777 764 764 0 6760042372 7237 5lrzsz-0.12.21rc/lib/Makefile.in 664 764 764 31214 6760042372 11323 # Makefile.in generated automatically by automake 1.4a from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_FLAG = transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CPP = @CPP@ DATADIRNAME = @DATADIRNAME@ ENABLE_TIMESYNC = @ENABLE_TIMESYNC@ GENCAT = @GENCAT@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GT_NO = @GT_NO@ GT_YES = @GT_YES@ INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@ INSTOBJEXT = @INSTOBJEXT@ INTLDEPS = @INTLDEPS@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ PACKAGE = @PACKAGE@ PACKAGE_VERSION = @PACKAGE_VERSION@ POFILES = @POFILES@ POSUB = @POSUB@ RANLIB = @RANLIB@ U = @U@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ l = @l@ noinst_LIBRARIES = libzmodem.a CFLAGS = @CFLAGS@ AUTOMAKE_OPTIONS = ansi2knr EXTRA_DIST = alloca.c ansi2knr.1 ansi2knr.c getopt.c getopt1.c mkdir.c mktime.c strdup.c strerror.c strstr.c strpbrk.c strtol.c strtoul.c stpcpy.c strftime.c vasprintf.c libzmodem_a_SOURCES = long-options.c xstrtol.c xstrtoul.c error.c libzmodem_a_LIBADD = @LIBOBJS@ @ALLOCA@ libzmodem_a_DEPENDENCIES = @ALLOCA@ @LIBOBJS@ noinst_HEADERS = getopt.h long-options.h xstrtol.h xstrtoul.h error.h mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../config.h CONFIG_CLEAN_FILES = LIBRARIES = $(noinst_LIBRARIES) DEFS = @DEFS@ -I. -I$(srcdir) -I.. CPPFLAGS = @CPPFLAGS@ ANSI2KNR = @ANSI2KNR@ libzmodem_a_OBJECTS = long-options$U.o xstrtol$U.o xstrtoul$U.o \ error$U.o AR = ar COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ HEADERS = $(noinst_HEADERS) DIST_COMMON = Makefile.am Makefile.in alloca.c ansi2knr.1 ansi2knr.c \ getopt.c getopt1.c mkdir.c mktime.c stpcpy.c strdup.c strerror.c \ strftime.c strpbrk.c strstr.c strtol.c strtoul.c vasprintf.c DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = gtar GZIP_ENV = --best SOURCES = $(libzmodem_a_SOURCES) OBJECTS = $(libzmodem_a_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps lib/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-noinstLIBRARIES: clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) distclean-noinstLIBRARIES: maintainer-clean-noinstLIBRARIES: .c.o: $(COMPILE) -c $< .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: mostlyclean-krextra: clean-krextra: -rm -f ansi2knr distclean-krextra: maintainer-clean-krextra: ansi2knr: ansi2knr.o $(LINK) ansi2knr.o $(LIBS) ansi2knr.o: $(CONFIG_HEADER) mostlyclean-kr: -rm -f *_.c clean-kr: distclean-kr: maintainer-clean-kr: libzmodem.a: $(libzmodem_a_OBJECTS) $(libzmodem_a_DEPENDENCIES) -rm -f libzmodem.a $(AR) cru libzmodem.a $(libzmodem_a_OBJECTS) $(libzmodem_a_LIBADD) $(RANLIB) libzmodem.a alloca_.c: alloca.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/alloca.c; then echo $(srcdir)/alloca.c; else echo alloca.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > alloca_.c error_.c: error.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/error.c; then echo $(srcdir)/error.c; else echo error.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > error_.c getopt_.c: getopt.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getopt.c; then echo $(srcdir)/getopt.c; else echo getopt.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > getopt_.c getopt1_.c: getopt1.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getopt1.c; then echo $(srcdir)/getopt1.c; else echo getopt1.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > getopt1_.c long-options_.c: long-options.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/long-options.c; then echo $(srcdir)/long-options.c; else echo long-options.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > long-options_.c mkdir_.c: mkdir.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/mkdir.c; then echo $(srcdir)/mkdir.c; else echo mkdir.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > mkdir_.c mktime_.c: mktime.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/mktime.c; then echo $(srcdir)/mktime.c; else echo mktime.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > mktime_.c stpcpy_.c: stpcpy.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/stpcpy.c; then echo $(srcdir)/stpcpy.c; else echo stpcpy.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > stpcpy_.c strdup_.c: strdup.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strdup.c; then echo $(srcdir)/strdup.c; else echo strdup.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strdup_.c strerror_.c: strerror.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strerror.c; then echo $(srcdir)/strerror.c; else echo strerror.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strerror_.c strftime_.c: strftime.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strftime.c; then echo $(srcdir)/strftime.c; else echo strftime.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strftime_.c strpbrk_.c: strpbrk.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strpbrk.c; then echo $(srcdir)/strpbrk.c; else echo strpbrk.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strpbrk_.c strstr_.c: strstr.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strstr.c; then echo $(srcdir)/strstr.c; else echo strstr.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strstr_.c strtol_.c: strtol.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strtol.c; then echo $(srcdir)/strtol.c; else echo strtol.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strtol_.c strtoul_.c: strtoul.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strtoul.c; then echo $(srcdir)/strtoul.c; else echo strtoul.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strtoul_.c vasprintf_.c: vasprintf.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/vasprintf.c; then echo $(srcdir)/vasprintf.c; else echo vasprintf.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > vasprintf_.c xstrtol_.c: xstrtol.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xstrtol.c; then echo $(srcdir)/xstrtol.c; else echo xstrtol.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xstrtol_.c xstrtoul_.c: xstrtoul.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xstrtoul.c; then echo $(srcdir)/xstrtoul.c; else echo xstrtoul.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xstrtoul_.c alloca_.o error_.o getopt_.o getopt1_.o long-options_.o mkdir_.o \ mktime_.o stpcpy_.o strdup_.o strerror_.o strftime_.o strpbrk_.o \ strstr_.o strtol_.o strtoul_.o vasprintf_.o xstrtol_.o xstrtoul_.o : \ $(ANSI2KNR) tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = lib distdir: $(DISTFILES) @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done error.o: error.c ../config.h long-options.o: long-options.c ../config.h getopt.h long-options.h xstrtol.o: xstrtol.c ../config.h xstrtol.h xstrtoul.o: xstrtoul.c xstrtol.c ../config.h xstrtol.h info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile $(ANSI2KNR) $(LIBRARIES) $(HEADERS) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install installdirs: mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \ mostlyclean-krextra mostlyclean-kr mostlyclean-tags \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-noinstLIBRARIES clean-compile clean-krextra clean-kr \ clean-tags clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-noinstLIBRARIES distclean-compile \ distclean-krextra distclean-kr distclean-tags \ distclean-generic clean-am distclean: distclean-am maintainer-clean-am: maintainer-clean-noinstLIBRARIES \ maintainer-clean-compile maintainer-clean-krextra \ maintainer-clean-kr maintainer-clean-tags \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \ clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \ mostlyclean-compile distclean-compile clean-compile \ maintainer-clean-compile mostlyclean-krextra distclean-krextra \ clean-krextra maintainer-clean-krextra mostlyclean-kr distclean-kr \ clean-kr maintainer-clean-kr tags mostlyclean-tags distclean-tags \ clean-tags maintainer-clean-tags distdir info-am info dvi-am dvi check \ check-am installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lrzsz-0.12.21rc/lib/Makefile.am 644 764 764 737 6727540136 11262 noinst_LIBRARIES=libzmodem.a CFLAGS=@CFLAGS@ AUTOMAKE_OPTIONS=ansi2knr EXTRA_DIST = alloca.c ansi2knr.1 ansi2knr.c \ getopt.c getopt1.c mkdir.c mktime.c \ strdup.c strerror.c strstr.c strpbrk.c strtol.c strtoul.c stpcpy.c \ strftime.c vasprintf.c libzmodem_a_SOURCES = long-options.c xstrtol.c xstrtoul.c error.c libzmodem_a_LIBADD = @LIBOBJS@ @ALLOCA@ libzmodem_a_DEPENDENCIES = @ALLOCA@ @LIBOBJS@ noinst_HEADERS = getopt.h long-options.h xstrtol.h xstrtoul.h error.h lrzsz-0.12.21rc/lib/alloca.c 666 764 764 33701 6607440602 10660 /* alloca.c -- allocate automatically reclaimed memory (Mostly) portable public-domain implementation -- D A Gwyn This implementation of the PWB library alloca function, which is used to allocate space off the run-time stack so that it is automatically reclaimed upon procedure exit, was inspired by discussions with J. Q. Johnson of Cornell. J.Otto Tennant contributed the Cray support. There are some preprocessor constants that can be defined when compiling for your specific system, for improved efficiency; however, the defaults should be okay. The general concept of this implementation is to keep track of all alloca-allocated blocks, and reclaim any that are found to be deeper in the stack than the current invocation. This heuristic does not reclaim storage as soon as it becomes invalid, but it will do so eventually. As a special case, alloca(0) reclaims storage without allocating any. It is a good idea to use alloca(0) in your main control loop, etc. to force garbage collection. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif /* If compiling with GCC, this file's not needed. */ #ifndef alloca #ifdef emacs #ifdef static /* actually, only want this if static is defined as "" -- this is for usg, in which emacs must undefine static in order to make unexec workable */ #ifndef STACK_DIRECTION you lose -- must know STACK_DIRECTION at compile-time #endif /* STACK_DIRECTION undefined */ #endif /* static */ #endif /* emacs */ /* If your stack is a linked list of frames, you have to provide an "address metric" ADDRESS_FUNCTION macro. */ #if defined (CRAY) && defined (CRAY_STACKSEG_END) long i00afunc (); #define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg)) #else #define ADDRESS_FUNCTION(arg) &(arg) #endif #if __STDC__ typedef void *pointer; #else typedef char *pointer; #endif #define NULL 0 /* Different portions of Emacs need to call different versions of malloc. The Emacs executable needs alloca to call xmalloc, because ordinary malloc isn't protected from input signals. On the other hand, the utilities in lib-src need alloca to call malloc; some of them are very simple, and don't have an xmalloc routine. Non-Emacs programs expect this to call use xmalloc. Callers below should use malloc. */ #ifndef emacs #if 0 #define malloc xmalloc extern pointer xmalloc (); #else static void * xmalloc(s) unsigned long s; { void *p=(void *)malloc(s); if (!p) { const char *meld="out of memory in alloca\n"; write(2,meld,strlen(meld)); exit(1); } return p; } #define malloc xmalloc #endif #endif /* Define STACK_DIRECTION if you know the direction of stack growth for your system; otherwise it will be automatically deduced at run-time. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #ifndef STACK_DIRECTION #define STACK_DIRECTION 0 /* Direction unknown. */ #endif #if STACK_DIRECTION != 0 #define STACK_DIR STACK_DIRECTION /* Known at compile-time. */ #else /* STACK_DIRECTION == 0; need run-time code. */ static int stack_dir; /* 1 or -1 once known. */ #define STACK_DIR stack_dir static void find_stack_direction () { static char *addr = NULL; /* Address of first `dummy', once known. */ auto char dummy; /* To get stack address. */ if (addr == NULL) { /* Initial entry. */ addr = ADDRESS_FUNCTION (dummy); find_stack_direction (); /* Recurse once. */ } else { /* Second entry. */ if (ADDRESS_FUNCTION (dummy) > addr) stack_dir = 1; /* Stack grew upward. */ else stack_dir = -1; /* Stack grew downward. */ } } #endif /* STACK_DIRECTION == 0 */ /* An "alloca header" is used to: (a) chain together all alloca'ed blocks; (b) keep track of stack depth. It is very important that sizeof(header) agree with malloc alignment chunk size. The following default should work okay. */ #ifndef ALIGN_SIZE #define ALIGN_SIZE sizeof(double) #endif typedef union hdr { char align[ALIGN_SIZE]; /* To force sizeof(header). */ struct { union hdr *next; /* For chaining headers. */ char *deep; /* For stack depth measure. */ } h; } header; static header *last_alloca_header = NULL; /* -> last alloca header. */ /* Return a pointer to at least SIZE bytes of storage, which will be automatically reclaimed upon exit from the procedure that called alloca. Originally, this space was supposed to be taken from the current stack frame of the caller, but that method cannot be made to work for some implementations of C, for example under Gould's UTX/32. */ pointer alloca (size) unsigned size; { auto char probe; /* Probes stack depth: */ register char *depth = ADDRESS_FUNCTION (probe); #if STACK_DIRECTION == 0 if (STACK_DIR == 0) /* Unknown growth direction. */ find_stack_direction (); #endif /* Reclaim garbage, defined as all alloca'd storage that was allocated from deeper in the stack than currently. */ { register header *hp; /* Traverses linked list. */ for (hp = last_alloca_header; hp != NULL;) if ((STACK_DIR > 0 && hp->h.deep > depth) || (STACK_DIR < 0 && hp->h.deep < depth)) { register header *np = hp->h.next; free ((pointer) hp); /* Collect garbage. */ hp = np; /* -> next header. */ } else break; /* Rest are not deeper. */ last_alloca_header = hp; /* -> last valid storage. */ } if (size == 0) return NULL; /* No allocation required. */ /* Allocate combined header + user data storage. */ { register pointer new = malloc (sizeof (header) + size); /* Address of header. */ ((header *) new)->h.next = last_alloca_header; ((header *) new)->h.deep = depth; last_alloca_header = (header *) new; /* User storage begins just after header. */ return (pointer) ((char *) new + sizeof (header)); } } /* brute force hack around glibc-2.0.4 together with lcc (need -D_BSD_SOURCE for u_long, but then get "alloca.h", which #defines alloca to be __alloca). -- uwe */ pointer __alloca (size) unsigned size; { return alloca(size); } #if defined (CRAY) && defined (CRAY_STACKSEG_END) #ifdef DEBUG_I00AFUNC #include #endif #ifndef CRAY_STACK #define CRAY_STACK #ifndef CRAY2 /* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */ struct stack_control_header { long shgrow:32; /* Number of times stack has grown. */ long shaseg:32; /* Size of increments to stack. */ long shhwm:32; /* High water mark of stack. */ long shsize:32; /* Current size of stack (all segments). */ }; /* The stack segment linkage control information occurs at the high-address end of a stack segment. (The stack grows from low addresses to high addresses.) The initial part of the stack segment linkage control information is 0200 (octal) words. This provides for register storage for the routine which overflows the stack. */ struct stack_segment_linkage { long ss[0200]; /* 0200 overflow words. */ long sssize:32; /* Number of words in this segment. */ long ssbase:32; /* Offset to stack base. */ long:32; long sspseg:32; /* Offset to linkage control of previous segment of stack. */ long:32; long sstcpt:32; /* Pointer to task common address block. */ long sscsnm; /* Private control structure number for microtasking. */ long ssusr1; /* Reserved for user. */ long ssusr2; /* Reserved for user. */ long sstpid; /* Process ID for pid based multi-tasking. */ long ssgvup; /* Pointer to multitasking thread giveup. */ long sscray[7]; /* Reserved for Cray Research. */ long ssa0; long ssa1; long ssa2; long ssa3; long ssa4; long ssa5; long ssa6; long ssa7; long sss0; long sss1; long sss2; long sss3; long sss4; long sss5; long sss6; long sss7; }; #else /* CRAY2 */ /* The following structure defines the vector of words returned by the STKSTAT library routine. */ struct stk_stat { long now; /* Current total stack size. */ long maxc; /* Amount of contiguous space which would be required to satisfy the maximum stack demand to date. */ long high_water; /* Stack high-water mark. */ long overflows; /* Number of stack overflow ($STKOFEN) calls. */ long hits; /* Number of internal buffer hits. */ long extends; /* Number of block extensions. */ long stko_mallocs; /* Block allocations by $STKOFEN. */ long underflows; /* Number of stack underflow calls ($STKRETN). */ long stko_free; /* Number of deallocations by $STKRETN. */ long stkm_free; /* Number of deallocations by $STKMRET. */ long segments; /* Current number of stack segments. */ long maxs; /* Maximum number of stack segments so far. */ long pad_size; /* Stack pad size. */ long current_address; /* Current stack segment address. */ long current_size; /* Current stack segment size. This number is actually corrupted by STKSTAT to include the fifteen word trailer area. */ long initial_address; /* Address of initial segment. */ long initial_size; /* Size of initial segment. */ }; /* The following structure describes the data structure which trails any stack segment. I think that the description in 'asdef' is out of date. I only describe the parts that I am sure about. */ struct stk_trailer { long this_address; /* Address of this block. */ long this_size; /* Size of this block (does not include this trailer). */ long unknown2; long unknown3; long link; /* Address of trailer block of previous segment. */ long unknown5; long unknown6; long unknown7; long unknown8; long unknown9; long unknown10; long unknown11; long unknown12; long unknown13; long unknown14; }; #endif /* CRAY2 */ #endif /* not CRAY_STACK */ #ifdef CRAY2 /* Determine a "stack measure" for an arbitrary ADDRESS. I doubt that "lint" will like this much. */ static long i00afunc (long *address) { struct stk_stat status; struct stk_trailer *trailer; long *block, size; long result = 0; /* We want to iterate through all of the segments. The first step is to get the stack status structure. We could do this more quickly and more directly, perhaps, by referencing the $LM00 common block, but I know that this works. */ STKSTAT (&status); /* Set up the iteration. */ trailer = (struct stk_trailer *) (status.current_address + status.current_size - 15); /* There must be at least one stack segment. Therefore it is a fatal error if "trailer" is null. */ if (trailer == 0) abort (); /* Discard segments that do not contain our argument address. */ while (trailer != 0) { block = (long *) trailer->this_address; size = trailer->this_size; if (block == 0 || size == 0) abort (); trailer = (struct stk_trailer *) trailer->link; if ((block <= address) && (address < (block + size))) break; } /* Set the result to the offset in this segment and add the sizes of all predecessor segments. */ result = address - block; if (trailer == 0) { return result; } do { if (trailer->this_size <= 0) abort (); result += trailer->this_size; trailer = (struct stk_trailer *) trailer->link; } while (trailer != 0); /* We are done. Note that if you present a bogus address (one not in any segment), you will get a different number back, formed from subtracting the address of the first block. This is probably not what you want. */ return (result); } #else /* not CRAY2 */ /* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP. Determine the number of the cell within the stack, given the address of the cell. The purpose of this routine is to linearize, in some sense, stack addresses for alloca. */ static long i00afunc (long address) { long stkl = 0; long size, pseg, this_segment, stack; long result = 0; struct stack_segment_linkage *ssptr; /* Register B67 contains the address of the end of the current stack segment. If you (as a subprogram) store your registers on the stack and find that you are past the contents of B67, you have overflowed the segment. B67 also points to the stack segment linkage control area, which is what we are really interested in. */ stkl = CRAY_STACKSEG_END (); ssptr = (struct stack_segment_linkage *) stkl; /* If one subtracts 'size' from the end of the segment, one has the address of the first word of the segment. If this is not the first segment, 'pseg' will be nonzero. */ pseg = ssptr->sspseg; size = ssptr->sssize; this_segment = stkl - size; /* It is possible that calling this routine itself caused a stack overflow. Discard stack segments which do not contain the target address. */ while (!(this_segment <= address && address <= stkl)) { #ifdef DEBUG_I00AFUNC fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl); #endif if (pseg == 0) break; stkl = stkl - pseg; ssptr = (struct stack_segment_linkage *) stkl; size = ssptr->sssize; pseg = ssptr->sspseg; this_segment = stkl - size; } result = address - this_segment; /* If you subtract pseg from the current end of the stack, you get the address of the previous stack segment's end. This seems a little convoluted to me, but I'll bet you save a cycle somewhere. */ while (pseg != 0) { #ifdef DEBUG_I00AFUNC fprintf (stderr, "%011o %011o\n", pseg, size); #endif stkl = stkl - pseg; ssptr = (struct stack_segment_linkage *) stkl; size = ssptr->sssize; pseg = ssptr->sspseg; result += size; } return (result); } #endif /* not CRAY2 */ #endif /* CRAY */ #endif /* no alloca */ lrzsz-0.12.21rc/lib/ansi2knr.1 644 764 764 2771 6520013452 11042 .TH ANSI2KNR 1 "19 Jan 1996" .SH NAME ansi2knr \- convert ANSI C to Kernighan & Ritchie C .SH SYNOPSIS .I ansi2knr [--varargs] input_file [output_file] .SH DESCRIPTION If no output_file is supplied, output goes to stdout. .br There are no error messages. .sp .I ansi2knr recognizes function definitions by seeing a non-keyword identifier at the left margin, followed by a left parenthesis, with a right parenthesis as the last character on the line, and with a left brace as the first token on the following line (ignoring possible intervening comments). It will recognize a multi-line header provided that no intervening line ends with a left or right brace or a semicolon. These algorithms ignore whitespace and comments, except that the function name must be the first thing on the line. .sp The following constructs will confuse it: .br - Any other construct that starts at the left margin and follows the above syntax (such as a macro or function call). .br - Some macros that tinker with the syntax of the function header. .sp The --varargs switch is obsolete, and is recognized only for backwards compatibility. The present version of .I ansi2knr will always attempt to convert a ... argument to va_alist and va_dcl. .SH AUTHOR L. Peter Deutsch wrote the original ansi2knr and continues to maintain the current version; most of the code in the current version is his work. ansi2knr also includes contributions by Francois Pinard and Jim Avera . lrzsz-0.12.21rc/lib/ansi2knr.c 644 764 764 36402 6641455657 11167 /* Copyright (C) 1989, 1997 Aladdin Enterprises. All rights reserved. */ /* hacked up by uo to get around automake-1.3-problem */ /*$Id: ansi2knr.c,v 1.5 1998/12/27 16:09:19 uwe Exp $*/ /* Convert ANSI C function definitions to K&R ("traditional C") syntax */ /* ansi2knr is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY. No author or distributor accepts responsibility to anyone for the consequences of using it or for whether it serves any particular purpose or works at all, unless he says so in writing. Refer to the GNU General Public License (the "GPL") for full details. Everyone is granted permission to copy, modify and redistribute ansi2knr, but only under the conditions described in the GPL. A copy of this license is supposed to have been given to you along with ansi2knr so you can know your rights and responsibilities. It should be in a file named COPYLEFT, or, if there is no file named COPYLEFT, a file named COPYING. Among other things, the copyright notice and this notice must be preserved on all copies. We explicitly state here what we believe is already implied by the GPL: if the ansi2knr program is distributed as a separate set of sources and a separate executable file which are aggregated on a storage medium together with another program, this in itself does not bring the other program under the GPL, nor does the mere fact that such a program or the procedures for constructing it invoke the ansi2knr executable bring any other part of the program under the GPL. */ /* * ----- not valid at the moment -- uwe ------ * Usage: ansi2knr [--filename FILENAME] [INPUT_FILE [OUTPUT_FILE]] * --filename provides the file name for the #line directive in the output, * overriding input_file (if present). * If no input_file is supplied, input is read from stdin. * If no output_file is supplied, output goes to stdout. * There are no error messages. * * ansi2knr recognizes function definitions by seeing a non-keyword * identifier at the left margin, followed by a left parenthesis, * with a right parenthesis as the last character on the line, * and with a left brace as the first token on the following line * (ignoring possible intervening comments). * It will recognize a multi-line header provided that no intervening * line ends with a left or right brace or a semicolon. * These algorithms ignore whitespace and comments, except that * the function name must be the first thing on the line. * The following constructs will confuse it: * - Any other construct that starts at the left margin and * follows the above syntax (such as a macro or function call). * - Some macros that tinker with the syntax of the function header. */ /* * The original and principal author of ansi2knr is L. Peter Deutsch * . Other authors are noted in the change history * that follows (in reverse chronological order): lpd 97-12-08 made input_file optional; only closes input and/or output file if not stdin or stdout respectively; prints usage message on stderr rather than stdout; adds --filename switch (changes suggested by ) lpd 96-01-21 added code to cope with not HAVE_CONFIG_H and with compilers that don't understand void, as suggested by Tom Lane lpd 96-01-15 changed to require that the first non-comment token on the line following a function header be a left brace, to reduce sensitivity to macros, as suggested by Tom Lane lpd 95-06-22 removed #ifndefs whose sole purpose was to define undefined preprocessor symbols as 0; changed all #ifdefs for configuration symbols to #ifs lpd 95-04-05 changed copyright notice to make it clear that including ansi2knr in a program does not bring the entire program under the GPL lpd 94-12-18 added conditionals for systems where ctype macros don't handle 8-bit characters properly, suggested by Francois Pinard ; removed --varargs switch (this is now the default) lpd 94-10-10 removed CONFIG_BROKETS conditional lpd 94-07-16 added some conditionals to help GNU `configure', suggested by Francois Pinard ; properly erase prototype args in function parameters, contributed by Jim Avera ; correct error in writeblanks (it shouldn't erase EOLs) lpd 89-xx-xx original version */ /* Most of the conditionals here are to make ansi2knr work with */ /* or without the GNU configure machinery. */ #if HAVE_CONFIG_H # include #endif #include #include #if HAVE_CONFIG_H /* For properly autoconfiguring ansi2knr, use AC_CONFIG_HEADER(config.h). This will define HAVE_CONFIG_H and so, activate the following lines. */ # if STDC_HEADERS || HAVE_STRING_H # include # else # include # endif #else /* not HAVE_CONFIG_H */ /* Otherwise do it the hard way */ # ifdef BSD # include # else # ifdef VMS extern int strlen(), strncmp(); # else # include # endif # endif #endif /* not HAVE_CONFIG_H */ #if STDC_HEADERS # include #else /* malloc and free should be declared in stdlib.h, but if you've got a K&R compiler, they probably aren't. */ # ifdef MSDOS # include # else # ifdef VMS extern char *malloc(); extern void free(); # else extern char *malloc(); extern int free(); # endif # endif #endif /* * The ctype macros don't always handle 8-bit characters correctly. * Compensate for this here. */ #ifdef isascii # undef HAVE_ISASCII /* just in case */ # define HAVE_ISASCII 1 #else #endif #if STDC_HEADERS || !HAVE_ISASCII # define is_ascii(c) 1 #else # define is_ascii(c) isascii(c) #endif #define is_space(c) (is_ascii(c) && isspace(c)) #define is_alpha(c) (is_ascii(c) && isalpha(c)) #define is_alnum(c) (is_ascii(c) && isalnum(c)) /* Scanning macros */ #define isidchar(ch) (is_alnum(ch) || (ch) == '_') #define isidfirstchar(ch) (is_alpha(ch) || (ch) == '_') /* Forward references */ char *skipspace(); int writeblanks(); int test1(); int convert1(); /* The main program */ int main(argc, argv) int argc; char *argv[]; { FILE *in = stdin; FILE *out = stdout; char *filename = 0; #define bufsize 5000 /* arbitrary size */ char *buf; char *line; char *more; char *usage = "Usage: ansi2knr [--filename FILENAME] [INPUT_FILE [OUTPUT_FILE]]\n"; /* * In previous versions, ansi2knr recognized a --varargs switch. * If this switch was supplied, ansi2knr would attempt to convert * a ... argument to va_alist and va_dcl; if this switch was not * supplied, ansi2knr would simply drop any such arguments. * Now, ansi2knr always does this conversion, and we only * check for this switch for backward compatibility. */ int convert_varargs = 0; while ( argc > 1 && argv[1][0] == '-' ) { if ( !strcmp(argv[1], "--varargs") ) { convert_varargs = 1; argc--; argv++; continue; } if ( !strcmp(argv[1], "--filename") && argc > 2 ) { filename = argv[2]; argc -= 2; argv += 2; continue; } fprintf(stderr, "Unrecognized switch: %s\n", argv[1]); fprintf(stderr, usage); exit(1); } switch ( argc ) { default: fprintf(stderr, usage); exit(0); case 2: out = fopen(argv[1], "w"); if ( out == NULL ) { fprintf(stderr, "Cannot open output file %s\n", argv[2]); exit(1); } /* falls through */ case 1: break; } if ( filename ) fprintf(out, "#line 1 \"%s\"\n", filename); buf = malloc(bufsize); line = buf; while ( fgets(line, (unsigned)(buf + bufsize - line), in) != NULL ) { test: line += strlen(line); switch ( test1(buf) ) { case 2: /* a function header */ convert1(buf, out, 1, convert_varargs); break; case 1: /* a function */ /* Check for a { at the start of the next line. */ more = ++line; f: if ( line >= buf + (bufsize - 1) ) /* overflow check */ goto wl; if ( fgets(line, (unsigned)(buf + bufsize - line), in) == NULL ) goto wl; switch ( *skipspace(more, 1) ) { case '{': /* Definitely a function header. */ convert1(buf, out, 0, convert_varargs); fputs(more, out); break; case 0: /* The next line was blank or a comment: */ /* keep scanning for a non-comment. */ line += strlen(line); goto f; default: /* buf isn't a function header, but */ /* more might be. */ fputs(buf, out); strcpy(buf, more); line = buf; goto test; } break; case -1: /* maybe the start of a function */ if ( line != buf + (bufsize - 1) ) /* overflow check */ continue; /* falls through */ default: /* not a function */ wl: fputs(buf, out); break; } line = buf; } if ( line != buf ) fputs(buf, out); free(buf); if ( out != stdout ) fclose(out); if ( in != stdin ) fclose(in); return 0; } /* Skip over space and comments, in either direction. */ char * skipspace(p, dir) register char *p; register int dir; /* 1 for forward, -1 for backward */ { for ( ; ; ) { while ( is_space(*p) ) p += dir; if ( !(*p == '/' && p[dir] == '*') ) break; p += dir; p += dir; while ( !(*p == '*' && p[dir] == '/') ) { if ( *p == 0 ) return p; /* multi-line comment?? */ p += dir; } p += dir; p += dir; } return p; } /* * Write blanks over part of a string. * Don't overwrite end-of-line characters. */ int writeblanks(start, end) char *start; char *end; { char *p; for ( p = start; p < end; p++ ) if ( *p != '\r' && *p != '\n' ) *p = ' '; return 0; } /* * Test whether the string in buf is a function definition. * The string may contain and/or end with a newline. * Return as follows: * 0 - definitely not a function definition; * 1 - definitely a function definition; * 2 - definitely a function prototype (NOT USED); * -1 - may be the beginning of a function definition, * append another line and look again. * The reason we don't attempt to convert function prototypes is that * Ghostscript's declaration-generating macros look too much like * prototypes, and confuse the algorithms. */ int test1(buf) char *buf; { register char *p = buf; char *bend; char *endfn; int contin; if ( !isidfirstchar(*p) ) return 0; /* no name at left margin */ bend = skipspace(buf + strlen(buf) - 1, -1); switch ( *bend ) { case ';': contin = 0 /*2*/; break; case ')': contin = 1; break; case '{': return 0; /* not a function */ case '}': return 0; /* not a function */ default: contin = -1; } while ( isidchar(*p) ) p++; endfn = p; p = skipspace(p, 1); if ( *p++ != '(' ) return 0; /* not a function */ p = skipspace(p, 1); if ( *p == ')' ) return 0; /* no parameters */ /* Check that the apparent function name isn't a keyword. */ /* We only need to check for keywords that could be followed */ /* by a left parenthesis (which, unfortunately, is most of them). */ { static char *words[] = { "asm", "auto", "case", "char", "const", "double", "extern", "float", "for", "if", "int", "long", "register", "return", "short", "signed", "sizeof", "static", "switch", "typedef", "unsigned", "void", "volatile", "while", 0 }; char **key = words; char *kp; int len = endfn - buf; while ( (kp = *key) != 0 ) { if ( strlen(kp) == len && !strncmp(kp, buf, len) ) return 0; /* name is a keyword */ key++; } } return contin; } /* Convert a recognized function definition or header to K&R syntax. */ int convert1(buf, out, header, convert_varargs) char *buf; FILE *out; int header; /* Boolean */ int convert_varargs; /* Boolean */ { char *endfn; register char *p; /* * The breaks table contains pointers to the beginning and end * of each argument. */ char **breaks; unsigned num_breaks = 2; /* for testing */ char **btop; char **bp; char **ap; char *vararg = 0; /* Pre-ANSI implementations don't agree on whether strchr */ /* is called strchr or index, so we open-code it here. */ for ( endfn = buf; *(endfn++) != '('; ) ; top: p = endfn; breaks = (char **)malloc(sizeof(char *) * num_breaks * 2); if ( breaks == 0 ) { /* Couldn't allocate break table, give up */ fprintf(stderr, "Unable to allocate break table!\n"); fputs(buf, out); return -1; } btop = breaks + num_breaks * 2 - 2; bp = breaks; /* Parse the argument list */ do { int level = 0; char *lp = NULL; char *rp; char *end = NULL; if ( bp >= btop ) { /* Filled up break table. */ /* Allocate a bigger one and start over. */ free((char *)breaks); num_breaks <<= 1; goto top; } *bp++ = p; /* Find the end of the argument */ for ( ; end == NULL; p++ ) { switch(*p) { case ',': if ( !level ) end = p; break; case '(': if ( !level ) lp = p; level++; break; case ')': if ( --level < 0 ) end = p; else rp = p; break; case '/': p = skipspace(p, 1) - 1; break; default: ; } } /* Erase any embedded prototype parameters. */ if ( lp ) writeblanks(lp + 1, rp); p--; /* back up over terminator */ /* Find the name being declared. */ /* This is complicated because of procedure and */ /* array modifiers. */ for ( ; ; ) { p = skipspace(p - 1, -1); switch ( *p ) { case ']': /* skip array dimension(s) */ case ')': /* skip procedure args OR name */ { int level = 1; while ( level ) switch ( *--p ) { case ']': case ')': level++; break; case '[': case '(': level--; break; case '/': p = skipspace(p, -1) + 1; break; default: ; } } if ( *p == '(' && *skipspace(p + 1, 1) == '*' ) { /* We found the name being declared */ while ( !isidfirstchar(*p) ) p = skipspace(p, 1) + 1; goto found; } break; default: goto found; } } found: if ( *p == '.' && p[-1] == '.' && p[-2] == '.' ) { if ( convert_varargs ) { *bp++ = "va_alist"; vararg = p-2; } else { p++; if ( bp == breaks + 1 ) /* sole argument */ writeblanks(breaks[0], p); else writeblanks(bp[-1] - 1, p); bp--; } } else { while ( isidchar(*p) ) p--; *bp++ = p+1; } p = end; } while ( *p++ == ',' ); *bp = p; /* Make a special check for 'void' arglist */ if ( bp == breaks+2 ) { p = skipspace(breaks[0], 1); if ( !strncmp(p, "void", 4) ) { p = skipspace(p+4, 1); if ( p == breaks[2] - 1 ) { bp = breaks; /* yup, pretend arglist is empty */ writeblanks(breaks[0], p + 1); } } } /* Put out the function name and left parenthesis. */ p = buf; while ( p != endfn ) putc(*p, out), p++; /* Put out the declaration. */ if ( header ) { fputs(");", out); for ( p = breaks[0]; *p; p++ ) if ( *p == '\r' || *p == '\n' ) putc(*p, out); } else { for ( ap = breaks+1; ap < bp; ap += 2 ) { p = *ap; while ( isidchar(*p) ) putc(*p, out), p++; if ( ap < bp - 1 ) fputs(", ", out); } fputs(") ", out); /* Put out the argument declarations */ for ( ap = breaks+2; ap <= bp; ap += 2 ) (*ap)[-1] = ';'; if ( vararg != 0 ) { *vararg = 0; fputs(breaks[0], out); /* any prior args */ fputs("va_dcl", out); /* the final arg */ fputs(bp[0], out); } else fputs(breaks[0], out); } free((char *)breaks); return 0; } lrzsz-0.12.21rc/lib/getopt.c 666 764 764 53341 6607440602 10731 /* Getopt for GNU. NOTE: getopt is now part of the C library, so if you don't know what "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu before changing it! Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95 Free Software Foundation, Inc. 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ /* This tells Alpha OSF/1 not to define a getopt prototype in . Ditto for AIX 3.2 and . */ #ifndef _NO_PROTO #define _NO_PROTO #endif #ifdef HAVE_CONFIG_H #include #endif #if !defined (__STDC__) || !__STDC__ /* This is a separate conditional since some stdc systems reject `defined (const)'. */ #ifndef const #define const #endif #endif #include /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand `configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #if defined (_LIBC) || !defined (__GNU_LIBRARY__) /* This needs to come after some library #include to get __GNU_LIBRARY__ defined. */ #ifdef __GNU_LIBRARY__ /* Don't include stdlib.h for non-GNU C libraries because some of them contain conflicting prototypes for getopt. */ #include #endif /* GNU C library. */ #ifndef _ /* This is for other GNU distributions with internationalized messages. When compiling libc, the _ macro is predefined. */ #ifdef HAVE_LIBINTL_H # include # define _(msgid) gettext (msgid) #else # define _(msgid) (msgid) #endif #endif /* This version of `getopt' appears to the caller like standard Unix `getopt' but it behaves differently for the user, since it allows the user to intersperse the options with the other arguments. As `getopt' works, it permutes the elements of ARGV so that, when it is done, all the options precede everything else. Thus all application programs are extended to handle flexible argument order. Setting the environment variable POSIXLY_CORRECT disables permutation. Then the behavior is completely standard. GNU application programs can use a third alternative mode in which they can distinguish the relative order of options and other arguments. */ #include "getopt.h" /* For communication from `getopt' to the caller. When `getopt' finds an option that takes an argument, the argument value is returned here. Also, when `ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ char *optarg = NULL; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to `getopt'. On entry to `getopt', zero means this is the first call; initialize. When `getopt' returns EOF, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, `optind' communicates from one call to the next how much of ARGV has been scanned so far. */ /* XXX 1003.2 says this must be 1 before any call. */ int optind = 0; /* The next char to be scanned in the option-element in which the last option character we returned was found. This allows us to pick up the scan where we left off. If this is zero, or a null string, it means resume the scan by advancing to the next ARGV-element. */ static char *nextchar; /* Callers store zero here to inhibit the error message for unrecognized options. */ int opterr = 1; /* Set to an option character which was unrecognized. This must be initialized on some systems to avoid linking in the system's own getopt implementation. */ int optopt = '?'; /* Describe how to deal with options that follow non-option ARGV-elements. If the caller did not specify anything, the default is REQUIRE_ORDER if the environment variable POSIXLY_CORRECT is defined, PERMUTE otherwise. REQUIRE_ORDER means don't recognize them as options; stop option processing when the first non-option is seen. This is what Unix does. This mode of operation is selected by either setting the environment variable POSIXLY_CORRECT, or using `+' as the first character of the list of option characters. PERMUTE is the default. We permute the contents of ARGV as we scan, so that eventually all the non-options are at the end. This allows options to be given in any order, even with programs that were not written to expect this. RETURN_IN_ORDER is an option available to programs that were written to expect options and other ARGV-elements in any order and that care about the ordering of the two. We describe each non-option ARGV-element as if it were the argument of an option with character code 1. Using `-' as the first character of the list of option characters selects this mode of operation. The special argument `--' forces an end of option-scanning regardless of the value of `ordering'. In the case of RETURN_IN_ORDER, only `--' can cause `getopt' to return EOF with `optind' != ARGC. */ static enum { REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER } ordering; /* Value of POSIXLY_CORRECT environment variable. */ static char *posixly_correct; #ifdef __GNU_LIBRARY__ /* We want to avoid inclusion of string.h with non-GNU libraries because there are many ways it can cause trouble. On some systems, it contains special magic macros that don't work in GCC. */ #include #define my_index strchr #else /* Avoid depending on library functions or files whose names are inconsistent. */ char *getenv (); static char * my_index (str, chr) const char *str; int chr; { while (*str) { if (*str == chr) return (char *) str; str++; } return 0; } /* If using GCC, we can safely declare strlen this way. If not using GCC, it is ok not to declare it. */ #ifdef __GNUC__ /* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h. That was relevant to code that was here before. */ #if !defined (__STDC__) || !__STDC__ /* gcc with -traditional declares the built-in strlen to return int, and has done so at least since version 2.4.5. -- rms. */ extern int strlen (const char *); #endif /* not __STDC__ */ #endif /* __GNUC__ */ #endif /* not __GNU_LIBRARY__ */ /* Handle permutation of arguments. */ /* Describe the part of ARGV that contains non-options that have been skipped. `first_nonopt' is the index in ARGV of the first of them; `last_nonopt' is the index after the last of them. */ static int first_nonopt; static int last_nonopt; /* Exchange two adjacent subsequences of ARGV. One subsequence is elements [first_nonopt,last_nonopt) which contains all the non-options that have been skipped so far. The other is elements [last_nonopt,optind), which contains all the options processed since those non-options were skipped. `first_nonopt' and `last_nonopt' are relocated so that they describe the new indices of the non-options in ARGV after they are moved. */ static void exchange (argv) char **argv; { int bottom = first_nonopt; int middle = last_nonopt; int top = optind; char *tem; /* Exchange the shorter segment with the far end of the longer segment. That puts the shorter segment into the right place. It leaves the longer segment in the right place overall, but it consists of two parts that need to be swapped next. */ while (top > middle && middle > bottom) { if (top - middle > middle - bottom) { /* Bottom segment is the short one. */ int len = middle - bottom; register int i; /* Swap it with the top part of the top segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[top - (middle - bottom) + i]; argv[top - (middle - bottom) + i] = tem; } /* Exclude the moved bottom segment from further swapping. */ top -= len; } else { /* Top segment is the short one. */ int len = top - middle; register int i; /* Swap it with the bottom part of the bottom segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[middle + i]; argv[middle + i] = tem; } /* Exclude the moved top segment from further swapping. */ bottom += len; } } /* Update records for the slots the non-options now occupy. */ first_nonopt += (optind - last_nonopt); last_nonopt = optind; } /* Initialize the internal data when the first call is made. */ static const char * _getopt_initialize (optstring) const char *optstring; { /* Start processing options with ARGV-element 1 (since ARGV-element 0 is the program name); the sequence of previously skipped non-option ARGV-elements is empty. */ first_nonopt = last_nonopt = optind = 1; nextchar = NULL; posixly_correct = getenv ("POSIXLY_CORRECT"); /* Determine how to handle the ordering of options and nonoptions. */ if (optstring[0] == '-') { ordering = RETURN_IN_ORDER; ++optstring; } else if (optstring[0] == '+') { ordering = REQUIRE_ORDER; ++optstring; } else if (posixly_correct != NULL) ordering = REQUIRE_ORDER; else ordering = PERMUTE; return optstring; } /* Scan elements of ARGV (whose length is ARGC) for option characters given in OPTSTRING. If an element of ARGV starts with '-', and is not exactly "-" or "--", then it is an option element. The characters of this element (aside from the initial '-') are option characters. If `getopt' is called repeatedly, it returns successively each of the option characters from each of the option elements. If `getopt' finds another option character, it returns that character, updating `optind' and `nextchar' so that the next call to `getopt' can resume the scan with the following option character or ARGV-element. If there are no more option characters, `getopt' returns `EOF'. Then `optind' is the index in ARGV of the first ARGV-element that is not an option. (The ARGV-elements have been permuted so that those that are not options now come last.) OPTSTRING is a string containing the legitimate option characters. If an option character is seen that is not listed in OPTSTRING, return '?' after printing an error message. If you set `opterr' to zero, the error message is suppressed but we still return '?'. If a char in OPTSTRING is followed by a colon, that means it wants an arg, so the following text in the same ARGV-element, or the text of the following ARGV-element, is returned in `optarg'. Two colons mean an option that wants an optional arg; if there is text in the current ARGV-element, it is returned in `optarg', otherwise `optarg' is set to zero. If OPTSTRING starts with `-' or `+', it requests different methods of handling the non-option ARGV-elements. See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. Long-named options begin with `--' instead of `-'. Their names may be abbreviated as long as the abbreviation is unique or is an exact match for some defined option. If they have an argument, it follows the option name in the same ARGV-element, separated from the option name by a `=', or else the in next ARGV-element. When `getopt' finds a long-named option, it returns 0 if that option's `flag' field is nonzero, the value of the option's `val' field if the `flag' field is zero. The elements of ARGV aren't really const, because we permute them. But we pretend they're const in the prototype to be compatible with other systems. LONGOPTS is a vector of `struct option' terminated by an element containing a name which is zero. LONGIND returns the index in LONGOPT of the long-named option found. It is only valid when a long-named option has been found by the most recent call. If LONG_ONLY is nonzero, '-' as well as '--' can introduce long-named options. */ int _getopt_internal (argc, argv, optstring, longopts, longind, long_only) int argc; char *const *argv; const char *optstring; const struct option *longopts; int *longind; int long_only; { optarg = NULL; if (optind == 0) { optstring = _getopt_initialize (optstring); optind = 1; /* Don't scan ARGV[0], the program name. */ } if (nextchar == NULL || *nextchar == '\0') { /* Advance to the next ARGV-element. */ if (ordering == PERMUTE) { /* If we have just processed some options following some non-options, exchange them so that the options come first. */ if (first_nonopt != last_nonopt && last_nonopt != optind) exchange ((char **) argv); else if (last_nonopt != optind) first_nonopt = optind; /* Skip any additional non-options and extend the range of non-options previously skipped. */ while (optind < argc && (argv[optind][0] != '-' || argv[optind][1] == '\0')) optind++; last_nonopt = optind; } /* The special ARGV-element `--' means premature end of options. Skip it like a null option, then exchange with previous non-options as if it were an option, then skip everything else like a non-option. */ if (optind != argc && !strcmp (argv[optind], "--")) { optind++; if (first_nonopt != last_nonopt && last_nonopt != optind) exchange ((char **) argv); else if (first_nonopt == last_nonopt) first_nonopt = optind; last_nonopt = argc; optind = argc; } /* If we have done all the ARGV-elements, stop the scan and back over any non-options that we skipped and permuted. */ if (optind == argc) { /* Set the next-arg-index to point at the non-options that we previously skipped, so the caller will digest them. */ if (first_nonopt != last_nonopt) optind = first_nonopt; return EOF; } /* If we have come to a non-option and did not permute it, either stop the scan or describe it to the caller and pass it by. */ if ((argv[optind][0] != '-' || argv[optind][1] == '\0')) { if (ordering == REQUIRE_ORDER) return EOF; optarg = argv[optind++]; return 1; } /* We have found another option-ARGV-element. Skip the initial punctuation. */ nextchar = (argv[optind] + 1 + (longopts != NULL && argv[optind][1] == '-')); } /* Decode the current option-ARGV-element. */ /* Check whether the ARGV-element is a long option. If long_only and the ARGV-element has the form "-f", where f is a valid short option, don't consider it an abbreviated form of a long option that starts with f. Otherwise there would be no way to give the -f short option. On the other hand, if there's a long option "fubar" and the ARGV-element is "-fu", do consider that an abbreviation of the long option, just like "--fu", and not "-f" with arg "u". This distinction seems to be the most useful approach. */ if (longopts != NULL && (argv[optind][1] == '-' || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1]))))) { char *nameend; const struct option *p; const struct option *pfound = NULL; int exact = 0; int ambig = 0; int indfound; int option_index; for (nameend = nextchar; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; #ifdef lint indfound = 0; /* Avoid spurious compiler warning. */ #endif /* Test all long options for either exact match or abbreviated matches. */ for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, nextchar, nameend - nextchar)) { if (nameend - nextchar == strlen (p->name)) { /* Exact match found. */ pfound = p; indfound = option_index; exact = 1; break; } else if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else /* Second or later nonexact match found. */ ambig = 1; } if (ambig && !exact) { if (opterr) fprintf (stderr, _("%s: option `%s' is ambiguous\n"), argv[0], argv[optind]); nextchar += strlen (nextchar); optind++; return '?'; } if (pfound != NULL) { option_index = indfound; optind++; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) optarg = nameend + 1; else { if (opterr) if (argv[optind - 1][1] == '-') /* --option */ fprintf (stderr, _("%s: option `--%s' doesn't allow an argument\n"), argv[0], pfound->name); else /* +option or -option */ fprintf (stderr, _("%s: option `%c%s' doesn't allow an argument\n"), argv[0], argv[optind - 1][0], pfound->name); nextchar += strlen (nextchar); return '?'; } } else if (pfound->has_arg == 1) { if (optind < argc) optarg = argv[optind++]; else { if (opterr) fprintf (stderr, _("%s: option `%s' requires an argument\n"), argv[0], argv[optind - 1]); nextchar += strlen (nextchar); return optstring[0] == ':' ? ':' : '?'; } } nextchar += strlen (nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } /* Can't find it as a long option. If this is not getopt_long_only, or the option starts with '--' or is not a valid short option, then it's an error. Otherwise interpret it as a short option. */ if (!long_only || argv[optind][1] == '-' || my_index (optstring, *nextchar) == NULL) { if (opterr) { if (argv[optind][1] == '-') /* --option */ fprintf (stderr, _("%s: unrecognized option `--%s'\n"), argv[0], nextchar); else /* +option or -option */ fprintf (stderr, _("%s: unrecognized option `%c%s'\n"), argv[0], argv[optind][0], nextchar); } nextchar = (char *) ""; optind++; return '?'; } } /* Look at and handle the next short option-character. */ { char c = *nextchar++; char *temp = my_index (optstring, c); /* Increment `optind' when we start to process its last character. */ if (*nextchar == '\0') ++optind; if (temp == NULL || c == ':') { if (opterr) { if (posixly_correct) /* 1003.2 specifies the format of this message. */ fprintf (stderr, _("%s: illegal option -- %c\n"), argv[0], c); else fprintf (stderr, _("%s: invalid option -- %c\n"), argv[0], c); } optopt = c; return '?'; } if (temp[1] == ':') { if (temp[2] == ':') { /* This is an option that accepts an argument optionally. */ if (*nextchar != '\0') { optarg = nextchar; optind++; } else optarg = NULL; nextchar = NULL; } else { /* This is an option that requires an argument. */ if (*nextchar != '\0') { optarg = nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ optind++; } else if (optind == argc) { if (opterr) { /* 1003.2 specifies the format of this message. */ fprintf (stderr, _("%s: option requires an argument -- %c\n"), argv[0], c); } optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; } else /* We already incremented `optind' once; increment it again when taking next ARGV-elt as argument. */ optarg = argv[optind++]; nextchar = NULL; } } return c; } } int getopt (argc, argv, optstring) int argc; char *const *argv; const char *optstring; { return _getopt_internal (argc, argv, optstring, (const struct option *) 0, (int *) 0, 0); } #endif /* _LIBC or not __GNU_LIBRARY__. */ #ifdef TEST /* Compile with -DTEST to make an executable for use in testing the above definition of `getopt'. */ int main (argc, argv) int argc; char **argv; { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; c = getopt (argc, argv, "abc:d:0123456789"); if (c == EOF) break; switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value `%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ lrzsz-0.12.21rc/lib/getopt1.c 666 764 764 10236 6607440602 11006 /* getopt_long and getopt_long_only entry points for GNU getopt. Copyright (C) 1987, 88, 89, 90, 91, 92, 1993, 1994 Free Software Foundation, Inc. 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifdef HAVE_CONFIG_H #include #endif #include "getopt.h" #if !defined (__STDC__) || !__STDC__ /* This is a separate conditional since some stdc systems reject `defined (const)'. */ #ifndef const #define const #endif #endif #include /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand `configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #if defined (_LIBC) || !defined (__GNU_LIBRARY__) /* This needs to come after some library #include to get __GNU_LIBRARY__ defined. */ #ifdef __GNU_LIBRARY__ #include #else char *getenv (); #endif #ifndef NULL #define NULL 0 #endif int getopt_long (argc, argv, options, long_options, opt_index) int argc; char *const *argv; const char *options; const struct option *long_options; int *opt_index; { return _getopt_internal (argc, argv, options, long_options, opt_index, 0); } /* Like getopt_long, but '-' as well as '--' can indicate a long option. If an option that starts with '-' (not '--') doesn't match a long option, but does match a short option, it is parsed as a short option instead. */ int getopt_long_only (argc, argv, options, long_options, opt_index) int argc; char *const *argv; const char *options; const struct option *long_options; int *opt_index; { return _getopt_internal (argc, argv, options, long_options, opt_index, 1); } #endif /* _LIBC or not __GNU_LIBRARY__. */ #ifdef TEST #include int main (argc, argv) int argc; char **argv; { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; int option_index = 0; static struct option long_options[] = { {"add", 1, 0, 0}, {"append", 0, 0, 0}, {"delete", 1, 0, 0}, {"verbose", 0, 0, 0}, {"create", 0, 0, 0}, {"file", 1, 0, 0}, {0, 0, 0, 0} }; c = getopt_long (argc, argv, "abc:d:0123456789", long_options, &option_index); if (c == EOF) break; switch (c) { case 0: printf ("option %s", long_options[option_index].name); if (optarg) printf (" with arg %s", optarg); printf ("\n"); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value `%s'\n", optarg); break; case 'd': printf ("option d with value `%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ lrzsz-0.12.21rc/lib/mkdir.c 666 764 764 5304 6607440602 10511 /* mkdir.c -- BSD compatible make directory function for System V Copyright (C) 1988, 1990 Free Software Foundation, Inc. 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #ifndef errno extern int errno; #endif #ifdef STAT_MACROS_BROKEN #undef S_ISDIR #endif #if !defined(S_ISDIR) && defined(S_IFDIR) #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) #endif /* mkdir adapted from GNU tar. */ /* Make directory DPATH, with permission mode DMODE. Written by Robert Rother, Mariah Corporation, August 1985 (sdcsvax!rmr or rmr@uscd). If you want it, it's yours. Severely hacked over by John Gilmore to make a 4.2BSD compatible subroutine. 11Mar86; hoptoad!gnu Modified by rmtodd@uokmax 6-28-87 -- when making an already existing dir, subroutine didn't return EEXIST. It does now. */ int mkdir (dpath, dmode) char *dpath; int dmode; { int cpid, status; struct stat statbuf; if (stat (dpath, &statbuf) == 0) { errno = EEXIST; /* stat worked, so it already exists. */ return -1; } /* If stat fails for a reason other than non-existence, return error. */ if (errno != ENOENT) return -1; cpid = fork (); switch (cpid) { case -1: /* Cannot fork. */ return -1; /* errno is already set. */ case 0: /* Child process. */ /* Cheap hack to set mode of new directory. Since this child process is going away anyway, we zap its umask. This won't suffice to set SUID, SGID, etc. on this directory, so the parent process calls chmod afterward. */ status = umask (0); /* Get current umask. */ umask (status | (0777 & ~dmode)); /* Set for mkdir. */ execl ("/bin/mkdir", "mkdir", dpath, (char *) 0); _exit (1); default: /* Parent process. */ /* Wait for kid to finish. */ while (wait (&status) != cpid) /* Do nothing. */ ; if (status & 0xFFFF) { /* /bin/mkdir failed. */ errno = EIO; return -1; } return chmod (dpath, dmode); } } lrzsz-0.12.21rc/lib/mktime.c 666 764 764 34363 6607440602 10720 /* Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc. Contributed by Noel Cragg (noel@cs.oberlin.edu), with fixes by Michael E. Calwas (calwas@ttd.teradyne.com) and Wade Hampton (tasi029@tmn.com). NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ /* Define this to have a standalone program to test this implementation of mktime. */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif #include /* Some systems define `time_t' here. */ #include #ifndef __isleap /* Nonzero if YEAR is a leap year (every 4 years, except every 100th isn't, and every 400th is). */ #define __isleap(year) \ ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0)) #endif #ifndef __P #if defined (__GNUC__) || (defined (__STDC__) && __STDC__) #define __P(args) args #else #define __P(args) () #endif /* GCC. */ #endif /* Not __P. */ /* How many days are in each month. */ const unsigned short int __mon_lengths[2][12] = { /* Normal years. */ { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, /* Leap years. */ { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } }; static int times_through_search; /* This library routine should never hang -- make sure we always return when we're searching for a value */ #ifdef DEBUG #include #include int debugging_enabled = 0; /* Print the values in a `struct tm'. */ static void printtm (it) struct tm *it; { printf ("%02d/%02d/%04d %02d:%02d:%02d (%s) yday:%03d dst:%d gmtoffset:%ld", it->tm_mon + 1, it->tm_mday, it->tm_year + 1900, it->tm_hour, it->tm_min, it->tm_sec, it->tm_zone, it->tm_yday, it->tm_isdst, it->tm_gmtoff); } #endif static time_t dist_tm (t1, t2) struct tm *t1; struct tm *t2; { time_t distance = 0; unsigned long int v1, v2; int diff_flag = 0; v1 = v2 = 0; #define doit(x, secs) \ v1 += t1->x * secs; \ v2 += t2->x * secs; \ if (!diff_flag) \ { \ if (t1->x < t2->x) \ diff_flag = -1; \ else if (t1->x > t2->x) \ diff_flag = 1; \ } doit (tm_year, 31536000); /* Okay, not all years have 365 days. */ doit (tm_mon, 2592000); /* Okay, not all months have 30 days. */ doit (tm_mday, 86400); doit (tm_hour, 3600); doit (tm_min, 60); doit (tm_sec, 1); #undef doit /* We should also make sure that the sign of DISTANCE is correct -- if DIFF_FLAG is positive, the distance should be positive and vice versa. */ distance = (v1 > v2) ? (v1 - v2) : (v2 - v1); if (diff_flag < 0) distance = -distance; if (times_through_search > 20) /* Arbitrary # of calls, but makes sure we never hang if there's a problem with this algorithm. */ { distance = diff_flag; } /* We need this DIFF_FLAG business because it is forseeable that the distance may be zero when, in actuality, the two structures are different. This is usually the case when the dates are 366 days apart and one of the years is a leap year. */ if (distance == 0 && diff_flag) distance = 86400 * diff_flag; return distance; } /* MKTIME converts the values in a struct tm to a time_t. The values in tm_wday and tm_yday are ignored; other values can be put outside of legal ranges since they will be normalized. This routine takes care of that normalization. */ void do_normalization (tmptr) struct tm *tmptr; { #define normalize(foo,x,y,bar); \ while (tmptr->foo < x) \ { \ tmptr->bar--; \ tmptr->foo = (y - (x - tmptr->foo) + 1); \ } \ while (tmptr->foo > y) \ { \ tmptr->foo = (x + (tmptr->foo - y) - 1); \ tmptr->bar++; \ } normalize (tm_sec, 0, 59, tm_min); normalize (tm_min, 0, 59, tm_hour); normalize (tm_hour, 0, 23, tm_mday); /* Do the month first, so day range can be found. */ normalize (tm_mon, 0, 11, tm_year); /* Since the day range modifies the month, we should be careful how we reference the array of month lengths -- it is possible that the month will go negative, hence the modulo... Also, tm_year is the year - 1900, so we have to 1900 to have it work correctly. */ normalize (tm_mday, 1, __mon_lengths[__isleap (tmptr->tm_year + 1900)] [((tmptr->tm_mon < 0) ? (12 + (tmptr->tm_mon % 12)) : (tmptr->tm_mon % 12)) ], tm_mon); /* Do the month again, because the day may have pushed it out of range. */ normalize (tm_mon, 0, 11, tm_year); /* Do the day again, because the month may have changed the range. */ normalize (tm_mday, 1, __mon_lengths[__isleap (tmptr->tm_year + 1900)] [((tmptr->tm_mon < 0) ? (12 + (tmptr->tm_mon % 12)) : (tmptr->tm_mon % 12)) ], tm_mon); #ifdef DEBUG if (debugging_enabled) { printf (" After normalizing:\n "); printtm (tmptr); putchar ('\n'); } #endif } /* Here's where the work gets done. */ #define BAD_STRUCT_TM ((time_t) -1) time_t __mktime_internal (timeptr, producer) struct tm *timeptr; struct tm *(*producer) __P ((const time_t *, struct tm *)); { struct tm our_tm; /* our working space */ struct tm *me = &our_tm; /* a pointer to the above */ time_t result; /* the value we return */ *me = *timeptr; /* copy the struct tm that was passed in by the caller */ /***************************/ /* Normalize the structure */ /***************************/ /* This routine assumes that the value of TM_ISDST is -1, 0, or 1. If the user didn't pass it in that way, fix it. */ if (me->tm_isdst > 0) me->tm_isdst = 1; else if (me->tm_isdst < 0) me->tm_isdst = -1; do_normalization (me); /* Get out of here if it's not possible to represent this struct. If any of the values in the normalized struct tm are negative, our algorithms won't work. Luckily, we only need to check the year at this point; normalization guarantees that all values will be in correct ranges EXCEPT the year. */ if (me->tm_year < 0) return BAD_STRUCT_TM; /*************************************************/ /* Find the appropriate time_t for the structure */ /*************************************************/ /* Modified b-search -- make intelligent guesses as to where the time might lie along the timeline, assuming that our target time lies a linear distance (w/o considering time jumps of a particular region). Assume that time does not fluctuate at all along the timeline -- e.g., assume that a day will always take 86400 seconds, etc. -- and come up with a hypothetical value for the time_t representation of the struct tm TARGET, in relation to the guess variable -- it should be pretty close! After testing this, the maximum number of iterations that I had on any number that I tried was 3! Not bad. The reason this is not a subroutine is that we will modify some fields in the struct tm (yday and mday). I've never felt good about side-effects when writing structured code... */ { struct tm *guess_tm; struct tm guess_struct; time_t guess = 0; time_t distance = 0; time_t last_distance = 0; times_through_search = 0; do { guess += distance; times_through_search++; guess_tm = (*producer) (&guess, &guess_struct); #ifdef DEBUG if (debugging_enabled) { printf (" Guessing time_t == %d\n ", (int) guess); printtm (guess_tm); putchar ('\n'); } #endif /* How far is our guess from the desired struct tm? */ distance = dist_tm (me, guess_tm); /* Handle periods of time where a period of time is skipped. For example, 2:15 3 April 1994 does not exist, because DST is in effect. The distance function will alternately return values of 3600 and -3600, because it doesn't know that the requested time doesn't exist. In these situations (even if the skip is not exactly an hour) the distances returned will be the same, but alternating in sign. We want the later time, so check to see that the distance is oscillating and we've chosen the correct of the two possibilities. Useful: 3 Apr 94 765356300, 30 Oct 94 783496000 */ if ((distance == -last_distance) && (distance < last_distance)) { /* If the caller specified that the DST flag was off, it's not possible to represent this time. */ if (me->tm_isdst == 0) { #ifdef DEBUG printf (" Distance is oscillating -- dst flag nixes struct!\n"); #endif return BAD_STRUCT_TM; } #ifdef DEBUG printf (" Distance is oscillating -- chose the later time.\n"); #endif distance = 0; } if ((distance == 0) && (me->tm_isdst != -1) && (me->tm_isdst != guess_tm->tm_isdst)) { /* If we're in this code, we've got the right time but the wrong daylight savings flag. We need to move away from the time that we have and approach the other time from the other direction. That is, if I've requested the non-DST version of a time and I get the DST version instead, I want to put us forward in time and search backwards to get the other time. I checked all of the configuration files for the tz package -- no entry saves more than two hours, so I think we'll be safe by moving 24 hours in one direction. IF THE AMOUNT OF TIME SAVED IN THE CONFIGURATION FILES CHANGES, THIS VALUE MAY NEED TO BE ADJUSTED. Luckily, we can never have more than one level of overlaps, or this would never work. */ #define SKIP_VALUE 86400 if (guess_tm->tm_isdst == 0) /* we got the later one, but want the earlier one */ distance = -SKIP_VALUE; else distance = SKIP_VALUE; #ifdef DEBUG printf (" Got the right time, wrong DST value -- adjusting\n"); #endif } last_distance = distance; } while (distance != 0); /* Check to see that the dst flag matches */ if (me->tm_isdst != -1) { if (me->tm_isdst != guess_tm->tm_isdst) { #ifdef DEBUG printf (" DST flag doesn't match! FIXME?\n"); #endif return BAD_STRUCT_TM; } } result = guess; /* Success! */ /* On successful completion, the values of tm_wday and tm_yday have to be set appropriately. */ /* me->tm_yday = guess_tm->tm_yday; me->tm_mday = guess_tm->tm_mday; */ *me = *guess_tm; } /* Update the caller's version of the structure */ *timeptr = *me; return result; } #if ! HAVE_LOCALTIME_R && ! defined (localtime_r) #ifdef _LIBC #define localtime_r __localtime_r #else /* Approximate localtime_r as best we can in its absence. */ #define localtime_r my_localtime_r /* Avoid clash with system localtime_r. */ static struct tm * localtime_r (t, tp) const time_t *t; struct tm *tp; { struct tm *l = localtime (t); if (! l) return 0; *tp = *l; return tp; } #endif /* ! _LIBC */ #endif /* ! HAVE_LOCALTIME_R && ! defined (localtime_r) */ time_t #ifdef DEBUG /* make it work even if the system's libc has it's own mktime routine */ my_mktime (timeptr) #else mktime (timeptr) #endif struct tm *timeptr; { return __mktime_internal (timeptr, localtime_r); } #ifdef weak_alias weak_alias (mktime, timelocal) #endif #ifdef DEBUG void main (argc, argv) int argc; char *argv[]; { int time; int result_time; struct tm *tmptr; if (argc == 1) { long q; printf ("starting long test...\n"); for (q = 10000000; q < 1000000000; q += 599) { struct tm *tm = localtime ((time_t *) &q); if ((q % 10000) == 0) { printf ("%ld\n", q); fflush (stdout); } if (q != my_mktime (tm)) { printf ("failed for %ld\n", q); fflush (stdout); } } printf ("test finished\n"); exit (0); } if (argc != 2) { printf ("wrong # of args\n"); exit (0); } debugging_enabled = 1; /* We want to see the info */ ++argv; time = atoi (*argv); tmptr = localtime ((time_t *) &time); printf ("Localtime tells us that a time_t of %d represents\n ", time); printtm (tmptr); putchar ('\n'); printf (" Given localtime's return val, mktime returns %d which is\n ", (int) my_mktime (tmptr)); printtm (tmptr); putchar ('\n'); #if 0 tmptr->tm_sec -= 20; tmptr->tm_min -= 20; tmptr->tm_hour -= 20; tmptr->tm_mday -= 20; tmptr->tm_mon -= 20; tmptr->tm_year -= 20; tmptr->tm_gmtoff -= 20000; /* This has no effect! */ tmptr->tm_zone = NULL; /* Nor does this! */ tmptr->tm_isdst = -1; #endif tmptr->tm_hour += 1; tmptr->tm_isdst = -1; printf ("\n\nchanged ranges: "); printtm (tmptr); putchar ('\n'); result_time = my_mktime (tmptr); printf ("\nmktime: %d\n", result_time); tmptr->tm_isdst = 0; printf ("\n\nchanged ranges: "); printtm (tmptr); putchar ('\n'); result_time = my_mktime (tmptr); printf ("\nmktime: %d\n", result_time); } #endif /* DEBUG */ /* Local Variables: compile-command: "gcc -g mktime.c -o mktime -DDEBUG" End: */ lrzsz-0.12.21rc/lib/stpcpy.c 666 764 764 2111 6607440602 10716 /* stpcpy.c -- copy a string and return pointer to end of new string Copyright (C) 1989, 1990 Free Software Foundation. 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifdef HAVE_CONFIG_H #include #endif /* Copy SRC to DEST, returning the address of the terminating '\0' in DEST. */ char * stpcpy (dest, src) char *dest; const char *src; { while ((*dest++ = *src++) != '\0') /* Do nothing. */ ; return dest - 1; } lrzsz-0.12.21rc/lib/strdup.c 666 764 764 2253 6607440602 10724 /* strdup.c : replacement function for missing strdup(). */ /* 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 of the License, 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., 675 Mass Ave, Cambridge, MA 02139, USA. Contact: uwe@ohse.de, Uwe Ohse @ DU3 (mausnet) Snail Mail (don't expect me to answer): Uwe Ohse Drosselstraße 2 47055 Duisburg Germany */ #include "config.h" #include #include char *strdup(const char *s) { char *p; size_t l=strlen(s)+1; p=malloc(l); if (!p) return NULL; return memcpy(p,s,l); } lrzsz-0.12.21rc/lib/strerror.c 444 764 764 1041 6760036605 11255 /* strerror.c -- strerror() replacement * Copyright (C) 1996 Uwe Ohse * * This has been placed in the public domain: do with it what you want. * * 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. * */ char * strerror(int num) { extern char *sys_errlist[]; extern int sys_nerr; if (num < 0 || num > sys_nerr) return "Unknown system error / illegal error number"; return sys_errlist[num]; } lrzsz-0.12.21rc/lib/strftime.c 666 764 764 50435 6607440602 11265 /* Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. 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. */ #ifdef HAVE_CONFIG_H # include #endif #ifdef _LIBC # define HAVE_LIMITS_H 1 # define HAVE_MBLEN 1 # define HAVE_MBRLEN 1 # define HAVE_STRUCT_ERA_ENTRY 1 # define HAVE_TM_GMTOFF 1 # define HAVE_TM_ZONE 1 # define MULTIBYTE_IS_FORMAT_SAFE 1 # define STDC_HEADERS 1 # include # include "../locale/localeinfo.h" #endif #include /* Some systems define `time_t' here. */ #ifdef TIME_WITH_SYS_TIME # include # include #else # ifdef HAVE_SYS_TIME_H # include # else # include # endif #endif #if HAVE_TZNAME extern char *tzname[]; #endif /* Do multibyte processing if multibytes are supported, unless multibyte sequences are safe in formats. Multibyte sequences are safe if they cannot contain byte sequences that look like format conversion specifications. The GNU C Library uses UTF8 multibyte encoding, which is safe for formats, but strftime.c can be used with other C libraries that use unsafe encodings. */ #define DO_MULTIBYTE (HAVE_MBLEN && ! MULTIBYTE_IS_FORMAT_SAFE) #if DO_MULTIBYTE # if HAVE_MBRLEN # include # else /* Simulate mbrlen with mblen as best we can. */ # define mbstate_t int # define mbrlen(s, n, ps) mblen (s, n) # define mbsinit(ps) (*(ps) == 0) # endif static const mbstate_t mbstate_zero; #endif #if HAVE_LIMITS_H # include #endif #if STDC_HEADERS # include # include # include #else # define memcpy(d, s, n) bcopy (s, d, n) #endif #ifndef __P #if defined (__GNUC__) || (defined (__STDC__) && __STDC__) #define __P(args) args #else #define __P(args) () #endif /* GCC. */ #endif /* Not __P. */ #ifndef PTR #ifdef __STDC__ #define PTR void * #else #define PTR char * #endif #endif #ifndef CHAR_BIT #define CHAR_BIT 8 #endif #define TYPE_SIGNED(t) ((t) -1 < 0) /* Bound on length of the string representing an integer value of type t. Subtract one for the sign bit if t is signed; 302 / 1000 is log10 (2) rounded up; add one for integer division truncation; add one more for a minus sign if t is signed. */ #define INT_STRLEN_BOUND(t) \ ((sizeof (t) * CHAR_BIT - TYPE_SIGNED (t)) * 302 / 100 + 1 + TYPE_SIGNED (t)) #define TM_YEAR_BASE 1900 #ifndef __isleap /* Nonzero if YEAR is a leap year (every 4 years, except every 100th isn't, and every 400th is). */ #define __isleap(year) \ ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0)) #endif #ifdef _LIBC # define gmtime_r __gmtime_r # define localtime_r __localtime_r #else # if ! HAVE_LOCALTIME_R # if ! HAVE_TM_GMTOFF /* Approximate gmtime_r as best we can in its absence. */ #define gmtime_r my_gmtime_r static struct tm *gmtime_r __P ((const time_t *, struct tm *)); static struct tm * gmtime_r (t, tp) const time_t *t; struct tm *tp; { struct tm *l = gmtime (t); if (! l) return 0; *tp = *l; return tp; } # endif /* ! HAVE_TM_GMTOFF */ /* Approximate localtime_r as best we can in its absence. */ #define localtime_r my_localtime_r static struct tm *localtime_r __P ((const time_t *, struct tm *)); static struct tm * localtime_r (t, tp) const time_t *t; struct tm *tp; { struct tm *l = localtime (t); if (! l) return 0; *tp = *l; return tp; } # endif /* ! HAVE_LOCALTIME_R */ #endif /* ! defined (_LIBC) */ #define add(n, f) \ do \ { \ i += (n); \ if (i >= maxsize) \ return 0; \ else \ if (p) \ { \ f; \ p += (n); \ } \ } while (0) #define cpy(n, s) add ((n), memcpy((PTR) p, (PTR) (s), (n))) #if ! HAVE_TM_GMTOFF /* Yield the difference between *A and *B, measured in seconds, ignoring leap seconds. */ static int tm_diff __P ((const struct tm *, const struct tm *)); static int tm_diff (a, b) const struct tm *a; const struct tm *b; { /* Compute intervening leap days correctly even if year is negative. Take care to avoid int overflow in leap day calculations, but it's OK to assume that A and B are close to each other. */ int a4 = (a->tm_year >> 2) + (TM_YEAR_BASE >> 2) - ! (a->tm_year & 3); int b4 = (b->tm_year >> 2) + (TM_YEAR_BASE >> 2) - ! (b->tm_year & 3); int a100 = a4 / 25 - (a4 % 25 < 0); int b100 = b4 / 25 - (b4 % 25 < 0); int a400 = a100 >> 2; int b400 = b100 >> 2; int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400); int years = a->tm_year - b->tm_year; int days = (365 * years + intervening_leap_days + (a->tm_yday - b->tm_yday)); return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour)) + (a->tm_min - b->tm_min)) + (a->tm_sec - b->tm_sec)); } #endif /* ! HAVE_TM_GMTOFF */ /* The number of days from the first day of the first ISO week of this year to the year day YDAY with week day WDAY. ISO weeks start on Monday; the first ISO week has the year's first Thursday. YDAY may be as small as YDAY_MINIMUM. */ #define ISO_WEEK_START_WDAY 1 /* Monday */ #define ISO_WEEK1_WDAY 4 /* Thursday */ #define YDAY_MINIMUM (-366) static int iso_week_days __P ((int, int)); #ifdef __GNUC__ inline #endif static int iso_week_days (yday, wday) int yday; int wday; { /* Add enough to the first operand of % to make it nonnegative. */ int big_enough_multiple_of_7 = (-YDAY_MINIMUM / 7 + 2) * 7; return (yday - (yday - wday + ISO_WEEK1_WDAY + big_enough_multiple_of_7) % 7 + ISO_WEEK1_WDAY - ISO_WEEK_START_WDAY); } #ifndef _NL_CURRENT static char const weekday_name[][10] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; static char const month_name[][10] = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; #endif /* Write information from TP into S according to the format string FORMAT, writing no more that MAXSIZE characters (including the terminating '\0') and returning number of characters written. If S is NULL, nothing will be written anywhere, so to determine how many characters would be written, use NULL for S and (size_t) UINT_MAX for MAXSIZE. */ size_t strftime (s, maxsize, format, tp) char *s; size_t maxsize; const char *format; register const struct tm *tp; { int hour12 = tp->tm_hour; #ifdef _NL_CURRENT const char *const a_wkday = _NL_CURRENT (LC_TIME, ABDAY_1 + tp->tm_wday); const char *const f_wkday = _NL_CURRENT (LC_TIME, DAY_1 + tp->tm_wday); const char *const a_month = _NL_CURRENT (LC_TIME, ABMON_1 + tp->tm_mon); const char *const f_month = _NL_CURRENT (LC_TIME, MON_1 + tp->tm_mon); const char *const ampm = _NL_CURRENT (LC_TIME, hour12 > 11 ? PM_STR : AM_STR); size_t aw_len = strlen (a_wkday); size_t am_len = strlen (a_month); size_t ap_len = strlen (ampm); #else const char *const f_wkday = weekday_name[tp->tm_wday]; const char *const f_month = month_name[tp->tm_mon]; const char *const a_wkday = f_wkday; const char *const a_month = f_month; const char *const ampm = "AMPM" + 2 * (hour12 > 11); size_t aw_len = 3; size_t am_len = 3; size_t ap_len = 2; #endif size_t wkday_len = strlen (f_wkday); size_t month_len = strlen (f_month); const char *zone; size_t zonelen; register size_t i = 0; register char *p = s; register const char *f; zone = 0; #if HAVE_TM_ZONE zone = (const char *) tp->tm_zone; #endif #if HAVE_TZNAME if (!(zone && *zone) && tp->tm_isdst >= 0) zone = tzname[tp->tm_isdst]; #endif if (! zone) zone = ""; /* POSIX.2 requires the empty string here. */ zonelen = strlen (zone); if (hour12 > 12) hour12 -= 12; else if (hour12 == 0) hour12 = 12; for (f = format; *f != '\0'; ++f) { int pad; /* Padding for number ('-', '_', or 0). */ int modifier; /* Field modifier ('E', 'O', or 0). */ int digits; /* Max digits for numeric format. */ int number_value; /* Numeric value to be printed. */ int negative_number; /* 1 if the number is negative. */ const char *subfmt; char *bufp; char buf[1 + (sizeof (int) < sizeof (time_t) ? INT_STRLEN_BOUND (time_t) : INT_STRLEN_BOUND (int))]; #if DO_MULTIBYTE switch (*f) { case '%': break; case '\a': case '\b': case '\t': case '\n': case '\v': case '\f': case '\r': case ' ': case '!': case '"': case '#': case '&': case'\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case'\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': /* The C Standard requires these 98 characters (plus '%') to be in the basic execution character set. None of these characters can start a multibyte sequence, so they need not be analyzed further. */ add (1, *p = *f); continue; default: /* Copy this multibyte sequence until we reach its end, find an error, or come back to the initial shift state. */ { mbstate_t mbstate = mbstate_zero; size_t len = 0; do { size_t bytes = mbrlen (f + len, (size_t) -1, &mbstate); if (bytes == 0) break; if (bytes == (size_t) -2 || bytes == (size_t) -1) { len++; break; } len += bytes; } while (! mbsinit (&mbstate)); cpy (len, f); continue; } } #else /* ! DO_MULTIBYTE */ /* Either multibyte encodings are not supported, or they are safe for formats, so any non-'%' byte can be copied through. */ if (*f != '%') { add (1, *p = *f); continue; } #endif /* ! DO_MULTIBYTE */ /* Check for flags that can modify a number format. */ ++f; switch (*f) { case '_': case '-': pad = *f++; break; default: pad = 0; break; } /* Check for modifiers. */ switch (*f) { case 'E': case 'O': modifier = *f++; break; default: modifier = 0; break; } /* Now do the specified format. */ switch (*f) { #define DO_NUMBER(d, v) \ digits = d; number_value = v; goto do_number #define DO_NUMBER_SPACEPAD(d, v) \ digits = d; number_value = v; goto do_number_spacepad case '%': if (modifier != 0) goto bad_format; add (1, *p = *f); break; case 'a': if (modifier != 0) goto bad_format; cpy (aw_len, a_wkday); break; case 'A': if (modifier != 0) goto bad_format; cpy (wkday_len, f_wkday); break; case 'b': case 'h': /* POSIX.2 extension. */ if (modifier != 0) goto bad_format; cpy (am_len, a_month); break; case 'B': if (modifier != 0) goto bad_format; cpy (month_len, f_month); break; case 'c': if (modifier == 'O') goto bad_format; #ifdef _NL_CURRENT if (! (modifier == 'E' && *(subfmt = _NL_CURRENT (LC_TIME, ERA_D_T_FMT)) != '\0')) subfmt = _NL_CURRENT (LC_TIME, D_T_FMT); #else subfmt = "%a %b %e %H:%M:%S %Y"; #endif subformat: { size_t len = strftime (p, maxsize - i, subfmt, tp); if (len == 0 && *subfmt) return 0; add (len, ;); } break; case 'C': /* POSIX.2 extension. */ if (modifier == 'O') goto bad_format; #if HAVE_STRUCT_ERA_ENTRY if (modifier == 'E') { struct era_entry *era = _nl_get_era_entry (tp); if (era) { size_t len = strlen (era->name_fmt); cpy (len, era->name_fmt); break; } } #endif { int year = tp->tm_year + TM_YEAR_BASE; DO_NUMBER (1, year / 100 - (year % 100 < 0)); } case 'x': if (modifier == 'O') goto bad_format; #ifdef _NL_CURRENT if (! (modifier == 'E' && *(subfmt = _NL_CURRENT (LC_TIME, ERA_D_FMT)) != '\0')) subfmt = _NL_CURRENT (LC_TIME, D_FMT); goto subformat; #endif /* Fall through. */ case 'D': /* POSIX.2 extension. */ if (modifier != 0) goto bad_format; subfmt = "%m/%d/%y"; goto subformat; case 'd': if (modifier == 'E') goto bad_format; DO_NUMBER (2, tp->tm_mday); case 'e': /* POSIX.2 extension. */ if (modifier == 'E') goto bad_format; DO_NUMBER_SPACEPAD (2, tp->tm_mday); /* All numeric formats set DIGITS and NUMBER_VALUE and then jump to one of these two labels. */ do_number_spacepad: /* Force `_' flag. */ pad = '_'; do_number: /* Format the number according to the MODIFIER flag. */ #ifdef _NL_CURRENT if (modifier == 'O' && 0 <= number_value) { /* Get the locale specific alternate representation of the number NUMBER_VALUE. If none exist NULL is returned. */ const char *cp = _nl_get_alt_digit (number_value); if (cp != NULL) { size_t digitlen = strlen (cp); if (digitlen != 0) { cpy (digitlen, cp); break; } } } #endif { unsigned int u = number_value; bufp = buf + sizeof (buf); negative_number = number_value < 0; if (negative_number) u = -u; do *--bufp = u % 10 + '0'; while ((u /= 10) != 0); } do_number_sign_and_padding: if (negative_number) *--bufp = '-'; if (pad != '-') { int padding = digits - (buf + sizeof (buf) - bufp); if (pad == '_') { while (0 < padding--) *--bufp = ' '; } else { bufp += negative_number; while (0 < padding--) *--bufp = '0'; if (negative_number) *--bufp = '-'; } } cpy (buf + sizeof (buf) - bufp, bufp); break; case 'H': if (modifier == 'E') goto bad_format; DO_NUMBER (2, tp->tm_hour); case 'I': if (modifier == 'E') goto bad_format; DO_NUMBER (2, hour12); case 'k': /* GNU extension. */ if (modifier == 'E') goto bad_format; DO_NUMBER_SPACEPAD (2, tp->tm_hour); case 'l': /* GNU extension. */ if (modifier == 'E') goto bad_format; DO_NUMBER_SPACEPAD (2, hour12); case 'j': if (modifier == 'E') goto bad_format; DO_NUMBER (3, 1 + tp->tm_yday); case 'M': if (modifier == 'E') goto bad_format; DO_NUMBER (2, tp->tm_min); case 'm': if (modifier == 'E') goto bad_format; DO_NUMBER (2, tp->tm_mon + 1); case 'n': /* POSIX.2 extension. */ add (1, *p = '\n'); break; case 'p': cpy (ap_len, ampm); break; case 'R': /* GNU extension. */ subfmt = "%H:%M"; goto subformat; case 'r': /* POSIX.2 extension. */ #ifdef _NL_CURRENT if (*(subfmt = _NL_CURRENT (LC_TIME, T_FMT_AMPM)) == '\0') #endif subfmt = "%I:%M:%S %p"; goto subformat; case 'S': if (modifier == 'E') goto bad_format; DO_NUMBER (2, tp->tm_sec); case 's': /* GNU extension. */ { struct tm ltm; time_t t; ltm = *tp; t = mktime (<m); /* Generate string value for T using time_t arithmetic; this works even if sizeof (long) < sizeof (time_t). */ bufp = buf + sizeof (buf); negative_number = t < 0; do { int d = t % 10; t /= 10; if (negative_number) { d = -d; /* Adjust if division truncates to minus infinity. */ if (0 < -1 % 10 && d < 0) { t++; d += 10; } } *--bufp = d + '0'; } while (t != 0); digits = 1; goto do_number_sign_and_padding; } case 'X': if (modifier == 'O') goto bad_format; #ifdef _NL_CURRENT if (! (modifier == 'E' && *(subfmt = _NL_CURRENT (LC_TIME, ERA_T_FMT)) != '\0')) subfmt = _NL_CURRENT (LC_TIME, T_FMT); goto subformat; #endif /* Fall through. */ case 'T': /* POSIX.2 extension. */ subfmt = "%H:%M:%S"; goto subformat; case 't': /* POSIX.2 extension. */ add (1, *p = '\t'); break; case 'u': /* POSIX.2 extension. */ DO_NUMBER (1, (tp->tm_wday - 1 + 7) % 7 + 1); case 'U': if (modifier == 'E') goto bad_format; DO_NUMBER (2, (tp->tm_yday - tp->tm_wday + 7) / 7); case 'V': case 'g': /* GNU extension. */ case 'G': /* GNU extension. */ if (modifier == 'E') goto bad_format; { int year = tp->tm_year + TM_YEAR_BASE; int days = iso_week_days (tp->tm_yday, tp->tm_wday); if (days < 0) { /* This ISO week belongs to the previous year. */ year--; days = iso_week_days (tp->tm_yday + (365 + __isleap (year)), tp->tm_wday); } else { int d = iso_week_days (tp->tm_yday - (365 + __isleap (year)), tp->tm_wday); if (0 <= d) { /* This ISO week belongs to the next year. */ year++; days = d; } } switch (*f) { case 'g': DO_NUMBER (2, (year % 100 + 100) % 100); case 'G': DO_NUMBER (1, year); default: DO_NUMBER (2, days / 7 + 1); } } case 'W': if (modifier == 'E') goto bad_format; DO_NUMBER (2, (tp->tm_yday - (tp->tm_wday - 1 + 7) % 7 + 7) / 7); case 'w': if (modifier == 'E') goto bad_format; DO_NUMBER (1, tp->tm_wday); case 'Y': #if HAVE_STRUCT_ERA_ENTRY if (modifier == 'E') { struct era_entry *era = _nl_get_era_entry (tp); if (era) { subfmt = strchr (era->name_fmt, '\0') + 1; goto subformat; } } #endif if (modifier == 'O') goto bad_format; else DO_NUMBER (1, tp->tm_year + TM_YEAR_BASE); case 'y': #if HAVE_STRUCT_ERA_ENTRY if (modifier == 'E') { struct era_entry *era = _nl_get_era_entry (tp); if (era) { int delta = tp->tm_year - era->start_date[0]; DO_NUMBER (1, (era->offset + (era->direction == '-' ? -delta : delta))); } } #endif DO_NUMBER (2, (tp->tm_year % 100 + 100) % 100); case 'Z': cpy (zonelen, zone); break; case 'z': /* GNU extension. */ if (tp->tm_isdst < 0) break; { int diff; #if HAVE_TM_GMTOFF diff = tp->tm_gmtoff; #else struct tm gtm; struct tm ltm; time_t lt; ltm = *tp; lt = mktime (<m); if (lt == (time_t) -1) { /* mktime returns -1 for errors, but -1 is also a valid time_t value. Check whether an error really occurred. */ struct tm tm; localtime_r (<, &tm); if ((ltm.tm_sec ^ tm.tm_sec) | (ltm.tm_min ^ tm.tm_min) | (ltm.tm_hour ^ tm.tm_hour) | (ltm.tm_mday ^ tm.tm_mday) | (ltm.tm_mon ^ tm.tm_mon) | (ltm.tm_year ^ tm.tm_year)) break; } if (! gmtime_r (<, >m)) break; diff = tm_diff (<m, >m); #endif if (diff < 0) { add (1, *p = '-'); diff = -diff; } else add (1, *p = '+'); diff /= 60; DO_NUMBER (4, (diff / 60) * 100 + diff % 60); } case '\0': /* GNU extension: % at end of format. */ --f; /* Fall through. */ default: /* Unknown format; output the format, including the '%', since this is most likely the right thing to do if a multibyte string has been misparsed. */ bad_format: { int flen; for (flen = 1; f[1 - flen] != '%'; flen++) continue; cpy (flen, &f[1 - flen]); } break; } } if (p) *p = '\0'; return i; } lrzsz-0.12.21rc/lib/strpbrk.c 666 764 764 2320 6607440602 11065 /* Copyright (C) 1991, 1994 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifdef HAVE_CONFIG_H # include #endif /* Find the first ocurrence in S of any character in ACCEPT. */ char * strpbrk (s, accept) register const char *s; register const char *accept; { while (*s != '\0') { const char *a = accept; while (*a != '\0') if (*a++ == *s) return (char *) s; ++s; } return 0; } lrzsz-0.12.21rc/lib/strstr.c 666 764 764 2326 6607440602 10745 /* strstr.c -- return the offset of one string within another Copyright (C) 1989, 1990 Free Software Foundation, Inc. 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* Written by Mike Rendell . */ /* Return the starting address of string S2 in S1; return 0 if it is not found. */ char * strstr (s1, s2) char *s1; char *s2; { int i; char *p1; char *p2; char *s = s1; for (p2 = s2, i = 0; *s; p2 = s2, i++, s++) { for (p1 = s; *p1 && *p2 && *p1 == *p2; p1++, p2++) ; if (!*p2) break; } if (!*p2) return s1 + i; return 0; } lrzsz-0.12.21rc/lib/strtol.c 666 764 764 20166 6607440602 10755 /* Copyright (C) 1991, 92, 94, 95, 96 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. 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. */ #ifdef HAVE_CONFIG_H # include #endif #ifdef _LIBC # define USE_NUMBER_GROUPING # define STDC_HEADERS # define HAVE_LIMITS_H #endif #include #include #ifndef errno extern int errno; #endif #ifdef HAVE_LIMITS_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifndef NULL # define NULL 0 # endif #endif #ifdef USE_NUMBER_GROUPING # include "../locale/localeinfo.h" #endif /* Nonzero if we are defining `strtoul' or `strtouq', operating on unsigned integers. */ #ifndef UNSIGNED # define UNSIGNED 0 # define INT LONG int #else # define INT unsigned LONG int #endif /* Determine the name. */ #if UNSIGNED # ifdef USE_WIDE_CHAR # ifdef QUAD # define strtol wcstouq # else # define strtol wcstoul # endif # else # ifdef QUAD # define strtol strtouq # else # define strtol strtoul # endif # endif #else # ifdef USE_WIDE_CHAR # ifdef QUAD # define strtol wcstoq # else # define strtol wcstol # endif # else # ifdef QUAD # define strtol strtoq # endif # endif #endif /* If QUAD is defined, we are defining `strtoq' or `strtouq', operating on `long long int's. */ #ifdef QUAD # define LONG long long # undef LONG_MIN # define LONG_MIN LONG_LONG_MIN # undef LONG_MAX # define LONG_MAX LONG_LONG_MAX # undef ULONG_MAX # define ULONG_MAX ULONG_LONG_MAX # if __GNUC__ == 2 && __GNUC_MINOR__ < 7 /* Work around gcc bug with using this constant. */ static const unsigned long long int maxquad = ULONG_LONG_MAX; # undef ULONG_MAX # define ULONG_MAX maxquad # endif #else # define LONG long #ifndef ULONG_MAX # define ULONG_MAX ((unsigned long) ~(unsigned long) 0) #endif #ifndef LONG_MAX # define LONG_MAX ((long int) (ULONG_MAX >> 1)) #endif #endif #ifdef USE_WIDE_CHAR # include # include # define L_(ch) L##ch # define UCHAR_TYPE wint_t # define STRING_TYPE wchar_t # define ISSPACE(ch) iswspace (ch) # define ISALPHA(ch) iswalpha (ch) # define TOUPPER(ch) towupper (ch) #else # define L_(ch) ch # define UCHAR_TYPE unsigned char # define STRING_TYPE char # define ISSPACE(ch) isspace (ch) # define ISALPHA(ch) isalpha (ch) # define TOUPPER(ch) toupper (ch) #endif #ifdef __STDC__ # define INTERNAL(x) INTERNAL1(x) # define INTERNAL1(x) __##x##_internal # define WEAKNAME(x) WEAKNAME1(x) # define WEAKNAME1(x) __##x #else # define INTERNAL(x) __/**/x/**/_internal # define WEAKNAME(x) __/**/x #endif #ifdef USE_NUMBER_GROUPING /* This file defines a function to check for correct grouping. */ # include "grouping.h" #endif /* Convert NPTR to an `unsigned long int' or `long int' in base BASE. If BASE is 0 the base is determined by the presence of a leading zero, indicating octal or a leading "0x" or "0X", indicating hexadecimal. If BASE is < 2 or > 36, it is reset to 10. If ENDPTR is not NULL, a pointer to the character after the last one converted is stored in *ENDPTR. */ INT INTERNAL (strtol) (nptr, endptr, base, group) const STRING_TYPE *nptr; STRING_TYPE **endptr; int base; int group; { int negative; register unsigned LONG int cutoff; register unsigned int cutlim; register unsigned LONG int i; register const STRING_TYPE *s; register UCHAR_TYPE c; const STRING_TYPE *save, *end; int overflow; #ifdef USE_NUMBER_GROUPING /* The thousands character of the current locale. */ wchar_t thousands; /* The numeric grouping specification of the current locale, in the format described in . */ const char *grouping; if (group) { grouping = _NL_CURRENT (LC_NUMERIC, GROUPING); if (*grouping <= 0 || *grouping == CHAR_MAX) grouping = NULL; else { /* Figure out the thousands separator character. */ if (mbtowc (&thousands, _NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP), strlen (_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP))) <= 0) thousands = (wchar_t) *_NL_CURRENT (LC_NUMERIC, THOUSANDS_SEP); if (thousands == L'\0') grouping = NULL; } } else grouping = NULL; #endif if (base < 0 || base == 1 || base > 36) base = 10; save = s = nptr; /* Skip white space. */ while (ISSPACE (*s)) ++s; if (*s == L_('\0')) goto noconv; /* Check for a sign. */ if (*s == L_('-')) { negative = 1; ++s; } else if (*s == L_('+')) { negative = 0; ++s; } else negative = 0; if (base == 16 && s[0] == L_('0') && TOUPPER (s[1]) == L_('X')) s += 2; /* If BASE is zero, figure it out ourselves. */ if (base == 0) if (*s == L_('0')) { if (TOUPPER (s[1]) == L_('X')) { s += 2; base = 16; } else base = 8; } else base = 10; /* Save the pointer so we can check later if anything happened. */ save = s; #ifdef USE_NUMBER_GROUPING if (group) { /* Find the end of the digit string and check its grouping. */ end = s; for (c = *end; c != L_('\0'); c = *++end) if (c != thousands && (c < L_('0') || c > L_('9')) && (!ISALPHA (c) || TOUPPER (c) - L_('A') + 10 >= base)) break; if (*s == thousands) end = s; else end = correctly_grouped_prefix (s, end, thousands, grouping); } else #endif end = NULL; cutoff = ULONG_MAX / (unsigned LONG int) base; cutlim = ULONG_MAX % (unsigned LONG int) base; overflow = 0; i = 0; for (c = *s; c != L_('\0'); c = *++s) { if (s == end) break; if (c >= L_('0') && c <= L_('9')) c -= L_('0'); else if (ISALPHA (c)) c = TOUPPER (c) - L_('A') + 10; else break; if (c >= base) break; /* Check for overflow. */ if (i > cutoff || (i == cutoff && c > cutlim)) overflow = 1; else { i *= (unsigned LONG int) base; i += c; } } /* Check if anything actually happened. */ if (s == save) goto noconv; /* Store in ENDPTR the address of one character past the last character we converted. */ if (endptr != NULL) *endptr = (STRING_TYPE *) s; #if !UNSIGNED /* Check for a value that is within the range of `unsigned LONG int', but outside the range of `LONG int'. */ if (overflow == 0 && i > (negative ? -((unsigned LONG int) (LONG_MIN + 1)) + 1 : (unsigned LONG int) LONG_MAX)) overflow = 1; #endif if (overflow) { errno = ERANGE; #if UNSIGNED return ULONG_MAX; #else return negative ? LONG_MIN : LONG_MAX; #endif } /* Return the result of the appropriate sign. */ return (negative ? -i : i); noconv: /* We must handle a special case here: the base is 0 or 16 and the first two characters and '0' and 'x', but the rest are no hexadecimal digits. This is no error case. We return 0 and ENDPTR points to the `x`. */ if (endptr != NULL) if (save - nptr >= 2 && TOUPPER (save[-1]) == L_('X') && save[-2] == L_('0')) *endptr = (STRING_TYPE *) &save[-1]; else /* There was no number to convert. */ *endptr = (STRING_TYPE *) nptr; return 0L; } /* External user entry point. */ #undef __P #if defined (__STDC__) && __STDC__ #define __P(args) args #else #define __P(args) () #endif /* Prototype. */ INT strtol __P ((const STRING_TYPE *nptr, STRING_TYPE **endptr, int base)); INT strtol (nptr, endptr, base) const STRING_TYPE *nptr; STRING_TYPE **endptr; int base; { return INTERNAL (strtol) (nptr, endptr, base, 0); } lrzsz-0.12.21rc/lib/strtoul.c 666 764 764 1544 6607440602 11121 /* Copyright (C) 1991 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ #define UNSIGNED 1 #include lrzsz-0.12.21rc/lib/vasprintf.c 666 764 764 7621 6607440603 11424 /* Like vsprintf but provides a pointer to malloc'd storage, which must be freed by the caller. Copyright (C) 1994 Free Software Foundation, Inc. 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. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #if __STDC__ # include #else # include #endif #ifdef TEST int global_total_width; #endif /* unsigned long strtoul (); */ /* char *malloc (); */ static int int_vasprintf (result, format, args) char **result; const char *format; va_list *args; { const char *p = format; /* Add one to make sure that it is never zero, which might cause malloc to return NULL. */ int total_width = strlen (format) + 1; va_list ap; memcpy (&ap, args, sizeof (va_list)); while (*p != '\0') { if (*p++ == '%') { while (strchr ("-+ #0", *p)) ++p; if (*p == '*') { ++p; total_width += abs (va_arg (ap, int)); } else total_width += strtoul (p, &p, 10); if (*p == '.') { ++p; if (*p == '*') { ++p; total_width += abs (va_arg (ap, int)); } else total_width += strtoul (p, &p, 10); } while (strchr ("hlL", *p)) ++p; /* Should be big enough for any format specifier except %s. */ total_width += 30; switch (*p) { case 'd': case 'i': case 'o': case 'u': case 'x': case 'X': case 'c': (void) va_arg (ap, int); break; case 'f': case 'e': case 'E': case 'g': case 'G': (void) va_arg (ap, double); break; case 's': total_width += strlen (va_arg (ap, char *)); break; case 'p': case 'n': (void) va_arg (ap, char *); break; } } } #ifdef TEST global_total_width = total_width; #endif *result = malloc (total_width); if (*result != NULL) return vsprintf (*result, format, *args); else return 0; } int vasprintf (result, format, args) char **result; const char *format; va_list args; { return int_vasprintf (result, format, &args); } int asprintf #if __STDC__ (char **result, const char *format, ...) #else (result, va_alist) char **result; va_dcl #endif { va_list args; int done; #if __STDC__ va_start (args, format); #else char *format; va_start (args); format = va_arg (args, char *); #endif done = vasprintf (result, format, args); va_end (args); return done; } #ifdef TEST void checkit #if __STDC__ (const char* format, ...) #else (va_alist) va_dcl #endif { va_list args; char *result; #if __STDC__ va_start (args, format); #else char *format; va_start (args); format = va_arg (args, char *); #endif vasprintf (&result, format, args); if (strlen (result) < global_total_width) printf ("PASS: "); else printf ("FAIL: "); printf ("%d %s\n", global_total_width, result); } int main () { checkit ("%d", 0x12345678); checkit ("%200d", 5); checkit ("%.300d", 6); checkit ("%100.150d", 7); checkit ("%s", "jjjjjjjjjiiiiiiiiiiiiiiioooooooooooooooooppppppppppppaa\n\ 777777777777777777333333333333366666666666622222222222777777777777733333"); checkit ("%f%s%d%s", 1.0, "foo", 77, "asdjffffffffffffffiiiiiiiiiiixxxxx"); } #endif /* TEST */ lrzsz-0.12.21rc/lib/long-options.c 644 764 764 4164 6736336201 12034 /* Utility to accept --help and --version options as unobtrusively as possible. Copyright (C) 1993, 1994 Free Software Foundation, Inc. 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* Jim Meyering (meyering@comco.com) */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include "long-options.h" static struct option const long_options[] = { {"help", no_argument, 0, 'h'}, {"version", no_argument, 0, 'v'}, {0, 0, 0, 0} }; /* Process long options --help and --version, but only if argc == 2. Be careful not to gobble up `--'. */ #ifdef __cplusplus void parse_long_options (int argc, char **argv, void (*version)(void), void (*usage)(int)) #else void parse_long_options (argc, argv,version, usage) int argc; char **argv; void (*version)(); void (*usage)(); #endif { int c; int saved_opterr; int saved_optind; saved_opterr = opterr; saved_optind = optind; /* Don't print an error message for unrecognized options. */ opterr = 0; if (argc == 2 && (c = getopt_long (argc, argv, "+", long_options, (int *) 0)) != EOF) { switch (c) { case 'h': (*usage) (0); case 'v': (*version) (); /* printf ("%s (%s) %s\n", command_name, package, version_string); */ exit (0); default: /* Don't process any other long-named options. */ break; } } /* Restore previous value. */ opterr = saved_opterr; /* Restore optind in case it has advanced past a leading `--'. */ optind = saved_optind; } lrzsz-0.12.21rc/lib/xstrtol.c 664 764 764 6564 6736333217 11137 /* A more useful interface to strtol. Copyright (C) 1995, 1996 Free Software Foundation, Inc. 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. */ /* Jim Meyering (meyering@na-net.ornl.gov) */ #ifdef HAVE_CONFIG_H #include #endif #ifdef STDC_HEADERS #include #endif #ifdef HAVE_STRING_H # include #else # include # ifndef strchr # define strchr index # endif #endif #define NDEBUG #include #include #ifndef errno extern int errno; #endif #if HAVE_LIMITS_H # include #endif #ifndef ULONG_MAX # define ULONG_MAX ((unsigned long) ~(unsigned long) 0) #endif #ifndef LONG_MAX # define LONG_MAX ((long int) (ULONG_MAX >> 1)) #endif #include "xstrtol.h" #define BKM_SCALE(x, scale_factor, error_return) \ do \ { \ if ((x) > (double) __ZLONG_MAX / (scale_factor)) \ return (error_return); \ (x) *= (scale_factor); \ } \ while (0) __unsigned long int __strtol (); /* FIXME: comment. */ strtol_error #ifdef __cplusplus __xstrtol (const char *s, char **ptr, int base, __unsigned long int *val, const char *valid_suffixes) #else __xstrtol (s, ptr, base, val, valid_suffixes) const char *s; char **ptr; int base; __unsigned long int *val; const char *valid_suffixes; #endif { char *t_ptr; char **p; __unsigned long int tmp; assert (0 <= base && base <= 36); p = (ptr ? ptr : &t_ptr); errno = 0; tmp = __strtol (s, p, base); if (errno != 0) return LONGINT_OVERFLOW; if (*p == s) return LONGINT_INVALID; if (!valid_suffixes) { if (**p == '\0') { *val = tmp; return LONGINT_OK; } else return LONGINT_INVALID_SUFFIX_CHAR; } if (**p != '\0' && strchr (valid_suffixes, **p)) { switch (**p) { case 'b': BKM_SCALE (tmp, 512, LONGINT_OVERFLOW); ++(*p); break; case 'c': ++(*p); break; case 'B': case 'k': BKM_SCALE (tmp, 1024, LONGINT_OVERFLOW); ++(*p); break; case 'm': BKM_SCALE (tmp, 1024 * 1024, LONGINT_OVERFLOW); ++(*p); break; case 'w': BKM_SCALE (tmp, 2, LONGINT_OVERFLOW); ++(*p); break; default: return LONGINT_INVALID_SUFFIX_CHAR; break; } } *val = tmp; return LONGINT_OK; } #ifdef TESTING_XSTRTO #include #include "error.h" char *program_name; int main (int argc, char** argv) { strtol_error s_err; int i; program_name = argv[0]; for (i=1; i%lu (%s)\n", argv[i], val, p); } else { STRTOL_FATAL_ERROR (argv[i], "arg", s_err); } } exit (0); } #endif /* TESTING_XSTRTO */ lrzsz-0.12.21rc/lib/xstrtoul.c 666 764 764 62 6607440603 11244 #define STRING_TO_UNSIGNED 1 #include "xstrtol.c" lrzsz-0.12.21rc/lib/error.c 664 764 764 12110 6736333513 10550 /* error.c -- error handler for noninteractive utilities Copyright (C) 1990, 91, 92, 93, 94, 95, 96 Free Software Foundation, Inc. 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. */ /* Written by David MacKenzie . */ #ifdef HAVE_CONFIG_H # include #endif #include #if HAVE_VPRINTF || HAVE_DOPRNT || _LIBC || defined(__cplusplus) # if __STDC__ || defined(__cplusplus) # include # define VA_START(args, lastarg) va_start(args, lastarg) # else # include # define VA_START(args, lastarg) va_start(args) # endif #else # define va_alist a1, a2, a3, a4, a5, a6, a7, a8 # define va_dcl char *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8; #endif #if STDC_HEADERS || _LIBC # include # include #else void exit (); #endif #ifndef _ # define _(String) String #endif /* If NULL, error will flush stdout, then print on stderr the program name, a colon and a space. Otherwise, error will call this function without parameters instead. */ void (*error_print_progname) ( #if __STDC__ - 0 void #endif ); /* This variable is incremented each time `error' is called. */ unsigned int error_message_count; #ifdef _LIBC /* In the GNU C library, there is a predefined variable for this. */ # define program_name program_invocation_name # include #else /* The calling program should define program_name and set it to the name of the executing program. */ extern char *program_name; # if HAVE_STRERROR # ifndef strerror /* On some systems, strerror is a macro */ char *strerror (); # endif # else static char * private_strerror (errnum) int errnum; { extern char *sys_errlist[]; extern int sys_nerr; if (errnum > 0 && errnum <= sys_nerr) return sys_errlist[errnum]; return _("Unknown system error"); } # define strerror private_strerror # endif /* HAVE_STRERROR */ #endif /* _LIBC */ /* Print the program name and error message MESSAGE, which is a printf-style format string with optional args. If ERRNUM is nonzero, print its corresponding system error message. Exit with status STATUS if it is nonzero. */ /* VARARGS */ void #if defined(VA_START) && __STDC__ error (int status, int errnum, const char *message, ...) #else error (status, errnum, message, va_alist) int status; int errnum; char *message; va_dcl #endif { #if defined(VA_START) va_list args; #endif if (error_print_progname) (*error_print_progname) (); else { fflush (stdout); fprintf (stderr, "%s: ", program_name); } #if defined(VA_START) VA_START(args, message); # if HAVE_VPRINTF || _LIBC vfprintf (stderr, message, args); # else _doprnt (message, args, stderr); # endif va_end (args); #else fprintf (stderr, message, a1, a2, a3, a4, a5, a6, a7, a8); #endif ++error_message_count; if (errnum) fprintf (stderr, ": %s", strerror (errnum)); putc ('\n', stderr); fflush (stderr); if (status) exit (status); } /* Sometimes we want to have at most one error per line. This variable controls whether this mode is selected or not. */ int error_one_per_line; void #if defined(VA_START) && __STDC__ error_at_line (int status, int errnum, const char *file_name, unsigned int line_number, const char *message, ...) #else error_at_line (status, errnum, file_name, line_number, message, va_alist) int status; int errnum; const char *file_name; unsigned int line_number; char *message; va_dcl #endif { #ifdef VA_START va_list args; #endif if (error_one_per_line) { static const char *old_file_name; static unsigned int old_line_number; if (old_line_number == line_number && (file_name == old_file_name || !strcmp (old_file_name, file_name))) /* Simply return and print nothing. */ return; old_file_name = file_name; old_line_number = line_number; } if (error_print_progname) (*error_print_progname) (); else { fflush (stdout); fprintf (stderr, "%s:", program_name); } if (file_name != NULL) fprintf (stderr, "%s:%d: ", file_name, line_number); #ifdef VA_START VA_START (args, message); # if HAVE_VPRINTF || _LIBC vfprintf (stderr, message, args); # else _doprnt (message, args, stderr); # endif va_end (args); #else fprintf (stderr, message, a1, a2, a3, a4, a5, a6, a7, a8); #endif ++error_message_count; if (errnum) fprintf (stderr, ": %s", strerror (errnum)); putc ('\n', stderr); fflush (stderr); if (status) exit (status); } lrzsz-0.12.21rc/lib/getopt.h 666 764 764 10526 6607440602 10734 /* Declarations for getopt. Copyright (C) 1989, 90, 91, 92, 93, 94 Free Software Foundation, Inc. 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef _GETOPT_H #define _GETOPT_H 1 #ifdef __cplusplus extern "C" { #endif /* For communication from `getopt' to the caller. When `getopt' finds an option that takes an argument, the argument value is returned here. Also, when `ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ extern char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to `getopt'. On entry to `getopt', zero means this is the first call; initialize. When `getopt' returns EOF, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, `optind' communicates from one call to the next how much of ARGV has been scanned so far. */ extern int optind; /* Callers store zero here to inhibit the error message `getopt' prints for unrecognized options. */ extern int opterr; /* Set to an option character which was unrecognized. */ extern int optopt; /* Describe the long-named options requested by the application. The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector of `struct option' terminated by an element containing a name which is zero. The field `has_arg' is: no_argument (or 0) if the option does not take an argument, required_argument (or 1) if the option requires an argument, optional_argument (or 2) if the option takes an optional argument. If the field `flag' is not NULL, it points to a variable that is set to the value given in the field `val' when the option is found, but left unchanged if the option is not found. To have a long-named option do something other than set an `int' to a compiled-in constant, such as set a value from `optarg', set the option's `flag' field to zero and its `val' field to a nonzero value (the equivalent single-letter option character, if there is one). For long options that have a zero `flag' field, `getopt' returns the contents of the `val' field. */ struct option { #if defined (__STDC__) && __STDC__ const char *name; #else char *name; #endif /* has_arg can't be an enum because some compilers complain about type mismatches in all the code that assumes it is an int. */ int has_arg; int *flag; int val; }; /* Names for the values of the `has_arg' field of `struct option'. */ #define no_argument 0 #define required_argument 1 #define optional_argument 2 #if defined (__STDC__) && __STDC__ #ifdef __GNU_LIBRARY__ /* Many other libraries have conflicting prototypes for getopt, with differences in the consts, in stdlib.h. To avoid compilation errors, only prototype getopt for the GNU C library. */ extern int getopt (int argc, char *const *argv, const char *shortopts); #else /* not __GNU_LIBRARY__ */ extern int getopt (); #endif /* __GNU_LIBRARY__ */ extern int getopt_long (int argc, char *const *argv, const char *shortopts, const struct option *longopts, int *longind); extern int getopt_long_only (int argc, char *const *argv, const char *shortopts, const struct option *longopts, int *longind); /* Internal only. Users should not call this directly. */ extern int _getopt_internal (int argc, char *const *argv, const char *shortopts, const struct option *longopts, int *longind, int long_only); #else /* not __STDC__ */ extern int getopt (); extern int getopt_long (); extern int getopt_long_only (); extern int _getopt_internal (); #endif /* __STDC__ */ #ifdef __cplusplus } #endif #endif /* _GETOPT_H */ lrzsz-0.12.21rc/lib/long-options.h 666 764 764 344 6607440602 12017 #undef __P #if defined (__STDC__) && __STDC__ #define __P(args) args #else #define __P(args) () #endif void parse_long_options __P ((int _argc, char **_argv, void (*_version) (void), void (*_usage) (int))); lrzsz-0.12.21rc/lib/xstrtol.h 666 764 764 3261 6607440603 11130 #ifndef _xstrtol_h_ #define _xstrtol_h_ 1 #if STRING_TO_UNSIGNED # define __xstrtol xstrtoul # define __strtol strtoul # define __unsigned unsigned # define __ZLONG_MAX ULONG_MAX #else # define __xstrtol xstrtol # define __strtol strtol # define __unsigned /* empty */ # define __ZLONG_MAX LONG_MAX #endif #undef __P #if defined (__STDC__) && __STDC__ #define __P(x) x #else #define __P(x) () #endif enum strtol_error { LONGINT_OK, LONGINT_INVALID, LONGINT_INVALID_SUFFIX_CHAR, LONGINT_OVERFLOW }; typedef enum strtol_error strtol_error; strtol_error __xstrtol __P ((const char *s, char **ptr, int base, __unsigned long int *val, const char *valid_suffixes)); #define _STRTOL_ERROR(exit_code, str, argument_type_string, err) \ do \ { \ switch ((err)) \ { \ case LONGINT_OK: \ abort (); \ \ case LONGINT_INVALID: \ error ((exit_code), 0, "invalid %s `%s'", \ (argument_type_string), (str)); \ break; \ \ case LONGINT_INVALID_SUFFIX_CHAR: \ error ((exit_code), 0, "invalid character following %s `%s'", \ (argument_type_string), (str)); \ break; \ \ case LONGINT_OVERFLOW: \ /* FIXME: make this message dependent on STRING_TO_UNSIGNED */\ error ((exit_code), 0, "%s `%s' larger than maximum long int",\ (argument_type_string), (str)); \ break; \ } \ } \ while (0) #define STRTOL_FATAL_ERROR(str, argument_type_string, err) \ _STRTOL_ERROR (2, str, argument_type_string, err) #define STRTOL_FAIL_WARN(str, argument_type_string, err) \ _STRTOL_ERROR (0, str, argument_type_string, err) #endif /* _xstrtol_h_ */ lrzsz-0.12.21rc/lib/xstrtoul.h 666 764 764 172 6607440603 11273 #ifndef _xstrtoul_h_ #define _xstrtoul_h_ 1 #define STRING_TO_UNSIGNED 1 #include "xstrtol.h" #endif /* _xstrtoul_h_ */ lrzsz-0.12.21rc/lib/error.h 666 764 764 4605 6607440602 10544 /* error.h -- declaration for error-reporting function Copyright (C) 1995, 1996 Free Software Foundation, Inc. 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. */ #ifndef _error_h_ #define _error_h_ #ifndef __attribute__ /* This feature is available in gcc versions 2.5 and later. */ # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__ # define __attribute__(Spec) /* empty */ # endif /* The __-protected variants of `format' and `printf' attributes are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */ # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) # define __format__ format # define __printf__ printf # endif #endif #if defined (__STDC__) && __STDC__ /* Print a message with `fprintf (stderr, FORMAT, ...)'; if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). If STATUS is nonzero, terminate the program with `exit (STATUS)'. */ extern void error (int status, int errnum, const char *format, ...) __attribute__ ((__format__ (__printf__, 3, 4))); extern void error_at_line (int status, int errnum, const char *fname, unsigned int lineno, const char *format, ...) __attribute__ ((__format__ (__printf__, 5, 6))); /* If NULL, error will flush stdout, then print on stderr the program name, a colon and a space. Otherwise, error will call this function without parameters instead. */ extern void (*error_print_progname) (void); #else void error (); void error_at_line (); extern void (*error_print_progname) (); #endif /* This variable is incremented each time `error' is called. */ extern unsigned int error_message_count; /* Sometimes we want to have at most one error per line. This variable controls whether this mode is selected or not. */ extern int error_one_per_line; #endif /* _error_h_ */ lrzsz-0.12.21rc/intl/ 777 764 764 0 6760042372 7437 5lrzsz-0.12.21rc/intl/ChangeLog 666 764 764 100401 6607440602 11243 1997-09-06 02:10 Ulrich Drepper * intlh.inst.in: Reformat copyright. 1997-08-19 15:22 Ulrich Drepper * dcgettext.c (DCGETTEXT): Remove wrong comment. 1997-08-16 00:13 Ulrich Drepper * Makefile.in (install-data): Don't change directory to install. 1997-08-01 14:30 Ulrich Drepper * cat-compat.c: Fix copyright. * localealias.c: Don't define strchr unless !HAVE_STRCHR. * loadmsgcat.c: Update copyright. Fix typos. * l10nflist.c: Don't define strchr unless !HAVE_STRCHR. (_nl_make_l10nflist): Handle sponsor and revision correctly. * gettext.c: Update copyright. * gettext.h: Likewise. * hash-string.h: Likewise. * finddomain.c: Remoave dead code. Define strchr only if !HAVE_STRCHR. * explodename.c: Include . * explodename.c: Reformat copyright text. (_nl_explode_name): Fix typo. * dcgettext.c: Define and use __set_errno. (guess_category_value): Don't use setlocale if HAVE_LC_MESSAGES is not defined. * bindtextdom.c: Pretty printing. 1997-05-01 02:25 Ulrich Drepper * dcgettext.c (guess_category_value): Don't depend on HAVE_LC_MESSAGES. We don't need the macro here. Patch by Bruno Haible . * cat-compat.c (textdomain): DoN't refer to HAVE_SETLOCALE_NULL macro. Instead use HAVE_LOCALE_NULL and define it when using glibc, as in dcgettext.c. Patch by Bruno Haible . * Makefile.in (CPPFLAGS): New variable. Reported by Franc,ois Pinard. Mon Mar 10 06:51:17 1997 Ulrich Drepper * Makefile.in: Implement handling of libtool. * gettextP.h: Change data structures for use of generic lowlevel i18n file handling. Wed Dec 4 20:21:18 1996 Ulrich Drepper * textdomain.c: Put parentheses around arguments of memcpy macro definition. * localealias.c: Likewise. * l10nflist.c: Likewise. * finddomain.c: Likewise. * bindtextdom.c: Likewise. Reported by Thomas Esken. Mon Nov 25 22:57:51 1996 Ulrich Drepper * textdomain.c: Move definition of `memcpy` macro to right position. Fri Nov 22 04:01:58 1996 Ulrich Drepper * finddomain.c [!HAVE_STRING_H && !_LIBC]: Define memcpy using bcopy if not already defined. Reported by Thomas Esken. * bindtextdom.c: Likewise. * l10nflist.c: Likewise. * localealias.c: Likewise. * textdomain.c: Likewise. Tue Oct 29 11:10:27 1996 Ulrich Drepper * Makefile.in (libdir): Change to use exec_prefix instead of prefix. Reported by Knut-HĺvardAksnes . Sat Aug 31 03:07:09 1996 Ulrich Drepper * l10nflist.c (_nl_normalize_codeset): We convert to lower case, so don't prepend uppercase `ISO' for only numeric arg. Fri Jul 19 00:15:46 1996 Ulrich Drepper * l10nflist.c: Move inclusion of argz.h, ctype.h, stdlib.h after definition of _GNU_SOURCE. Patch by Roland McGrath. * Makefile.in (uninstall): Fix another bug with `for' loop and empty arguments. Patch by Jim Meyering. Correct name os uninstalled files: no intl- prefix anymore. * Makefile.in (install-data): Again work around shells which cannot handle mpty for list. Reported by Jim Meyering. Sat Jul 13 18:11:35 1996 Ulrich Drepper * Makefile.in (install): Split goal. Now depend on install-exec and install-data. (install-exec, install-data): New goals. Created from former install goal. Reported by Karl Berry. Sat Jun 22 04:58:14 1996 Ulrich Drepper * Makefile.in (MKINSTALLDIRS): New variable. Path to mkinstalldirs script. (install): use MKINSTALLDIRS variable or if the script is not present try to find it in the $top_scrdir). Wed Jun 19 02:56:56 1996 Ulrich Drepper * l10nflist.c: Linux libc *partly* includes the argz_* functions. Grr. Work around by renaming the static version and use macros for renaming. Tue Jun 18 20:11:17 1996 Ulrich Drepper * l10nflist.c: Correct presence test macros of __argz_* functions. * l10nflist.c: Include based on test of it instead when __argz_* functions are available. Reported by Andreas Schwab. Thu Jun 13 15:17:44 1996 Ulrich Drepper * explodename.c, l10nflist.c: Define NULL for dumb systems. Tue Jun 11 17:05:13 1996 Ulrich Drepper * intlh.inst.in, libgettext.h (dcgettext): Rename local variable result to __result to prevent name clash. * l10nflist.c, localealias.c, dcgettext.c: Define _GNU_SOURCE to get prototype for stpcpy and strcasecmp. * intlh.inst.in, libgettext.h: Move declaration of `_nl_msg_cat_cntr' outside __extension__ block to prevent warning from gcc's -Wnested-extern option. Fri Jun 7 01:58:00 1996 Ulrich Drepper * Makefile.in (install): Remove comment. Thu Jun 6 17:28:17 1996 Ulrich Drepper * Makefile.in (install): Work around for another Buglix stupidity. Always use an `else' close for `if's. Reported by Nelson Beebe. * Makefile.in (intlh.inst): Correct typo in phony rule. Reported by Nelson Beebe. Thu Jun 6 01:49:52 1996 Ulrich Drepper * dcgettext.c (read_alias_file): Rename variable alloca_list to block_list as the macro calls assume. Patch by Eric Backus. * localealias.c [!HAVE_ALLOCA]: Define alloca as macro using malloc. (read_alias_file): Rename varriabe alloca_list to block_list as the macro calls assume. Patch by Eric Backus. * l10nflist.c: Correct conditional for inclusion. Reported by Roland McGrath. * Makefile.in (all): Depend on all-@USE_INCLUDED_LIBINTL@, not all-@USE_NLS@. * Makefile.in (install): intlh.inst comes from local dir, not $(srcdir). * Makefile.in (intlh.inst): Special handling of this goal. If used in gettext, this is really a rul to construct this file. If used in any other package it is defined as a .PHONY rule with empty body. * finddomain.c: Extract locale file information handling into l10nfile.c. Rename local stpcpy__ function to stpcpy. * dcgettext.c (stpcpy): Add local definition. * l10nflist.c: Solve some portability problems. Patches partly by Thomas Esken. Add local definition of stpcpy. Tue Jun 4 02:47:49 1996 Ulrich Drepper * intlh.inst.in: Don't depend including on HAVE_LOCALE_H. Instead configure must rewrite this fiile depending on the result of the configure run. * Makefile.in (install): libintl.inst is now called intlh.inst. Add rules for updating intlh.inst from intlh.inst.in. * libintl.inst: Renamed to intlh.inst.in. * localealias.c, dcgettext.c [__GNUC__]: Define HAVE_ALLOCA to 1 because gcc has __buitlin_alloca. Reported by Roland McGrath. Mon Jun 3 00:32:16 1996 Ulrich Drepper * Makefile.in (installcheck): New goal to fulfill needs of automake's distcheck. * Makefile.in (install): Reorder commands so that VERSION is found. * Makefile.in (gettextsrcdir): Now use subdirectory intl/ in @datadir@/gettext. (COMSRCS): Add l10nfile.c. (OBJECTS): Add l10nfile.o. (DISTFILES): Rename to DISTFILE.normal. Remove $(DISTFILES.common). (DISTFILE.gettext): Remove $(DISTFILES.common). (all-gettext): Remove goal. (install): If $(PACKAGE) = gettext install, otherwose do nothing. No package but gettext itself should install libintl.h + headers. (dist): Extend goal to work for gettext, too. (dist-gettext): Remove goal. * dcgettext.c [!HAVE_ALLOCA]: Define macro alloca by using malloc. Sun Jun 2 17:33:06 1996 Ulrich Drepper * loadmsgcat.c (_nl_load_domain): Parameter is now comes from find_l10nfile. Sat Jun 1 02:23:03 1996 Ulrich Drepper * l10nflist.c (__argz_next): Add definition. * dcgettext.c [!HAVE_ALLOCA]: Add code for handling missing alloca code. Use new l10nfile handling. * localealias.c [!HAVE_ALLOCA]: Add code for handling missing alloca code. * l10nflist.c: Initial revision. Tue Apr 2 18:51:18 1996 Ulrich Drepper * Makefile.in (all-gettext): New goal. Same as all-yes. Thu Mar 28 23:01:22 1996 Karl Eichwalder * Makefile.in (gettextsrcdir): Define using @datadir@. Tue Mar 26 12:39:14 1996 Ulrich Drepper * finddomain.c: Include . Reported by Roland McGrath. Sat Mar 23 02:00:35 1996 Ulrich Drepper * finddomain.c (stpcpy): Rename to stpcpy__ to prevent clashing with external declaration. Sat Mar 2 00:47:09 1996 Ulrich Drepper * Makefile.in (all-no): Rename from all_no. Sat Feb 17 00:25:59 1996 Ulrich Drepper * gettextP.h [loaded_domain]: Array `successor' must now contain up to 63 elements (because of codeset name normalization). * finddomain.c: Implement codeset name normalization. Thu Feb 15 04:39:09 1996 Ulrich Drepper * Makefile.in (all): Define to `all-@USE_NLS@'. (all-yes, all_no): New goals. `all-no' is noop, `all-yes' is former all. Mon Jan 15 21:46:01 1996 Howard Gayle * localealias.c (alias_compare): Increment string pointers in loop of strcasecmp replacement. Fri Dec 29 21:16:34 1995 Ulrich Drepper * Makefile.in (install-src): Who commented this goal out ? :-) Fri Dec 29 15:08:16 1995 Ulrich Drepper * dcgettext.c (DCGETTEXT): Save `errno'. Failing system calls should not effect it because a missing catalog is no error. Reported by Harald Knig . Tue Dec 19 22:09:13 1995 Ulrich Drepper * Makefile.in (Makefile): Explicitly use $(SHELL) for running shell scripts. Fri Dec 15 17:34:59 1995 Andreas Schwab * Makefile.in (install-src): Only install library and header when we use the own implementation. Don't do it when using the system's gettext or catgets functions. * dcgettext.c (find_msg): Must not swap domain->hash_size here. Sat Dec 9 16:24:37 1995 Ulrich Drepper * localealias.c, libintl.inst, libgettext.h, hash-string.h, gettextP.h, finddomain.c, dcgettext.c, cat-compat.c: Use PARAMS instead of __P. Suggested by Roland McGrath. Tue Dec 5 11:39:14 1995 Larry Schwimmer * libgettext.h: Use `#if !defined (_LIBINTL_H)' instead of `#if !_LIBINTL_H' because Solaris defines _LIBINTL_H as empty. Mon Dec 4 15:42:07 1995 Ulrich Drepper * Makefile.in (install-src): Install libintl.inst instead of libintl.h.install. Sat Dec 2 22:51:38 1995 Marcus Daniels * cat-compat.c (textdomain): Reverse order in which files are tried you load. First try local file, when this failed absolute path. Wed Nov 29 02:03:53 1995 Nelson H. F. Beebe * cat-compat.c (bindtextdomain): Add missing { }. Sun Nov 26 18:21:41 1995 Ulrich Drepper * libintl.inst: Add missing __P definition. Reported by Nelson Beebe. * Makefile.in: Add dummy `all' and `dvi' goals. Reported by Tom Tromey. Sat Nov 25 16:12:01 1995 Franc,ois Pinard * hash-string.h: Capitalize arguments of macros. Sat Nov 25 12:01:36 1995 Ulrich Drepper * Makefile.in (DISTFILES): Prevent files names longer than 13 characters. libintl.h.glibc->libintl.glibc, libintl.h.install->libintl.inst. Reported by Joshua R. Poulson. Sat Nov 25 11:31:12 1995 Eric Backus * dcgettext.c: Fix bug in preprocessor conditionals. Sat Nov 25 02:35:27 1995 Nelson H. F. Beebe * libgettext.h: Solaris cc does not understand #if !SYMBOL1 && !SYMBOL2. Sad but true. Thu Nov 23 16:22:14 1995 Ulrich Drepper * hash-string.h (hash_string): Fix for machine with >32 bit `unsigned long's. * dcgettext.c (DCGETTEXT): Fix horrible bug in loop for alternative translation. Thu Nov 23 01:45:29 1995 Ulrich Drepper * po2tbl.sed.in, linux-msg.sed, xopen-msg.sed: Some further simplifications in message number generation. Mon Nov 20 21:08:43 1995 Ulrich Drepper * libintl.h.glibc: Use __const instead of const in prototypes. * Makefile.in (install-src): Install libintl.h.install instead of libintl.h. This is a stripped-down version. Suggested by Peter Miller. * libintl.h.install, libintl.h.glibc: Initial revision. * localealias.c (_nl_expand_alias, read_alias_file): Protect prototypes in type casts by __P. Tue Nov 14 16:43:58 1995 Ulrich Drepper * hash-string.h: Correct prototype for hash_string. Sun Nov 12 12:42:30 1995 Ulrich Drepper * hash-string.h (hash_string): Add prototype. * gettextP.h: Fix copyright. (SWAP): Add prototype. Wed Nov 8 22:56:33 1995 Ulrich Drepper * localealias.c (read_alias_file): Forgot sizeof. Avoid calling *printf function. This introduces a big overhead. Patch by Roland McGrath. Tue Nov 7 14:21:08 1995 Ulrich Drepper * finddomain.c, cat-compat.c: Wrong indentation in #if for stpcpy. * finddomain.c (stpcpy): Define substitution function local. The macro was to flaky. * cat-compat.c: Fix typo. * xopen-msg.sed, linux-msg.sed: While bringing message number to right place only accept digits. * linux-msg.sed, xopen-msg.sed: Now that the counter does not have leading 0s we don't need to remove them. Reported by Marcus Daniels. * Makefile.in (../po/cat-id-tbl.o): Use $(top_srdir) in dependency. Reported by Marcus Daniels. * cat-compat.c: (stpcpy) [!_LIBC && !HAVE_STPCPY]: Define replacement. Generally cleanup using #if instead of #ifndef. * Makefile.in: Correct typos in comment. By Franc,ois Pinard. Mon Nov 6 00:27:02 1995 Ulrich Drepper * Makefile.in (install-src): Don't install libintl.h and libintl.a if we use an available gettext implementation. Sun Nov 5 22:02:08 1995 Ulrich Drepper * libgettext.h: Fix typo: HAVE_CATGETTS -> HAVE_CATGETS. Reported by Franc,ois Pinard. * libgettext.h: Use #if instead of #ifdef/#ifndef. * finddomain.c: Comments describing what has to be done should start with FIXME. Sun Nov 5 19:38:01 1995 Ulrich Drepper * Makefile.in (DISTFILES): Split. Use DISTFILES with normal meaning. DISTFILES.common names the files common to both dist goals. DISTFILES.gettext are the files only distributed in GNU gettext. Sun Nov 5 17:32:54 1995 Ulrich Drepper * dcgettext.c (DCGETTEXT): Correct searching in derived locales. This was necessary since a change in _nl_find_msg several weeks ago. I really don't know this is still not fixed. Sun Nov 5 12:43:12 1995 Ulrich Drepper * loadmsgcat.c (_nl_load_domain): Test for FILENAME == NULL. This might mark a special condition. * finddomain.c (make_entry_rec): Don't make illegal entry as decided. * Makefile.in (dist): Suppress error message when ln failed. Get files from $(srcdir) explicitly. * libgettext.h (gettext_const): Rename to gettext_noop. Fri Nov 3 07:36:50 1995 Ulrich Drepper * finddomain.c (make_entry_rec): Protect against wrong locale names by testing mask. * libgettext.h (gettext_const): Add macro definition. Capitalize macro arguments. Thu Nov 2 23:15:51 1995 Ulrich Drepper * finddomain.c (_nl_find_domain): Test for pointer != NULL before accessing value. Reported by Tom Tromey. * gettext.c (NULL): Define as (void*)0 instad of 0. Reported by Franc,ois Pinard. Mon Oct 30 21:28:52 1995 Ulrich Drepper * po2tbl.sed.in: Serious typo bug fixed by Jim Meyering. Sat Oct 28 23:20:47 1995 Ulrich Drepper * libgettext.h: Disable dcgettext optimization for Solaris 2.3. * localealias.c (alias_compare): Peter Miller reported that tolower in some systems is even dumber than I thought. Protect call by `isupper'. Fri Oct 27 22:22:51 1995 Ulrich Drepper * Makefile.in (libdir, includedir): New variables. (install-src): Install libintl.a and libintl.h in correct dirs. Fri Oct 27 22:07:29 1995 Ulrich Drepper * Makefile.in (SOURCES): Fix typo: intrl.compat.c -> intl-compat.c. * po2tbl.sed.in: Patch for buggy SEDs by Christian von Roques. * localealias.c: Fix typo and superflous test. Reported by Christian von Roques. Fri Oct 6 11:52:05 1995 Ulrich Drepper * finddomain.c (_nl_find_domain): Correct some remainder from the pre-CEN syntax. Now we don't have a constant number of successors anymore. Wed Sep 27 21:41:13 1995 Ulrich Drepper * Makefile.in (DISTFILES): Add libintl.h.glibc. * Makefile.in (dist-libc): Add goal for packing sources for glibc. (COMSRCS, COMHDRS): Splitted to separate sources shared with glibc. * loadmsgcat.c: Forget to continue #if line. * localealias.c: [_LIBC]: Rename strcasecmp to __strcasecmp to keep ANSI C name space clean. * dcgettext.c, finddomain.c: Better comment to last change. * loadmsgcat.c: [_LIBC]: Rename fstat, open, close, read, mmap, and munmap to __fstat, __open, __close, __read, __mmap, and __munmap resp to keep ANSI C name space clean. * finddomain.c: [_LIBC]: Rename stpcpy to __stpcpy to keep ANSI C name space clean. * dcgettext.c: [_LIBC]: Rename getced and stpcpy to __getcwd and __stpcpy resp to keep ANSI C name space clean. * libgettext.h: Include sys/types.h for those old SysV systems out there. Reported by Francesco Potorti`. * loadmsgcat.c (use_mmap): Define if compiled for glibc. * bindtextdom.c: Include all those standard headers unconditionally if _LIBC is defined. * finddomain.c: Fix 2 times defiend -> defined. * textdomain.c: Include libintl.h instead of libgettext.h when compiling for glibc. Include all those standard headers unconditionally if _LIBC is defined. * localealias.c, loadmsgcat.c: Prepare to be compiled in glibc. * gettext.c: Include libintl.h instead of libgettext.h when compiling for glibc. Get NULL from stddef.h if we compile for glibc. * finddomain.c: Include libintl.h instead of libgettext.h when compiling for glibc. Include all those standard headers unconditionally if _LIBC is defined. * dcgettext.c: Include all those standard headers unconditionally if _LIBC is defined. * dgettext.c: If compiled in glibc include libintl.h instead of libgettext.h. (locale.h): Don't rely on HAVE_LOCALE_H when compiling for glibc. * dcgettext.c: If compiled in glibc include libintl.h instead of libgettext.h. (getcwd): Don't rely on HAVE_GETCWD when compiling for glibc. * bindtextdom.c: If compiled in glibc include libintl.h instead of libgettext.h. Mon Sep 25 22:23:06 1995 Ulrich Drepper * localealias.c (_nl_expand_alias): Don't call bsearch if NMAP <= 0. Reported by Marcus Daniels. * cat-compat.c (bindtextdomain): String used in putenv must not be recycled. Reported by Marcus Daniels. * libgettext.h (__USE_GNU_GETTEXT): Additional symbol to signal that we use GNU gettext library. * cat-compat.c (bindtextdomain): Fix bug with the strange stpcpy replacement. Reported by Nelson Beebe. Sat Sep 23 08:23:51 1995 Ulrich Drepper * cat-compat.c: Include for stpcpy prototype. * localealias.c (read_alias_file): While expand strdup code temporary variable `cp' hided higher level variable with same name. Rename to `tp'. * textdomain.c (textdomain): Avoid warning by using temporary variable in strdup code. * finddomain.c (_nl_find_domain): Remove unused variable `application'. Thu Sep 21 15:51:44 1995 Ulrich Drepper * localealias.c (alias_compare): Use strcasecmp() only if available. Else use implementation in place. * intl-compat.c: Wrapper functions now call *__ functions instead of __*. * libgettext.h: Declare prototypes for *__ functions instead for __*. * cat-compat.c, loadmsgcat.c: Don't use xmalloc, xstrdup, and stpcpy. These functions are not part of the standard libc and so prevent libintl.a from being used standalone. * bindtextdom.c: Don't use xmalloc, xstrdup, and stpcpy. These functions are not part of the standard libc and so prevent libintl.a from being used standalone. Rename to bindtextdomain__ if not used in GNU C Library. * dgettext.c: Rename function to dgettext__ if not used in GNU C Library. * gettext.c: Don't use xmalloc, xstrdup, and stpcpy. These functions are not part of the standard libc and so prevent libintl.a from being used standalone. Functions now called gettext__ if not used in GNU C Library. * dcgettext.c, localealias.c, textdomain.c, finddomain.c: Don't use xmalloc, xstrdup, and stpcpy. These functions are not part of the standard libc and so prevent libintl.a from being used standalone. Sun Sep 17 23:14:49 1995 Ulrich Drepper * finddomain.c: Correct some bugs in handling of CEN standard locale definitions. Thu Sep 7 01:49:28 1995 Ulrich Drepper * finddomain.c: Implement CEN syntax. * gettextP.h (loaded_domain): Extend number of successors to 31. Sat Aug 19 19:25:29 1995 Ulrich Drepper * Makefile.in (aliaspath): Remove path to X11 locale dir. * Makefile.in: Make install-src depend on install. This helps gettext to install the sources and other packages can use the install goal. Sat Aug 19 15:19:33 1995 Ulrich Drepper * Makefile.in (uninstall): Remove stuff installed by install-src. Tue Aug 15 13:13:53 1995 Ulrich Drepper * VERSION.in: Initial revision. * Makefile.in (DISTFILES): Add VERSION file. This is not necessary for gettext, but for other packages using this library. Tue Aug 15 06:16:44 1995 Ulrich Drepper * gettextP.h (_nl_find_domain): New prototype after changing search strategy. * finddomain.c (_nl_find_domain): We now try only to find a specified catalog. Fall back to other catalogs listed in the locale list is now done in __dcgettext. * dcgettext.c (__dcgettext): Now we provide message fall back even to different languages. I.e. if a message is not available in one language all the other in the locale list a tried. Formerly fall back was only possible within one language. Implemented by moving one loop from _nl_find_domain to here. Mon Aug 14 23:45:50 1995 Ulrich Drepper * Makefile.in (gettextsrcdir): Directory where source of GNU gettext library are made available. (INSTALL, INSTALL_DATA): Programs used for installing sources. (gettext-src): New. Rule to install GNU gettext sources for use in gettextize shell script. Sun Aug 13 14:40:48 1995 Ulrich Drepper * loadmsgcat.c (_nl_load_domain): Use mmap for loading only when munmap function is also available. * Makefile.in (install): Depend on `all' goal. Wed Aug 9 11:04:33 1995 Ulrich Drepper * localealias.c (read_alias_file): Do not overwrite '\n' when terminating alias value string. * localealias.c (read_alias_file): Handle long lines. Ignore the rest not fitting in the buffer after the initial `fgets' call. Wed Aug 9 00:54:29 1995 Ulrich Drepper * gettextP.h (_nl_load_domain): Add prototype, replacing prototype for _nl_load_msg_cat. * finddomain.c (_nl_find_domain): Remove unneeded variable filename and filename_len. (expand_alias): Remove prototype because functions does not exist anymore. * localealias.c (read_alias_file): Change type of fname_len parameter to int. (xmalloc): Add prototype. * loadmsgcat.c: Better prototypes for xmalloc. Tue Aug 8 22:30:39 1995 Ulrich Drepper * finddomain.c (_nl_find_domain): Allow alias name to be constructed from the four components. * Makefile.in (aliaspath): New variable. Set to preliminary value. (SOURCES): Add localealias.c. (OBJECTS): Add localealias.o. * gettextP.h: Add prototype for _nl_expand_alias. * finddomain.c: Aliasing handled in intl/localealias.c. * localealias.c: Aliasing for locale names. * bindtextdom.c: Better prototypes for xmalloc and xstrdup. Mon Aug 7 23:47:42 1995 Ulrich Drepper * Makefile.in (DISTFILES): gettext.perl is now found in misc/. * cat-compat.c (bindtextdomain): Correct implementation. dirname parameter was not used. Reported by Marcus Daniels. * gettextP.h (loaded_domain): New fields `successor' and `decided' for oo, lazy message handling implementation. * dcgettext.c: Adopt for oo, lazy message handliing. Now we can inherit translations from less specific locales. (find_msg): New function. * loadmsgcat.c, finddomain.c: Complete rewrite. Implement oo, lazy message handling :-). We now have an additional environment variable `LANGUAGE' with a higher priority than LC_ALL for the LC_MESSAGE locale. Here we can set a colon separated list of specifications each of the form `language[_territory[.codeset]][@modifier]'. Sat Aug 5 09:55:42 1995 Ulrich Drepper * finddomain.c (unistd.h): Include to get _PC_PATH_MAX defined on system having it. Fri Aug 4 22:42:00 1995 Ulrich Drepper * finddomain.c (stpcpy): Include prototype. * Makefile.in (dist): Remove `copying instead' message. Wed Aug 2 18:52:03 1995 Ulrich Drepper * Makefile.in (ID, TAGS): Do not use $^. Tue Aug 1 20:07:11 1995 Ulrich Drepper * Makefile.in (TAGS, ID): Use $^ as command argument. (TAGS): Give etags -o option t write to current directory, not $(srcdir). (ID): Use $(srcdir) instead os $(top_srcdir)/src. (distclean): Remove ID. Sun Jul 30 11:51:46 1995 Ulrich Drepper * Makefile.in (gnulocaledir): New variable, always using share/ for data directory. (DEFS): Add GNULOCALEDIR, used in finddomain.c. * finddomain.c (_nl_default_dirname): Set to GNULOCALEDIR, because it always has to point to the directory where GNU gettext Library writes it to. * intl-compat.c (textdomain, bindtextdomain): Undefine macros before function definition. Sat Jul 22 01:10:02 1995 Ulrich Drepper * libgettext.h (_LIBINTL_H): Protect definition in case where this file is included as libgettext.h on Solaris machines. Add comment about this. Wed Jul 19 02:36:42 1995 Ulrich Drepper * intl-compat.c (textdomain): Correct typo. Wed Jul 19 01:51:35 1995 Ulrich Drepper * dcgettext.c (dcgettext): Function now called __dcgettext. * dgettext.c (dgettext): Now called __dgettext and calls __dcgettext. * gettext.c (gettext): Function now called __gettext and calls __dgettext. * textdomain.c (textdomain): Function now called __textdomain. * bindtextdom.c (bindtextdomain): Function now called __bindtextdomain. * intl-compat.c: Initial revision. * Makefile.in (SOURCES): Add intl-compat.c. (OBJECTS): We always compile the GNU gettext library functions. OBJECTS contains all objects but cat-compat.o, ../po/cat-if-tbl.o, and intl-compat.o. (GETTOBJS): Contains now only intl-compat.o. * libgettext.h: Re-include protection matches dualistic character of libgettext.h. For all functions in GNU gettext library define __ counter part. * finddomain.c (strchr): Define as index if not found in C library. (_nl_find_domain): For relative paths paste / in between. Tue Jul 18 16:37:45 1995 Ulrich Drepper * loadmsgcat.c, finddomain.c: Add inclusion of sys/types.h. * xopen-msg.sed: Fix bug with `msgstr ""' lines. A little bit better comments. Tue Jul 18 01:18:27 1995 Ulrich Drepper * Makefile.in: po-mode.el, makelinks, combine-sh are now found in ../misc. * po-mode.el, makelinks, combine-sh, elisp-comp: Moved to ../misc/. * libgettext.h, gettextP.h, gettext.h: Uniform test for __STDC__. Sun Jul 16 22:33:02 1995 Ulrich Drepper * Makefile.in (INSTALL, INSTALL_DATA): New variables. (install-data, uninstall): Install/uninstall .elc file. * po-mode.el (Installation comment): Add .pox as possible extension of .po files. Sun Jul 16 13:23:27 1995 Ulrich Drepper * elisp-comp: Complete new version by Franc,ois: This does not fail when not compiling in the source directory. Sun Jul 16 00:12:17 1995 Ulrich Drepper * Makefile.in (../po/cat-id-tbl.o): Use $(MAKE) instead of make for recursive make. * Makefile.in (.el.elc): Use $(SHELL) instead of /bin/sh. (install-exec): Add missing dummy goal. (install-data, uninstall): @ in multi-line shell command at beginning, not in front of echo. Reported by Eric Backus. Sat Jul 15 00:21:28 1995 Ulrich Drepper * Makefile.in (DISTFILES): Rename libgettext.perl to gettext.perl to fit in 14 chars file systems. * gettext.perl: Rename to gettext.perl to fit in 14 chars file systems. Thu Jul 13 23:17:20 1995 Ulrich Drepper * cat-compat.c: If !STDC_HEADERS try to include malloc.h. Thu Jul 13 20:55:02 1995 Ulrich Drepper * po2tbl.sed.in: Pretty printing. * linux-msg.sed, xopen-msg.sed: Correct bugs with handling substitute flags in branches. * hash-string.h (hash_string): Old K&R compilers don't under stand `unsigned char'. * gettext.h (nls_uint32): Some old K&R compilers (eg HP) don't understand `unsigned int'. * cat-compat.c (msg_to_cat_id): De-ANSI-fy prototypes. Thu Jul 13 01:34:33 1995 Ulrich Drepper * Makefile.in (ELCFILES): New variable. (DISTFILES): Add elisp-comp. Add implicit rule for .el -> .elc compilation. (install-data): install $ELCFILES (clean): renamed po-to-tbl and po-to-msg to po2tbl and po2msg resp. * elisp-comp: Initial revision Wed Jul 12 16:14:52 1995 Ulrich Drepper * Makefile.in: cat-id-tbl.c is now found in po/. This enables us to use an identical intl/ directory in all packages. * dcgettext.c (dcgettext): hashing does not work for table size <= 2. * textdomain.c: fix typo (#if def -> #if defined) Tue Jul 11 18:44:43 1995 Ulrich Drepper * Makefile.in (stamp-cat-id): use top_srcdir to address source files (DISTFILES,distclean): move tupdate.perl to src/ * po-to-tbl.sed.in: add additional jump to clear change flag to recognize multiline strings Tue Jul 11 01:32:50 1995 Ulrich Drepper * textdomain.c: Protect inclusion of stdlib.h and string.h. * loadmsgcat.c: Protect inclusion of stdlib.h. * libgettext.h: Protect inclusion of locale.h. Allow use in C++ programs. Define NULL is not happened already. * Makefile.in (DISTFILES): ship po-to-tbl.sed.in instead of po-to-tbl.sed. (distclean): remove po-to-tbl.sed and tupdate.perl. * tupdate.perl.in: Substitute Perl path even in exec line. Don't include entries without translation from old .po file. Tue Jul 4 00:41:51 1995 Ulrich Drepper * tupdate.perl.in: use "Updated: " in msgid "". * cat-compat.c: Fix typo (LOCALDIR -> LOCALEDIR). Define getenv if !__STDC__. * bindtextdom.c: Protect stdlib.h and string.h inclusion. Define free if !__STDC__. * finddomain.c: Change DEF_MSG_DOM_DIR to LOCALEDIR. Define free if !__STDC__. * cat-compat.c: Change DEF_MSG_DOM_DIR to LOCALEDIR. Mon Jul 3 23:56:30 1995 Ulrich Drepper * Makefile.in: Use LOCALEDIR instead of DEF_MSG_DOM_DIR. Remove unneeded $(srcdir) from Makefile.in dependency. * makelinks: Add copyright and short description. * po-mode.el: Last version for 0.7. * tupdate.perl.in: Fix die message. * dcgettext.c: Protect include of string.h. * gettext.c: Protect include of stdlib.h and further tries to get NULL. * finddomain.c: Some corrections in includes. * Makefile.in (INCLUDES): Prune list correct path to Makefile.in. * po-to-tbl.sed: Adopt for new .po file format. * linux-msg.sed, xopen-msg.sed: Adopt for new .po file format. Sun Jul 2 23:55:03 1995 Ulrich Drepper * tupdate.perl.in: Complete rewrite for new .po file format. Sun Jul 2 02:06:50 1995 Ulrich Drepper * First official release. This directory contains all the code needed to internationalize own packages. It provides functions which allow to use the X/Open catgets function with an interface like the Uniforum gettext function. For system which does not have neither of those a complete implementation is provided. lrzsz-0.12.21rc/intl/Makefile.in 666 764 764 14501 6607440602 11523 # Makefile for directory with message catalog handling in GNU NLS Utilities. # Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. # # 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. PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = /bin/sh srcdir = @srcdir@ top_srcdir = @top_srcdir@ top_builddir = .. VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ transform = @program_transform_name@ libdir = $(exec_prefix)/lib includedir = $(prefix)/include datadir = $(prefix)/@DATADIRNAME@ localedir = $(datadir)/locale gnulocaledir = $(prefix)/share/locale gettextsrcdir = @datadir@/gettext/intl aliaspath = $(localedir):. subdir = intl INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = @MKINSTALLDIRS@ l = @l@ AR = ar CC = @CC@ LIBTOOL = @LIBTOOL@ RANLIB = @RANLIB@ DEFS = -DLOCALEDIR=\"$(localedir)\" -DGNULOCALEDIR=\"$(gnulocaledir)\" \ -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" @DEFS@ CPPFLAGS = @CPPFLAGS@ CFLAGS = @CFLAGS@ LDFLAGS = @LDFLAGS@ COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) HEADERS = $(COMHDRS) libgettext.h loadinfo.h COMHDRS = gettext.h gettextP.h hash-string.h SOURCES = $(COMSRCS) intl-compat.c cat-compat.c COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \ finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \ explodename.c OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \ finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \ explodename.$lo CATOBJS = cat-compat.$lo ../po/cat-id-tbl.$lo GETTOBJS = intl-compat.$lo DISTFILES.common = ChangeLog Makefile.in linux-msg.sed po2tbl.sed.in \ xopen-msg.sed $(HEADERS) $(SOURCES) DISTFILES.normal = VERSION DISTFILES.gettext = libintl.glibc intlh.inst.in .SUFFIXES: .SUFFIXES: .c .o .lo .c.o: $(COMPILE) $< .c.lo: $(LIBTOOL) --mode=compile $(COMPILE) $< INCLUDES = -I.. -I. -I$(top_srcdir)/intl -I$(top_srcdir)/lib all: all-@USE_INCLUDED_LIBINTL@ all-yes: libintl.$la intlh.inst all-no: libintl.a: $(OBJECTS) rm -f $@ $(AR) cru $@ $(OBJECTS) $(RANLIB) $@ libintl.la: $(OBJECTS) $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ $(OBJECTS) \ -version-info 1:0 -rpath $(libdir) ../po/cat-id-tbl.$lo: ../po/cat-id-tbl.c $(top_srcdir)/po/$(PACKAGE).pot cd ../po && $(MAKE) cat-id-tbl.$lo check: all # This installation goal is only used in GNU gettext. Packages which # only use the library should use install instead. # We must not install the libintl.h/libintl.a files if we are on a # system which has the gettext() function in its C library or in a # separate library or use the catgets interface. A special case is # where configure found a previously installed GNU gettext library. # If you want to use the one which comes with this version of the # package, you have to use `configure --with-included-gettext'. install: install-exec install-data install-exec: all if test "$(PACKAGE)" = "gettext" \ && test '@INTLOBJS@' = '$(GETTOBJS)'; then \ if test -r $(MKINSTALLDIRS); then \ $(MKINSTALLDIRS) $(libdir) $(includedir); \ else \ $(top_srcdir)/mkinstalldirs $(libdir) $(includedir); \ fi; \ $(INSTALL_DATA) intlh.inst $(includedir)/libintl.h; \ $(INSTALL_DATA) libintl.a $(libdir)/libintl.a; \ else \ : ; \ fi install-data: all if test "$(PACKAGE)" = "gettext"; then \ if test -r $(MKINSTALLDIRS); then \ $(MKINSTALLDIRS) $(gettextsrcdir); \ else \ $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \ fi; \ $(INSTALL_DATA) VERSION $(gettextsrcdir)/VERSION; \ dists="$(DISTFILES.common)"; \ for file in $$dists; do \ $(INSTALL_DATA) $(srcdir)/$$file $(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi # Define this as empty until I found a useful application. installcheck: uninstall: dists="$(DISTFILES.common)"; \ for file in $$dists; do \ rm -f $(gettextsrcdir)/$$file; \ done info dvi: $(OBJECTS): ../config.h libgettext.h bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.h tags: TAGS TAGS: $(HEADERS) $(SOURCES) here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES) id: ID ID: $(HEADERS) $(SOURCES) here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES) mostlyclean: rm -f *.a *.o *.lo core core.* clean: mostlyclean distclean: clean rm -f Makefile ID TAGS po2msg.sed po2tbl.sed libintl.h maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." # GNU gettext needs not contain the file `VERSION' but contains some # other files which should not be distributed in other packages. distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: Makefile $(DISTFILES) if test "$(PACKAGE)" = gettext; then \ additional="$(DISTFILES.gettext)"; \ else \ additional="$(DISTFILES.normal)"; \ fi; \ for file in $(DISTFILES.common) $$additional; do \ ln $(srcdir)/$$file $(distdir) 2> /dev/null \ || cp -p $(srcdir)/$$file $(distdir); \ done dist-libc: tar zcvf intl-glibc.tar.gz $(COMSRCS) $(COMHDRS) libintl.h.glibc Makefile: Makefile.in ../config.status cd .. \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status # The dependency for intlh.inst is different in gettext and all other # packages. Because we cannot you GNU make features we have to solve # the problem while rewriting Makefile.in. @GT_YES@intlh.inst: intlh.inst.in ../config.status @GT_YES@ cd .. \ @GT_YES@ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= \ @GT_YES@ $(SHELL) ./config.status @GT_NO@.PHONY: intlh.inst @GT_NO@intlh.inst: # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lrzsz-0.12.21rc/intl/linux-msg.sed 666 764 764 5205 6607440602 12057 # po2msg.sed - Convert Uniforum style .po file to Linux style .msg file # Copyright (C) 1995 Free Software Foundation, Inc. # Ulrich Drepper , 1995. # # 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. # # # The first directive in the .msg should be the definition of the # message set number. We use always set number 1. # 1 { i\ $set 1 # Automatically created by po2msg.sed h s/.*/0/ x } # # Mitch's old catalog format does not allow comments. # # We copy the original message as a comment into the .msg file. # /^msgid/ { s/msgid[ ]*"// # # This does not work now with the new format. # /"$/! { # s/\\$// # s/$/ ... (more lines following)"/ # } x # The following nice solution is by # Bruno td # Increment a decimal number in pattern space. # First hide trailing `9' digits. :d s/9\(_*\)$/_\1/ td # Assure at least one digit is available. s/^\(_*\)$/0\1/ # Increment the last digit. s/8\(_*\)$/9\1/ s/7\(_*\)$/8\1/ s/6\(_*\)$/7\1/ s/5\(_*\)$/6\1/ s/4\(_*\)$/5\1/ s/3\(_*\)$/4\1/ s/2\(_*\)$/3\1/ s/1\(_*\)$/2\1/ s/0\(_*\)$/1\1/ # Convert the hidden `9' digits to `0's. s/_/0/g x G s/\(.*\)"\n\([0-9]*\)/$ #\2 Original Message:(\1)/p } # # The .msg file contains, other then the .po file, only the translations # but each given a unique ID. Starting from 1 and incrementing by 1 for # each message we assign them to the messages. # It is important that the .po file used to generate the cat-id-tbl.c file # (with po-to-tbl) is the same as the one used here. (At least the order # of declarations must not be changed.) # /^msgstr/ { s/msgstr[ ]*"\(.*\)"/# \1/ # Clear substitution flag. tb # Append the next line. :b N # Look whether second part is continuation line. s/\(.*\n\)"\(.*\)"/\1\2/ # Yes, then branch. ta P D # Note that D includes a jump to the start!! # We found a continuation line. But before printing insert '\'. :a s/\(.*\)\(\n.*\)/\1\\\2/ P # We cannot use D here. s/.*\n\(.*\)/\1/ tb } d lrzsz-0.12.21rc/intl/po2tbl.sed.in 666 764 764 4565 6607440602 11753 # po2tbl.sed - Convert Uniforum style .po file to lookup table for catgets # Copyright (C) 1995 Free Software Foundation, Inc. # Ulrich Drepper , 1995. # # 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. # 1 { i\ /* Automatically generated by po2tbl.sed from @PACKAGE NAME@.pot. */\ \ #if HAVE_CONFIG_H\ # include \ #endif\ \ #include "libgettext.h"\ \ const struct _msg_ent _msg_tbl[] = { h s/.*/0/ x } # # Write msgid entries in C array form. # /^msgid/ { s/msgid[ ]*\(".*"\)/ {\1/ tb # Append the next line :b N # Look whether second part is continuation line. s/\(.*\)"\(\n\)"\(.*"\)/\1\2\3/ # Yes, then branch. ta # Because we assume that the input file correctly formed the line # just read cannot be again be a msgid line. So it's safe to ignore # it. s/\(.*\)\n.*/\1/ bc # We found a continuation line. But before printing insert '\'. :a s/\(.*\)\(\n.*\)/\1\\\2/ P # We cannot use D here. s/.*\n\(.*\)/\1/ # Some buggy seds do not clear the `successful substitution since last ``t''' # flag on `N', so we do a `t' here to clear it. tb # Not reached :c x # The following nice solution is by # Bruno td # Increment a decimal number in pattern space. # First hide trailing `9' digits. :d s/9\(_*\)$/_\1/ td # Assure at least one digit is available. s/^\(_*\)$/0\1/ # Increment the last digit. s/8\(_*\)$/9\1/ s/7\(_*\)$/8\1/ s/6\(_*\)$/7\1/ s/5\(_*\)$/6\1/ s/4\(_*\)$/5\1/ s/3\(_*\)$/4\1/ s/2\(_*\)$/3\1/ s/1\(_*\)$/2\1/ s/0\(_*\)$/1\1/ # Convert the hidden `9' digits to `0's. s/_/0/g x G s/\(.*\)\n\([0-9]*\)/\1, \2},/ s/\(.*\)"$/\1/ p } # # Last line. # $ { i\ };\ g s/0*\(.*\)/int _msg_tbl_length = \1;/p } d lrzsz-0.12.21rc/intl/xopen-msg.sed 666 764 764 5376 6607440602 12062 # po2msg.sed - Convert Uniforum style .po file to X/Open style .msg file # Copyright (C) 1995 Free Software Foundation, Inc. # Ulrich Drepper , 1995. # # 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. # # # The first directive in the .msg should be the definition of the # message set number. We use always set number 1. # 1 { i\ $set 1 # Automatically created by po2msg.sed h s/.*/0/ x } # # We copy all comments into the .msg file. Perhaps they can help. # /^#/ s/^#[ ]*/$ /p # # We copy the original message as a comment into the .msg file. # /^msgid/ { # Does not work now # /"$/! { # s/\\$// # s/$/ ... (more lines following)"/ # } s/^msgid[ ]*"\(.*\)"$/$ Original Message: \1/ p } # # The .msg file contains, other then the .po file, only the translations # but each given a unique ID. Starting from 1 and incrementing by 1 for # each message we assign them to the messages. # It is important that the .po file used to generate the cat-id-tbl.c file # (with po-to-tbl) is the same as the one used here. (At least the order # of declarations must not be changed.) # /^msgstr/ { s/msgstr[ ]*"\(.*\)"/\1/ x # The following nice solution is by # Bruno td # Increment a decimal number in pattern space. # First hide trailing `9' digits. :d s/9\(_*\)$/_\1/ td # Assure at least one digit is available. s/^\(_*\)$/0\1/ # Increment the last digit. s/8\(_*\)$/9\1/ s/7\(_*\)$/8\1/ s/6\(_*\)$/7\1/ s/5\(_*\)$/6\1/ s/4\(_*\)$/5\1/ s/3\(_*\)$/4\1/ s/2\(_*\)$/3\1/ s/1\(_*\)$/2\1/ s/0\(_*\)$/1\1/ # Convert the hidden `9' digits to `0's. s/_/0/g x # Bring the line in the format ` ' G s/^[^\n]*$/& / s/\(.*\)\n\([0-9]*\)/\2 \1/ # Clear flag from last substitution. tb # Append the next line. :b N # Look whether second part is a continuation line. s/\(.*\n\)"\(.*\)"/\1\2/ # Yes, then branch. ta P D # Note that `D' includes a jump to the start!! # We found a continuation line. But before printing insert '\'. :a s/\(.*\)\(\n.*\)/\1\\\2/ P # We cannot use the sed command `D' here s/.*\n\(.*\)/\1/ tb } d lrzsz-0.12.21rc/intl/gettext.h 666 764 764 6204 6607440602 11274 /* Internal header for GNU gettext internationalization functions Copyright (C) 1995, 1997 Free Software Foundation, Inc. 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 Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef _GETTEXT_H #define _GETTEXT_H 1 #include #if HAVE_LIMITS_H || _LIBC # include #endif /* @@ end of prolog @@ */ /* The magic number of the GNU message catalog format. */ #define _MAGIC 0x950412de #define _MAGIC_SWAPPED 0xde120495 /* Revision number of the currently used .mo (binary) file format. */ #define MO_REVISION_NUMBER 0 /* The following contortions are an attempt to use the C preprocessor to determine an unsigned integral type that is 32 bits wide. An alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but doing that would require that the configure script compile and *run* the resulting executable. Locally running cross-compiled executables is usually not possible. */ #if __STDC__ # define UINT_MAX_32_BITS 4294967295U #else # define UINT_MAX_32_BITS 0xFFFFFFFF #endif /* If UINT_MAX isn't defined, assume it's a 32-bit type. This should be valid for all systems GNU cares about because that doesn't include 16-bit systems, and only modern systems (that certainly have ) have 64+-bit integral types. */ #ifndef UINT_MAX # define UINT_MAX UINT_MAX_32_BITS #endif #if UINT_MAX == UINT_MAX_32_BITS typedef unsigned nls_uint32; #else # if USHRT_MAX == UINT_MAX_32_BITS typedef unsigned short nls_uint32; # else # if ULONG_MAX == UINT_MAX_32_BITS typedef unsigned long nls_uint32; # else /* The following line is intended to throw an error. Using #error is not portable enough. */ "Cannot determine unsigned 32-bit data type." # endif # endif #endif /* Header for binary .mo file format. */ struct mo_file_header { /* The magic number. */ nls_uint32 magic; /* The revision number of the file format. */ nls_uint32 revision; /* The number of strings pairs. */ nls_uint32 nstrings; /* Offset of table with start offsets of original strings. */ nls_uint32 orig_tab_offset; /* Offset of table with start offsets of translation strings. */ nls_uint32 trans_tab_offset; /* Size of hashing table. */ nls_uint32 hash_tab_size; /* Offset of first hashing entry. */ nls_uint32 hash_tab_offset; }; struct string_desc { /* Length of addressed string. */ nls_uint32 length; /* Offset of string in file. */ nls_uint32 offset; }; /* @@ begin of epilog @@ */ #endif /* gettext.h */ lrzsz-0.12.21rc/intl/gettextP.h 666 764 764 3414 6607440602 11414 /* Header describing internals of gettext library Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. 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. */ #ifndef _GETTEXTP_H #define _GETTEXTP_H #include "loadinfo.h" /* @@ end of prolog @@ */ #ifndef PARAMS # if __STDC__ # define PARAMS(args) args # else # define PARAMS(args) () # endif #endif #ifndef W # define W(flag, data) ((flag) ? SWAP (data) : (data)) #endif static nls_uint32 SWAP PARAMS ((nls_uint32 i)); static inline nls_uint32 SWAP (i) nls_uint32 i; { return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24); } struct loaded_domain { const char *data; int must_swap; nls_uint32 nstrings; struct string_desc *orig_tab; struct string_desc *trans_tab; nls_uint32 hash_size; nls_uint32 *hash_tab; }; struct binding { struct binding *next; char *domainname; char *dirname; }; struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname, char *__locale, const char *__domainname)); void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain)); /* @@ begin of epilog @@ */ #endif /* gettextP.h */ lrzsz-0.12.21rc/intl/hash-string.h 666 764 764 3455 6607440602 12044 /* Implements a string hashing function. Copyright (C) 1995, 1997 Free Software Foundation, Inc. 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 Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_VALUES_H # include #endif /* @@ end of prolog @@ */ #ifndef PARAMS # if __STDC__ # define PARAMS(Args) Args # else # define PARAMS(Args) () # endif #endif /* We assume to have `unsigned long int' value with at least 32 bits. */ #define HASHWORDBITS 32 /* Defines the so called `hashpjw' function by P.J. Weinberger [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools, 1986, 1987 Bell Telephone Laboratories, Inc.] */ static unsigned long hash_string PARAMS ((const char *__str_param)); static inline unsigned long hash_string (str_param) const char *str_param; { unsigned long int hval, g; const char *str = str_param; /* Compute the hash value for the given string. */ hval = 0; while (*str != '\0') { hval <<= 4; hval += (unsigned long) *str++; g = hval & ((unsigned long) 0xf << (HASHWORDBITS - 4)); if (g != 0) { hval ^= g >> (HASHWORDBITS - 8); hval ^= g; } } return hval; } lrzsz-0.12.21rc/intl/libgettext.h 666 764 764 13132 6607440602 12001 /* Message catalogs for internationalization. Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. 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. */ /* Because on some systems (e.g. Solaris) we sometimes have to include the systems libintl.h as well as this file we have more complex include protection above. But the systems header might perhaps also define _LIBINTL_H and therefore we have to protect the definition here. */ #if !defined (_LIBINTL_H) || !defined (_LIBGETTEXT_H) #if !defined (_LIBINTL_H) # define _LIBINTL_H 1 #endif #define _LIBGETTEXT_H 1 /* We define an additional symbol to signal that we use the GNU implementation of gettext. */ #define __USE_GNU_GETTEXT 1 #include #if HAVE_LOCALE_H # include #endif #ifdef __cplusplus extern "C" { #endif /* @@ end of prolog @@ */ #ifndef PARAMS # if __STDC__ # define PARAMS(args) args # else # define PARAMS(args) () # endif #endif #ifndef NULL # if !defined __cplusplus || defined __GNUC__ # define NULL ((void *) 0) # else # define NULL (0) # endif #endif #if !HAVE_LC_MESSAGES /* This value determines the behaviour of the gettext() and dgettext() function. But some system does not have this defined. Define it to a default value. */ # define LC_MESSAGES (-1) #endif /* Declarations for gettext-using-catgets interface. Derived from Jim Meyering's libintl.h. */ struct _msg_ent { const char *_msg; int _msg_number; }; #if HAVE_CATGETS /* These two variables are defined in the automatically by po-to-tbl.sed generated file `cat-id-tbl.c'. */ extern const struct _msg_ent _msg_tbl[]; extern int _msg_tbl_length; #endif /* For automatical extraction of messages sometimes no real translation is needed. Instead the string itself is the result. */ #define gettext_noop(Str) (Str) /* Look up MSGID in the current default message catalog for the current LC_MESSAGES locale. If not found, returns MSGID itself (the default text). */ extern char *gettext PARAMS ((const char *__msgid)); extern char *gettext__ PARAMS ((const char *__msgid)); /* Look up MSGID in the DOMAINNAME message catalog for the current LC_MESSAGES locale. */ extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid)); extern char *dgettext__ PARAMS ((const char *__domainname, const char *__msgid)); /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale. */ extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid, int __category)); extern char *dcgettext__ PARAMS ((const char *__domainname, const char *__msgid, int __category)); /* Set the current default message catalog to DOMAINNAME. If DOMAINNAME is null, return the current default. If DOMAINNAME is "", reset to the default of "messages". */ extern char *textdomain PARAMS ((const char *__domainname)); extern char *textdomain__ PARAMS ((const char *__domainname)); /* Specify that the DOMAINNAME message catalog will be found in DIRNAME rather than in the system locale data base. */ extern char *bindtextdomain PARAMS ((const char *__domainname, const char *__dirname)); extern char *bindtextdomain__ PARAMS ((const char *__domainname, const char *__dirname)); #if ENABLE_NLS /* Solaris 2.3 has the gettext function but dcgettext is missing. So we omit this optimization for Solaris 2.3. BTW, Solaris 2.4 has dcgettext. */ # if !HAVE_CATGETS && (!HAVE_GETTEXT || HAVE_DCGETTEXT) # define gettext(Msgid) \ dgettext (NULL, Msgid) # define dgettext(Domainname, Msgid) \ dcgettext (Domainname, Msgid, LC_MESSAGES) # if defined __GNUC__ && __GNUC__ == 2 && __GNUC_MINOR__ >= 7 /* This global variable is defined in loadmsgcat.c. We need a sign, whether a new catalog was loaded, which can be associated with all translations. */ extern int _nl_msg_cat_cntr; # define dcgettext(Domainname, Msgid, Category) \ (__extension__ \ ({ \ char *__result; \ if (__builtin_constant_p (Msgid)) \ { \ static char *__translation__; \ static int __catalog_counter__; \ if (! __translation__ || __catalog_counter__ != _nl_msg_cat_cntr) \ { \ __translation__ = \ dcgettext__ (Domainname, Msgid, Category); \ __catalog_counter__ = _nl_msg_cat_cntr; \ } \ __result = __translation__; \ } \ else \ __result = dcgettext__ (Domainname, Msgid, Category); \ __result; \ })) # endif # endif #else # define gettext(Msgid) (Msgid) # define dgettext(Domainname, Msgid) (Msgid) # define dcgettext(Domainname, Msgid, Category) (Msgid) # define textdomain(Domainname) while (0) /* nothing */ # define bindtextdomain(Domainname, Dirname) while (0) /* nothing */ #endif /* @@ begin of epilog @@ */ #ifdef __cplusplus } #endif #endif lrzsz-0.12.21rc/intl/loadinfo.h 666 764 764 3004 6607440602 11376 #ifndef PARAMS # if __STDC__ # define PARAMS(args) args # else # define PARAMS(args) () # endif #endif /* Encoding of locale name parts. */ #define CEN_REVISION 1 #define CEN_SPONSOR 2 #define CEN_SPECIAL 4 #define XPG_NORM_CODESET 8 #define XPG_CODESET 16 #define TERRITORY 32 #define CEN_AUDIENCE 64 #define XPG_MODIFIER 128 #define CEN_SPECIFIC (CEN_REVISION|CEN_SPONSOR|CEN_SPECIAL|CEN_AUDIENCE) #define XPG_SPECIFIC (XPG_CODESET|XPG_NORM_CODESET|XPG_MODIFIER) struct loaded_l10nfile { const char *filename; int decided; const void *data; struct loaded_l10nfile *next; struct loaded_l10nfile *successor[1]; }; extern const char *_nl_normalize_codeset PARAMS ((const char *codeset, size_t name_len)); extern struct loaded_l10nfile * _nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list, const char *dirlist, size_t dirlist_len, int mask, const char *language, const char *territory, const char *codeset, const char *normalized_codeset, const char *modifier, const char *special, const char *sponsor, const char *revision, const char *filename, int do_allocate)); extern const char *_nl_expand_alias PARAMS ((const char *name)); extern int _nl_explode_name PARAMS ((char *name, const char **language, const char **modifier, const char **territory, const char **codeset, const char **normalized_codeset, const char **special, const char **sponsor, const char **revision)); lrzsz-0.12.21rc/intl/bindtextdom.c 666 764 764 12202 6607440602 12137 /* Implementation of the bindtextdomain(3) function Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. 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. */ #ifdef HAVE_CONFIG_H # include #endif #if defined STDC_HEADERS || defined _LIBC # include #else # ifdef HAVE_MALLOC_H # include # else void free (); # endif #endif #if defined HAVE_STRING_H || defined _LIBC # include #else # include # ifndef memcpy # define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num) # endif #endif #ifdef _LIBC # include #else # include "libgettext.h" #endif #include "gettext.h" #include "gettextP.h" /* @@ end of prolog @@ */ /* Contains the default location of the message catalogs. */ extern const char _nl_default_dirname[]; /* List with bindings of specific domains. */ extern struct binding *_nl_domain_bindings; /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define BINDTEXTDOMAIN __bindtextdomain # define strdup(str) __strdup (str) #else # define BINDTEXTDOMAIN bindtextdomain__ #endif /* Specify that the DOMAINNAME message catalog will be found in DIRNAME rather than in the system locale data base. */ char * BINDTEXTDOMAIN (domainname, dirname) const char *domainname; const char *dirname; { struct binding *binding; /* Some sanity checks. */ if (domainname == NULL || domainname[0] == '\0') return NULL; for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next) { int compare = strcmp (domainname, binding->domainname); if (compare == 0) /* We found it! */ break; if (compare < 0) { /* It is not in the list. */ binding = NULL; break; } } if (dirname == NULL) /* The current binding has be to returned. */ return binding == NULL ? (char *) _nl_default_dirname : binding->dirname; if (binding != NULL) { /* The domain is already bound. If the new value and the old one are equal we simply do nothing. Otherwise replace the old binding. */ if (strcmp (dirname, binding->dirname) != 0) { char *new_dirname; if (strcmp (dirname, _nl_default_dirname) == 0) new_dirname = (char *) _nl_default_dirname; else { #if defined _LIBC || defined HAVE_STRDUP new_dirname = strdup (dirname); if (new_dirname == NULL) return NULL; #else size_t len = strlen (dirname) + 1; new_dirname = (char *) malloc (len); if (new_dirname == NULL) return NULL; memcpy (new_dirname, dirname, len); #endif } if (binding->dirname != _nl_default_dirname) free (binding->dirname); binding->dirname = new_dirname; } } else { /* We have to create a new binding. */ size_t len; struct binding *new_binding = (struct binding *) malloc (sizeof (*new_binding)); if (new_binding == NULL) return NULL; #if defined _LIBC || defined HAVE_STRDUP new_binding->domainname = strdup (domainname); if (new_binding->domainname == NULL) return NULL; #else len = strlen (domainname) + 1; new_binding->domainname = (char *) malloc (len); if (new_binding->domainname == NULL) return NULL; memcpy (new_binding->domainname, domainname, len); #endif if (strcmp (dirname, _nl_default_dirname) == 0) new_binding->dirname = (char *) _nl_default_dirname; else { #if defined _LIBC || defined HAVE_STRDUP new_binding->dirname = strdup (dirname); if (new_binding->dirname == NULL) return NULL; #else len = strlen (dirname) + 1; new_binding->dirname = (char *) malloc (len); if (new_binding->dirname == NULL) return NULL; memcpy (new_binding->dirname, dirname, len); #endif } /* Now enqueue it. */ if (_nl_domain_bindings == NULL || strcmp (domainname, _nl_domain_bindings->domainname) < 0) { new_binding->next = _nl_domain_bindings; _nl_domain_bindings = new_binding; } else { binding = _nl_domain_bindings; while (binding->next != NULL && strcmp (domainname, binding->next->domainname) > 0) binding = binding->next; new_binding->next = binding->next; binding->next = new_binding; } binding = new_binding; } return binding->dirname; } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__bindtextdomain, bindtextdomain); #endif lrzsz-0.12.21rc/intl/dcgettext.c 666 764 764 36603 6607440602 11624 /* Implementation of the dcgettext(3) function Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. 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. */ #ifdef HAVE_CONFIG_H # include #endif #include #ifdef __GNUC__ # define alloca __builtin_alloca # define HAVE_ALLOCA 1 #else # if defined HAVE_ALLOCA_H || defined _LIBC # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca char *alloca (); # endif # endif # endif #endif #include #ifndef errno extern int errno; #endif #ifndef __set_errno # define __set_errno(val) errno = (val) #endif #if defined STDC_HEADERS || defined _LIBC # include #else char *getenv (); # ifdef HAVE_MALLOC_H # include # else void free (); # endif #endif #if defined HAVE_STRING_H || defined _LIBC # ifndef _GNU_SOURCE # define _GNU_SOURCE 1 # endif # include #else # include #endif #if !HAVE_STRCHR && !defined _LIBC # ifndef strchr # define strchr index # endif #endif #if defined HAVE_UNISTD_H || defined _LIBC # include #endif #include "gettext.h" #include "gettextP.h" #ifdef _LIBC # include #else # include "libgettext.h" #endif #include "hash-string.h" /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ANSI C functions. This is required by the standard because some ANSI C functions will require linking with this object file and the name space must not be polluted. */ # define getcwd __getcwd # define stpcpy __stpcpy #else # if !defined HAVE_GETCWD char *getwd (); # define getcwd(buf, max) getwd (buf) # else char *getcwd (); # endif # ifndef HAVE_STPCPY static char *stpcpy PARAMS ((char *dest, const char *src)); # endif #endif /* Amount to increase buffer size by in each try. */ #define PATH_INCR 32 /* 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 #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 #endif #if !defined(PATH_MAX) && defined(MAXPATHLEN) # define PATH_MAX MAXPATHLEN #endif #ifndef PATH_MAX # define PATH_MAX _POSIX_PATH_MAX #endif /* XPG3 defines the result of `setlocale (category, NULL)' as: ``Directs `setlocale()' to query `category' and return the current setting of `local'.'' However it does not specify the exact format. And even worse: POSIX defines this not at all. So we can use this feature only on selected system (e.g. those using GNU C Library). */ #ifdef _LIBC # define HAVE_LOCALE_NULL #endif /* Name of the default domain used for gettext(3) prior any call to textdomain(3). The default value for this is "messages". */ const char _nl_default_default_domain[] = "messages"; /* Value used as the default domain for gettext(3). */ const char *_nl_current_default_domain = _nl_default_default_domain; /* Contains the default location of the message catalogs. */ const char _nl_default_dirname[] = GNULOCALEDIR; /* List with bindings of specific domains created by bindtextdomain() calls. */ struct binding *_nl_domain_bindings; /* Prototypes for local functions. */ static char *find_msg PARAMS ((struct loaded_l10nfile *domain_file, const char *msgid)); static const char *category_to_name PARAMS ((int category)); static const char *guess_category_value PARAMS ((int category, const char *categoryname)); /* For those loosing systems which don't have `alloca' we have to add some additional code emulating it. */ #ifdef HAVE_ALLOCA /* Nothing has to be done. */ # define ADD_BLOCK(list, address) /* nothing */ # define FREE_BLOCKS(list) /* nothing */ #else struct block_list { void *address; struct block_list *next; }; # define ADD_BLOCK(list, addr) \ do { \ struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \ /* If we cannot get a free block we cannot add the new element to \ the list. */ \ if (newp != NULL) { \ newp->address = (addr); \ newp->next = (list); \ (list) = newp; \ } \ } while (0) # define FREE_BLOCKS(list) \ do { \ while (list != NULL) { \ struct block_list *old = list; \ list = list->next; \ free (old); \ } \ } while (0) # undef alloca # define alloca(size) (malloc (size)) #endif /* have alloca */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DCGETTEXT __dcgettext #else # define DCGETTEXT dcgettext__ #endif /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale. */ char * DCGETTEXT (domainname, msgid, category) const char *domainname; const char *msgid; int category; { #ifndef HAVE_ALLOCA struct block_list *block_list = NULL; #endif struct loaded_l10nfile *domain; struct binding *binding; const char *categoryname; const char *categoryvalue; char *dirname, *xdomainname; char *single_locale; char *retval; int saved_errno = errno; /* If no real MSGID is given return NULL. */ if (msgid == NULL) return NULL; /* If DOMAINNAME is NULL, we are interested in the default domain. If CATEGORY is not LC_MESSAGES this might not make much sense but the defintion left this undefined. */ if (domainname == NULL) domainname = _nl_current_default_domain; /* First find matching binding. */ for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next) { int compare = strcmp (domainname, binding->domainname); if (compare == 0) /* We found it! */ break; if (compare < 0) { /* It is not in the list. */ binding = NULL; break; } } if (binding == NULL) dirname = (char *) _nl_default_dirname; else if (binding->dirname[0] == '/') dirname = binding->dirname; else { /* We have a relative path. Make it absolute now. */ size_t dirname_len = strlen (binding->dirname) + 1; size_t path_max; char *ret; path_max = (unsigned) PATH_MAX; path_max += 2; /* The getcwd docs say to do this. */ dirname = (char *) alloca (path_max + dirname_len); ADD_BLOCK (block_list, dirname); __set_errno (0); while ((ret = getcwd (dirname, path_max)) == NULL && errno == ERANGE) { path_max += PATH_INCR; dirname = (char *) alloca (path_max + dirname_len); ADD_BLOCK (block_list, dirname); __set_errno (0); } if (ret == NULL) { /* We cannot get the current working directory. Don't signal an error but simply return the default string. */ FREE_BLOCKS (block_list); __set_errno (saved_errno); return (char *) msgid; } stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname); } /* Now determine the symbolic name of CATEGORY and its value. */ categoryname = category_to_name (category); categoryvalue = guess_category_value (category, categoryname); xdomainname = (char *) alloca (strlen (categoryname) + strlen (domainname) + 5); ADD_BLOCK (block_list, xdomainname); stpcpy (stpcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"), domainname), ".mo"); /* Creating working area. */ single_locale = (char *) alloca (strlen (categoryvalue) + 1); ADD_BLOCK (block_list, single_locale); /* Search for the given string. This is a loop because we perhaps got an ordered list of languages to consider for th translation. */ while (1) { /* Make CATEGORYVALUE point to the next element of the list. */ while (categoryvalue[0] != '\0' && categoryvalue[0] == ':') ++categoryvalue; if (categoryvalue[0] == '\0') { /* The whole contents of CATEGORYVALUE has been searched but no valid entry has been found. We solve this situation by implicitly appending a "C" entry, i.e. no translation will take place. */ single_locale[0] = 'C'; single_locale[1] = '\0'; } else { char *cp = single_locale; while (categoryvalue[0] != '\0' && categoryvalue[0] != ':') *cp++ = *categoryvalue++; *cp = '\0'; } /* If the current locale value is C (or POSIX) we don't load a domain. Return the MSGID. */ if (strcmp (single_locale, "C") == 0 || strcmp (single_locale, "POSIX") == 0) { FREE_BLOCKS (block_list); __set_errno (saved_errno); return (char *) msgid; } /* Find structure describing the message catalog matching the DOMAINNAME and CATEGORY. */ domain = _nl_find_domain (dirname, single_locale, xdomainname); if (domain != NULL) { retval = find_msg (domain, msgid); if (retval == NULL) { int cnt; for (cnt = 0; domain->successor[cnt] != NULL; ++cnt) { retval = find_msg (domain->successor[cnt], msgid); if (retval != NULL) break; } } if (retval != NULL) { FREE_BLOCKS (block_list); __set_errno (saved_errno); return retval; } } } /* NOTREACHED */ } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__dcgettext, dcgettext); #endif static char * find_msg (domain_file, msgid) struct loaded_l10nfile *domain_file; const char *msgid; { size_t top, act, bottom; struct loaded_domain *domain; if (domain_file->decided == 0) _nl_load_domain (domain_file); if (domain_file->data == NULL) return NULL; domain = (struct loaded_domain *) domain_file->data; /* Locate the MSGID and its translation. */ if (domain->hash_size > 2 && domain->hash_tab != NULL) { /* Use the hashing table. */ nls_uint32 len = strlen (msgid); nls_uint32 hash_val = hash_string (msgid); nls_uint32 idx = hash_val % domain->hash_size; nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2)); nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]); if (nstr == 0) /* Hash table entry is empty. */ return NULL; if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len && strcmp (msgid, domain->data + W (domain->must_swap, domain->orig_tab[nstr - 1].offset)) == 0) return (char *) domain->data + W (domain->must_swap, domain->trans_tab[nstr - 1].offset); while (1) { if (idx >= domain->hash_size - incr) idx -= domain->hash_size - incr; else idx += incr; nstr = W (domain->must_swap, domain->hash_tab[idx]); if (nstr == 0) /* Hash table entry is empty. */ return NULL; if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len && strcmp (msgid, domain->data + W (domain->must_swap, domain->orig_tab[nstr - 1].offset)) == 0) return (char *) domain->data + W (domain->must_swap, domain->trans_tab[nstr - 1].offset); } /* NOTREACHED */ } /* Now we try the default method: binary search in the sorted array of messages. */ bottom = 0; top = domain->nstrings; while (bottom < top) { int cmp_val; act = (bottom + top) / 2; cmp_val = strcmp (msgid, domain->data + W (domain->must_swap, domain->orig_tab[act].offset)); if (cmp_val < 0) top = act; else if (cmp_val > 0) bottom = act + 1; else break; } /* If an translation is found return this. */ return bottom >= top ? NULL : (char *) domain->data + W (domain->must_swap, domain->trans_tab[act].offset); } /* Return string representation of locale CATEGORY. */ static const char * category_to_name (category) int category; { const char *retval; switch (category) { #ifdef LC_COLLATE case LC_COLLATE: retval = "LC_COLLATE"; break; #endif #ifdef LC_CTYPE case LC_CTYPE: retval = "LC_CTYPE"; break; #endif #ifdef LC_MONETARY case LC_MONETARY: retval = "LC_MONETARY"; break; #endif #ifdef LC_NUMERIC case LC_NUMERIC: retval = "LC_NUMERIC"; break; #endif #ifdef LC_TIME case LC_TIME: retval = "LC_TIME"; break; #endif #ifdef LC_MESSAGES case LC_MESSAGES: retval = "LC_MESSAGES"; break; #endif #ifdef LC_RESPONSE case LC_RESPONSE: retval = "LC_RESPONSE"; break; #endif #ifdef LC_ALL case LC_ALL: /* This might not make sense but is perhaps better than any other value. */ retval = "LC_ALL"; break; #endif default: /* If you have a better idea for a default value let me know. */ retval = "LC_XXX"; } return retval; } /* Guess value of current locale from value of the environment variables. */ static const char * guess_category_value (category, categoryname) int category; const char *categoryname; { const char *retval; /* The highest priority value is the `LANGUAGE' environment variable. This is a GNU extension. */ retval = getenv ("LANGUAGE"); if (retval != NULL && retval[0] != '\0') return retval; /* `LANGUAGE' is not set. So we have to proceed with the POSIX methods of looking to `LC_ALL', `LC_xxx', and `LANG'. On some systems this can be done by the `setlocale' function itself. */ #if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL return setlocale (category, NULL); #else /* Setting of LC_ALL overwrites all other. */ retval = getenv ("LC_ALL"); if (retval != NULL && retval[0] != '\0') return retval; /* Next comes the name of the desired category. */ retval = getenv (categoryname); if (retval != NULL && retval[0] != '\0') return retval; /* Last possibility is the LANG environment variable. */ retval = getenv ("LANG"); if (retval != NULL && retval[0] != '\0') return retval; /* We use C as the default domain. POSIX says this is implementation defined. */ return "C"; #endif } /* @@ begin of epilog @@ */ /* We don't want libintl.a to depend on any other library. So we avoid the non-standard function stpcpy. In GNU C Library this function is available, though. Also allow the symbol HAVE_STPCPY to be defined. */ #if !_LIBC && !HAVE_STPCPY static char * stpcpy (dest, src) char *dest; const char *src; { while ((*dest++ = *src++) != '\0') /* Do nothing. */ ; return dest - 1; } #endif lrzsz-0.12.21rc/intl/dgettext.c 666 764 764 3326 6607440602 11435 /* dgettext.c -- implementation of the dgettext(3) function Copyright (C) 1995 Software Foundation, Inc. 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. */ #ifdef HAVE_CONFIG_H # include #endif #if defined HAVE_LOCALE_H || defined _LIBC # include #endif #ifdef _LIBC # include #else # include "libgettext.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DGETTEXT __dgettext # define DCGETTEXT __dcgettext #else # define DGETTEXT dgettext__ # define DCGETTEXT dcgettext__ #endif /* Look up MSGID in the DOMAINNAME message catalog of the current LC_MESSAGES locale. */ char * DGETTEXT (domainname, msgid) const char *domainname; const char *msgid; { return DCGETTEXT (domainname, msgid, LC_MESSAGES); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__dgettext, dgettext); #endif lrzsz-0.12.21rc/intl/gettext.c 666 764 764 3622 6607440602 11270 /* Implementation of gettext(3) function Copyright (C) 1995, 1997 Free Software Foundation, Inc. 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. */ #ifdef HAVE_CONFIG_H # include #endif #ifdef _LIBC # define __need_NULL # include #else # ifdef STDC_HEADERS # include /* Just for NULL. */ # else # ifdef HAVE_STRING_H # include # else # define NULL ((void *) 0) # endif # endif #endif #ifdef _LIBC # include #else # include "libgettext.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define GETTEXT __gettext # define DGETTEXT __dgettext #else # define GETTEXT gettext__ # define DGETTEXT dgettext__ #endif /* Look up MSGID in the current default message catalog for the current LC_MESSAGES locale. If not found, returns MSGID itself (the default text). */ char * GETTEXT (msgid) const char *msgid; { return DGETTEXT (NULL, msgid); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__gettext, gettext); #endif lrzsz-0.12.21rc/intl/finddomain.c 666 764 764 12262 6607440602 11734 /* Handle list of needed message catalogs Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. Written by Ulrich Drepper , 1995. 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. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #if defined STDC_HEADERS || defined _LIBC # include #else # ifdef HAVE_MALLOC_H # include # else void free (); # endif #endif #if defined HAVE_STRING_H || defined _LIBC # include #else # include # ifndef memcpy # define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num) # endif #endif #if !HAVE_STRCHR && !defined _LIBC # ifndef strchr # define strchr index # endif #endif #if defined HAVE_UNISTD_H || defined _LIBC # include #endif #include "gettext.h" #include "gettextP.h" #ifdef _LIBC # include #else # include "libgettext.h" #endif /* @@ end of prolog @@ */ /* List of already loaded domains. */ static struct loaded_l10nfile *_nl_loaded_domains; /* Return a data structure describing the message catalog described by the DOMAINNAME and CATEGORY parameters with respect to the currently established bindings. */ struct loaded_l10nfile * _nl_find_domain (dirname, locale, domainname) const char *dirname; char *locale; const char *domainname; { struct loaded_l10nfile *retval; const char *language; const char *modifier; const char *territory; const char *codeset; const char *normalized_codeset; const char *special; const char *sponsor; const char *revision; const char *alias_value; int mask; /* LOCALE can consist of up to four recognized parts for the XPG syntax: language[_territory[.codeset]][@modifier] and six parts for the CEN syntax: language[_territory][+audience][+special][,[sponsor][_revision]] Beside the first all of them are allowed to be missing. If the full specified locale is not found, the less specific one are looked for. The various part will be stripped of according to the following order: (1) revision (2) sponsor (3) special (4) codeset (5) normalized codeset (6) territory (7) audience/modifier */ /* If we have already tested for this locale entry there has to be one data set in the list of loaded domains. */ retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, strlen (dirname) + 1, 0, locale, NULL, NULL, NULL, NULL, NULL, NULL, NULL, domainname, 0); if (retval != NULL) { /* We know something about this locale. */ int cnt; if (retval->decided == 0) _nl_load_domain (retval); if (retval->data != NULL) return retval; for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) { if (retval->successor[cnt]->decided == 0) _nl_load_domain (retval->successor[cnt]); if (retval->successor[cnt]->data != NULL) break; } return cnt >= 0 ? retval : NULL; /* NOTREACHED */ } /* See whether the locale value is an alias. If yes its value *overwrites* the alias name. No test for the original value is done. */ alias_value = _nl_expand_alias (locale); if (alias_value != NULL) { size_t len = strlen (alias_value) + 1; locale = (char *) malloc (len); if (locale == NULL) return NULL; memcpy (locale, alias_value, len); } /* Now we determine the single parts of the locale name. First look for the language. Termination symbols are `_' and `@' if we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */ mask = _nl_explode_name (locale, &language, &modifier, &territory, &codeset, &normalized_codeset, &special, &sponsor, &revision); /* Create all possible locale entries which might be interested in generalization. */ retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, strlen (dirname) + 1, mask, language, territory, codeset, normalized_codeset, modifier, special, sponsor, revision, domainname, 1); if (retval == NULL) /* This means we are out of core. */ return NULL; if (retval->decided == 0) _nl_load_domain (retval); if (retval->data == NULL) { int cnt; for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) { if (retval->successor[cnt]->decided == 0) _nl_load_domain (retval->successor[cnt]); if (retval->successor[cnt]->data != NULL) break; } } /* The room for an alias was dynamically allocated. Free it now. */ if (alias_value != NULL) free (locale); return retval; } lrzsz-0.12.21rc/intl/loadmsgcat.c 666 764 764 13060 6607440602 11737 /* Load needed message catalogs Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. 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. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #if defined STDC_HEADERS || defined _LIBC # include #endif #if defined HAVE_UNISTD_H || defined _LIBC # include #endif #if (defined HAVE_MMAP && defined HAVE_MUNMAP) || defined _LIBC # include #endif #include "gettext.h" #include "gettextP.h" /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ISO C functions. This is required by the standard because some ISO C functions will require linking with this object file and the name space must not be polluted. */ # define fstat __fstat # define open __open # define close __close # define read __read # define mmap __mmap # define munmap __munmap #endif /* We need a sign, whether a new catalog was loaded, which can be associated with all translations. This is important if the translations are cached by one of GCC's features. */ int _nl_msg_cat_cntr = 0; /* Load the message catalogs specified by FILENAME. If it is no valid message catalog do nothing. */ void _nl_load_domain (domain_file) struct loaded_l10nfile *domain_file; { int fd; struct stat st; struct mo_file_header *data = (struct mo_file_header *) -1; #if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \ || defined _LIBC int use_mmap = 0; #endif struct loaded_domain *domain; domain_file->decided = 1; domain_file->data = NULL; /* If the record does not represent a valid locale the FILENAME might be NULL. This can happen when according to the given specification the locale file name is different for XPG and CEN syntax. */ if (domain_file->filename == NULL) return; /* Try to open the addressed file. */ fd = open (domain_file->filename, O_RDONLY); if (fd == -1) return; /* We must know about the size of the file. */ if (fstat (fd, &st) != 0 && st.st_size < (off_t) sizeof (struct mo_file_header)) { /* Something went wrong. */ close (fd); return; } #if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \ || defined _LIBC /* Now we are ready to load the file. If mmap() is available we try this first. If not available or it failed we try to load it. */ data = (struct mo_file_header *) mmap (NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0); if (data != (struct mo_file_header *) -1) { /* mmap() call was successful. */ close (fd); use_mmap = 1; } #endif /* If the data is not yet available (i.e. mmap'ed) we try to load it manually. */ if (data == (struct mo_file_header *) -1) { off_t to_read; char *read_ptr; data = (struct mo_file_header *) malloc (st.st_size); if (data == NULL) return; to_read = st.st_size; read_ptr = (char *) data; do { long int nb = (long int) read (fd, read_ptr, to_read); if (nb == -1) { close (fd); return; } read_ptr += nb; to_read -= nb; } while (to_read > 0); close (fd); } /* Using the magic number we can test whether it really is a message catalog file. */ if (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED) { /* The magic number is wrong: not a message catalog file. */ #if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \ || defined _LIBC if (use_mmap) munmap ((caddr_t) data, st.st_size); else #endif free (data); return; } domain_file->data = (struct loaded_domain *) malloc (sizeof (struct loaded_domain)); if (domain_file->data == NULL) return; domain = (struct loaded_domain *) domain_file->data; domain->data = (char *) data; domain->must_swap = data->magic != _MAGIC; /* Fill in the information about the available tables. */ switch (W (domain->must_swap, data->revision)) { case 0: domain->nstrings = W (domain->must_swap, data->nstrings); domain->orig_tab = (struct string_desc *) ((char *) data + W (domain->must_swap, data->orig_tab_offset)); domain->trans_tab = (struct string_desc *) ((char *) data + W (domain->must_swap, data->trans_tab_offset)); domain->hash_size = W (domain->must_swap, data->hash_tab_size); domain->hash_tab = (nls_uint32 *) ((char *) data + W (domain->must_swap, data->hash_tab_offset)); break; default: /* This is an illegal revision. */ #if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \ || defined _LIBC if (use_mmap) munmap ((caddr_t) data, st.st_size); else #endif free (data); free (domain); domain_file->data = NULL; return; } /* Show that one domain is changed. This might make some cached translations invalid. */ ++_nl_msg_cat_cntr; } lrzsz-0.12.21rc/intl/localealias.c 666 764 764 21315 6607440602 12074 /* Handle aliases for locale names Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. Written by Ulrich Drepper , 1995. 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. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #ifdef __GNUC__ # define alloca __builtin_alloca # define HAVE_ALLOCA 1 #else # if defined HAVE_ALLOCA_H || defined _LIBC # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca char *alloca (); # endif # endif # endif #endif #if defined STDC_HEADERS || defined _LIBC # include #else char *getenv (); # ifdef HAVE_MALLOC_H # include # else void free (); # endif #endif #if defined HAVE_STRING_H || defined _LIBC # ifndef _GNU_SOURCE # define _GNU_SOURCE 1 # endif # include #else # include # ifndef memcpy # define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num) # endif #endif #if !HAVE_STRCHR && !defined _LIBC # ifndef strchr # define strchr index # endif #endif #include "gettext.h" #include "gettextP.h" /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ANSI C functions. This is required by the standard because some ANSI C functions will require linking with this object file and the name space must not be polluted. */ # define strcasecmp __strcasecmp #endif /* For those loosing systems which don't have `alloca' we have to add some additional code emulating it. */ #ifdef HAVE_ALLOCA /* Nothing has to be done. */ # define ADD_BLOCK(list, address) /* nothing */ # define FREE_BLOCKS(list) /* nothing */ #else struct block_list { void *address; struct block_list *next; }; # define ADD_BLOCK(list, addr) \ do { \ struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \ /* If we cannot get a free block we cannot add the new element to \ the list. */ \ if (newp != NULL) { \ newp->address = (addr); \ newp->next = (list); \ (list) = newp; \ } \ } while (0) # define FREE_BLOCKS(list) \ do { \ while (list != NULL) { \ struct block_list *old = list; \ list = list->next; \ free (old); \ } \ } while (0) # undef alloca # define alloca(size) (malloc (size)) #endif /* have alloca */ struct alias_map { const char *alias; const char *value; }; static struct alias_map *map; static size_t nmap = 0; static size_t maxmap = 0; /* Prototypes for local functions. */ static size_t read_alias_file PARAMS ((const char *fname, int fname_len)); static void extend_alias_table PARAMS ((void)); static int alias_compare PARAMS ((const struct alias_map *map1, const struct alias_map *map2)); const char * _nl_expand_alias (name) const char *name; { static const char *locale_alias_path = LOCALE_ALIAS_PATH; struct alias_map *retval; size_t added; do { struct alias_map item; item.alias = name; if (nmap > 0) retval = (struct alias_map *) bsearch (&item, map, nmap, sizeof (struct alias_map), (int (*) PARAMS ((const void *, const void *)) ) alias_compare); else retval = NULL; /* We really found an alias. Return the value. */ if (retval != NULL) return retval->value; /* Perhaps we can find another alias file. */ added = 0; while (added == 0 && locale_alias_path[0] != '\0') { const char *start; while (locale_alias_path[0] == ':') ++locale_alias_path; start = locale_alias_path; while (locale_alias_path[0] != '\0' && locale_alias_path[0] != ':') ++locale_alias_path; if (start < locale_alias_path) added = read_alias_file (start, locale_alias_path - start); } } while (added != 0); return NULL; } static size_t read_alias_file (fname, fname_len) const char *fname; int fname_len; { #ifndef HAVE_ALLOCA struct block_list *block_list = NULL; #endif FILE *fp; char *full_fname; size_t added; static const char aliasfile[] = "/locale.alias"; full_fname = (char *) alloca (fname_len + sizeof aliasfile); ADD_BLOCK (block_list, full_fname); memcpy (full_fname, fname, fname_len); memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile); fp = fopen (full_fname, "r"); if (fp == NULL) { FREE_BLOCKS (block_list); return 0; } added = 0; while (!feof (fp)) { /* It is a reasonable approach to use a fix buffer here because a) we are only interested in the first two fields b) these fields must be usable as file names and so must not be that long */ char buf[BUFSIZ]; char *alias; char *value; char *cp; if (fgets (buf, BUFSIZ, fp) == NULL) /* EOF reached. */ break; cp = buf; /* Ignore leading white space. */ while (isspace (cp[0])) ++cp; /* A leading '#' signals a comment line. */ if (cp[0] != '\0' && cp[0] != '#') { alias = cp++; while (cp[0] != '\0' && !isspace (cp[0])) ++cp; /* Terminate alias name. */ if (cp[0] != '\0') *cp++ = '\0'; /* Now look for the beginning of the value. */ while (isspace (cp[0])) ++cp; if (cp[0] != '\0') { char *tp; size_t len; value = cp++; while (cp[0] != '\0' && !isspace (cp[0])) ++cp; /* Terminate value. */ if (cp[0] == '\n') { /* This has to be done to make the following test for the end of line possible. We are looking for the terminating '\n' which do not overwrite here. */ *cp++ = '\0'; *cp = '\n'; } else if (cp[0] != '\0') *cp++ = '\0'; if (nmap >= maxmap) extend_alias_table (); /* We cannot depend on strdup available in the libc. Sigh! */ len = strlen (alias) + 1; tp = (char *) malloc (len); if (tp == NULL) { FREE_BLOCKS (block_list); return added; } memcpy (tp, alias, len); map[nmap].alias = tp; len = strlen (value) + 1; tp = (char *) malloc (len); if (tp == NULL) { FREE_BLOCKS (block_list); return added; } memcpy (tp, value, len); map[nmap].value = tp; ++nmap; ++added; } } /* Possibly not the whole line fits into the buffer. Ignore the rest of the line. */ while (strchr (cp, '\n') == NULL) { cp = buf; if (fgets (buf, BUFSIZ, fp) == NULL) /* Make sure the inner loop will be left. The outer loop will exit at the `feof' test. */ *cp = '\n'; } } /* Should we test for ferror()? I think we have to silently ignore errors. --drepper */ fclose (fp); if (added > 0) qsort (map, nmap, sizeof (struct alias_map), (int (*) PARAMS ((const void *, const void *))) alias_compare); FREE_BLOCKS (block_list); return added; } static void extend_alias_table () { size_t new_size; struct alias_map *new_map; new_size = maxmap == 0 ? 100 : 2 * maxmap; new_map = (struct alias_map *) malloc (new_size * sizeof (struct alias_map)); if (new_map == NULL) /* Simply don't extend: we don't have any more core. */ return; memcpy (new_map, map, nmap * sizeof (struct alias_map)); if (maxmap != 0) free (map); map = new_map; maxmap = new_size; } static int alias_compare (map1, map2) const struct alias_map *map1; const struct alias_map *map2; { #if defined _LIBC || defined HAVE_STRCASECMP return strcasecmp (map1->alias, map2->alias); #else const unsigned char *p1 = (const unsigned char *) map1->alias; const unsigned char *p2 = (const unsigned char *) map2->alias; unsigned char c1, c2; if (p1 == p2) return 0; do { /* I know this seems to be odd but the tolower() function in some systems libc cannot handle nonalpha characters. */ c1 = isupper (*p1) ? tolower (*p1) : *p1; c2 = isupper (*p2) ? tolower (*p2) : *p2; if (c1 == '\0') break; ++p1; ++p2; } while (c1 == c2); return c1 - c2; #endif } lrzsz-0.12.21rc/intl/textdomain.c 666 764 764 6241 6607440602 11760 /* Implementation of the textdomain(3) function Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. Written by Ulrich Drepper , 1995. 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. */ #ifdef HAVE_CONFIG_H # include #endif #if defined STDC_HEADERS || defined _LIBC # include #endif #if defined STDC_HEADERS || defined HAVE_STRING_H || defined _LIBC # include #else # include # ifndef memcpy # define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num) # endif #endif #ifdef _LIBC # include #else # include "libgettext.h" #endif /* @@ end of prolog @@ */ /* Name of the default text domain. */ extern const char _nl_default_default_domain[]; /* Default text domain in which entries for gettext(3) are to be found. */ extern const char *_nl_current_default_domain; /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define TEXTDOMAIN __textdomain # define strdup(str) __strdup (str) #else # define TEXTDOMAIN textdomain__ #endif /* Set the current default message catalog to DOMAINNAME. If DOMAINNAME is null, return the current default. If DOMAINNAME is "", reset to the default of "messages". */ char * TEXTDOMAIN (domainname) const char *domainname; { char *old; /* A NULL pointer requests the current setting. */ if (domainname == NULL) return (char *) _nl_current_default_domain; old = (char *) _nl_current_default_domain; /* If domain name is the null string set to default domain "messages". */ if (domainname[0] == '\0' || strcmp (domainname, _nl_default_default_domain) == 0) _nl_current_default_domain = _nl_default_default_domain; else { /* If the following malloc fails `_nl_current_default_domain' will be NULL. This value will be returned and so signals we are out of core. */ #if defined _LIBC || defined HAVE_STRDUP _nl_current_default_domain = strdup (domainname); #else size_t len = strlen (domainname) + 1; char *cp = (char *) malloc (len); if (cp != NULL) memcpy (cp, domainname, len); _nl_current_default_domain = cp; #endif } if (old != _nl_default_default_domain) free (old); return (char *) _nl_current_default_domain; } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__textdomain, textdomain); #endif lrzsz-0.12.21rc/intl/l10nflist.c 666 764 764 24176 6607440602 11447 /* Handle list of needed message catalogs Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. Written by Ulrich Drepper , 1995. 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. */ #ifdef HAVE_CONFIG_H # include #endif #if defined HAVE_STRING_H || defined _LIBC # ifndef _GNU_SOURCE # define _GNU_SOURCE 1 # endif # include #else # include # ifndef memcpy # define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num) # endif #endif #if !HAVE_STRCHR && !defined _LIBC # ifndef strchr # define strchr index # endif #endif #if defined _LIBC || defined HAVE_ARGZ_H # include #endif #include #include #if defined STDC_HEADERS || defined _LIBC # include #endif #include "loadinfo.h" /* On some strange systems still no definition of NULL is found. Sigh! */ #ifndef NULL # if defined __STDC__ && __STDC__ # define NULL ((void *) 0) # else # define NULL 0 # endif #endif /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ANSI C functions. This is required by the standard because some ANSI C functions will require linking with this object file and the name space must not be polluted. */ # define stpcpy(dest, src) __stpcpy(dest, src) #else # ifndef HAVE_STPCPY static char *stpcpy PARAMS ((char *dest, const char *src)); # endif #endif /* Define function which are usually not available. */ #if !defined _LIBC && !defined HAVE___ARGZ_COUNT /* Returns the number of strings in ARGZ. */ static size_t argz_count__ PARAMS ((const char *argz, size_t len)); static size_t argz_count__ (argz, len) const char *argz; size_t len; { size_t count = 0; while (len > 0) { size_t part_len = strlen (argz); argz += part_len + 1; len -= part_len + 1; count++; } return count; } # undef __argz_count # define __argz_count(argz, len) argz_count__ (argz, len) #endif /* !_LIBC && !HAVE___ARGZ_COUNT */ #if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY /* Make '\0' separated arg vector ARGZ printable by converting all the '\0's except the last into the character SEP. */ static void argz_stringify__ PARAMS ((char *argz, size_t len, int sep)); static void argz_stringify__ (argz, len, sep) char *argz; size_t len; int sep; { while (len > 0) { size_t part_len = strlen (argz); argz += part_len; len -= part_len + 1; if (len > 0) *argz++ = sep; } } # undef __argz_stringify # define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep) #endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */ #if !defined _LIBC && !defined HAVE___ARGZ_NEXT static char *argz_next__ PARAMS ((char *argz, size_t argz_len, const char *entry)); static char * argz_next__ (argz, argz_len, entry) char *argz; size_t argz_len; const char *entry; { if (entry) { if (entry < argz + argz_len) entry = strchr (entry, '\0') + 1; return entry >= argz + argz_len ? NULL : (char *) entry; } else if (argz_len > 0) return argz; else return 0; } # undef __argz_next # define __argz_next(argz, len, entry) argz_next__ (argz, len, entry) #endif /* !_LIBC && !HAVE___ARGZ_NEXT */ /* Return number of bits set in X. */ static int pop PARAMS ((int x)); static inline int pop (x) int x; { /* We assume that no more than 16 bits are used. */ x = ((x & ~0x5555) >> 1) + (x & 0x5555); x = ((x & ~0x3333) >> 2) + (x & 0x3333); x = ((x >> 4) + x) & 0x0f0f; x = ((x >> 8) + x) & 0xff; return x; } struct loaded_l10nfile * _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language, territory, codeset, normalized_codeset, modifier, special, sponsor, revision, filename, do_allocate) struct loaded_l10nfile **l10nfile_list; const char *dirlist; size_t dirlist_len; int mask; const char *language; const char *territory; const char *codeset; const char *normalized_codeset; const char *modifier; const char *special; const char *sponsor; const char *revision; const char *filename; int do_allocate; { char *abs_filename; struct loaded_l10nfile *last = NULL; struct loaded_l10nfile *retval; char *cp; size_t entries; int cnt; /* Allocate room for the full file name. */ abs_filename = (char *) malloc (dirlist_len + strlen (language) + ((mask & TERRITORY) != 0 ? strlen (territory) + 1 : 0) + ((mask & XPG_CODESET) != 0 ? strlen (codeset) + 1 : 0) + ((mask & XPG_NORM_CODESET) != 0 ? strlen (normalized_codeset) + 1 : 0) + (((mask & XPG_MODIFIER) != 0 || (mask & CEN_AUDIENCE) != 0) ? strlen (modifier) + 1 : 0) + ((mask & CEN_SPECIAL) != 0 ? strlen (special) + 1 : 0) + (((mask & CEN_SPONSOR) != 0 || (mask & CEN_REVISION) != 0) ? (1 + ((mask & CEN_SPONSOR) != 0 ? strlen (sponsor) + 1 : 0) + ((mask & CEN_REVISION) != 0 ? strlen (revision) + 1 : 0)) : 0) + 1 + strlen (filename) + 1); if (abs_filename == NULL) return NULL; retval = NULL; last = NULL; /* Construct file name. */ memcpy (abs_filename, dirlist, dirlist_len); __argz_stringify (abs_filename, dirlist_len, ':'); cp = abs_filename + (dirlist_len - 1); *cp++ = '/'; cp = stpcpy (cp, language); if ((mask & TERRITORY) != 0) { *cp++ = '_'; cp = stpcpy (cp, territory); } if ((mask & XPG_CODESET) != 0) { *cp++ = '.'; cp = stpcpy (cp, codeset); } if ((mask & XPG_NORM_CODESET) != 0) { *cp++ = '.'; cp = stpcpy (cp, normalized_codeset); } if ((mask & (XPG_MODIFIER | CEN_AUDIENCE)) != 0) { /* This component can be part of both syntaces but has different leading characters. For CEN we use `+', else `@'. */ *cp++ = (mask & CEN_AUDIENCE) != 0 ? '+' : '@'; cp = stpcpy (cp, modifier); } if ((mask & CEN_SPECIAL) != 0) { *cp++ = '+'; cp = stpcpy (cp, special); } if ((mask & (CEN_SPONSOR | CEN_REVISION)) != 0) { *cp++ = ','; if ((mask & CEN_SPONSOR) != 0) cp = stpcpy (cp, sponsor); if ((mask & CEN_REVISION) != 0) { *cp++ = '_'; cp = stpcpy (cp, revision); } } *cp++ = '/'; stpcpy (cp, filename); /* Look in list of already loaded domains whether it is already available. */ last = NULL; for (retval = *l10nfile_list; retval != NULL; retval = retval->next) if (retval->filename != NULL) { int compare = strcmp (retval->filename, abs_filename); if (compare == 0) /* We found it! */ break; if (compare < 0) { /* It's not in the list. */ retval = NULL; break; } last = retval; } if (retval != NULL || do_allocate == 0) { free (abs_filename); return retval; } retval = (struct loaded_l10nfile *) malloc (sizeof (*retval) + (__argz_count (dirlist, dirlist_len) * (1 << pop (mask)) * sizeof (struct loaded_l10nfile *))); if (retval == NULL) return NULL; retval->filename = abs_filename; retval->decided = (__argz_count (dirlist, dirlist_len) != 1 || ((mask & XPG_CODESET) != 0 && (mask & XPG_NORM_CODESET) != 0)); retval->data = NULL; if (last == NULL) { retval->next = *l10nfile_list; *l10nfile_list = retval; } else { retval->next = last->next; last->next = retval; } entries = 0; /* If the DIRLIST is a real list the RETVAL entry corresponds not to a real file. So we have to use the DIRLIST separation mechanism of the inner loop. */ cnt = __argz_count (dirlist, dirlist_len) == 1 ? mask - 1 : mask; for (; cnt >= 0; --cnt) if ((cnt & ~mask) == 0 && ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0) && ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0)) { /* Iterate over all elements of the DIRLIST. */ char *dir = NULL; while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir)) != NULL) retval->successor[entries++] = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt, language, territory, codeset, normalized_codeset, modifier, special, sponsor, revision, filename, 1); } retval->successor[entries] = NULL; return retval; } /* Normalize codeset name. There is no standard for the codeset names. Normalization allows the user to use any of the common names. */ const char * _nl_normalize_codeset (codeset, name_len) const char *codeset; size_t name_len; { int len = 0; int only_digit = 1; char *retval; char *wp; size_t cnt; for (cnt = 0; cnt < name_len; ++cnt) if (isalnum (codeset[cnt])) { ++len; if (isalpha (codeset[cnt])) only_digit = 0; } retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1); if (retval != NULL) { if (only_digit) wp = stpcpy (retval, "iso"); else wp = retval; for (cnt = 0; cnt < name_len; ++cnt) if (isalpha (codeset[cnt])) *wp++ = tolower (codeset[cnt]); else if (isdigit (codeset[cnt])) *wp++ = codeset[cnt]; *wp = '\0'; } return (const char *) retval; } /* @@ begin of epilog @@ */ /* We don't want libintl.a to depend on any other library. So we avoid the non-standard function stpcpy. In GNU C Library this function is available, though. Also allow the symbol HAVE_STPCPY to be defined. */ #if !_LIBC && !HAVE_STPCPY static char * stpcpy (dest, src) char *dest; const char *src; { while ((*dest++ = *src++) != '\0') /* Do nothing. */ ; return dest - 1; } #endif lrzsz-0.12.21rc/intl/explodename.c 666 764 764 10600 6607440602 12117 /* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 1995. 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. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "loadinfo.h" /* On some strange systems still no definition of NULL is found. Sigh! */ #ifndef NULL # if defined __STDC__ && __STDC__ # define NULL ((void *) 0) # else # define NULL 0 # endif #endif /* @@ end of prolog @@ */ int _nl_explode_name (name, language, modifier, territory, codeset, normalized_codeset, special, sponsor, revision) char *name; const char **language; const char **modifier; const char **territory; const char **codeset; const char **normalized_codeset; const char **special; const char **sponsor; const char **revision; { enum { undecided, xpg, cen } syntax; char *cp; int mask; *modifier = NULL; *territory = NULL; *codeset = NULL; *normalized_codeset = NULL; *special = NULL; *sponsor = NULL; *revision = NULL; /* Now we determine the single parts of the locale name. First look for the language. Termination symbols are `_' and `@' if we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */ mask = 0; syntax = undecided; *language = cp = name; while (cp[0] != '\0' && cp[0] != '_' && cp[0] != '@' && cp[0] != '+' && cp[0] != ',') ++cp; if (*language == cp) /* This does not make sense: language has to be specified. Use this entry as it is without exploding. Perhaps it is an alias. */ cp = strchr (*language, '\0'); else if (cp[0] == '_') { /* Next is the territory. */ cp[0] = '\0'; *territory = ++cp; while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@' && cp[0] != '+' && cp[0] != ',' && cp[0] != '_') ++cp; mask |= TERRITORY; if (cp[0] == '.') { /* Next is the codeset. */ syntax = xpg; cp[0] = '\0'; *codeset = ++cp; while (cp[0] != '\0' && cp[0] != '@') ++cp; mask |= XPG_CODESET; if (*codeset != cp && (*codeset)[0] != '\0') { *normalized_codeset = _nl_normalize_codeset (*codeset, cp - *codeset); if (strcmp (*codeset, *normalized_codeset) == 0) free ((char *) *normalized_codeset); else mask |= XPG_NORM_CODESET; } } } if (cp[0] == '@' || (syntax != xpg && cp[0] == '+')) { /* Next is the modifier. */ syntax = cp[0] == '@' ? xpg : cen; cp[0] = '\0'; *modifier = ++cp; while (syntax == cen && cp[0] != '\0' && cp[0] != '+' && cp[0] != ',' && cp[0] != '_') ++cp; mask |= XPG_MODIFIER | CEN_AUDIENCE; } if (syntax != xpg && (cp[0] == '+' || cp[0] == ',' || cp[0] == '_')) { syntax = cen; if (cp[0] == '+') { /* Next is special application (CEN syntax). */ cp[0] = '\0'; *special = ++cp; while (cp[0] != '\0' && cp[0] != ',' && cp[0] != '_') ++cp; mask |= CEN_SPECIAL; } if (cp[0] == ',') { /* Next is sponsor (CEN syntax). */ cp[0] = '\0'; *sponsor = ++cp; while (cp[0] != '\0' && cp[0] != '_') ++cp; mask |= CEN_SPONSOR; } if (cp[0] == '_') { /* Next is revision (CEN syntax). */ cp[0] = '\0'; *revision = ++cp; mask |= CEN_REVISION; } } /* For CEN syntax values it might be important to have the separator character in the file name, not for XPG syntax. */ if (syntax == xpg) { if (*territory != NULL && (*territory)[0] == '\0') mask &= ~TERRITORY; if (*codeset != NULL && (*codeset)[0] == '\0') mask &= ~XPG_CODESET; if (*modifier != NULL && (*modifier)[0] == '\0') mask &= ~XPG_MODIFIER; } return mask; } lrzsz-0.12.21rc/intl/intl-compat.c 666 764 764 3156 6607440602 12035 /* intl-compat.c - Stub functions to call gettext functions from GNU gettext Library. Copyright (C) 1995 Software Foundation, Inc. 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. */ #ifdef HAVE_CONFIG_H # include #endif #include "libgettext.h" /* @@ end of prolog @@ */ #undef gettext #undef dgettext #undef dcgettext #undef textdomain #undef bindtextdomain char * bindtextdomain (domainname, dirname) const char *domainname; const char *dirname; { return bindtextdomain__ (domainname, dirname); } char * dcgettext (domainname, msgid, category) const char *domainname; const char *msgid; int category; { return dcgettext__ (domainname, msgid, category); } char * dgettext (domainname, msgid) const char *domainname; const char *msgid; { return dgettext__ (domainname, msgid); } char * gettext (msgid) const char *msgid; { return gettext__ (msgid); } char * textdomain (domainname) const char *domainname; { return textdomain__ (domainname); } lrzsz-0.12.21rc/intl/cat-compat.c 666 764 764 14741 6607440602 11660 /* Compatibility code for gettext-using-catgets interface. Copyright (C) 1995, 1997 Free Software Foundation, Inc. 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. */ #ifdef HAVE_CONFIG_H # include #endif #include #ifdef STDC_HEADERS # include # include #else char *getenv (); # ifdef HAVE_MALLOC_H # include # endif #endif #ifdef HAVE_NL_TYPES_H # include #endif #include "libgettext.h" /* @@ end of prolog @@ */ /* XPG3 defines the result of `setlocale (category, NULL)' as: ``Directs `setlocale()' to query `category' and return the current setting of `local'.'' However it does not specify the exact format. And even worse: POSIX defines this not at all. So we can use this feature only on selected system (e.g. those using GNU C Library). */ #ifdef _LIBC # define HAVE_LOCALE_NULL #endif /* The catalog descriptor. */ static nl_catd catalog = (nl_catd) -1; /* Name of the default catalog. */ static const char default_catalog_name[] = "messages"; /* Name of currently used catalog. */ static const char *catalog_name = default_catalog_name; /* Get ID for given string. If not found return -1. */ static int msg_to_cat_id PARAMS ((const char *msg)); /* Substitution for systems lacking this function in their C library. */ #if !_LIBC && !HAVE_STPCPY static char *stpcpy PARAMS ((char *dest, const char *src)); #endif /* Set currently used domain/catalog. */ char * textdomain (domainname) const char *domainname; { nl_catd new_catalog; char *new_name; size_t new_name_len; char *lang; #if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES \ && defined HAVE_LOCALE_NULL lang = setlocale (LC_MESSAGES, NULL); #else lang = getenv ("LC_ALL"); if (lang == NULL || lang[0] == '\0') { lang = getenv ("LC_MESSAGES"); if (lang == NULL || lang[0] == '\0') lang = getenv ("LANG"); } #endif if (lang == NULL || lang[0] == '\0') lang = "C"; /* See whether name of currently used domain is asked. */ if (domainname == NULL) return (char *) catalog_name; if (domainname[0] == '\0') domainname = default_catalog_name; /* Compute length of added path element. */ new_name_len = sizeof (LOCALEDIR) - 1 + 1 + strlen (lang) + sizeof ("/LC_MESSAGES/") - 1 + sizeof (PACKAGE) - 1 + sizeof (".cat"); new_name = (char *) malloc (new_name_len); if (new_name == NULL) return NULL; strcpy (new_name, PACKAGE); new_catalog = catopen (new_name, 0); if (new_catalog == (nl_catd) -1) { /* NLSPATH search didn't work, try absolute path */ sprintf (new_name, "%s/%s/LC_MESSAGES/%s.cat", LOCALEDIR, lang, PACKAGE); new_catalog = catopen (new_name, 0); if (new_catalog == (nl_catd) -1) { free (new_name); return (char *) catalog_name; } } /* Close old catalog. */ if (catalog != (nl_catd) -1) catclose (catalog); if (catalog_name != default_catalog_name) free ((char *) catalog_name); catalog = new_catalog; catalog_name = new_name; return (char *) catalog_name; } char * bindtextdomain (domainname, dirname) const char *domainname; const char *dirname; { #if HAVE_SETENV || HAVE_PUTENV char *old_val, *new_val, *cp; size_t new_val_len; /* This does not make much sense here but to be compatible do it. */ if (domainname == NULL) return NULL; /* Compute length of added path element. If we use setenv we don't need the first byts for NLSPATH=, but why complicate the code for this peanuts. */ new_val_len = sizeof ("NLSPATH=") - 1 + strlen (dirname) + sizeof ("/%L/LC_MESSAGES/%N.cat"); old_val = getenv ("NLSPATH"); if (old_val == NULL || old_val[0] == '\0') { old_val = NULL; new_val_len += 1 + sizeof (LOCALEDIR) - 1 + sizeof ("/%L/LC_MESSAGES/%N.cat"); } else new_val_len += strlen (old_val); new_val = (char *) malloc (new_val_len); if (new_val == NULL) return NULL; # if HAVE_SETENV cp = new_val; # else cp = stpcpy (new_val, "NLSPATH="); # endif cp = stpcpy (cp, dirname); cp = stpcpy (cp, "/%L/LC_MESSAGES/%N.cat:"); if (old_val == NULL) { # if __STDC__ stpcpy (cp, LOCALEDIR "/%L/LC_MESSAGES/%N.cat"); # else cp = stpcpy (cp, LOCALEDIR); stpcpy (cp, "/%L/LC_MESSAGES/%N.cat"); # endif } else stpcpy (cp, old_val); # if HAVE_SETENV setenv ("NLSPATH", new_val, 1); free (new_val); # else putenv (new_val); /* Do *not* free the environment entry we just entered. It is used from now on. */ # endif #endif return (char *) domainname; } #undef gettext char * gettext (msg) const char *msg; { int msgid; if (msg == NULL || catalog == (nl_catd) -1) return (char *) msg; /* Get the message from the catalog. We always use set number 1. The message ID is computed by the function `msg_to_cat_id' which works on the table generated by `po-to-tbl'. */ msgid = msg_to_cat_id (msg); if (msgid == -1) return (char *) msg; return catgets (catalog, 1, msgid, (char *) msg); } /* Look through the table `_msg_tbl' which has `_msg_tbl_length' entries for the one equal to msg. If it is found return the ID. In case when the string is not found return -1. */ static int msg_to_cat_id (msg) const char *msg; { int cnt; for (cnt = 0; cnt < _msg_tbl_length; ++cnt) if (strcmp (msg, _msg_tbl[cnt]._msg) == 0) return _msg_tbl[cnt]._msg_number; return -1; } /* @@ begin of epilog @@ */ /* We don't want libintl.a to depend on any other library. So we avoid the non-standard function stpcpy. In GNU C Library this function is available, though. Also allow the symbol HAVE_STPCPY to be defined. */ #if !_LIBC && !HAVE_STPCPY static char * stpcpy (dest, src) char *dest; const char *src; { while ((*dest++ = *src++) != '\0') /* Do nothing. */ ; return dest - 1; } #endif lrzsz-0.12.21rc/intl/VERSION 666 764 764 51 6607440602 10441 GNU gettext library from gettext-0.10.32 lrzsz-0.12.21rc/src/ 777 764 764 0 6760042374 7262 5lrzsz-0.12.21rc/src/Makefile.in 664 764 764 34514 6760042373 11353 # Makefile.in generated automatically by automake 1.4a from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_FLAG = transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CPP = @CPP@ DATADIRNAME = @DATADIRNAME@ ENABLE_TIMESYNC = @ENABLE_TIMESYNC@ GENCAT = @GENCAT@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GT_NO = @GT_NO@ GT_YES = @GT_YES@ INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@ INSTOBJEXT = @INSTOBJEXT@ INTLDEPS = @INTLDEPS@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ PACKAGE = @PACKAGE@ PACKAGE_VERSION = @PACKAGE_VERSION@ POFILES = @POFILES@ POSUB = @POSUB@ RANLIB = @RANLIB@ U = @U@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ l = @l@ bin_PROGRAMS = lrz lsz lrz_SOURCES = lrz.c timing.c zperr.c zreadline.c crctab.c rbsb.c zm.c protname.c tcp.c lsyslog.c canit.c lsz_SOURCES = lsz.c timing.c zperr.c zreadline.c crctab.c rbsb.c zm.c protname.c tcp.c lsyslog.c canit.c noinst_HEADERS = timing.h zglobal.h zmodem.h datadir = $(prefix)/@DATADIRNAME@ localedir = $(datadir)/locale CFLAGS = @CFLAGS@ DISTCLEAN_FILES = lrzszbug LDADD = ../lib/libzmodem.a @INTLLIBS@ AUTOMAKE_OPTIONS = ansi2knr EXTRA_DIST = ansi2knr.1 ansi2knr.c lrzszbug.in INCLUDES = -I.. -I$(srcdir) -I$(top_srcdir)/src -I../intl -I$(top_srcdir)/lib #DEFS = -DLOCALEDIR=\"$(localedir)\" -DOS=\"@host_os@\" -DCPU=\"@host_cpu@\" DEFS = -DNFGVMIN @DEFS@ -DLOCALEDIR=\"$(localedir)\" mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../config.h CONFIG_CLEAN_FILES = lrzszbug PROGRAMS = $(bin_PROGRAMS) CPPFLAGS = @CPPFLAGS@ ANSI2KNR = @ANSI2KNR@ lrz_OBJECTS = lrz$U.o timing$U.o zperr$U.o zreadline$U.o crctab$U.o \ rbsb$U.o zm$U.o protname$U.o tcp$U.o lsyslog$U.o canit$U.o lrz_LDADD = $(LDADD) lrz_DEPENDENCIES = ../lib/libzmodem.a lrz_LDFLAGS = lsz_OBJECTS = lsz$U.o timing$U.o zperr$U.o zreadline$U.o crctab$U.o \ rbsb$U.o zm$U.o protname$U.o tcp$U.o lsyslog$U.o canit$U.o lsz_LDADD = $(LDADD) lsz_DEPENDENCIES = ../lib/libzmodem.a lsz_LDFLAGS = COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ HEADERS = $(noinst_HEADERS) DIST_COMMON = Makefile.am Makefile.in ansi2knr.1 ansi2knr.c lrzszbug.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = gtar GZIP_ENV = --best SOURCES = $(lrz_SOURCES) $(lsz_SOURCES) OBJECTS = $(lrz_OBJECTS) $(lsz_OBJECTS) all: all-redirect .SUFFIXES: .SUFFIXES: .S .c .o .s $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status lrzszbug: $(top_builddir)/config.status lrzszbug.in cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status mostlyclean-binPROGRAMS: clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) distclean-binPROGRAMS: maintainer-clean-binPROGRAMS: install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(bindir) @list='$(bin_PROGRAMS)'; for p in $$list; do \ if test -f $$p; then \ echo " $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \ $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) list='$(bin_PROGRAMS)'; for p in $$list; do \ rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ done .c.o: $(COMPILE) -c $< .s.o: $(COMPILE) -c $< .S.o: $(COMPILE) -c $< mostlyclean-compile: -rm -f *.o core *.core clean-compile: distclean-compile: -rm -f *.tab.c maintainer-clean-compile: mostlyclean-krextra: clean-krextra: -rm -f ansi2knr distclean-krextra: maintainer-clean-krextra: ansi2knr: ansi2knr.o $(LINK) ansi2knr.o $(LIBS) ansi2knr.o: $(CONFIG_HEADER) mostlyclean-kr: -rm -f *_.c clean-kr: distclean-kr: maintainer-clean-kr: lrz: $(lrz_OBJECTS) $(lrz_DEPENDENCIES) @rm -f lrz $(LINK) $(lrz_LDFLAGS) $(lrz_OBJECTS) $(lrz_LDADD) $(LIBS) lsz: $(lsz_OBJECTS) $(lsz_DEPENDENCIES) @rm -f lsz $(LINK) $(lsz_LDFLAGS) $(lsz_OBJECTS) $(lsz_LDADD) $(LIBS) canit_.c: canit.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/canit.c; then echo $(srcdir)/canit.c; else echo canit.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > canit_.c crctab_.c: crctab.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/crctab.c; then echo $(srcdir)/crctab.c; else echo crctab.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > crctab_.c lrz_.c: lrz.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/lrz.c; then echo $(srcdir)/lrz.c; else echo lrz.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > lrz_.c lsyslog_.c: lsyslog.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/lsyslog.c; then echo $(srcdir)/lsyslog.c; else echo lsyslog.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > lsyslog_.c lsz_.c: lsz.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/lsz.c; then echo $(srcdir)/lsz.c; else echo lsz.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > lsz_.c protname_.c: protname.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/protname.c; then echo $(srcdir)/protname.c; else echo protname.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > protname_.c rbsb_.c: rbsb.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/rbsb.c; then echo $(srcdir)/rbsb.c; else echo rbsb.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > rbsb_.c tcp_.c: tcp.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/tcp.c; then echo $(srcdir)/tcp.c; else echo tcp.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > tcp_.c timing_.c: timing.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/timing.c; then echo $(srcdir)/timing.c; else echo timing.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > timing_.c zm_.c: zm.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/zm.c; then echo $(srcdir)/zm.c; else echo zm.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > zm_.c zperr_.c: zperr.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/zperr.c; then echo $(srcdir)/zperr.c; else echo zperr.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > zperr_.c zreadline_.c: zreadline.c $(ANSI2KNR) $(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/zreadline.c; then echo $(srcdir)/zreadline.c; else echo zreadline.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > zreadline_.c canit_.o crctab_.o lrz_.o lsyslog_.o lsz_.o protname_.o rbsb_.o tcp_.o \ timing_.o zm_.o zperr_.o zreadline_.o : $(ANSI2KNR) tags: TAGS ID: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ here=`pwd` && cd $(srcdir) \ && mkid -f$$here/ID $$unique $(LISP) TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS)'; \ unique=`for i in $$list; do echo $$i; done | \ awk ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) mostlyclean-tags: clean-tags: distclean-tags: -rm -f TAGS ID maintainer-clean-tags: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = src distdir: $(DISTFILES) @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done canit.o: canit.c zglobal.h ../config.h ../lib/getopt.h zmodem.h crctab.o: crctab.c lrz.o: lrz.c zglobal.h ../config.h ../lib/getopt.h zmodem.h timing.h \ ../lib/long-options.h ../lib/xstrtoul.h ../lib/xstrtol.h \ ../lib/error.h lsyslog.o: lsyslog.c ../config.h zglobal.h ../lib/getopt.h zmodem.h lsz.o: lsz.c zglobal.h ../config.h ../lib/getopt.h zmodem.h timing.h \ ../lib/long-options.h ../lib/xstrtoul.h ../lib/xstrtol.h \ ../lib/error.h protname.o: protname.c zglobal.h ../config.h ../lib/getopt.h zmodem.h rbsb.o: rbsb.c zglobal.h ../config.h ../lib/getopt.h zmodem.h tcp.o: tcp.c ../config.h zglobal.h ../lib/getopt.h zmodem.h \ ../lib/error.h timing.o: timing.c zglobal.h ../config.h ../lib/getopt.h zmodem.h \ timing.h zm.o: zm.c zglobal.h ../config.h ../lib/getopt.h zmodem.h zperr.o: zperr.c zglobal.h ../config.h ../lib/getopt.h zmodem.h zreadline.o: zreadline.c zglobal.h ../config.h ../lib/getopt.h zmodem.h \ ../lib/error.h info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-binPROGRAMS install-exec-local install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall-binPROGRAMS uninstall-local uninstall: uninstall-am all-am: Makefile $(ANSI2KNR) $(PROGRAMS) $(HEADERS) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install installdirs: $(mkinstalldirs) $(DESTDIR)$(bindir) mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-compile \ mostlyclean-krextra mostlyclean-kr mostlyclean-tags \ mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-binPROGRAMS clean-compile clean-krextra clean-kr \ clean-tags clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-binPROGRAMS distclean-compile distclean-krextra \ distclean-kr distclean-tags distclean-generic clean-am distclean: distclean-am maintainer-clean-am: maintainer-clean-binPROGRAMS \ maintainer-clean-compile maintainer-clean-krextra \ maintainer-clean-kr maintainer-clean-tags \ maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \ maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \ mostlyclean-compile distclean-compile clean-compile \ maintainer-clean-compile mostlyclean-krextra distclean-krextra \ clean-krextra maintainer-clean-krextra mostlyclean-kr distclean-kr \ clean-kr maintainer-clean-kr tags mostlyclean-tags distclean-tags \ clean-tags maintainer-clean-tags distdir info-am info dvi-am dvi check \ check-am installcheck-am installcheck install-exec-local \ install-exec-am install-exec install-data-am install-data install-am \ install uninstall-local uninstall-am uninstall all-redirect all-am all \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean install-exec-local: rm -f $(DESTDIR)/$(bindir)/`echo lsb | sed -e '$(transform)'` ln $(DESTDIR)/$(bindir)/`echo lsz |sed -e '$(transform)'` \ $(DESTDIR)/$(bindir)/`echo lsb |sed -e '$(transform)'` rm -f $(bindir)/`echo lsx | sed -e '$(transform)'` ln $(DESTDIR)/$(bindir)/`echo lsz |sed -e '$(transform)'` \ $(DESTDIR)/$(bindir)/`echo lsx |sed -e '$(transform)'` rm -f $(bindir)/`echo lrb | sed -e '$(transform)'` ln $(DESTDIR)/$(bindir)/`echo lrz |sed -e '$(transform)'` \ $(DESTDIR)/$(bindir)/`echo lrb |sed -e '$(transform)'` rm -f $(bindir)/`echo lrx | sed -e '$(transform)'` ln $(DESTDIR)/$(bindir)/`echo lrz |sed -e '$(transform)'` \ $(DESTDIR)/$(bindir)/`echo lrx |sed -e '$(transform)'` # rm -f $(bindir)/`echo lrzszbug | sed -e '$(transform)'` # ln $(bindir)/`echo lrzszbug |sed -e '$(transform)'` \ # $(bindir)/`echo lrzszbug |sed -e '$(transform)'` uninstall-local: rm -f $(DESTDIR)/$(bindir)/`echo lsb |sed -e '$(transform)'` rm -f $(DESTDIR)/$(bindir)/`echo lsx |sed -e '$(transform)'` rm -f $(DESTDIR)/$(bindir)/`echo lrb |sed -e '$(transform)'` rm -f $(DESTDIR)/$(bindir)/`echo lrx |sed -e '$(transform)'` # rm -f $(bindir)/`echo lrzszbug |sed -e '$(transform)'` # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lrzsz-0.12.21rc/src/Makefile.am 644 764 764 3564 6642121006 11307 bin_PROGRAMS=lrz lsz lrz_SOURCES=lrz.c timing.c zperr.c zreadline.c crctab.c rbsb.c zm.c protname.c tcp.c lsyslog.c canit.c lsz_SOURCES=lsz.c timing.c zperr.c zreadline.c crctab.c rbsb.c zm.c protname.c tcp.c lsyslog.c canit.c noinst_HEADERS = timing.h zglobal.h zmodem.h datadir = $(prefix)/@DATADIRNAME@ localedir = $(datadir)/locale CFLAGS=@CFLAGS@ DISTCLEAN_FILES=lrzszbug LDADD = ../lib/libzmodem.a @INTLLIBS@ AUTOMAKE_OPTIONS=ansi2knr EXTRA_DIST = ansi2knr.1 ansi2knr.c lrzszbug.in INCLUDES = -I.. -I$(srcdir) -I$(top_srcdir)/src -I../intl -I$(top_srcdir)/lib #DEFS = -DLOCALEDIR=\"$(localedir)\" -DOS=\"@host_os@\" -DCPU=\"@host_cpu@\" DEFS = -DNFGVMIN @DEFS@ -DLOCALEDIR=\"$(localedir)\" install-exec-local: rm -f $(DESTDIR)/$(bindir)/`echo lsb | sed -e '$(transform)'` ln $(DESTDIR)/$(bindir)/`echo lsz |sed -e '$(transform)'` \ $(DESTDIR)/$(bindir)/`echo lsb |sed -e '$(transform)'` rm -f $(bindir)/`echo lsx | sed -e '$(transform)'` ln $(DESTDIR)/$(bindir)/`echo lsz |sed -e '$(transform)'` \ $(DESTDIR)/$(bindir)/`echo lsx |sed -e '$(transform)'` rm -f $(bindir)/`echo lrb | sed -e '$(transform)'` ln $(DESTDIR)/$(bindir)/`echo lrz |sed -e '$(transform)'` \ $(DESTDIR)/$(bindir)/`echo lrb |sed -e '$(transform)'` rm -f $(bindir)/`echo lrx | sed -e '$(transform)'` ln $(DESTDIR)/$(bindir)/`echo lrz |sed -e '$(transform)'` \ $(DESTDIR)/$(bindir)/`echo lrx |sed -e '$(transform)'` # rm -f $(bindir)/`echo lrzszbug | sed -e '$(transform)'` # ln $(bindir)/`echo lrzszbug |sed -e '$(transform)'` \ # $(bindir)/`echo lrzszbug |sed -e '$(transform)'` uninstall-local: rm -f $(DESTDIR)/$(bindir)/`echo lsb |sed -e '$(transform)'` rm -f $(DESTDIR)/$(bindir)/`echo lsx |sed -e '$(transform)'` rm -f $(DESTDIR)/$(bindir)/`echo lrb |sed -e '$(transform)'` rm -f $(DESTDIR)/$(bindir)/`echo lrx |sed -e '$(transform)'` # rm -f $(bindir)/`echo lrzszbug |sed -e '$(transform)'` lrzsz-0.12.21rc/src/ansi2knr.1 644 764 764 2771 6520013452 11063 .TH ANSI2KNR 1 "19 Jan 1996" .SH NAME ansi2knr \- convert ANSI C to Kernighan & Ritchie C .SH SYNOPSIS .I ansi2knr [--varargs] input_file [output_file] .SH DESCRIPTION If no output_file is supplied, output goes to stdout. .br There are no error messages. .sp .I ansi2knr recognizes function definitions by seeing a non-keyword identifier at the left margin, followed by a left parenthesis, with a right parenthesis as the last character on the line, and with a left brace as the first token on the following line (ignoring possible intervening comments). It will recognize a multi-line header provided that no intervening line ends with a left or right brace or a semicolon. These algorithms ignore whitespace and comments, except that the function name must be the first thing on the line. .sp The following constructs will confuse it: .br - Any other construct that starts at the left margin and follows the above syntax (such as a macro or function call). .br - Some macros that tinker with the syntax of the function header. .sp The --varargs switch is obsolete, and is recognized only for backwards compatibility. The present version of .I ansi2knr will always attempt to convert a ... argument to va_alist and va_dcl. .SH AUTHOR L. Peter Deutsch wrote the original ansi2knr and continues to maintain the current version; most of the code in the current version is his work. ansi2knr also includes contributions by Francois Pinard and Jim Avera . lrzsz-0.12.21rc/src/ansi2knr.c 644 764 764 36402 6641455657 11210 /* Copyright (C) 1989, 1997 Aladdin Enterprises. All rights reserved. */ /* hacked up by uo to get around automake-1.3-problem */ /*$Id: ansi2knr.c,v 1.5 1998/12/27 16:09:19 uwe Exp $*/ /* Convert ANSI C function definitions to K&R ("traditional C") syntax */ /* ansi2knr is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY. No author or distributor accepts responsibility to anyone for the consequences of using it or for whether it serves any particular purpose or works at all, unless he says so in writing. Refer to the GNU General Public License (the "GPL") for full details. Everyone is granted permission to copy, modify and redistribute ansi2knr, but only under the conditions described in the GPL. A copy of this license is supposed to have been given to you along with ansi2knr so you can know your rights and responsibilities. It should be in a file named COPYLEFT, or, if there is no file named COPYLEFT, a file named COPYING. Among other things, the copyright notice and this notice must be preserved on all copies. We explicitly state here what we believe is already implied by the GPL: if the ansi2knr program is distributed as a separate set of sources and a separate executable file which are aggregated on a storage medium together with another program, this in itself does not bring the other program under the GPL, nor does the mere fact that such a program or the procedures for constructing it invoke the ansi2knr executable bring any other part of the program under the GPL. */ /* * ----- not valid at the moment -- uwe ------ * Usage: ansi2knr [--filename FILENAME] [INPUT_FILE [OUTPUT_FILE]] * --filename provides the file name for the #line directive in the output, * overriding input_file (if present). * If no input_file is supplied, input is read from stdin. * If no output_file is supplied, output goes to stdout. * There are no error messages. * * ansi2knr recognizes function definitions by seeing a non-keyword * identifier at the left margin, followed by a left parenthesis, * with a right parenthesis as the last character on the line, * and with a left brace as the first token on the following line * (ignoring possible intervening comments). * It will recognize a multi-line header provided that no intervening * line ends with a left or right brace or a semicolon. * These algorithms ignore whitespace and comments, except that * the function name must be the first thing on the line. * The following constructs will confuse it: * - Any other construct that starts at the left margin and * follows the above syntax (such as a macro or function call). * - Some macros that tinker with the syntax of the function header. */ /* * The original and principal author of ansi2knr is L. Peter Deutsch * . Other authors are noted in the change history * that follows (in reverse chronological order): lpd 97-12-08 made input_file optional; only closes input and/or output file if not stdin or stdout respectively; prints usage message on stderr rather than stdout; adds --filename switch (changes suggested by ) lpd 96-01-21 added code to cope with not HAVE_CONFIG_H and with compilers that don't understand void, as suggested by Tom Lane lpd 96-01-15 changed to require that the first non-comment token on the line following a function header be a left brace, to reduce sensitivity to macros, as suggested by Tom Lane lpd 95-06-22 removed #ifndefs whose sole purpose was to define undefined preprocessor symbols as 0; changed all #ifdefs for configuration symbols to #ifs lpd 95-04-05 changed copyright notice to make it clear that including ansi2knr in a program does not bring the entire program under the GPL lpd 94-12-18 added conditionals for systems where ctype macros don't handle 8-bit characters properly, suggested by Francois Pinard ; removed --varargs switch (this is now the default) lpd 94-10-10 removed CONFIG_BROKETS conditional lpd 94-07-16 added some conditionals to help GNU `configure', suggested by Francois Pinard ; properly erase prototype args in function parameters, contributed by Jim Avera ; correct error in writeblanks (it shouldn't erase EOLs) lpd 89-xx-xx original version */ /* Most of the conditionals here are to make ansi2knr work with */ /* or without the GNU configure machinery. */ #if HAVE_CONFIG_H # include #endif #include #include #if HAVE_CONFIG_H /* For properly autoconfiguring ansi2knr, use AC_CONFIG_HEADER(config.h). This will define HAVE_CONFIG_H and so, activate the following lines. */ # if STDC_HEADERS || HAVE_STRING_H # include # else # include # endif #else /* not HAVE_CONFIG_H */ /* Otherwise do it the hard way */ # ifdef BSD # include # else # ifdef VMS extern int strlen(), strncmp(); # else # include # endif # endif #endif /* not HAVE_CONFIG_H */ #if STDC_HEADERS # include #else /* malloc and free should be declared in stdlib.h, but if you've got a K&R compiler, they probably aren't. */ # ifdef MSDOS # include # else # ifdef VMS extern char *malloc(); extern void free(); # else extern char *malloc(); extern int free(); # endif # endif #endif /* * The ctype macros don't always handle 8-bit characters correctly. * Compensate for this here. */ #ifdef isascii # undef HAVE_ISASCII /* just in case */ # define HAVE_ISASCII 1 #else #endif #if STDC_HEADERS || !HAVE_ISASCII # define is_ascii(c) 1 #else # define is_ascii(c) isascii(c) #endif #define is_space(c) (is_ascii(c) && isspace(c)) #define is_alpha(c) (is_ascii(c) && isalpha(c)) #define is_alnum(c) (is_ascii(c) && isalnum(c)) /* Scanning macros */ #define isidchar(ch) (is_alnum(ch) || (ch) == '_') #define isidfirstchar(ch) (is_alpha(ch) || (ch) == '_') /* Forward references */ char *skipspace(); int writeblanks(); int test1(); int convert1(); /* The main program */ int main(argc, argv) int argc; char *argv[]; { FILE *in = stdin; FILE *out = stdout; char *filename = 0; #define bufsize 5000 /* arbitrary size */ char *buf; char *line; char *more; char *usage = "Usage: ansi2knr [--filename FILENAME] [INPUT_FILE [OUTPUT_FILE]]\n"; /* * In previous versions, ansi2knr recognized a --varargs switch. * If this switch was supplied, ansi2knr would attempt to convert * a ... argument to va_alist and va_dcl; if this switch was not * supplied, ansi2knr would simply drop any such arguments. * Now, ansi2knr always does this conversion, and we only * check for this switch for backward compatibility. */ int convert_varargs = 0; while ( argc > 1 && argv[1][0] == '-' ) { if ( !strcmp(argv[1], "--varargs") ) { convert_varargs = 1; argc--; argv++; continue; } if ( !strcmp(argv[1], "--filename") && argc > 2 ) { filename = argv[2]; argc -= 2; argv += 2; continue; } fprintf(stderr, "Unrecognized switch: %s\n", argv[1]); fprintf(stderr, usage); exit(1); } switch ( argc ) { default: fprintf(stderr, usage); exit(0); case 2: out = fopen(argv[1], "w"); if ( out == NULL ) { fprintf(stderr, "Cannot open output file %s\n", argv[2]); exit(1); } /* falls through */ case 1: break; } if ( filename ) fprintf(out, "#line 1 \"%s\"\n", filename); buf = malloc(bufsize); line = buf; while ( fgets(line, (unsigned)(buf + bufsize - line), in) != NULL ) { test: line += strlen(line); switch ( test1(buf) ) { case 2: /* a function header */ convert1(buf, out, 1, convert_varargs); break; case 1: /* a function */ /* Check for a { at the start of the next line. */ more = ++line; f: if ( line >= buf + (bufsize - 1) ) /* overflow check */ goto wl; if ( fgets(line, (unsigned)(buf + bufsize - line), in) == NULL ) goto wl; switch ( *skipspace(more, 1) ) { case '{': /* Definitely a function header. */ convert1(buf, out, 0, convert_varargs); fputs(more, out); break; case 0: /* The next line was blank or a comment: */ /* keep scanning for a non-comment. */ line += strlen(line); goto f; default: /* buf isn't a function header, but */ /* more might be. */ fputs(buf, out); strcpy(buf, more); line = buf; goto test; } break; case -1: /* maybe the start of a function */ if ( line != buf + (bufsize - 1) ) /* overflow check */ continue; /* falls through */ default: /* not a function */ wl: fputs(buf, out); break; } line = buf; } if ( line != buf ) fputs(buf, out); free(buf); if ( out != stdout ) fclose(out); if ( in != stdin ) fclose(in); return 0; } /* Skip over space and comments, in either direction. */ char * skipspace(p, dir) register char *p; register int dir; /* 1 for forward, -1 for backward */ { for ( ; ; ) { while ( is_space(*p) ) p += dir; if ( !(*p == '/' && p[dir] == '*') ) break; p += dir; p += dir; while ( !(*p == '*' && p[dir] == '/') ) { if ( *p == 0 ) return p; /* multi-line comment?? */ p += dir; } p += dir; p += dir; } return p; } /* * Write blanks over part of a string. * Don't overwrite end-of-line characters. */ int writeblanks(start, end) char *start; char *end; { char *p; for ( p = start; p < end; p++ ) if ( *p != '\r' && *p != '\n' ) *p = ' '; return 0; } /* * Test whether the string in buf is a function definition. * The string may contain and/or end with a newline. * Return as follows: * 0 - definitely not a function definition; * 1 - definitely a function definition; * 2 - definitely a function prototype (NOT USED); * -1 - may be the beginning of a function definition, * append another line and look again. * The reason we don't attempt to convert function prototypes is that * Ghostscript's declaration-generating macros look too much like * prototypes, and confuse the algorithms. */ int test1(buf) char *buf; { register char *p = buf; char *bend; char *endfn; int contin; if ( !isidfirstchar(*p) ) return 0; /* no name at left margin */ bend = skipspace(buf + strlen(buf) - 1, -1); switch ( *bend ) { case ';': contin = 0 /*2*/; break; case ')': contin = 1; break; case '{': return 0; /* not a function */ case '}': return 0; /* not a function */ default: contin = -1; } while ( isidchar(*p) ) p++; endfn = p; p = skipspace(p, 1); if ( *p++ != '(' ) return 0; /* not a function */ p = skipspace(p, 1); if ( *p == ')' ) return 0; /* no parameters */ /* Check that the apparent function name isn't a keyword. */ /* We only need to check for keywords that could be followed */ /* by a left parenthesis (which, unfortunately, is most of them). */ { static char *words[] = { "asm", "auto", "case", "char", "const", "double", "extern", "float", "for", "if", "int", "long", "register", "return", "short", "signed", "sizeof", "static", "switch", "typedef", "unsigned", "void", "volatile", "while", 0 }; char **key = words; char *kp; int len = endfn - buf; while ( (kp = *key) != 0 ) { if ( strlen(kp) == len && !strncmp(kp, buf, len) ) return 0; /* name is a keyword */ key++; } } return contin; } /* Convert a recognized function definition or header to K&R syntax. */ int convert1(buf, out, header, convert_varargs) char *buf; FILE *out; int header; /* Boolean */ int convert_varargs; /* Boolean */ { char *endfn; register char *p; /* * The breaks table contains pointers to the beginning and end * of each argument. */ char **breaks; unsigned num_breaks = 2; /* for testing */ char **btop; char **bp; char **ap; char *vararg = 0; /* Pre-ANSI implementations don't agree on whether strchr */ /* is called strchr or index, so we open-code it here. */ for ( endfn = buf; *(endfn++) != '('; ) ; top: p = endfn; breaks = (char **)malloc(sizeof(char *) * num_breaks * 2); if ( breaks == 0 ) { /* Couldn't allocate break table, give up */ fprintf(stderr, "Unable to allocate break table!\n"); fputs(buf, out); return -1; } btop = breaks + num_breaks * 2 - 2; bp = breaks; /* Parse the argument list */ do { int level = 0; char *lp = NULL; char *rp; char *end = NULL; if ( bp >= btop ) { /* Filled up break table. */ /* Allocate a bigger one and start over. */ free((char *)breaks); num_breaks <<= 1; goto top; } *bp++ = p; /* Find the end of the argument */ for ( ; end == NULL; p++ ) { switch(*p) { case ',': if ( !level ) end = p; break; case '(': if ( !level ) lp = p; level++; break; case ')': if ( --level < 0 ) end = p; else rp = p; break; case '/': p = skipspace(p, 1) - 1; break; default: ; } } /* Erase any embedded prototype parameters. */ if ( lp ) writeblanks(lp + 1, rp); p--; /* back up over terminator */ /* Find the name being declared. */ /* This is complicated because of procedure and */ /* array modifiers. */ for ( ; ; ) { p = skipspace(p - 1, -1); switch ( *p ) { case ']': /* skip array dimension(s) */ case ')': /* skip procedure args OR name */ { int level = 1; while ( level ) switch ( *--p ) { case ']': case ')': level++; break; case '[': case '(': level--; break; case '/': p = skipspace(p, -1) + 1; break; default: ; } } if ( *p == '(' && *skipspace(p + 1, 1) == '*' ) { /* We found the name being declared */ while ( !isidfirstchar(*p) ) p = skipspace(p, 1) + 1; goto found; } break; default: goto found; } } found: if ( *p == '.' && p[-1] == '.' && p[-2] == '.' ) { if ( convert_varargs ) { *bp++ = "va_alist"; vararg = p-2; } else { p++; if ( bp == breaks + 1 ) /* sole argument */ writeblanks(breaks[0], p); else writeblanks(bp[-1] - 1, p); bp--; } } else { while ( isidchar(*p) ) p--; *bp++ = p+1; } p = end; } while ( *p++ == ',' ); *bp = p; /* Make a special check for 'void' arglist */ if ( bp == breaks+2 ) { p = skipspace(breaks[0], 1); if ( !strncmp(p, "void", 4) ) { p = skipspace(p+4, 1); if ( p == breaks[2] - 1 ) { bp = breaks; /* yup, pretend arglist is empty */ writeblanks(breaks[0], p + 1); } } } /* Put out the function name and left parenthesis. */ p = buf; while ( p != endfn ) putc(*p, out), p++; /* Put out the declaration. */ if ( header ) { fputs(");", out); for ( p = breaks[0]; *p; p++ ) if ( *p == '\r' || *p == '\n' ) putc(*p, out); } else { for ( ap = breaks+1; ap < bp; ap += 2 ) { p = *ap; while ( isidchar(*p) ) putc(*p, out), p++; if ( ap < bp - 1 ) fputs(", ", out); } fputs(") ", out); /* Put out the argument declarations */ for ( ap = breaks+2; ap <= bp; ap += 2 ) (*ap)[-1] = ';'; if ( vararg != 0 ) { *vararg = 0; fputs(breaks[0], out); /* any prior args */ fputs("va_dcl", out); /* the final arg */ fputs(bp[0], out); } else fputs(breaks[0], out); } free((char *)breaks); return 0; } lrzsz-0.12.21rc/src/lrzszbug.in 777 764 764 14034 6607440604 11517 #! /bin/sh # # lrzszbug - create a bug report and mail it to the bug address. # # configuration section: # these variables are filled in by configure # VERSION="@VERSION@" BUGGLIBC="bugs@bulkmail.ohse.de" PATH=$PATH:/bin:/usr/bin:/usr/local/bin export PATH TEMP=/tmp/lrzszbug.$$ BUGADDR=${1-$BUGGLIBC} ENVIRONMENT=`uname -a` : ${EDITOR=emacs} : ${USER=${LOGNAME-`whoami`}} trap 'rm -f $TEMP $TEMP.x; exit 1' 1 2 3 13 15 trap 'rm -f $TEMP $TEMP.x' 0 # How to read the passwd database. PASSWD="cat /etc/passwd" if [ -f /usr/lib/sendmail ] ; then MAIL_AGENT="/usr/lib/sendmail -oi -t" elif [ -f /usr/sbin/sendmail ] ; then MAIL_AGENT="/usr/sbin/sendmail -oi -t" else MAIL_AGENT=rmail fi # Figure out how to echo a string without a trailing newline N=`echo 'hi there\c'` case "$N" in *c) ECHON1='echo -n' ECHON2= ;; *) ECHON1=echo ECHON2='\c' ;; esac # Find out the name of the originator of this PR. if [ -n "$NAME" ]; then ORIGINATOR="$NAME" elif [ -f $HOME/.fullname ]; then ORIGINATOR="`sed -e '1q' $HOME/.fullname`" else # Must use temp file due to incompatibilities in quoting behavior # and to protect shell metacharacters in the expansion of $LOGNAME $PASSWD | grep "^$LOGNAME:" | awk -F: '{print $5}' | sed -e 's/,.*//' > $TEMP ORIGINATOR="`cat $TEMP`" rm -f $TEMP fi if [ -n "$ORGANIZATION" ]; then if [ -f "$ORGANIZATION" ]; then ORGANIZATION="`cat $ORGANIZATION`" fi else if [ -f $HOME/.organization ]; then ORGANIZATION="`cat $HOME/.organization`" elif [ -f $HOME/.signature ]; then ORGANIZATION=`sed -e "s/^/ /" $HOME/.signature; echo ">"` fi fi # If they don't have a preferred editor set, then use if [ -z "$VISUAL" ]; then if [ -z "$EDITOR" ]; then EDIT=vi else EDIT="$EDITOR" fi else EDIT="$VISUAL" fi # Find out some information. SYSTEM=`( [ -f /bin/uname ] && /bin/uname -a ) || \ ( [ -f /usr/bin/uname ] && /usr/bin/uname -a ) || echo ""` ARCH=`[ -f /bin/arch ] && /bin/arch` MACHINE=`[ -f /bin/machine ] && /bin/machine` ORGANIZATION_C='' SYNOPSIS_C='' SEVERITY_C='<[ non-critical | serious | critical ] (one line)>' PRIORITY_C='<[ low | medium | high ] (one line)>' CLASS_C='<[ sw-bug | doc-bug | change-request | support ] (one line)>' RELEASE_C='' ENVIRONMENT_C='' DESCRIPTION_C='' HOW_TO_REPEAT_C='' FIX_C='' cat > $TEMP <'). SEND-PR: From: ${USER} To: ${BUGADDR} Subject: lrzsz: [50 character or so descriptive subject here (for reference)] >Submitter-Id: net >Originator: ${ORIGINATOR} >Organization: ${ORGANIZATION- $ORGANIZATION_C} >Confidential: no >Synopsis: $SYNOPSIS_C >Severity: $SEVERITY_C >Priority: $PRIORITY_C >Category: lrzsz >Class: $CLASS_C >Release: lrzsz-${VERSION} >Environment: $ENVIRONMENT_C `[ -n "$SYSTEM" ] && echo System: $SYSTEM` `[ -n "$ARCH" ] && echo Architecture: $ARCH` `[ -n "$MACHINE" ] && echo Machine: $MACHINE` `[ -f "lrz" ] && echo " include, if possible, the output of 'ldd lrz'"` `[ -f "src/lrz" ] && echo " include, if possible, the output of 'ldd src/lrz'"` `[ -f "lrzsz-@VERSION@/src/lrz" ] && echo " include, if possible, the output of 'ldd lrzsz-@VERSION@/src/lrz'"` >Description: $DESCRIPTION_C >How-To-Repeat: $HOW_TO_REPEAT_C >Fix: $FIX_C EOF chmod u+w $TEMP cp $TEMP $TEMP.x eval $EDIT $TEMP if cmp -s $TEMP $TEMP.x; then echo "File not changed, no bug report submitted." exit 1 fi # # Check the enumeration fields # This is a "sed-subroutine" with one keyword parameter # (with workaround for Sun sed bug) # SED_CMD=' /$PATTERN/{ s||| s|<.*>|| s|^[ ]*|| s|[ ]*$|| p q }' while :; do CNT=0 # # 1) Severity # PATTERN=">Severity:" SEVERITY=`eval sed -n -e "\"$SED_CMD\"" $TEMP` case "$SEVERITY" in ""|non-critical|serious|critical) CNT=`expr $CNT + 1` ;; *) echo "$COMMAND: \`$SEVERITY' is not a valid value for \`Severity'." esac # # 2) Priority # PATTERN=">Priority:" PRIORITY=`eval sed -n -e "\"$SED_CMD\"" $TEMP` case "$PRIORITY" in ""|low|medium|high) CNT=`expr $CNT + 1` ;; *) echo "$COMMAND: \`$PRIORITY' is not a valid value for \`Priority'." esac # # 3) Class # PATTERN=">Class:" CLASS=`eval sed -n -e "\"$SED_CMD\"" $TEMP` case "$CLASS" in ""|sw-bug|doc-bug|change-request|support) CNT=`expr $CNT + 1` ;; *) echo "$COMMAND: \`$CLASS' is not a valid value for \`Class'." esac [ $CNT -lt 3 ] && echo "Errors were found with the problem report." while :; do $ECHON1 "a)bort, e)dit or s)end? $ECHON2" read input case "$input" in a*) echo "$COMMAND: problem report saved in $HOME/dead.lrzszbug." cat $TEMP >> $HOME/dead.lrzszbug xs=1; exit ;; e*) eval $EDIT $TEMP continue 2 ;; s*) break 2 ;; esac done done # # Remove comments and send the problem report # (we have to use patterns, where the comment contains regex chars) # # /^>Originator:/s;$ORIGINATOR;; sed -e " /^SEND-PR:/d /^>Organization:/,/^>[A-Za-z-]*:/s;$ORGANIZATION_C;; /^>Confidential:/s;<.*>;; /^>Synopsis:/s;$SYNOPSIS_C;; /^>Severity:/s;<.*>;; /^>Priority:/s;<.*>;; /^>Class:/s;<.*>;; /^>Release:/,/^>[A-Za-z-]*:/s;$RELEASE_C;; /^>Environment:/,/^>[A-Za-z-]*:/s;$ENVIRONMENT_C;; /^>Description:/,/^>[A-Za-z-]*:/s;$DESCRIPTION_C;; /^>How-To-Repeat:/,/^>[A-Za-z-]*:/s;$HOW_TO_REPEAT_C;; /^>Fix:/,/^>[A-Za-z-]*:/s;$FIX_C;; " $TEMP > $TEMP.x if $MAIL_AGENT < $TEMP.x; then echo "$COMMAND: problem report sent" xs=0; exit else echo "$COMMAND: mysterious mail failure, report not sent." echo "$COMMAND: problem report saved in $HOME/dead.lrzszbug." cat $TEMP >> $HOME/dead.lrzszbug fi exit 0 lrzsz-0.12.21rc/src/lrz.c 644 764 764 153555 6730777410 10312 /* lrz - receive files with x/y/zmodem Copyright (C) until 1988 Chuck Forsberg (Omen Technology INC) Copyright (C) 1994 Matt Porter, Michael D. Black 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. originally written by Chuck Forsberg */ #include "zglobal.h" #define SS_NORMAL 0 #include #include #include #include #include #include #ifdef HAVE_UTIME_H #include #endif #include "timing.h" #include "long-options.h" #include "xstrtoul.h" #include "error.h" #ifndef STRICT_PROTOTYPES extern time_t time(); extern char *strerror(); extern char *strstr(); #endif #ifndef HAVE_ERRNO_DECLARATION extern int errno; #endif #define MAX_BLOCK 8192 /* * Max value for HOWMANY is 255 if NFGVMIN is not defined. * A larger value reduces system overhead but may evoke kernel bugs. * 133 corresponds to an XMODEM/CRC sector */ #ifndef HOWMANY #ifdef NFGVMIN #define HOWMANY MAX_BLOCK #else #define HOWMANY 255 #endif #endif unsigned Baudrate = 2400; FILE *fout; int Lastrx; int Crcflg; int Firstsec; int errors; int Restricted=1; /* restricted; no /.. or ../ in filenames */ int Readnum = HOWMANY; /* Number of bytes to ask for in read() from modem */ int skip_if_not_found; char *Pathname; const char *program_name; /* the name by which we were called */ int Topipe=0; int MakeLCPathname=TRUE; /* make received pathname lower case */ int Verbose=0; int Quiet=0; /* overrides logic that would otherwise set verbose */ int Nflag = 0; /* Don't really transfer files */ int Rxclob=FALSE; /* Clobber existing file */ int Rxbinary=FALSE; /* receive all files in bin mode */ int Rxascii=FALSE; /* receive files in ascii (translate) mode */ int Thisbinary; /* current file is to be received in bin mode */ int try_resume=FALSE; int allow_remote_commands=FALSE; int junk_path=FALSE; int no_timeout=FALSE; enum zm_type_enum protocol; int under_rsh=FALSE; int zmodem_requested=FALSE; #ifdef SEGMENTS static int chinseg = 0; /* Number of characters received in this data seg */ #endif static char *secbuf; #ifdef ENABLE_TIMESYNC static int timesync_flag=0; static int in_timesync=0; #endif int tcp_socket=-1; int tcp_flag=0; char *tcp_server_address=NULL; #if defined(F_GETFD) && defined(F_SETFD) && defined(O_SYNC) static int o_sync = 0; #endif static int rzfiles __P ((struct zm_fileinfo *)); static int tryz __P ((void)); static void checkpath __P ((const char *name)); static void chkinvok __P ((const char *s)); static void report __P ((int sct)); static void uncaps __P ((char *s)); static int IsAnyLower __P ((const char *s)); static int putsec __P ((struct zm_fileinfo *zi, char *buf, size_t n)); static int make_dirs __P ((char *pathname)); static int procheader __P ((char *name, struct zm_fileinfo *)); static int wcgetsec __P ((size_t *Blklen, char *rxbuf, unsigned int maxtime)); static int wcrx __P ((struct zm_fileinfo *)); static int wcrxpn __P ((struct zm_fileinfo *, char *rpn)); static int wcreceive __P ((int argc, char **argp)); static int rzfile __P ((struct zm_fileinfo *)); static void usage __P ((int exitcode, const char *what)); static void usage1 __P ((int exitcode)); static void exec2 __P ((const char *s)); static int closeit __P ((struct zm_fileinfo *)); static void ackbibi __P ((void)); static int sys2 __P ((const char *s)); static void zmputs __P ((const char *s)); static size_t getfree __P ((void)); static long buffersize=32768; static unsigned long min_bps=0; static long min_bps_time=120; char Lzmanag; /* Local file management request */ char zconv; /* ZMODEM file conversion request */ char zmanag; /* ZMODEM file management request */ char ztrans; /* ZMODEM file transport request */ int Zctlesc; /* Encode control characters */ int Zrwindow = 1400; /* RX window size (controls garbage count) */ int tryzhdrtype=ZRINIT; /* Header type to send corresponding to Last rx close */ time_t stop_time; #ifdef ENABLE_SYSLOG # if defined(ENABLE_SYSLOG_FORCE) || defined(ENABLE_SYSLOG_DEFAULT) int enable_syslog=TRUE; # else int enable_syslog=FALSE; # endif #define DO_SYSLOG_FNAME(message) do { \ if (enable_syslog) { \ const char *shortname; \ if (!zi->fname) \ shortname="no.name"; \ else { \ shortname=strrchr(zi->fname,'/'); \ if (!shortname) \ shortname=zi->fname; \ else \ shortname++; \ } \ lsyslog message ; \ } \ } while(0) #define DO_SYSLOG(message) do { \ if (enable_syslog) { \ lsyslog message ; \ } \ } while(0) #else #define DO_SYSLOG_FNAME(message) do { } while(0) #define DO_SYSLOG(message) do { } while(0) #endif /* called by signal interrupt or terminate to clean things up */ RETSIGTYPE bibi(int n) { if (zmodem_requested) zmputs(Attn); canit(STDOUT_FILENO); io_mode(0,0); error(128+n,0,_("caught signal %d; exiting"), n); } static struct option const long_options[] = { {"append", no_argument, NULL, '+'}, {"ascii", no_argument, NULL, 'a'}, {"binary", no_argument, NULL, 'b'}, {"bufsize", required_argument, NULL, 'B'}, {"allow-commands", no_argument, NULL, 'C'}, {"allow-remote-commands", no_argument, NULL, 'C'}, {"escape", no_argument, NULL, 'e'}, {"rename", no_argument, NULL, 'E'}, {"help", no_argument, NULL, 'h'}, {"crc-check", no_argument, NULL, 'H'}, {"junk-path", no_argument, NULL, 'j'}, {"errors", required_argument, NULL, 3}, {"disable-timeouts", no_argument, NULL, 'O'}, {"disable-timeout", no_argument, NULL, 'O'}, /* i can't get it right */ {"min-bps", required_argument, NULL, 'm'}, {"min-bps-time", required_argument, NULL, 'M'}, {"newer", no_argument, NULL, 'n'}, {"newer-or-longer", no_argument, NULL, 'N'}, {"protect", no_argument, NULL, 'p'}, {"resume", no_argument, NULL, 'r'}, {"restricted", no_argument, NULL, 'R'}, {"quiet", no_argument, NULL, 'q'}, {"stop-at", required_argument, NULL, 's'}, {"timesync", no_argument, NULL, 'S'}, {"timeout", required_argument, NULL, 't'}, {"keep-uppercase", no_argument, NULL, 'u'}, {"unrestrict", no_argument, NULL, 'U'}, {"verbose", no_argument, NULL, 'v'}, {"windowsize", required_argument, NULL, 'w'}, {"with-crc", no_argument, NULL, 'c'}, {"xmodem", no_argument, NULL, 'X'}, {"ymodem", no_argument, NULL, 1}, {"zmodem", no_argument, NULL, 'Z'}, {"overwrite", no_argument, NULL, 'y'}, {"null", no_argument, NULL, 'D'}, {"syslog", optional_argument, NULL , 2}, {"delay-startup", required_argument, NULL, 4}, {"o-sync", no_argument, NULL, 5}, {"o_sync", no_argument, NULL, 5}, {"tcp-server", no_argument, NULL, 6}, {"tcp-client", required_argument, NULL, 7}, {NULL,0,NULL,0} }; static void show_version(void) { printf ("%s (GNU %s) %s\n", program_name, PACKAGE, VERSION); } int main(int argc, char *argv[]) { register char *cp; register int npats; char **patts=NULL; /* keep compiler quiet */ int exitcode=0; int c; unsigned int startup_delay=0; Rxtimeout = 100; setbuf(stderr, NULL); if ((cp=getenv("SHELL")) && (strstr(cp, "rsh") || strstr(cp, "rksh") || strstr(cp,"rbash") || strstr(cp, "rshell"))) under_rsh=TRUE; if ((cp=getenv("ZMODEM_RESTRICTED"))!=NULL) Restricted=2; /* make temporary and unfinished files */ umask(0077); from_cu(); chkinvok(argv[0]); /* if called as [-]rzCOMMAND set flag */ #ifdef ENABLE_SYSLOG openlog(program_name,LOG_PID,ENABLE_SYSLOG); #endif setlocale (LC_ALL, ""); bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); parse_long_options (argc, argv, show_version, usage1); while ((c = getopt_long (argc, argv, "a+bB:cCDeEhm:M:OprRqs:St:uUvw:XZy", long_options, (int *) 0)) != EOF) { unsigned long int tmp; char *tmpptr; enum strtol_error s_err; switch (c) { case 0: break; case '+': Lzmanag = ZF1_ZMAPND; break; case 'a': Rxascii=TRUE; break; case 'b': Rxbinary=TRUE; break; case 'B': if (strcmp(optarg,"auto")==0) buffersize=-1; else buffersize=strtol(optarg,NULL,10); break; case 'c': Crcflg=TRUE; break; case 'C': allow_remote_commands=TRUE; break; case 'D': Nflag = TRUE; break; case 'E': Lzmanag = ZF1_ZMCHNG; break; case 'e': Zctlesc = 1; break; case 'h': usage(0,NULL); break; case 'H': Lzmanag= ZF1_ZMCRC; break; case 'j': junk_path=TRUE; break; case 'm': s_err = xstrtoul (optarg, &tmpptr, 0, &tmp, "km"); min_bps = tmp; if (s_err != LONGINT_OK) STRTOL_FATAL_ERROR (optarg, _("min_bps"), s_err); break; case 'M': s_err = xstrtoul (optarg, NULL, 0, &tmp, NULL); min_bps_time = tmp; if (s_err != LONGINT_OK) STRTOL_FATAL_ERROR (optarg, _("min_bps_time"), s_err); if (min_bps_time<=1) usage(2,_("min_bps_time must be > 1")); break; case 'N': Lzmanag = ZF1_ZMNEWL; break; case 'n': Lzmanag = ZF1_ZMNEW; break; case 'O': no_timeout=TRUE; break; case 'p': Lzmanag = ZF1_ZMPROT; break; case 'q': Quiet=TRUE; Verbose=0; break; case 's': if (isdigit((unsigned char) (*optarg))) { struct tm *tm; time_t t; int hh,mm; char *nex; hh = strtoul (optarg, &nex, 10); if (hh>23) usage(2,_("hour to large (0..23)")); if (*nex!=':') usage(2, _("unparsable stop time\n")); nex++; mm = strtoul (optarg, &nex, 10); if (mm>59) usage(2,_("minute to large (0..59)")); t=time(NULL); tm=localtime(&t); tm->tm_hour=hh; tm->tm_min=hh; stop_time=mktime(tm); if (stop_time1000) usage(2,_("timeout out of range 10..1000")); break; case 'w': s_err = xstrtoul (optarg, NULL, 0, &tmp, NULL); Zrwindow = tmp; if (s_err != LONGINT_OK) STRTOL_FATAL_ERROR (optarg, _("window size"), s_err); break; case 'u': MakeLCPathname=FALSE; break; case 'U': if (!under_rsh) Restricted=0; else { DO_SYSLOG((LOG_INFO,"--unrestrict option used under restricted shell")); error(1,0, _("security violation: can't do that under restricted shell\n")); } break; case 'v': ++Verbose; break; case 'X': protocol=ZM_XMODEM; break; case 1: protocol=ZM_YMODEM; break; case 'Z': protocol=ZM_ZMODEM; break; case 'y': Rxclob=TRUE; break; case 2: #ifdef ENABLE_SYSLOG # ifndef ENABLE_SYSLOG_FORCE if (optarg && (!strcmp(optarg,"off") || !strcmp(optarg,"no"))) { if (under_rsh) error(0,0, _("cannot turnoff syslog")); else enable_syslog=FALSE; } else enable_syslog=TRUE; # else error(0,0, _("cannot turnoff syslog")); # endif #endif case 3: s_err = xstrtoul (optarg, NULL, 0, &tmp, "km"); bytes_per_error = tmp; if (s_err != LONGINT_OK) STRTOL_FATAL_ERROR (optarg, _("bytes_per_error"), s_err); if (bytes_per_error<100) usage(2,_("bytes-per-error should be >100")); break; case 4: s_err = xstrtoul (optarg, NULL, 0, &tmp, NULL); startup_delay = tmp; if (s_err != LONGINT_OK) STRTOL_FATAL_ERROR (optarg, _("startup delay"), s_err); break; case 5: #if defined(F_GETFD) && defined(F_SETFD) && defined(O_SYNC) o_sync=1; #else error(0,0, _("O_SYNC not supported by the kernel")); #endif break; case 6: tcp_flag=2; break; case 7: tcp_flag=3; tcp_server_address=(char *)strdup(optarg); if (!tcp_server_address) error(1,0,_("out of memory")); break; default: usage(2,NULL); } } if (getuid()!=geteuid()) { error(1,0, _("this program was never intended to be used setuid\n")); } #ifdef SEGMENTS secbuf=malloc(1+(SEGMENTS+1)*MAX_BLOCK); #else secbuf=malloc(MAX_BLOCK+1); #endif if (!secbuf) error(1,0,_("out of memory")); /* initialize zsendline tab */ zsendline_init(); #ifdef HAVE_SIGINTERRUPT siginterrupt(SIGALRM,1); #endif if (startup_delay) sleep(startup_delay); npats = argc - optind; patts=&argv[optind]; if (npats > 1) usage(2,_("garbage on commandline")); if (protocol!=ZM_XMODEM && npats) usage(2, _("garbage on commandline")); if (Restricted && allow_remote_commands) { allow_remote_commands=FALSE; } if (Fromcu && !Quiet) { if (Verbose == 0) Verbose = 2; } vfile("%s %s\n", program_name, VERSION); if (tcp_flag==2) { char buf[256]; #ifdef MAXHOSTNAMELEN char hn[MAXHOSTNAMELEN]; #else char hn[256]; #endif char *p,*q; int d; /* tell receiver to receive via tcp */ d=tcp_server(buf); p=strchr(buf+1,'<'); p++; q=strchr(p,'>'); *q=0; if (gethostname(hn,sizeof(hn))==-1) { error(1,0, _("hostname too long\n")); } fprintf(stdout,"connect with lrz --tcp-client \"%s:%s\"\n",hn,p); fflush(stdout); /* ok, now that this file is sent we can switch to tcp */ tcp_socket=tcp_accept(d); dup2(tcp_socket,0); dup2(tcp_socket,1); } if (tcp_flag==3) { char buf[256]; char *p; p=strchr(tcp_server_address,':'); if (!p) error(1,0, _("illegal server address\n")); *p++=0; sprintf(buf,"[%s] <%s>\n",tcp_server_address,p); fprintf(stdout,"connecting to %s\n",buf); fflush(stdout); /* we need to switch to tcp mode */ tcp_socket=tcp_connect(buf); dup2(tcp_socket,0); dup2(tcp_socket,1); } io_mode(0,1); readline_setup(0, HOWMANY, MAX_BLOCK*2); if (signal(SIGINT, bibi) == SIG_IGN) signal(SIGINT, SIG_IGN); else signal(SIGINT, bibi); signal(SIGTERM, bibi); signal(SIGPIPE, bibi); if (wcreceive(npats, patts)==ERROR) { exitcode=0200; canit(STDOUT_FILENO); } io_mode(0,0); if (exitcode && !zmodem_requested) /* bellow again with all thy might. */ canit(STDOUT_FILENO); if (Verbose) { fputs("\r\n",stderr); if (exitcode) fputs(_("Transfer incomplete\n"),stderr); else fputs(_("Transfer complete\n"),stderr); } exit(exitcode); } static void usage1(int exitcode) { usage(exitcode,NULL); } static void usage(int exitcode, const char *what) { FILE *f=stdout; if (exitcode) { if (what) fprintf(stderr, "%s: %s\n",program_name,what); fprintf (stderr, _("Try `%s --help' for more information.\n"), program_name); exit(exitcode); } fprintf(f, _("%s version %s\n"), program_name, VERSION); fprintf(f,_("Usage: %s [options] [filename.if.xmodem]\n"), program_name); fputs(_("Receive files with ZMODEM/YMODEM/XMODEM protocol\n"),f); fputs(_( " (X) = option applies to XMODEM only\n" " (Y) = option applies to YMODEM only\n" " (Z) = option applies to ZMODEM only\n" ),f); fputs(_( " -+, --append append to existing files\n" " -a, --ascii ASCII transfer (change CR/LF to LF)\n" " -b, --binary binary transfer\n" " -B, --bufsize N buffer N bytes (N==auto: buffer whole file)\n" " -c, --with-crc Use 16 bit CRC (X)\n" " -C, --allow-remote-commands allow execution of remote commands (Z)\n" " -D, --null write all received data to /dev/null\n" " --delay-startup N sleep N seconds before doing anything\n" " -e, --escape Escape control characters (Z)\n" " -E, --rename rename any files already existing\n" " --errors N generate CRC error every N bytes (debugging)\n" " -h, --help Help, print this usage message\n" " -m, --min-bps N stop transmission if BPS below N\n" " -M, --min-bps-time N for at least N seconds (default: 120)\n" " -O, --disable-timeouts disable timeout code, wait forever for data\n" " --o-sync open output file(s) in synchronous write mode\n" " -p, --protect protect existing files\n" " -q, --quiet quiet, no progress reports\n" " -r, --resume try to resume interrupted file transfer (Z)\n" " -R, --restricted restricted, more secure mode\n" " -s, --stop-at {HH:MM|+N} stop transmission at HH:MM or in N seconds\n" " -S, --timesync request remote time (twice: set local time)\n" " --syslog[=off] turn syslog on or off, if possible\n" " -t, --timeout N set timeout to N tenths of a second\n" " --tcp-server open socket, wait for connection (Z)\n" " --tcp-client ADDR:PORT open socket, connect to ... (Z)\n" " -u, --keep-uppercase keep upper case filenames\n" " -U, --unrestrict disable restricted mode (if allowed to)\n" " -v, --verbose be verbose, provide debugging information\n" " -w, --windowsize N Window is N bytes (Z)\n" " -X --xmodem use XMODEM protocol\n" " -y, --overwrite Yes, clobber existing file if any\n" " --ymodem use YMODEM protocol\n" " -Z, --zmodem use ZMODEM protocol\n" "\n" "short options use the same arguments as the long ones\n" ),f); exit(exitcode); } /* * Let's receive something already. */ static int wcreceive(int argc, char **argp) { int c; struct zm_fileinfo zi; #ifdef ENABLE_SYSLOG const char *shortname=NULL;; #endif zi.fname=NULL; zi.modtime=0; zi.mode=0; zi.bytes_total=0; zi.bytes_sent=0; zi.bytes_received=0; zi.bytes_skipped=0; zi.eof_seen=0; if (protocol!=ZM_XMODEM || argc==0) { Crcflg=1; if ( !Quiet) vstringf(_("%s waiting to receive."), program_name); if ((c=tryz())!=0) { if (c == ZCOMPL) return OK; if (c == ERROR) goto fubar; c = rzfiles(&zi); #ifdef ENABLE_SYSLOG shortname=NULL; #endif if (c) goto fubar; } else { for (;;) { if (Verbose > 1 #ifdef ENABLE_SYSLOG || enable_syslog #endif ) timing(1,NULL); #ifdef ENABLE_SYSLOG shortname=NULL; #endif if (wcrxpn(&zi,secbuf)== ERROR) goto fubar; if (secbuf[0]==0) return OK; if (procheader(secbuf, &zi) == ERROR) goto fubar; #ifdef ENABLE_SYSLOG shortname=strrchr(zi.fname,'/'); if (shortname) shortname++; else shortname=zi.fname; #endif if (wcrx(&zi)==ERROR) goto fubar; if (Verbose > 1 #ifdef ENABLE_SYSLOG || enable_syslog #endif ) { double d; long bps; d=timing(0,NULL); if (d==0) d=0.5; /* can happen if timing uses time() */ bps=(zi.bytes_received-zi.bytes_skipped)/d; if (Verbose>1) { vstringf( _("\rBytes received: %7ld/%7ld BPS:%-6ld \r\n"), (long) zi.bytes_received, (long) zi.bytes_total, bps); } #ifdef ENABLE_SYSLOG if (enable_syslog) lsyslog(LOG_INFO,"%s/%s: %ld Bytes, %ld BPS", shortname,protname(),zi.bytes_received, bps); #endif } } } } else { char dummy[128]; dummy[0]='\0'; /* pre-ANSI HPUX cc demands this */ dummy[1]='\0'; /* procheader uses name + 1 + strlen(name) */ zi.bytes_total = DEFBYTL; if (Verbose > 1 #ifdef ENABLE_SYSLOG || enable_syslog #endif ) timing(1,NULL); procheader(dummy, &zi); if (Pathname) free(Pathname); errno=0; Pathname=malloc(PATH_MAX+1); if (!Pathname) error(1,0,_("out of memory")); strcpy(Pathname, *argp); checkpath(Pathname); #ifdef ENABLE_SYSLOG shortname=strrchr(*argp,'/'); if (shortname) shortname++; else shortname=*argp; #endif vchar('\n'); vstringf(_("%s: ready to receive %s"), program_name, Pathname); vstring("\r\n"); if ((fout=fopen(Pathname, "w")) == NULL) { #ifdef ENABLE_SYSLOG if (enable_syslog) lsyslog(LOG_ERR,"%s/%s: cannot open: %m", shortname,protname()); #endif return ERROR; } if (wcrx(&zi)==ERROR) { goto fubar; } if (Verbose > 1 #ifdef ENABLE_SYSLOG || enable_syslog #endif ) { double d; long bps; d=timing(0,NULL); if (d==0) d=0.5; /* can happen if timing uses time() */ bps=(zi.bytes_received-zi.bytes_skipped)/d; if (Verbose) { vstringf( _("\rBytes received: %7ld BPS:%-6ld \r\n"), (long) zi.bytes_received, bps); } #ifdef ENABLE_SYSLOG if (enable_syslog) lsyslog(LOG_INFO,"%s/%s: %ld Bytes, %ld BPS", shortname,protname(),zi.bytes_received, bps); #endif } } return OK; fubar: #ifdef ENABLE_SYSLOG if (enable_syslog) lsyslog(LOG_ERR,"%s/%s: got error", shortname ? shortname : "no.name", protname()); #endif canit(STDOUT_FILENO); if (Topipe && fout) { pclose(fout); return ERROR; } if (fout) fclose(fout); if (Restricted && Pathname) { unlink(Pathname); vstringf(_("\r\n%s: %s removed.\r\n"), program_name, Pathname); } return ERROR; } /* * Fetch a pathname from the other end as a C ctyle ASCIZ string. * Length is indeterminate as long as less than Blklen * A null string represents no more files (YMODEM) */ static int wcrxpn(struct zm_fileinfo *zi, char *rpn) { register int c; size_t Blklen=0; /* record length of received packets */ #ifdef NFGVMIN READLINE_PF(1); #else purgeline(0); #endif et_tu: Firstsec=TRUE; zi->eof_seen=FALSE; sendline(Crcflg?WANTCRC:NAK); flushmo(); purgeline(0); /* Do read next time ... */ while ((c = wcgetsec(&Blklen, rpn, 100)) != 0) { if (c == WCEOT) { zperr( _("Pathname fetch returned EOT")); sendline(ACK); flushmo(); purgeline(0); /* Do read next time ... */ READLINE_PF(1); goto et_tu; } return ERROR; } sendline(ACK); flushmo(); return OK; } /* * Adapted from CMODEM13.C, written by * Jack M. Wierda and Roderick W. Hart */ static int wcrx(struct zm_fileinfo *zi) { register int sectnum, sectcurr; register char sendchar; size_t Blklen; Firstsec=TRUE;sectnum=0; zi->eof_seen=FALSE; sendchar=Crcflg?WANTCRC:NAK; for (;;) { sendline(sendchar); /* send it now, we're ready! */ flushmo(); purgeline(0); /* Do read next time ... */ sectcurr=wcgetsec(&Blklen, secbuf, (unsigned int) ((sectnum&0177) ? 50 : 130)); report(sectcurr); if (sectcurr==((sectnum+1) &0377)) { sectnum++; /* if using xmodem we don't know how long a file is */ if (zi->bytes_total && R_BYTESLEFT(zi) < Blklen) Blklen=R_BYTESLEFT(zi); zi->bytes_received+=Blklen; if (putsec(zi, secbuf, Blklen)==ERROR) return ERROR; sendchar=ACK; } else if (sectcurr==(sectnum&0377)) { zperr( _("Received dup Sector")); sendchar=ACK; } else if (sectcurr==WCEOT) { if (closeit(zi)) return ERROR; sendline(ACK); flushmo(); purgeline(0); /* Do read next time ... */ return OK; } else if (sectcurr==ERROR) return ERROR; else { zperr( _("Sync Error")); return ERROR; } } } /* * Wcgetsec fetches a Ward Christensen type sector. * Returns sector number encountered or ERROR if valid sector not received, * or CAN CAN received * or WCEOT if eot sector * time is timeout for first char, set to 4 seconds thereafter ***************** NO ACK IS SENT IF SECTOR IS RECEIVED OK ************** * (Caller must do that when he is good and ready to get next sector) */ static int wcgetsec(size_t *Blklen, char *rxbuf, unsigned int maxtime) { register int checksum, wcj, firstch; register unsigned short oldcrc; register char *p; int sectcurr; for (Lastrx=errors=0; errors=0; ) { if ((firstch=READLINE_PF(1)) < 0) goto bilge; oldcrc=updcrc(firstch, oldcrc); checksum += (*p++ = firstch); } if ((firstch=READLINE_PF(1)) < 0) goto bilge; if (Crcflg) { oldcrc=updcrc(firstch, oldcrc); if ((firstch=READLINE_PF(1)) < 0) goto bilge; oldcrc=updcrc(firstch, oldcrc); if (oldcrc & 0xFFFF) zperr( _("CRC")); else { Firstsec=FALSE; return sectcurr; } } else if (((checksum-firstch)&0377)==0) { Firstsec=FALSE; return sectcurr; } else zperr( _("Checksum")); } else zperr(_("Sector number garbled")); } /* make sure eot really is eot and not just mixmash */ #ifdef NFGVMIN else if (firstch==EOT && READLINE_PF(1)==TIMEOUT) return WCEOT; #else else if (firstch==EOT && READLINE_PF>0) return WCEOT; #endif else if (firstch==CAN) { if (Lastrx==CAN) { zperr( _("Sender Cancelled")); return ERROR; } else { Lastrx=CAN; continue; } } else if (firstch==TIMEOUT) { if (Firstsec) goto humbug; bilge: zperr( _("TIMEOUT")); } else zperr( _("Got 0%o sector header"), firstch); humbug: Lastrx=0; { int cnt=1000; while(cnt-- && READLINE_PF(1)!=TIMEOUT) ; } if (Firstsec) { sendline(Crcflg?WANTCRC:NAK); flushmo(); purgeline(0); /* Do read next time ... */ } else { maxtime=40; sendline(NAK); flushmo(); purgeline(0); /* Do read next time ... */ } } /* try to stop the bubble machine. */ canit(STDOUT_FILENO); return ERROR; } #define ZCRC_DIFFERS (ERROR+1) #define ZCRC_EQUAL (ERROR+2) /* * do ZCRC-Check for open file f. * check at most check_bytes bytes (crash recovery). if 0 -> whole file. * remote file size is remote_bytes. */ static int do_crc_check(FILE *f, size_t remote_bytes, size_t check_bytes) { struct stat st; unsigned long crc; unsigned long rcrc; size_t n; int c; int t1=0,t2=0; if (-1==fstat(fileno(f),&st)) { DO_SYSLOG((LOG_ERR,"cannot fstat open file: %s",strerror(errno))); return ERROR; } if (check_bytes==0 && ((size_t) st.st_size)!=remote_bytes) return ZCRC_DIFFERS; /* shortcut */ crc=0xFFFFFFFFL; n=check_bytes; if (n==0) n=st.st_size; while (n-- && ((c = getc(f)) != EOF)) crc = UPDC32(c, crc); crc = ~crc; clearerr(f); /* Clear EOF */ fseek(f, 0L, 0); while (t1<3) { stohdr(check_bytes); zshhdr(ZCRC, Txhdr); while(t2<3) { size_t tmp; c = zgethdr(Rxhdr, 0, &tmp); rcrc=(unsigned long) tmp; switch (c) { default: /* ignore */ break; case ZFIN: return ERROR; case ZRINIT: return ERROR; case ZCAN: if (Verbose) vstringf(_("got ZCAN")); return ERROR; break; case ZCRC: if (crc!=rcrc) return ZCRC_DIFFERS; return ZCRC_EQUAL; break; } } } return ERROR; } /* * Process incoming file information header */ static int procheader(char *name, struct zm_fileinfo *zi) { const char *openmode; char *p; static char *name_static=NULL; char *nameend; if (name_static) free(name_static); if (junk_path) { p=strrchr(name,'/'); if (p) { p++; if (!*p) { /* alert - file name ended in with a / */ if (Verbose) vstringf(_("file name ends with a /, skipped: %s\n"),name); DO_SYSLOG((LOG_ERR,"file name ends with a /, skipped: %s", name)); return ERROR; } name=p; } } name_static=malloc(strlen(name)+1); if (!name_static) error(1,0,_("out of memory")); strcpy(name_static,name); zi->fname=name_static; if (Verbose>2) { vstringf(_("zmanag=%d, Lzmanag=%d\n"),zmanag,Lzmanag); vstringf(_("zconv=%d\n"),zconv); } /* set default parameters and overrides */ openmode = "w"; Thisbinary = (!Rxascii) || Rxbinary; if (Lzmanag) zmanag = Lzmanag; /* * Process ZMODEM remote file management requests */ if (!Rxbinary && zconv == ZCNL) /* Remote ASCII override */ Thisbinary = 0; if (zconv == ZCBIN) /* Remote Binary override */ Thisbinary = TRUE; if (Thisbinary && zconv == ZCBIN && try_resume) zconv=ZCRESUM; if (zmanag == ZF1_ZMAPND && zconv!=ZCRESUM) openmode = "a"; if (skip_if_not_found) openmode="r+"; #ifdef ENABLE_TIMESYNC in_timesync=0; if (timesync_flag && 0==strcmp(name,"$time$.t")) in_timesync=1; #endif zi->bytes_total = DEFBYTL; zi->mode = 0; zi->eof_seen = 0; zi->modtime = 0; nameend = name + 1 + strlen(name); if (*nameend) { /* file coming from Unix or DOS system */ long modtime; long bytes_total; int mode; sscanf(nameend, "%ld%lo%o", &bytes_total, &modtime, &mode); zi->modtime=modtime; zi->bytes_total=bytes_total; zi->mode=mode; if (zi->mode & UNIXFILE) ++Thisbinary; } /* Check for existing file */ if (zconv != ZCRESUM && !Rxclob && (zmanag&ZF1_ZMMASK) != ZF1_ZMCLOB && (zmanag&ZF1_ZMMASK) != ZF1_ZMAPND #ifdef ENABLE_TIMESYNC && !in_timesync #endif && (fout=fopen(name, "r"))) { struct stat sta; char *tmpname; char *ptr; int i; if (zmanag == ZF1_ZMNEW || zmanag==ZF1_ZMNEWL) { if (-1==fstat(fileno(fout),&sta)) { #ifdef ENABLE_SYSLOG int e=errno; #endif if (Verbose) vstringf(_("file exists, skipped: %s\n"),name); DO_SYSLOG((LOG_ERR,"cannot fstat open file %s: %s", name,strerror(e))); return ERROR; } if (zmanag == ZF1_ZMNEW) { if (sta.st_mtime > zi->modtime) { DO_SYSLOG((LOG_INFO,"skipping %s: newer file exists", name)); return ERROR; /* skips file */ } } else { /* newer-or-longer */ if (((size_t) sta.st_size) >= zi->bytes_total && sta.st_mtime > zi->modtime) { DO_SYSLOG((LOG_INFO,"skipping %s: longer+newer file exists", name)); return ERROR; /* skips file */ } } fclose(fout); } else if (zmanag==ZF1_ZMCRC) { int r=do_crc_check(fout,zi->bytes_total,0); if (r==ERROR) { fclose(fout); return ERROR; } if (r!=ZCRC_DIFFERS) { return ERROR; /* skips */ } fclose(fout); } else { size_t namelen; fclose(fout); if ((zmanag & ZF1_ZMMASK)!=ZF1_ZMCHNG) { if (Verbose) vstringf(_("file exists, skipped: %s\n"),name); return ERROR; } /* try to rename */ namelen=strlen(name); tmpname=alloca(namelen+5); memcpy(tmpname,name,namelen); ptr=tmpname+namelen; *ptr++='.'; i=0; do { sprintf(ptr,"%d",i++); } while (i<1000 && stat(tmpname,&sta)==0); if (i==1000) return ERROR; free(name_static); name_static=malloc(strlen(tmpname)+1); if (!name_static) error(1,0,_("out of memory")); strcpy(name_static,tmpname); zi->fname=name_static; } } if (!*nameend) { /* File coming from CP/M system */ for (p=name_static; *p; ++p) /* change / to _ */ if ( *p == '/') *p = '_'; if ( *--p == '.') /* zap trailing period */ *p = 0; } #ifdef ENABLE_TIMESYNC if (in_timesync) { long t=time(0); long d=t-zi->modtime; if (d<0) d=0; if ((Verbose && d>60) || Verbose > 1) vstringf(_("TIMESYNC: here %ld, remote %ld, diff %ld seconds\n"), (long) t, (long) zi->modtime, d); #ifdef HAVE_SETTIMEOFDAY if (timesync_flag > 1 && d > 10) { struct timeval tv; tv.tv_sec=zi->modtime; tv.tv_usec=0; if (settimeofday(&tv,NULL)) vstringf(_("TIMESYNC: cannot set time: %s\n"), strerror(errno)); } #endif return ERROR; /* skips file */ } #endif /* ENABLE_TIMESYNC */ if (!zmodem_requested && MakeLCPathname && !IsAnyLower(name_static) && !(zi->mode&UNIXFILE)) uncaps(name_static); if (Topipe > 0) { if (Pathname) free(Pathname); Pathname=malloc((PATH_MAX)*2); if (!Pathname) error(1,0,_("out of memory")); sprintf(Pathname, "%s %s", program_name+2, name_static); if (Verbose) { vstringf("%s: %s %s\n", _("Topipe"), Pathname, Thisbinary?"BIN":"ASCII"); } if ((fout=popen(Pathname, "w")) == NULL) return ERROR; } else { if (protocol==ZM_XMODEM) /* we don't have the filename yet */ return OK; /* dummy */ if (Pathname) free(Pathname); Pathname=malloc((PATH_MAX)*2); if (!Pathname) error(1,0,_("out of memory")); strcpy(Pathname, name_static); if (Verbose) { /* overwrite the "waiting to receive" line */ vstring("\r \r"); vstringf(_("Receiving: %s\n"), name_static); } checkpath(name_static); if (Nflag) { /* cast because we might not have a prototyp for strdup :-/ */ free(name_static); name_static=(char *) strdup("/dev/null"); if (!name_static) { fprintf(stderr,"%s: %s\n", program_name, _("out of memory")); exit(1); } } #ifdef OMEN /* looks like a security hole -- uwe */ if (name_static[0] == '!' || name_static[0] == '|') { if ( !(fout = popen(name_static+1, "w"))) { return ERROR; } Topipe = -1; return(OK); } #endif if (Thisbinary && zconv==ZCRESUM) { struct stat st; fout = fopen(name_static, "r+"); if (fout && 0==fstat(fileno(fout),&st)) { int can_resume=TRUE; if (zmanag==ZF1_ZMCRC) { int r=do_crc_check(fout,zi->bytes_total,st.st_size); if (r==ERROR) { fclose(fout); return ZFERR; } if (r==ZCRC_DIFFERS) { can_resume=FALSE; } } if ((unsigned long)st.st_size > zi->bytes_total) { can_resume=FALSE; } /* retransfer whole blocks */ zi->bytes_skipped = st.st_size & ~(1023); if (can_resume) { if (fseek(fout, (long) zi->bytes_skipped, SEEK_SET)) { fclose(fout); return ZFERR; } } else zi->bytes_skipped=0; /* resume impossible, file has changed */ goto buffer_it; } zi->bytes_skipped=0; if (fout) fclose(fout); } fout = fopen(name_static, openmode); #ifdef ENABLE_MKDIR if ( !fout && Restricted < 2) { if (make_dirs(name_static)) fout = fopen(name_static, openmode); } #endif if ( !fout) { #ifdef ENABLE_SYSLOG int e=errno; #endif zpfatal(_("cannot open %s"), name_static); DO_SYSLOG((LOG_ERR,"%s: cannot open: %s", protname(),strerror(e))); return ERROR; } } buffer_it: if (Topipe == 0) { static char *s=NULL; static size_t last_length=0; #if defined(F_GETFD) && defined(F_SETFD) && defined(O_SYNC) if (o_sync) { int oldflags; oldflags = fcntl (fileno(fout), F_GETFD, 0); if (oldflags>=0 && !(oldflags & O_SYNC)) { oldflags|=O_SYNC; fcntl (fileno(fout), F_SETFD, oldflags); /* errors don't matter */ } } #endif if (buffersize==-1 && s) { if (zi->bytes_total>last_length) { free(s); s=NULL; last_length=0; } } if (!s && buffersize) { last_length=32768; if (buffersize==-1) { if (zi->bytes_total>0) last_length=zi->bytes_total; } else last_length=buffersize; /* buffer `4096' bytes pages */ last_length=(last_length+4095)&0xfffff000; s=malloc(last_length); if (!s) { zpfatal(_("out of memory")); exit(1); } } if (s) { #ifdef SETVBUF_REVERSED setvbuf(fout,_IOFBF,s,last_length); #else setvbuf(fout,s,_IOFBF,last_length); #endif } } zi->bytes_received=zi->bytes_skipped; return OK; } #ifdef ENABLE_MKDIR /* * Directory-creating routines from Public Domain TAR by John Gilmore */ /* * After a file/link/symlink/dir creation has failed, see if * it's because some required directory was not present, and if * so, create all required dirs. */ static int make_dirs(char *pathname) { register char *p; /* Points into path */ int madeone = 0; /* Did we do anything yet? */ int save_errno = errno; /* Remember caller's errno */ if (errno != ENOENT) return 0; /* Not our problem */ for (p = strchr(pathname, '/'); p != NULL; p = strchr(p+1, '/')) { /* Avoid mkdir of empty string, if leading or double '/' */ if (p == pathname || p[-1] == '/') continue; /* Avoid mkdir where last part of path is '.' */ if (p[-1] == '.' && (p == pathname+1 || p[-2] == '/')) continue; *p = 0; /* Truncate the path there */ if ( !mkdir(pathname, 0777)) { /* Try to create it as a dir */ vfile("Made directory %s\n", pathname); madeone++; /* Remember if we made one */ *p = '/'; continue; } *p = '/'; if (errno == EEXIST) /* Directory already exists */ continue; /* * Some other error in the mkdir. We return to the caller. */ break; } errno = save_errno; /* Restore caller's errno */ return madeone; /* Tell them to retry if we made one */ } #endif /* ENABLE_MKDIR */ /* * Putsec writes the n characters of buf to receive file fout. * If not in binary mode, carriage returns, and all characters * starting with CPMEOF are discarded. */ static int putsec(struct zm_fileinfo *zi, char *buf, size_t n) { register char *p; if (n == 0) return OK; if (Thisbinary) { if (fwrite(buf,n,1,fout)!=1) return ERROR; } else { if (zi->eof_seen) return OK; for (p=buf; n>0; ++p,n-- ) { if ( *p == '\r') continue; if (*p == CPMEOF) { zi->eof_seen=TRUE; return OK; } putc(*p ,fout); } } return OK; } /* make string s lower case */ static void uncaps(char *s) { for ( ; *s; ++s) if (isupper((unsigned char)(*s))) *s = tolower(*s); } /* * IsAnyLower returns TRUE if string s has lower case letters. */ static int IsAnyLower(const char *s) { for ( ; *s; ++s) if (islower((unsigned char)(*s))) return TRUE; return FALSE; } static void report(int sct) { if (Verbose>1) { vstringf(_("Blocks received: %d"),sct); vchar('\r'); } } /* * If called as [-][dir/../]vrzCOMMAND set Verbose to 1 * If called as [-][dir/../]rzCOMMAND set the pipe flag * If called as rb use YMODEM protocol */ static void chkinvok(const char *s) { const char *p; p = s; while (*p == '-') s = ++p; while (*p) if (*p++ == '/') s = p; if (*s == 'v') { Verbose=1; ++s; } program_name = s; if (*s == 'l') s++; /* lrz -> rz */ protocol=ZM_ZMODEM; if (s[0]=='r' && s[1]=='x') protocol=ZM_XMODEM; if (s[0]=='r' && (s[1]=='b' || s[1]=='y')) protocol=ZM_YMODEM; if (s[2] && protocol!=ZM_XMODEM) Topipe = 1; } /* * Totalitarian Communist pathname processing */ static void checkpath(const char *name) { if (Restricted) { const char *p; p=strrchr(name,'/'); if (p) p++; else p=name; /* don't overwrite any file in very restricted mode. * don't overwrite hidden files in restricted mode */ if ((Restricted==2 || *name=='.') && fopen(name, "r") != NULL) { canit(STDOUT_FILENO); vstring("\r\n"); vstringf(_("%s: %s exists\n"), program_name, name); bibi(-1); } /* restrict pathnames to current tree or uucppublic */ if ( strstr(name, "../") #ifdef PUBDIR || (name[0]== '/' && strncmp(name, PUBDIR, strlen(PUBDIR))) #endif ) { canit(STDOUT_FILENO); vstring("\r\n"); vstringf(_("%s:\tSecurity Violation"),program_name); vstring("\r\n"); bibi(-1); } if (Restricted > 1) { if (name[0]=='.' || strstr(name,"/.")) { canit(STDOUT_FILENO); vstring("\r\n"); vstringf(_("%s:\tSecurity Violation"),program_name); vstring("\r\n"); bibi(-1); } } } } /* * Initialize for Zmodem receive attempt, try to activate Zmodem sender * Handles ZSINIT frame * Return ZFILE if Zmodem filename received, -1 on error, * ZCOMPL if transaction finished, else 0 */ static int tryz(void) { register int c, n; register int cmdzack1flg; int zrqinits_received=0; size_t bytes_in_block=0; if (protocol!=ZM_ZMODEM) /* Check for "rb" program name */ return 0; for (n=zmodem_requested?15:5; (--n + zrqinits_received) >=0 && zrqinits_received<10; ) { /* Set buffer length (0) and capability flags */ #ifdef SEGMENTS stohdr(SEGMENTS*MAX_BLOCK); #else stohdr(0L); #endif #ifdef CANBREAK Txhdr[ZF0] = CANFC32|CANFDX|CANOVIO|CANBRK; #else Txhdr[ZF0] = CANFC32|CANFDX|CANOVIO; #endif #ifdef ENABLE_TIMESYNC if (timesync_flag) Txhdr[ZF1] |= ZF1_TIMESYNC; #endif if (Zctlesc) Txhdr[ZF0] |= TESCCTL; /* TESCCTL == ESCCTL */ zshhdr(tryzhdrtype, Txhdr); if (tryzhdrtype == ZSKIP) /* Don't skip too far */ tryzhdrtype = ZRINIT; /* CAF 8-21-87 */ again: switch (zgethdr(Rxhdr, 0, NULL)) { case ZRQINIT: /* getting one ZRQINIT is totally ok. Normally a ZFILE follows * (and might be in our buffer, so don't purge it). But if we * get more ZRQINITs than the sender has started up before us * and sent ZRQINITs while waiting. */ zrqinits_received++; continue; case ZEOF: continue; case TIMEOUT: continue; case ZFILE: zconv = Rxhdr[ZF0]; if (!zconv) /* resume with sz -r is impossible (at least with unix sz) * if this is not set */ zconv=ZCBIN; if (Rxhdr[ZF1] & ZF1_ZMSKNOLOC) { Rxhdr[ZF1] &= ~(ZF1_ZMSKNOLOC); skip_if_not_found=TRUE; } zmanag = Rxhdr[ZF1]; ztrans = Rxhdr[ZF2]; tryzhdrtype = ZRINIT; c = zrdata(secbuf, MAX_BLOCK,&bytes_in_block); io_mode(0,3); if (c == GOTCRCW) return ZFILE; zshhdr(ZNAK, Txhdr); goto again; case ZSINIT: /* this once was: * Zctlesc = TESCCTL & Rxhdr[ZF0]; * trouble: if rz get --escape flag: * - it sends TESCCTL to sz, * get a ZSINIT _without_ TESCCTL (yeah - sender didn't know), * overwrites Zctlesc flag ... * - sender receives TESCCTL and uses "|=..." * so: sz escapes, but rz doesn't unescape ... not good. */ Zctlesc |= TESCCTL & Rxhdr[ZF0]; if (zrdata(Attn, ZATTNLEN,&bytes_in_block) == GOTCRCW) { stohdr(1L); zshhdr(ZACK, Txhdr); goto again; } zshhdr(ZNAK, Txhdr); goto again; case ZFREECNT: stohdr(getfree()); zshhdr(ZACK, Txhdr); goto again; case ZCOMMAND: cmdzack1flg = Rxhdr[ZF0]; if (zrdata(secbuf, MAX_BLOCK,&bytes_in_block) == GOTCRCW) { if (Verbose) { vstringf("%s: %s\n", program_name, _("remote command execution requested")); vstringf("%s: %s\n", program_name, secbuf); } if (!allow_remote_commands) { if (Verbose) vstringf("%s: %s\n", program_name, _("not executed")); zshhdr(ZCOMPL, Txhdr); DO_SYSLOG((LOG_INFO,"rexec denied: %s",secbuf)); return ZCOMPL; } DO_SYSLOG((LOG_INFO,"rexec allowed: %s",secbuf)); if (cmdzack1flg & ZCACK1) stohdr(0L); else stohdr((size_t)sys2(secbuf)); purgeline(0); /* dump impatient questions */ do { zshhdr(ZCOMPL, Txhdr); } while (++errors<20 && zgethdr(Rxhdr,1, NULL) != ZFIN); ackbibi(); if (cmdzack1flg & ZCACK1) exec2(secbuf); return ZCOMPL; } zshhdr(ZNAK, Txhdr); goto again; case ZCOMPL: goto again; default: continue; case ZFIN: ackbibi(); return ZCOMPL; case ZRINIT: if (Verbose) vstringf(_("got ZRINIT")); return ERROR; case ZCAN: if (Verbose) vstringf(_("got ZCAN")); return ERROR; } } return 0; } /* * Receive 1 or more files with ZMODEM protocol */ static int rzfiles(struct zm_fileinfo *zi) { register int c; for (;;) { timing(1,NULL); c = rzfile(zi); switch (c) { case ZEOF: if (Verbose > 1 #ifdef ENABLE_SYSLOG || enable_syslog #endif ) { double d; long bps; d=timing(0,NULL); if (d==0) d=0.5; /* can happen if timing uses time() */ bps=(zi->bytes_received-zi->bytes_skipped)/d; if (Verbose > 1) { vstringf( _("\rBytes received: %7ld/%7ld BPS:%-6ld \r\n"), (long) zi->bytes_received, (long) zi->bytes_total, bps); } DO_SYSLOG_FNAME((LOG_INFO, "%s/%s: %ld Bytes, %ld BPS",shortname, protname(), (long) zi->bytes_total,bps)); } /* FALL THROUGH */ case ZSKIP: if (c==ZSKIP) { if (Verbose) vstringf(_("Skipped")); DO_SYSLOG_FNAME((LOG_INFO, "%s/%s: skipped",shortname,protname())); } switch (tryz()) { case ZCOMPL: return OK; default: return ERROR; case ZFILE: break; } continue; default: return c; case ERROR: DO_SYSLOG_FNAME((LOG_INFO, "%s/%s: error",shortname,protname())); return ERROR; } } } /* "OOSB" means Out Of Sync Block. I once thought that if sz sents * blocks a,b,c,d, of which a is ok, b fails, we might want to save * c and d. But, alas, i never saw c and d. */ #define SAVE_OOSB #ifdef SAVE_OOSB typedef struct oosb_t { size_t pos; size_t len; char *data; struct oosb_t *next; } oosb_t; struct oosb_t *anker=NULL; #endif /* * Receive a file with ZMODEM protocol * Assumes file name frame is in secbuf */ static int rzfile(struct zm_fileinfo *zi) { register int c, n; long last_rxbytes=0; unsigned long last_bps=0; long not_printed=0; time_t low_bps=0; size_t bytes_in_block=0; zi->eof_seen=FALSE; n = 20; if (procheader(secbuf,zi) == ERROR) { DO_SYSLOG_FNAME((LOG_INFO, "%s/%s: procheader error", shortname,protname())); return (tryzhdrtype = ZSKIP); } for (;;) { #ifdef SEGMENTS chinseg = 0; #endif stohdr(zi->bytes_received); zshhdr(ZRPOS, Txhdr); goto skip_oosb; nxthdr: #ifdef SAVE_OOSB if (anker) { oosb_t *akt,*last,*next; for (akt=anker,last=NULL;akt;last= akt ? akt : last ,akt=next) { if (akt->pos==zi->bytes_received) { putsec(zi, akt->data, akt->len); zi->bytes_received += akt->len; vfile("using saved out-of-sync-paket %lx, len %ld", akt->pos,akt->len); goto nxthdr; } next=akt->next; if (akt->posbytes_received) { vfile("removing unneeded saved out-of-sync-paket %lx, len %ld", akt->pos,akt->len); if (last) last->next=akt->next; else anker=akt->next; free(akt->data); free(akt); akt=NULL; } } } #endif skip_oosb: c = zgethdr(Rxhdr, 0, NULL); switch (c) { default: DO_SYSLOG_FNAME((LOG_INFO, "%s/%s: error: zgethdr returned %d",shortname, protname(),c)); vfile("rzfile: zgethdr returned %d", c); return ERROR; case ZNAK: case TIMEOUT: #ifdef SEGMENTS putsec(secbuf, chinseg); chinseg = 0; #endif if ( --n < 0) { DO_SYSLOG_FNAME((LOG_INFO, "%s/%s: error: zgethdr returned %s",shortname, protname(),c == ZNAK ? "ZNAK" : "TIMEOUT")); vfile("rzfile: zgethdr returned %d", c); return ERROR; } case ZFILE: zrdata(secbuf, MAX_BLOCK,&bytes_in_block); continue; case ZEOF: #ifdef SEGMENTS putsec(secbuf, chinseg); chinseg = 0; #endif if (rclhdr(Rxhdr) != (long) zi->bytes_received) { /* * Ignore eof if it's at wrong place - force * a timeout because the eof might have gone * out before we sent our zrpos. */ errors = 0; goto nxthdr; } if (closeit(zi)) { tryzhdrtype = ZFERR; DO_SYSLOG_FNAME((LOG_INFO, "%s/%s: error: closeit return <>0", shortname, protname())); vfile("rzfile: closeit returned <> 0"); return ERROR; } vfile("rzfile: normal EOF"); return c; case ERROR: /* Too much garbage in header search error */ #ifdef SEGMENTS putsec(secbuf, chinseg); chinseg = 0; #endif if ( --n < 0) { DO_SYSLOG_FNAME((LOG_INFO, "%s/%s: error: zgethdr returned %d", shortname, protname(),c)); vfile("rzfile: zgethdr returned %d", c); return ERROR; } zmputs(Attn); continue; case ZSKIP: #ifdef SEGMENTS putsec(secbuf, chinseg); chinseg = 0; #endif closeit(zi); DO_SYSLOG_FNAME((LOG_INFO, "%s/%s: error: sender skipped", shortname, protname())); vfile("rzfile: Sender SKIPPED file"); return c; case ZDATA: if (rclhdr(Rxhdr) != (long) zi->bytes_received) { #if defined(SAVE_OOSB) oosb_t *neu; size_t pos=rclhdr(Rxhdr); #endif if ( --n < 0) { vfile("rzfile: out of sync"); DO_SYSLOG_FNAME((LOG_INFO, "%s/%s: error: out of sync", shortname, protname())); return ERROR; } #if defined(SAVE_OOSB) switch (c = zrdata(secbuf, MAX_BLOCK,&bytes_in_block)) { case GOTCRCW: case GOTCRCG: case GOTCRCE: case GOTCRCQ: if (pos>zi->bytes_received) { neu=malloc(sizeof(oosb_t)); if (neu) neu->data=malloc(bytes_in_block); if (neu && neu->data) { #ifdef ENABLE_SYSLOG /* call syslog to tell me if this happens */ lsyslog(LOG_ERR, "saving out-of-sync-block %lx, len %lu", pos, (unsigned long) bytes_in_block); #endif vfile("saving out-of-sync-block %lx, len %lu",pos, (unsigned long) bytes_in_block); memcpy(neu->data,secbuf,bytes_in_block); neu->pos=pos; neu->len=bytes_in_block; neu->next=anker; anker=neu; } else if (neu) free(neu); } } #endif #ifdef SEGMENTS putsec(secbuf, chinseg); chinseg = 0; #endif zmputs(Attn); continue; } moredata: if ((Verbose>1 || min_bps || stop_time) && (not_printed > (min_bps ? 3 : 7) || zi->bytes_received > last_bps / 2 + last_rxbytes)) { int minleft = 0; int secleft = 0; time_t now; double d; d=timing(0,&now); if (d==0) d=0.5; /* timing() might use time() */ last_bps=zi->bytes_received/d; if (last_bps > 0) { minleft = (R_BYTESLEFT(zi))/last_bps/60; secleft = ((R_BYTESLEFT(zi))/last_bps)%60; } if (min_bps) { if (low_bps) { if (last_bps=min_bps_time) { /* too bad */ vfile(_("rzfile: bps rate %ld below min %ld"), last_bps, min_bps); DO_SYSLOG_FNAME((LOG_INFO, "%s/%s: bps rate low: %ld < %ld", shortname, protname(), last_bps, min_bps)); return ERROR; } } else low_bps=0; } else if (last_bps=stop_time) { /* too bad */ vfile(_("rzfile: reached stop time")); DO_SYSLOG_FNAME((LOG_INFO, "%s/%s: reached stop time", shortname, protname())); return ERROR; } if (Verbose > 1) { vstringf(_("\rBytes received: %7ld/%7ld BPS:%-6ld ETA %02d:%02d "), (long) zi->bytes_received, (long) zi->bytes_total, last_bps, minleft, secleft); last_rxbytes=zi->bytes_received; not_printed=0; } } else if (Verbose) not_printed++; #ifdef SEGMENTS if (chinseg >= (MAX_BLOCK * SEGMENTS)) { putsec(secbuf, chinseg); chinseg = 0; } switch (c = zrdata(secbuf+chinseg, MAX_BLOCK,&bytes_in_block)) #else switch (c = zrdata(secbuf, MAX_BLOCK,&bytes_in_block)) #endif { case ZCAN: #ifdef SEGMENTS putsec(secbuf, chinseg); chinseg = 0; #endif vfile("rzfile: zrdata returned %d", c); DO_SYSLOG_FNAME((LOG_INFO, "%s/%s: zrdata returned ZCAN", shortname, protname())); return ERROR; case ERROR: /* CRC error */ #ifdef SEGMENTS putsec(secbuf, chinseg); chinseg = 0; #endif if ( --n < 0) { vfile("rzfile: zgethdr returned %d", c); DO_SYSLOG_FNAME((LOG_INFO, "%s/%s: zrdata returned ERROR", shortname, protname())); return ERROR; } zmputs(Attn); continue; case TIMEOUT: #ifdef SEGMENTS putsec(secbuf, chinseg); chinseg = 0; #endif if ( --n < 0) { DO_SYSLOG_FNAME((LOG_INFO, "%s/%s: zrdata returned TIMEOUT", shortname, protname())); vfile("rzfile: zgethdr returned %d", c); return ERROR; } continue; case GOTCRCW: n = 20; #ifdef SEGMENTS chinseg += bytes_in_block; putsec(zi, secbuf, chinseg); chinseg = 0; #else putsec(zi, secbuf, bytes_in_block); #endif zi->bytes_received += bytes_in_block; stohdr(zi->bytes_received); zshhdr(ZACK | 0x80, Txhdr); goto nxthdr; case GOTCRCQ: n = 20; #ifdef SEGMENTS chinseg += bytes_in_block; #else putsec(zi, secbuf, bytes_in_block); #endif zi->bytes_received += bytes_in_block; stohdr(zi->bytes_received); zshhdr(ZACK, Txhdr); goto moredata; case GOTCRCG: n = 20; #ifdef SEGMENTS chinseg += bytes_in_block; #else putsec(zi, secbuf, bytes_in_block); #endif zi->bytes_received += bytes_in_block; goto moredata; case GOTCRCE: n = 20; #ifdef SEGMENTS chinseg += bytes_in_block; #else putsec(zi, secbuf, bytes_in_block); #endif zi->bytes_received += bytes_in_block; goto nxthdr; } } } } /* * Send a string to the modem, processing for \336 (sleep 1 sec) * and \335 (break signal) */ static void zmputs(const char *s) { const char *p; while (s && *s) { p=strpbrk(s,"\335\336"); if (!p) { write(1,s,strlen(s)); return; } if (p!=s) { write(1,s,(size_t) (p-s)); s=p; } if (*p=='\336') sleep(1); else sendbrk(0); p++; } } /* * Close the receive dataset, return OK or ERROR */ static int closeit(struct zm_fileinfo *zi) { int ret; if (Topipe) { if (pclose(fout)) { return ERROR; } return OK; } ret=fclose(fout); if (ret) { zpfatal(_("file close error")); /* this may be any sort of error, including random data corruption */ unlink(Pathname); return ERROR; } if (zi->modtime) { #ifdef HAVE_STRUCT_UTIMBUF struct utimbuf timep; timep.actime = time(NULL); timep.modtime = zi->modtime; utime(Pathname, &timep); #else time_t timep[2]; timep[0] = time(NULL); timep[1] = zi->modtime; utime(Pathname, timep); #endif } #ifdef S_ISREG if (S_ISREG(zi->mode)) { #else if ((zi->mode&S_IFMT) == S_IFREG) { #endif /* we must not make this program executable if running * under rsh, because the user might have uploaded an * unrestricted shell. */ if (under_rsh) chmod(Pathname, (00666 & zi->mode)); else chmod(Pathname, (07777 & zi->mode)); } return OK; } /* * Ack a ZFIN packet, let byegones be byegones */ static void ackbibi(void) { int n; vfile("ackbibi:"); Readnum = 1; stohdr(0L); for (n=3; --n>=0; ) { purgeline(0); zshhdr(ZFIN, Txhdr); switch (READLINE_PF(100)) { case 'O': READLINE_PF(1); /* Discard 2nd 'O' */ vfile("ackbibi complete"); return; case RCDO: return; case TIMEOUT: default: break; } } } /* * Strip leading ! if present, do shell escape. */ static int sys2(const char *s) { if (*s == '!') ++s; return system(s); } /* * Strip leading ! if present, do exec. */ static void exec2(const char *s) { if (*s == '!') ++s; io_mode(0,0); execl("/bin/sh", "sh", "-c", s); zpfatal("execl"); exit(1); } /* * Routine to calculate the free bytes on the current file system * ~0 means many free bytes (unknown) */ static size_t getfree(void) { return((size_t) (~0L)); /* many free bytes ... */ } /* End of lrz.c */ lrzsz-0.12.21rc/src/timing.c 666 764 764 10340 6607440604 10731 /* timing.c - Timing routines for computing elapsed wall time Copyright (C) 1994 Michael D. Black 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. originally written by Michael D. Black, mblack@csihq.com */ #include "zglobal.h" #include "timing.h" #if HAVE_SYS_PARAM_H #include #endif #if !defined(TIME_WITH_SYS_TIME) && !defined(HAVE_SYS_TIME_H) /* can't use gettimeofday without struct timeval */ # undef HAVE_GETTIMEOFDAY #endif /* Prefer gettimeofday to ftime to times. */ #if defined(HAVE_GETTIMEOFDAY) # undef HAVE_FTIME # undef HAVE_TIMES #else # if defined(HAVE_FTIME) # undef HAVE_TIMES # endif #endif #ifdef HAVE_FTIME # include #endif #ifdef HAVE_TIMES # if HAVE_SYS_TIMES_H # include # endif # ifdef _SC_CLK_TCK # define HAVE_SC_CLK_TCK 1 # else # define HAVE_SC_CLK_TCK 0 # endif /* TIMES_TICK may have been set in policy.h, or we may be able to get it using sysconf. If neither is the case, try to find a useful definition from the system header files. */ # if !defined(TIMES_TICK) && (!defined(HAVE_SYSCONF) || !defined(HAVE_SC_CLK_TCK)) # ifdef CLK_TCK # define TIMES_TICK CLK_TCK # else /* ! defined (CLK_TCK) */ # ifdef HZ # define TIMES_TICK HZ # endif /* defined (HZ) */ # endif /* ! defined (CLK_TCK) */ #else # endif /* TIMES_TICK == 0 && (! HAVE_SYSCONF || ! HAVE_SC_CLK_TCK) */ # ifndef TIMES_TICK # define TIMES_TICK 0 # endif #endif /* HAVE_TIMES */ #ifdef HAVE_GETTIMEOFDAY /* collides with Solaris 2.5 prototype? */ /* int gettimeofday (struct timeval *tv, struct timezone *tz); */ #endif double timing (int reset, time_t *nowp) { static double elaptime, starttime, stoptime; double yet; #define NEED_TIME #ifdef HAVE_GETTIMEOFDAY struct timeval tv; struct timezone tz; #ifdef DST_NONE tz.tz_dsttime = DST_NONE; #else tz.tz_dsttime = 0; #endif gettimeofday (&tv, &tz); yet=tv.tv_sec + tv.tv_usec/1000000.0; #undef NEED_TIME #endif #ifdef HAVE_FTIME static int fbad=0; if (! fbad) { struct timeb stime; static struct timeb slast; (void) ftime (&stime); /* On some systems, such as SCO 3.2.2, ftime can go backwards in time. If we detect this, we switch to using time. */ if (slast.time != 0 && (stime.time < slast.time || (stime.time == slast.time && stime.millitm < slast.millitm))) fbad = 1; else { yet = stime.millitm / 1000.0 + stime.time; slast = stime; } } if (fbad) yet=(double) time(NULL); #undef NEED_TIME #endif #ifdef HAVE_TIMES struct tms s; long i; static int itick; if (itick == 0) { #if TIMES_TICK == 0 #if HAVE_SYSCONF && HAVE_SC_CLK_TCK itick = (int) sysconf (_SC_CLK_TCK); #else /* ! HAVE_SYSCONF || ! HAVE_SC_CLK_TCK */ const char *z; z = getenv ("HZ"); if (z != NULL) itick = (int) strtol (z, (char **) NULL, 10); /* If we really couldn't get anything, just use 60. */ if (itick == 0) itick = 60; #endif /* ! HAVE_SYSCONF || ! HAVE_SC_CLK_TCK */ #else /* TIMES_TICK != 0 */ itick = TIMES_TICK; #endif /* TIMES_TICK == 0 */ } yet = ((double) times (&s)) / itick; #undef NEED_TIME #endif #ifdef NEED_TIME yet=(double) time(NULL); #endif if (nowp) *nowp=(time_t) yet; if (reset) { starttime = yet; return starttime; } else { stoptime = yet; elaptime = stoptime - starttime; return elaptime; } } /*#define TEST*/ #ifdef TEST main() { int i; printf("timing %g\n",timing(1)); printf("timing %g\n",timing(0)); for(i=0;i<20;i++){ sleep(1); printf("timing %g\n",timing(0)); } } #endif lrzsz-0.12.21rc/src/zperr.c 644 764 764 4314 6641455650 10571 /* zperr.c - "stderr" output stuff 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. originally written by Uwe Ohse */ #include "zglobal.h" #include #include #include #ifdef __STDC__ # define WAYTOGO # include # define VA_START(args, lastarg) va_start(args, lastarg) #else # include # define VA_START(args, lastarg) va_start(args) #endif void #ifdef WAYTOGO zperr(const char *fmt, ...) #else zperr(fmt, va_alist) const char *fmt; va_dcl #endif { va_list ap; if (Verbose<=0) return; fprintf(stderr,_("Retry %d: "),errors); VA_START(ap, fmt); vfprintf(stderr,fmt, ap); va_end(ap); putc('\n',stderr); } void #ifdef WAYTOGO zpfatal(const char *fmt, ...) #else zpfatal(fmt, va_alist) const char *fmt; va_dcl #endif { va_list ap; int err=errno; if (Verbose<=0) return; fprintf(stderr,"%s: ",program_name); VA_START(ap, fmt); vfprintf(stderr,fmt, ap); va_end(ap); fprintf(stderr,": %s\n",strerror(err)); } void #ifdef WAYTOGO vfile(const char *format, ...) #else vfile(format, va_alist) const char *format; va_dcl #endif { va_list ap; if (Verbose < 3) return; VA_START(ap, format); vfprintf(stderr,format, ap); va_end(ap); putc('\n',stderr); } #ifndef vstringf /* if using gcc this function is not needed */ void #ifdef WAYTOGO vstringf(const char *format, ...) #else vstringf(format, va_alist) const char *format; va_dcl #endif { va_list ap; VA_START(ap, format); vfprintf(stderr,format, ap); va_end(ap); } #endif lrzsz-0.12.21rc/src/zreadline.c 644 764 764 6117 6736335512 11406 /* zreadline.c - line reading stuff 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. originally written by Chuck Forsberg */ /* once part of lrz.c, taken out to be useful to lsz.c too */ #include "zglobal.h" #include #include #include #include #include #include "error.h" /* Ward Christensen / CP/M parameters - Don't change these! */ #define TIMEOUT (-2) static size_t readline_readnum; static int readline_fd; static char *readline_buffer; int readline_left=0; char *readline_ptr; static RETSIGTYPE zreadline_alarm_handler(int dummy) { dummy++; /* doesn't need to do anything */ } /* * This version of readline is reasonably well suited for * reading many characters. * * timeout is in tenths of seconds */ int readline_internal(unsigned int timeout) { if (!no_timeout) { unsigned int n; n = timeout/10; if (n < 2 && timeout!=1) n = 3; else if (n==0) n=1; if (Verbose > 5) vstringf("Calling read: alarm=%d Readnum=%d ", n, readline_readnum); signal(SIGALRM, zreadline_alarm_handler); alarm(n); } else if (Verbose > 5) vstringf("Calling read: Readnum=%d ", readline_readnum); readline_ptr=readline_buffer; readline_left=read(readline_fd, readline_ptr, readline_readnum); if (!no_timeout) alarm(0); if (readline_left>0 && bytes_per_error) { static long ct=0; static int mod=1; ct+=readline_left; while (ct>bytes_per_error) { readline_ptr[ct % bytes_per_error]^=mod; ct-=bytes_per_error; mod++; if (mod==256) mod=1; } } if (Verbose > 5) { vstringf("Read returned %d bytes\n", readline_left); if (readline_left==-1) vstringf("errno=%d:%s\n", errno,strerror(errno)); if (Verbose > 9 && readline_left>0) { int i,j; j=readline_left > 48 ? 48 : readline_left; vstring(" "); for (i=0;i readnum ? bufsize : readnum); if (!readline_buffer) error(1,0,_("out of memory")); } void readline_purge(void) { readline_left=0; return; } lrzsz-0.12.21rc/src/crctab.c 666 764 764 21023 6607440603 10677 /* * Crc calculation stuff */ /* crctab calculated by Mark G. Mendel, Network Systems Corporation */ unsigned short crctab[256] = { 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0 }; /* * updcrc macro derived from article Copyright (C) 1986 Stephen Satchell. * NOTE: First srgument must be in range 0 to 255. * Second argument is referenced twice. * * Programmers may incorporate any or all code into their programs, * giving proper credit within the source. Publication of the * source routines is permitted so long as proper credit is given * to Stephen Satchell, Satchell Evaluations and Chuck Forsberg, * Omen Technology. */ #define updcrc(cp, crc) ( crctab[((crc >> 8) & 255)] ^ (crc << 8) ^ cp) /* * Copyright (C) 1986 Gary S. Brown. You may use this program, or * code or tables extracted from it, as desired without restriction. */ /* First, the polynomial itself and its table of feedback terms. The */ /* polynomial is */ /* X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X^1+X^0 */ /* Note that we take it "backwards" and put the highest-order term in */ /* the lowest-order bit. The X^32 term is "implied"; the LSB is the */ /* X^31 term, etc. The X^0 term (usually shown as "+1") results in */ /* the MSB being 1. */ /* Note that the usual hardware shift register implementation, which */ /* is what we're using (we're merely optimizing it by doing eight-bit */ /* chunks at a time) shifts bits into the lowest-order term. In our */ /* implementation, that means shifting towards the right. Why do we */ /* do it this way? Because the calculated CRC must be transmitted in */ /* order from highest-order term to lowest-order term. UARTs transmit */ /* characters in order from LSB to MSB. By storing the CRC this way, */ /* we hand it to the UART in the order low-byte to high-byte; the UART */ /* sends each low-bit to hight-bit; and the result is transmission bit */ /* by bit from highest- to lowest-order term without requiring any bit */ /* shuffling on our part. Reception works similarly. */ /* The feedback terms table consists of 256, 32-bit entries. Notes: */ /* */ /* The table can be generated at runtime if desired; code to do so */ /* is shown later. It might not be obvious, but the feedback */ /* terms simply represent the results of eight shift/xor opera- */ /* tions for all combinations of data and CRC register values. */ /* */ /* The values must be right-shifted by eight bits by the "updcrc" */ /* logic; the shift must be unsigned (bring in zeroes). On some */ /* hardware you could probably optimize the shift in assembler by */ /* using byte-swap instructions. */ long cr3tab[] = { /* CRC polynomial 0xedb88320 */ 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; #ifdef NFGM long UPDC32(b, c) long c; { return (cr3tab[((int)c ^ b) & 0xff] ^ ((c >> 8) & 0x00FFFFFF)); } #else #define UPDC32(b, c) (cr3tab[((int)c ^ b) & 0xff] ^ ((c >> 8) & 0x00FFFFFF)) #endif /* End of crctab.c */ lrzsz-0.12.21rc/src/rbsb.c 644 764 764 25505 6760031553 10376 /* rbsb.c - terminal handling stuff for lrzsz Copyright (C) until 1988 Chuck Forsberg (Omen Technology INC) Copyright (C) 1994 Matt Porter, Michael D. Black 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. originally written by Chuck Forsberg */ /* * Rev 05-05-1988 * ============== (not quite, but originated there :-). -- uwe */ #include "zglobal.h" #include #include #ifndef HAVE_ERRNO_DECLARATION extern int errno; #endif #ifdef USE_SGTTY # ifdef LLITOUT long Locmode; /* Saved "local mode" for 4.x BSD "new driver" */ long Locbit = LLITOUT; /* Bit SUPPOSED to disable output translations */ # endif #endif #ifdef HAVE_SYS_IOCTL_H #include #endif #ifdef MAJOR_IN_MKDEV #include #else # ifdef MAJOR_IN_SYSMACROS # include # endif #endif #if defined(HOWMANY) && HOWMANY > 255 #ifndef NFGVMIN Howmany must be 255 or less #endif #endif static struct { unsigned baudr; speed_t speedcode; } speeds[] = { {110, B110}, {300, B300}, {600, B600}, {1200, B1200}, {2400, B2400}, {4800, B4800}, {9600, B9600}, #ifdef B19200 {19200, B19200}, #endif #ifdef B38400 {38400, B38400}, #endif #ifdef B57600 {57600, B57600}, #endif #ifdef B115200 {115200, B115200}, #endif #ifdef B230400 {230400, B230400}, #endif #ifdef B460800 {460800, B460800}, #endif #ifdef EXTA {19200, EXTA}, #endif #ifdef EXTB {38400, EXTB}, #endif {0, 0} }; static unsigned getspeed __P((speed_t)); static unsigned getspeed(speed_t code) { int n; for (n=0; speeds[n].baudr; ++n) if (speeds[n].speedcode == code) return speeds[n].baudr; return 38400; /* Assume fifo if ioctl failed */ } /* * return 1 if stdout and stderr are different devices * indicating this program operating with a modem on a * different line */ int Fromcu; /* Were called from cu or yam */ int from_cu(void) { #ifdef HAVE_ST_RDEV struct stat a, b; #if defined(makedev) dev_t help=makedev(0,0); #else int help=0; #endif /* in case fstat fails */ a.st_rdev=b.st_rdev=a.st_dev=b.st_dev=help; fstat(1, &a); fstat(2, &b); #if defined(major) && defined(minor) if (major(a.st_rdev) != major(b.st_rdev) || minor(a.st_rdev) != minor(b.st_rdev)) Fromcu=1; else if (major(a.st_dev) != major(b.st_dev) || minor(a.st_dev) != minor(b.st_dev)) Fromcu=1; else Fromcu=0; #else Fromcu = (a.st_rdev != b.st_rdev) || (a.st_dev != b.st_dev); #endif #else Fromcu = 1; /* a bad guess .. */ #endif return Fromcu; } int Twostop; /* Use two stop bits */ #ifdef READCHECK_FIONREAD /* * Return non 0 if something to read from io descriptor f */ int rdchk(int fd) { static long lf; ioctl(fd, FIONREAD, &lf); return ((int) lf); } #endif #ifdef READCHECK_GETFL unsigned char checked = '\0' ; /* * Nonblocking I/O is a bit different in System V, Release 2 */ int rdchk(int fd) { int lf, savestat; savestat = fcntl(fd, F_GETFL) ; if (savestat == -1) return 0; #ifdef OVERLY_PARANOID if (-1==fcntl(fd, F_SETFL, savestat | O_NDELAY)) return 0; lf = read(fd, &checked, 1) ; if (-1==fcntl(fd, F_SETFL, savestat)) { #ifdef ENABLE_SYSLOG if (enable_syslog) lsyslog(LOG_CRIT,"F_SETFL failed in rdchk(): %s", strerror(errno)); #endif zpfatal("rdchk: F_SETFL failed\n"); /* lose */ /* there is really no way to recover. And we can't tell * the other side what's going on if we can't write to * fd, but we try. */ canit(fd); exit(1); } #else fcntl(fd, F_SETFL, savestat | O_NDELAY); lf = read(fd, &checked, 1) ; fcntl(fd, F_SETFL, savestat); #endif return(lf == -1 && errno==EWOULDBLOCK ? 0 : lf) ; } #endif #ifdef USE_TERMIOS struct termios oldtty, tty; #else # if defined(USE_TERMIO) struct termio oldtty, tty; # else struct sgttyb oldtty, tty; struct tchars oldtch, tch; # endif #endif /* * mode(n) * 3: save old tty stat, set raw mode with flow control * 2: set XON/XOFF for sb/sz with ZMODEM or YMODEM-g * 1: save old tty stat, set raw mode * 0: restore original tty mode */ int io_mode(int fd, int n) { static int did0 = FALSE; vfile("mode:%d", n); switch(n) { #ifdef USE_TERMIOS case 2: /* Un-raw mode used by sz, sb when -g detected */ if(!did0) { did0 = TRUE; tcgetattr(fd,&oldtty); } tty = oldtty; tty.c_iflag = BRKINT|IXON; tty.c_oflag = 0; /* Transparent output */ tty.c_cflag &= ~PARENB; /* Disable parity */ tty.c_cflag |= CS8; /* Set character size = 8 */ if (Twostop) tty.c_cflag |= CSTOPB; /* Set two stop bits */ #ifdef READCHECK tty.c_lflag = protocol==ZM_ZMODEM ? 0 : ISIG; tty.c_cc[VINTR] = protocol==ZM_ZMODEM ? -1 : 030; /* Interrupt char */ #else tty.c_lflag = 0; tty.c_cc[VINTR] = protocol==ZM_ZMODEM ? 03 : 030; /* Interrupt char */ #endif #ifdef _POSIX_VDISABLE if (((int) _POSIX_VDISABLE)!=(-1)) { tty.c_cc[VQUIT] = _POSIX_VDISABLE; /* Quit char */ } else { tty.c_cc[VQUIT] = -1; /* Quit char */ } #else tty.c_cc[VQUIT] = -1; /* Quit char */ #endif #ifdef NFGVMIN tty.c_cc[VMIN] = 1; #else tty.c_cc[VMIN] = 3; /* This many chars satisfies reads */ #endif tty.c_cc[VTIME] = 1; /* or in this many tenths of seconds */ tcsetattr(fd,TCSADRAIN,&tty); return OK; case 1: case 3: if(!did0) { did0 = TRUE; tcgetattr(fd,&oldtty); } tty = oldtty; tty.c_iflag = IGNBRK; if (n==3) /* with flow control */ tty.c_iflag |= IXOFF; /* Setup raw mode: no echo, noncanonical (no edit chars), * no signal generating chars, and no extended chars (^V, * ^O, ^R, ^W). */ tty.c_lflag &= ~(ECHO | ICANON | ISIG | IEXTEN); tty.c_oflag = 0; /* Transparent output */ tty.c_cflag &= ~(PARENB); /* Same baud rate, disable parity */ /* Set character size = 8 */ tty.c_cflag &= ~(CSIZE); tty.c_cflag |= CS8; if (Twostop) tty.c_cflag |= CSTOPB; /* Set two stop bits */ #ifdef NFGVMIN tty.c_cc[VMIN] = 1; /* This many chars satisfies reads */ #else tty.c_cc[VMIN] = HOWMANY; /* This many chars satisfies reads */ #endif tty.c_cc[VTIME] = 1; /* or in this many tenths of seconds */ tcsetattr(fd,TCSADRAIN,&tty); Baudrate = getspeed(cfgetospeed(&tty)); return OK; case 0: if(!did0) return ERROR; tcdrain (fd); /* wait until everything is sent */ tcflush (fd,TCIOFLUSH); /* flush input queue */ tcsetattr (fd,TCSADRAIN,&oldtty); tcflow (fd,TCOON); /* restart output */ return OK; #endif #ifdef USE_TERMIO case 2: /* Un-raw mode used by sz, sb when -g detected */ if(!did0) (void) ioctl(fd, TCGETA, &oldtty); tty = oldtty; tty.c_iflag = BRKINT|IXON; tty.c_oflag = 0; /* Transparent output */ tty.c_cflag &= ~PARENB; /* Disable parity */ tty.c_cflag |= CS8; /* Set character size = 8 */ if (Twostop) tty.c_cflag |= CSTOPB; /* Set two stop bits */ #ifdef READCHECK tty.c_lflag = protocol==ZM_ZMODEM ? 0 : ISIG; tty.c_cc[VINTR] = protocol==ZM_ZMODEM ? -1 : 030; /* Interrupt char */ #else tty.c_lflag = 0; tty.c_cc[VINTR] = protocol==ZM_ZMODEM ? 03 : 030; /* Interrupt char */ #endif tty.c_cc[VQUIT] = -1; /* Quit char */ #ifdef NFGVMIN tty.c_cc[VMIN] = 1; #else tty.c_cc[VMIN] = 3; /* This many chars satisfies reads */ #endif tty.c_cc[VTIME] = 1; /* or in this many tenths of seconds */ (void) ioctl(fd, TCSETAW, &tty); did0 = TRUE; return OK; case 1: case 3: if(!did0) (void) ioctl(fd, TCGETA, &oldtty); tty = oldtty; tty.c_iflag = n==3 ? (IGNBRK|IXOFF) : IGNBRK; /* No echo, crlf mapping, delays, no erase/kill */ tty.c_lflag &= ~(ECHO | ICANON | ISIG); tty.c_oflag = 0; /* Transparent output */ tty.c_cflag &= ~PARENB; /* Same baud rate, disable parity */ tty.c_cflag |= CS8; /* Set character size = 8 */ if (Twostop) tty.c_cflag |= CSTOPB; /* Set two stop bits */ #ifdef NFGVMIN tty.c_cc[VMIN] = 1; /* This many chars satisfies reads */ #else tty.c_cc[VMIN] = HOWMANY; /* This many chars satisfies reads */ #endif tty.c_cc[VTIME] = 1; /* or in this many tenths of seconds */ (void) ioctl(fd, TCSETAW, &tty); did0 = TRUE; Baudrate = getspeed(tty.c_cflag & CBAUD); return OK; case 0: if(!did0) return ERROR; (void) ioctl(fd, TCSBRK, 1); /* Wait for output to drain */ (void) ioctl(fd, TCFLSH, 0); /* Flush input queue */ (void) ioctl(fd, TCSETAW, &oldtty); /* Restore modes */ (void) ioctl(fd, TCXONC,1); /* Restart output */ return OK; #endif #ifdef USE_SGTTY /* * NOTE: this should transmit all 8 bits and at the same time * respond to XOFF/XON flow control. If no FIONREAD or other * READCHECK alternative, also must respond to INTRRUPT char * This doesn't work with V7. It should work with LLITOUT, * but LLITOUT was broken on the machine I tried it on. */ case 2: /* Un-raw mode used by sz, sb when -g detected */ if(!did0) { ioctl(fd, TIOCEXCL, 0); ioctl(fd, TIOCGETP, &oldtty); ioctl(fd, TIOCGETC, &oldtch); #ifdef LLITOUT ioctl(fd, TIOCLGET, &Locmode); #endif } tty = oldtty; tch = oldtch; #ifdef READCHECK tch.t_intrc = Zmodem ? -1:030; /* Interrupt char */ #else tch.t_intrc = Zmodem ? 03:030; /* Interrupt char */ #endif tty.sg_flags |= (ODDP|EVENP|CBREAK); tty.sg_flags &= ~(ALLDELAY|CRMOD|ECHO|LCASE); ioctl(fd, TIOCSETP, &tty); ioctl(fd, TIOCSETC, &tch); #ifdef LLITOUT ioctl(fd, TIOCLBIS, &Locbit); #else bibi(99); /* un-raw doesn't work w/o lit out */ #endif did0 = TRUE; return OK; case 1: case 3: if(!did0) { ioctl(fd, TIOCEXCL, 0); ioctl(fd, TIOCGETP, &oldtty); ioctl(fd, TIOCGETC, &oldtch); #ifdef LLITOUT ioctl(fd, TIOCLGET, &Locmode); #endif } tty = oldtty; tty.sg_flags |= RAW; tty.sg_flags &= ~ECHO; ioctl(fd, TIOCSETP, &tty); did0 = TRUE; Baudrate = getspeed(tty.sg_ospeed); return OK; case 0: if(!did0) return ERROR; ioctl(fd, TIOCSETP, &oldtty); ioctl(fd, TIOCSETC, &oldtch); ioctl(fd, TIOCNXCL, 0); #ifdef LLITOUT ioctl(fd, TIOCLSET, &Locmode); #endif #ifdef TIOCFLUSH { int x=1; ioctl(fd,TIOCFLUSH,&x); } #endif #endif return OK; default: return ERROR; } } void sendbrk(int fd) { #ifdef USE_TERMIOS tcsendbreak(fd,0); #endif #ifdef USE_TERMIO ioctl(fd, TCSBRK, 0); #endif #ifdef USE_SGTTY #ifdef TIOCSBRK sleep(1); ioctl(fd, TIOCSBRK, 0); sleep(1); ioctl(fd, TIOCCBRK, 0); #endif #endif } void purgeline(int fd) { readline_purge(); #ifdef TCFLSH ioctl(fd, TCFLSH, 0); #else lseek(fd, 0L, 2); #endif } /* End of rbsb.c */ lrzsz-0.12.21rc/src/zm.c 644 764 764 46111 6675022130 10064 /* zm.c - zmodem protocol handling lowlevelstuff Copyright (C) until 1998 Chuck Forsberg (OMEN Technology Inc) 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. originally written by Chuck Forsberg */ /* historical comment: -- uwe * Z M . C * ZMODEM protocol primitives * 05-09-88 Chuck Forsberg Omen Technology Inc * * Entry point Functions: * zsbhdr(type, hdr) send binary header * zshhdr(type, hdr) send hex header * zgethdr(hdr, eflag) receive header - binary or hex * zsdata(buf, len, frameend) send data * zrdata(buf, len, bytes_received) receive data * stohdr(pos) store position data in Txhdr * long rclhdr(hdr) recover position offset from header */ #include "zglobal.h" #include unsigned int Rxtimeout = 100; /* Tenths of seconds to wait for something */ /* Globals used by ZMODEM functions */ int Rxframeind; /* ZBIN ZBIN32, or ZHEX type of frame received */ int Rxtype; /* Type of header received */ char Rxhdr[4]; /* Received header */ char Txhdr[4]; /* Transmitted header */ long Txpos; /* Transmitted file position */ int Txfcs32; /* TRUE means send binary frames with 32 bit FCS */ int Crc32t; /* Display flag indicating 32 bit CRC being sent */ int Crc32; /* Display flag indicating 32 bit CRC being received */ int Znulls; /* Number of nulls to send at beginning of ZDATA hdr */ char Attn[ZATTNLEN+1]; /* Attention string rx sends to tx on err */ static char lastsent; /* Last char we sent */ int turbo_escape; int bytes_per_error=0; static const char *frametypes[] = { "Carrier Lost", /* -3 */ "TIMEOUT", /* -2 */ "ERROR", /* -1 */ #define FTOFFSET 3 "ZRQINIT", "ZRINIT", "ZSINIT", "ZACK", "ZFILE", "ZSKIP", "ZNAK", "ZABORT", "ZFIN", "ZRPOS", "ZDATA", "ZEOF", "ZFERR", "ZCRC", "ZCHALLENGE", "ZCOMPL", "ZCAN", "ZFREECNT", "ZCOMMAND", "ZSTDERR", "xxxxx" #define FRTYPES 22 /* Total number of frame types in this array */ /* not including psuedo negative entries */ }; #define badcrc _("Bad CRC") /* static char *badcrc = "Bad CRC"; */ static inline int noxrd7 __P ((void)); static inline int zdlread __P ((void)); static int zdlread2 __P ((int)) LRZSZ_ATTRIB_REGPARM(1); static inline int zgeth1 __P ((void)); static void zputhex __P ((int c, char *pos)); static inline int zgethex __P ((void)); static int zrbhdr __P ((char *hdr)); static int zrbhdr32 __P ((char *hdr)); static int zrhhdr __P ((char *hdr)); static char zsendline_tab[256]; static int zrdat32 __P ((char *buf, int length, size_t *)); static void zsbh32 __P ((char *hdr, int type)); static inline void zsendline_s __P((const char *s, size_t count)); extern int zmodem_requested; #define sendline(c) putchar((c) & 0377) #define xsendline(c) putchar(c) /* * Read a character from the modem line with timeout. * Eat parity, XON and XOFF characters. */ static inline int noxrd7(void) { register int c; for (;;) { if ((c = READLINE_PF(Rxtimeout)) < 0) return c; switch (c &= 0177) { case XON: case XOFF: continue; default: if (Zctlesc && !(c & 0140)) continue; case '\r': case '\n': case ZDLE: return c; } } } static inline int zgeth1(void) { register int c, n; if ((c = noxrd7()) < 0) return c; n = c - '0'; if (n > 9) n -= ('a' - ':'); if (n & ~0xF) return ERROR; if ((c = noxrd7()) < 0) return c; c -= '0'; if (c > 9) c -= ('a' - ':'); if (c & ~0xF) return ERROR; c += (n<<4); return c; } /* Decode two lower case hex digits into an 8 bit byte value */ static inline int zgethex(void) { register int c; c = zgeth1(); VPRINTF(9,("zgethex: %02X", c)); return c; } /* * Read a byte, checking for ZMODEM escape encoding * including CAN*5 which represents a quick abort */ static inline int zdlread(void) { int c; /* Quick check for non control characters */ if ((c = READLINE_PF(Rxtimeout)) & 0140) return c; return zdlread2(c); } /* no, i don't like gotos. -- uwe */ static int zdlread2(int c) { goto jump_over; /* bad style */ again: /* Quick check for non control characters */ if ((c = READLINE_PF(Rxtimeout)) & 0140) return c; jump_over: switch (c) { case ZDLE: break; case XON: case (XON|0200): case XOFF: case (XOFF|0200): goto again; default: if (Zctlesc && !(c & 0140)) { goto again; } return c; } again2: if ((c = READLINE_PF(Rxtimeout)) < 0) return c; if (c == CAN && (c = READLINE_PF(Rxtimeout)) < 0) return c; if (c == CAN && (c = READLINE_PF(Rxtimeout)) < 0) return c; if (c == CAN && (c = READLINE_PF(Rxtimeout)) < 0) return c; switch (c) { case CAN: return GOTCAN; case ZCRCE: case ZCRCG: case ZCRCQ: case ZCRCW: return (c | GOTOR); case ZRUB0: return 0177; case ZRUB1: return 0377; case XON: case (XON|0200): case XOFF: case (XOFF|0200): goto again2; default: if (Zctlesc && ! (c & 0140)) { goto again2; } if ((c & 0140) == 0100) return (c ^ 0100); break; } VPRINTF(2,(_("Bad escape sequence %x"), c)); return ERROR; } /* * Send character c with ZMODEM escape sequence encoding. * Escape XON, XOFF. Escape CR following @ (Telenet net escape) */ inline void zsendline(int c) { switch(zsendline_tab[(unsigned) (c&=0377)]) { case 0: xsendline(lastsent = c); break; case 1: xsendline(ZDLE); c ^= 0100; xsendline(lastsent = c); break; case 2: if ((lastsent & 0177) != '@') { xsendline(lastsent = c); } else { xsendline(ZDLE); c ^= 0100; xsendline(lastsent = c); } break; } } static inline void zsendline_s(const char *s, size_t count) { const char *end=s+count; while(s!=end) { int last_esc=0; const char *t=s; while (t!=end) { last_esc=zsendline_tab[(unsigned) ((*t) & 0377)]; if (last_esc) break; t++; } if (t!=s) { fwrite(s,(size_t)(t-s),1,stdout); lastsent=t[-1]; s=t; } if (last_esc) { int c=*s; switch(last_esc) { case 0: xsendline(lastsent = c); break; case 1: xsendline(ZDLE); c ^= 0100; xsendline(lastsent = c); break; case 2: if ((lastsent & 0177) != '@') { xsendline(lastsent = c); } else { xsendline(ZDLE); c ^= 0100; xsendline(lastsent = c); } break; } s++; } } } /* Send ZMODEM binary header hdr of type type */ void zsbhdr(int type, char *hdr) { register int n; register unsigned short crc; VPRINTF(3,("zsbhdr: %s %lx", frametypes[type+FTOFFSET], rclhdr(hdr))); if (type == ZDATA) for (n = Znulls; --n >=0; ) xsendline(0); xsendline(ZPAD); xsendline(ZDLE); Crc32t=Txfcs32; if (Crc32t) zsbh32(hdr, type); else { xsendline(ZBIN); zsendline(type); crc = updcrc(type, 0); for (n=4; --n >= 0; ++hdr) { zsendline(*hdr); crc = updcrc((0377& *hdr), crc); } crc = updcrc(0,updcrc(0,crc)); zsendline(crc>>8); zsendline(crc); } if (type != ZDATA) flushmo(); } /* Send ZMODEM binary header hdr of type type */ static void zsbh32(char *hdr, int type) { register int n; register unsigned long crc; xsendline(ZBIN32); zsendline(type); crc = 0xFFFFFFFFL; crc = UPDC32(type, crc); for (n=4; --n >= 0; ++hdr) { crc = UPDC32((0377 & *hdr), crc); zsendline(*hdr); } crc = ~crc; for (n=4; --n >= 0;) { zsendline((int)crc); crc >>= 8; } } /* Send ZMODEM HEX header hdr of type type */ void zshhdr(int type, char *hdr) { register int n; register unsigned short crc; char s[30]; size_t len; VPRINTF(3,("zshhdr: %s %lx", frametypes[(type & 0x7f)+FTOFFSET], rclhdr(hdr))); s[0]=ZPAD; s[1]=ZPAD; s[2]=ZDLE; s[3]=ZHEX; zputhex(type & 0x7f ,s+4); len=6; Crc32t = 0; crc = updcrc((type & 0x7f), 0); for (n=4; --n >= 0; ++hdr) { zputhex(*hdr,s+len); len += 2; crc = updcrc((0377 & *hdr), crc); } crc = updcrc(0,updcrc(0,crc)); zputhex(crc>>8,s+len); zputhex(crc,s+len+2); len+=4; /* Make it printable on remote machine */ s[len++]=015; s[len++]=0212; /* * Uncork the remote in case a fake XOFF has stopped data flow */ if (type != ZFIN && type != ZACK) { s[len++]=021; } flushmo(); write(1,s,len); } /* * Send binary array buf of length length, with ending ZDLE sequence frameend */ static const char *Zendnames[] = { "ZCRCE", "ZCRCG", "ZCRCQ", "ZCRCW"}; void zsdata(const char *buf, size_t length, int frameend) { register unsigned short crc; VPRINTF(3,("zsdata: %lu %s", (unsigned long) length, Zendnames[(frameend-ZCRCE)&3])); crc = 0; do { zsendline(*buf); crc = updcrc((0377 & *buf), crc); buf++; } while (--length>0); xsendline(ZDLE); xsendline(frameend); crc = updcrc(frameend, crc); crc = updcrc(0,updcrc(0,crc)); zsendline(crc>>8); zsendline(crc); if (frameend == ZCRCW) { xsendline(XON); flushmo(); } } void zsda32(const char *buf, size_t length, int frameend) { int c; unsigned long crc; int i; VPRINTF(3,("zsdat32: %d %s", length, Zendnames[(frameend-ZCRCE)&3])); crc = 0xFFFFFFFFL; zsendline_s(buf,length); for (; length; length--) { c = *buf & 0377; crc = UPDC32(c, crc); buf++; } xsendline(ZDLE); xsendline(frameend); crc = UPDC32(frameend, crc); crc = ~crc; for (i=4; --i >= 0;) { c=(int) crc; if (c & 0140) xsendline(lastsent = c); else zsendline(c); crc >>= 8; } if (frameend == ZCRCW) { xsendline(XON); flushmo(); } } #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ <= 4) # undef DEBUG_BLOCKSIZE #endif #ifdef DEBUG_BLOCKSIZE struct debug_blocksize { int size; long count; }; struct debug_blocksize blocksizes[]={ {32,0}, {64,0}, {128,0}, {256,0}, {512,0}, {1024,0}, {2048,0}, {4096,0}, {8192,0}, {0,0} }; static inline void count_blk(int size) { int i; for (i=0;blocksizes[i].size;i++) { if (blocksizes[i].size==size) { blocksizes[i].count++; return; } } blocksizes[i].count++; } static void printout_blocksizes(void) __attribute__((__destructor__)); static void printout_blocksizes(void) { int i; for (i=0;blocksizes[i].size;i++) { if (blocksizes[i].count) { lsyslog(LOG_DEBUG,"%4d byte: %ld blocks\n", blocksizes[i].size,blocksizes[i].count); } } if (blocksizes[i].count) { lsyslog(LOG_DEBUG,"unk. byte: %ld blocks", blocksizes[i].count); } } #define COUNT_BLK(x) count_blk(x) #else #define COUNT_BLK(x) #endif /* * Receive array buf of max length with ending ZDLE sequence * and CRC. Returns the ending character or error code. * NB: On errors may store length+1 bytes! */ int zrdata(char *buf, int length, size_t *bytes_received) { register int c; register unsigned short crc; register char *end; register int d; *bytes_received=0; if (Rxframeind == ZBIN32) return zrdat32(buf, length, bytes_received); crc = 0; end = buf + length; while (buf <= end) { if ((c = zdlread()) & ~0377) { crcfoo: switch (c) { case GOTCRCE: case GOTCRCG: case GOTCRCQ: case GOTCRCW: { d = c; c &= 0377; crc = updcrc(c, crc); if ((c = zdlread()) & ~0377) goto crcfoo; crc = updcrc(c, crc); if ((c = zdlread()) & ~0377) goto crcfoo; crc = updcrc(c, crc); if (crc & 0xFFFF) { zperr(badcrc); return ERROR; } *bytes_received = length - (end - buf); COUNT_BLK(*bytes_received); VPRINTF(3,("zrdata: %lu %s", (unsigned long) (*bytes_received), Zendnames[(d-GOTCRCE)&3])); return d; } case GOTCAN: zperr(_("Sender Canceled")); return ZCAN; case TIMEOUT: zperr(_("TIMEOUT")); return c; default: zperr(_("Bad data subpacket")); return c; } } *buf++ = c; crc = updcrc(c, crc); } zperr(_("Data subpacket too long")); return ERROR; } static int zrdat32(char *buf, int length, size_t *bytes_received) { register int c; register unsigned long crc; register char *end; register int d; crc = 0xFFFFFFFFL; end = buf + length; while (buf <= end) { if ((c = zdlread()) & ~0377) { crcfoo: switch (c) { case GOTCRCE: case GOTCRCG: case GOTCRCQ: case GOTCRCW: d = c; c &= 0377; crc = UPDC32(c, crc); if ((c = zdlread()) & ~0377) goto crcfoo; crc = UPDC32(c, crc); if ((c = zdlread()) & ~0377) goto crcfoo; crc = UPDC32(c, crc); if ((c = zdlread()) & ~0377) goto crcfoo; crc = UPDC32(c, crc); if ((c = zdlread()) & ~0377) goto crcfoo; crc = UPDC32(c, crc); if (crc != 0xDEBB20E3) { zperr(badcrc); return ERROR; } *bytes_received = length - (end - buf); COUNT_BLK(*bytes_received); VPRINTF(3,("zrdat32: %lu %s", (unsigned long) *bytes_received, Zendnames[(d-GOTCRCE)&3])); return d; case GOTCAN: zperr(_("Sender Canceled")); return ZCAN; case TIMEOUT: zperr(_("TIMEOUT")); return c; default: zperr(_("Bad data subpacket")); return c; } } *buf++ = c; crc = UPDC32(c, crc); } zperr(_("Data subpacket too long")); return ERROR; } /* * Read a ZMODEM header to hdr, either binary or hex. * eflag controls local display of non zmodem characters: * 0: no display * 1: display printing characters only * 2: display all non ZMODEM characters * On success, set Zmodem to 1, set Rxpos and return type of header. * Otherwise return negative on error. * Return ERROR instantly if ZCRCW sequence, for fast error recovery. */ int zgethdr(char *hdr, int eflag, size_t *Rxpos) { register int c, cancount; unsigned int max_garbage; /* Max bytes before start of frame */ size_t rxpos=0; /* keep gcc happy */ max_garbage = Zrwindow + Baudrate; Rxframeind = Rxtype = 0; startover: cancount = 5; again: /* Return immediate ERROR if ZCRCW sequence seen */ switch (c = READLINE_PF(Rxtimeout)) { case RCDO: case TIMEOUT: goto fifi; case CAN: gotcan: if (--cancount <= 0) { c = ZCAN; goto fifi; } switch (c = READLINE_PF(1)) { case TIMEOUT: goto again; case ZCRCW: c = ERROR; /* **** FALL THRU TO **** */ case RCDO: goto fifi; default: break; case CAN: if (--cancount <= 0) { c = ZCAN; goto fifi; } goto again; } /* **** FALL THRU TO **** */ default: agn2: if ( --max_garbage == 0) { zperr(_("Garbage count exceeded")); return(ERROR); } if (eflag && ((c &= 0177) & 0140) && Verbose) vchar(c); else if (eflag > 1 && Verbose) vchar(c); goto startover; case ZPAD|0200: /* This is what we want. */ case ZPAD: /* This is what we want. */ break; } cancount = 5; splat: switch (c = noxrd7()) { case ZPAD: goto splat; case RCDO: case TIMEOUT: goto fifi; default: goto agn2; case ZDLE: /* This is what we want. */ break; } switch (c = noxrd7()) { case RCDO: case TIMEOUT: goto fifi; case ZBIN: Rxframeind = ZBIN; Crc32 = FALSE; c = zrbhdr(hdr); break; case ZBIN32: Crc32 = Rxframeind = ZBIN32; c = zrbhdr32(hdr); break; case ZHEX: Rxframeind = ZHEX; Crc32 = FALSE; c = zrhhdr(hdr); break; case CAN: goto gotcan; default: goto agn2; } rxpos = hdr[ZP3] & 0377; rxpos = (rxpos<<8) + (hdr[ZP2] & 0377); rxpos = (rxpos<<8) + (hdr[ZP1] & 0377); rxpos = (rxpos<<8) + (hdr[ZP0] & 0377); fifi: switch (c) { case GOTCAN: c = ZCAN; /* **** FALL THRU TO **** */ case ZNAK: case ZCAN: case ERROR: case TIMEOUT: case RCDO: zperr(_("Got %s"), frametypes[c+FTOFFSET]); /* **** FALL THRU TO **** */ default: if (c >= -3 && c <= FRTYPES) VPRINTF(3,("zgethdr: %s %lx", frametypes[c+FTOFFSET], (unsigned long) rxpos)); else VPRINTF(3,("zgethdr: %d %lx", c, (unsigned long) rxpos)); } if (Rxpos) *Rxpos=rxpos; return c; } /* Receive a binary style header (type and position) */ static int zrbhdr(char *hdr) { register int c, n; register unsigned short crc; if ((c = zdlread()) & ~0377) return c; Rxtype = c; crc = updcrc(c, 0); for (n=4; --n >= 0; ++hdr) { if ((c = zdlread()) & ~0377) return c; crc = updcrc(c, crc); *hdr = c; } if ((c = zdlread()) & ~0377) return c; crc = updcrc(c, crc); if ((c = zdlread()) & ~0377) return c; crc = updcrc(c, crc); if (crc & 0xFFFF) { zperr(badcrc); return ERROR; } protocol = ZM_ZMODEM; zmodem_requested=TRUE; return Rxtype; } /* Receive a binary style header (type and position) with 32 bit FCS */ static int zrbhdr32(char *hdr) { register int c, n; register unsigned long crc; if ((c = zdlread()) & ~0377) return c; Rxtype = c; crc = 0xFFFFFFFFL; crc = UPDC32(c, crc); #ifdef DEBUGZ VPRINTF(3,("zrbhdr32 c=%X crc=%lX", c, crc)i); #endif for (n=4; --n >= 0; ++hdr) { if ((c = zdlread()) & ~0377) return c; crc = UPDC32(c, crc); *hdr = c; #ifdef DEBUGZ VPRINTF(3,("zrbhdr32 c=%X crc=%lX", c, crc)); #endif } for (n=4; --n >= 0;) { if ((c = zdlread()) & ~0377) return c; crc = UPDC32(c, crc); #ifdef DEBUGZ VPRINTF(3,("zrbhdr32 c=%X crc=%lX", c, crc)); #endif } if (crc != 0xDEBB20E3) { zperr(badcrc); return ERROR; } protocol = ZM_ZMODEM; zmodem_requested=TRUE; return Rxtype; } /* Receive a hex style header (type and position) */ static int zrhhdr(char *hdr) { register int c; register unsigned short crc; register int n; if ((c = zgethex()) < 0) return c; Rxtype = c; crc = updcrc(c, 0); for (n=4; --n >= 0; ++hdr) { if ((c = zgethex()) < 0) return c; crc = updcrc(c, crc); *hdr = c; } if ((c = zgethex()) < 0) return c; crc = updcrc(c, crc); if ((c = zgethex()) < 0) return c; crc = updcrc(c, crc); if (crc & 0xFFFF) { zperr(badcrc); return ERROR; } switch ( c = READLINE_PF(1)) { case 0215: /* **** FALL THRU TO **** */ case 015: /* Throw away possible cr/lf */ READLINE_PF(1); break; } protocol = ZM_ZMODEM; zmodem_requested=TRUE; return Rxtype; } /* Write a byte as two hex digits */ static void zputhex(int c, char *pos) { static char digits[] = "0123456789abcdef"; VPRINTF(9,("zputhex: %02X", c)); pos[0]=digits[(c&0xF0)>>4]; pos[1]=digits[c&0x0F]; } void zsendline_init(void) { int i; for (i=0;i<256;i++) { if (i & 0140) zsendline_tab[i]=0; else { switch(i) { case ZDLE: case XOFF: /* ^Q */ case XON: /* ^S */ case (XOFF | 0200): case (XON | 0200): zsendline_tab[i]=1; break; case 020: /* ^P */ case 0220: if (turbo_escape) zsendline_tab[i]=0; else zsendline_tab[i]=1; break; case 015: case 0215: if (Zctlesc) zsendline_tab[i]=1; else if (!turbo_escape) zsendline_tab[i]=2; else zsendline_tab[i]=0; break; default: if (Zctlesc) zsendline_tab[i]=1; else zsendline_tab[i]=0; } } } } /* Store pos in Txhdr */ void stohdr(size_t pos) { long lpos=(long) pos; Txhdr[ZP0] = lpos; Txhdr[ZP1] = lpos>>8; Txhdr[ZP2] = lpos>>16; Txhdr[ZP3] = lpos>>24; } /* Recover a long integer from a header */ long rclhdr(char *hdr) { long l; l = (hdr[ZP3] & 0377); l = (l << 8) | (hdr[ZP2] & 0377); l = (l << 8) | (hdr[ZP1] & 0377); l = (l << 8) | (hdr[ZP0] & 0377); return l; } /* End of zm.c */ lrzsz-0.12.21rc/src/protname.c 666 764 764 2104 6607440604 11246 /* protname.c - return the name of the protocol used 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 "zglobal.h" /* this code was duplicate in lrz.c and lsz.c */ const char * protname(void) { const char *prot_name; switch(protocol) { case ZM_XMODEM: prot_name="XMODEM"; break; case ZM_YMODEM: prot_name="YMODEM"; break; default: prot_name="ZMODEM"; break; } return prot_name; } lrzsz-0.12.21rc/src/tcp.c 644 764 764 7515 6736335615 10226 /* tcp.c - tcp handling for lrzsz Copyright (C) 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. originally written by Uwe Ohse */ #include "config.h" #include #include #include #include #ifdef HAVE_ARPA_INET_H #include #endif #include #include #include #include #include "zglobal.h" #include #include "error.h" static RETSIGTYPE tcp_alarm_handler(int dummy) { dummy++; /* doesn't need to do anything */ } /* server/lsz: * Get a TCP socket, bind it, listen, figure out the port, * and build the magic string for lrz in "buf". */ int tcp_server (char *buf) { int sock; struct sockaddr_in s; struct sockaddr_in t; int on=1; socklen_t len; if ((sock = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { error(1,errno,"socket"); } if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof (on)) < 0) { error(1,errno,"setsockopt (reuse address)"); } memset (&s, 0, sizeof (s)); s.sin_family = AF_INET; s.sin_port=0; /* let system fill it in */ s.sin_addr.s_addr=htonl(INADDR_ANY); if (bind(sock, (struct sockaddr *)&s, sizeof (s)) < 0) { error(1,errno,"bind"); } len=sizeof(t); if (getsockname (sock, (struct sockaddr *) &t, &len)) { error(1,errno,"getsockname"); } sprintf(buf,"[%s] <%d>\n",inet_ntoa(t.sin_addr),ntohs(t.sin_port)); if (listen(sock, 1) < 0) { error(1,errno,"listen"); } getsockname (sock, (struct sockaddr *) &t, &len); return (sock); } /* server/lsz: accept a connection */ int tcp_accept (int d) { int so; struct sockaddr_in s; socklen_t namelen; int num=0; namelen = sizeof(s); memset((char*)&s,0, namelen); retry: signal(SIGALRM, tcp_alarm_handler); alarm(30); if ((so = accept(d, (struct sockaddr*)&s, &namelen)) < 0) { if (errno == EINTR) { if (++num<=5) goto retry; } error(1,errno,"accept"); } alarm(0); return so; } /* client/lrz: * "Connect" to the TCP socket decribed in "buf" and * return the connected socket. */ int tcp_connect (char *buf) { int sock; struct sockaddr_in s_in; char *p; char *q; memset(&s_in,0,sizeof(s_in)); s_in.sin_family = AF_INET; /* i _really_ distrust scanf & co. Or maybe i distrust bad input */ if (*buf!='[') { error(1,0,_("tcp_connect: illegal format1\n")); } p=strchr(buf+1,']'); if (!p) { error(1,0,_("tcp_connect: illegal format2\n")); } *p++=0; s_in.sin_addr.s_addr=inet_addr(buf+1); #ifndef INADDR_NONE #define INADDR_NONE (-1) #endif if (s_in.sin_addr.s_addr== (unsigned long) INADDR_NONE) { struct hostent *h=gethostbyname(buf+1); if (!h) error(1,0,_("tcp_connect: illegal format3\n")); memcpy(& s_in.sin_addr.s_addr,h->h_addr,h->h_length); } while (isspace((unsigned char)(*p))) p++; if (*p!='<') { error(1,0,_("tcp_connect: illegal format4\n")); } q=strchr(p+1,'>'); if (!q) error(1,0,_("tcp_connect: illegal format5\n")); s_in.sin_port = htons(strtol(p+1,NULL,10)); if ((sock = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) { error(1,errno,"socket"); } signal(SIGALRM, tcp_alarm_handler); alarm(30); if (connect (sock, (struct sockaddr *) &s_in, sizeof (s_in)) < 0) { error(1,errno,"connect"); } alarm(0); return (sock); } lrzsz-0.12.21rc/src/lsyslog.c 644 764 764 3660 6642657334 11132 /* lsyslog.c - wrapper for the syslog function Copyright (C) 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" #ifdef ENABLE_SYSLOG #include "zglobal.h" #include #include #include #endif #if __STDC__ # include # define VA_START(args, lastarg) va_start(args, lastarg) # define WAYTOGO #else # include # define VA_START(args, lastarg) va_start(args) #endif void #ifdef WAYTOGO lsyslog(int prio, const char *format, ...) #else lsyslog(prio,format,va_alist) int prio; const char *format; va_dcl #endif { #ifdef ENABLE_SYSLOG static char *username=NULL; static char uid_string[20]=""; /* i'd really hate this function to fail! */ char *s=NULL; static int init_done=0; va_list ap; if (!enable_syslog) return; if (!init_done) { uid_t uid; struct passwd *pwd; init_done=1; uid=getuid(); pwd=getpwuid(uid); if (pwd && pwd->pw_name && *pwd->pw_name) { username=strdup(pwd->pw_name); } if (!username) { username=uid_string; sprintf(uid_string,"#%lu",(unsigned long) uid); } } VA_START(ap, format); vasprintf(&s,format, ap); va_end(ap); syslog(prio,"[%s] %s",username,s); free(s); #else (void) prio; /* get rid of warning */ (void) format; /* get rid of warning */ #endif } lrzsz-0.12.21rc/src/canit.c 644 764 764 2504 6641642076 10524 /* canit - cancel zmodem connection Copyright (C) until 1988 Chuck Forsberg (Omen Technology INC) Copyright (C) 1994 Matt Porter, Michael D. Black 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 "zglobal.h" #define SS_NORMAL 0 #include #include #include #include #include #include #include /* send cancel string to get the other end to shut up */ void canit (int fd) { static char canistr[] = { 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 0 }; purgeline(fd); write(fd,canistr,strlen(canistr)); if (fd==0) write(1,canistr,strlen(canistr)); } lrzsz-0.12.21rc/src/lsz.c 644 764 764 165144 6736336246 10314 /* lsz - send files with x/y/zmodem Copyright (C) until 1988 Chuck Forsberg (Omen Technology INC) Copyright (C) 1994 Matt Porter, Michael D. Black 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. originally written by Chuck Forsberg */ #include "zglobal.h" /* char *getenv(); */ #define SS_NORMAL 0 #include #include #include #include #include #include #include #ifndef R_OK # define R_OK 4 #endif #if defined(HAVE_SYS_MMAN_H) && defined(HAVE_MMAP) # include size_t mm_size; void *mm_addr=NULL; #else # undef HAVE_MMAP #endif #include "timing.h" #include "long-options.h" #include "xstrtoul.h" #include "error.h" #ifndef STRICT_PROTOTYPES extern time_t time(); extern char *strerror(); extern char *strstr(); #endif #ifndef HAVE_ERRNO_DECLARATION extern int errno; #endif unsigned Baudrate=2400; /* Default, should be set by first mode() call */ unsigned Txwindow; /* Control the size of the transmitted window */ unsigned Txwspac; /* Spacing between zcrcq requests */ unsigned Txwcnt; /* Counter used to space ack requests */ size_t Lrxpos; /* Receiver's last reported offset */ int errors; enum zm_type_enum protocol; int under_rsh=FALSE; extern int turbo_escape; static int no_unixmode; int Canseek=1; /* 1: can; 0: only rewind, -1: neither */ static int zsendfile __P ((struct zm_fileinfo *zi, const char *buf, size_t blen)); static int getnak __P ((void)); static int wctxpn __P ((struct zm_fileinfo *)); static int wcs __P ((const char *oname, const char *remotename)); static size_t zfilbuf __P ((struct zm_fileinfo *zi)); static size_t filbuf __P ((char *buf, size_t count)); static int getzrxinit __P ((void)); static int calc_blklen __P ((long total_sent)); static int sendzsinit __P ((void)); static int wctx __P ((struct zm_fileinfo *)); static int zsendfdata __P ((struct zm_fileinfo *)); static int getinsync __P ((struct zm_fileinfo *, int flag)); static void countem __P ((int argc, char **argv)); static void chkinvok __P ((const char *s)); static void usage __P ((int exitcode, const char *what)); static int zsendcmd __P ((const char *buf, size_t blen)); static void saybibi __P ((void)); static int wcsend __P ((int argc, char *argp[])); static int wcputsec __P ((char *buf, int sectnum, size_t cseclen)); static void usage1 __P ((int exitcode)); #ifdef ENABLE_SYSLOG #define DO_SYSLOG(message) do { \ if (enable_syslog) { \ const char *shortname; \ if (!zi->fname) \ shortname="no.name"; \ else { \ shortname=strrchr(zi->fname,'/'); \ if (!shortname) \ shortname=zi->fname; \ else \ shortname++; \ } \ lsyslog message ; \ } \ } while(0) #else #define DO_SYSLOG(message) do { } while(0) #endif #define ZSDATA(x,y,z) \ do { if (Crc32t) {zsda32(x,y,z); } else {zsdata(x,y,z);}} while(0) #ifdef HAVE_MMAP #define DATAADR (mm_addr ? ((char *)mm_addr)+zi->bytes_sent : txbuf) #else #define DATAADR (txbuf) #endif int Filesleft; long Totalleft; size_t buffersize=16384; #ifdef HAVE_MMAP int use_mmap=1; #endif /* * 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 char Myattn[] = { 0 }; #else char Myattn[] = { 03, 0336, 0 }; #endif FILE *input_f; #define MAX_BLOCK 8192 char *txbuf; long vpos = 0; /* Number of bytes read from file */ char Lastrx; char Crcflg; int Verbose=0; int Restricted=0; /* restricted; no /.. or ../ in filenames */ int Quiet=0; /* overrides logic that would otherwise set verbose */ int Ascii=0; /* Add CR's for brain damaged programs */ int Fullname=0; /* transmit full pathname */ int Unlinkafter=0; /* Unlink file after it is sent */ int Dottoslash=0; /* Change foo.bar.baz to foo/bar/baz */ int firstsec; int errcnt=0; /* number of files unreadable */ size_t blklen=128; /* length of transmitted records */ int Optiong; /* Let it rip no wait for sector ACK's */ int Totsecs; /* total number of sectors this file */ int Filcnt=0; /* count of number of files opened */ int Lfseen=0; unsigned Rxbuflen = 16384; /* Receiver's max buffer length */ unsigned Tframlen = 0; /* Override for tx frame length */ unsigned blkopt=0; /* Override value for zmodem blklen */ int Rxflags = 0; int Rxflags2 = 0; size_t bytcnt; int Wantfcs32 = TRUE; /* want to send 32 bit FCS */ char Lzconv; /* Local ZMODEM file conversion request */ char Lzmanag; /* Local ZMODEM file management request */ int Lskipnocor; char Lztrans; char zconv; /* ZMODEM file conversion request */ char zmanag; /* ZMODEM file management request */ char ztrans; /* ZMODEM file transport request */ int command_mode; /* Send a command, then exit. */ int Cmdtries = 11; int Cmdack1; /* Rx ACKs command, then do it */ int Exitcode; int enable_timesync=0; size_t Lastsync; /* Last offset to which we got a ZRPOS */ int Beenhereb4; /* How many times we've been ZRPOS'd same place */ int no_timeout=FALSE; size_t max_blklen=1024; size_t start_blklen=0; int zmodem_requested; time_t stop_time=0; char *tcp_server_address=0; int tcp_socket=-1; int tcp_flag=0; int error_count; #define OVERHEAD 18 #define OVER_ERR 20 #define MK_STRING(x) #x #ifdef ENABLE_SYSLOG # if defined(ENABLE_SYSLOG_FORCE) || defined(ENABLE_SYSLOG_DEFAULT) int enable_syslog=TRUE; # else int enable_syslog=FALSE; # endif #endif jmp_buf intrjmp; /* For the interrupt on RX CAN */ static long min_bps; static long min_bps_time; static int io_mode_fd=0; static int zrqinits_sent=0; static int play_with_sigint=0; /* called by signal interrupt or terminate to clean things up */ RETSIGTYPE bibi (int n) { canit(STDOUT_FILENO); fflush (stdout); io_mode (io_mode_fd,0); if (n == 99) error (0, 0, _ ("io_mode(,2) in rbsb.c not implemented\n")); else error (0, 0, _ ("caught signal %d; exiting"), n); if (n == SIGQUIT) abort (); exit (128 + n); } /* Called when ZMODEM gets an interrupt (^C) */ static RETSIGTYPE onintr(int n) { signal(SIGINT, SIG_IGN); n++; /* use it */ longjmp(intrjmp, -1); } int Zctlesc; /* Encode control characters */ const char *program_name = "sz"; int Zrwindow = 1400; /* RX window size (controls garbage count) */ static struct option const long_options[] = { {"append", no_argument, NULL, '+'}, {"twostop", no_argument, NULL, '2'}, {"try-8k", no_argument, NULL, '8'}, {"start-8k", no_argument, NULL, '9'}, {"try-4k", no_argument, NULL, '4'}, {"start-4k", no_argument, NULL, '5'}, {"ascii", no_argument, NULL, 'a'}, {"binary", no_argument, NULL, 'b'}, {"bufsize", required_argument, NULL, 'B'}, {"cmdtries", required_argument, NULL, 'C'}, {"command", required_argument, NULL, 'c'}, {"immediate-command", required_argument, NULL, 'i'}, {"dot-to-slash", no_argument, NULL, 'd'}, {"full-path", no_argument, NULL, 'f'}, {"escape", no_argument, NULL, 'e'}, {"rename", no_argument, NULL, 'E'}, {"help", no_argument, NULL, 'h'}, {"crc-check", no_argument, NULL, 'H'}, {"1024", no_argument, NULL, 'k'}, {"1k", no_argument, NULL, 'k'}, {"packetlen", required_argument, NULL, 'L'}, {"framelen", required_argument, NULL, 'l'}, {"min-bps", required_argument, NULL, 'm'}, {"min-bps-time", required_argument, NULL, 'M'}, {"newer", no_argument, NULL, 'n'}, {"newer-or-longer", no_argument, NULL, 'N'}, {"16-bit-crc", no_argument, NULL, 'o'}, {"disable-timeouts", no_argument, NULL, 'O'}, {"disable-timeout", no_argument, NULL, 'O'}, /* i can't get it right */ {"protect", no_argument, NULL, 'p'}, {"resume", no_argument, NULL, 'r'}, {"restricted", no_argument, NULL, 'R'}, {"quiet", no_argument, NULL, 'q'}, {"stop-at", required_argument, NULL, 's'}, {"syslog", optional_argument, NULL , 2}, {"timesync", no_argument, NULL, 'S'}, {"timeout", required_argument, NULL, 't'}, {"turbo", no_argument, NULL, 'T'}, {"unlink", no_argument, NULL, 'u'}, {"unrestrict", no_argument, NULL, 'U'}, {"verbose", no_argument, NULL, 'v'}, {"windowsize", required_argument, NULL, 'w'}, {"xmodem", no_argument, NULL, 'X'}, {"ymodem", no_argument, NULL, 1}, {"zmodem", no_argument, NULL, 'Z'}, {"overwrite", no_argument, NULL, 'y'}, {"overwrite-or-skip", no_argument, NULL, 'Y'}, {"delay-startup", required_argument, NULL, 4}, {"tcp-server", no_argument, NULL, 6}, {"tcp-client", required_argument, NULL, 7}, {"no-unixmode", no_argument, NULL, 8}, {NULL, 0, NULL, 0} }; static void show_version(void) { printf ("%s (%s) %s\n", program_name, PACKAGE, VERSION); } int main(int argc, char **argv) { char *cp; int npats; int dm; int i; int stdin_files; char **patts; int c; const char *Cmdstr=NULL; /* Pointer to the command string */ unsigned int startup_delay=0; if (((cp = getenv("ZNULLS")) != NULL) && *cp) Znulls = atoi(cp); if (((cp=getenv("SHELL"))!=NULL) && (strstr(cp, "rsh") || strstr(cp, "rksh") || strstr(cp, "rbash") || strstr(cp,"rshell"))) { under_rsh=TRUE; Restricted=1; } if ((cp=getenv("ZMODEM_RESTRICTED"))!=NULL) Restricted=1; from_cu(); chkinvok(argv[0]); #ifdef ENABLE_SYSLOG openlog(program_name,LOG_PID,ENABLE_SYSLOG); #endif setlocale (LC_ALL, ""); bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); parse_long_options (argc, argv, show_version, usage1); Rxtimeout = 600; while ((c = getopt_long (argc, argv, "2+48abB:C:c:dfeEghHi:kL:l:m:M:NnOopRrqsSt:TUuvw:XYy", long_options, (int *) 0))!=EOF) { unsigned long int tmp; char *tmpptr; enum strtol_error s_err; switch (c) { case 0: break; case '+': Lzmanag = ZF1_ZMAPND; break; case '2': Twostop = TRUE; break; case '8': if (max_blklen==8192) start_blklen=8192; else max_blklen=8192; break; case '9': /* this is a longopt .. */ start_blklen=8192; max_blklen=8192; break; case '4': if (max_blklen==4096) start_blklen=4096; else max_blklen=4096; break; case '5': /* this is a longopt .. */ start_blklen=4096; max_blklen=4096; break; case 'a': Lzconv = ZCNL; Ascii = TRUE; break; case 'b': Lzconv = ZCBIN; break; case 'B': if (0==strcmp(optarg,"auto")) buffersize= (size_t) -1; else buffersize=strtol(optarg,NULL,10); #ifdef HAVE_MMAP use_mmap=0; #endif break; case 'C': s_err = xstrtoul (optarg, NULL, 0, &tmp, NULL); Cmdtries = tmp; if (s_err != LONGINT_OK) STRTOL_FATAL_ERROR (optarg, _("command tries"), s_err); break; case 'i': Cmdack1 = ZCACK1; /* **** FALL THROUGH TO **** */ case 'c': command_mode = TRUE; Cmdstr = optarg; break; case 'd': ++Dottoslash; /* **** FALL THROUGH TO **** */ case 'f': Fullname=TRUE; break; case 'e': Zctlesc = 1; break; case 'E': Lzmanag = ZF1_ZMCHNG; break; case 'h': usage(0,NULL); break; case 'H': Lzmanag = ZF1_ZMCRC; break; case 'k': start_blklen=1024; break; case 'L': s_err = xstrtoul (optarg, NULL, 0, &tmp, "ck"); blkopt = tmp; if (s_err != LONGINT_OK) STRTOL_FATAL_ERROR (optarg, _("packetlength"), s_err); if (blkopt<24 || blkopt>MAX_BLOCK) { char meld[256]; sprintf(meld, _("packetlength out of range 24..%ld"), (long) MAX_BLOCK); usage(2,meld); } break; case 'l': s_err = xstrtoul (optarg, NULL, 0, &tmp, "ck"); Tframlen = tmp; if (s_err != LONGINT_OK) STRTOL_FATAL_ERROR (optarg, _("framelength"), s_err); if (Tframlen<32 || Tframlen>MAX_BLOCK) { char meld[256]; sprintf(meld, _("framelength out of range 32..%ld"), (long) MAX_BLOCK); usage(2,meld); } break; case 'm': s_err = xstrtoul (optarg, &tmpptr, 0, &tmp, "km"); min_bps = tmp; if (s_err != LONGINT_OK) STRTOL_FATAL_ERROR (optarg, _("min_bps"), s_err); if (min_bps<0) usage(2,_("min_bps must be >= 0")); break; case 'M': s_err = xstrtoul (optarg, NULL, 0, &tmp, NULL); min_bps_time = tmp; if (s_err != LONGINT_OK) STRTOL_FATAL_ERROR (optarg, _("min_bps_time"), s_err); if (min_bps_time<=1) usage(2,_("min_bps_time must be > 1")); break; case 'N': Lzmanag = ZF1_ZMNEWL; break; case 'n': Lzmanag = ZF1_ZMNEW; break; case 'o': Wantfcs32 = FALSE; break; case 'O': no_timeout = TRUE; break; case 'p': Lzmanag = ZF1_ZMPROT; break; case 'r': if (Lzconv == ZCRESUM) Lzmanag = ZF1_ZMCRC; else Lzconv = ZCRESUM; break; case 'R': Restricted = TRUE; break; case 'q': Quiet=TRUE; Verbose=0; break; case 's': if (isdigit((unsigned char) (*optarg))) { struct tm *tm; time_t t; int hh,mm; char *nex; hh = strtoul (optarg, &nex, 10); if (hh>23) usage(2,_("hour to large (0..23)")); if (*nex!=':') usage(2, _("unparsable stop time\n")); nex++; mm = strtoul (optarg, &nex, 10); if (mm>59) usage(2,_("minute to large (0..59)")); t=time(NULL); tm=localtime(&t); tm->tm_hour=hh; tm->tm_min=hh; stop_time=mktime(tm); if (stop_time1000) usage(2,_("timeout out of range 10..1000")); break; case 'u': ++Unlinkafter; break; case 'U': if (!under_rsh) Restricted=0; else error(1,0, _("security violation: can't do that under restricted shell\n")); break; case 'v': ++Verbose; break; case 'w': s_err = xstrtoul (optarg, NULL, 0, &tmp, NULL); Txwindow = tmp; if (s_err != LONGINT_OK) STRTOL_FATAL_ERROR (optarg, _("window size"), s_err); if (Txwindow < 256) Txwindow = 256; Txwindow = (Txwindow/64) * 64; Txwspac = Txwindow/4; if (blkopt > Txwspac || (!blkopt && Txwspac < MAX_BLOCK)) blkopt = Txwspac; break; case 'X': protocol=ZM_XMODEM; break; case 1: protocol=ZM_YMODEM; break; case 'Z': protocol=ZM_ZMODEM; break; case 'Y': Lskipnocor = TRUE; /* **** FALLL THROUGH TO **** */ case 'y': Lzmanag = ZF1_ZMCLOB; break; case 2: #ifdef ENABLE_SYSLOG # ifndef ENABLE_SYSLOG_FORCE if (optarg && (!strcmp(optarg,"off") || !strcmp(optarg,"no"))) { if (under_rsh) error(0,0, _("cannot turnoff syslog")); else enable_syslog=FALSE; } else enable_syslog=TRUE; # else error(0,0, _("cannot turnoff syslog")); # endif #endif break; case 4: s_err = xstrtoul (optarg, NULL, 0, &tmp, NULL); startup_delay = tmp; if (s_err != LONGINT_OK) STRTOL_FATAL_ERROR (optarg, _("startup delay"), s_err); break; case 6: tcp_flag=2; break; case 7: tcp_flag=3; tcp_server_address=(char *)strdup(optarg); if (!tcp_server_address) { error(1,0,_("out of memory")); } break; case 8: no_unixmode=1; break; default: usage (2,NULL); break; } } if (getuid()!=geteuid()) { error(1,0, _("this program was never intended to be used setuid\n")); } txbuf=malloc(MAX_BLOCK); if (!txbuf) error(1,0,_("out of memory")); zsendline_init(); if (start_blklen==0) { if (protocol == ZM_ZMODEM) { start_blklen=1024; if (Tframlen) { start_blklen=max_blklen=Tframlen; } } else start_blklen=128; } if (argc<2) usage(2,_("need at least one file to send")); if (startup_delay) sleep(startup_delay); #ifdef HAVE_SIGINTERRUPT /* we want interrupted system calls to fail and not to be restarted. */ siginterrupt(SIGALRM,1); #endif npats = argc - optind; patts=&argv[optind]; if (npats < 1 && !command_mode) usage(2,_("need at least one file to send")); if (command_mode && Restricted) { printf(_("Can't send command in restricted mode\n")); exit(1); } if (Fromcu && !Quiet) { if (Verbose == 0) Verbose = 2; } vfile("%s %s\n", program_name, VERSION); if (tcp_flag==2) { char buf[256]; #ifdef MAXHOSTNAMELEN char hn[MAXHOSTNAMELEN]; #else char hn[256]; #endif char *p,*q; int d; /* tell receiver to receive via tcp */ d=tcp_server(buf); p=strchr(buf+1,'<'); p++; q=strchr(p,'>'); *q=0; if (gethostname(hn,sizeof(hn))==-1) { error(1,0, _("hostname too long\n")); } fprintf(stdout,"connect with lrz --tcp-client \"%s:%s\"\n",hn,p); fflush(stdout); /* ok, now that this file is sent we can switch to tcp */ tcp_socket=tcp_accept(d); dup2(tcp_socket,0); dup2(tcp_socket,1); } if (tcp_flag==3) { char buf[256]; char *p; p=strchr(tcp_server_address,':'); if (!p) error(1,0, _("illegal server address\n")); *p++=0; sprintf(buf,"[%s] <%s>\n",tcp_server_address,p); fprintf(stdout,"connecting to %s\n",buf); fflush(stdout); /* we need to switch to tcp mode */ tcp_socket=tcp_connect(buf); dup2(tcp_socket,0); dup2(tcp_socket,1); } { /* we write max_blocklen (data) + 18 (ZModem protocol overhead) * + escape overhead (about 4 %), so buffer has to be * somewhat larger than max_blklen */ char *s=malloc(max_blklen+1024); if (!s) { zperr(_("out of memory")); exit(1); } #ifdef SETVBUF_REVERSED setvbuf(stdout,_IOFBF,s,max_blklen+1024); #else setvbuf(stdout,s,_IOFBF,max_blklen+1024); #endif } blklen=start_blklen; for (i=optind,stdin_files=0;i1) { usage(1,_("can read only one file from stdin")); } else if (stdin_files==1) { io_mode_fd=1; } io_mode(io_mode_fd,1); readline_setup(io_mode_fd, 128, 256); if (signal(SIGINT, bibi) == SIG_IGN) signal(SIGINT, SIG_IGN); else { signal(SIGINT, bibi); play_with_sigint=1; } signal(SIGTERM, bibi); signal(SIGPIPE, bibi); signal(SIGHUP, bibi); if ( protocol!=ZM_XMODEM) { if (protocol==ZM_ZMODEM) { printf("rz\r"); fflush(stdout); } countem(npats, patts); if (protocol == ZM_ZMODEM) { /* throw away any input already received. This doesn't harm * as we invite the receiver to send it's data again, and * might be useful if the receiver has already died or * if there is dirt left if the line */ #ifdef HAVE_SELECT struct timeval t; unsigned char throwaway; fd_set f; #endif purgeline(io_mode_fd); #ifdef HAVE_SELECT t.tv_sec = 0; t.tv_usec = 0; FD_ZERO(&f); FD_SET(io_mode_fd,&f); while (select(1,&f,NULL,NULL,&t)) { if (0==read(io_mode_fd,&throwaway,1)) /* EOF ... */ break; } #endif purgeline(io_mode_fd); stohdr(0L); if (command_mode) Txhdr[ZF0] = ZCOMMAND; zshhdr(ZRQINIT, Txhdr); zrqinits_sent++; #if defined(ENABLE_TIMESYNC) if (Rxflags2 != ZF1_TIMESYNC) /* disable timesync if there are any flags we don't know. * dsz/gsz seems to use some other flags! */ enable_timesync=FALSE; if (Rxflags2 & ZF1_TIMESYNC && enable_timesync) { Totalleft+=6; /* TIMESYNC never needs more */ Filesleft++; } #endif } } fflush(stdout); if (Cmdstr) { if (getzrxinit()) { Exitcode=0200; canit(STDOUT_FILENO); } else if (zsendcmd(Cmdstr, strlen(Cmdstr)+1)) { Exitcode=0200; canit(STDOUT_FILENO); } } else if (wcsend(npats, patts)==ERROR) { Exitcode=0200; canit(STDOUT_FILENO); } fflush(stdout); io_mode(io_mode_fd,0); if (Exitcode) dm=Exitcode; else if (errcnt) dm=1; else dm=0; if (Verbose) { fputs("\r\n",stderr); if (dm) fputs(_("Transfer incomplete\n"),stderr); else fputs(_("Transfer complete\n"),stderr); } exit(dm); /*NOTREACHED*/ } static int send_pseudo(const char *name, const char *data) { char *tmp; const char *p; int ret=0; /* ok */ size_t plen; int fd; int lfd; p = getenv ("TMPDIR"); if (!p) p = getenv ("TMP"); if (!p) p = "/tmp"; tmp=malloc(PATH_MAX+1); if (!tmp) error(1,0,_("out of memory")); plen=strlen(p); memcpy(tmp,p,plen); tmp[plen++]='/'; lfd=0; do { if (lfd++==10) { free(tmp); vstringf (_ ("send_pseudo %s: cannot open tmpfile %s: %s"), name, tmp, strerror (errno)); vstring ("\r\n"); return 1; } sprintf(tmp+plen,"%s.%lu.%d",name,(unsigned long) getpid(),lfd); fd=open(tmp,O_WRONLY|O_CREAT|O_EXCL,0700); /* is O_EXCL guaranted to not follow symlinks? * I don`t know ... so be careful */ if (fd!=-1) { struct stat st; if (0!=lstat(tmp,&st)) { vstringf (_ ("send_pseudo %s: cannot lstat tmpfile %s: %s"), name, tmp, strerror (errno)); vstring ("\r\n"); unlink(tmp); close(fd); fd=-1; } else { if (S_ISLNK(st.st_mode)) { vstringf (_ ("send_pseudo %s: avoiding symlink trap"),name); vstring ("\r\n"); unlink(tmp); close(fd); fd=-1; } } } } while (fd==-1); if (write(fd,data,strlen(data))!=(signed long) strlen(data) || close(fd)!=0) { vstringf (_ ("send_pseudo %s: cannot write to tmpfile %s: %s"), name, tmp, strerror (errno)); vstring ("\r\n"); free(tmp); return 1; } if (wcs (tmp,name) == ERROR) { if (Verbose) vstringf (_ ("send_pseudo %s: failed"),name); else { if (Verbose) vstringf (_ ("send_pseudo %s: ok"),name); Filcnt--; } vstring ("\r\n"); ret=1; } unlink (tmp); free(tmp); return ret; } static int wcsend (int argc, char *argp[]) { int n; Crcflg = FALSE; firstsec = TRUE; bytcnt = (size_t) -1; for (n = 0; n < argc; ++n) { Totsecs = 0; if (wcs (argp[n],NULL) == ERROR) return ERROR; } #if defined(ENABLE_TIMESYNC) if (Rxflags2 & ZF1_TIMESYNC && enable_timesync) { /* implement Peter Mandrellas extension */ char buf[60]; time_t t = time (NULL); struct tm *tm = localtime (&t); /* sets timezone */ strftime (buf, sizeof (buf) - 1, "%H:%M:%S", tm); if (Verbose) { vstring ("\r\n"); vstringf (_("Answering TIMESYNC at %s"),buf); } #if defined(HAVE_TIMEZONE_VAR) sprintf(buf+strlen(buf),"%ld\r\n", timezone / 60); if (Verbose) vstringf (" (%s %ld)\r\n", _ ("timezone"), timezone / 60); #else if (Verbose) vstringf (" (%s)\r\n", _ ("timezone unknown")); #endif send_pseudo("/$time$.t",buf); } #endif Totsecs = 0; if (Filcnt == 0) { /* bitch if we couldn't open ANY files */ #if 0 /* i *really* do not like this */ if (protocol != ZM_XMODEM) { const char *Cmdstr; /* Pointer to the command string */ command_mode = TRUE; Cmdstr = "echo \"lsz: Can't open any requested files\""; if (getnak ()) { Exitcode = 0200; canit(STDOUT_FILENO); } if (!zmodem_requested) canit(STDOUT_FILENO); else if (zsendcmd (Cmdstr, 1 + strlen (Cmdstr))) { Exitcode = 0200; canit(STDOUT_FILENO); } Exitcode = 1; return OK; } #endif canit(STDOUT_FILENO); vstring ("\r\n"); vstringf (_ ("Can't open any requested files.")); vstring ("\r\n"); return ERROR; } if (zmodem_requested) saybibi (); else if (protocol != ZM_XMODEM) { struct zm_fileinfo zi; char *pa; pa=alloca(PATH_MAX+1); *pa='\0'; zi.fname = pa; zi.modtime = 0; zi.mode = 0; zi.bytes_total = 0; zi.bytes_sent = 0; zi.bytes_received = 0; zi.bytes_skipped = 0; wctxpn (&zi); } return OK; } static int wcs(const char *oname, const char *remotename) { #if !defined(S_ISDIR) int c; #endif struct stat f; char *name; struct zm_fileinfo zi; #ifdef HAVE_MMAP int dont_mmap_this=0; #endif #ifdef ENABLE_SYSLOG const char *shortname; shortname=strrchr(oname,'/'); if (shortname) shortname++; else shortname=oname; #endif if (Restricted) { /* restrict pathnames to current tree or uucppublic */ if ( strstr(oname, "../") #ifdef PUBDIR || (oname[0]== '/' && strncmp(oname, MK_STRING(PUBDIR), strlen(MK_STRING(PUBDIR)))) #endif ) { canit(STDOUT_FILENO); vchar('\r'); error(1,0, _("security violation: not allowed to upload from %s"),oname); } } if (0==strcmp(oname,"-")) { char *p=getenv("ONAME"); name=alloca(PATH_MAX+1); if (p) { strcpy(name, p); } else { sprintf(name, "s%lu.lsz", (unsigned long) getpid()); } input_f=stdin; #ifdef HAVE_MMAP dont_mmap_this=1; #endif } else if ((input_f=fopen(oname, "r"))==NULL) { int e=errno; error(0,e, _("cannot open %s"),oname); ++errcnt; return OK; /* pass over it, there may be others */ } else { name=alloca(PATH_MAX+1); strcpy(name, oname); } #ifdef HAVE_MMAP if (!use_mmap || dont_mmap_this) #endif { static char *s=NULL; static size_t last_length=0; struct stat st; if (fstat(fileno(input_f),&st)==-1) st.st_size=1024*1024; if (buffersize==(size_t) -1 && s) { if ((size_t) st.st_size > last_length) { free(s); s=NULL; last_length=0; } } if (!s && buffersize) { last_length=16384; if (buffersize==(size_t) -1) { if (st.st_size>0) last_length=st.st_size; } else last_length=buffersize; /* buffer whole pages */ last_length=(last_length+4095)&0xfffff000; s=malloc(last_length); if (!s) { zpfatal(_("out of memory")); exit(1); } } if (s) { #ifdef SETVBUF_REVERSED setvbuf(input_f,_IOFBF,s,last_length); #else setvbuf(input_f,s,_IOFBF,last_length); #endif } } vpos = 0; /* Check for directory or block special files */ fstat(fileno(input_f), &f); #if defined(S_ISDIR) if (S_ISDIR(f.st_mode) || S_ISBLK(f.st_mode)) { #else c = f.st_mode & S_IFMT; if (c == S_IFDIR || c == S_IFBLK) { #endif error(0,0, _("is not a file: %s"),name); fclose(input_f); return OK; } if (remotename) { /* disqualify const */ union { const char *c; char *s; } cheat; cheat.c=remotename; zi.fname=cheat.s; } else zi.fname=name; zi.modtime=f.st_mtime; zi.mode=f.st_mode; #if defined(S_ISFIFO) zi.bytes_total= (S_ISFIFO(f.st_mode)) ? DEFBYTL : f.st_size; #else zi.bytes_total= c == S_IFIFO ? DEFBYTL : f.st_size; #endif zi.bytes_sent=0; zi.bytes_received=0; zi.bytes_skipped=0; zi.eof_seen=0; timing(1,NULL); ++Filcnt; switch (wctxpn(&zi)) { case ERROR: #ifdef ENABLE_SYSLOG if (enable_syslog) lsyslog(LOG_INFO, _("%s/%s: error occured"),protname(),shortname); #endif return ERROR; case ZSKIP: error(0,0, _("skipped: %s"),name); #ifdef ENABLE_SYSLOG if (enable_syslog) lsyslog(LOG_INFO, _("%s/%s: skipped"),protname(),shortname); #endif return OK; } if (!zmodem_requested && wctx(&zi)==ERROR) { #ifdef ENABLE_SYSLOG if (enable_syslog) lsyslog(LOG_INFO, _("%s/%s: error occured"),protname(),shortname); #endif return ERROR; } if (Unlinkafter) unlink(oname); if (Verbose > 1 #ifdef ENABLE_SYSLOG || enable_syslog #endif ) { long bps; double d=timing(0,NULL); if (d==0) /* can happen if timing() uses time() */ d=0.5; bps=zi.bytes_sent/d; vchar('\r'); if (Verbose > 1) vstringf(_("Bytes Sent:%7ld BPS:%-8ld \n"), (long) zi.bytes_sent,bps); #ifdef ENABLE_SYSLOG if (enable_syslog) lsyslog(LOG_INFO, "%s/%s: %ld Bytes, %ld BPS",shortname, protname(), (long) zi.bytes_sent,bps); #endif } return 0; } /* * generate and transmit pathname block consisting of * pathname (null terminated), * file length, mode time and file mode in octal * as provided by the Unix fstat call. * N.B.: modifies the passed name, may extend it! */ static int wctxpn(struct zm_fileinfo *zi) { register char *p, *q; char *name2; struct stat f; name2=alloca(PATH_MAX+1); if (protocol==ZM_XMODEM) { if (Verbose && *zi->fname && fstat(fileno(input_f), &f)!= -1) { vstringf(_("Sending %s, %ld blocks: "), zi->fname, (long) (f.st_size>>7)); } vstringf(_("Give your local XMODEM receive command now.")); vstring("\r\n"); return OK; } if (!zmodem_requested) if (getnak()) { vfile("getnak failed"); DO_SYSLOG((LOG_INFO, "%s/%s: getnak failed", shortname,protname())); return ERROR; } q = (char *) 0; if (Dottoslash) { /* change . to . */ for (p=zi->fname; *p; ++p) { if (*p == '/') q = p; else if (*p == '.') *(q=p) = '/'; } if (q && strlen(++q) > 8) { /* If name>8 chars */ q += 8; /* make it .ext */ strcpy(name2, q); /* save excess of name */ *q = '.'; strcpy(++q, name2); /* add it back */ } } for (p=zi->fname, q=txbuf ; *p; ) if ((*q++ = *p++) == '/' && !Fullname) q = txbuf; *q++ = 0; p=q; while (q < (txbuf + MAX_BLOCK)) *q++ = 0; /* note that we may lose some information here in case mode_t is wider than an * int. But i believe sending %lo instead of %o _could_ break compatability */ if (!Ascii && (input_f!=stdin) && *zi->fname && fstat(fileno(input_f), &f)!= -1) sprintf(p, "%lu %lo %o 0 %d %ld", (long) f.st_size, f.st_mtime, (unsigned int)((no_unixmode) ? 0 : f.st_mode), Filesleft, Totalleft); if (Verbose) vstringf(_("Sending: %s\n"),txbuf); Totalleft -= f.st_size; if (--Filesleft <= 0) Totalleft = 0; if (Totalleft < 0) Totalleft = 0; /* force 1k blocks if name won't fit in 128 byte block */ if (txbuf[125]) blklen=1024; else { /* A little goodie for IMP/KMD */ txbuf[127] = (f.st_size + 127) >>7; txbuf[126] = (f.st_size + 127) >>15; } if (zmodem_requested) return zsendfile(zi,txbuf, 1+strlen(p)+(p-txbuf)); if (wcputsec(txbuf, 0, 128)==ERROR) { vfile("wcputsec failed"); DO_SYSLOG((LOG_INFO, "%s/%s: wcputsec failed", shortname,protname())); return ERROR; } return OK; } static int getnak(void) { int firstch; int tries=0; Lastrx = 0; for (;;) { tries++; switch (firstch = READLINE_PF(100)) { case ZPAD: if (getzrxinit()) return ERROR; Ascii = 0; /* Receiver does the conversion */ return FALSE; case TIMEOUT: /* 30 seconds are enough */ if (tries==3) { zperr(_("Timeout on pathname")); return TRUE; } /* don't send a second ZRQINIT _directly_ after the * first one. Never send more then 4 ZRQINIT, because * omen rz stops if it saw 5 of them */ if ((zrqinits_sent>1 || tries>1) && zrqinits_sent<4) { /* if we already sent a ZRQINIT we are using zmodem * protocol and may send further ZRQINITs */ stohdr(0L); zshhdr(ZRQINIT, Txhdr); zrqinits_sent++; } continue; case WANTG: io_mode(io_mode_fd,2); /* Set cbreak, XON/XOFF, etc. */ Optiong = TRUE; blklen=1024; case WANTCRC: Crcflg = TRUE; case NAK: return FALSE; case CAN: if ((firstch = READLINE_PF(20)) == CAN && Lastrx == CAN) return TRUE; default: break; } Lastrx = firstch; } } static int wctx(struct zm_fileinfo *zi) { register size_t thisblklen; register int sectnum, attempts, firstch; firstsec=TRUE; thisblklen = blklen; vfile("wctx:file length=%ld", (long) zi->bytes_total); while ((firstch=READLINE_PF(Rxtimeout))!=NAK && firstch != WANTCRC && firstch != WANTG && firstch!=TIMEOUT && firstch!=CAN) ; if (firstch==CAN) { zperr(_("Receiver Cancelled")); return ERROR; } if (firstch==WANTCRC) Crcflg=TRUE; if (firstch==WANTG) Crcflg=TRUE; sectnum=0; for (;;) { if (zi->bytes_total <= (zi->bytes_sent + 896L)) thisblklen = 128; if ( !filbuf(txbuf, thisblklen)) break; if (wcputsec(txbuf, ++sectnum, thisblklen)==ERROR) return ERROR; zi->bytes_sent += thisblklen; } fclose(input_f); attempts=0; do { purgeline(io_mode_fd); sendline(EOT); flushmo(); ++attempts; } while ((firstch=(READLINE_PF(Rxtimeout)) != ACK) && attempts < RETRYMAX); if (attempts == RETRYMAX) { zperr(_("No ACK on EOT")); return ERROR; } else return OK; } static int wcputsec(char *buf, int sectnum, size_t cseclen) { int checksum, wcj; char *cp; unsigned oldcrc; int firstch; int attempts; firstch=0; /* part of logic to detect CAN CAN */ if (Verbose>1) { vchar('\r'); if (protocol==ZM_XMODEM) { vstringf(_("Xmodem sectors/kbytes sent: %3d/%2dk"), Totsecs, Totsecs/8 ); } else { vstringf(_("Ymodem sectors/kbytes sent: %3d/%2dk"), Totsecs, Totsecs/8 ); } } for (attempts=0; attempts <= RETRYMAX; attempts++) { Lastrx= firstch; sendline(cseclen==1024?STX:SOH); sendline(sectnum); sendline(-sectnum -1); oldcrc=checksum=0; for (wcj=cseclen,cp=buf; --wcj>=0; ) { sendline(*cp); oldcrc=updcrc((0377& *cp), oldcrc); checksum += *cp++; } if (Crcflg) { oldcrc=updcrc(0,updcrc(0,oldcrc)); sendline((int)oldcrc>>8); sendline((int)oldcrc); } else sendline(checksum); flushmo(); if (Optiong) { firstsec = FALSE; return OK; } firstch = READLINE_PF(Rxtimeout); gotnak: switch (firstch) { case CAN: if(Lastrx == CAN) { cancan: zperr(_("Cancelled")); return ERROR; } break; case TIMEOUT: zperr(_("Timeout on sector ACK")); continue; case WANTCRC: if (firstsec) Crcflg = TRUE; case NAK: zperr(_("NAK on sector")); continue; case ACK: firstsec=FALSE; Totsecs += (cseclen>>7); return OK; case ERROR: zperr(_("Got burst for sector ACK")); break; default: zperr(_("Got %02x for sector ACK"), firstch); break; } for (;;) { Lastrx = firstch; if ((firstch = READLINE_PF(Rxtimeout)) == TIMEOUT) break; if (firstch == NAK || firstch == WANTCRC) goto gotnak; if (firstch == CAN && Lastrx == CAN) goto cancan; } } zperr(_("Retry Count Exceeded")); return ERROR; } /* fill buf with count chars padding with ^Z for CPM */ static size_t filbuf(char *buf, size_t count) { int c; size_t m; if ( !Ascii) { m = read(fileno(input_f), buf, count); if (m <= 0) return 0; while (m < count) buf[m++] = 032; return count; } m=count; if (Lfseen) { *buf++ = 012; --m; Lfseen = 0; } while ((c=getc(input_f))!=EOF) { if (c == 012) { *buf++ = 015; if (--m == 0) { Lfseen = TRUE; break; } } *buf++ =c; if (--m == 0) break; } if (m==count) return 0; else while (m--!=0) *buf++ = CPMEOF; return count; } /* Fill buffer with blklen chars */ static size_t zfilbuf (struct zm_fileinfo *zi) { size_t n; n = fread (txbuf, 1, blklen, input_f); if (n < blklen) zi->eof_seen = 1; else { /* save one empty paket in case file ends ob blklen boundary */ int c = getc(input_f); if (c != EOF || !feof(input_f)) ungetc(c, input_f); else zi->eof_seen = 1; } return n; } static void usage1 (int exitcode) { usage (exitcode, NULL); } static void usage(int exitcode, const char *what) { FILE *f=stdout; if (exitcode) { if (what) fprintf(stderr, "%s: %s\n",program_name,what); fprintf (stderr, _("Try `%s --help' for more information.\n"), program_name); exit(exitcode); } fprintf(f, _("%s version %s\n"), program_name, VERSION); fprintf(f,_("Usage: %s [options] file ...\n"), program_name); fprintf(f,_(" or: %s [options] -{c|i} COMMAND\n"),program_name); fputs(_("Send file(s) with ZMODEM/YMODEM/XMODEM protocol\n"),f); fputs(_( " (X) = option applies to XMODEM only\n" " (Y) = option applies to YMODEM only\n" " (Z) = option applies to ZMODEM only\n" ),f); /* splitted into two halves for really bad compilers */ fputs(_( " -+, --append append to existing destination file (Z)\n" " -2, --twostop use 2 stop bits\n" " -4, --try-4k go up to 4K blocksize\n" " --start-4k start with 4K blocksize (doesn't try 8)\n" " -8, --try-8k go up to 8K blocksize\n" " --start-8k start with 8K blocksize\n" " -a, --ascii ASCII transfer (change CR/LF to LF)\n" " -b, --binary binary transfer\n" " -B, --bufsize N buffer N bytes (N==auto: buffer whole file)\n" " -c, --command COMMAND execute remote command COMMAND (Z)\n" " -C, --command-tries N try N times to execute a command (Z)\n" " -d, --dot-to-slash change '.' to '/' in pathnames (Y/Z)\n" " --delay-startup N sleep N seconds before doing anything\n" " -e, --escape escape all control characters (Z)\n" " -E, --rename force receiver to rename files it already has\n" " -f, --full-path send full pathname (Y/Z)\n" " -i, --immediate-command CMD send remote CMD, return immediately (Z)\n" " -h, --help print this usage message\n" " -k, --1k send 1024 byte packets (X)\n" " -L, --packetlen N limit subpacket length to N bytes (Z)\n" " -l, --framelen N limit frame length to N bytes (l>=L) (Z)\n" " -m, --min-bps N stop transmission if BPS below N\n" " -M, --min-bps-time N for at least N seconds (default: 120)\n" ),f); fputs(_( " -n, --newer send file if source newer (Z)\n" " -N, --newer-or-longer send file if source newer or longer (Z)\n" " -o, --16-bit-crc use 16 bit CRC instead of 32 bit CRC (Z)\n" " -O, --disable-timeouts disable timeout code, wait forever\n" " -p, --protect protect existing destination file (Z)\n" " -r, --resume resume interrupted file transfer (Z)\n" " -R, --restricted restricted, more secure mode\n" " -q, --quiet quiet (no progress reports)\n" " -s, --stop-at {HH:MM|+N} stop transmission at HH:MM or in N seconds\n" " --tcp-server open socket, wait for connection (Z)\n" " --tcp-client ADDR:PORT open socket, connect to ... (Z)\n" " -u, --unlink unlink file after transmission\n" " -U, --unrestrict turn off restricted mode (if allowed to)\n" " -v, --verbose be verbose, provide debugging information\n" " -w, --windowsize N Window is N bytes (Z)\n" " -X, --xmodem use XMODEM protocol\n" " -y, --overwrite overwrite existing files\n" " -Y, --overwrite-or-skip overwrite existing files, else skip\n" " --ymodem use YMODEM protocol\n" " -Z, --zmodem use ZMODEM protocol\n" "\n" "short options use the same arguments as the long ones\n" ),f); exit(exitcode); } /* * Get the receiver's init parameters */ static int getzrxinit(void) { static int dont_send_zrqinit=1; int old_timeout=Rxtimeout; int n; struct stat f; size_t rxpos; int timeouts=0; Rxtimeout=100; /* 10 seconds */ /* XXX purgeline(io_mode_fd); this makes _real_ trouble. why? -- uwe */ for (n=10; --n>=0; ) { /* we might need to send another zrqinit in case the first is * lost. But *not* if getting here for the first time - in * this case we might just get a ZRINIT for our first ZRQINIT. * Never send more then 4 ZRQINIT, because * omen rz stops if it saw 5 of them. */ if (zrqinits_sent<4 && n!=10 && !dont_send_zrqinit) { zrqinits_sent++; stohdr(0L); zshhdr(ZRQINIT, Txhdr); } dont_send_zrqinit=0; switch (zgethdr(Rxhdr, 1,&rxpos)) { case ZCHALLENGE: /* Echo receiver's challenge numbr */ stohdr(rxpos); zshhdr(ZACK, Txhdr); continue; case ZCOMMAND: /* They didn't see our ZRQINIT */ /* ??? Since when does a receiver send ZCOMMAND? -- uwe */ continue; case ZRINIT: Rxflags = 0377 & Rxhdr[ZF0]; Rxflags2 = 0377 & Rxhdr[ZF1]; Txfcs32 = (Wantfcs32 && (Rxflags & CANFC32)); { int old=Zctlesc; Zctlesc |= Rxflags & TESCCTL; /* update table - was initialised to not escape */ if (Zctlesc && !old) zsendline_init(); } Rxbuflen = (0377 & Rxhdr[ZP0])+((0377 & Rxhdr[ZP1])<<8); if ( !(Rxflags & CANFDX)) Txwindow = 0; vfile("Rxbuflen=%d Tframlen=%d", Rxbuflen, Tframlen); if ( play_with_sigint) signal(SIGINT, SIG_IGN); io_mode(io_mode_fd,2); /* Set cbreak, XON/XOFF, etc. */ #ifndef READCHECK /* Use MAX_BLOCK byte frames if no sample/interrupt */ if (Rxbuflen < 32 || Rxbuflen > MAX_BLOCK) { Rxbuflen = MAX_BLOCK; vfile("Rxbuflen=%d", Rxbuflen); } #endif /* Override to force shorter frame length */ if (Tframlen && Rxbuflen > Tframlen) Rxbuflen = Tframlen; if ( !Rxbuflen) Rxbuflen = 1024; vfile("Rxbuflen=%d", Rxbuflen); /* If using a pipe for testing set lower buf len */ fstat(0, &f); #if defined(S_ISCHR) if (! (S_ISCHR(f.st_mode))) { #else if ((f.st_mode & S_IFMT) != S_IFCHR) { #endif Rxbuflen = MAX_BLOCK; } /* * If input is not a regular file, force ACK's to * prevent running beyond the buffer limits */ if ( !command_mode) { fstat(fileno(input_f), &f); #if defined(S_ISREG) if (!(S_ISREG(f.st_mode))) { #else if ((f.st_mode & S_IFMT) != S_IFREG) { #endif Canseek = -1; /* return ERROR; */ } } /* Set initial subpacket length */ if (blklen < 1024) { /* Command line override? */ if (Baudrate > 300) blklen = 256; if (Baudrate > 1200) blklen = 512; if (Baudrate > 2400) blklen = 1024; } if (Rxbuflen && blklen>Rxbuflen) blklen = Rxbuflen; if (blkopt && blklen > blkopt) blklen = blkopt; vfile("Rxbuflen=%d blklen=%d", Rxbuflen, blklen); vfile("Txwindow = %u Txwspac = %d", Txwindow, Txwspac); Rxtimeout=old_timeout; return (sendzsinit()); case ZCAN: case TIMEOUT: if (timeouts++==0) continue; /* force one other ZRQINIT to be sent */ return ERROR; case ZRQINIT: if (Rxhdr[ZF0] == ZCOMMAND) continue; default: zshhdr(ZNAK, Txhdr); continue; } } return ERROR; } /* Send send-init information */ static int sendzsinit(void) { int c; if (Myattn[0] == '\0' && (!Zctlesc || (Rxflags & TESCCTL))) return OK; errors = 0; for (;;) { stohdr(0L); if (Zctlesc) { Txhdr[ZF0] |= TESCCTL; zshhdr(ZSINIT, Txhdr); } else zsbhdr(ZSINIT, Txhdr); ZSDATA(Myattn, 1+strlen(Myattn), ZCRCW); c = zgethdr(Rxhdr, 1,NULL); switch (c) { case ZCAN: return ERROR; case ZACK: return OK; default: if (++errors > 19) return ERROR; continue; } } } /* Send file name and related info */ static int zsendfile(struct zm_fileinfo *zi, const char *buf, size_t blen) { unsigned long crc; size_t rxpos; /* we are going to send a ZFILE. There cannot be much useful * stuff in the line right now (*except* ZCAN?). */ #if 0 purgeline(io_mode_fd); /* might possibly fix stefan glasers problems */ #endif for (;;) { int gotblock; int gotchar; Txhdr[ZF0] = Lzconv; /* file conversion request */ Txhdr[ZF1] = Lzmanag; /* file management request */ if (Lskipnocor) Txhdr[ZF1] |= ZF1_ZMSKNOLOC; Txhdr[ZF2] = Lztrans; /* file transport request */ Txhdr[ZF3] = 0; zsbhdr(ZFILE, Txhdr); ZSDATA(buf, blen, ZCRCW); again: gotblock = zgethdr(Rxhdr, 1, &rxpos); switch (gotblock) { case ZRINIT: while ((gotchar = READLINE_PF(50)) > 0) if (gotchar == ZPAD) { goto again; } /* **** FALL THRU TO **** */ default: continue; case ZRQINIT: /* remote site is sender! */ if (Verbose) vstringf(_("got ZRQINIT")); DO_SYSLOG((LOG_INFO, "%s/%s: got ZRQINIT - sz talks to sz", shortname,protname())); return ERROR; case ZCAN: if (Verbose) vstringf(_("got ZCAN")); DO_SYSLOG((LOG_INFO, "%s/%s: got ZCAN - receiver canceled", shortname,protname())); return ERROR; case TIMEOUT: DO_SYSLOG((LOG_INFO, "%s/%s: got TIMEOUT", shortname,protname())); return ERROR; case ZABORT: DO_SYSLOG((LOG_INFO, "%s/%s: got ZABORT", shortname,protname())); return ERROR; case ZFIN: DO_SYSLOG((LOG_INFO, "%s/%s: got ZFIN", shortname,protname())); return ERROR; case ZCRC: crc = 0xFFFFFFFFL; #ifdef HAVE_MMAP if (use_mmap && !mm_addr) { struct stat st; /* mmap on files of 0 length can give 0 as result .. under linux 2.2.9 at least */ if (fstat (fileno (input_f), &st) == 0 && st.st_size!=0) { mm_size = st.st_size; mm_addr = mmap (0, mm_size, PROT_READ, MAP_SHARED, fileno (input_f), 0); if ((caddr_t) mm_addr == (caddr_t) - 1) mm_addr = NULL; else { fclose (input_f); input_f = NULL; } } } if (mm_addr) { size_t i; size_t count; char *p=mm_addr; count=(rxpos < mm_size && rxpos > 0)? rxpos: mm_size; for (i=0;i= 0) { if (rxpos==0) { struct stat st; if (0==fstat(fileno(input_f),&st)) { rxpos=st.st_size; } else rxpos=-1; } while (rxpos-- && ((gotchar = getc(input_f)) != EOF)) crc = UPDC32(gotchar, crc); crc = ~crc; clearerr(input_f); /* Clear EOF */ fseek(input_f, 0L, 0); } stohdr(crc); zsbhdr(ZCRC, Txhdr); goto again; case ZSKIP: if (input_f) { fclose(input_f); input_f=NULL; } #ifdef HAVE_MMAP else if (mm_addr) { munmap(mm_addr,mm_size); mm_addr=NULL; } #endif vfile("receiver skipped"); DO_SYSLOG((LOG_INFO, "%s/%s: receiver skipped", shortname, protname())); return ZSKIP; case ZRPOS: /* * Suppress zcrcw request otherwise triggered by * lastsync==bytcnt */ #ifdef HAVE_MMAP if (!mm_addr) #endif if (rxpos && fseek(input_f, (long) rxpos, 0)) { int er=errno; vfile("fseek failed: %s", strerror(er)); DO_SYSLOG((LOG_INFO, "%s/%s: fseek failed: %s", shortname, protname(), strerror(er))); return ERROR; } if (rxpos) zi->bytes_skipped=rxpos; bytcnt = zi->bytes_sent = rxpos; Lastsync = rxpos -1; return zsendfdata(zi); } } } /* Send the data in the file */ static int zsendfdata (struct zm_fileinfo *zi) { static int c; int newcnt; static int junkcount; /* Counts garbage chars received by TX */ static size_t last_txpos = 0; static long last_bps = 0; static long not_printed = 0; static long total_sent = 0; static time_t low_bps=0; #ifdef HAVE_MMAP if (use_mmap && !mm_addr) { struct stat st; if (fstat (fileno (input_f), &st) == 0 && st.st_size!=0) { mm_size = st.st_size; mm_addr = mmap (0, mm_size, PROT_READ, MAP_SHARED, fileno (input_f), 0); if ((caddr_t) mm_addr == (caddr_t) - 1) mm_addr = NULL; else { fclose (input_f); input_f = NULL; } } } #endif if (play_with_sigint) signal (SIGINT, onintr); Lrxpos = 0; junkcount = 0; Beenhereb4 = 0; somemore: if (setjmp (intrjmp)) { if (play_with_sigint) signal (SIGINT, onintr); waitack: junkcount = 0; c = getinsync (zi, 0); gotack: switch (c) { default: if (input_f) { fclose (input_f); input_f=NULL; } DO_SYSLOG((LOG_INFO, "%s/%s: got %d", shortname, protname(), c)); return ERROR; case ZCAN: if (input_f) { fclose (input_f); input_f=NULL; } DO_SYSLOG((LOG_INFO, "%s/%s: got ZCAN", shortname, protname())); return ERROR; case ZSKIP: if (input_f) { fclose (input_f); input_f=NULL; } DO_SYSLOG((LOG_INFO, "%s/%s: got ZSKIP", shortname, protname())); return ZSKIP; case ZACK: case ZRPOS: break; case ZRINIT: return OK; } #ifdef READCHECK /* * If the reverse channel can be tested for data, * this logic may be used to detect error packets * sent by the receiver, in place of setjmp/longjmp * rdchk(fdes) returns non 0 if a character is available */ while (rdchk (io_mode_fd)) { #ifdef READCHECK_READS switch (checked) #else switch (READLINE_PF (1)) #endif { case CAN: case ZPAD: c = getinsync (zi, 1); goto gotack; case XOFF: /* Wait a while for an XON */ case XOFF | 0200: READLINE_PF (100); } } #endif } newcnt = Rxbuflen; Txwcnt = 0; stohdr (zi->bytes_sent); zsbhdr (ZDATA, Txhdr); do { size_t n; int e; unsigned old = blklen; blklen = calc_blklen (total_sent); total_sent += blklen + OVERHEAD; if (Verbose > 2 && blklen != old) vstringf (_("blklen now %d\n"), blklen); #ifdef HAVE_MMAP if (mm_addr) { if (zi->bytes_sent + blklen < mm_size) n = blklen; else { n = mm_size - zi->bytes_sent; zi->eof_seen = 1; } } else #endif n = zfilbuf (zi); if (zi->eof_seen) { e = ZCRCE; if (Verbose>3) vstring("e=ZCRCE/eof seen"); } else if (junkcount > 3) { e = ZCRCW; if (Verbose>3) vstring("e=ZCRCW/junkcount > 3"); } else if (bytcnt == Lastsync) { e = ZCRCW; if (Verbose>3) vstringf("e=ZCRCW/bytcnt == Lastsync == %ld", (unsigned long) Lastsync); #if 0 /* what is this good for? Rxbuflen/newcnt normally are short - so after * a few KB ZCRCW will be used? (newcnt is never incremented) */ } else if (Rxbuflen && (newcnt -= n) <= 0) { e = ZCRCW; if (Verbose>3) vstringf("e=ZCRCW/Rxbuflen(newcnt=%ld,n=%ld)", (unsigned long) newcnt,(unsigned long) n); #endif } else if (Txwindow && (Txwcnt += n) >= Txwspac) { Txwcnt = 0; e = ZCRCQ; if (Verbose>3) vstring("e=ZCRCQ/Window"); } else { e = ZCRCG; if (Verbose>3) vstring("e=ZCRCG"); } if ((Verbose > 1 || min_bps || stop_time) && (not_printed > (min_bps ? 3 : 7) || zi->bytes_sent > last_bps / 2 + last_txpos)) { int minleft = 0; int secleft = 0; time_t now; last_bps = (zi->bytes_sent / timing (0,&now)); if (last_bps > 0) { minleft = (zi->bytes_total - zi->bytes_sent) / last_bps / 60; secleft = ((zi->bytes_total - zi->bytes_sent) / last_bps) % 60; } if (min_bps) { if (low_bps) { if (last_bps=min_bps_time) { /* too bad */ if (Verbose) { vstringf(_("zsendfdata: bps rate %ld below min %ld"), last_bps, min_bps); vstring("\r\n"); } DO_SYSLOG((LOG_INFO, "%s/%s: bps rate low: %ld <%ld", shortname, protname(), last_bps, min_bps)); return ERROR; } } else low_bps=0; } else if (last_bps < min_bps) { low_bps=now; } } if (stop_time && now>=stop_time) { /* too bad */ if (Verbose) { vstring(_("zsendfdata: reached stop time")); vstring("\r\n"); } DO_SYSLOG((LOG_INFO, "%s/%s: reached stop time", shortname, protname())); return ERROR; } if (Verbose > 1) { vchar ('\r'); vstringf (_("Bytes Sent:%7ld/%7ld BPS:%-8ld ETA %02d:%02d "), (long) zi->bytes_sent, (long) zi->bytes_total, last_bps, minleft, secleft); } last_txpos = zi->bytes_sent; } else if (Verbose) not_printed++; ZSDATA (DATAADR, n, e); bytcnt = zi->bytes_sent += n; if (e == ZCRCW) goto waitack; #ifdef READCHECK /* * If the reverse channel can be tested for data, * this logic may be used to detect error packets * sent by the receiver, in place of setjmp/longjmp * rdchk(fdes) returns non 0 if a character is available */ fflush (stdout); while (rdchk (io_mode_fd)) { #ifdef READCHECK_READS switch (checked) #else switch (READLINE_PF (1)) #endif { case CAN: case ZPAD: c = getinsync (zi, 1); if (c == ZACK) break; /* zcrce - dinna wanna starta ping-pong game */ ZSDATA (txbuf, 0, ZCRCE); goto gotack; case XOFF: /* Wait a while for an XON */ case XOFF | 0200: READLINE_PF (100); default: ++junkcount; } } #endif /* READCHECK */ if (Txwindow) { size_t tcount = 0; while ((tcount = zi->bytes_sent - Lrxpos) >= Txwindow) { vfile ("%ld (%ld,%ld) window >= %u", tcount, (long) zi->bytes_sent, (long) Lrxpos, Txwindow); if (e != ZCRCQ) ZSDATA (txbuf, 0, e = ZCRCQ); c = getinsync (zi, 1); if (c != ZACK) { ZSDATA (txbuf, 0, ZCRCE); goto gotack; } } vfile ("window = %ld", tcount); } } while (!zi->eof_seen); if (play_with_sigint) signal (SIGINT, SIG_IGN); for (;;) { stohdr (zi->bytes_sent); zsbhdr (ZEOF, Txhdr); switch (getinsync (zi, 0)) { case ZACK: continue; case ZRPOS: goto somemore; case ZRINIT: return OK; case ZSKIP: if (input_f) { fclose (input_f); input_f=NULL; } DO_SYSLOG((LOG_INFO, "%s/%s: got ZSKIP", shortname, protname())); return c; default: if (input_f) { fclose (input_f); input_f=NULL; } DO_SYSLOG((LOG_INFO, "%s/%s: got %d", shortname, protname(), c)); return ERROR; } } } static int calc_blklen(long total_sent) { static long total_bytes=0; static int calcs_done=0; static long last_error_count=0; static int last_blklen=0; static long last_bytes_per_error=0; unsigned long best_bytes=0; long best_size=0; long this_bytes_per_error; long d; unsigned int i; if (total_bytes==0) { /* called from countem */ total_bytes=total_sent; return 0; } /* it's not good to calc blklen too early */ if (calcs_done++ < 5) { if (error_count && start_blklen >1024) return last_blklen=1024; else last_blklen/=2; return last_blklen=start_blklen; } if (!error_count) { /* that's fine */ if (start_blklen==max_blklen) return start_blklen; this_bytes_per_error=LONG_MAX; goto calcit; } if (error_count!=last_error_count) { /* the last block was bad. shorten blocks until one block is * ok. this is because very often many errors come in an * short period */ if (error_count & 2) { last_blklen/=2; if (last_blklen < 32) last_blklen = 32; else if (last_blklen > 512) last_blklen=512; if (Verbose > 3) vstringf(_("calc_blklen: reduced to %d due to error\n"), last_blklen); } last_error_count=error_count; last_bytes_per_error=0; /* force recalc */ return last_blklen; } this_bytes_per_error=total_sent / error_count; /* we do not get told about every error, because * there may be more than one error per failed block. * but one the other hand some errors are reported more * than once: If a modem buffers more than one block we * get at least two ZRPOS for the same position in case * *one* block has to be resent. * so don't do this: * this_bytes_per_error/=2; */ /* there has to be a margin */ if (this_bytes_per_error<100) this_bytes_per_error=100; /* be nice to the poor machine and do the complicated things not * too often */ if (last_bytes_per_error>this_bytes_per_error) d=last_bytes_per_error-this_bytes_per_error; else d=this_bytes_per_error-last_bytes_per_error; if (d<4) { if (Verbose > 3) { vstringf(_("calc_blklen: returned old value %d due to low bpe diff\n"), last_blklen); vstringf(_("calc_blklen: old %ld, new %ld, d %ld\n"), last_bytes_per_error,this_bytes_per_error,d ); } return last_blklen; } last_bytes_per_error=this_bytes_per_error; calcit: if (Verbose > 3) vstringf(_("calc_blklen: calc total_bytes=%ld, bpe=%ld, ec=%ld\n"), total_bytes,this_bytes_per_error,(long) error_count); for (i=32;i<=max_blklen;i*=2) { long ok; /* some many ok blocks do we need */ long failed; /* and that's the number of blocks not transmitted ok */ unsigned long transmitted; ok=total_bytes / i + 1; failed=((long) i + OVERHEAD) * ok / this_bytes_per_error; transmitted=total_bytes + ok * OVERHEAD + failed * ((long) i+OVERHEAD+OVER_ERR); if (Verbose > 4) vstringf(_("calc_blklen: blklen %d, ok %ld, failed %ld -> %lu\n"), i,ok,failed,transmitted); if (transmitted < best_bytes || !best_bytes) { best_bytes=transmitted; best_size=i; } } if (best_size > 2*last_blklen) best_size=2*last_blklen; last_blklen=best_size; if (Verbose > 3) vstringf(_("calc_blklen: returned %d as best\n"), last_blklen); return last_blklen; } /* * Respond to receiver's complaint, get back in sync with receiver */ static int getinsync(struct zm_fileinfo *zi, int flag) { size_t rxpos; for (;;) { int gotblock; gotblock = zgethdr(Rxhdr, 0, &rxpos); switch (gotblock) { case ZCAN: case ZABORT: case ZFIN: case TIMEOUT: return ERROR; case ZRPOS: /* ************************************* */ /* If sending to a buffered modem, you */ /* might send a break at this point to */ /* dump the modem's buffer. */ if (input_f) clearerr(input_f); /* In case file EOF seen */ #ifdef HAVE_MMAP if (!mm_addr) #endif if (fseek(input_f, (long) rxpos, 0)) return ERROR; zi->eof_seen = 0; bytcnt = Lrxpos = zi->bytes_sent = rxpos; if (Lastsync == rxpos) { error_count++; } Lastsync = rxpos; return ZRPOS; case ZACK: Lrxpos = rxpos; if (flag || zi->bytes_sent == rxpos) return ZACK; continue; case ZRINIT: case ZSKIP: if (input_f) { fclose (input_f); input_f=NULL; } #ifdef HAVE_MMAP else if (mm_addr) { munmap(mm_addr,mm_size); mm_addr=NULL; } #endif return ZSKIP; case ERROR: default: error_count++; zsbhdr(ZNAK, Txhdr); continue; } } } /* Say "bibi" to the receiver, try to do it cleanly */ static void saybibi(void) { for (;;) { stohdr(0L); /* CAF Was zsbhdr - minor change */ zshhdr(ZFIN, Txhdr); /* to make debugging easier */ switch (zgethdr(Rxhdr, 0,NULL)) { case ZFIN: sendline('O'); sendline('O'); flushmo(); case ZCAN: case TIMEOUT: return; } } } /* Send command and related info */ static int zsendcmd(const char *buf, size_t blen) { int c; pid_t cmdnum; size_t rxpos; cmdnum = getpid(); errors = 0; for (;;) { stohdr((size_t) cmdnum); Txhdr[ZF0] = Cmdack1; zsbhdr(ZCOMMAND, Txhdr); ZSDATA(buf, blen, ZCRCW); listen: Rxtimeout = 100; /* Ten second wait for resp. */ c = zgethdr(Rxhdr, 1, &rxpos); switch (c) { case ZRINIT: goto listen; /* CAF 8-21-87 */ case ERROR: case TIMEOUT: if (++errors > Cmdtries) return ERROR; continue; case ZCAN: case ZABORT: case ZFIN: case ZSKIP: case ZRPOS: return ERROR; default: if (++errors > 20) return ERROR; continue; case ZCOMPL: Exitcode = rxpos; saybibi(); return OK; case ZRQINIT: vfile("******** RZ *******"); system("rz"); vfile("******** SZ *******"); goto listen; } } } /* * If called as lsb use YMODEM protocol */ static void chkinvok (const char *s) { const char *p; p = s; while (*p == '-') s = ++p; while (*p) if (*p++ == '/') s = p; if (*s == 'v') { Verbose = 1; ++s; } program_name = s; if (*s == 'l') s++; /* lsz -> sz */ protocol = ZM_ZMODEM; if (s[0] == 's' && s[1] == 'x') protocol = ZM_XMODEM; if (s[0] == 's' && (s[1] == 'b' || s[1] == 'y')) { protocol = ZM_YMODEM; } } static void countem (int argc, char **argv) { struct stat f; for (Totalleft = 0, Filesleft = 0; --argc >= 0; ++argv) { f.st_size = -1; if (Verbose > 2) { vstringf ("\nCountem: %03d %s ", argc, *argv); } if (access (*argv, R_OK) >= 0 && stat (*argv, &f) >= 0) { #if defined(S_ISDIR) if (!S_ISDIR(f.st_mode) && !S_ISBLK(f.st_mode)) { #else int c; c = f.st_mode & S_IFMT; if (c != S_IFDIR && c != S_IFBLK) { #endif ++Filesleft; Totalleft += f.st_size; } } else if (strcmp (*argv, "-") == 0) { ++Filesleft; Totalleft += DEFBYTL; } if (Verbose > 2) vstringf (" %ld", (long) f.st_size); } if (Verbose > 2) vstringf (_("\ncountem: Total %d %ld\n"), Filesleft, Totalleft); calc_blklen (Totalleft); } /* End of lsz.c */ lrzsz-0.12.21rc/src/timing.h 666 764 764 55 6607440604 10660 double timing __P ((int reset,time_t *now)); lrzsz-0.12.21rc/src/zglobal.h 644 764 764 27126 6642657337 11123 #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 #ifdef __GNUC__ # define alloca __builtin_alloca # define HAVE_ALLOCA 1 #else # if defined HAVE_ALLOCA_H || defined _LIBC # include # 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 #else #include #endif #ifdef TIME_WITH_SYS_TIME # include # include # define INCLUDED_SYS_TIME #else # ifdef HAVE_SYS_TIME_H # include # define INCLUDED_SYS_TIME # else # include # 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 #endif #ifdef __BEOS__ /* BeOS 4.0: sys/select.h is almost completely #ifdefd out */ #define HAVE_SOCKET_H #ifdef HAVE_SOCKET_H #include #endif #endif #if STDC_HEADERS # include #else # ifdef HAVE_STRINGS_H # include # endif # ifndef HAVE_STRCHR # define strchr index # define strrchr rindex # endif char *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 /* we need to decide whether readcheck is possible */ #ifdef HAVE_FCNTL_H # include #endif #ifdef HAVE_SYS_IOCTL_H # include #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 # define USE_TERMIOS #else # if defined(HAVE_SYS_TERMIOS_H) # include # define USE_TERMIOS # else # if defined(HAVE_TERMIO_H) # include # define USE_TERMIO # else # if defined(HAVE_SYS_TERMIO_H) # include # define USE_TERMIO # else # if defined(HAVE_SGTTY_H) # include # 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 #endif #if !HAVE_SETLOCALE # define setlocale(Category, Locale) /* empty */ #endif #if ENABLE_NLS # include # 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 # else # if defined(HAVE_SYS_SYSLOG_H) # include # else # undef HAVE_SYSLOG # endif # endif #endif #ifndef ENABLE_SYSLOG # define openlog(name,pid,facility) /* void it */ # define setlogmask(x) /* void it */ #else extern int enable_syslog; #endif #if defined HAVE_UNISTD_H # include #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 #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 #endif #if !defined(PATH_MAX) && defined(MAXPATHLEN) # define PATH_MAX MAXPATHLEN #endif #if !defined(LONG_MAX) && defined(HAVE_LIMITS_H) # include #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äre ab 2.5 verfügbar. 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_READS extern unsigned char checked; #endif extern 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 vstringf void 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 lrzsz-0.12.21rc/src/zmodem.h 666 764 764 14437 6607440604 10755 /* zmodem.h - ZMODEM protocol constants Copyright (C) until 1998 Chuck Forsberg (OMEN Technology Inc) 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. * 05-23-87 Chuck Forsberg Omen Technology Inc */ #define ZPAD '*' /* 052 Padding character begins frames */ #define ZDLE 030 /* Ctrl-X Zmodem escape - `ala BISYNC DLE */ #define ZDLEE (ZDLE^0100) /* Escaped ZDLE as transmitted */ #define ZBIN 'A' /* Binary frame indicator */ #define ZHEX 'B' /* HEX frame indicator */ #define ZBIN32 'C' /* Binary frame with 32 bit FCS */ /* Frame types (see array "frametypes" in zm.c) */ #define ZRQINIT 0 /* Request receive init */ #define ZRINIT 1 /* Receive init */ #define ZSINIT 2 /* Send init sequence (optional) */ #define ZACK 3 /* ACK to above */ #define ZFILE 4 /* File name from sender */ #define ZSKIP 5 /* To sender: skip this file */ #define ZNAK 6 /* Last packet was garbled */ #define ZABORT 7 /* Abort batch transfers */ #define ZFIN 8 /* Finish session */ #define ZRPOS 9 /* Resume data trans at this position */ #define ZDATA 10 /* Data packet(s) follow */ #define ZEOF 11 /* End of file */ #define ZFERR 12 /* Fatal Read or Write error Detected */ #define ZCRC 13 /* Request for file CRC and response */ #define ZCHALLENGE 14 /* Receiver's Challenge */ #define ZCOMPL 15 /* Request is complete */ #define ZCAN 16 /* Other end canned session with CAN*5 */ #define ZFREECNT 17 /* Request for free bytes on filesystem */ #define ZCOMMAND 18 /* Command from sending program */ #define ZSTDERR 19 /* Output to standard error, data follows */ /* ZDLE sequences */ #define ZCRCE 'h' /* CRC next, frame ends, header packet follows */ #define ZCRCG 'i' /* CRC next, frame continues nonstop */ #define ZCRCQ 'j' /* CRC next, frame continues, ZACK expected */ #define ZCRCW 'k' /* CRC next, ZACK expected, end of frame */ #define ZRUB0 'l' /* Translate to rubout 0177 */ #define ZRUB1 'm' /* Translate to rubout 0377 */ /* zdlread return values (internal) */ /* -1 is general error, -2 is timeout */ #define GOTOR 0400 #define GOTCRCE (ZCRCE|GOTOR) /* ZDLE-ZCRCE received */ #define GOTCRCG (ZCRCG|GOTOR) /* ZDLE-ZCRCG received */ #define GOTCRCQ (ZCRCQ|GOTOR) /* ZDLE-ZCRCQ received */ #define GOTCRCW (ZCRCW|GOTOR) /* ZDLE-ZCRCW received */ #define GOTCAN (GOTOR|030) /* CAN*5 seen */ /* Byte positions within header array */ #define ZF0 3 /* First flags byte */ #define ZF1 2 #define ZF2 1 #define ZF3 0 #define ZP0 0 /* Low order 8 bits of position */ #define ZP1 1 #define ZP2 2 #define ZP3 3 /* High order 8 bits of file position */ /* Bit Masks for ZRINIT flags byte ZF0 */ #define CANFDX 0x01 /* Rx can send and receive true FDX */ #define CANOVIO 0x02 /* Rx can receive data during disk I/O */ #define CANBRK 0x04 /* Rx can send a break signal */ #define CANCRY 0x08 /* Receiver can decrypt */ #define CANLZW 0x10 /* Receiver can uncompress */ #define CANFC32 0x20 /* Receiver can use 32 bit Frame Check */ #define ESCCTL 0x40 /* Receiver expects ctl chars to be escaped */ #define ESC8 0x80 /* Receiver expects 8th bit to be escaped */ /* Bit Masks for ZRINIT flags byze ZF1 */ #define ZF1_CANVHDR 0x01 /* Variable headers OK, unused in lrzsz */ #define ZF1_TIMESYNC 0x02 /* nonstandard, Receiver request timesync */ /* Parameters for ZSINIT frame */ #define ZATTNLEN 32 /* Max length of attention string */ /* Bit Masks for ZSINIT flags byte ZF0 */ #define TESCCTL 0100 /* Transmitter expects ctl chars to be escaped */ #define TESC8 0200 /* Transmitter expects 8th bit to be escaped */ /* Parameters for ZFILE frame */ /* Conversion options one of these in ZF0 */ #define ZCBIN 1 /* Binary transfer - inhibit conversion */ #define ZCNL 2 /* Convert NL to local end of line convention */ #define ZCRESUM 3 /* Resume interrupted file transfer */ /* Management include options, one of these ored in ZF1 */ #define ZF1_ZMSKNOLOC 0x80 /* Skip file if not present at rx */ /* Management options, one of these ored in ZF1 */ #define ZF1_ZMMASK 0x1f /* Mask for the choices below */ #define ZF1_ZMNEWL 1 /* Transfer if source newer or longer */ #define ZF1_ZMCRC 2 /* Transfer if different file CRC or length */ #define ZF1_ZMAPND 3 /* Append contents to existing file (if any) */ #define ZF1_ZMCLOB 4 /* Replace existing file */ #define ZF1_ZMNEW 5 /* Transfer if source newer */ /* Number 5 is alive ... */ #define ZF1_ZMDIFF 6 /* Transfer if dates or lengths different */ #define ZF1_ZMPROT 7 /* Protect destination file */ #define ZF1_ZMCHNG 8 /* Change filename if destination exists */ /* Transport options, one of these in ZF2 */ #define ZTLZW 1 /* Lempel-Ziv compression */ #define ZTCRYPT 2 /* Encryption */ #define ZTRLE 3 /* Run Length encoding */ /* Extended options for ZF3, bit encoded */ #define ZXSPARS 64 /* Encoding for sparse file operations */ /* Parameters for ZCOMMAND frame ZF0 (otherwise 0) */ #define ZCACK1 1 /* Acknowledge, then do command */ /* Globals used by ZMODEM functions */ #if 0 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 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 */ #endif /* End of ZMODEM.H */ lrzsz-0.12.21rc/po/ 777 764 764 0 6760042374 7111 5lrzsz-0.12.21rc/po/ChangeLog 666 764 764 12065 6607440603 10704 /* Automatically generated by po2tbl.sed from lrzsz.pot. */ #if HAVE_CONFIG_H # include #endif #include "libgettext.h" const struct _msg_ent _msg_tbl[] = { {"", 1}, {"Transfer complete.", 2}, {"need at least one file to send", 3}, {"option C needs argument", 4}, {"option c needs argument", 5}, {"option L needs argument", 6}, {"argument to option L out of range 24..%ld", 7}, {"option l needs argument", 8}, {"argument to option l out of range 32..%ld", 9}, {"argument to option t out of range 10..1000", 10}, {"security violation: can't do that under restricted shell\n", 11}, {"option w needs argument", 12}, {"unknown option", 13}, {"Can't send command in restricted mode\n", 14}, {"out of memory", 15}, {"Transfer incomplete\n", 16}, {"Transfer complete\n", 17}, {"Answering TIMESYNC", 18}, {"at", 19}, {"timezone", 20}, {"unknown", 21}, {"TIMESYNC: failed\n", 22}, {"TIMESYNC: ok\n", 23}, {" cannot open tmpfile %s: %s", 24}, {"Can't open any requested files.", 25}, {"Security Violation", 26}, {"Sending %s, %ld blocks: ", 27}, {"Give your local XMODEM receive command now.", 28}, {"Sending: %s\n", 29}, {"Timeout on pathname", 30}, {"Receiver Cancelled", 31}, {"No ACK on EOT", 32}, {"Ymodem sectors/kbytes sent: %3d/%2dk", 33}, {"Cancelled", 34}, {"Timeout on sector ACK", 35}, {"NAK on sector", 36}, {"Got burst for sector ACK", 37}, {"Got %02x for sector ACK", 38}, {"Retry Count Exceeded", 39}, {"%s version %s for %s %s\n", 40}, {"Send file(s) with ZMODEM/YMODEM/XMODEM Protocol\n", 41}, {"\ \t(Y) = Option applies to YMODEM only\n\ \t(Z) = Option applies to ZMODEM only\n", 42}, {"Usage: %s %s\n", 43}, {"\ \tlsz [-2Ceqv] -c COMMAND\n\ \tlsb [-2adfkquv] [-] file ...\n\ \tlsx [-2akquv] [-] file\n\ \t2 Use 2 stop bits\n\ \t8 go up to 8K blocksize (give twice to start with 8K blocksize)\n\ \t+ Append to existing destination file (Z)\n\ \ta (ASCII) change NL to CR/LF\n\ \tb Binary file transfer override\n\ \tc send COMMAND (Z)\n\ \td Change '.' to '/' in pathnames (Y/Z)\n\ \te Escape all control characters (Z)\n\ \tf send Full pathname (Y/Z)\n\ \ti send COMMAND, ack Immediately (Z)\n\ \th Print this usage message\n\ \tk Send 1024 byte packets (Y)\n\ \tL N Limit subpacket length to N bytes (Z)\n\ \tl N Limit frame length to N bytes (l>=L) (Z)\n\ \tn send file if source newer (Z)\n\ \tN send file if source newer or longer (Z)\n\ \to Use 16 bit CRC instead of 32 bit CRC (Z)\n\ \tp Protect existing destination file (Z)\n\ \tr Resume/Recover interrupted file transfer (Z)\n\ \tq Quiet (no progress reports)\n\ \tu Unlink file after transmission\n\ \tU disable restricted mode (if allowed to)\n\ \tv Verbose - provide debugging information\n\ \tw N Window is N bytes (Z)\n\ \tY Yes, overwrite existing file, skip if not present at rx (Z)\n\ \ty Yes, overwrite existing file (Z)\n", 44}, {"Bytes Sent:%7ld/%7ld BPS:%-8ld ETA %02d:%02d ", 45}, {"Bytes Sent:%7ld BPS:%-8ld \n", 46}, {"Falldown to %ld blklen", 47}, {"Sender Canceled", 48}, {"TIMEOUT", 49}, {"Bad data subpacket", 50}, {"Data subpacket too long", 51}, {"Garbage count exceeded", 52}, {"Got %s", 53}, {"Bad escape sequence %x", 54}, {"Retry %d: ", 55}, {"don't have settimeofday, will not set time\n", 56}, {"not running as root (this is good!), can not set time\n", 57}, {"option t needs argument", 58}, {"for", 59}, {"Receive files with ZMODEM/YMODEM/XMODEM protocol\n", 60}, {"\ \t+ append to existing files\n\ \ta ASCII transfer (change CR/LF to LF)\n\ \tb binary transfer\n\ \tc Use 16 bit CRC (XMODEM only)\n\ \tC allow execution of remote commands (ZMODEM only)\n\ \tD write all received data to /dev/null\n\ \te Escape control characters\t(ZMODEM)\n\ \th Help, print this usage message\n\ \tO disable timeout code, wait forever for remote data\n\ \tp protect existing files\n\ \tq quiet, no progress reports\n\ \tr try to resume interrupted file transfer (ZMODEM only)\n\ \tR restricted, more secure mode\n\ \tS request timesync packet (give twice to set local time)\n\ \tu keep upper case filenames\n\ \tU disable restricted mode (if allowed to)\n\ \tv Verbose - provide debugging information\n\ \tw N Window is N bytes (Z)\n\ \ty Yes, clobber existing file if any\n", 61}, {"%s waiting to receive.", 62}, {"%s: ready to receive %s", 63}, {"%s: %s removed.", 64}, {"Pathname fetch returned EOT", 65}, {"Received dup Sector", 66}, {"Sync Error", 67}, {"CRC", 68}, {"Checksum", 69}, {"Sector number garbled", 70}, {"Sender CANcelled", 71}, {"Got 0%o sector header", 72}, {"TIMESYNC: here %ld, remote %ld, diff %d seconds\n", 73}, {"TIMESYNC: cannot set time: %s\n", 74}, {"Topipe", 75}, {"Receiving: %s\n", 76}, {"cannot open %s", 77}, {"Blocks received: %d", 78}, {"%s: %s exists\n", 79}, {"%s:\tSecurity Violation", 80}, {"remote command execution requested", 81}, {"not executed", 82}, {"Bytes Received: %7ld/%7ld BPS:%-6ld ", 83}, {"Bytes Received: %7ld/%7ld BPS:%-6ld ETA %02d:%02d ", 84}, {"file close error", 85}, }; int _msg_tbl_length = 85; lrzsz-0.12.21rc/po/Makefile.in.in 666 764 764 15165 6607440603 11610 # Makefile for program source directory in GNU NLS utilities package. # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper # # This file file be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # Please note that the actual code is *not* freely available. PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = /bin/sh @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datadir = $(prefix)/@DATADIRNAME@ localedir = $(datadir)/locale gnulocaledir = $(prefix)/share/locale gettextsrcdir = $(prefix)/share/gettext/po subdir = po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = $(top_srcdir)/@MKINSTALLDIRS@ CC = @CC@ GENCAT = @GENCAT@ GMSGFMT = PATH=../src:$$PATH @GMSGFMT@ MSGFMT = @MSGFMT@ XGETTEXT = PATH=../src:$$PATH @XGETTEXT@ MSGMERGE = PATH=../src:$$PATH msgmerge DEFS = @DEFS@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ INCLUDES = -I.. -I$(top_srcdir)/intl COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) SOURCES = cat-id-tbl.c POFILES = @POFILES@ GMOFILES = @GMOFILES@ DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \ stamp-cat-id $(POFILES) $(GMOFILES) $(SOURCES) POTFILES = \ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ INSTOBJEXT = @INSTOBJEXT@ .SUFFIXES: .SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat .c.o: $(COMPILE) $< .po.pox: $(MAKE) $(PACKAGE).pot $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox .po.mo: $(MSGFMT) -o $@ $< .po.gmo: file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \ && rm -f $$file && $(GMSGFMT) -o $$file $< .po.cat: sed -f ../intl/po2msg.sed < $< > $*.msg \ && rm -f $@ && $(GENCAT) $@ $*.msg all: all-@USE_NLS@ all-yes: cat-id-tbl.c $(CATALOGS) all-no: $(srcdir)/$(PACKAGE).pot: $(POTFILES) $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \ --add-comments --keyword=_ --keyword=N_ \ --files-from=$(srcdir)/POTFILES.in rm -f $(srcdir)/$(PACKAGE).pot mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot $(srcdir)/cat-id-tbl.c: stamp-cat-id; @: $(srcdir)/stamp-cat-id: $(PACKAGE).pot rm -f cat-id-tbl.tmp sed -f ../intl/po2tbl.sed $(srcdir)/$(PACKAGE).pot \ | sed -e "s/@PACKAGE NAME@/$(PACKAGE)/" > cat-id-tbl.tmp if cmp -s cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; then \ rm cat-id-tbl.tmp; \ else \ echo cat-id-tbl.c changed; \ rm -f $(srcdir)/cat-id-tbl.c; \ mv cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; \ fi cd $(srcdir) && rm -f stamp-cat-id && echo timestamp > stamp-cat-id install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ install-data-no: all install-data-yes: all if test -r $(MKINSTALLDIRS); then \ $(MKINSTALLDIRS) $(datadir); \ else \ $(top_srcdir)/mkinstalldirs $(datadir); \ fi @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ case "$$cat" in \ *.gmo) destdir=$(gnulocaledir);; \ *) destdir=$(localedir);; \ esac; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ dir=$$destdir/$$lang/LC_MESSAGES; \ if test -r $(MKINSTALLDIRS); then \ $(MKINSTALLDIRS) $$dir; \ else \ $(top_srcdir)/mkinstalldirs $$dir; \ fi; \ if test -r $$cat; then \ $(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \ echo "installing $$cat as $$dir/$(PACKAGE)$(INSTOBJEXT)"; \ else \ $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \ echo "installing $(srcdir)/$$cat as" \ "$$dir/$(PACKAGE)$(INSTOBJEXT)"; \ fi; \ if test -r $$cat.m; then \ $(INSTALL_DATA) $$cat.m $$dir/$(PACKAGE)$(INSTOBJEXT).m; \ echo "installing $$cat.m as $$dir/$(PACKAGE)$(INSTOBJEXT).m"; \ else \ if test -r $(srcdir)/$$cat.m ; then \ $(INSTALL_DATA) $(srcdir)/$$cat.m \ $$dir/$(PACKAGE)$(INSTOBJEXT).m; \ echo "installing $(srcdir)/$$cat as" \ "$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \ else \ true; \ fi; \ fi; \ done if test "$(PACKAGE)" = "gettext"; then \ if test -r $(MKINSTALLDIRS); then \ $(MKINSTALLDIRS) $(gettextsrcdir); \ else \ $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \ fi; \ $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ $(gettextsrcdir)/Makefile.in.in; \ else \ : ; \ fi # Define this as empty until I found a useful application. installcheck: uninstall: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ done rm -f $(gettextsrcdir)/po-Makefile.in.in check: all cat-id-tbl.o: ../intl/libgettext.h dvi info tags TAGS ID: mostlyclean: rm -f core core.* *.pox $(PACKAGE).po *.old.po cat-id-tbl.tmp rm -fr *.o clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f $(GMOFILES) distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: update-po $(DISTFILES) dists="$(DISTFILES)"; \ for file in $$dists; do \ ln $(srcdir)/$$file $(distdir) 2> /dev/null \ || cp -p $(srcdir)/$$file $(distdir); \ done update-po: Makefile $(MAKE) $(PACKAGE).pot PATH=`pwd`/../src:$$PATH; \ cd $(srcdir); \ catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ mv $$lang.po $$lang.old.po; \ echo "$$lang:"; \ if $(MSGMERGE) $$lang.old.po $(PACKAGE).pot -o $$lang.po; then \ rm -f $$lang.old.po; \ else \ echo "msgmerge for $$cat failed!"; \ rm -f $$lang.po; \ mv $$lang.old.po $$lang.po; \ fi; \ done POTFILES: POTFILES.in ( if test 'x$(srcdir)' != 'x.'; then \ posrcprefix='$(top_srcdir)/'; \ else \ posrcprefix="../"; \ fi; \ rm -f $@-t $@ \ && (sed -e '/^#/d' -e '/^[ ]*$$/d' \ -e "s@.*@ $$posrcprefix& \\\\@" < $(srcdir)/$@.in \ | sed -e '$$s/\\$$//') > $@-t \ && chmod a-w $@-t \ && mv $@-t $@ ) Makefile: Makefile.in.in ../config.status POTFILES cd .. \ && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \ $(SHELL) ./config.status # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lrzsz-0.12.21rc/po/POTFILES.in 666 764 764 104 6607440603 10636 src/rbsb.c src/lsz.c src/zm.c src/zperr.c src/zreadline.c src/lrz.c lrzsz-0.12.21rc/po/lrzsz.pot 644 764 764 36377 6760035662 11057 # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 1999-08-22 21:00+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: ENCODING\n" #: src/lsz.c:228 msgid "io_mode(,2) in rbsb.c not implemented\n" msgstr "" #: src/lrz.c:196 src/lsz.c:230 #, c-format msgid "caught signal %d; exiting" msgstr "" #: src/lsz.c:400 msgid "command tries" msgstr "" #: src/lsz.c:422 msgid "packetlength" msgstr "" #: src/lsz.c:427 #, c-format msgid "packetlength out of range 24..%ld" msgstr "" #: src/lsz.c:436 msgid "framelength" msgstr "" #: src/lsz.c:441 #, c-format msgid "framelength out of range 32..%ld" msgstr "" #: src/lrz.c:318 src/lsz.c:450 msgid "min_bps" msgstr "" #: src/lsz.c:452 msgid "min_bps must be >= 0" msgstr "" #: src/lrz.c:324 src/lsz.c:458 msgid "min_bps_time" msgstr "" #: src/lrz.c:326 src/lsz.c:460 msgid "min_bps_time must be > 1" msgstr "" #: src/lrz.c:342 src/lsz.c:484 msgid "hour to large (0..23)" msgstr "" #: src/lrz.c:344 src/lsz.c:486 msgid "unparsable stop time\n" msgstr "" #: src/lrz.c:348 src/lsz.c:490 msgid "minute to large (0..59)" msgstr "" #: src/lrz.c:358 src/lrz.c:365 src/lsz.c:500 src/lsz.c:507 msgid "stop time to small" msgstr "" #: src/lrz.c:363 src/lsz.c:505 msgid "stop-at" msgstr "" #: src/lrz.c:394 src/lsz.c:516 msgid "timeout" msgstr "" #: src/lrz.c:396 src/lsz.c:518 msgid "timeout out of range 10..1000" msgstr "" #: src/lrz.c:412 src/lsz.c:526 msgid "security violation: can't do that under restricted shell\n" msgstr "" #: src/lrz.c:402 src/lsz.c:533 msgid "window size" msgstr "" #: src/lrz.c:427 src/lrz.c:434 src/lsz.c:556 src/lsz.c:563 msgid "cannot turnoff syslog" msgstr "" #: src/lrz.c:449 src/lsz.c:571 msgid "startup delay" msgstr "" #: src/lrz.c:465 src/lrz.c:483 src/lrz.c:760 src/lrz.c:1122 src/lrz.c:1244 #: src/lrz.c:1292 src/lrz.c:1309 src/lrz.c:1324 src/lrz.c:1423 src/lsz.c:580 #: src/lsz.c:596 src/lsz.c:693 src/lsz.c:828 src/lsz.c:1061 #: src/zreadline.c:127 msgid "out of memory" msgstr "" #: src/lrz.c:475 src/lsz.c:592 msgid "this program was never intended to be used setuid\n" msgstr "" #: src/lsz.c:612 src/lsz.c:627 msgid "need at least one file to send" msgstr "" #: src/lsz.c:629 msgid "Can't send command in restricted mode\n" msgstr "" #: src/lrz.c:527 src/lsz.c:656 msgid "hostname too long\n" msgstr "" #: src/lrz.c:542 src/lsz.c:671 msgid "illegal server address\n" msgstr "" #: src/lsz.c:710 msgid "can read only one file from stdin" msgstr "" #: src/lrz.c:574 src/lsz.c:803 msgid "Transfer incomplete\n" msgstr "" #: src/lrz.c:576 src/lsz.c:805 msgid "Transfer complete\n" msgstr "" #: src/lsz.c:838 #, c-format msgid "send_pseudo %s: cannot open tmpfile %s: %s" msgstr "" #: src/lsz.c:851 #, c-format msgid "send_pseudo %s: cannot lstat tmpfile %s: %s" msgstr "" #: src/lsz.c:859 #, c-format msgid "send_pseudo %s: avoiding symlink trap" msgstr "" #: src/lsz.c:870 #, c-format msgid "send_pseudo %s: cannot write to tmpfile %s: %s" msgstr "" #: src/lsz.c:879 #, c-format msgid "send_pseudo %s: failed" msgstr "" #: src/lsz.c:882 #, c-format msgid "send_pseudo %s: ok" msgstr "" #: src/lsz.c:916 #, c-format msgid "Answering TIMESYNC at %s" msgstr "" #: src/lsz.c:921 msgid "timezone" msgstr "" #: src/lsz.c:924 msgid "timezone unknown" msgstr "" #: src/lsz.c:953 msgid "Can't open any requested files." msgstr "" #: src/lsz.c:1009 #, c-format msgid "security violation: not allowed to upload from %s" msgstr "" #: src/lrz.c:1384 src/lsz.c:1027 #, c-format msgid "cannot open %s" msgstr "" #: src/lsz.c:1082 #, c-format msgid "is not a file: %s" msgstr "" #: src/lsz.c:1115 src/lsz.c:1130 #, c-format msgid "%s/%s: error occured" msgstr "" #: src/lsz.c:1119 #, c-format msgid "skipped: %s" msgstr "" #: src/lsz.c:1122 #, c-format msgid "%s/%s: skipped" msgstr "" #: src/lsz.c:1149 #, c-format msgid "Bytes Sent:%7ld BPS:%-8ld \n" msgstr "" #: src/lsz.c:1178 #, c-format msgid "Sending %s, %ld blocks: " msgstr "" #: src/lsz.c:1181 msgid "Give your local XMODEM receive command now." msgstr "" #: src/lsz.c:1224 #, c-format msgid "Sending: %s\n" msgstr "" #: src/lsz.c:1267 msgid "Timeout on pathname" msgstr "" #: src/lsz.c:1314 msgid "Receiver Cancelled" msgstr "" #: src/lsz.c:1340 msgid "No ACK on EOT" msgstr "" #: src/lsz.c:1361 #, c-format msgid "Xmodem sectors/kbytes sent: %3d/%2dk" msgstr "" #: src/lsz.c:1363 #, c-format msgid "Ymodem sectors/kbytes sent: %3d/%2dk" msgstr "" #: src/lsz.c:1395 msgid "Cancelled" msgstr "" #: src/lsz.c:1399 msgid "Timeout on sector ACK" msgstr "" #: src/lsz.c:1404 msgid "NAK on sector" msgstr "" #: src/lsz.c:1410 msgid "Got burst for sector ACK" msgstr "" #: src/lsz.c:1412 #, c-format msgid "Got %02x for sector ACK" msgstr "" #: src/lsz.c:1424 msgid "Retry Count Exceeded" msgstr "" #: src/lrz.c:596 src/lsz.c:1502 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "" #: src/lrz.c:601 src/lsz.c:1507 #, c-format msgid "%s version %s\n" msgstr "" #: src/lsz.c:1510 #, c-format msgid "Usage: %s [options] file ...\n" msgstr "" #: src/lsz.c:1512 #, c-format msgid " or: %s [options] -{c|i} COMMAND\n" msgstr "" #: src/lsz.c:1513 msgid "Send file(s) with ZMODEM/YMODEM/XMODEM protocol\n" msgstr "" #: src/lrz.c:607 src/lsz.c:1515 msgid "" " (X) = option applies to XMODEM only\n" " (Y) = option applies to YMODEM only\n" " (Z) = option applies to ZMODEM only\n" msgstr "" #: src/lsz.c:1521 msgid "" " -+, --append append to existing destination file (Z)\n" " -2, --twostop use 2 stop bits\n" " -4, --try-4k go up to 4K blocksize\n" " --start-4k start with 4K blocksize (doesn't try 8)\n" " -8, --try-8k go up to 8K blocksize\n" " --start-8k start with 8K blocksize\n" " -a, --ascii ASCII transfer (change CR/LF to LF)\n" " -b, --binary binary transfer\n" " -B, --bufsize N buffer N bytes (N==auto: buffer whole file)\n" " -c, --command COMMAND execute remote command COMMAND (Z)\n" " -C, --command-tries N try N times to execute a command (Z)\n" " -d, --dot-to-slash change '.' to '/' in pathnames (Y/Z)\n" " --delay-startup N sleep N seconds before doing anything\n" " -e, --escape escape all control characters (Z)\n" " -E, --rename force receiver to rename files it already has\n" " -f, --full-path send full pathname (Y/Z)\n" " -i, --immediate-command CMD send remote CMD, return immediately (Z)\n" " -h, --help print this usage message\n" " -k, --1k send 1024 byte packets (X)\n" " -L, --packetlen N limit subpacket length to N bytes (Z)\n" " -l, --framelen N limit frame length to N bytes (l>=L) (Z)\n" " -m, --min-bps N stop transmission if BPS below N\n" " -M, --min-bps-time N for at least N seconds (default: 120)\n" msgstr "" #: src/lsz.c:1546 msgid "" " -n, --newer send file if source newer (Z)\n" " -N, --newer-or-longer send file if source newer or longer (Z)\n" " -o, --16-bit-crc use 16 bit CRC instead of 32 bit CRC (Z)\n" " -O, --disable-timeouts disable timeout code, wait forever\n" " -p, --protect protect existing destination file (Z)\n" " -r, --resume resume interrupted file transfer (Z)\n" " -R, --restricted restricted, more secure mode\n" " -q, --quiet quiet (no progress reports)\n" " -s, --stop-at {HH:MM|+N} stop transmission at HH:MM or in N seconds\n" " --tcp-server open socket, wait for connection (Z)\n" " --tcp-client ADDR:PORT open socket, connect to ... (Z)\n" " -u, --unlink unlink file after transmission\n" " -U, --unrestrict turn off restricted mode (if allowed to)\n" " -v, --verbose be verbose, provide debugging information\n" " -w, --windowsize N Window is N bytes (Z)\n" " -X, --xmodem use XMODEM protocol\n" " -y, --overwrite overwrite existing files\n" " -Y, --overwrite-or-skip overwrite existing files, else skip\n" " --ymodem use YMODEM protocol\n" " -Z, --zmodem use ZMODEM protocol\n" "\n" "short options use the same arguments as the long ones\n" msgstr "" #: src/lsz.c:1768 msgid "got ZRQINIT" msgstr "" #: src/lrz.c:1079 src/lrz.c:1772 src/lsz.c:1774 msgid "got ZCAN" msgstr "" #: src/lsz.c:1991 #, c-format msgid "blklen now %d\n" msgstr "" #: src/lsz.c:2053 #, c-format msgid "zsendfdata: bps rate %ld below min %ld" msgstr "" #: src/lsz.c:2070 msgid "zsendfdata: reached stop time" msgstr "" #: src/lsz.c:2080 #, c-format msgid "Bytes Sent:%7ld/%7ld BPS:%-8ld ETA %02d:%02d " msgstr "" #: src/lsz.c:2223 #, c-format msgid "calc_blklen: reduced to %d due to error\n" msgstr "" #: src/lsz.c:2256 #, c-format msgid "calc_blklen: returned old value %d due to low bpe diff\n" msgstr "" #: src/lsz.c:2258 #, c-format msgid "calc_blklen: old %ld, new %ld, d %ld\n" msgstr "" #: src/lsz.c:2267 #, c-format msgid "calc_blklen: calc total_bytes=%ld, bpe=%ld, ec=%ld\n" msgstr "" #: src/lsz.c:2278 #, c-format msgid "calc_blklen: blklen %d, ok %ld, failed %ld -> %lu\n" msgstr "" #: src/lsz.c:2290 #, c-format msgid "calc_blklen: returned %d as best\n" msgstr "" #: src/lsz.c:2486 #, c-format msgid "" "\n" "countem: Total %d %ld\n" msgstr "" #: src/zm.c:245 #, c-format msgid "Bad escape sequence %x" msgstr "" #: src/zm.c:583 src/zm.c:642 msgid "Sender Canceled" msgstr "" #: src/lrz.c:1002 src/zm.c:586 src/zm.c:645 msgid "TIMEOUT" msgstr "" #: src/zm.c:589 src/zm.c:648 msgid "Bad data subpacket" msgstr "" #: src/zm.c:596 src/zm.c:655 msgid "Data subpacket too long" msgstr "" #: src/zm.c:712 msgid "Garbage count exceeded" msgstr "" #: src/zm.c:773 #, c-format msgid "Got %s" msgstr "" #: src/zperr.c:49 #, c-format msgid "Retry %d: " msgstr "" #: src/lrz.c:382 msgid "don't have settimeofday, will not set time\n" msgstr "" #: src/lrz.c:386 msgid "not running as root (this is good!), can not set time\n" msgstr "" #: src/lrz.c:441 msgid "bytes_per_error" msgstr "" #: src/lrz.c:443 msgid "bytes-per-error should be >100" msgstr "" #: src/lrz.c:455 msgid "O_SYNC not supported by the kernel" msgstr "" #: src/lrz.c:497 src/lrz.c:499 msgid "garbage on commandline" msgstr "" #: src/lrz.c:604 #, c-format msgid "Usage: %s [options] [filename.if.xmodem]\n" msgstr "" #: src/lrz.c:605 msgid "Receive files with ZMODEM/YMODEM/XMODEM protocol\n" msgstr "" #: src/lrz.c:612 msgid "" " -+, --append append to existing files\n" " -a, --ascii ASCII transfer (change CR/LF to LF)\n" " -b, --binary binary transfer\n" " -B, --bufsize N buffer N bytes (N==auto: buffer whole file)\n" " -c, --with-crc Use 16 bit CRC (X)\n" " -C, --allow-remote-commands allow execution of remote commands (Z)\n" " -D, --null write all received data to /dev/null\n" " --delay-startup N sleep N seconds before doing anything\n" " -e, --escape Escape control characters (Z)\n" " -E, --rename rename any files already existing\n" " --errors N generate CRC error every N bytes (debugging)\n" " -h, --help Help, print this usage message\n" " -m, --min-bps N stop transmission if BPS below N\n" " -M, --min-bps-time N for at least N seconds (default: 120)\n" " -O, --disable-timeouts disable timeout code, wait forever for data\n" " --o-sync open output file(s) in synchronous write mode\n" " -p, --protect protect existing files\n" " -q, --quiet quiet, no progress reports\n" " -r, --resume try to resume interrupted file transfer (Z)\n" " -R, --restricted restricted, more secure mode\n" " -s, --stop-at {HH:MM|+N} stop transmission at HH:MM or in N seconds\n" " -S, --timesync request remote time (twice: set local time)\n" " --syslog[=off] turn syslog on or off, if possible\n" " -t, --timeout N set timeout to N tenths of a second\n" " --tcp-server open socket, wait for connection (Z)\n" " --tcp-client ADDR:PORT open socket, connect to ... (Z)\n" " -u, --keep-uppercase keep upper case filenames\n" " -U, --unrestrict disable restricted mode (if allowed to)\n" " -v, --verbose be verbose, provide debugging information\n" " -w, --windowsize N Window is N bytes (Z)\n" " -X --xmodem use XMODEM protocol\n" " -y, --overwrite Yes, clobber existing file if any\n" " --ymodem use YMODEM protocol\n" " -Z, --zmodem use ZMODEM protocol\n" "\n" "short options use the same arguments as the long ones\n" msgstr "" #: src/lrz.c:676 #, c-format msgid "%s waiting to receive." msgstr "" #: src/lrz.c:730 src/lrz.c:1806 #, c-format msgid "\rBytes received: %7ld/%7ld BPS:%-6ld \r\n" msgstr "" #: src/lrz.c:772 #, c-format msgid "%s: ready to receive %s" msgstr "" #: src/lrz.c:799 #, c-format msgid "\rBytes received: %7ld BPS:%-6ld \r\n" msgstr "" #: src/lrz.c:825 #, c-format msgid "" "\r\n" "%s: %s removed.\r\n" msgstr "" #: src/lrz.c:856 msgid "Pathname fetch returned EOT" msgstr "" #: src/lrz.c:903 msgid "Received dup Sector" msgstr "" #: src/lrz.c:917 msgid "Sync Error" msgstr "" #: src/lrz.c:965 msgid "CRC" msgstr "" #: src/lrz.c:976 msgid "Checksum" msgstr "" #: src/lrz.c:979 msgid "Sector number garbled" msgstr "" #: src/lrz.c:991 msgid "Sender Cancelled" msgstr "" #: src/lrz.c:1005 #, c-format msgid "Got 0%o sector header" msgstr "" #: src/lrz.c:1113 #, c-format msgid "file name ends with a /, skipped: %s\n" msgstr "" #: src/lrz.c:1127 #, c-format msgid "zmanag=%d, Lzmanag=%d\n" msgstr "" #: src/lrz.c:1128 #, c-format msgid "zconv=%d\n" msgstr "" #: src/lrz.c:1192 src/lrz.c:1226 #, c-format msgid "file exists, skipped: %s\n" msgstr "" #: src/lrz.c:1267 #, c-format msgid "TIMESYNC: here %ld, remote %ld, diff %ld seconds\n" msgstr "" #: src/lrz.c:1276 #, c-format msgid "TIMESYNC: cannot set time: %s\n" msgstr "" #: src/lrz.c:1296 msgid "Topipe" msgstr "" #: src/lrz.c:1314 #, c-format msgid "Receiving: %s\n" msgstr "" #: src/lrz.c:1545 #, c-format msgid "Blocks received: %d" msgstr "" #: src/lrz.c:1599 #, c-format msgid "%s: %s exists\n" msgstr "" #: src/lrz.c:1612 src/lrz.c:1620 #, c-format msgid "%s:\tSecurity Violation" msgstr "" #: src/lrz.c:1730 msgid "remote command execution requested" msgstr "" #: src/lrz.c:1737 msgid "not executed" msgstr "" #: src/lrz.c:1768 msgid "got ZRINIT" msgstr "" #: src/lrz.c:1817 msgid "Skipped" msgstr "" #. too bad #: src/lrz.c:2049 #, c-format msgid "rzfile: bps rate %ld below min %ld" msgstr "" #. too bad #: src/lrz.c:2064 msgid "rzfile: reached stop time" msgstr "" #: src/lrz.c:2071 #, c-format msgid "\rBytes received: %7ld/%7ld BPS:%-6ld ETA %02d:%02d " msgstr "" #: src/lrz.c:2215 msgid "file close error" msgstr "" lrzsz-0.12.21rc/po/stamp-cat-id 664 764 764 12 6760036411 11241 timestamp lrzsz-0.12.21rc/po/de.po 664 764 764 63053 6760042374 10066 # german translation of lrzsz output # Copyright (C) 1997 Uwe Ohse # Uwe Ohse , 1997. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 1999-08-22 21:00+0200\n" "PO-Revision-Date: 1997-06-01 19:00+0200\n" "Last-Translator: FULL NAME \n" "Language-Team: none. try \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #: src/lsz.c:228 msgid "io_mode(,2) in rbsb.c not implemented\n" msgstr "io_mode(2) in rbsb.c nicht implementiert\n" #: src/lrz.c:196 src/lsz.c:230 #, c-format msgid "caught signal %d; exiting" msgstr "erhielt Signal %d; Programmabbruch" #: src/lsz.c:400 msgid "command tries" msgstr "Kommandowiederholungen" #: src/lsz.c:422 msgid "packetlength" msgstr "Paketlänge" #: src/lsz.c:427 #, c-format msgid "packetlength out of range 24..%ld" msgstr "Argument der Option L außerhalb des Bereichs 24..%ld" #: src/lsz.c:436 msgid "framelength" msgstr "Framelänge" #: src/lsz.c:441 #, c-format msgid "framelength out of range 32..%ld" msgstr "Argument der Option l außerhalb des Bereichs 32..%ld" #: src/lrz.c:318 src/lsz.c:450 msgid "min_bps" msgstr "minimale BPS-Rate" #: src/lsz.c:452 msgid "min_bps must be >= 0" msgstr "minimale BPS-Rate muß >= 0 sein" #: src/lrz.c:324 src/lsz.c:458 msgid "min_bps_time" msgstr "" #: src/lrz.c:326 src/lsz.c:460 msgid "min_bps_time must be > 1" msgstr "Zeitfenster für minimale BPS-Rate muß > 1 Sekunde sein" #: src/lrz.c:342 src/lsz.c:484 msgid "hour to large (0..23)" msgstr "Stunde zu gross (0..23)" #: src/lrz.c:344 src/lsz.c:486 msgid "unparsable stop time\n" msgstr "unparsbare Endzeit\n" #: src/lrz.c:348 src/lsz.c:490 msgid "minute to large (0..59)" msgstr "Minute zu groß (0..59)" #: src/lrz.c:358 src/lrz.c:365 src/lsz.c:500 src/lsz.c:507 msgid "stop time to small" msgstr "Stopzeit zu kurz" #: src/lrz.c:363 src/lsz.c:505 msgid "stop-at" msgstr "" #: src/lrz.c:394 src/lsz.c:516 msgid "timeout" msgstr "Timeout" #: src/lrz.c:396 src/lsz.c:518 msgid "timeout out of range 10..1000" msgstr "Argument der Option t außerhalb des Bereichs 10..1000" #: src/lrz.c:412 src/lsz.c:526 msgid "security violation: can't do that under restricted shell\n" msgstr "Sicherheitsverstoß: Ausführung unter eingeschränkter Shell verboten\n" #: src/lrz.c:402 src/lsz.c:533 msgid "window size" msgstr "Fenstergröße" #: src/lrz.c:427 src/lrz.c:434 src/lsz.c:556 src/lsz.c:563 msgid "cannot turnoff syslog" msgstr "kann syslogging nicht abschalten" #: src/lrz.c:449 src/lsz.c:571 msgid "startup delay" msgstr "Startverzögerung" #: src/lrz.c:465 src/lrz.c:483 src/lrz.c:760 src/lrz.c:1122 src/lrz.c:1244 #: src/lrz.c:1292 src/lrz.c:1309 src/lrz.c:1324 src/lrz.c:1423 src/lsz.c:580 #: src/lsz.c:596 src/lsz.c:693 src/lsz.c:828 src/lsz.c:1061 #: src/zreadline.c:127 msgid "out of memory" msgstr "Kein Speicher mehr frei" #: src/lrz.c:475 src/lsz.c:592 msgid "this program was never intended to be used setuid\n" msgstr "dieses Programm darf nicht setuid laufen\n" #: src/lsz.c:612 src/lsz.c:627 msgid "need at least one file to send" msgstr "es muß mindestens ein Name einer zu sendenden Datei angegeben werden" #: src/lsz.c:629 msgid "Can't send command in restricted mode\n" msgstr "Im eingeschränkten Modus ist das Senden von Kommandos verboten\n" #: src/lrz.c:527 src/lsz.c:656 msgid "hostname too long\n" msgstr "Hostname zu lang\n" #: src/lrz.c:542 src/lsz.c:671 msgid "illegal server address\n" msgstr "Illegale Serveraddresse\n" #: src/lsz.c:710 msgid "can read only one file from stdin" msgstr "kann nur eine Datei von der Standardeingabe lesen" #: src/lrz.c:574 src/lsz.c:803 msgid "Transfer incomplete\n" msgstr "Übertragung nicht abgeschlossen\n" #: src/lrz.c:576 src/lsz.c:805 msgid "Transfer complete\n" msgstr "Übertragung abgeschlossen\n" #: src/lsz.c:838 #, c-format msgid "send_pseudo %s: cannot open tmpfile %s: %s" msgstr "send_pseudo %s: kann temporäre Datei %s nicht öffnen: %s" #: src/lsz.c:851 #, c-format msgid "send_pseudo %s: cannot lstat tmpfile %s: %s" msgstr "send_pseudo %s: kann lstat nicht auf temporäre Datei %s anwenden: %s" #: src/lsz.c:859 #, c-format msgid "send_pseudo %s: avoiding symlink trap" msgstr "send_pseudo %s: vermied symlink Falle" #: src/lsz.c:870 #, c-format msgid "send_pseudo %s: cannot write to tmpfile %s: %s" msgstr "send_pseudo %s: kann nicht in temporäre Datei %s schreiben: %s" #: src/lsz.c:879 #, c-format msgid "send_pseudo %s: failed" msgstr "send_pseudo %s: Fehlschlag" #: src/lsz.c:882 #, c-format msgid "send_pseudo %s: ok" msgstr "send_pseudo %s: Erfolg" #: src/lsz.c:916 #, c-format msgid "Answering TIMESYNC at %s" msgstr "Beantworte Zeitsynchronisation um %s" #: src/lsz.c:921 msgid "timezone" msgstr "Zeitzone" #: src/lsz.c:924 msgid "timezone unknown" msgstr "Zeitzone unbekannt" #: src/lsz.c:953 msgid "Can't open any requested files." msgstr "Kann keine der angeforderten Dateien öffnen" #: src/lsz.c:1009 #, c-format msgid "security violation: not allowed to upload from %s" msgstr "Sicherheitsverstoß: Ausführung unter eingeschränkter Shell verboten" #: src/lrz.c:1384 src/lsz.c:1027 #, c-format msgid "cannot open %s" msgstr "kann %s nicht öffnen" #: src/lsz.c:1082 #, c-format msgid "is not a file: %s" msgstr "keine Datei: %s" #: src/lsz.c:1115 src/lsz.c:1130 #, c-format msgid "%s/%s: error occured" msgstr "%s/%s: Fehler aufgetreten" #: src/lsz.c:1119 #, c-format msgid "skipped: %s" msgstr "übersprungen: %s" #: src/lsz.c:1122 #, c-format msgid "%s/%s: skipped" msgstr "%s/%s: übersprungen" #: src/lsz.c:1149 #, c-format msgid "Bytes Sent:%7ld BPS:%-8ld \n" msgstr "Bytes gesendet:%7ld BPS:%-8ld \n" #: src/lsz.c:1178 #, c-format msgid "Sending %s, %ld blocks: " msgstr "Sende %s, %ld Blöcke:" #: src/lsz.c:1181 msgid "Give your local XMODEM receive command now." msgstr "Starten Sie nun Ihr XMODEM-Empfangsprogramm." #: src/lsz.c:1224 #, c-format msgid "Sending: %s\n" msgstr "Sende: %s\n" #: src/lsz.c:1267 msgid "Timeout on pathname" msgstr "Timeout beim Warten vor Pfadname" #: src/lsz.c:1314 msgid "Receiver Cancelled" msgstr "Empfänger brach ab" #: src/lsz.c:1340 msgid "No ACK on EOT" msgstr "Keine Bestätigung für Übertragungsende erhalten" #: src/lsz.c:1361 #, c-format msgid "Xmodem sectors/kbytes sent: %3d/%2dk" msgstr "Ymodem Sektoren/Kilobytes gesendet: %3d/%2dk" #: src/lsz.c:1363 #, c-format msgid "Ymodem sectors/kbytes sent: %3d/%2dk" msgstr "Ymodem Sektoren/Kilobytes gesendet: %3d/%2dk" #: src/lsz.c:1395 msgid "Cancelled" msgstr "Abgebrochen" #: src/lsz.c:1399 msgid "Timeout on sector ACK" msgstr "Timeout bei Sektorbestätigung" #: src/lsz.c:1404 msgid "NAK on sector" msgstr "Sektor nicht bestätigt" #: src/lsz.c:1410 msgid "Got burst for sector ACK" msgstr "" #: src/lsz.c:1412 #, c-format msgid "Got %02x for sector ACK" msgstr "Erhielt %02x als Sektorbestätigung" #: src/lsz.c:1424 msgid "Retry Count Exceeded" msgstr "Maximale Wiederholungsanzahl überschritten" #: src/lrz.c:596 src/lsz.c:1502 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "`%s --help' gibt weitere Informationen.\n" #: src/lrz.c:601 src/lsz.c:1507 #, c-format msgid "%s version %s\n" msgstr "%s Version %s\n" #: src/lsz.c:1510 #, c-format msgid "Usage: %s [options] file ...\n" msgstr "Benutzung: %s [Optionen] Datei ...\n" #: src/lsz.c:1512 #, c-format msgid " or: %s [options] -{c|i} COMMAND\n" msgstr " oder: %s [Optionen] -{c|i} KOMMANDO\n" #: src/lsz.c:1513 msgid "Send file(s) with ZMODEM/YMODEM/XMODEM protocol\n" msgstr "Dateien mit ZMODEM/YMODEM/XMODEM übertragen\n" # src/lrz.c:475 src/lsz.c:1330 xx #: src/lrz.c:607 src/lsz.c:1515 msgid "" " (X) = option applies to XMODEM only\n" " (Y) = option applies to YMODEM only\n" " (Z) = option applies to ZMODEM only\n" msgstr "" " (X) = Option gilt nur für XMODEM\n" " (Y) = Option gilt nur für YMODEM\n" " (Z) = Option gilt nur für ZMODEM\n" #: src/lsz.c:1521 msgid "" " -+, --append append to existing destination file (Z)\n" " -2, --twostop use 2 stop bits\n" " -4, --try-4k go up to 4K blocksize\n" " --start-4k start with 4K blocksize (doesn't try 8)\n" " -8, --try-8k go up to 8K blocksize\n" " --start-8k start with 8K blocksize\n" " -a, --ascii ASCII transfer (change CR/LF to LF)\n" " -b, --binary binary transfer\n" " -B, --bufsize N buffer N bytes (N==auto: buffer whole file)\n" " -c, --command COMMAND execute remote command COMMAND (Z)\n" " -C, --command-tries N try N times to execute a command (Z)\n" " -d, --dot-to-slash change '.' to '/' in pathnames (Y/Z)\n" " --delay-startup N sleep N seconds before doing anything\n" " -e, --escape escape all control characters (Z)\n" " -E, --rename force receiver to rename files it already has\n" " -f, --full-path send full pathname (Y/Z)\n" " -i, --immediate-command CMD send remote CMD, return immediately (Z)\n" " -h, --help print this usage message\n" " -k, --1k send 1024 byte packets (X)\n" " -L, --packetlen N limit subpacket length to N bytes (Z)\n" " -l, --framelen N limit frame length to N bytes (l>=L) (Z)\n" " -m, --min-bps N stop transmission if BPS below N\n" " -M, --min-bps-time N for at least N seconds (default: 120)\n" msgstr "" " -+, --append an existierende Dateien anhängen (Z)\n" " -2, --twostop zwei Stopbits verwenden\n" " -4, --try-4k bis zu 4K Blockgröße verwenden\n" " --start-4k mit 4K Blockgröße starten (versucht nicht 8)\n" " -8, --try-8k bis zu 8K Blockgröße verwenden\n" " --start-8k mit 8K Blockgröße starten\n" " -a, --ascii ASCII: NL nach CR/LF wandeln\n" " -b, --binary Binärübertragung erzwingen\n" " -B, --bufsize N N Bytes puffern (auto: ganze Datei puffern)\n" " -c, --command COMMAND Kommando KOMMANDO auf Gegenseite ausführen " "(Z)\n" " -C, --command-tries N N mal Kommandoausführung versuchen (Z)\n" " -d, --dot-to-slash C '.' in Dateinamen nach '/' wandeln (Y/Z)\n" " --delay-startup N Bei Programmstart N Sek. schlafen (Debugging)\n" " -e, --escape alle Steuerzeichen escapen (Z)\n" " -E, --rename Empfänger soll Datei umbenennen falls\n" " Zieldatei schon existiert\n" " -f, --full-path Dateien mit vollen Pfaden senden (Y/Z)\n" " -i, --immediate-command CMD wie `c', aber sofort zurückkehren (Z)\n" " -h, --help diesen Hilfetext ausgeben\n" " -k, --1k 1024 Bytes Pakete senden (Y)\n" " -L, --packetlen N Unterpaketlänge auf N Bytes beschränken (Z)\n" " -l, --framelen N Rahmenlänge auf N Bytes beschränken (l>=L) " "(Z)\n" " -m, --min-bps N Übertragung abbrechen bei weniger als N BPS\n" " -M, --min-bps-time N für mindestens N Sekunden (Default: 120)\n" #: src/lsz.c:1546 msgid "" " -n, --newer send file if source newer (Z)\n" " -N, --newer-or-longer send file if source newer or longer (Z)\n" " -o, --16-bit-crc use 16 bit CRC instead of 32 bit CRC (Z)\n" " -O, --disable-timeouts disable timeout code, wait forever\n" " -p, --protect protect existing destination file (Z)\n" " -r, --resume resume interrupted file transfer (Z)\n" " -R, --restricted restricted, more secure mode\n" " -q, --quiet quiet (no progress reports)\n" " -s, --stop-at {HH:MM|+N} stop transmission at HH:MM or in N seconds\n" " --tcp-server open socket, wait for connection (Z)\n" " --tcp-client ADDR:PORT open socket, connect to ... (Z)\n" " -u, --unlink unlink file after transmission\n" " -U, --unrestrict turn off restricted mode (if allowed to)\n" " -v, --verbose be verbose, provide debugging information\n" " -w, --windowsize N Window is N bytes (Z)\n" " -X, --xmodem use XMODEM protocol\n" " -y, --overwrite overwrite existing files\n" " -Y, --overwrite-or-skip overwrite existing files, else skip\n" " --ymodem use YMODEM protocol\n" " -Z, --zmodem use ZMODEM protocol\n" "\n" "short options use the same arguments as the long ones\n" msgstr "" " -n, --newer Datei senden wenn sie neuer ist (Z)\n" " -N, --newer-or-longer Datei senden wenn neuer oder länger (Z)\n" " -o, --16-bit-crc 16Bit CRC statt 32Bit CRC verwenden (Z)\n" " -O, --disable-timeouts Timeoutbehandlung abschalten\n" " -p, --protect existierende Dateien nicht verändern\n" " -r, --resume unterbrochene Übertragungen fortsetzen (Z)\n" " -R, --restricted eingeschränkter, sichererer Modus\n" " -q, --quiet leise, keine Ausgaben machen\n" " -s, --stop-at {HH:MM|+N} Übertragung um HH:MM oder in N Sek. abbrechen\n" " --tcp-server Socket öffnen und auf Verbindung warten\n" " --tcp-client ADDR:PORT Socket öffnen und verbindung mit ...\n" " -u, --unlink Datei nach Übertragung löschen\n" " -U, --unrestrict eingeschränkten Modus aufheben (falls " "erlaubt)\n" " -v, --verbose mehr ausgeben\n" " -w, --windowsize N Fenstergröße auf N Bytes setzen (Z)\n" " -X --xmodem XMODEM-Protokoll benutzen\n" " -y, --overwrite existierende Dateien überschreiben\n" " -Y, --overwrite-or-skip wie `y', aber nicht existierende überspringen\n" " --ymodem YMODEM-Protokoll benutzen\n" " -Z, --zmodem ZMODEM-Protokoll benutzen\n" "\n" "Kurze Optionen benötigen dieselben Argumente wie Lange.\n" #: src/lsz.c:1768 msgid "got ZRQINIT" msgstr "erhielt ZRQINIT" #: src/lrz.c:1079 src/lrz.c:1772 src/lsz.c:1774 msgid "got ZCAN" msgstr "erhielt ZCAN" #: src/lsz.c:1991 #, c-format msgid "blklen now %d\n" msgstr "Blockgröße nun %d\n" #: src/lsz.c:2053 #, c-format msgid "zsendfdata: bps rate %ld below min %ld" msgstr "rzfile: BPS-Rate %ld unter Minimum %ld" #: src/lsz.c:2070 msgid "zsendfdata: reached stop time" msgstr "rzfile: Abbruchzeit erreicht" #: src/lsz.c:2080 #, c-format msgid "Bytes Sent:%7ld/%7ld BPS:%-8ld ETA %02d:%02d " msgstr "Bytes gesendet:%7ld/%7ld BPS:%-8ld ETA %02d:%02d " #: src/lsz.c:2223 #, c-format msgid "calc_blklen: reduced to %d due to error\n" msgstr "calc_blklen: Blockgrösse auf %d reduziert wegen Fehler\n" #: src/lsz.c:2256 #, c-format msgid "calc_blklen: returned old value %d due to low bpe diff\n" msgstr "calc_blklen: liefert alten Wert %d wegen geringer bpe Differenz\n" #: src/lsz.c:2258 #, c-format msgid "calc_blklen: old %ld, new %ld, d %ld\n" msgstr "calc_blklen: alt %ld, neu %ld, Differenz %ld\n" #: src/lsz.c:2267 #, c-format msgid "calc_blklen: calc total_bytes=%ld, bpe=%ld, ec=%ld\n" msgstr "calc_blklen: kalkuliere gesamt_bytes=%ld, bpe=%le, ec=%ld\n" #: src/lsz.c:2278 #, c-format msgid "calc_blklen: blklen %d, ok %ld, failed %ld -> %lu\n" msgstr "calc_blklen: Blocklänge %d, ok %ld, fehlgeschlagen %ld -> %lu\n" #: src/lsz.c:2290 #, c-format msgid "calc_blklen: returned %d as best\n" msgstr "calc_blklen: liefert %d als besten Wert\n" #: src/lsz.c:2486 #, c-format msgid "" "\n" "countem: Total %d %ld\n" msgstr "" "\n" "countem: Gesamt %d %ld\n" #: src/zm.c:245 #, c-format msgid "Bad escape sequence %x" msgstr "Falsche Escapesequenz %x" #: src/zm.c:583 src/zm.c:642 msgid "Sender Canceled" msgstr "Sender brach ab" #: src/lrz.c:1002 src/zm.c:586 src/zm.c:645 msgid "TIMEOUT" msgstr "TIMEOUT" #: src/zm.c:589 src/zm.c:648 msgid "Bad data subpacket" msgstr "Falsches Unterpaket" #: src/zm.c:596 src/zm.c:655 msgid "Data subpacket too long" msgstr "Datenunterpaket zu lang" #: src/zm.c:712 msgid "Garbage count exceeded" msgstr "Maximale Wiederholungsanzahl überschritten" #: src/zm.c:773 #, c-format msgid "Got %s" msgstr "Erhielt %s" #: src/zperr.c:49 #, c-format msgid "Retry %d: " msgstr "Wiederholungsversuch %d: " #: src/lrz.c:382 msgid "don't have settimeofday, will not set time\n" msgstr "Zeitsynchronisation nicht ausführbar, settimeofday() fehlt\n" #: src/lrz.c:386 msgid "not running as root (this is good!), can not set time\n" msgstr "Zeitsynchronisation mangels Superuserrechten nicht ausführbar\n" #: src/lrz.c:441 msgid "bytes_per_error" msgstr "Bytes-pro-Fehler" #: src/lrz.c:443 msgid "bytes-per-error should be >100" msgstr "Bytes-pro-Fehler muss >100 sein" #: src/lrz.c:455 msgid "O_SYNC not supported by the kernel" msgstr "O_SYNC vom Kernel nicht unterstützt" #: src/lrz.c:497 src/lrz.c:499 msgid "garbage on commandline" msgstr "Müll auf der Kommandozeile" #: src/lrz.c:604 #, c-format msgid "Usage: %s [options] [filename.if.xmodem]\n" msgstr "Benutzung: %s [Optionen] [Dateiname.für.xmodem]\n" #: src/lrz.c:605 msgid "Receive files with ZMODEM/YMODEM/XMODEM protocol\n" msgstr "Dateien mit ZMODEM/YMODEM/XMODEM-Protokoll empfangen\n" #: src/lrz.c:612 msgid "" " -+, --append append to existing files\n" " -a, --ascii ASCII transfer (change CR/LF to LF)\n" " -b, --binary binary transfer\n" " -B, --bufsize N buffer N bytes (N==auto: buffer whole file)\n" " -c, --with-crc Use 16 bit CRC (X)\n" " -C, --allow-remote-commands allow execution of remote commands (Z)\n" " -D, --null write all received data to /dev/null\n" " --delay-startup N sleep N seconds before doing anything\n" " -e, --escape Escape control characters (Z)\n" " -E, --rename rename any files already existing\n" " --errors N generate CRC error every N bytes (debugging)\n" " -h, --help Help, print this usage message\n" " -m, --min-bps N stop transmission if BPS below N\n" " -M, --min-bps-time N for at least N seconds (default: 120)\n" " -O, --disable-timeouts disable timeout code, wait forever for data\n" " --o-sync open output file(s) in synchronous write mode\n" " -p, --protect protect existing files\n" " -q, --quiet quiet, no progress reports\n" " -r, --resume try to resume interrupted file transfer (Z)\n" " -R, --restricted restricted, more secure mode\n" " -s, --stop-at {HH:MM|+N} stop transmission at HH:MM or in N seconds\n" " -S, --timesync request remote time (twice: set local time)\n" " --syslog[=off] turn syslog on or off, if possible\n" " -t, --timeout N set timeout to N tenths of a second\n" " --tcp-server open socket, wait for connection (Z)\n" " --tcp-client ADDR:PORT open socket, connect to ... (Z)\n" " -u, --keep-uppercase keep upper case filenames\n" " -U, --unrestrict disable restricted mode (if allowed to)\n" " -v, --verbose be verbose, provide debugging information\n" " -w, --windowsize N Window is N bytes (Z)\n" " -X --xmodem use XMODEM protocol\n" " -y, --overwrite Yes, clobber existing file if any\n" " --ymodem use YMODEM protocol\n" " -Z, --zmodem use ZMODEM protocol\n" "\n" "short options use the same arguments as the long ones\n" msgstr "" " -+, --append an existierende Dateien anhängen\n" " -a, --ascii ASCII-Übertragung (CR/LF nach LF wandeln)\n" " -b, --binary Binärübertragung (keine Umwandlungen)\n" " -B, --bufsize N N Bytes puffern (auto: ganze Datei puffern)\n" " -c, --with-crc 16bit CRC statt Prüfsumme verwenden (X)\n" " -C, --allow-remote-commands Ausführung von Kommandos erlauben (Z)\n" " -D, --null empfangene Daten nach /dev/null schreiben\n" " --delay-startup N Bei Programmstart N Sek. schlafen (Debugging)\n" " -e, --escape Alle Steuerzeichen escapen (Z)\n" " -E, --rename Empfänger soll Datei umbenennen falls\n" " Zieldatei schon existiert\n" " --errors N Einen CRC-Fehler alle N Bytes erzeugen\n" " -h, --help Diesen Hilfstext ausgeben\n" " -m, --min-bps N Übertragung abbrechen bei weniger als N BPS\n" " -M, --min-bps-time N für mindestens N Sekunden (Default: 120)\n" " -O, --disable-timeouts Timeoutbehandlung abschalten\n" " --o-sync Ausgabedatei(en) im synchron schreiben\n" " -p, --protect existierende Dateien nicht verändern\n" " -q, --quiet leise, keine Ausgaben machen\n" " -r, --resume unterbrochene Übertragungen fortsetzen (Z)\n" " -R, --restricted eingeschränkter, sichererer Modus\n" " -s, --stop-at {HH:MM|+N} Übertragung um HH:MM oder in N Sek. abbrechen\n" " -S, --timesync Zeit anfordern (doppelt: lokale Zeit setzen)\n" " --syslog[=off] syslog an- oder ausschalten, wenn möglich\n" " -t, --timeout N Timeout auf N Zehntelsekungen setzen\n" " --tcp-server Socket öffnen und auf Verbindung warten\n" " --tcp-client ADDR:PORT Socket öffnen und verbindung mit ...\n" " -u, --keep-uppercase GROSS geschrieben Dateinamen beibehalten\n" " -U, --unrestrict eingeschränkten Modus aufheben (falls " "erlaubt)\n" " -v, --verbose mehr ausgeben\n" " -w, --windowsize N Fenstergröße auf N Bytes setzen (Z)\n" " -X --xmodem XMODEM-Protokoll benutzen\n" " -y, --overwrite existierende Dateien überschreiben\n" " --ymodem YMODEM-Protokoll benutzen\n" " -Z, --zmodem ZMODEM-Protokoll benutzen\n" "\n" "Kurze Optionen benötigen dieselben Argumente wie Lange.\n" #: src/lrz.c:676 #, c-format msgid "%s waiting to receive." msgstr "%s wartet auf Sender." #: src/lrz.c:730 src/lrz.c:1806 #, c-format msgid "\rBytes received: %7ld/%7ld BPS:%-6ld \r\n" msgstr "\rBytes empfangen:%7ld/%7ld BPS:%-8ld \r\n" #: src/lrz.c:772 #, c-format msgid "%s: ready to receive %s" msgstr "%s: bereit zum Empfangen von %s" #: src/lrz.c:799 #, c-format msgid "\rBytes received: %7ld BPS:%-6ld \r\n" msgstr "\rBytes empfangen: %7ld BPS:%-6ld \r\n" #: src/lrz.c:825 #, c-format msgid "" "\r\n" "%s: %s removed.\r\n" msgstr "" "\r\n" "%s: %s gelöscht\r\n" #: src/lrz.c:856 msgid "Pathname fetch returned EOT" msgstr "Ende der Übertragung beim Warten auf Dateinamen" #: src/lrz.c:903 msgid "Received dup Sector" msgstr "Sektor doppelt empfangen" #: src/lrz.c:917 msgid "Sync Error" msgstr "Synchronisationsfehler" #: src/lrz.c:965 msgid "CRC" msgstr "CRC-Fehler" #: src/lrz.c:976 msgid "Checksum" msgstr "Prüfsummenfehler" #: src/lrz.c:979 msgid "Sector number garbled" msgstr "Sektorennummer fehlerhaft" #: src/lrz.c:991 msgid "Sender Cancelled" msgstr "Sender brach ab" #: src/lrz.c:1005 #, c-format msgid "Got 0%o sector header" msgstr "Erhielt %02x als Sektorbestätigung" #: src/lrz.c:1113 #, c-format msgid "file name ends with a /, skipped: %s\n" msgstr "Dateiname endet mit /, übersprungen: %s\n" #: src/lrz.c:1127 #, c-format msgid "zmanag=%d, Lzmanag=%d\n" msgstr "" #: src/lrz.c:1128 #, c-format msgid "zconv=%d\n" msgstr "" #: src/lrz.c:1192 src/lrz.c:1226 #, c-format msgid "file exists, skipped: %s\n" msgstr "Datei existiert, übersprungen: %s\n" #: src/lrz.c:1267 #, c-format msgid "TIMESYNC: here %ld, remote %ld, diff %ld seconds\n" msgstr "Zeitsynchronisation: hier %ld, dort %ld, Unterschied %ld Sekunden\n" #: src/lrz.c:1276 #, c-format msgid "TIMESYNC: cannot set time: %s\n" msgstr "Zeitsynchronisation: kann Zeit nicht setzen: %s\n" #: src/lrz.c:1296 msgid "Topipe" msgstr "Pipe zu" #: src/lrz.c:1314 #, c-format msgid "Receiving: %s\n" msgstr "Empfange: %s\n" #: src/lrz.c:1545 #, c-format msgid "Blocks received: %d" msgstr "Blöcke empfangen: %d" #: src/lrz.c:1599 #, c-format msgid "%s: %s exists\n" msgstr "%s: %s existiert bereits\n" #: src/lrz.c:1612 src/lrz.c:1620 #, c-format msgid "%s:\tSecurity Violation" msgstr "%s:\tSicherheitsverstoß" #: src/lrz.c:1730 msgid "remote command execution requested" msgstr "Gegenseite versucht Kommandoausführung" #: src/lrz.c:1737 msgid "not executed" msgstr "nicht ausgeführt" #: src/lrz.c:1768 msgid "got ZRINIT" msgstr "Erhielt unerwartetes ZRINIT" #: src/lrz.c:1817 msgid "Skipped" msgstr "Übersprungen" #. too bad #: src/lrz.c:2049 #, c-format msgid "rzfile: bps rate %ld below min %ld" msgstr "rzfile: BPS-Rate %ld unter Minimum %ld" #. too bad #: src/lrz.c:2064 msgid "rzfile: reached stop time" msgstr "rzfile: Abbruchzeit erreicht" #: src/lrz.c:2071 #, c-format msgid "\rBytes received: %7ld/%7ld BPS:%-6ld ETA %02d:%02d " msgstr "\rBytes empfangen:%7ld/%7ld BPS:%-8ld ETA %02d:%02d " #: src/lrz.c:2215 msgid "file close error" msgstr "Fehler beim Schließen der Datei" #~ msgid "tcp protocol init failed\n" #~ msgstr "TCP Protokoll Initialisierung fehlgeschlagen\n" #~ msgid "cannot tmpfile() for tcp protocol synchronization" #~ msgstr "tmpfile() zur tcp Protokoll Synchronisation fehlgeschlagen" #~ msgid "fgets for tcp protocol synchronization failed: " #~ msgstr "fgets() bei tcp Protokoll Synchronisation fehlgeschlagen: " #~ msgid "Transfer complete." #~ msgstr "Übertragung abgeschlossen" #~ msgid "at" #~ msgstr "um" #~ msgid "TIMESYNC: failed\n" #~ msgstr "Zeitsynchronisation: fehlgeschlagen\n" #~ msgid "TIMESYNC: ok\n" #~ msgstr "Zeitsynchronisation: ok\n" #~ msgid "Falldown to %ld blklen" #~ msgstr "Blockgröße auf %ld gesenkt" lrzsz-0.12.21rc/po/de.gmo 664 764 764 50754 6760042374 10236 Ţ•€­Đ Ń é 3ý 81 6j xĄ # Ś> žĺ„›ŞÁÖĺü # < O f 4z 0Ż ŕ ä &! +!5!>!V!+m!™!ą!¸! Î! Ü!"ę! "1)"["o"‚" ‘"œ"ą"0Ç"ř"## 2#?# G#R#Z#1y#Ť#ż#Ő#Ü#ď#&$)+$U$$s$$˜$˝$Ě$ë$2ű$3.%%b%(ˆ%!ą%7Ó%! &-&<&R& l&+z&Ś&ˇ&%Ń& ÷& '$';' D' O'['n'„'&œ'Ă'Ő'Ý'ň' (#( B(6O( †( ”(!Ą("Ă("ć( )9#)1])%)+ľ)*á). *;*R* e* q**2’*Ĺ*Í*ë*ô*+ +&'+N+$l+‘,Ş,4ž,8ó,6,-oc-%Ó-8ů-R 24K…=ŃBŕBöBC$C;CUC$uCšCŽCÇC7ÜC4D ID+TD?€D ŔDĚDÝD*őD, E"ME pE"{EžE/ľE#ĺE/ F59FoFˆF ›FŠF*ĂFîF,G5GEGUG kG vGƒGšG0˘GBÓG H7HUH]H xH(™H0ÂH#óH,I,DIqI„I¤I>ľI:ôI-/J7]J(•J@žJ1˙J1K FK"gKŠK;ĄKÝK"ýK( L IL4TL‰L ¤LąLÍLÝLďLM) MJMZMlM6ŒMĂMDÚMN>0NoN ‡N4’N&ÇN&îNOD2OCwO%ťODáO8&P>_PžPšPĐPáPňP)Q-Q55QkQtQ‡Q ›Q&¨QĎQ(5~gAl-P >S+ZmdE!C;xhs}vw3R,BpUG/1iI :H M0T%4$9cq`8jbn<Fo€&y{z[O"^|k=NQXDW]r@VK6?\Y f._u't2Lae)J7* # countem: Total %d %ld %s: %s removed. Bytes received: %7ld BPS:%-6ld Bytes received: %7ld/%7ld BPS:%-6ld Bytes received: %7ld/%7ld BPS:%-6ld ETA %02d:%02d (X) = option applies to XMODEM only (Y) = option applies to YMODEM only (Z) = option applies to ZMODEM only or: %s [options] -{c|i} COMMAND -+, --append append to existing destination file (Z) -2, --twostop use 2 stop bits -4, --try-4k go up to 4K blocksize --start-4k start with 4K blocksize (doesn't try 8) -8, --try-8k go up to 8K blocksize --start-8k start with 8K blocksize -a, --ascii ASCII transfer (change CR/LF to LF) -b, --binary binary transfer -B, --bufsize N buffer N bytes (N==auto: buffer whole file) -c, --command COMMAND execute remote command COMMAND (Z) -C, --command-tries N try N times to execute a command (Z) -d, --dot-to-slash change '.' to '/' in pathnames (Y/Z) --delay-startup N sleep N seconds before doing anything -e, --escape escape all control characters (Z) -E, --rename force receiver to rename files it already has -f, --full-path send full pathname (Y/Z) -i, --immediate-command CMD send remote CMD, return immediately (Z) -h, --help print this usage message -k, --1k send 1024 byte packets (X) -L, --packetlen N limit subpacket length to N bytes (Z) -l, --framelen N limit frame length to N bytes (l>=L) (Z) -m, --min-bps N stop transmission if BPS below N -M, --min-bps-time N for at least N seconds (default: 120) -+, --append append to existing files -a, --ascii ASCII transfer (change CR/LF to LF) -b, --binary binary transfer -B, --bufsize N buffer N bytes (N==auto: buffer whole file) -c, --with-crc Use 16 bit CRC (X) -C, --allow-remote-commands allow execution of remote commands (Z) -D, --null write all received data to /dev/null --delay-startup N sleep N seconds before doing anything -e, --escape Escape control characters (Z) -E, --rename rename any files already existing --errors N generate CRC error every N bytes (debugging) -h, --help Help, print this usage message -m, --min-bps N stop transmission if BPS below N -M, --min-bps-time N for at least N seconds (default: 120) -O, --disable-timeouts disable timeout code, wait forever for data --o-sync open output file(s) in synchronous write mode -p, --protect protect existing files -q, --quiet quiet, no progress reports -r, --resume try to resume interrupted file transfer (Z) -R, --restricted restricted, more secure mode -s, --stop-at {HH:MM|+N} stop transmission at HH:MM or in N seconds -S, --timesync request remote time (twice: set local time) --syslog[=off] turn syslog on or off, if possible -t, --timeout N set timeout to N tenths of a second --tcp-server open socket, wait for connection (Z) --tcp-client ADDR:PORT open socket, connect to ... (Z) -u, --keep-uppercase keep upper case filenames -U, --unrestrict disable restricted mode (if allowed to) -v, --verbose be verbose, provide debugging information -w, --windowsize N Window is N bytes (Z) -X --xmodem use XMODEM protocol -y, --overwrite Yes, clobber existing file if any --ymodem use YMODEM protocol -Z, --zmodem use ZMODEM protocol short options use the same arguments as the long ones -n, --newer send file if source newer (Z) -N, --newer-or-longer send file if source newer or longer (Z) -o, --16-bit-crc use 16 bit CRC instead of 32 bit CRC (Z) -O, --disable-timeouts disable timeout code, wait forever -p, --protect protect existing destination file (Z) -r, --resume resume interrupted file transfer (Z) -R, --restricted restricted, more secure mode -q, --quiet quiet (no progress reports) -s, --stop-at {HH:MM|+N} stop transmission at HH:MM or in N seconds --tcp-server open socket, wait for connection (Z) --tcp-client ADDR:PORT open socket, connect to ... (Z) -u, --unlink unlink file after transmission -U, --unrestrict turn off restricted mode (if allowed to) -v, --verbose be verbose, provide debugging information -w, --windowsize N Window is N bytes (Z) -X, --xmodem use XMODEM protocol -y, --overwrite overwrite existing files -Y, --overwrite-or-skip overwrite existing files, else skip --ymodem use YMODEM protocol -Z, --zmodem use ZMODEM protocol short options use the same arguments as the long ones %s version %s %s waiting to receive.%s/%s: error occured%s/%s: skipped%s: Security Violation%s: %s exists %s: ready to receive %sAnswering TIMESYNC at %sBad data subpacketBad escape sequence %xBlocks received: %dBytes Sent:%7ld BPS:%-8ld Bytes Sent:%7ld/%7ld BPS:%-8ld ETA %02d:%02d CRCCan't open any requested files.Can't send command in restricted mode CancelledChecksumData subpacket too longGarbage count exceededGive your local XMODEM receive command now.Got %02x for sector ACKGot %sGot 0%o sector headerNAK on sectorNo ACK on EOTO_SYNC not supported by the kernelPathname fetch returned EOTReceive files with ZMODEM/YMODEM/XMODEM protocol Received dup SectorReceiver CancelledReceiving: %s Retry %d: Retry Count ExceededSector number garbledSend file(s) with ZMODEM/YMODEM/XMODEM protocol Sender CanceledSender CancelledSending %s, %ld blocks: Sending: %s SkippedSync ErrorTIMEOUTTIMESYNC: cannot set time: %s TIMESYNC: here %ld, remote %ld, diff %ld seconds Timeout on pathnameTimeout on sector ACKTopipeTransfer complete Transfer incomplete Try `%s --help' for more information. Usage: %s [options] [filename.if.xmodem] Usage: %s [options] file ... Xmodem sectors/kbytes sent: %3d/%2dkYmodem sectors/kbytes sent: %3d/%2dkblklen now %d bytes-per-error should be >100bytes_per_errorcalc_blklen: blklen %d, ok %ld, failed %ld -> %lu calc_blklen: calc total_bytes=%ld, bpe=%ld, ec=%ld calc_blklen: old %ld, new %ld, d %ld calc_blklen: reduced to %d due to error calc_blklen: returned %d as best calc_blklen: returned old value %d due to low bpe diff can read only one file from stdincannot open %scannot turnoff syslogcaught signal %d; exitingcommand triesdon't have settimeofday, will not set time file close errorfile exists, skipped: %s file name ends with a /, skipped: %s framelengthframelength out of range 32..%ldgarbage on commandlinegot ZCANgot ZRINITgot ZRQINIThostname too long hour to large (0..23)illegal server address io_mode(,2) in rbsb.c not implemented is not a file: %smin_bpsmin_bps must be >= 0min_bps_time must be > 1minute to large (0..59)need at least one file to sendnot executednot running as root (this is good!), can not set time out of memorypacketlengthpacketlength out of range 24..%ldremote command execution requestedrzfile: bps rate %ld below min %ldrzfile: reached stop timesecurity violation: can't do that under restricted shell security violation: not allowed to upload from %ssend_pseudo %s: avoiding symlink trapsend_pseudo %s: cannot lstat tmpfile %s: %ssend_pseudo %s: cannot open tmpfile %s: %ssend_pseudo %s: cannot write to tmpfile %s: %ssend_pseudo %s: failedsend_pseudo %s: okskipped: %sstartup delaystop time to smallthis program was never intended to be used setuid timeouttimeout out of range 10..1000timezonetimezone unknownunparsable stop time window sizezsendfdata: bps rate %ld below min %ldzsendfdata: reached stop timeProject-Id-Version: PACKAGE VERSION POT-Creation-Date: 1999-08-22 21:00+0200 PO-Revision-Date: 1997-06-01 19:00+0200 Last-Translator: FULL NAME Language-Team: none. try MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit countem: Gesamt %d %ld %s: %s gelöscht Bytes empfangen: %7ld BPS:%-6ld Bytes empfangen:%7ld/%7ld BPS:%-8ld Bytes empfangen:%7ld/%7ld BPS:%-8ld ETA %02d:%02d (X) = Option gilt nur für XMODEM (Y) = Option gilt nur für YMODEM (Z) = Option gilt nur für ZMODEM oder: %s [Optionen] -{c|i} KOMMANDO -+, --append an existierende Dateien anhängen (Z) -2, --twostop zwei Stopbits verwenden -4, --try-4k bis zu 4K Blockgröße verwenden --start-4k mit 4K Blockgröße starten (versucht nicht 8) -8, --try-8k bis zu 8K Blockgröße verwenden --start-8k mit 8K Blockgröße starten -a, --ascii ASCII: NL nach CR/LF wandeln -b, --binary Binärübertragung erzwingen -B, --bufsize N N Bytes puffern (auto: ganze Datei puffern) -c, --command COMMAND Kommando KOMMANDO auf Gegenseite ausführen (Z) -C, --command-tries N N mal Kommandoausführung versuchen (Z) -d, --dot-to-slash C '.' in Dateinamen nach '/' wandeln (Y/Z) --delay-startup N Bei Programmstart N Sek. schlafen (Debugging) -e, --escape alle Steuerzeichen escapen (Z) -E, --rename Empfänger soll Datei umbenennen falls Zieldatei schon existiert -f, --full-path Dateien mit vollen Pfaden senden (Y/Z) -i, --immediate-command CMD wie `c', aber sofort zurückkehren (Z) -h, --help diesen Hilfetext ausgeben -k, --1k 1024 Bytes Pakete senden (Y) -L, --packetlen N Unterpaketlänge auf N Bytes beschränken (Z) -l, --framelen N Rahmenlänge auf N Bytes beschränken (l>=L) (Z) -m, --min-bps N Übertragung abbrechen bei weniger als N BPS -M, --min-bps-time N für mindestens N Sekunden (Default: 120) -+, --append an existierende Dateien anhängen -a, --ascii ASCII-Übertragung (CR/LF nach LF wandeln) -b, --binary Binärübertragung (keine Umwandlungen) -B, --bufsize N N Bytes puffern (auto: ganze Datei puffern) -c, --with-crc 16bit CRC statt Prüfsumme verwenden (X) -C, --allow-remote-commands Ausführung von Kommandos erlauben (Z) -D, --null empfangene Daten nach /dev/null schreiben --delay-startup N Bei Programmstart N Sek. schlafen (Debugging) -e, --escape Alle Steuerzeichen escapen (Z) -E, --rename Empfänger soll Datei umbenennen falls Zieldatei schon existiert --errors N Einen CRC-Fehler alle N Bytes erzeugen -h, --help Diesen Hilfstext ausgeben -m, --min-bps N Übertragung abbrechen bei weniger als N BPS -M, --min-bps-time N für mindestens N Sekunden (Default: 120) -O, --disable-timeouts Timeoutbehandlung abschalten --o-sync Ausgabedatei(en) im synchron schreiben -p, --protect existierende Dateien nicht verändern -q, --quiet leise, keine Ausgaben machen -r, --resume unterbrochene Übertragungen fortsetzen (Z) -R, --restricted eingeschränkter, sichererer Modus -s, --stop-at {HH:MM|+N} Übertragung um HH:MM oder in N Sek. abbrechen -S, --timesync Zeit anfordern (doppelt: lokale Zeit setzen) --syslog[=off] syslog an- oder ausschalten, wenn möglich -t, --timeout N Timeout auf N Zehntelsekungen setzen --tcp-server Socket öffnen und auf Verbindung warten --tcp-client ADDR:PORT Socket öffnen und verbindung mit ... -u, --keep-uppercase GROSS geschrieben Dateinamen beibehalten -U, --unrestrict eingeschränkten Modus aufheben (falls erlaubt) -v, --verbose mehr ausgeben -w, --windowsize N Fenstergröße auf N Bytes setzen (Z) -X --xmodem XMODEM-Protokoll benutzen -y, --overwrite existierende Dateien überschreiben --ymodem YMODEM-Protokoll benutzen -Z, --zmodem ZMODEM-Protokoll benutzen Kurze Optionen benötigen dieselben Argumente wie Lange. -n, --newer Datei senden wenn sie neuer ist (Z) -N, --newer-or-longer Datei senden wenn neuer oder länger (Z) -o, --16-bit-crc 16Bit CRC statt 32Bit CRC verwenden (Z) -O, --disable-timeouts Timeoutbehandlung abschalten -p, --protect existierende Dateien nicht verändern -r, --resume unterbrochene Übertragungen fortsetzen (Z) -R, --restricted eingeschränkter, sichererer Modus -q, --quiet leise, keine Ausgaben machen -s, --stop-at {HH:MM|+N} Übertragung um HH:MM oder in N Sek. abbrechen --tcp-server Socket öffnen und auf Verbindung warten --tcp-client ADDR:PORT Socket öffnen und verbindung mit ... -u, --unlink Datei nach Übertragung löschen -U, --unrestrict eingeschränkten Modus aufheben (falls erlaubt) -v, --verbose mehr ausgeben -w, --windowsize N Fenstergröße auf N Bytes setzen (Z) -X --xmodem XMODEM-Protokoll benutzen -y, --overwrite existierende Dateien überschreiben -Y, --overwrite-or-skip wie `y', aber nicht existierende überspringen --ymodem YMODEM-Protokoll benutzen -Z, --zmodem ZMODEM-Protokoll benutzen Kurze Optionen benötigen dieselben Argumente wie Lange. %s Version %s %s wartet auf Sender.%s/%s: Fehler aufgetreten%s/%s: übersprungen%s: Sicherheitsverstoß%s: %s existiert bereits %s: bereit zum Empfangen von %sBeantworte Zeitsynchronisation um %sFalsches UnterpaketFalsche Escapesequenz %xBlöcke empfangen: %dBytes gesendet:%7ld BPS:%-8ld Bytes gesendet:%7ld/%7ld BPS:%-8ld ETA %02d:%02d CRC-FehlerKann keine der angeforderten Dateien öffnenIm eingeschränkten Modus ist das Senden von Kommandos verboten AbgebrochenPrüfsummenfehlerDatenunterpaket zu langMaximale Wiederholungsanzahl überschrittenStarten Sie nun Ihr XMODEM-Empfangsprogramm.Erhielt %02x als SektorbestätigungErhielt %sErhielt %02x als SektorbestätigungSektor nicht bestätigtKeine Bestätigung für Übertragungsende erhaltenO_SYNC vom Kernel nicht unterstütztEnde der Übertragung beim Warten auf DateinamenDateien mit ZMODEM/YMODEM/XMODEM-Protokoll empfangen Sektor doppelt empfangenEmpfänger brach abEmpfange: %s Wiederholungsversuch %d: Maximale Wiederholungsanzahl überschrittenSektorennummer fehlerhaftDateien mit ZMODEM/YMODEM/XMODEM übertragen Sender brach abSender brach abSende %s, %ld Blöcke:Sende: %s ÜbersprungenSynchronisationsfehlerTIMEOUTZeitsynchronisation: kann Zeit nicht setzen: %s Zeitsynchronisation: hier %ld, dort %ld, Unterschied %ld Sekunden Timeout beim Warten vor PfadnameTimeout bei SektorbestätigungPipe zuÜbertragung abgeschlossen Übertragung nicht abgeschlossen `%s --help' gibt weitere Informationen. Benutzung: %s [Optionen] [Dateiname.für.xmodem] Benutzung: %s [Optionen] Datei ... Ymodem Sektoren/Kilobytes gesendet: %3d/%2dkYmodem Sektoren/Kilobytes gesendet: %3d/%2dkBlockgröße nun %d Bytes-pro-Fehler muss >100 seinBytes-pro-Fehlercalc_blklen: Blocklänge %d, ok %ld, fehlgeschlagen %ld -> %lu calc_blklen: kalkuliere gesamt_bytes=%ld, bpe=%le, ec=%ld calc_blklen: alt %ld, neu %ld, Differenz %ld calc_blklen: Blockgrösse auf %d reduziert wegen Fehler calc_blklen: liefert %d als besten Wert calc_blklen: liefert alten Wert %d wegen geringer bpe Differenz kann nur eine Datei von der Standardeingabe lesenkann %s nicht öffnenkann syslogging nicht abschaltenerhielt Signal %d; ProgrammabbruchKommandowiederholungenZeitsynchronisation nicht ausführbar, settimeofday() fehlt Fehler beim Schließen der DateiDatei existiert, übersprungen: %s Dateiname endet mit /, übersprungen: %s FramelängeArgument der Option l außerhalb des Bereichs 32..%ldMüll auf der Kommandozeileerhielt ZCANErhielt unerwartetes ZRINITerhielt ZRQINITHostname zu lang Stunde zu gross (0..23)Illegale Serveraddresse io_mode(2) in rbsb.c nicht implementiert keine Datei: %sminimale BPS-Rateminimale BPS-Rate muß >= 0 seinZeitfenster für minimale BPS-Rate muß > 1 Sekunde seinMinute zu groß (0..59)es muß mindestens ein Name einer zu sendenden Datei angegeben werdennicht ausgeführtZeitsynchronisation mangels Superuserrechten nicht ausführbar Kein Speicher mehr freiPaketlängeArgument der Option L außerhalb des Bereichs 24..%ldGegenseite versucht Kommandoausführungrzfile: BPS-Rate %ld unter Minimum %ldrzfile: Abbruchzeit erreichtSicherheitsverstoß: Ausführung unter eingeschränkter Shell verboten Sicherheitsverstoß: Ausführung unter eingeschränkter Shell verbotensend_pseudo %s: vermied symlink Fallesend_pseudo %s: kann lstat nicht auf temporäre Datei %s anwenden: %ssend_pseudo %s: kann temporäre Datei %s nicht öffnen: %ssend_pseudo %s: kann nicht in temporäre Datei %s schreiben: %ssend_pseudo %s: Fehlschlagsend_pseudo %s: Erfolgübersprungen: %sStartverzögerungStopzeit zu kurzdieses Programm darf nicht setuid laufen TimeoutArgument der Option t außerhalb des Bereichs 10..1000ZeitzoneZeitzone unbekanntunparsbare Endzeit Fenstergrößerzfile: BPS-Rate %ld unter Minimum %ldrzfile: Abbruchzeit erreichtlrzsz-0.12.21rc/po/cat-id-tbl.c 664 764 764 24272 6730777500 11225 /* Automatically generated by po2tbl.sed from lrzsz.pot. */ #if HAVE_CONFIG_H # include #endif #include "libgettext.h" const struct _msg_ent _msg_tbl[] = { {"", 1}, {"io_mode(,2) in rbsb.c not implemented\n", 2}, {"caught signal %d; exiting", 3}, {"command tries", 4}, {"packetlength", 5}, {"packetlength out of range 24..%ld", 6}, {"framelength", 7}, {"framelength out of range 32..%ld", 8}, {"min_bps", 9}, {"min_bps must be >= 0", 10}, {"min_bps_time", 11}, {"min_bps_time must be > 1", 12}, {"hour to large (0..23)", 13}, {"unparsable stop time\n", 14}, {"minute to large (0..59)", 15}, {"stop time to small", 16}, {"stop-at", 17}, {"timeout", 18}, {"timeout out of range 10..1000", 19}, {"security violation: can't do that under restricted shell\n", 20}, {"window size", 21}, {"cannot turnoff syslog", 22}, {"startup delay", 23}, {"out of memory", 24}, {"this program was never intended to be used setuid\n", 25}, {"need at least one file to send", 26}, {"Can't send command in restricted mode\n", 27}, {"hostname too long\n", 28}, {"illegal server address\n", 29}, {"can read only one file from stdin", 30}, {"Transfer incomplete\n", 31}, {"Transfer complete\n", 32}, {"send_pseudo %s: cannot open tmpfile %s: %s", 33}, {"send_pseudo %s: cannot lstat tmpfile %s: %s", 34}, {"send_pseudo %s: avoiding symlink trap", 35}, {"send_pseudo %s: cannot write to tmpfile %s: %s", 36}, {"send_pseudo %s: failed", 37}, {"send_pseudo %s: ok", 38}, {"Answering TIMESYNC at %s", 39}, {"timezone", 40}, {"timezone unknown", 41}, {"Can't open any requested files.", 42}, {"security violation: not allowed to upload from %s", 43}, {"cannot open %s", 44}, {"is not a file: %s", 45}, {"%s/%s: error occured", 46}, {"skipped: %s", 47}, {"%s/%s: skipped", 48}, {"Bytes Sent:%7ld BPS:%-8ld \n", 49}, {"Sending %s, %ld blocks: ", 50}, {"Give your local XMODEM receive command now.", 51}, {"Sending: %s\n", 52}, {"Timeout on pathname", 53}, {"Receiver Cancelled", 54}, {"No ACK on EOT", 55}, {"Xmodem sectors/kbytes sent: %3d/%2dk", 56}, {"Ymodem sectors/kbytes sent: %3d/%2dk", 57}, {"Cancelled", 58}, {"Timeout on sector ACK", 59}, {"NAK on sector", 60}, {"Got burst for sector ACK", 61}, {"Got %02x for sector ACK", 62}, {"Retry Count Exceeded", 63}, {"Try `%s --help' for more information.\n", 64}, {"%s version %s\n", 65}, {"Usage: %s [options] file ...\n", 66}, {" or: %s [options] -{c|i} COMMAND\n", 67}, {"Send file(s) with ZMODEM/YMODEM/XMODEM protocol\n", 68}, {"\ (X) = option applies to XMODEM only\n\ (Y) = option applies to YMODEM only\n\ (Z) = option applies to ZMODEM only\n", 69}, {"\ -+, --append append to existing destination file (Z)\n\ -2, --twostop use 2 stop bits\n\ -4, --try-4k go up to 4K blocksize\n\ --start-4k start with 4K blocksize (doesn't try 8)\n\ -8, --try-8k go up to 8K blocksize\n\ --start-8k start with 8K blocksize\n\ -a, --ascii ASCII transfer (change CR/LF to LF)\n\ -b, --binary binary transfer\n\ -B, --bufsize N buffer N bytes (N==auto: buffer whole file)\n\ -c, --command COMMAND execute remote command COMMAND (Z)\n\ -C, --command-tries N try N times to execute a command (Z)\n\ -d, --dot-to-slash change '.' to '/' in pathnames (Y/Z)\n\ --delay-startup N sleep N seconds before doing anything\n\ -e, --escape escape all control characters (Z)\n\ -E, --rename force receiver to rename files it already has\n\ -f, --full-path send full pathname (Y/Z)\n\ -i, --immediate-command CMD send remote CMD, return immediately (Z)\n\ -h, --help print this usage message\n\ -k, --1k send 1024 byte packets (X)\n\ -L, --packetlen N limit subpacket length to N bytes (Z)\n\ -l, --framelen N limit frame length to N bytes (l>=L) (Z)\n\ -m, --min-bps N stop transmission if BPS below N\n\ -M, --min-bps-time N for at least N seconds (default: 120)\n", 70}, {"\ -n, --newer send file if source newer (Z)\n\ -N, --newer-or-longer send file if source newer or longer (Z)\n\ -o, --16-bit-crc use 16 bit CRC instead of 32 bit CRC (Z)\n\ -O, --disable-timeouts disable timeout code, wait forever\n\ -p, --protect protect existing destination file (Z)\n\ -r, --resume resume interrupted file transfer (Z)\n\ -R, --restricted restricted, more secure mode\n\ -q, --quiet quiet (no progress reports)\n\ -s, --stop-at {HH:MM|+N} stop transmission at HH:MM or in N seconds\n\ --tcp-server open socket, wait for connection (Z)\n\ --tcp-client ADDR:PORT open socket, connect to ... (Z)\n\ -u, --unlink unlink file after transmission\n\ -U, --unrestrict turn off restricted mode (if allowed to)\n\ -v, --verbose be verbose, provide debugging information\n\ -w, --windowsize N Window is N bytes (Z)\n\ -X, --xmodem use XMODEM protocol\n\ -y, --overwrite overwrite existing files\n\ -Y, --overwrite-or-skip overwrite existing files, else skip\n\ --ymodem use YMODEM protocol\n\ -Z, --zmodem use ZMODEM protocol\n\ \n\ short options use the same arguments as the long ones\n", 71}, {"got ZRQINIT", 72}, {"got ZCAN", 73}, {"blklen now %d\n", 74}, {"zsendfdata: bps rate %ld below min %ld", 75}, {"zsendfdata: reached stop time", 76}, {"Bytes Sent:%7ld/%7ld BPS:%-8ld ETA %02d:%02d ", 77}, {"calc_blklen: reduced to %d due to error\n", 78}, {"calc_blklen: returned old value %d due to low bpe diff\n", 79}, {"calc_blklen: old %ld, new %ld, d %ld\n", 80}, {"calc_blklen: calc total_bytes=%ld, bpe=%ld, ec=%ld\n", 81}, {"calc_blklen: blklen %d, ok %ld, failed %ld -> %lu\n", 82}, {"calc_blklen: returned %d as best\n", 83}, {"\ \n\ countem: Total %d %ld\n", 84}, {"Bad escape sequence %x", 85}, {"Sender Canceled", 86}, {"TIMEOUT", 87}, {"Bad data subpacket", 88}, {"Data subpacket too long", 89}, {"Garbage count exceeded", 90}, {"Got %s", 91}, {"Retry %d: ", 92}, {"don't have settimeofday, will not set time\n", 93}, {"not running as root (this is good!), can not set time\n", 94}, {"bytes_per_error", 95}, {"bytes-per-error should be >100", 96}, {"O_SYNC not supported by the kernel", 97}, {"garbage on commandline", 98}, {"Usage: %s [options] [filename.if.xmodem]\n", 99}, {"Receive files with ZMODEM/YMODEM/XMODEM protocol\n", 100}, {"\ -+, --append append to existing files\n\ -a, --ascii ASCII transfer (change CR/LF to LF)\n\ -b, --binary binary transfer\n\ -B, --bufsize N buffer N bytes (N==auto: buffer whole file)\n\ -c, --with-crc Use 16 bit CRC (X)\n\ -C, --allow-remote-commands allow execution of remote commands (Z)\n\ -D, --null write all received data to /dev/null\n\ --delay-startup N sleep N seconds before doing anything\n\ -e, --escape Escape control characters (Z)\n\ -E, --rename rename any files already existing\n\ --errors N generate CRC error every N bytes (debugging)\n\ -h, --help Help, print this usage message\n\ -m, --min-bps N stop transmission if BPS below N\n\ -M, --min-bps-time N for at least N seconds (default: 120)\n\ -O, --disable-timeouts disable timeout code, wait forever for data\n\ --o-sync open output file(s) in synchronous write mode\n\ -p, --protect protect existing files\n\ -q, --quiet quiet, no progress reports\n\ -r, --resume try to resume interrupted file transfer (Z)\n\ -R, --restricted restricted, more secure mode\n\ -s, --stop-at {HH:MM|+N} stop transmission at HH:MM or in N seconds\n\ -S, --timesync request remote time (twice: set local time)\n\ --syslog[=off] turn syslog on or off, if possible\n\ -t, --timeout N set timeout to N tenths of a second\n\ --tcp-server open socket, wait for connection (Z)\n\ --tcp-client ADDR:PORT open socket, connect to ... (Z)\n\ -u, --keep-uppercase keep upper case filenames\n\ -U, --unrestrict disable restricted mode (if allowed to)\n\ -v, --verbose be verbose, provide debugging information\n\ -w, --windowsize N Window is N bytes (Z)\n\ -X --xmodem use XMODEM protocol\n\ -y, --overwrite Yes, clobber existing file if any\n\ --ymodem use YMODEM protocol\n\ -Z, --zmodem use ZMODEM protocol\n\ \n\ short options use the same arguments as the long ones\n", 101}, {"%s waiting to receive.", 102}, {"\rBytes received: %7ld/%7ld BPS:%-6ld \r\n", 103}, {"%s: ready to receive %s", 104}, {"\rBytes received: %7ld BPS:%-6ld \r\n", 105}, {"\ \r\n\ %s: %s removed.\r\n", 106}, {"Pathname fetch returned EOT", 107}, {"Received dup Sector", 108}, {"Sync Error", 109}, {"CRC", 110}, {"Checksum", 111}, {"Sector number garbled", 112}, {"Sender Cancelled", 113}, {"Got 0%o sector header", 114}, {"file name ends with a /, skipped: %s\n", 115}, {"zmanag=%d, Lzmanag=%d\n", 116}, {"zconv=%d\n", 117}, {"file exists, skipped: %s\n", 118}, {"TIMESYNC: here %ld, remote %ld, diff %ld seconds\n", 119}, {"TIMESYNC: cannot set time: %s\n", 120}, {"Topipe", 121}, {"Receiving: %s\n", 122}, {"Blocks received: %d", 123}, {"%s: %s exists\n", 124}, {"%s:\tSecurity Violation", 125}, {"remote command execution requested", 126}, {"not executed", 127}, {"got ZRINIT", 128}, {"Skipped", 129}, {"rzfile: bps rate %ld below min %ld", 130}, {"rzfile: reached stop time", 131}, {"\rBytes received: %7ld/%7ld BPS:%-6ld ETA %02d:%02d ", 132}, {"file close error", 133}, }; int _msg_tbl_length = 133; lrzsz-0.12.21rc/man/ 777 764 764 0 6760042375 7247 5lrzsz-0.12.21rc/man/Makefile.in 664 764 764 14003 6760042374 11327 # Makefile.in generated automatically by automake 1.4a from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_FLAG = transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CFLAGS = @CFLAGS@ CPP = @CPP@ DATADIRNAME = @DATADIRNAME@ ENABLE_TIMESYNC = @ENABLE_TIMESYNC@ GENCAT = @GENCAT@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GT_NO = @GT_NO@ GT_YES = @GT_YES@ INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@ INSTOBJEXT = @INSTOBJEXT@ INTLDEPS = @INTLDEPS@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ PACKAGE = @PACKAGE@ PACKAGE_VERSION = @PACKAGE_VERSION@ POFILES = @POFILES@ POSUB = @POSUB@ RANLIB = @RANLIB@ U = @U@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ l = @l@ man_MANS = lrz.1 lsz.1 EXTRA_DIST = lrz.1 lsz.1 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../config.h CONFIG_CLEAN_FILES = man1dir = $(mandir)/man1 MANS = $(man_MANS) NROFF = nroff DIST_COMMON = Makefile.am Makefile.in DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) TAR = gtar GZIP_ENV = --best all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps man/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status install-man1: $(mkinstalldirs) $(DESTDIR)$(man1dir) @list='$(man1_MANS)'; \ l2='$(man_MANS)'; for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ else file=$$i; fi; \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \ $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \ done uninstall-man1: @list='$(man1_MANS)'; \ l2='$(man_MANS)'; for i in $$l2; do \ case "$$i" in \ *.1*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \ rm -f $(DESTDIR)$(man1dir)/$$inst; \ done install-man: $(MANS) @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-man1 uninstall-man: @$(NORMAL_UNINSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-man1 tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = man distdir: $(DISTFILES) @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-man install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall-man uninstall: uninstall-am all-am: Makefile $(MANS) all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install installdirs: $(mkinstalldirs) $(DESTDIR)$(mandir)/man1 mostlyclean-generic: clean-generic: distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: install-man1 uninstall-man1 install-man uninstall-man tags \ distdir info-am info dvi-am dvi check check-am installcheck-am \ installcheck install-exec-am install-exec install-data-am install-data \ install-am install uninstall-am uninstall all-redirect all-am all \ installdirs mostlyclean-generic distclean-generic clean-generic \ maintainer-clean-generic clean mostlyclean distclean maintainer-clean # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lrzsz-0.12.21rc/man/Makefile.am 666 764 764 61 6607440603 11234 man_MANS = lrz.1 lsz.1 EXTRA_DIST = lrz.1 lsz.1 lrzsz-0.12.21rc/man/lrz.1 666 764 764 32305 6607440603 10157 '\" '\" Revision Level '\" Last Delta 04-22-88 .TH RZ 1 OMEN .SH NAME rx, rb, rz \- XMODEM, YMODEM, ZMODEM (Batch) file receive .SH SYNOPSIS .B rz .RB [\- "\ +8abeOpqRtTuUvy" ] .br .B rb .RB [\- "\ +abqRtuUvy" ] .br .B rx .RB [\- "\ abceqRtuUv" ] .I file .br .RB [ \- ][ v ] rzCOMMAND .SH DESCRIPTION This program uses error correcting protocols to receive files over a dial-in serial port from a variety of programs running under PC-DOS, CP/M, .SM Unix, and other operating systems. It is invoked from a shell prompt manually, or automatically as a result of an "sz file ..." command given to the calling program. While .I rz is smart enough to be called from .I cu(1), very few versions of .I cu(1) are smart enough to allow .I rz to work properly. Unix flavors of Professional-YAM are available for such dial-out application. .B Rz (Receive ZMODEM) receives files with the ZMODEM batch protocol. Pathnames are supplied by the sending program, and directories are made if necessary (and possible). Normally, the "rz" command is automatically issued by the calling ZMODEM program, but some defective ZMODEM implementations may require starting .I rz the old fashioned way. .B Rb receives file(s) with YMODEM, accepting either standard 128 byte sectors or 1024 byte sectors (YAM sb .B -k option). The user should determine when the 1024 byte block length actually improves throughput without causing lost data or even system crashes. If True YMODEM (Omen Technology trademark) file information (file length, etc.) is received, the file length controls the number of bytes written to the output dataset, and the modify time and file mode (iff non zero) are set accordingly. If no True YMODEM file information is received, slashes in the pathname are changed to underscore, and any trailing period in the pathname is eliminated. This conversion is useful for files received from CP/M systems. With YMODEM, each file name is converted to lower case unless it contains one or more lower case letters. .B Rx receives a single .I file with XMODEM or XMODEM-1k protocol. The user should determine when the 1024 byte block length actually improves throughput without causing problems. The user must supply the file name to both sending and receiving programs. Up to 1023 garbage characters may be added to the received file. .B Rz may be invoked as .B rzCOMMAND (with an optional leading \- as generated by login(1)). For each received file, .I rz will pipe the file to ``COMMAND filename'' where filename is the name of the transmitted file with the file contents as standard input. Each file transfer is acknowledged when COMMAND exits with 0 status. A non zero exit status terminates transfers. A typical use for this form is .I rzrmail which calls rmail(1) to post mail to the user specified by the transmitted file name. For example, sending the file "caf" from a PC-DOS system to .I rzrmail on a .SM Unix system would result in the contents of the DOS file "caf" being mailed to user "caf". On some .SM Unix systems, the login directory must contain a link to COMMAND as login sets SHELL=rsh which disallows absolute pathnames. If invoked with a leading ``v'', .I rz will be verbose (see .B v option). The following entry works for .SM Unix SYS III/V: .ce rzrmail::5:1::/bin:/usr/local/rzrmail If the SHELL environment variable includes .I "rsh" , .I "rbash" or .I "rksh" (restricted shell), .I rz will not accept absolute pathnames or references to a parent directory, will not modify an existing file, and removes any files received in error. If .B rz is invoked with stdout and stderr to different datasets, Verbose is set to 2, causing frame by frame progress reports to stderr. This may be disabled with the .B q option. .SH OPTIONS The meanings of the available options are: .PP .PD 0 .TP .B "-+, --append" append received data to an existing file (ZMODEM, ASCII only). .TP .B "-a, --ascii" Convert files to .SM Unix conventions by stripping carriage returns and all characters beginning with the first Control Z (CP/M end of file). .TP .B "-b, --binary" Binary (tell it like it is) file transfer override. .TP .B "-B NUMBER, --bufsize NUMBER" Buffer .B NUMBER bytes before writing to disk. Default ist 32768, which should be enough for most situations. If you have a slow machine or a bad disk interface or suffer from other hardware problems you might want to increase the buffersize. .B -1 or .B auto use a buffer large enough to buffer the whole file. Be careful with this options - things normally get worse, not better, if the machine starts to swap. .TP .B "-c, --with-crc" XMODEM only. Use 16 bit CRC (normally a one byte checksum is used). .TP .B "-C, --allow-remote-commands" allow remote command execution ( .B insecure ). This allows the sender to execute an arbitrary command through .B system () or .B execl (). Default is to disable this feature (?). This option is ignored if running in restricted mode. .TP .B "-D, --null" Output file data to /dev/null; for testing. (Unix only) .TP .B "--delay-startup N" Wait .B N seconds before doing anything. .TP .B "-e, --escape" Force sender to escape all control characters; normally XON, XOFF, DLE, CR-@-CR, and Ctrl-X are escaped. .TP .B "-E, --rename" Rename incoming file if target filename already exists. The new file name will have a dot and a number (0..999) appended. .TP .B "-h, --help" give help screen. .TP .B "-m N, --min-bps N" Stop transmission if BPS-Rate (Bytes Per Second) falls below N for a certain time (see --min-bps-time option). .TP .B "-M N, --min-bps-time" Used together with --min-bps. Default is 120 (seconds). .TP .B "-O, --disable-timeouts" Disable read timeout handling code. This makes lrz hang if the sender does not send any more, but increases performance (a bit) and decreases system load (through reducing the number of system calls by about 50 percent). Use this option with care. .TP .B "--o-sync" Open output files in synchronous write mode. This may be useful if you experience errors due to lost interrupts if update (or bdflush or whoever this daemon is called on your system) writes the buffers to the disk. This option is ignored and a warning is printed if your systems doesn't support O_SYNC. .TP .B "-p, --protect" (ZMODEM) Protect: skip file if destination file exists. .TP .B "-q, --quiet" Quiet suppresses verbosity. .TP .B "-r, --resume" Crash recovery mode. lrz tries to resume interrupted file transfers. .TP .B "-R, --restricted" Enter more restricted mode. lrz will not create directories or files with a leading dot if this option is given twice. See .B SECURITY for mode information about restricted mode. .TP .B "-s HH:MM, --stop-at HH:MM" Stop transmission at .B HH hours, .B MM minutes. Another variant, using .B +N instead of .B HH:MM, stops transmission in .B N seconds. .TP .B "-S, --timesync" Request timesync packet from the sender. The sender sends its system time, causing lrz to complain about more then 60 seconds difference. Lrz tries to set the local system time to the remote time if this option is given twice (this fails if lrz is not run by root). This option makes lrz incompatible with certain other ZModems. Don't use it unless you know what you are doing. .TP .B "--syslog[=off]" turn syslogging on or off. the default is set at configure time. This option is ignored if no syslog support is compiled in. .TP .B "-t TIM, --timeout TIM" Change timeout to .I TIM tenths of seconds. This is ignored if timeout handling is turned of through the .B O option. .TP .B "--tcp-client ADDRESS:PORT" Act as a tcp/ip client: Connect to the given port. See .B "--tcp-server" for more information. .TP .B "--tcp-server" Act as a server: Open a socket, print out what to do, wait for connection. You will normally not want to use this option as lrzsz is the only zmodem which understands what to do (private extension). You might want to use this if you have to use zmodem (for which reason whatever), and cannot use the .B --tcp option of .I lsz (perhaps because your telnet doesn't allow to spawn a local program with stdin/stdout connected to the remote side). If you use this option you have to start .I lsz with the .B --tcp-client ADDRESS:PORT option. .I lrz will print the address and port on startup. Use of this option imposes a security risk, somebody else could connect to the port in between. See .B SECURITY for details. .TP .B "-U, --unrestrict" turn off restricted mode (this is not possible if running under a restricted shell). .TP .B "--version" prints out version number. .TP .B "-v, --verbose" Verbose causes a list of file names to be appended to stderr. More v's generate more output. .TP .B "-wN, --windowsize N" Set window size to N. .TP .B "-X, --xmodem" use XMODEM protocol. .TP .B "-y, --overwrite" Yes, clobber any existing files with the same name. .TP .B "--ymodem" use YMODEM protocol. .TP .B "-Z, --zmodem" use ZMODEM protocol. .PD .ne 6 .SH SECURITY Contrary to the original ZMODEM lrz defaults to restricted mode. In restricted mode lrz will not accept absolute pathnames or references to a parent directory, will not modify an existing file, and removes any files received in error. Remote command execution is disabled. To use a more restricted mode set the environment variable .B ZMODEM_RESTRICTED or give the .B R option. This disables creation of subdirectories and invisible files. Restricted mode may be turned off with the .B U option, unless lrz runs under a restricted shell. .TP Use of the .B --tcp-client or .B --tcp-server options imposes a security risk, as somebody else could connect to the port before you do it, and grab your data. If there's strong demand for a more secure mode i might introduce some sort of password challenge. .SH ENVIRONMENT lrz uses the following environment variables: .TP .B SHELL lrz recognizes a restricted shell if this variable includes .I "rsh" or .I "rksh" \. .TP .B ZMODEM_RESTRICTED lrz enters the more restricted mode if the variable is set. .SH EXAMPLES .RE (Pro-YAM command) .RS .I .br Pro-YAM Command: .I "sz *.h *.c" .br (This automatically invokes .I rz on the connected system.) .RE .SH SEE ALSO ZMODEM.DOC, YMODEM.DOC, Professional-YAM, crc(omen), sz(omen), usq(omen), undos(omen) Compile time options required for various operating systems are described in the source file. .SH NOTES Sending serial data to timesharing minicomputers at sustained high speeds has been known to cause lockups, system halts, kernel panics, and occasional antisocial behaviour. When experimenting with high speed input to a system, consider rebooting the system if the file transfers are not successful, especially if the personality of the system appears altered. The Unix "ulimit" parameter must be set high enough to permit large file transfers. The TTY input buffering on some systems may not allow long blocks or streaming input at high speed. You should suspect this problem when you can't send data to the Unix system at high speeds using ZMODEM, YMODEM-1k or XMODEM-1k, when YMODEM with 128 byte blocks works properly. If the system's tty line handling is really broken, the serial port or the entire system may not survive the onslaught of long bursts of high speed data. The DSZ or Pro-YAM .B "zmodem l" numeric parameter may be set to a value between 64 and 1024 to limit the burst length ("zmodem pl128"). 32 bit CRC code courtesy Gary S. Brown. Directory creation code from John Gilmore's PD TAR program. .SH BUGS Calling .I rz from most versions of cu(1) doesn't work because cu's receive process fights .I rz for characters from the modem. Programs that do not properly implement the specified file transfer protocol may cause .I sz to "hang" the port for a minute or two. Every reported instance of this problem has been corrected by using ZCOMM, Pro-YAM, or other program with a correct implementation of the specified protocol. Many programs claiming to support YMODEM only support XMODEM with 1k blocks, and they often don't get that quite right. Pathnames are restricted to 127 characters. In XMODEM single file mode, the pathname given on the command line is still processed as described above. The ASCII option\'s CR/LF to NL translation merely deletes CR\'s; undos(omen) performs a more intelligent translation. .SH "VMS VERSION" The VMS version does not set the file time. VMS C Standard I/O and RMS may interact to modify file contents unexpectedly. The VMS version does not support invocation as .B rzCOMMAND . The current VMS version does not support XMODEM, XMODEM-1k, or YMODEM. According to the VMS documentation, the buffered input routine used on the VMS version of .I rz introduces a delay of up to one second for each protocol transaction. This delay may be significant for very short files. Removing the "#define BUFREAD" line from rz.c will eliminate this delay at the expense of increased CPU utilization. The VMS version causes DCL to generate a random off the wall error message under some error conditions; this is a result of the incompatibility of the VMS "exit" function with the Unix/MSDOS standard. .SH "ZMODEM CAPABILITIES" .I Rz supports incoming ZMODEM binary (-b), ASCII (-a), protect (-p), clobber (-y), and append (-+) requests. The default is protect (-p) and binary (-b). The Unix versions support ZMODEM command execution. .SH FILES rz.c, crctab.c, rbsb.c, zm.c, zmodem.h Unix source files. rz.c, crctab.c, vrzsz.c, zm.c, zmodem.h, vmodem.h, vvmodem.c, VMS source files. lrzsz-0.12.21rc/man/lsz.1 666 764 764 43763 6607440603 10172 '\" '\" Revision Level '\" Last Delta 04-21-88 .TH SZ 1 2.6.1996 lrzsz-0.12b .SH NAME sx, sb, sz \- XMODEM, YMODEM, ZMODEM file send .SH SYNOPSIS sz .RB [\- +8abdefkLlNnopqTtuvyY ] .I file ... .br sb .RB [\- adfkqtuv ] .I file ... .br sx .RB [\- akqtuv ] .I file .br sz .RB [\- oqtv ] .B "-c COMMAND" .br sz .RB [\- oqtv ] .B "-i COMMAND" .br sz -TT .SH DESCRIPTION .B Sz uses the ZMODEM, YMODEM or XMODEM error correcting protocol to send one or more files over a dial-in serial port to a variety of programs running under PC-DOS, CP/M, Unix, VMS, and other operating systems. While .I rz is smart enough to be called from .I cu(1), very few versions of .I cu(1) are smart enough to allow .I sz to work properly. Unix flavors of Professional-YAM are available for such dial-out application. .B Sz sends one or more files with ZMODEM protocol. ZMODEM greatly simplifies file transfers compared to XMODEM. In addition to a friendly user interface, ZMODEM provides Personal Computer and other users an efficient, accurate, and robust file transfer method. ZMODEM provides complete .B "END-TO-END" data integrity between application programs. ZMODEM's 32 bit CRC catches errors that sneak into even the most advanced networks. Advanced file management features include AutoDownload (Automatic file Download initiated without user intervention), Display of individual and total file lengths and transmission time estimates, Crash Recovery, selective file transfers, and preservation of exact file date and length. Output from another program may be piped to .B sz for transmission by denoting standard input with "-": .ce ls -l | sz - The program output is transmitted with the filename sPID.sz where PID is the process ID of the .B sz program. If the environment variable .B ONAME is set, that is used instead. In this case, the Unix command: .ce ls -l | ONAME=con sz -ay - will send a "file" to the PC-DOS console display. The .B -y option instructs the receiver to open the file for writing unconditionally. The .B -a option causes the receiver to convert Unix newlines to PC-DOS carriage returns and linefeeds. .B Sb batch sends one or more files with YMODEM or ZMODEM protocol. The initial ZMODEM initialization is not sent. When requested by the receiver, .B sb supports .B YMODEM-g with "cbreak" tty mode, XON/XOFF flow control, and interrupt character set to CAN (^X). .B YMODEM-g (Professional-YAM .B g option) increases throughput over error free channels (direct connection, X.PC, etc.) by not acknowledging each transmitted sector. On .SM Unix systems, additional information about the file is transmitted. If the receiving program uses this information, the transmitted file length controls the exact number of bytes written to the output dataset, and the modify time and file mode are set accordingly. .B Sx sends a single .I file with .B XMODEM or .B XMODEM-1k protocol (sometimes incorrectly called "ymodem"). The user must supply the file name to both sending and receiving programs. If .B sz is invoked with $SHELL set and iff that variable contains the string .I "rsh" , .I "rbash" or .I "rksh" (restricted shell), .B sz operates in restricted mode. Restricted mode restricts pathnames to the current directory and PUBDIR (usually /usr/spool/uucppublic) and/or subdirectories thereof. The fourth form sends a single COMMAND to a ZMODEM receiver for execution. .B Sz exits with the COMMAND return value. If COMMAND includes spaces or characters special to the shell, it must be quoted. The fifth form sends a single COMMAND to a ZMODEM receiver for execution. .B Sz exits as soon as the receiver has correctly received the command, before it is executed. The sixth form (sz -TT) attempts to output all 256 code combinations to the terminal. In you are having difficulty sending files, this command lets you see which character codes are being eaten by the operating system. If .B sz is invoked with stdout and stderr to different datasets, Verbose is set to 2, causing frame by frame progress reports to stderr. This may be disabled with the .B q option. .PP The meanings of the available options are: .PP .PD 0 .TP .B "-+, --append" Instruct the receiver to append transmitted data to an existing file (ZMODEM only). .TP .B "-2, --twostop" use two stop bits (if possible). Do not use this unless you know what you are doing. .TP .B "-8, --try-8k" Try to go up to 8KB blocksize. This is incompatible with standard zmodem, but a common extension in the bbs world. (ZMODEM only). .TP .B "--start-8k" Start with 8KB blocksize. Like --try-8k. .TP .B "-a, --ascii" Convert NL characters in the transmitted file to CR/LF. This is done by the sender for XMODEM and YMODEM, by the receiver for ZMODEM. .TP .B "-b, --binary" (ZMODEM) Binary override: transfer file without any translation. .TP .B "-B NUMBER, --bufsize NUMBER" Use a readbuffer of .B NUMBER bytes. Default ist 16384, which should be enough for most situations. If you have a slow machine or a bad disk interface or suffer from other hardware problems you might want to increase the buffersize. .B -1 or .B auto use a buffer large enough to buffer the whole file. Be careful with this option - things normally get worse, not better, if the machine starts to swap. Using this option turns of memory mapping of the input file. This increases memory and cpu usage. .TP .B "-c COMMAND, --command COMMAND" Send COMMAND to the receiver for execution, return with COMMAND\'s exit status. .TP .B "-C N, --command-tries N" Retry to send command N times (default: 11). .TP .B "-d, --dot-to-slash" Change all instances of "." to "/" in the transmitted pathname. Thus, C.omenB0000 (which is unacceptable to MSDOS or CP/M) is transmitted as C/omenB0000. If the resultant filename has more than 8 characters in the stem, a "." is inserted to allow a total of eleven. This option enables the .B "--full-path" option. .TP .B "--delay-startup N" Wait .B N seconds before doing anything. .TP .B "-e, --escape" Escape all control characters; normally XON, XOFF, DLE, CR-@-CR, and Ctrl-X are escaped. .TP .B"-E, --rename" Force the sender to rename the new file if a file with the same name already exists. .TP .B "-f, --full-path" Send Full pathname. Normally directory prefixes are stripped from the transmitted filename. This is also turned on with to .B "--dot-to-slash" option. .TP .B "-h, --help" give help. .TP .B "-i COMMAND, --immediate-command COMMAND" Send COMMAND to the receiver for execution, return immediately upon the receiving program's successful recption of the command. .TP .B "-k, --1k" (XMODEM/YMODEM) Send files using 1024 byte blocks rather than the default 128 byte blocks. 1024 byte packets speed file transfers at high bit rates. (ZMODEM streams the data for the best possible throughput.) .TP .B "-L N, --packetlen N" Use ZMODEM sub-packets of length N. A larger N (32 <= N <= 1024) gives slightly higher throughput, a smaller N speeds error recovery. The default is 128 below 300 baud, 256 above 300 baud, or 1024 above 2400 baud. .TP .B "-m N, --min-bps N" Stop transmission if BPS-Rate (Bytes Per Second) falls below N for a certain time (see --min-bps-time option). .TP .B "-M N, --min-bps-time" Used together with --min-bps. Default is 120 (seconds). .TP .B "-l N, --framelen N" Wait for the receiver to acknowledge correct data every .B N (32 <= N <= 1024) characters. This may be used to avoid network overrun when XOFF flow control is lacking. .TP .B "-n, --newer" (ZMODEM) Send each file if destination file does not exist. Overwrite destination file if source file is newer than the destination file. .TP .B "-N, --newer-or-longer" (ZMODEM) Send each file if destination file does not exist. Overwrite destination file if source file is newer or longer than the destination file. .TP .B "-o, --16-bit-crc" (ZMODEM) Disable automatic selection of 32 bit CRC. .TP .B "-O, --disable-timeouts" Disable read timeout handling. This makes lsz hang if the other side doesn't send anything, but increases performance (not much) and decreases system load (reduces number of system calls by about 50 percent). Use this option with care. .TP .B "-p, --protect" (ZMODEM) Protect existing destination files by skipping transfer if the destination file exists. .TP .B "-q, --quiet" Quiet suppresses verbosity. .TP .B "-R, --restricted" Restricted mode: restricts pathnames to the current directory and PUBDIR (usually /usr/spool/uucppublic) and/or subdirectories thereof. .TP .B "-r, --resume" (ZMODEM) Resume interrupted file transfer. If the source file is longer than the destination file, the transfer commences at the offset in the source file that equals the length of the destination file. .TP .B "-s HH:MM, --stop-at HH:MM" Stop transmission at .B HH hours, .B MM minutes. Another variant, using .B +N instead of .B HH:MM, stops transmission in .B N seconds. .TP .B "-S, --timesync" enable timesync protocol support. See timesync.doc for further information. This option is incompatible with standard zmodem. Use it with care. .TP .B "--syslog[=off]" turn syslogging on or off. the default is set at configure time. This option is ignored if no syslog support is compiled in. .TP .B "-t TIM, --timeout TIM" Change timeout to .I TIM tenths of seconds. .TP .B "-T, --turbo" Do not escape certain characters (^P, ^P|0x80, telenet escape sequence [CR + @]). This improves performance by about 1 percent and shouldn't hurt in the normal case (but be careful - ^P might be useful if connected through a terminal server). .TP .B "--tcp" Try to initiate a TCP/IP connection. lsz will ask the receiving zmodem to open a TCP/IP connection. All handshaking (which address / port to use) will be done by the zmodem programs. You will normally not want to use this option as lrzsz is the only zmodem which understands what to do (private extension). You might want to use this option if the two programs are connected (stdin/out) over a slow or bad (not 8bit clean) network connection. Use of this option imposes a security risk, somebody else could connect to the port in between. See .B SECURITY for details. .TP .B "--tcp-client ADDRESS:PORT" Act as a tcp/ip client: Connect to the given port. See .B "--tcp-server" for more information. .TP .B "--tcp-server" Act as a server: Open a socket, print out what to do, wait for connection. You will normally not want to use this option as lrzsz is the only zmodem which understands what to do (private extension). You might want to use this if you have to use zmodem (for which reason whatever), and cannot use the .B --tcp option of .I lsz (perhaps because your telnet doesn't allow to spawn a local program with stdin/stdout connected to the remote side). If you use this option you have to start .I lsz with the .B --tcp-client ADDRESS:PORT option. .I lrz will print the address and port on startup. Use of this option imposes a security risk, somebody else could connect to the port in between. See .B SECURITY for details. .TP .B "-u" Unlink the file after successful transmission. .TP .B "-U, --unrestrict" Turn off restricted mode (this is not possible if running under a restricted shell). .TP .B "-w N, --windowsize N" Limit the transmit window size to N bytes (ZMODEM). .TP .B "-v, --verbose" Verbose output to stderr. More v's generate more output. .TP .B "-X, --xmodem" use XMODEM protocol. .TP .B "-y, --overwrite" Instruct a ZMODEM receiving program to overwrite any existing file with the same name. .TP .B "-Y, --overwrite-or-skip" Instruct a ZMODEM receiving program to overwrite any existing file with the same name, and to skip any source files that do have a file with the same pathname on the destination system. .TP .B "--ymodem" use ZMODEM protocol. .TP .B "-Z, --zmodem" use ZMODEM protocol. .PD .SH SECURITY Restricted mode restricts pathnames to the current directory and PUBDIR (usually /var/spool/uucppublic) and/or subdirectories thereof, and disables remote command execution. Restricted mode is entered if the .B R option is given or if lsz detects that it runs under a restricted shell or if the environment variable ZMODEM_RESTRICTED is found. Restricted mode can be turned of with the .B U option if not running under a restricted shell. .TP Use of the .B --tcp-client or .B --tcp-server options imposes a security risk, as somebody else could connect to the port before you do it, and grab your data. If there's strong demand for a more secure mode i might introduce some sort of password challenge. .SH ENVIRONMENT .TP .B ZNULLS may be used to specify the number of nulls to send before a ZDATA frame. .TP .B SHELL lsz recognizes a restricted shell if this variable includes .I "rsh" or .I "rksh" .TP .B ZMODEM_RESTRICTED lrz enters restricted mode if the variable is set. .TP .B TMPDIR If this environment variable is set its content is used as the directory to place in the answer file to a .B timesync request. .B TMP Used instead of TMPDIR if TMPDIR is not set. If neither TMPDIR nor TMP is set /tmp will be used. .SH EXAMPLES .ne 7 .B "ZMODEM File Transfer" (Unix to DSZ/ZCOMM/Professional-YAM) .br .B "% sz \-a *.c" .br This single command transfers all .c files in the current Unix directory with conversion .RB ( \-a ) to end of line conventions appropriate to the receiving environment. With ZMODEM AutoDownload enabled, Professional-YAM and ZCOMM will automatically recieve the files after performing a security check. .br .B "% sz \-Yan *.c *.h" .br Send only the .c and .h files that exist on both systems, and are newer on the sending system than the corresponding version on the receiving system, converting Unix to DOS text format. .br .B $ sz -\\Yan file1.c file2.c file3.c foo.h baz.h .R (for VMS) .br .B "ZMODEM Command Download" (Unix to Professional-YAM) .br cpszall:all sz \-c "c:;cd /yam/dist" sz \-ya $(YD)/*.me sz \-yqb y*.exe sz \-c "cd /yam" sz \-i "!insms" .br This Makefile fragment uses .B sz to issue commands to Professional-YAM to change current disk and directory. Next, .B sz transfers the .I .me files from the $YD directory, commanding the receiver to overwrite the old files and to convert from Unix end of line conventions to PC-DOS conventions. The third line transfers some .I .exe files. The fourth and fifth lines command Pro-YAM to change directory and execute a PC-DOS batch file .I insms . Since the batch file takes considerable time, the .B "\-i" form is used to allow .B sz to exit immediately. .B "XMODEM File Transfer" (Unix to Crosstalk) .br % .B "sx \-a foo.c" .br .B "ESC" .br .B "rx foo.c" .br The above three commands transfer a single file from Unix to a PC and Crosstalk with .I sz translating Unix newlines to DOS CR/LF. This combination is much slower and far less reliable than ZMODEM. .SH ERROR MESSAGES "Caught signal 99" indicates the program was not properly compiled, refer to "bibi(99)" in rbsb.c for details. .SH SEE ALSO rz(omen), ZMODEM.DOC, YMODEM.DOC, Professional-YAM, crc(omen), sq(omen), todos(omen), tocpm(omen), tomac(omen), yam(omen) Compile time options required for various operating systems are described in the source file. .SH "VMS VERSION" The VMS version does not support wild cards. Because of VMS DCL, upper case option letters muse be represented by \\ proceding the letter. The current VMS version does not support XMODEM, XMODEM-1k, or YMODEM. VMS C Standard I/O and RMS may interact to modify the file contents. .SH FILES 32 bit CRC code courtesy Gary S. Brown. sz.c, crctab.c, rbsb.c, zm.c, zmodem.h Unix source files sz.c, crctab.c, vrzsz.c, zm.c, zmodem.h, vmodem.h, vvmodem.c, VMS source files. /tmp/szlog stores debugging output (sz -vv) (szlog on VMS). .SH "TESTING FEATURE" The command "sz -T file" exercises the .B Attn sequence error recovery by commanding errors with unterminated packets. The receiving program should complain five times about binary data packets being too long. Each time .B sz is interrupted, it should send a ZDATA header followed by another defective packet. If the receiver does not detect five long data packets, the .B Attn sequence is not interrupting the sender, and the .B Myattn string in .B sz.c must be modified. After 5 packets, .B sz stops the "transfer" and prints the total number of characters "sent" (Tcount). The difference between Tcount and 5120 represents the number of characters stored in various buffers when the Attn sequence is generated. .SH BUGS Calling .I sz from most versions of cu(1) doesn't work because cu's receive process fights .I sz for characters from the modem. On at least one BSD system, sz would hang or exit when it got within a few kilobytes of the end of file. Using the "-w 8192" flag fixed the problem. The real cause is unknown, perhaps a bug in the kernel TTY output routines. Programs that do not properly implement the specified file transfer protocol may cause .I sz to "hang" the port for a minute or two. This problem is corrected by using ZCOMM, Pro-YAM, or other program with a correct implementation of the specified protocol. Many programs claiming to support YMODEM only support XMODEM with 1k blocks, and they often don't get that quite right. XMODEM transfers add up to 127 garbage bytes per file. XMODEM-1k and YMODEM-1k transfers use 128 byte blocks to avoid extra padding. YMODEM programs use the file length transmitted at the beginning of the transfer to prune the file to the correct length; this may cause problems with source files that grow during the course of the transfer. This problem does not pertain to ZMODEM transfers, which preserve the exact file length unconditionally. Most ZMODEM options are merely passed to the receiving program; some do not implement all these options. Circular buffering and a ZMODEM sliding window should be used when input is from pipes instead of acknowledging frames each 1024 bytes. If no files can be opened, .B sz sends a ZMODEM command to echo a suitable complaint; perhaps it should check for the presence of at least one accessible file before getting hot and bothered. The test mode leaves a zero length file on the receiving system. A few high speed modems have a firmware bug that drops characters when the direction of high speed transmissson is reversed. The environment variable ZNULLS may be used to specify the number of nulls to send before a ZDATA frame. Values of 101 for a 4.77 mHz PC and 124 for an AT are typical. lrzsz-0.12.21rc/testsuite/ 777 764 764 0 6760042375 10525 5lrzsz-0.12.21rc/testsuite/Makefile.in 664 764 764 14342 6760042375 12614 # Makefile.in generated automatically by automake 1.4a from Makefile.am # Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ libexecdir = @libexecdir@ datadir = @datadir@ sysconfdir = @sysconfdir@ sharedstatedir = @sharedstatedir@ localstatedir = @localstatedir@ libdir = @libdir@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include DESTDIR = pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. ACLOCAL = @ACLOCAL@ AUTOCONF = @AUTOCONF@ AUTOMAKE = @AUTOMAKE@ AUTOHEADER = @AUTOHEADER@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_FLAG = transform = @program_transform_name@ NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CFLAGS = @CFLAGS@ CPP = @CPP@ DATADIRNAME = @DATADIRNAME@ ENABLE_TIMESYNC = @ENABLE_TIMESYNC@ GENCAT = @GENCAT@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GT_NO = @GT_NO@ GT_YES = @GT_YES@ INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@ INSTOBJEXT = @INSTOBJEXT@ INTLDEPS = @INTLDEPS@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ MAKEINFO = @MAKEINFO@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ PACKAGE = @PACKAGE@ PACKAGE_VERSION = @PACKAGE_VERSION@ POFILES = @POFILES@ POSUB = @POSUB@ RANLIB = @RANLIB@ U = @U@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ l = @l@ AUTOMAKE_OPTIONS = dejagnu DISTFILES = Makefile.am Makefile.in CLEANFILES = lrzsz.log lrzsz.sum site.bak DISTCLEANFILES = site.exp mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = ../config.h CONFIG_CLEAN_FILES = DIST_COMMON = Makefile.am Makefile.in TAR = gtar GZIP_ENV = --best EXPECT = expect RUNTEST = runtest all: all-redirect .SUFFIXES: $(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps testsuite/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status tags: TAGS TAGS: distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) subdir = testsuite distdir: $(DISTFILES) @for file in $(DISTFILES); do \ d=$(srcdir); \ if test -d $$d/$$file; then \ cp -pr $$d/$$file $(distdir)/$$file; \ else \ test -f $(distdir)/$$file \ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ || cp -p $$d/$$file $(distdir)/$$file || :; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-hook RUNTESTFLAGS = DEJATOOL = $(PACKAGE) RUNTESTDEFAULTFLAGS = --tool $(DEJATOOL) --srcdir $$srcdir check-DEJAGNU: site.exp srcdir=`cd $(srcdir) && pwd`; export srcdir; \ EXPECT=$(EXPECT); export EXPECT; \ runtest=$(RUNTEST); \ if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \ $$runtest $(RUNTESTDEFAULTFLAGS) $(RUNTESTFLAGS); \ else echo "WARNING: could not find \`runtest'" 1>&2; :;\ fi site.exp: Makefile @echo 'Making a new site.exp file...' @test ! -f site.bak || rm -f site.bak @echo '## these variables are automatically generated by make ##' > $@-t @echo '# Do not edit here. If you wish to override these values' >> $@-t @echo '# edit the last section' >> $@-t @echo 'set tool $(DEJATOOL)' >> $@-t @echo 'set srcdir $(srcdir)' >> $@-t @echo 'set objdir' `pwd` >> $@-t @echo '## All variables above are generated by configure. Do Not Edit ##' >> $@-t @test ! -f site.exp || sed '1,/^## All variables above are.*##/ d' site.exp >> $@-t @test ! -f site.exp || mv site.exp site.bak @mv $@-t site.exp info-am: info: info-am dvi-am: dvi: dvi-am check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU check: check-am installcheck-am: installcheck: installcheck-am install-exec-am: install-exec: install-exec-am install-data-am: install-data: install-data-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am uninstall-am: uninstall: uninstall-am all-am: Makefile all-redirect: all-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install installdirs: mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -rm -f Makefile $(CONFIG_CLEAN_FILES) -rm -f config.cache config.log stamp-h stamp-h[0-9]* -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: mostlyclean-am: mostlyclean-generic mostlyclean: mostlyclean-am clean-am: clean-generic mostlyclean-am clean: clean-am distclean-am: distclean-generic clean-am distclean: distclean-am maintainer-clean-am: maintainer-clean-generic distclean-am @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." maintainer-clean: maintainer-clean-am .PHONY: tags distdir check-DEJAGNU info-am info dvi-am dvi check \ check-am installcheck-am installcheck install-exec-am install-exec \ install-data-am install-data install-am install uninstall-am uninstall \ all-redirect all-am all installdirs mostlyclean-generic \ distclean-generic clean-generic maintainer-clean-generic clean \ mostlyclean distclean maintainer-clean dist-hook: mkdir $(distdir)/config mkdir $(distdir)/lib mkdir $(distdir)/lrzsz cp -p $(srcdir)/config/*.exp $(distdir)/config cp -p $(srcdir)/lib/*.exp $(distdir)/lib cp -p $(srcdir)/lrzsz/*.exp $(distdir)/lrzsz # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: lrzsz-0.12.21rc/testsuite/Makefile.am 666 764 764 527 6613565415 12547 AUTOMAKE_OPTIONS=dejagnu DISTFILES=Makefile.am Makefile.in CLEANFILES=lrzsz.log lrzsz.sum site.bak DISTCLEANFILES=site.exp dist-hook: mkdir $(distdir)/config mkdir $(distdir)/lib mkdir $(distdir)/lrzsz cp -p $(srcdir)/config/*.exp $(distdir)/config cp -p $(srcdir)/lib/*.exp $(distdir)/lib cp -p $(srcdir)/lrzsz/*.exp $(distdir)/lrzsz lrzsz-0.12.21rc/testsuite/config/ 775 764 764 0 6760042375 11770 5lrzsz-0.12.21rc/testsuite/config/unix.exp 666 764 764 337 6607440604 13453 proc lrzsz_version {} { global objdir set tmp [exec "$objdir/../src/lsz" "--version"] regexp "lrzsz. (\[0-9.\]+)" $tmp tmp version clone_output "$objdir/../src/lsz version $version\n" } proc lrzsz_exit {} {} lrzsz-0.12.21rc/testsuite/lib/ 775 764 764 0 6760042375 11271 5lrzsz-0.12.21rc/testsuite/lib/lrzsz.exp 666 764 764 20552 6607440604 13216 # change to tmp dir set z8_test_files "" set z_test_files "" set y_test_files "" set x_test_files "" set objdir [absolute $objdir] set srcdir [absolute $srcdir] set srcdir2 [exec sh -c "cd $srcdir/.. && pwd"] set objdir2 [exec sh -c "cd $objdir/.. && pwd"] set SZBUFSIZE "-B 524288" set RZBUFSIZE "-B 524288" set env(LANG) C #puts "LANG=$env(LANG)" foreach i [glob -nocomplain $srcdir/../src/l?z.c] { set z_test_files "$z_test_files $i" set x_test_files "$x_test_files $i" } foreach i [glob -nocomplain $objdir/../src/l?z] { set z_test_files "$z_test_files $i" set y_test_files "$y_test_files $i" } foreach i [glob -nocomplain /pub/gnu/emacs-*.tar.gz] { set z8_test_files "$z8_test_files $i" } #puts "objdir=$objdir\n" #puts "srcdir=$srcdir\n" #puts "x_test_files=$x_test_files\n" #puts "y_test_files=$y_test_files\n" #puts "z_test_files=$z_test_files\n" #puts "z8_test_files=$z8_test_files\n" # change to tmp dir set TMPDIR [getenv TMPDIR] #puts "T=$TMPDIR\n" if [string compare "x$TMPDIR" "x"] then { set MYTEMP "$TMPDIR" } else { set MYTEMP "/tmp" } set OLDDIR [pwd] set testdir "$MYTEMP/test.lrzsz" exec rm -rf $testdir exec mkdir $testdir exec sh -c "mkfifo $testdir/pipe || mknod $testdir/pipe p" proc runthem_internal { name sz szopts rz rzopts files flags up} { global MYTEMP global OLDDIR global testdir global verbose global fail_is_ok upvar $up up_p if {[string match "*mkdir*" $flags] == 1} { exec mkdir $testdir/$name } set fails 0 cd $MYTEMP catch "exec sh -c \"($sz $szopts $files) <$testdir/pipe | \ (cd $testdir/$name ; exec $rz $rzopts >>../pipe)\"" dummy set up_p $dummy foreach i $files { set bn [file tail $i] set v $verbose if {[string match "*compare*" $flags] == 1} { set res [catch "exec cmp $i $testdir/$name/$bn" dummy] set verbose $v if {$res == 0} { if {[string match "*delete*" $flags] == 1} { catch "file delete $testdir/$name/$bn" dummy } } else { send_log "$i: not identical: cmp told\n" send_log "$dummy\n" incr fails } } else { if {[string match "*delete*" $flags] == 1} { catch "file delete $testdir/$name/$bn" dummy } } } if {[string match "*rmdir*" $flags] == 1} { set res [catch "exec rmdir $testdir/$name" dummy] if {$res != 0} { send_log "rmdir failed: $dummy\n" incr fails } } if [info exists "fail_is_ok"] { if {$fails > 0} { set fails 0; } else { set fails 1; } } cd $OLDDIR return $fails } # own test function for xmodem: xmodem can't transfer file names proc runxmodem { name sz szopts rz rzopts files } { global MYTEMP global OLDDIR global testdir global verbose verbose "Testing $name" 1 exec mkdir $testdir/$name set failed 0 cd $MYTEMP foreach i $files { set bn [file tail $i] set output [catch "set done [exec sh -c "($sz $szopts --xmodem $i 2>/dev/null) \ <$testdir/pipe | \ (cd $testdir/$name ; exec $rz $rzopts --xmodem $bn >>../pipe 2>/dev/null)"]]"] set res [catch "exec cmp $i $testdir/$name/$bn" dummy] if {$res == 0} { catch "file delete $testdir/$name/$bn" dummy } else { send_log "$i: not identical: cmp told\n" send_log "$dummy\n" set failed 1 } } set res [catch "exec rmdir $testdir/$name" dummy] if {$res != 0} { send_log "rmdir: $dummy\n" set failed 1 } cd $OLDDIR if {$failed == 0} { pass "$name" } else { fail "$name" } } proc runthem { name sz szopts rz rzopts files } { verbose "Testing $name" 1 set fails [runthem_internal "$name" "$sz" "$szopts" "$rz" "$rzopts" \ "$files" "mkdir,compare,delete,rmdir" dummy] if {$fails == 0} { pass "$name" } else { fail "$name" } } proc runabuse { name sz szopts rz rzopts files } { global fail_is_ok global testdir set fail_is_ok 1 verbose "Testing $name" 1 set fails [runthem_internal "$name" "$sz" "$szopts" "$rz" "$rzopts" \ "$files" "mkdir" output] if {$fails == 1 && [string match "*ZRINIT*" $output]} { set fails 0 } if {$fails == 1 && [string match "*Broken pipe*" $output]} { set fails 0 } if {$fails == 1 && [string match "*caught signal*" $output]} { set fails 0 } if {$fails == 1 && [string match "*exited abnormally*" $output]} { set fails 0 } if {$fails == 0} { exec rm -rf "$testdir/$name" pass "$name" } else { #puts "fails=$fails" fail "$name" } unset fail_is_ok } proc runthem0 { name sz szopts rz rzopts files } { verbose "Testing $name (write to /dev/null)" 1 set fails [runthem_internal "$name" "$sz" "$szopts" "$rz" "$rzopts" \ "$files" "mkdir,rmdir" dummy] if {$fails == 0} { pass "$name" } else { fail "$name" } } proc runappend { name sz szopts rz rzopts file} { global testdir verbose "Testing $name" 1 set fails [runthem_internal "$name" "$sz" "$szopts" "$rz" "$rzopts" \ "$file $file" "mkdir" dummy] if {$fails == 0} { set compare "$testdir/$name/compare" set bn [file tail $file] exec rm -f $compare exec cp $file $compare exec cat $file >>$compare set res [catch "exec cmp $testdir/$name/$bn $compare" dummy] if {$res != 0} { incr fails } else { catch "file delete $testdir/$name/$bn" dummy catch "file delete $compare" dummy } } if {$fails == 0} { set res [catch "exec rmdir $testdir/$name" dummy] if {$res != 0} { incr fails } } if {$fails == 0} { pass "$name" } else { fail "$name" } } # proc runrename { name sz szopts rz rzopts files} { global testdir verbose "Testing $name" 1 exec mkdir $testdir/$name foreach i $files { set bn [file tail $i] exec touch "$testdir/$name/$bn" exec echo "1234" ">$testdir/$name/$bn.0" } set fails [runthem_internal "$name" "$sz" "$szopts" "$rz" "$rzopts" \ "$files" "" dummy] if {$fails == 0} { foreach i $files { set bn [file tail $i] set f "$testdir/$name/$bn" if {[file size $f] != 0} { incr fails send_log "$f: size !=0\n" } else { set s [file size $f.0] if {$s == 0 || $s>5} { incr fails send_log "$f: size !=5\n" } else { set compare "$f.1" set res [catch "exec cmp $i $compare" dummy] if {$res != 0} { incr fails send_log "$f: compare failed\n" } else { catch "file delete $f" dummy catch "file delete $f.0" dummy catch "file delete $f.1" dummy } } } } } if {$fails == 0} { set res [catch "exec rmdir $testdir/$name" dummy] if {$res != 0} { incr fails } } if {$fails == 0} { pass "$name" } else { fail "$name" } } proc runresume { name sz szopts rz rzopts files} { global testdir global srcdir verbose "Testing $name" 1 exec mkdir $testdir/$name set trash $srcdir/../src/Makefile.in foreach i $files { set bn [file tail $i] catch "exec dd if=$trash of=$testdir/$name/$bn bs=256 count=5" dummy } set fails [runthem_internal "$name" "$sz" "$szopts" "$rz" "$rzopts" \ "$files" "" dummy] if {$fails == 0} { foreach i $files { set bn [file tail $i] set f "$testdir/$name/$bn" set res [catch "exec cmp $i $f" dummy] if {$res == 0} { send_log "receiver did not resume but file is OK\n" puts "receiver did not resume but file is OK - error, but not critical" incr fails } else { catch "exec dd if=$i of=$f.1 bs=256 count=5" dummy catch "exec dd if=$f bs=256 skip=5 >>$f.1" dummy set res [catch "exec cmp $i $f.1" dummy] if {$res == 0} { catch "file delete $f" dummy catch "file delete $f.1" dummy } else { send_log "sender resumed, but files differ. This is really bad\n" puts "sender resumed, but files differ. This is really bad" incr fails } } } } if {$fails == 0} { set res [catch "exec rmdir $testdir/$name" dummy] if {$res != 0} { incr fails } } if {$fails == 0} { pass "$name" } else { fail "$name" } } # --protect option proc runprotect { name sz szopts rz rzopts files} { global testdir verbose "Testing $name" 1 exec mkdir $testdir/$name foreach i $files { set bn [file tail $i] exec touch "$testdir/$name/$bn" } set fails [runthem_internal "$name" "$sz" "$szopts" "$rz" "$rzopts" \ "$files" "" dummy] foreach i $files { set bn [file tail $i] set f "$testdir/$name/$bn" if {[file size $f] != 0} { incr fails send_log "$f: size !=0 - overwritten, nit protected\n" } else { catch "file delete $f" dummy } } if {$fails == 0} { set res [catch "exec rmdir $testdir/$name" dummy] if {$res != 0} { incr fails } } if {$fails == 0} { pass "$name" } else { fail "$name" } } lrzsz-0.12.21rc/testsuite/lrzsz/ 775 764 764 0 6760042375 11707 5lrzsz-0.12.21rc/testsuite/lrzsz/abuse.exp 666 764 764 412 6607440604 13500 load_lib "lrzsz.exp" if $tracelevel then { strace $tracelevel } # sz <-> sz runabuse abuse-sz $objdir/../src/lsz "-q" \ $objdir/../src/lsz "-q $z_test_files" "$z_test_files" # rz <-> rz runabuse abuse-rz $objdir/../src/lrz "-q" \ $objdir/../src/lrz "-q" "" lrzsz-0.12.21rc/testsuite/lrzsz/command.exp 666 764 764 4531 6607440604 14045 load_lib "lrzsz.exp" if $tracelevel then { strace $tracelevel } # i would really like to throw that code out of zmodem ... # but then again: somebody might need it, and it's disabled by default. # so check first: is it _really_ disabled? #puts RES=[getenv ZMODEM_RESTRICTED] if {[string compare [getenv ZMODEM_RESTRICTED] ""] != 0} { unsetenv ZMODEM_RESTRICTED } proc runcommand { name sz szopts rz rzopts expect_fail} { global MYTEMP global testdir set magic XXXYYYZZZ verbose "Testing $name" 1 catch "exec rm -f $testdir/command_tmp" set fails [runthem_internal "$name" "$sz" "$szopts" "$rz" "$rzopts" \ "\\\"echo $magic \\>$testdir/command_tmp\\\"" "mkdir,rmdir" dummy] if {[file exists $testdir/command_tmp] == 0} { set fails 1; } if {$fails == 0} { catch "set dummy [grep $testdir/command_tmp $magic]" if [string compare $magic $dummy] { incr fails send_log "grep fetch not $magic\n"; } } else { send_log "call failed\n"; } if [string compare $expect_fail "OK"] { if {$fails > 0} { set fails 0; } else { set fails 1; } } if {$fails == 0} { pass "$name" } else { fail "$name" } } runcommand command-disabled $objdir/../src/lsz "-q -c" \ "$objdir/../src/lrz" "" FAIL runcommand command-enabled-restricted $objdir/../src/lsz "-q -c" \ "$objdir/../src/lrz" "-C" FAIL runcommand command-enabled-unrestricted $objdir/../src/lsz "-q -c" \ "$objdir/../src/lrz" "--unrestrict --allow-commands" OK # same for -i runcommand i-command-disabled $objdir/../src/lsz "-q -i" \ "$objdir/../src/lrz" "" FAIL runcommand i-command-enabled-restricted $objdir/../src/lsz "-q -i" \ "$objdir/../src/lrz" "-C" FAIL runcommand i-command-enabled-unrestricted $objdir/../src/lsz "-q -i" \ "$objdir/../src/lrz" "--unrestrict --allow-commands" OK # basic tests done #set and unset ZMODEM_RESTRICTED. Should work. runcommand command-restricted-by-env "$objdir/../src/lsz" "-q -c" \ "env ZMODEM_RESTRICTED=1 sh -c '$objdir/../src/lrz -qUC'" "" OK # "strace -vfs 128 -o /tmp/o2 env ZMODEM_RESTRICTED=1 sh -c \"$objdir/../src/lrz -qUC\"" "" OK # must not work. runcommand command-rbash-receiver "$objdir/../src/lsz" "-q -c" \ "env SHELL=rbash sh -c '$objdir/../src/lrz -qUC'" "" FAIL # must not work. runcommand command-rbash-sender "env SHELL=rbash sh -c '$objdir/../src/lsz -qc'" "" \ "$objdir/../src/lrz" "-qUC" FAIL lrzsz-0.12.21rc/testsuite/lrzsz/compatability.exp 664 764 764 4442 6760034251 15264 load_lib "lrzsz.exp" if $tracelevel then { strace $tracelevel } set omen_sz [which omen.sz] set omen_rz [which omen.rz] set zmtx [which zmtx] set zmrx [which zmrx] # one short file - omen is slow ... set files "$srcdir/../src/lsz.c $srcdir/../src/lsyslog.c" if [string compare "$omen_sz" 0] { set bn [file tail $omen_sz] runthem compat-$bn $omen_sz "" \ $objdir/../src/lrz "-q" $files runthem compat-$bn-delay $omen_sz "" \ $objdir/../src/lrz "-q --delay-startup 10" $files # oops. omen.sz has a really bad error behaviour runthem compat-$bn-errors $omen_sz "" \ $objdir/../src/lrz "-q --errors 32768" $files } else { set bn [file tail $omen_sz] unsupported "compat-omen-sz: omen.sz not available" unsupported "compat-omen-sz-delay: omen.sz not available" unsupported "compat-omen-sz-errors: omen.sz not available" } if [string compare "$zmtx" 0] { set bn [file tail $zmtx] runthem compat-$bn $zmtx "" \ $objdir/../src/lrz "-q" $files runthem compat-$bn-delay $zmtx "" \ $objdir/../src/lrz "-q --delay-startup 10" $files runthem compat-$bn-errors $zmtx "" \ $objdir/../src/lrz "-q --errors 32768" $files } else { unsupported "compat-zmtx: zmtx not available" unsupported "compat-zmtx-delay: zmtx not available" unsupported "compat-zmtx-errors: zmtx not available" } if [string compare "$omen_rz" 0] { set bn [file tail $omen_rz] runthem compat-$bn $objdir/../src/lsz "-q" \ $omen_rz "" $files runthem compat-$bn-delay "$objdir/../src/lsz" "-q --delay-startup 10" \ $omen_rz "" $z_test_files runthem compat-$bn-turbo "$objdir/../src/lsz" "-q --turbo" \ $omen_rz "" $z_test_files } else { unsupported "compat-omen_rz: omen.rz bn not available" unsupported "compat-omen_rz-delay: omen.rz bn not available" unsupported "compat-omen_rz-errors: omen.rz not available" } if [string compare "$zmrx" 0] { set bn [file tail $zmrx] runthem compat-$bn $objdir/../src/lsz "-q" \ $zmrx "" $files runthem compat-$bn-delay "$objdir/../src/lsz" "-q --delay-startup 10" \ $zmrx "" $z_test_files runthem compat-$bn-turbo "$objdir/../src/lsz" "-q --turbo" \ $zmrx "" $z_test_files } else { unsupported "compat-zmrx: zmrx bn not available" unsupported "compat-zmrx-delay: zmrx bn not available" unsupported "compat-zmrx-errors: zmrx not available" } unset bn lrzsz-0.12.21rc/testsuite/lrzsz/crc.exp 666 764 764 16717 6613565415 13234 load_lib "lrzsz.exp" if $tracelevel then { strace $tracelevel } # ZMCRC test. Belongs to filemanagment ... # Part 1: file exists, same length, crc identical. sender init set name crc-check-sender-equal-crc exec mkdir $testdir/$name exec cp -p $objdir/../src/lrz $testdir/$name/lrz # this deals with different touch -t conventions. (POSIX/pre-posix-HPUX in this case) catch "exec sh -c \"touch -t 020304051980.06 $testdir/$name/lrz || touch -t 198002030405.06 $testdir/$name/lrz\"" dummy catch "exec ls -l $testdir/$name/lrz 2>/dev/null" timestamp set fails [runthem_internal $name "$objdir/../src/lsz -B 10240" "-q --crc-check" \ $objdir/../src/lrz "-q" \ "$objdir/../src/lrz" "" dummy] if {$fails == 0} { set res [catch "exec cmp $objdir/../src/lrz $testdir/$name/lrz" dummy] if {$res == 0} { catch "exec ls -l $testdir/$name/lrz 2>/dev/null" dummy if {0!=[string compare "$dummy" "$timestamp"]} { send_log "timestamp changed\n" send_log "1. $timestamp\n" send_log "2. $dummy\n" incr fails } else { send_log "timestamp ok\n" send_log "1. $timestamp\n" send_log "2. $dummy\n" } } else { send_log "files not identical: cmp told\n" send_log "$dummy\n" incr fails } } else { incr fails } if {$fails == 0} { pass "$name" exec rm -rf $testdir/$name } else { fail "$name" } unset name fails dummy timestamp # Part 2: file exists, same length, crc identical. sender init. no mmap # (ZCRC code on sender side is different if using mmap) set name crc-check-sender-equal-crc-no-mmap exec mkdir $testdir/$name exec cp -p $objdir/../src/lrz $testdir/$name/lrz catch "exec sh -c \"touch -t 020304051980.06 $testdir/$name/lrz || touch -t 198002030405.06 $testdir/$name/lrz\"" dummy catch "exec ls -l $testdir/$name/lrz 2>/dev/null" timestamp set fails [runthem_internal $name "/tmp/out $objdir/../src/lsz -B 10240" "-q --crc-check" \ $objdir/../src/lrz "-q" \ "$objdir/../src/lrz" "" dummy] if {$fails == 0} { set res [catch "exec cmp $objdir/../src/lrz $testdir/$name/lrz" dummy] if {$res == 0} { catch "exec ls -l $testdir/$name/lrz 2>/dev/null" dummy if {0!=[string compare "$dummy" "$timestamp"]} { send_log "timestamp changed\n" send_log "1. $timestamp\n" send_log "2. $dummy\n" incr fails } else { send_log "timestamp ok\n" send_log "1. $timestamp\n" send_log "2. $dummy\n" } } else { send_log "files not identical: cmp told\n" send_log "$dummy\n" incr fails } } else { incr fails } if {$fails == 0} { pass "$name" exec rm -rf $testdir/$name } else { fail "$name" } unset name fails dummy timestamp # Part 3: file exists, same length, crc identical. receiver init set name crc-check-receiver-equal-crc exec mkdir $testdir/$name exec cp -p $objdir/../src/lrz $testdir/$name/lrz catch "exec sh -c \"touch -t 020304051980.06 $testdir/$name/lrz || touch -t 198002030405.06 $testdir/$name/lrz\"" dummy catch "exec ls -l $testdir/$name/lrz 2>/dev/null" timestamp set fails [runthem_internal $name "$objdir/../src/lsz" "-q" \ $objdir/../src/lrz "-q --crc-check" \ "$objdir/../src/lrz" "" dummy] if {$fails == 0} { set res [catch "exec cmp $objdir/../src/lrz $testdir/$name/lrz" dummy] if {$res == 0} { catch "exec ls -l $testdir/$name/lrz 2>/dev/null" dummy if {0!=[string compare "$dummy" "$timestamp"]} { send_log "timestamp changed\n" send_log "1. $timestamp\n" send_log "2. $dummy\n" incr fails } else { send_log "timestamp ok\n" send_log "1. $timestamp\n" send_log "2. $dummy\n" } } else { send_log "files not identical: cmp told\n" send_log "$dummy\n" incr fails } } else { incr fails } if {$fails == 0} { pass "$name" exec rm -rf $testdir/$name } else { fail "$name" } unset name fails dummy timestamp # from now on ignore who initiates the crc-check. We know that both sides # can init it, from Part 1 & 2. exec logger 4 # Part 4: file exists, same length, crc differs. set name crc-check-diff-crc exec mkdir $testdir/$name exec cp $objdir/../src/lrz $testdir/$name/lrz catch "exec dd if=$srcdir/../src/lrz.c of=$testdir/$name/lrz conv=notrunc bs=512 count=1" set fails [runthem_internal $name "$objdir/../src/lsz" "-q --crc-check" \ "$objdir/../src/lrz" "-q" \ "$objdir/../src/lrz" "rmdir,compare,delete" dummy] if {$fails == 0} { pass "$name" exec rm -rf $testdir/$name } else { fail "$name" } unset name fails dummy # Part 5: file exists, different length, same crc. set name crc-check-diff-len exec mkdir $testdir/$name catch "exec dd if=$srcdir/../src/lrz.c of=$testdir/$name/lrz.c conv=notrunc bs=256 count=81" set fails [runthem_internal $name "$objdir/../src/lsz" "-q --crc-check" \ $objdir/../src/lrz "-q" \ "$srcdir/../src/lrz.c" "rmdir,compare,delete" dummy] if {$fails == 0} { pass "$name" exec rm -rf $testdir/$name } else { fail "$name" } unset name fails dummy exec logger 6 # Part 6: file exists, different length, diff crc. set name crc-check-diff-len-crc exec mkdir $testdir/$name catch "exec dd if=$srcdir/../src/lrz.c of=$testdir/$name/lrz.c conv=notrunc bs=256 count=81" catch "exec dd if=$objdir/../src/lrz of=$testdir/$name/lrz.c conv=notrunc bs=512 count=1" set fails [runthem_internal $name "$objdir/../src/lsz" "-q --crc-check" \ $objdir/../src/lrz "-q" \ "$srcdir/../src/lrz.c" "rmdir,compare,delete" dummy] if {$fails == 0} { pass "$name" exec rm -rf $testdir/$name } else { fail "$name" } unset name fails dummy exec logger 7 # Part 7: file exists, different length, same crc. try resume set name crc-check-diff-len-resume-sender exec mkdir $testdir/$name catch "exec dd if=$srcdir/../src/lrz.c of=$testdir/$name/lrz.c conv=notrunc bs=256 count=81" set fails [runthem_internal $name "$objdir/../src/lsz" "-q -r --crc-check" \ $objdir/../src/lrz "-q" \ "$srcdir/../src/lrz.c" "rmdir,compare,delete" dummy] if {$fails == 0} { pass "$name" exec rm -rf $testdir/$name } else { fail "$name" } unset name fails dummy exec logger part 8 # Part 8: file exists, different length, same crc. try resume (receiver) set name crc-check-diff-len-resume-receiver exec mkdir $testdir/$name catch "exec dd if=$srcdir/../src/lrz.c of=$testdir/$name/lrz.c conv=notrunc bs=256 count=81" set fails [runthem_internal $name "$objdir/../src/lsz" "-q --crc-check" \ $objdir/../src/lrz "-q -r" \ "$srcdir/../src/lrz.c" "rmdir,compare,delete" dummy] if {$fails == 0} { pass "$name" exec rm -rf $testdir/$name } else { fail "$name" } unset name fails dummy exec logger part 9 # Part 9: file exists, different length + crc. try resume (sender) set name crc-check-diff-len-resume-receiver exec mkdir $testdir/$name catch "exec dd if=$srcdir/../src/lrz.c of=$testdir/$name/lrz.c conv=notrunc bs=256 count=81" catch "exec dd if=$objdir/../src/lrz of=$testdir/$name/lrz.c conv=notrunc bs=512 count=1" set fails [runthem_internal $name "$objdir/../src/lsz" "-q --crc-check -r" \ $objdir/../src/lrz "-q" \ "$srcdir/../src/lrz.c" "rmdir,compare,delete" dummy] if {$fails == 0} { pass "$name" exec rm -rf $testdir/$name } else { fail "$name" } unset name fails dummy exec logger part 10 # Part 9: file exists, different crc, same length. try resume (sender) set name crc-check-diff-crc-resume-receiver exec mkdir $testdir/$name catch "exec dd if=$srcdir/../src/lrz.c of=$testdir/$name/lrz.c conv=notrunc" catch "exec dd if=$objdir/../src/lrz of=$testdir/$name/lrz.c conv=notrunc bs=512 count=1" set fails [runthem_internal $name "$objdir/../src/lsz" "-q --crc-check -r" \ $objdir/../src/lrz "-q" \ "$srcdir/../src/lrz.c" "rmdir,compare,delete" dummy] if {$fails == 0} { pass "$name" exec rm -rf $testdir/$name } else { fail "$name" } unset name fails dummy lrzsz-0.12.21rc/testsuite/lrzsz/manage.exp 666 764 764 6276 6607440604 13667 load_lib "lrzsz.exp" if $tracelevel then { strace $tracelevel } # File management test, Part 1: Append, sender initiated runappend sender-init-append $objdir/../src/lsz "-q --append" \ $objdir/../src/lrz "-q" \ "$srcdir/../src/lsz.c" # File management test, Part 2: Append, receiver initiated runappend receiver-init-append $objdir/../src/lsz "-q" \ $objdir/../src/lrz "-q --append" \ "$srcdir/../src/lsz.c" # File management test, Part 3: renaming, sender initiated runrename sender-init-rename $objdir/../src/lsz "-q --rename" \ $objdir/../src/lrz "-q" \ "$z_test_files" # File management test, Part 4: renaming, receiver initiated runrename receiver-init-rename $objdir/../src/lsz "-q" \ "$objdir/../src/lrz" "-q --rename" \ "$z_test_files" # File management test, Part 5: protecting, sender init runprotect sender-init-protect $objdir/../src/lsz "-q --protect" \ $objdir/../src/lrz "-q" \ "$z_test_files" # File management test, Part 6: protect, receiver initiated runprotect receiver-init-protect $objdir/../src/lsz "-q" \ "$objdir/../src/lrz" "-q --protect" \ "$z_test_files" # File management test, Part 7: sender wishes renaming, receiver overwriting. runthem receiver-overwrite $objdir/../src/lsz "-q --rename" \ $objdir/../src/lrz "-q --overwrite" \ "$z_test_files" # File management test, Part 8: sender to write only existing, # but file does not exist set fail_is_ok 1 runthem sender-overwrite-or-skip $objdir/../src/lsz "-q --overwrite-or-skip" \ "$objdir/../src/lrz" "-q" \ "$objdir/../src/lrz" unset fail_is_ok # Part 9: touch file ... set name sender-overwrite-or-skip2 exec mkdir $testdir/$name exec touch $testdir/$name/lrz set fails [runthem_internal $name $objdir/../src/lsz "-q --overwrite-or-skip" \ $objdir/../src/lrz "-q" \ "$objdir/../src/lrz" "compare,delete,rmdir" dummy] if {$fails == 0} { pass "$name" } else { fail "$name" } unset name exec logger 10 # Part 10: file exists, sender doesn't wish to overwrite set name sender-overwrite-fail exec mkdir $testdir/$name exec touch $testdir/$name/lrz set fail_is_ok 1 set fails [runthem_internal $name $objdir/../src/lsz "-q" \ $objdir/../src/lrz "-q" \ "$objdir/../src/lrz" "compare,delete,rmdir" dummy] unset fail_is_ok if {$fails == 0} { pass "$name" } else { fail "$name" } unset name exec logger 11 # Part 11: file exists, sender wishes to overwrite set name sender-overwrite exec mkdir $testdir/$name exec touch $testdir/$name/lrz set fails [runthem_internal $name $objdir/../src/lsz "-q --overwrite" \ $objdir/../src/lrz "-q" \ "$objdir/../src/lrz" "compare,delete,rmdir" dummy] if {$fails == 0} { pass "$name" } else { fail "$name" } unset name exec logger 12 # part 12: sender unlinks. set name sender-unlink exec mkdir $testdir/$name exec cp $objdir/../src/lrz $testdir/LRZ set fails [runthem_internal $name $objdir/../src/lsz "-q --unlink" \ $objdir/../src/lrz "-q" \ "$testdir/LRZ" "" dummy] if [file exists $testdir/LRZ] { incr fails send_log "sender failed to unlink file\n" } set res [catch "exec cmp $objdir/../src/lrz $testdir/$name/LRZ" dummy] if {$res != 0} { send_log "$i: not identical: cmp told\n" send_log "$dummy\n" incr fails } if {$fails == 0} { pass "$name" } else { fail "$name" } unset name unset fails lrzsz-0.12.21rc/testsuite/lrzsz/newer.exp 666 764 764 6152 6607440604 13550 load_lib "lrzsz.exp" if $tracelevel then { strace $tracelevel } # check wether --newer option works # case a: should not work if existing file is younger set name sz-newer-fail exec mkdir $testdir/$name exec cp -p $srcdir/../src/lrz.c $testdir/LRZ # so existing file ist younger. exec touch $testdir/$name/LRZ set fail_is_ok 1 set fails [runthem_internal $name $objdir/../src/lsz "-q --newer" \ $objdir/../src/lrz "-q" \ "$testdir/LRZ" "compare" dummy] unset fail_is_ok if {[file size $testdir/$name/LRZ] != 0} { send_log "file has been overwritten\n" incr fails } if {$fails == 0} { exec rm -rf $testdir/$name pass "$name" } else { fail "$name" } unset name unset fails set name rz-newer-fail exec mkdir $testdir/$name exec cp -p $srcdir/../src/lrz.c $testdir/LRZ # so existing file ist younger. exec touch $testdir/$name/LRZ set fail_is_ok 1 set fails [runthem_internal $name $objdir/../src/lsz "-q" \ $objdir/../src/lrz "-q --newer" \ "$testdir/LRZ" "compare" dummy] unset fail_is_ok if {[file size $testdir/$name/LRZ] != 0} { send_log "file has been overwritten\n" incr fails } if {$fails == 0} { exec rm -rf $testdir/$name pass "$name" } else { fail "$name" } unset name unset fails # check wether --newer option works # case b: should work if existing file is older set name sz-newer-ok exec mkdir $testdir/$name exec cp -p $objdir/../src/lrz $testdir/LRZ exec touch -r $srcdir/../src/lrz.c $testdir/$name/LRZ set fails [runthem_internal $name $objdir/../src/lsz "-q --newer" \ "$objdir/../src/lrz" "-q" \ "$testdir/LRZ" "compare" dummy] if {$fails == 0} { exec rm -rf $testdir/$name pass "$name" } else { fail "$name" } unset name unset fails # case b: should work if existing file is older set name rz-newer-ok exec mkdir $testdir/$name exec cp -p $objdir/../src/lrz $testdir/LRZ exec touch -r $srcdir/../src/lrz.c $testdir/$name/LRZ set fails [runthem_internal $name $objdir/../src/lsz "-q" \ "$objdir/../src/lrz" "-q --newer" \ "$testdir/LRZ" "compare" dummy] if {$fails == 0} { exec rm -rf $testdir/$name pass "$name" } else { fail "$name" } unset name unset fails # check wether --newer-or-longer option works set name sz-newer-or-longer exec mkdir $testdir/$name exec cp -p $srcdir/../src/lrz.c $testdir/LRZ # so existing file ist younger. exec touch $testdir/$name/LRZ set fails [runthem_internal $name $objdir/../src/lsz "-q --newer-or-longer" \ "$objdir/../src/lrz" "-q" \ "$testdir/LRZ" "compare" dummy] if {[file size $testdir/$name/LRZ] == 0} { send_log "file has not been overwritten\n" incr fails } if {$fails == 0} { exec rm -rf $testdir/$name pass "$name" } else { fail "$name" } unset name unset fails set name rz-newer-or-longer exec mkdir $testdir/$name exec cp -p $srcdir/../src/lrz.c $testdir/LRZ # so existing file ist younger. exec touch $testdir/$name/LRZ set fails [runthem_internal $name $objdir/../src/lsz "-q" \ "$objdir/../src/lrz" "-q --newer-or-longer" \ "$testdir/LRZ" "compare" dummy] if {[file size $testdir/$name/LRZ] == 0} { send_log "file has not been overwritten\n" incr fails } if {$fails == 0} { exec rm -rf $testdir/$name pass "$name" } else { fail "$name" } unset name unset fails lrzsz-0.12.21rc/testsuite/lrzsz/null.exp 644 764 764 2206 6760034011 13361 load_lib "lrzsz.exp" if $tracelevel then { strace $tracelevel } # why ascii mode? xmodem in binary mode appends ^Zs to pad blocks ... # exec sh -c "rm -f $objdir/null ; touch $objdir/null"; runxmodem xmodem $objdir/../src/lsz "-qa" \ $objdir/../src/lrz "-qa" $objdir/null runxmodem xmodem-1k $objdir/../src/lsz "-qa --1024" \ $objdir/../src/lrz "-qa" $objdir/null runxmodem xmodem-crc $objdir/../src/lsz "-qa" \ $objdir/../src/lrz "-qa --with-crc" $objdir/null runthem ymodem $objdir/../src/lsz "-q --ymodem" \ $objdir/../src/lrz "-q --ymodem" $objdir/null runthem ymodem-1k $objdir/../src/lsz "-q --ymodem --1024" \ $objdir/../src/lrz "-q --ymodem" $objdir/null runthem zmodem $objdir/../src/lsz "-q" \ $objdir/../src/lrz "-q" $objdir/null runthem zmodem-buffered $objdir/../src/lsz "-q $SZBUFSIZE" \ $objdir/../src/lrz "-q $SZBUFSIZE" $objdir/null runthem zmodem-turbo $objdir/../src/lsz "-qT" \ $objdir/../src/lrz "-q" $objdir/null runthem zmodem4k $objdir/../src/lsz "-q4" \ $objdir/../src/lrz "-q" $objdir/null runthem zmodem-start4k $objdir/../src/lsz "-q44" \ $objdir/../src/lrz "-q" $objdir/null exec sh -c "rm -f $objdir/null"; lrzsz-0.12.21rc/testsuite/lrzsz/path.exp 666 764 764 1037 6607440604 13361 load_lib "lrzsz.exp" if $tracelevel then { strace $tracelevel } # check wether --junk-path and --full-path work. runthem junk-and-full $objdir/../src/lsz "-q --full-path" \ $objdir/../src/lrz "-q --junk-path" \ "$objdir2/src/lsz" # --full-path alone, must fail set fail_is_ok 1 runthem full-only $objdir/../src/lsz "-q --full-path" \ $objdir/../src/lrz "-q" \ "$objdir2/src/lsz" unset fail_is_ok # --junk-path alone, must work runthem junk-only $objdir/../src/lsz "-q" \ "$objdir/../src/lrz" "-q --junk-path" \ "$objdir2/src/lsz" lrzsz-0.12.21rc/testsuite/lrzsz/resume.exp 666 764 764 347 6607440604 13710 load_lib "lrzsz.exp" if $tracelevel then { strace $tracelevel } runresume sz-r $objdir/../src/lsz "-qr" \ $objdir/../src/lrz "-q" $z_test_files runresume rz-r $objdir/../src/lsz "-q" \ $objdir/../src/lrz "-qr" $z_test_files lrzsz-0.12.21rc/testsuite/lrzsz/timing.exp 666 764 764 1235 6607440604 13714 load_lib "lrzsz.exp" if $tracelevel then { strace $tracelevel } send_user "*** these test take some time ***\n" # delay startup for 10 seconds runthem zmodem-delay-sz $objdir/../src/lsz "-q --delay-startup 10" \ $objdir/../src/lrz "-q" $z_test_files runthem zmodem-delay-rz $objdir/../src/lsz "-q" \ $objdir/../src/lrz "-q --delay-startup 10" $z_test_files # combine with --stop-at set fail_is_ok 1 runthem zmodem-sz-stops $objdir/../src/lsz "-q --stop-at +10" \ $objdir/../src/lrz "-q --delay-startup 12" $z_test_files runthem zmodem-rz-stops $objdir/../src/lsz "-q --delay-startup 12" \ $objdir/../src/lrz "-q --stop-at +10" $z_test_files unset fail_is_ok lrzsz-0.12.21rc/testsuite/lrzsz/uppercase.exp 666 764 764 1135 6607440604 14413 load_lib "lrzsz.exp" if $tracelevel then { strace $tracelevel } # check case conversion behavoiur # no way to check with zmodem - zmodem does no case conversion. # check --keep-uppercase option exec cp $srcdir/../src/lrz.c $testdir/LRZC runthem ymodem-keep-uppercase $objdir/../src/lsz "-q --ymodem" \ $objdir/../src/lrz "-q --ymodem --keep-uppercase" $testdir/LRZC # reverse case ... case conversion works? set fail_is_ok 1 runthem ymodem-try-uppercase $objdir/../src/lsz "-q --ymodem --no-unixmode" \ "$objdir/../src/lrz" "--ymodem -q" "$testdir/LRZC" unset fail_is_ok exec rm -f $testdir/LRZC lrzsz-0.12.21rc/testsuite/lrzsz/window.exp 666 764 764 621 6607440604 13712 load_lib "lrzsz.exp" if $tracelevel then { strace $tracelevel } # well, we _cannot_ see the difference - without, maybe, a buffering program # between sender and receiver. runthem zmodem-sz-window "$objdir/../src/lsz" "-q --window 2048" \ "$objdir/../src/lrz" "-q" "$z_test_files" runthem zmodem-rz-window "$objdir/../src/lsz" "-q" \ "$objdir/../src/lrz" "-q --window 2048" "$z_test_files" lrzsz-0.12.21rc/testsuite/lrzsz/xmodem.exp 666 764 764 644 6607440604 13701 load_lib "lrzsz.exp" if $tracelevel then { strace $tracelevel } # why ascii mode? xmodem in binary mode appends ^Zs to pad blocks ... # runxmodem xmodem $objdir/../src/lsz "-qa" \ $objdir/../src/lrz "-qa" $x_test_files runxmodem xmodem-1k $objdir/../src/lsz "-qa --1024" \ $objdir/../src/lrz "-qa" $x_test_files runxmodem xmodem-crc $objdir/../src/lsz "-qa" \ $objdir/../src/lrz "-qa --with-crc" $x_test_files lrzsz-0.12.21rc/testsuite/lrzsz/ymodem.exp 666 764 764 425 6607440604 13677 load_lib "lrzsz.exp" if $tracelevel then { strace $tracelevel } runthem ymodem $objdir/../src/lsz "-q --ymodem" \ $objdir/../src/lrz "-q --ymodem" $y_test_files runthem ymodem-1k $objdir/../src/lsz "-q --ymodem --1024" \ $objdir/../src/lrz "-q --ymodem" $y_test_files lrzsz-0.12.21rc/testsuite/lrzsz/zmodem-crc16.exp 666 764 764 336 6607440604 14615 load_lib "lrzsz.exp" if $tracelevel then { strace $tracelevel } # check 16 bit crc # only sender knows this option runthem zmodem-crc16-sz $objdir/../src/lsz "-q --16-bit-crc" \ $objdir/../src/lrz "-q" $z_test_files lrzsz-0.12.21rc/testsuite/lrzsz/zmodem-escape.exp 666 764 764 613 6607440604 15135 load_lib "lrzsz.exp" if $tracelevel then { strace $tracelevel } # check --escape option runthem zmodem-escape-sz $objdir/../src/lsz "-q --escape" \ $objdir/../src/lrz "-q" $z_test_files runthem zmodem-escape-rz $objdir/../src/lsz "-q" \ $objdir/../src/lrz "-q -e" $z_test_files runthem zmodem-escape-both $objdir/../src/lsz "-q --escape" \ $objdir/../src/lrz "-q --escape" $z_test_files lrzsz-0.12.21rc/testsuite/lrzsz/zmodem.exp 666 764 764 2354 6607440604 13723 load_lib "lrzsz.exp" if $tracelevel then { strace $tracelevel } runthem zmodem $objdir/../src/lsz "-q" \ $objdir/../src/lrz "-q" $z_test_files runthem zmodem-buffered $objdir/../src/lsz "-q $SZBUFSIZE" \ $objdir/../src/lrz "-q $SZBUFSIZE" $z_test_files runthem zmodem-turbo $objdir/../src/lsz "-qT" \ $objdir/../src/lrz "-q" $z_test_files runthem zmodem4k $objdir/../src/lsz "-q4" \ $objdir/../src/lrz "-q" $z_test_files runthem zmodem-start4k $objdir/../src/lsz "-q44" \ $objdir/../src/lrz "-q" $z_test_files # run this one only if we have something really large? # 8k, turbo, no timout! runthem zmodem8k $objdir/../src/lsz "-q8OT" \ $objdir/../src/lrz "-qO" "$z_test_files $z8_test_files" runthem zmodem-start8k $objdir/../src/lsz "-q88OT" \ $objdir/../src/lrz "-qO" $z_test_files # write to /dev/null - keeps buffer cache influence low. runthem0 zmodem8k0 $objdir/../src/lsz "-q8OT" \ $objdir/../src/lrz "-qDO" "$z_test_files $z8_test_files" # check error behaviour runthem zmodem-errors $objdir/../src/lsz "-q8" \ $objdir/../src/lrz "-q --errors 32768" $z_test_files # try o-sync option # might be useless if the system doesn't support O_SYNC. runthem zmodem-o-sync $objdir/../src/lsz "-q" \ $objdir/../src/lrz "-q --o-sync" $z_test_files